/**
  * View announcement details.
  * @param $args array optional, first parameter is the ID of the announcement to display
  */
 function view($args = array())
 {
     $this->validate();
     $this->setupTemplate();
     $announcementId = !isset($args) || empty($args) ? null : (int) $args[0];
     $announcementDao =& DAORegistry::getDAO('AnnouncementDAO');
     if ($this->_getAnnouncementsEnabled() && $this->_announcementIsValid($announcementId)) {
         $announcement =& $announcementDao->getAnnouncement($announcementId);
         if ($announcement->getDateExpire() == null || strtotime($announcement->getDateExpire()) > time()) {
             $templateMgr =& TemplateManager::getManager();
             $templateMgr->assign('announcement', $announcement);
             if ($announcement->getTypeId() == null) {
                 $templateMgr->assign('announcementTitle', $announcement->getLocalizedTitle());
             } else {
                 $templateMgr->assign('announcementTitle', $announcement->getAnnouncementTypeName() . ": " . $announcement->getLocalizedTitle());
             }
             $templateMgr->append('pageHierarchy', array(PKPRequest::url(null, 'announcement'), 'announcement.announcements'));
             $templateMgr->display('announcement/view.tpl');
         } else {
             Request::redirect(null, null, 'announcement');
         }
     } else {
         Request::redirect(null, null, 'announcement');
     }
 }
 /**
  * Display help table of contents.
  */
 function index()
 {
     $this->validate();
     $this->setupTemplate();
     $templateMgr =& TemplateManager::getManager();
     $user = Request::getUser();
     if (isset($user)) {
         $userId = $user->getId();
         $templateMgr->assign('isUserLoggedIn', true);
     } else {
         $userId = 0;
         $templateMgr->assign('emailUrl', PKPRequest::url(NotificationHandler::getContextDepthArray(), 'notification', 'subscribeMailList'));
         $templateMgr->assign('isUserLoggedIn', false);
     }
     $rangeInfo =& Handler::getRangeInfo('notifications');
     $notificationDao =& DAORegistry::getDAO('NotificationDAO');
     $notifications = $notificationDao->getByUserId($userId, NOTIFICATION_LEVEL_NORMAL, $rangeInfo);
     $templateMgr->assign('notifications', $notifications);
     $templateMgr->assign('unread', $notificationDao->getUnreadNotificationCount($userId));
     $templateMgr->assign('read', $notificationDao->getReadNotificationCount($userId));
     $templateMgr->assign('url', PKPRequest::url(NotificationHandler::getContextDepthArray(), 'notification', 'settings'));
     $templateMgr->display('notification/index.tpl');
 }
 /**
  * Smarty usage: {sort_heading key="localization.key.name" sort="foo"}
  *
  * Custom Smarty function for creating heading links to sort tables by
  * @params $params array associative array
  * @params $smarty Smarty
  * @return string heading link to sort table by
  */
 function smartySortHeading($params, &$smarty)
 {
     if (isset($params) && !empty($params)) {
         $sortParams = Request::getQueryArray();
         isset($params['sort']) ? $sortParams['sort'] = $params['sort'] : null;
         $sortDirection = $smarty->get_template_vars('sortDirection');
         $sort = $smarty->get_template_vars('sort');
         // Invert sort direction
         if ($params['sort'] == $sort) {
             if ($sortDirection == SORT_DIRECTION_ASC) {
                 $sortParams['sortDirection'] = SORT_DIRECTION_DESC;
             } else {
                 $sortParams['sortDirection'] = SORT_DIRECTION_ASC;
             }
         } else {
             $sortParams['sortDirection'] = SORT_DIRECTION_ASC;
         }
         $link = PKPRequest::url(null, null, null, Request::getRequestedArgs(), $sortParams, null, true);
         $text = isset($params['key']) ? Locale::translate($params['key']) : '';
         $style = isset($sort) && isset($params['sort']) && $sort == $params['sort'] ? ' style="font-weight:bold"' : '';
         return "<a href=\"{$link}\"{$style}>{$text}</a>";
     }
 }
 /**
  * Display page links for a listing of items that has been
  * divided onto multiple pages.
  * Usage:
  * {page_links
  * 	name="nameMustMatchGetRangeInfoCall"
  * 	iterator=$myIterator
  *	additional_param=myAdditionalParameterValue
  * }
  */
 function smartyPageLinks($params, $smarty)
 {
     $iterator = $params['iterator'];
     $name = $params['name'];
     if (isset($params['params']) && is_array($params['params'])) {
         $extraParams = $params['params'];
         unset($params['params']);
         $params = array_merge($params, $extraParams);
     }
     if (isset($params['anchor'])) {
         $anchor = $params['anchor'];
         unset($params['anchor']);
     } else {
         $anchor = null;
     }
     if (isset($params['all_extra'])) {
         $allExtra = ' ' . $params['all_extra'];
         unset($params['all_extra']);
     } else {
         $allExtra = '';
     }
     unset($params['iterator']);
     unset($params['name']);
     $numPageLinks = $smarty->get_template_vars('numPageLinks');
     if (!is_numeric($numPageLinks)) {
         $numPageLinks = 10;
     }
     $page = $iterator->getPage();
     $pageCount = $iterator->getPageCount();
     $pageBase = max($page - floor($numPageLinks / 2), 1);
     $paramName = $name . 'Page';
     if ($pageCount <= 1) {
         return '';
     }
     $value = '';
     $router = $this->_request->getRouter();
     $requestedArgs = null;
     if (is_a($router, 'PageRouter')) {
         $requestedArgs = $router->getRequestedArgs($this->_request);
     }
     if ($page > 1) {
         $params[$paramName] = 1;
         $value .= '<a href="' . $this->_request->url(null, null, null, $requestedArgs, $params, $anchor) . '"' . $allExtra . '>&lt;&lt;</a>&nbsp;';
         $params[$paramName] = $page - 1;
         $value .= '<a href="' . $this->_request->url(null, null, null, $requestedArgs, $params, $anchor) . '"' . $allExtra . '>&lt;</a>&nbsp;';
     }
     for ($i = $pageBase; $i < min($pageBase + $numPageLinks, $pageCount + 1); $i++) {
         if ($i == $page) {
             $value .= "<strong>{$i}</strong>&nbsp;";
         } else {
             $params[$paramName] = $i;
             $value .= '<a href="' . $this->_request->url(null, null, null, $requestedArgs, $params, $anchor) . '"' . $allExtra . '>' . $i . '</a>&nbsp;';
         }
     }
     if ($page < $pageCount) {
         $params[$paramName] = $page + 1;
         $value .= '<a href="' . $this->_request->url(null, null, null, $requestedArgs, $params, $anchor) . '"' . $allExtra . '>&gt;</a>&nbsp;';
         $params[$paramName] = $pageCount;
         $value .= '<a href="' . $this->_request->url(null, null, null, $requestedArgs, $params, $anchor) . '"' . $allExtra . '>&gt;&gt;</a>&nbsp;';
     }
     return $value;
 }
 /**
  * Reset a user's password
  * @param $args array first param contains the username of the user whose password is to be reset
  */
 function resetPassword($args)
 {
     $this->validate();
     $this->setupTemplate();
     $username = isset($args[0]) ? $args[0] : null;
     $userDao =& DAORegistry::getDAO('UserDAO');
     $confirmHash = Request::getUserVar('confirm');
     if ($username == null || ($user =& $userDao->getUserByUsername($username)) == null) {
         PKPRequest::redirect(null, null, 'lostPassword');
         return;
     }
     $templateMgr =& TemplateManager::getManager();
     $hash = Validation::generatePasswordResetHash($user->getId());
     if ($hash == false || $confirmHash != $hash) {
         $templateMgr->assign('errorMsg', 'user.login.lostPassword.invalidHash');
         $templateMgr->assign('backLink', PKPRequest::url(null, null, 'lostPassword'));
         $templateMgr->assign('backLinkLabel', 'user.login.resetPassword');
         $templateMgr->display('common/error.tpl');
     } else {
         // Reset password
         $newPassword = Validation::generatePassword();
         if ($user->getAuthId()) {
             $authDao =& DAORegistry::getDAO('AuthSourceDAO');
             $auth =& $authDao->getPlugin($user->getAuthId());
         }
         if (isset($auth)) {
             $auth->doSetUserPassword($user->getUsername(), $newPassword);
             $user->setPassword(Validation::encryptCredentials($user->getId(), Validation::generatePassword()));
             // Used for PW reset hash only
         } else {
             $user->setPassword(Validation::encryptCredentials($user->getUsername(), $newPassword));
         }
         $user->setMustChangePassword(1);
         $userDao->updateObject($user);
         // Send email with new password
         $site =& Request::getSite();
         import('classes.mail.MailTemplate');
         $mail = new MailTemplate('PASSWORD_RESET');
         $this->_setMailFrom($mail);
         $mail->assignParams(array('username' => $user->getUsername(), 'password' => $newPassword, 'siteTitle' => $site->getLocalizedTitle()));
         $mail->addRecipient($user->getEmail(), $user->getFullName());
         $mail->send();
         $templateMgr->assign('pageTitle', 'user.login.resetPassword');
         $templateMgr->assign('message', 'user.login.lostPassword.passwordSent');
         $templateMgr->assign('backLink', PKPRequest::url(null, Request::getRequestedPage()));
         $templateMgr->assign('backLinkLabel', 'user.login');
         $templateMgr->display('common/message.tpl');
     }
 }
 function setupTemplate($subclass = false)
 {
     parent::setupTemplate(true);
     if ($subclass) {
         $templateMgr =& TemplateManager::getManager();
         $templateMgr->append('pageHierarchy', array(PKPRequest::url(null, 'manager', 'announcements'), 'manager.announcements'));
     }
 }