/home/coolpkct/www/websites/cake3.cool.rocks/admin/commands/pagecustomize.php
<?php
/**
 * Part of Showkase web site management package
 *
 * @package Showkase
 * @author Jack Hardie {@link http://www.jhardie.com}
 * @copyright Copyright (c) 2013, SimpleViewer Inc.
 */
 defined('SK_ACCESS')||die('<h1>403: Forbidden</h1>');
 $sep = DIRECTORY_SEPARATOR;
 require_once "commands{$sep}command.php" ;
 require_once "classes{$sep}pagecustomizescreen.php";
 require_once "classes{$sep}pagefactory.php";
 require_once "classes{$sep}pageset.php";
 require_once "classes{$sep}helpers.php";
 require_once "classes{$sep}publisher.php";
 require_once "classes{$sep}themeset.php";
 require_once "classes{$sep}nav.php";
 require_once "classes{$sep}galleryindex.php";
 require_once "classes{$sep}urlify.php";
 require_once "classes{$sep}skconfig.php";
 
/**
 * Command - show customize
 * Be careful of interactions between changing the folder and other settings
 * @package Showkase
 */
 class PageCustomize extends Command {
    function doExecute( Request $request ) {
        $config = SkConfig::getInstance();
        $pageSet = new PageSet();
        $themeSet = new ThemeSet();
        $pageFactory = new PageFactory($themeSet);
        $context = array(
            'token' => $request->newToken(),
            'pageTypes' => $themeSet->getPageTypes()
        );
        $pageIndex = $pageSet->getCurrentPageIndex($request);
        $_SESSION['pageIndex'] = $pageIndex;
        $pageRef = $pageSet->getPageRef($pageIndex); 
        $pageType = $pageSet->getPageType($pageIndex);
        $pagePath = $pageSet->getPagePath($pageIndex);
        $page = $pageFactory->make($pageType, $pageRef, $pagePath);
        if (!$page->isSupportedPageType()) {
            Board::addMessage('Current theme does not support <i>'.$pageType.'</i> page type.', 'warning');
        }
        $oldNavName = $page->getNavName();
        $post = $request->getPost();
        if ($request->propertyIsSet('showPro')) {
                $pageSet->setPagesPref('showPro', (boolean)$request->getProperty('showPro'));
                $pageSet->savePagesPrefs();
            }
        if ($request->propertyIsSet('customizesubmitted')) {
            if (!$request->validatePost()) {
                Board::addMessage('No action. Re-submission or remote submission is not allowed.', 'warning');
                $screen = new PageCustomizeScreen($page, 'pages customize');
                print $screen->getHtml($context);
            }
            // change folder first
            if ($post['ss_navName'] != $oldNavName)
            {
              try {
                  if (empty($post['ss_navName'])) {
                      throw new Exception('Invalid entry for nav name. Name has not been changed.');
                  }
                  //URLify::filter lets Asian characters through in certain php versions
                  $newFolder = URLify::transliterate($post['ss_navName']);
                  $newFolder = Helpers::slugFolder($newFolder);
                  if (empty($newFolder)) {
                      $i = 1;
                      while (
                          file_exists(
                              $newPath = $config->getRelativeContentPath(
                                  getcwd()
                              )
                              .'page-'
                              .$i
                          )
                      ) {
                          $i++;
                      }
                      $newFolder = 'page-'.$i;
                  }
                  $newPath = dirname($pagePath).DIRECTORY_SEPARATOR.$newFolder.DIRECTORY_SEPARATOR;
                  // allow for name case changes without changing the directory
                  if ($newFolder != basename($pagePath)) {
                    $page->renameFolder($newPath);
                  }
                  $page = $pageFactory->make($pageType, $pageRef, $newPath);
                  $pageSet->setPagePath($pageIndex, $newPath);
                  $pageSet->savePagesData();
              } catch (Exception $e) {
                  Board::addExceptionMessage($e, 'error');
                  $post['ss_navName'] = $oldNavName;
              }
            }
            try {
                $changes = $page->customize($post);
                if (isset ($page->gallery)) {
                    $page->gallery->saveGallery();
                }
                $page->saveLayer();
                $pageSet->setPagesDataIsGallery($pageIndex, isset ($page->gallery));
                $pageSet->setPagesDataParentPage($pageIndex, $page->getParentPage());
                $pageSet->setPagesDataNavWeight($pageIndex, $page->getNavWeight());
                $pageSet->setPagesDataNavName($pageIndex, $page->getNavName());
                $pageSet->setPagesDataNavShow($pageIndex, $page->getNavShow());
                $pageSet->setPagesDataIndexShow($pageIndex, $page->getIndexShow());
                $pageSet->setPagesDataSupported($pageIndex, $page->isSupportedPageType());
                $pageSet->savePagesData();
                $page->savePageHtml(new Nav($pageFactory, $pageSet), new GalleryIndex($pageSet));
                Board::addMessage('Page settings saved');
                $triggers = array('ss_navName', 'ss_navWeight', 'ss_navShow', 'ss_indexShow', 'ss_parentPage', 'ss_customNavUrl', 'ss_customNavTarget');
                if(count(array_intersect($triggers, $changes)) > 0) {
                    $pageSet->setPagesPref('publishing', 'unpublished');
                    $pageSet->savePagesPrefs();
                }
            } catch (Exception $e) {
                Board::addExceptionMessage($e);
            }
        }
        $context['showPro'] = $pageSet->getPagesPref('showPro');
        $screen = new PageCustomizeScreen($page, 'pages customize');
        print $screen->getHtml($context);
    }
}