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

classes/controllers/grid/languages/LanguageGridHandler.inc.php

00001 <?php
00002 
00015 import('lib.pkp.classes.controllers.grid.GridHandler');
00016 
00017 import('controllers.grid.languages.LanguageGridRow');
00018 import('controllers.grid.languages.LanguageGridCellProvider');
00019 
00020 class LanguageGridHandler extends GridHandler {
00024    function LanguageGridHandler() {
00025       parent::GridHandler();
00026       $this->addRoleAssignment(array(
00027          ROLE_ID_PRESS_MANAGER),
00028          array('saveLanguageSetting', 'setContextPrimaryLocale'));
00029    }
00030 
00031 
00032    //
00033    // Implement template methods from PKPHandler.
00034    //
00038    function authorize($request, $args, $roleAssignments) {
00039       import('classes.security.authorization.OmpPressAccessPolicy');
00040       $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00041       return parent::authorize($request, $args, $roleAssignments);
00042    }
00043 
00047    function initialize(&$request) {
00048       parent::initialize($request);
00049 
00050       // Load user-related translations.
00051       AppLocale::requireComponents(
00052          LOCALE_COMPONENT_PKP_USER,
00053          LOCALE_COMPONENT_OMP_MANAGER
00054       );
00055 
00056       // Basic grid configuration.
00057       $this->setTitle('common.languages');
00058    }
00059 
00060 
00061    //
00062    // Public handler methods.
00063    //
00069    function saveLanguageSetting($args, &$request) {
00070       $locale = (string) $request->getUserVar('rowId');
00071       $settingName = (string) $request->getUserVar('setting');
00072       $settingValue = (boolean) $request->getUserVar('value');
00073       $availableLocales = $this->getGridDataElements($request);
00074       $press =& $request->getPress();
00075 
00076       $permittedSettings = array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales');
00077       if (in_array($settingName, $permittedSettings) && $locale) {
00078          $currentSettingValue = $press->getSetting($settingName);
00079          if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
00080             if ($settingValue) {
00081                array_push($currentSettingValue, $locale);
00082             } else {
00083                $key = array_search($locale, $currentSettingValue);
00084                if ($key !== false) unset($currentSettingValue[$key]);
00085             }
00086          }
00087       }
00088 
00089       $press->updateSetting($settingName, $currentSettingValue);
00090       $pressDao =& DAORegistry::getDAO('PressDAO');
00091       $pressDao->updateObject($press);
00092 
00093       $notificationManager = new NotificationManager();
00094       $user =& $request->getUser();
00095       $notificationManager->createTrivialNotification(
00096          $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
00097 
00098       return DAO::getDataChangedEvent($locale);
00099    }
00100 
00106    function setContextPrimaryLocale($args, &$request) {
00107       $locale = (string) $request->getUserVar('rowId');
00108       $press =& $request->getPress();
00109       $availableLocales = $this->getGridDataElements($request);
00110 
00111       if (AppLocale::isLocaleValid($locale) && array_key_exists($locale, $availableLocales)) {
00112          // Make sure at least the primary locale is chosen as available
00113          foreach (array('supportedLocales', 'supportedSubmissionLocales', 'supportedFormLocales') as $name) {
00114             $$name = $press->getSetting($name);
00115             if (!in_array($locale, $$name)) {
00116                array_push($$name, $locale);
00117                $press->updateSetting($name, $$name);
00118             }
00119          }
00120 
00121          $press->setPrimaryLocale($locale);
00122          $pressDao =& DAORegistry::getDAO('PressDAO');
00123          $pressDao->updateObject($press);
00124 
00125          $notificationManager = new NotificationManager();
00126          $user =& $request->getUser();
00127          $notificationManager->createTrivialNotification(
00128             $user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.localeSettingsSaved')));
00129       }
00130 
00131       return DAO::getDataChangedEvent();
00132    }
00133 
00134    //
00135    // Protected methods.
00136    //
00142    function getCellProvider() {
00143       return new LanguageGridCellProvider();
00144    }
00145 
00149    function addNameColumn() {
00150       $cellProvider = $this->getCellProvider();
00151 
00152       // Locale name.
00153       $this->addColumn(
00154          new GridColumn(
00155             'locale',
00156             'grid.columns.locale',
00157             null,
00158             'controllers/grid/languages/localeNameCell.tpl',
00159             $cellProvider
00160          )
00161       );
00162    }
00163 
00168    function addPrimaryColumn($columnId) {
00169       $cellProvider = $this->getCellProvider();
00170 
00171       $this->addColumn(
00172          new GridColumn(
00173             $columnId,
00174             'locale.primary',
00175             null,
00176             'controllers/grid/common/cell/radioButtonCell.tpl',
00177             $cellProvider
00178          )
00179       );
00180    }
00181 
00185    function addManagementColumns() {
00186       $cellProvider = $this->getCellProvider();
00187       $this->addColumn(
00188          new GridColumn(
00189             'uiLocale',
00190             'manager.language.ui',
00191             null,
00192             'controllers/grid/common/cell/selectStatusCell.tpl',
00193             $cellProvider
00194          )
00195       );
00196 
00197       $this->addColumn(
00198          new GridColumn(
00199             'submissionLocale',
00200             'manager.language.submissions',
00201             null,
00202             'controllers/grid/common/cell/selectStatusCell.tpl',
00203             $cellProvider
00204          )
00205       );
00206 
00207       $this->addColumn(
00208          new GridColumn(
00209             'formLocale',
00210             'manager.language.forms',
00211             null,
00212             'controllers/grid/common/cell/selectStatusCell.tpl',
00213             $cellProvider
00214          )
00215       );
00216    }
00217 
00225    function addManagementData(&$request, $data) {
00226       $press =& $request->getPress();
00227 
00228       if (is_array($data)) {
00229          foreach ($data as $locale => $localeData) {
00230             foreach (array('supportedFormLocales', 'supportedSubmissionLocales', 'supportedLocales') as $name) {
00231                $data[$locale][$name] = in_array($locale, (array) $press->getSetting($name));
00232             }
00233          }
00234       } else {
00235          assert(false);
00236       }
00237 
00238       return $data;
00239    }
00240 }
00241 ?>

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