• Main Page
  • Modules
  • Classes
  • Files
  • File List

controllers/grid/settings/contributor/ContributorGridHandler.inc.php

00001 <?php
00002 
00015 // Import grid base classes
00016 import('controllers.grid.settings.SetupGridHandler');
00017 
00018 // Import Contributor grid specific classes
00019 import('controllers.grid.settings.contributor.ContributorGridRow');
00020 
00021 import('lib.pkp.classes.linkAction.request.AjaxModal');
00022 
00023 class ContributorGridHandler extends SetupGridHandler {
00027    function ContributorGridHandler() {
00028       parent::SetupGridHandler();
00029       $this->addRoleAssignment(array(ROLE_ID_PRESS_MANAGER),
00030             array('fetchGrid', 'addContributor', 'editContributor', 'updateContributor', 'deleteContributor'));
00031    }
00032 
00033    //
00034    // Overridden template methods
00035    //
00036    /*
00037     * Configure the grid
00038     * @param $request PKPRequest
00039     */
00040    function initialize(&$request) {
00041       parent::initialize($request);
00042 
00043       // Elements to be displayed in the grid
00044       $router =& $request->getRouter();
00045       $context =& $router->getContext($request);
00046       $contributors = $context->getSetting('contributors');
00047       $contributors = isset($contributors) ? $contributors : array();
00048       $this->setGridDataElements($contributors);
00049 
00050       // Add grid-level actions
00051       $router =& $request->getRouter();
00052 
00053       $this->addAction(
00054          new LinkAction(
00055             'addContributor',
00056             new AjaxModal(
00057                $router->url($request, null, null, 'addContributor', null, array('gridId' => $this->getId())),
00058                __('grid.action.addContributor'),
00059                'modal_add_user',
00060                true
00061                ),
00062             __('grid.action.addContributor'),
00063             'add_user')
00064       );
00065 
00066       // Columns
00067       $this->addColumn(
00068          new GridColumn(
00069             'institution',
00070             'grid.columns.institution',
00071             null,
00072             'controllers/grid/gridCell.tpl',
00073             null,
00074             array('width' => 50, 'alignment' => COLUMN_ALIGNMENT_LEFT)
00075          )
00076       );
00077       $this->addColumn(
00078          new GridColumn(
00079             'url',
00080             'grid.columns.url',
00081             null,
00082             'controllers/grid/gridCell.tpl',
00083             null,
00084             array('width' => 50, 'alignment' => COLUMN_ALIGNMENT_LEFT)
00085          )
00086       );
00087    }
00088 
00089    //
00090    // Overridden methods from GridHandler
00091    //
00096    function &getRowInstance() {
00097       $row = new ContributorGridRow();
00098       return $row;
00099    }
00100 
00101    //
00102    // Public Contributor Grid Actions
00103    //
00110    function addContributor($args, &$request) {
00111       // Calling editContributor with an empty row id will add
00112       // a new contributor.
00113       return $this->editContributor($args, $request);
00114    }
00115 
00122    function editContributor($args, &$request) {
00123       $contributorId = isset($args['rowId']) ? $args['rowId'] : null;
00124       import('controllers.grid.settings.contributor.form.ContributorForm');
00125       $contributorForm = new ContributorForm($contributorId);
00126 
00127       if ($contributorForm->isLocaleResubmit()) {
00128          $contributorForm->readInputData();
00129       } else {
00130          $contributorForm->initData($args, $request);
00131       }
00132 
00133       $json = new JSONMessage(true, $contributorForm->fetch($request));
00134       return $json->getString();
00135    }
00136 
00143    function updateContributor($args, &$request) {
00144       // -> contributorId must be present and valid
00145       // -> htmlId must be present and valid
00146       $contributorId = isset($args['rowId']) ? $args['rowId'] : null;
00147       import('controllers.grid.settings.contributor.form.ContributorForm');
00148       $contributorForm = new ContributorForm($contributorId);
00149       $contributorForm->readInputData();
00150 
00151       if ($contributorForm->validate()) {
00152          $contributorForm->execute($request);
00153 
00154          // prepare the grid row data
00155          $row =& $this->getRowInstance();
00156          $row->setGridId($this->getId());
00157          $row->setId($contributorForm->contributorId);
00158          $rowData = array('institution' => $contributorForm->getData('institution'),
00159                      'url' => $contributorForm->getData('url'));
00160          $row->setData($rowData);
00161          $row->initialize($request);
00162 
00163          return DAO::getDataChangedEvent();
00164       } else {
00165          return new JSONMessage(false);
00166       }
00167    }
00168 
00175    function deleteContributor($args, &$request) {
00176       $contributorId = isset($args['rowId']) ? $args['rowId'] : null;
00177       $router =& $request->getRouter();
00178       $press =& $router->getContext($request);
00179       $pressSettingsDao =& DAORegistry::getDAO('PressSettingsDAO');
00180 
00181       // get all of the contributors
00182       $contributors = $pressSettingsDao->getSetting($press->getId(), 'contributors');
00183 
00184       if ( isset($contributors[$contributorId]) ) {
00185          unset($contributors[$contributorId]);
00186          $pressSettingsDao->updateSetting($press->getId(), 'contributors', $contributors, 'object');
00187          return DAO::getDataChangedEvent();
00188       } else {
00189          return new JSONMessage(false, __('manager.setup.errorDeletingItem'));
00190       }
00191    }
00192 }
00193 
00194 ?>

Generated on Mon Sep 17 2012 13:58:56 for Open Monograph Press by  doxygen 1.7.1