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

controllers/grid/settings/genre/GenreGridHandler.inc.php

00001 <?php
00002 
00015 import('controllers.grid.settings.SetupGridHandler');
00016 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00017 import('controllers.grid.settings.genre.GenreGridRow');
00018 
00019 class GenreGridHandler extends SetupGridHandler {
00023    function GenreGridHandler() {
00024       parent::GridHandler();
00025       $this->addRoleAssignment(array(ROLE_ID_PRESS_MANAGER),
00026             array('fetchGrid', 'fetchRow', 'addGenre', 'editGenre', 'updateGenre',
00027             'deleteGenre', 'restoreGenres'));
00028    }
00029 
00030 
00031    //
00032    // Overridden template methods
00033    //
00034    /*
00035     * Configure the grid
00036     * @param $request PKPRequest
00037     */
00038    function initialize(&$request) {
00039       parent::initialize($request);
00040 
00041       // Load language components
00042       AppLocale::requireComponents(
00043          LOCALE_COMPONENT_OMP_MANAGER,
00044          LOCALE_COMPONENT_OMP_EDITOR,
00045          LOCALE_COMPONENT_PKP_COMMON,
00046          LOCALE_COMPONENT_PKP_USER,
00047          LOCALE_COMPONENT_APPLICATION_COMMON,
00048          LOCALE_COMPONENT_PKP_GRID,
00049          LOCALE_COMPONENT_OMP_SUBMISSION
00050       );
00051 
00052       // Basic grid configuration
00053       $press =& $request->getPress();
00054 
00055       // Set the grid title.
00056       $this->setTitle('grid.genres.title');
00057 
00058       $this->setInstructions('grid.genres.description');
00059 
00060       // Elements to be displayed in the grid
00061       $genreDao =& DAORegistry::getDAO('GenreDAO');
00062       $genres =& $genreDao->getEnabledByPressId($press->getId());
00063       $this->setGridDataElements($genres);
00064 
00065       // Add grid-level actions
00066       $router =& $request->getRouter();
00067       $actionArgs = array('gridId' => $this->getId());
00068 
00069       import('lib.pkp.classes.linkAction.request.AjaxModal');
00070       $this->addAction(
00071          new LinkAction(
00072             'addGenre',
00073             new AjaxModal(
00074                $router->url($request, null, null, 'addGenre', null, $actionArgs),
00075                __('grid.action.addGenre'),
00076                'modal_add_item',
00077                true),
00078             __('grid.action.addGenre'),
00079             'add_item')
00080       );
00081 
00082       import('lib.pkp.classes.linkAction.request.RemoteActionConfirmationModal');
00083       $this->addAction(
00084          new LinkAction(
00085             'restoreGenres',
00086             new RemoteActionConfirmationModal(
00087                __('grid.action.restoreDefaults'),
00088                null,
00089                $router->url($request, null, null, 'restoreGenres', null, $actionArgs), 'modal_delete'),
00090             __('grid.action.restoreDefaults'),
00091             'reset_default')
00092       );
00093 
00094       // Columns
00095       $cellProvider = new DataObjectGridCellProvider();
00096       $cellProvider->setLocale(AppLocale::getLocale());
00097       $this->addColumn(
00098          new GridColumn('name',
00099             'common.name',
00100             null,
00101             'controllers/grid/gridCell.tpl',
00102             $cellProvider
00103          )
00104       );
00105 
00106       $this->addColumn(
00107          new GridColumn(
00108             'designation',
00109             'common.designation',
00110             null,
00111             'controllers/grid/gridCell.tpl',
00112             $cellProvider
00113          )
00114       );
00115    }
00116 
00117    //
00118    // Overridden methods from GridHandler
00119    //
00124    function &getRowInstance() {
00125       $row = new GenreGridRow();
00126       return $row;
00127    }
00128 
00129    //
00130    // Public Genre Grid Actions
00131    //
00137    function addGenre($args, &$request) {
00138       // Calling editGenre with an empty row id will add a new Genre.
00139       return $this->editGenre($args, $request);
00140    }
00141 
00148    function editGenre($args, &$request) {
00149       $genreId = isset($args['genreId']) ? (int) $args['genreId'] : null;
00150 
00151       $this->setupTemplate();
00152 
00153       import('controllers.grid.settings.genre.form.GenreForm');
00154       $genreForm = new GenreForm($genreId);
00155 
00156       $genreForm->initData($args, $request);
00157 
00158       $json = new JSONMessage(true, $genreForm->fetch($request));
00159       return $json->getString();
00160    }
00161 
00168    function updateGenre($args, &$request) {
00169       $genreId = isset($args['genreId']) ? (int) $args['genreId'] : null;
00170       $press =& $request->getPress();
00171 
00172       import('controllers.grid.settings.genre.form.GenreForm');
00173       $genreForm = new GenreForm($genreId);
00174       $genreForm->readInputData();
00175 
00176       $router =& $request->getRouter();
00177 
00178       if ($genreForm->validate()) {
00179          $genreForm->execute($args, $request);
00180          return DAO::getDataChangedEvent($genreForm->getGenreId());
00181       } else {
00182          $json = new JSONMessage(false);
00183          return $json->getString();
00184       }
00185    }
00186 
00193    function deleteGenre($args, &$request) {
00194       // Identify the Genre to be deleted
00195       $genre =& $this->_getGenreFromArgs($request, $args);
00196 
00197       $genreDao =& DAORegistry::getDAO('GenreDAO');
00198       $result = $genreDao->deleteObject($genre);
00199 
00200       if ($result) {
00201          return DAO::getDataChangedEvent($genre->getId());
00202       } else {
00203          $json = new JSONMessage(false, __('manager.setup.errorDeletingItem'));
00204       }
00205       return $json->getString();
00206    }
00207 
00215    function restoreGenres($args, &$request) {
00216       $press =& $request->getPress();
00217 
00218       // Restore all the genres in this press form the registry XML file
00219       $genreDao =& DAORegistry::getDAO('GenreDAO');
00220       $genreDao->restoreByPressId($press->getId());
00221       return DAO::getDataChangedEvent();
00222    }
00223 
00224    //
00225    // Private helper function
00226    //
00235    function &_getGenreFromArgs($request, $args) {
00236       // Identify the Genre Id and retrieve the
00237       // corresponding element from the grid's data source.
00238       if (!isset($args['genreId'])) {
00239          fatalError('Missing Genre Id!');
00240       } else {
00241          $genre =& $this->getRowDataElement($request, $args['genreId']);
00242          if (is_null($genre)) fatalError('Invalid Genre Id!');
00243       }
00244       return $genre;
00245    }
00246 }
00247 
00248 ?>

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