Module.php #1

  • //
  • guest/
  • perforce_software/
  • chronicle/
  • main/
  • application/
  • history/
  • Module.php
  • View
  • Commits
  • Open Download .zip Download (5 KB)
<?php
/**
 * Integrate the history 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 History_Module extends P4Cms_Module_Integration
{
    /**
     * Perform early integration work (before load).
     */
    public static function init()
    {
        // provide form to filter history list by search term.
        P4Cms_PubSub::subscribe('p4cms.history.grid.form.subForms',
            function(Zend_Form $form)
            {
                return new Ui_Form_GridSearch;
            }
        );

        // filter history list by search term
        P4Cms_PubSub::subscribe('p4cms.history.grid.populate',
            function(P4_Model_Iterator $changes, Zend_Form $form)
            {
                $values = $form->getValues();

                // extract search query or empty string if none.
                $query = isset($values['search']['query'])
                    ? $values['search']['query']
                    : '';

                // if we have a query; filter down the lists of changes
                if (!empty($query)) {
                    $changes->search(array('User', 'Description', 'Date'), $query);
                }
            }
        );

        // provide form to filter history list by user.
        P4Cms_PubSub::subscribe('p4cms.history.grid.form.subForms',
            function(Zend_Form $form)
            {
                $users   = array_unique(
                    $form->getChanges()->invoke('getUser')
                );
                $options = array_combine($users, $users);

                // exit early if we have no users
                if (empty($users)) {
                    return null;
                }
                
                $subform = new P4Cms_Form_SubForm;
                $subform->setName('user')
                        ->setAttrib('class', 'history-form')
                        ->setOrder(20)
                        ->addElement(
                            'MultiCheckbox', 'users',
                            array(
                                'label'         => 'User',
                                'filters'       => array('StringTrim'),
                                'multiOptions'  => $options,
                                'autoApply'     => true
                            )
                        );

                return $subform;
            }
        );

        // filter history list by user 
        P4Cms_PubSub::subscribe('p4cms.history.grid.populate',
            function(P4_Model_Iterator $changes, Zend_Form $form)
            {
                $values = $form->getValues();

                // extract selected users.
                $users = isset($values['user']['users'])
                    ? $values['user']['users']
                    : array();

                if (!empty($users)) {
                    $changes->filter('User', $users);
                }
            }
        );

        // provide form to filter history list by age.
        P4Cms_PubSub::subscribe('p4cms.history.grid.form.subForms',
            function(Zend_Form $form)
            {
                $options = array(
                    ''  => 'Any time',
                    1   => 'Past Day',
                    7   => 'Past Week',
                    31  => 'Past Month',
                    365 => 'Past Year'
                );

                $subform = new P4Cms_Form_SubForm;
                $subform->setName('modified')
                        ->setAttrib('class', 'history-form')
                        ->setOrder(30)
                        ->addElement(
                            'radio', 'range',
                            array(
                                'label'         => 'Modified',
                                'multiOptions'  => $options,
                                'autoApply'     => true,
                                'value'         => ''

                            )
                        );

                return $subform;
            }
        );

        // filter history list by age
        P4Cms_PubSub::subscribe('p4cms.history.grid.populate',
            function(P4_Model_Iterator $changes, Zend_Form $form)
            {
                $values = $form->getValues();

                // extract selected modification range.
                $range = isset($values['modified']['range'])
                    ? $values['modified']['range']
                    : null;

                if (!empty($range)) {
                    $minAge = time() - $range * 3600 * 24;
                    $changes->filterByCallback(
                        function ($change) use ($minAge)
                        {
                            return strtotime($change->getDateTime()) >= $minAge;
                        }
                    );
                }
            }
        );
    }
}
# Change User Description Committed
#1 16170 perforce_software Move Chronicle files to follow new path scheme for branching.
//guest/perforce_software/chronicle/application/history/Module.php
#1 8972 Matt Attaway Initial add of the Chronicle source code