Module.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • application/
  • widget/
  • Module.php
  • View
  • Commits
  • Open Download .zip Download (5 KB)
<?php
/**
 * Integrate the widget module with the rest of the application.
 *
 * @copyright   2011 Perforce Software. All rights reserved.
 * @license     Please see LICENSE.txt in top-level folder of this distribution.
 * @version     <release>/<patch>
 */
class Widget_Module extends P4Cms_Module_Integration
{
    /**
     * Perform early integration work (before load).
     */
    public static function init()
    {
        // update widgets when a site is created.
        P4Cms_PubSub::subscribe('p4cms.site.created',
            function(P4Cms_Site $site)
            {
                $adapter = $site->getStorageAdapter();
                P4Cms_Widget::installDefaults($adapter);
            }
        );

        // update widgets when a module/theme is enabled.
        $installDefaults = function(P4Cms_Site $site, P4Cms_PackageAbstract $package)
        {
            $adapter = $site->getStorageAdapter();
            P4Cms_Widget::installPackageDefaults($package, $adapter, true);
        };

        P4Cms_PubSub::subscribe('p4cms.site.module.enabled', $installDefaults);
        P4Cms_PubSub::subscribe('p4cms.site.theme.enabled',  $installDefaults);

        // update widgets when a module/theme is disabled
        $removeDefaults = function(P4Cms_Site $site, P4Cms_PackageAbstract $package)
        {
            $adapter = $site->getStorageAdapter();
            P4Cms_Widget::removePackageDefaults($package, $adapter);
        };

        P4Cms_PubSub::subscribe('p4cms.site.module.disabled', $removeDefaults);
        P4Cms_PubSub::subscribe('p4cms.site.theme.disabled',  $removeDefaults);

        // organize widget records when pulling changes.
        P4Cms_PubSub::subscribe(
            'p4cms.site.branch.pull.groupPaths',
            function($paths, $source, $target, $result)
            {
                $paths->addSubGroup(
                    array(
                        'label'         => 'Widgets',
                        'basePaths'     => $target->getId() . '/widgets/...',
                        'inheritPaths'  => $target->getId() . '/widgets/...',
                        'pullByDefault' => true,
                        'count'         =>
                            function($group, $count, $options) use ($target)
                            {
                                return $group->getPaths($options)->filter(
                                    'depotFile',
                                    $target->getId() . '/widgets/',
                                    array(
                                        P4Cms_Model_Iterator::FILTER_COPY,
                                        P4Cms_Model_Iterator::FILTER_STARTS_WITH
                                    )
                                )->count();
                            },
                        'details'       =>
                            function($paths) use ($source, $target)
                            {
                                $pathsById = array();
                                foreach ($paths as $path) {
                                    if (strpos($path->depotFile, $target->getId() . '/widgets/') === 0) {
                                        $pathsById[P4Cms_Widget::depotFileToId($path->depotFile)] = $path;
                                    }
                                }

                                $details = new P4Cms_Model_Iterator;
                                $entries = Site_Model_PullPathGroup::fetchRecords(
                                    array_keys($pathsById), 'P4Cms_Widget', $source, $target
                                );
                                foreach ($entries as $entry) {
                                    $path      = $pathsById[$entry->getId()];
                                    $label     = str_replace(array('-', '_'), ' ', $entry->getValue('region'));
                                    $label     = ucwords($label) . ' - ' . $entry->getValue('title');
                                    $details[] = new P4Cms_Model(
                                        array(
                                            'conflict' => $path->conflict,
                                            'action'   => $path->action,
                                            'label'    => $label
                                        )
                                    );
                                }

                                $details->setProperty(
                                    'columns',
                                    array('label' => 'Widget', 'action' => 'Action')
                                );

                                return $details;
                            }
                    )
                );
            }
        );
    }

    /**
     * Explicitly add the views/scripts path because the widget
     * and region.phtml files aren't in conventional locations.
     */
    public static function load()
    {
        $view = Zend_Layout::getMvcInstance()->getView();
        $view->addScriptPath(dirname(__FILE__) . '/views/scripts/');
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/application/widget/Module.php
#1 8972 Matt Attaway Initial add of the Chronicle source code