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
00030 $router =& $this->request->getRouter();
00031 assert(is_a($router, 'PKPRouter'));
00032
00033
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);
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
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
00070 $navMenuItems =& $press->getLocalizedSetting('navItems');
00071 $this->assign_by_ref('navMenuItems', $navMenuItems);
00072
00073
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
00085 $pressStyleSheet = $press->getSetting('pressStyleSheet');
00086 if ($pressStyleSheet) {
00087 $this->addStyleSheet($this->request->getBaseUrl() . '/' . $publicFileManager->getPressFilesPath($press->getId()) . '/' . $pressStyleSheet['uploadName']);
00088 }
00089
00090
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
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
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) {
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 . '><<</a> ';
00184 $params[$paramName] = $page - 1;
00185 $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '><</a> ';
00186 }
00187
00188 for ($i=$pageBase; $i<min($pageBase+$numPageLinks, $pageCount+1); $i++) {
00189 if ($i == $page) {
00190 $value .= "<strong>$i</strong> ";
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> ';
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 . '>></a> ';
00199 $params[$paramName] = $pageCount;
00200 $value .= '<a href="' . $this->request->url(null, null, null, $this->request->getRequestedArgs(), $params, $anchor, true) . '"' . $allExtra . '>>></a> ';
00201 }
00202
00203 return $value;
00204 }
00205
00206
00207
00208
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
00227
00228
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 ?>