Perforce Chronicle 2012.2/486814
API Documentation

Site_ThemeController Class Reference

List and apply the site theme. More...

List of all members.

Public Member Functions

 applyAction ()
 Switch themes.
 indexAction ()
 List available themes.
 init ()
 Use management layout for all actions.

Public Attributes

 $contexts

Detailed Description

List and apply the site theme.

Copyright:
2011-2012 Perforce Software. All rights reserved
License:
Please see LICENSE.txt in top-level folder of this distribution.
Version:
2012.2/486814

Member Function Documentation

Site_ThemeController::applyAction ( )

Switch themes.

p4cms.site.theme.disabled Perform operations when a theme is disabled by the Site module. P4Cms_Site $site The site for which the theme is being disabled. P4Cms_Theme $theme The theme being disabled.

p4cms.site.theme.enabled Perform operations when a theme is enabled by the Site module. P4Cms_Site $site The site for which the theme is being enabled. P4Cms_Theme $theme The theme being enabled.

    {
        // enforce permissions
        $this->acl->check('site', 'manage-themes');

        // only respond to post requests.
        $request = $this->getRequest();
        if (!$request->isPost()) {
            throw new Site_Exception(
                "Can't apply theme. Request was not a valid HTTP POST.");
        }

        // get the active site branch config.
        $site   = P4Cms_Site::fetchActive();
        $config = $site->getConfig();

        // change the site theme
        try {
            // notify subscribers of theme disabled event.
            try {
                $theme = P4Cms_Theme::fetch($config->getTheme());
                P4Cms_PubSub::publish('p4cms.site.theme.disabled', $site, $theme);
            } catch (Exception $e) {
                P4Cms_Log::logException("Error disabling active theme.", $e);
            }

            // make the switch.
            $config->setTheme($request->theme)
                   ->save();

            // theme changes can have quite an affect; clear caches
            P4Cms_Cache::clean();

            // notify subscribers of theme enabled event.
            $theme = P4Cms_Theme::fetch($config->getTheme());
            P4Cms_PubSub::publish('p4cms.site.theme.enabled', $site, $theme);

            // notify user of successful theme change
            $label = $theme->getLabel();
            P4Cms_Notifications::add(
                "$label theme successfully applied.",
                P4Cms_Notifications::SEVERITY_SUCCESS
            );
        } catch (P4Cms_Theme_Exception $e) {
            // keep current theme, display error message
            P4Cms_Notifications::add(
                "Theme '" . $request->theme . "' could not be applied."
                . " Please check that the theme exists in the correct location and try your change again.",
                P4Cms_Notifications::SEVERITY_ERROR
            );
        }

        $this->redirector->gotoSimple('index');
    }
Site_ThemeController::indexAction ( )

List available themes.

p4cms.site.theme.grid.data.item Return the passed item after applying any modifications (add properties, change values, etc.) to influence the row values sent to the Manage Themes grid. array $item The item to potentially modify. mixed $model The original object/array that was used to make the item. Ui_View_Helper_DataGrid $helper The view helper that broadcast this topic.

p4cms.site.theme.grid.data Adjust the passed data (add properties, modify values, etc.) to influence the row values sent to the Manage Themes grid. Zend_Dojo_Data $data The data to be filtered. Ui_View_Helper_DataGrid $helper The view helper that broadcast this topic.

p4cms.site.theme.grid.populate Adjust the passed iterator (possibly based on values in the passed form) to filter which themes will be shown on the Manage Themes grid. P4Cms_Model_Iterator $themes An iterator of P4Cms_Theme objects. P4Cms_Form_PubSubForm $form A form containing filter options.

p4cms.site.theme.grid.render Make adjustments to the datagrid helper's options pre-render (e.g. change options to add columns) for the Manage Themes grid. Ui_View_Helper_DataGrid $helper The view helper that broadcast this topic.

p4cms.site.theme.grid.form Make arbitrary modifications to the Manage Themes filters form. P4Cms_Form_PubSubForm $form The form that published this event.

p4cms.site.theme.grid.form.subForms Return a Form (or array of Forms) to have them added to the Manage Themes filters form. The returned form(s) should have a 'name' set on them to allow them to be uniquely identified. P4Cms_Form_PubSubForm $form The form that published this event.

p4cms.site.theme.grid.form.preValidate Allows subscribers to adjust the Manage Themes filters form prior to validation of the passed data. For example, modify element values based on related selections to permit proper validation. P4Cms_Form_PubSubForm $form The form that published this event. array $values An associative array of form values.

p4cms.site.theme.grid.form.validate Return false to indicate the Manage Themes filters form is invalid. Return true to indicate your custom checks were satisfied, so form validity should be unchanged. P4Cms_Form_PubSubForm $form The form that published this event. array $values An associative array of form values.

p4cms.site.theme.grid.form.populate Allows subscribers to adjust the Manage Themes filters form after it has been populated with the passed data. P4Cms_Form_PubSubForm $form The form that published this event. array $values The values passed to the populate method.

    {
        // get list option sub-forms.
        $request        = $this->getRequest();
        $gridNamespace  = 'p4cms.site.theme.grid';
        $form           = new Ui_Form_GridOptions(
            array(
                'namespace'   => $gridNamespace
            )
        );
        $form->populate($request->getParams());

        // setup view.
        $view               = $this->view;
        $view->form         = $form;
        $view->pageSize     = $request->getParam('count', 100);
        $view->rowOffset    = $request->getParam('start', 0);
        $view->pageOffset   = round($view->rowOffset / $view->pageSize, 0) + 1;
        $view->theme        = P4Cms_Theme::fetchActive();
        $view->headTitle()->set('Manage Themes');

        // set DataGrid view helper namespace
        $helper = $view->dataGrid();
        $helper->setNamespace($gridNamespace);

        // early exit for standard requests (ie. not json)
        if (!$this->contextSwitch->getCurrentContext()) {
            $this->getHelper('helpUrl')->setUrl('themes.management.html');
            $this->_helper->layout->setLayout('manage-layout');
            return;
        }

        // fetch themes and allow third-parties to manipulate the list
        $themes = P4Cms_Theme::fetchAll();
        try {
            $result = P4Cms_PubSub::publish($gridNamespace . '.populate', $themes, $form);
        } catch (Exception $e) {
            P4Cms_Log::logException("Error building theme list.", $e);
        }

        // prepare sorting options
        // some requested sort fields are composites of multiple fields, so we need a map
        $sortKeyMap = array(
            'name'          => 'name',
            'maintainer'    => array('maintainerInfo', 'name'),
            'status'        => array(
                'name'      => array(P4_Model_Iterator::SORT_NATURAL)
            ),
        );
        $sortKey    = $request->getParam('sort');
        $sortKey    = isset($sortKey) && strlen($sortKey) ? $sortKey : 'name';
        $sortFlags  = array(
            P4Cms_Model_Iterator::SORT_NATURAL,
            P4Cms_Model_Iterator::SORT_NO_CASE
        );
        if (substr($sortKey, 0, 1) == '-') {
            $sortKey = substr($sortKey, 1);
            $sortFlags[] = P4Cms_Model_Iterator::SORT_DESCENDING;
        }

        // apply sorting options and place in the view.
        $view->themes = $themes->sortBy($sortKeyMap[$sortKey], $sortFlags);
    }
Site_ThemeController::init ( )

Use management layout for all actions.

    {
        // list of actions that will be skipped from the permissions check
        $skipActions = array('icon');

        // enforce permissions.
        if (!in_array($this->getRequest()->getActionName(), $skipActions)) {
            $this->_helper->acl->check('site', 'manage-themes');
        }

        // enable logging of the theme parameter
        $this->getHelper('audit')->addLoggedParam('theme');

        // clear theme cache in case it is stale.
        P4Cms_Theme::clearCache();
    }

Member Data Documentation

Site_ThemeController::$contexts
Initial value:
 array(
        'index'     => array('json', 'partial'),
    )

The documentation for this class was generated from the following file: