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

controllers/grid/content/announcements/AnnouncementTypeGridHandler.inc.php

00001 <?php
00002 
00015 import('lib.pkp.classes.controllers.grid.GridHandler');
00016 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00017 
00018 import('controllers.grid.content.announcements.form.AnnouncementTypeForm');
00019 
00020 class AnnouncementTypeGridHandler extends GridHandler {
00024    function AnnouncementTypeGridHandler() {
00025       parent::GridHandler();
00026       $this->addRoleAssignment(
00027          ROLE_ID_PRESS_MANAGER,
00028          array(
00029             'fetchGrid', 'fetchRow',
00030             'addAnnouncementType', 'editAnnouncementType',
00031             'updateAnnouncementType',
00032             'deleteAnnouncementType'
00033          )
00034       );
00035    }
00036 
00037 
00038    //
00039    // Overridden template methods
00040    //
00044    function authorize($request, $args, $roleAssignments) {
00045       import('classes.security.authorization.OmpPressAccessPolicy');
00046       $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00047 
00048       $returner = parent::authorize($request, $args, $roleAssignments);
00049       $press =& $request->getPress();
00050 
00051       $announcementTypeId = $request->getUserVar('announcementTypeId');
00052       if ($announcementTypeId) {
00053          // Ensure announcement type is valid and for this context
00054          $announcementTypeDao =& DAORegistry::getDAO('AnnouncementTypeDAO'); /* @var $announcementTypeDao AnnouncementTypeDAO */
00055          $announcementType =& $announcementTypeDao->getById($announcementTypeId);
00056          if (!$announcementType || $announcementType->getAssocType() != ASSOC_TYPE_PRESS || $announcementType->getAssocId() != $press->getId()) {
00057             return false;
00058          }
00059       }
00060 
00061       return $returner;
00062    }
00063 
00067    function initialize(&$request) {
00068       parent::initialize($request);
00069 
00070       // Basic grid configuration
00071       $this->setTitle('manager.announcementTypes');
00072 
00073       // Set the no items row text
00074       $this->setEmptyRowText('manager.announcementTypes.noneCreated');
00075 
00076       $press =& $request->getPress();
00077 
00078       // Columns
00079       import('controllers.grid.content.announcements.AnnouncementTypeGridCellProvider');
00080       $announcementTypeCellProvider = new AnnouncementTypeGridCellProvider();
00081       $this->addColumn(
00082          new GridColumn('name',
00083             'common.name',
00084             null,
00085             'controllers/grid/gridCell.tpl',
00086             $announcementTypeCellProvider,
00087             array('width' => 60)
00088          )
00089       );
00090 
00091       // Load language components
00092       AppLocale::requireComponents(LOCALE_COMPONENT_PKP_MANAGER);
00093 
00094       // Add grid action.
00095       $router =& $request->getRouter();
00096 
00097       import('lib.pkp.classes.linkAction.request.AjaxModal');
00098       $this->addAction(
00099          new LinkAction(
00100             'addAnnouncementType',
00101             new AjaxModal(
00102                $router->url($request, null, null, 'addAnnouncementType', null, null),
00103                __('grid.action.addAnnouncementType'),
00104                'modal_add_item',
00105                true
00106             ),
00107             __('grid.action.addAnnouncementType'),
00108             'add_item'
00109          )
00110       );
00111    }
00112 
00116    function loadData($request, $filter) {
00117       $press =& $request->getPress();
00118       $announcementTypeDao =& DAORegistry::getDAO('AnnouncementTypeDAO');
00119       $pressAnnouncementTypes =& $announcementTypeDao->getByAssoc(ASSOC_TYPE_PRESS, $press->getId());
00120 
00121       return $pressAnnouncementTypes;
00122    }
00123 
00127    function getRowInstance() {
00128       import('controllers.grid.content.announcements.AnnouncementTypeGridRow');
00129       return new AnnouncementTypeGridRow();
00130    }
00131 
00132    //
00133    // Public grid actions.
00134    //
00141    function addAnnouncementType($args, &$request) {
00142       return $this->editAnnouncementType($args, $request);
00143    }
00144 
00151    function editAnnouncementType($args, &$request) {
00152       $announcementTypeId = (int)$request->getUserVar('announcementTypeId');
00153       $press =& $request->getPress();
00154       $pressId = $press->getId();
00155 
00156       $announcementTypeForm = new AnnouncementTypeForm($pressId, $announcementTypeId);
00157       $announcementTypeForm->initData($args, $request);
00158 
00159       $json = new JSONMessage(true, $announcementTypeForm->fetch($request));
00160       return $json->getString();
00161    }
00162 
00169    function updateAnnouncementType($args, &$request) {
00170 
00171       // Identify the announcement type id.
00172       $announcementTypeId = $request->getUserVar('announcementTypeId');
00173       $press =& $request->getPress();
00174       $pressId = $press->getId();
00175 
00176       // Form handling.
00177       $announcementTypeForm = new AnnouncementTypeForm($pressId, $announcementTypeId);
00178       $announcementTypeForm->readInputData();
00179 
00180       if ($announcementTypeForm->validate()) {
00181          $announcementTypeForm->execute($request);
00182 
00183          if ($announcementTypeId) {
00184             // Successful edit of an existing announcement type.
00185             $notificationLocaleKey = 'notification.editedAnnouncementType';
00186          } else {
00187             // Successful added a new announcement type.
00188             $notificationLocaleKey = 'notification.addedAnnouncementType';
00189          }
00190 
00191          // Record the notification to user.
00192          $notificationManager = new NotificationManager();
00193          $user =& $request->getUser();
00194          $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __($notificationLocaleKey)));
00195 
00196          // Prepare the grid row data.
00197          return DAO::getDataChangedEvent($announcementTypeId);
00198       } else {
00199          $json = new JSONMessage(false);
00200       }
00201       return $json->getString();
00202    }
00203 
00209    function deleteAnnouncementType($args, $request) {
00210       $announcementTypeId = (int) $request->getUserVar('announcementTypeId');
00211 
00212       $announcementTypeDao =& DAORegistry::getDAO('AnnouncementTypeDAO');
00213       $announcementTypeDao->deleteById($announcementTypeId);
00214 
00215       // Create notification.
00216       $notificationManager = new NotificationManager();
00217       $user =& $request->getUser();
00218       $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.removedAnnouncementType')));
00219 
00220       return DAO::getDataChangedEvent($announcementTypeId);
00221    }
00222 }
00223 
00224 ?>

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