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

classes/template/TemplateManager.inc.php

00001 <?php
00002 
00017 import('classes.file.PublicFileManager');
00018 import('lib.pkp.classes.template.PKPTemplateManager');
00019 
00020 class TemplateManager extends PKPTemplateManager {
00026    function TemplateManager($request = null) {
00027       parent::PKPTemplateManager($request);
00028 
00029       // Retrieve the router
00030       $router =& $this->request->getRouter();
00031       assert(is_a($router, 'PKPRouter'));
00032 
00033       // Are we using implicit authentication?
00034       $this->assign('implicitAuth', Config::getVar('security', 'implicit_auth'));
00035 
00036       if (!defined('SESSION_DISABLE_INIT')) {
00043          $press =& $router->getContext($this->request);
00044          $site =& $this->request->getSite();
00045 
00046          $publicFileManager = new PublicFileManager();
00047          $siteFilesDir = $this->request->getBaseUrl() . '/' . $publicFileManager->getSiteFilesPath();
00048          $this->assign('sitePublicFilesDir', $siteFilesDir);
00049          $this->assign('publicFilesDir', $siteFilesDir); // May be overridden by press
00050 
00051          $siteStyleFilename = $publicFileManager->getSiteFilesPath() . '/' . $site->getSiteStyleFilename();
00052          if (file_exists($siteStyleFilename)) $this->addStyleSheet($this->request->getBaseUrl() . '/' . $siteStyleFilename);
00053 
00054          $this->assign('homeContext', array());
00055          if (isset($press)) {
00056             $this->assign_by_ref('currentPress', $press);
00057 
00058             // Assign press settings.
00059             $pressSettingsDao =& DAORegistry::getDAO('PressSettingsDAO');
00060             $this->assign_by_ref('pressSettings', $pressSettingsDao->getPressSettings($press->getId()));
00061 
00062             $pressTitle = $press->getLocalizedName();
00063             $this->assign('siteTitle', $pressTitle);
00064             $this->assign('publicFilesDir', $this->request->getBaseUrl() . '/' . $publicFileManager->getPressFilesPath($press->getId()));
00065 
00066             $this->assign('primaryLocale', $press->getPrimaryLocale());
00067             $this->assign('alternateLocales', $press->getSetting('alternateLocales'));
00068 
00069             // Assign additional navigation bar items
00070             $navMenuItems =& $press->getLocalizedSetting('navItems');
00071             $this->assign_by_ref('navMenuItems', $navMenuItems);
00072 
00073             // Assign press page header
00074             $this->assign('displayPageHeaderTitle', $press->getPressPageHeaderTitle());
00075             $this->assign('displayPageHeaderLogo', $press->getPressPageHeaderLogo());
00076             $this->assign('alternatePageHeader', $press->getLocalizedSetting('pressPageHeader'));
00077             $this->assign('metaSearchDescription', $press->getLocalizedSetting('searchDescription'));
00078             $this->assign('metaSearchKeywords', $press->getLocalizedSetting('searchKeywords'));
00079             $this->assign('metaCustomHeaders', $press->getLocalizedSetting('customHeaders'));
00080             $this->assign('numPageLinks', $press->getSetting('numPageLinks'));
00081             $this->assign('itemsPerPage', $press->getSetting('itemsPerPage'));
00082             $this->assign('enableAnnouncements', $press->getSetting('enableAnnouncements'));
00083 
00084             // Assign stylesheets and footer
00085             $pressStyleSheet = $press->getSetting('pressStyleSheet');
00086             if ($pressStyleSheet) {
00087                $this->addStyleSheet($this->request->getBaseUrl() . '/' . $publicFileManager->getPressFilesPath($press->getId()) . '/' . $pressStyleSheet['uploadName']);
00088             }
00089 
00090             // Include footer links if they have been defined.
00091             $footerCategoryDao =& DAORegistry::getDAO('FooterCategoryDAO');
00092             $footerCategories =& $footerCategoryDao->getNotEmptyByPressId($press->getId());
00093             $this->assign_by_ref('footerCategories', $footerCategories->toArray());
00094 
00095             $footerLinkDao =& DAORegistry::getDAO('FooterLinkDAO');
00096             $this->assign('maxLinks', $footerLinkDao->getLargestCategoryTotalByPressId($press->getId()));
00097             $this->assign('pageFooter', $press->getLocalizedSetting('pressPageFooter'));
00098          } else {
00099             // Add the site-wide logo, if set for this locale or the primary locale
00100             $displayPageHeaderTitle = $site->getLocalizedPageHeaderTitle();
00101             $this->assign('displayPageHeaderTitle', $displayPageHeaderTitle);
00102             if (isset($displayPageHeaderTitle['altText'])) $this->assign('displayPageHeaderTitleAltText', $displayPageHeaderTitle['altText']);
00103 
00104             $this->assign('siteTitle', $site->getLocalizedTitle());
00105          }
00106 
00107          // Check for multiple presses.
00108          $pressDao =& DAORegistry::getDAO('PressDAO');
00109 
00110          $user =& $this->request->getUser();
00111          if (is_a($user, 'User')) {
00112             $presses =& $pressDao->getPresses();
00113          } else {
00114             $presses =& $pressDao->getEnabledPresses();
00115          }
00116 
00117          $multiplePresses = false;
00118          if ($presses->getCount() > 1) {
00119             $this->assign('multiplePresses', true);
00120             $multiplePresses = true;
00121          } else {
00122             if ($presses->getCount() == 0) { // no presses configured
00123                $this->assign('noPressesConfigured', true);
00124             }
00125          }
00126 
00127          if ($multiplePresses) {
00128             $this->_assignPressSwitcherData($presses, $press);
00129          }
00130       }
00131    }
00132 
00143    function smartyPageLinks($params, &$smarty) {
00144       $iterator = $params['iterator'];
00145       $name = $params['name'];
00146       if (isset($params['params']) && is_array($params['params'])) {
00147          $extraParams = $params['params'];
00148          unset($params['params']);
00149          $params = array_merge($params, $extraParams);
00150       }
00151       if (isset($params['anchor'])) {
00152          $anchor = $params['anchor'];
00153          unset($params['anchor']);
00154       } else {
00155          $anchor = null;
00156       }
00157       if (isset($params['all_extra'])) {
00158          $allExtra = ' ' . $params['all_extra'];
00159          unset($params['all_extra']);
00160       } else {
00161          $allExtra = '';
00162       }
00163 
00164       unset($params['iterator']);
00165       unset($params['name']);
00166 
00167       $numPageLinks = $smarty->get_template_vars('numPageLinks');
00168       if (!is_numeric($numPageLinks)) $numPageLinks=10;
00169 
00170       $page = $iterator->getPage();
00171       $pageCount = $iterator->getPageCount();
00172       $itemTotal = $iterator->getCount();
00173 
00174       $pageBase = max($page - floor($numPageLinks / 2), 1);
00175       $paramName = $name . 'Page';
00176 
00177       if ($pageCount<=1) return '';
00178 
00179       $value = '';
00180 
00181       if ($page>1) {
00182          $params[$paramName] = 1;
00183          $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>&lt;&lt;</a>&nbsp;';
00184          $params[$paramName] = $page - 1;
00185          $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>&lt;</a>&nbsp;';
00186       }
00187 
00188       for ($i=$pageBase; $i<min($pageBase+$numPageLinks, $pageCount+1); $i++) {
00189          if ($i == $page) {
00190             $value .= "<strong>$i</strong>&nbsp;";
00191          } else {
00192             $params[$paramName] = $i;
00193             $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>' . $i . '</a>&nbsp;';
00194          }
00195       }
00196       if ($page < $pageCount) {
00197          $params[$paramName] = $page + 1;
00198          $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>&gt;</a>&nbsp;';
00199          $params[$paramName] = $pageCount;
00200          $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>&gt;&gt;</a>&nbsp;';
00201       }
00202 
00203       return $value;
00204    }
00205 
00206 
00207    //
00208    // Private helper methods.
00209    //
00216    function _assignPressSwitcherData(&$presses, $currentPress = null) {
00217       $workingPresses =& $presses->toArray();
00218 
00219       $dispatcher = $this->request->getDispatcher();
00220       $pressesNameAndUrl = array();
00221       foreach ($workingPresses as $workingPress) {
00222          $pressUrl = $dispatcher->url($this->request, ROUTE_PAGE, $workingPress->getPath());
00223          $pressesNameAndUrl[$pressUrl] = $workingPress->getLocalizedName();
00224       };
00225 
00226       // Get the current press switcher value. We don“t need to worry about the
00227       // value when there is no current press, because then the switcher will not
00228       // be visible.
00229       $currentPressUrl = null;
00230       if ($currentPress) {
00231          $currentPressUrl = $dispatcher->url($this->request, ROUTE_PAGE, $currentPress->getPath());
00232       } else {
00233          $pressesNameAndUrl = array(__('press.select')) + $pressesNameAndUrl;
00234       }
00235 
00236       $this->assign('currentPressUrl', $currentPressUrl);
00237       $this->assign('pressesNameAndUrl', $pressesNameAndUrl);
00238    }
00239 }
00240 
00241 ?>

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