Файл: concrete5.7.5.6/concrete/controllers/single_page/dashboard/pages/types.php
Строк: 115
<?php
namespace ConcreteControllerSinglePageDashboardPages;
use ConcreteCoreErrorError;
use ConcreteCorePageControllerDashboardPageController;
use PageType;
use Loader;
use PageTemplate;
use ConcreteCorePageTypePublishTargetType as PageTypePublishTargetType;
class Types extends DashboardPageController
{
public function page_type_added()
{
$this->set('success', t('Page Type added successfully.'));
$this->view();
}
public function page_type_updated()
{
$this->set('success', t('Page type updated successfully.'));
$this->view();
}
public function page_type_duplicated()
{
$this->set('success',
t('Page type copied successfully. Important! You will need to re-add any blocks into output areas that you had set on the original page type.'));
$this->view();
}
public function page_type_deleted()
{
$this->set('success', t('Page type deleted successfully.'));
$this->view();
}
public function edit($ptID = false)
{
$cm = PageType::getByID($ptID);
$cmp = new Permissions($cm);
if (!$cmp->canEditPageType()) {
throw new Exception(t('You do not have access to edit this page type.'));
}
$this->set('pagetype', $cm);
$this->set('pageTitle', t('Edit %s Page Type', $cm->getPageTypeDisplayName()));
}
public function view()
{
$pagetypes = PageType::getList();
$this->set('pagetypes', $pagetypes);
}
public function delete($ptID = false)
{
$pagetype = PageType::getByID($ptID);
if (!is_object($pagetype)) {
$this->error->add(t('Invalid page type object.'));
}
$cmp = new Permissions($pagetype);
if (!$cmp->canDeletePageType()) {
$this->error->add(t('You do not have access to delete this page type.'));
}
$count = $pagetype->getPageTypeUsageCount();
if ($count > 0) {
$this->error->add(t2(
'This page type is in use on %d page.',
'This page type is in use on %d pages.', $count));
}
if (!$this->token->validate('delete_page_type')) {
$this->error->add(t($this->token->getErrorMessage()));
}
if (!$this->error->has()) {
$pagetype->delete();
$this->redirect('/dashboard/pages/types', 'page_type_deleted');
}
$this->view();
}
public function duplicate($ptID = false)
{
$pagetype = PageType::getByID($ptID);
if (!is_object($pagetype)) {
$this->error->add(t('Invalid page type object.'));
}
if (!$this->token->validate('duplicate_page_type')) {
$this->error->add(t($this->token->getErrorMessage()));
}
$vs = Loader::helper('validation/strings');
$sec = Loader::helper('security');
$name = $sec->sanitizeString($this->post('ptName'));
$handle = $sec->sanitizeString($this->post('ptHandle'));
if (!$vs->notempty($name)) {
$this->error->add(t('You must specify a valid name for your page type.'));
}
if (!$vs->handle($handle)) {
$this->error->add(t('You must specify a valid handle for your page type.'));
}
if (!$this->error->has()) {
$pagetype->duplicate($handle, $name);
$this->redirect('/dashboard/pages/types', 'page_type_duplicated');
}
$this->view();
}
public function submit($ptID = false)
{
$pagetype = PageType::getByID($ptID);
if (!is_object($pagetype)) {
$this->error->add(t('Invalid page type object.'));
}
if (!$this->token->validate('update_page_type')) {
$this->error->add(t($this->token->getErrorMessage()));
}
$vs = Loader::helper('validation/strings');
$sec = Loader::helper('security');
$name = $sec->sanitizeString($this->post('ptName'));
$handle = $sec->sanitizeString($this->post('ptHandle'));
if (!$vs->notempty($name)) {
$this->error->add(t('You must specify a valid name for your page type.'));
}
if (!$vs->handle($handle)) {
$this->error->add(t('You must specify a valid handle for your page type.'));
}
$defaultTemplate = PageTemplate::getByID($this->post('ptDefaultPageTemplateID'));
if (!is_object($defaultTemplate)) {
$this->error->add(t('You must choose a valid default page template.'));
}
$templates = array();
if (is_array($_POST['ptPageTemplateID'])) {
foreach ($this->post('ptPageTemplateID') as $pageTemplateID) {
$pt = PageTemplate::getByID($pageTemplateID);
if (is_object($pt)) {
$templates[] = $pt;
}
}
}
if (count($templates) == 0 && $this->post('ptAllowedPageTemplates') == 'C') {
$this->error->add(t('You must specify at least one page template.'));
}
$target = ConcreteCorePageTypePublishTargetTypeType::getByID($this->post('ptPublishTargetTypeID'));
if (!is_object($target)) {
$this->error->add(t('Invalid page type target type.'));
} else {
$pe = $target->validatePageTypeRequest($this->request);
if ($pe instanceof Error) {
$this->error->add($pe);
}
}
if (!$this->error->has()) {
$data = array(
'handle' => $handle,
'name' => $name,
'defaultTemplate' => $defaultTemplate,
'ptLaunchInComposer' => $this->post('ptLaunchInComposer'),
'ptIsFrequentlyAdded' => $this->post('ptIsFrequentlyAdded'),
'allowedTemplates' => $this->post('ptAllowedPageTemplates'),
'templates' => $templates
);
$pagetype->update($data);
$configuredTarget = $target->configurePageTypePublishTarget($pagetype, $this->post());
$pagetype->setConfiguredPageTypePublishTargetObject($configuredTarget);
$this->redirect('/dashboard/pages/types', 'page_type_updated');
}
$this->edit($ptID);
}
}