/** * Reset the user's password * * @param string $link The encoded link * @return bool */ public static function resetPassword($link) { $json = new Services_JSON(); $criteria = (array) $json->decode(urldecode(base64_decode($link))); if (!isset($criteria['username']) || null == $criteria['username'] || !isset($criteria['email']) || null == $criteria['email'] || !isset($criteria['code']) || null == $criteria['code']) { return false; } $users = Modules_Core_Services_User::find($criteria, null, null); if ($users == null || count($users) == 0) { return false; } /** * Send the confirmation link to reset password via email */ $user = $users[0]; /** * Reset the password */ $password = self::generatePassword(); $passwordEncrypt = self::encryptPassword($password, $user['salt']); self::updatePasswordFor($user['username'], $passwordEncrypt); $template = Modules_Mail_Services_Template::getByName(Modules_Mail_Models_Template::TEMPLATE_NEW_PASSWORD); if ($template == null) { return; } $view = Gio_Core_View::getInstance(); $search = array(Modules_Mail_Models_Mail::MAIL_VARIABLE_EMAIL, Modules_Mail_Models_Mail::MAIL_VARIABLE_USERNAME); $replace = array($user['email'], $user['username']); $subject = str_replace($search, $replace, $template['subject']); $content = str_replace($search, $replace, $template['body']); $content = str_replace('%new_password%', $password, $content); $content = str_replace('%link%', $view->url('core_auth_login'), $content); /** * Get mail transport instance */ $mailer = Modules_Mail_Services_Mailer::getMailTransport(); $mailer->From = $template['from_mail']; $mailer->FromName = $template['from_name']; $mailer->AddAddress($user['email'], $user['username']); $mailer->AddReplyTo($template['reply_to_mail'], $template['reply_to_name']); $mailer->WordWrap = 50; // set word wrap $mailer->IsHTML(true); // send as HTML $mailer->Subject = $subject; $mailer->Body = $content; //HTML Body $mailer->AltBody = ""; //Text Body if (!$mailer->Send()) { return false; } else { return true; } }
public function listAction() { $request = $this->getRequest(); $perPage = 20; $pageIndex = (int) $request->getParam('page_index'); if (null == $pageIndex || '' == $pageIndex || $pageIndex < 0) { $pageIndex = 1; } $start = ($pageIndex - 1) * $perPage; $this->view->pageIndex = $pageIndex; $condition = array('status' => 'active', 'search_form' => false); $json = new Services_JSON(); if ($request->isPost()) { $condition = $request->getPost('condition'); $condition['search_form'] = true; $params = rawurlencode(base64_encode($json->encodeUnsafe($condition))); } else { $params = $request->getParam('q'); $params != null ? $condition = (array) $json->decode(rawurldecode(base64_decode($params))) : ($params = rawurlencode(base64_encode($json->encodeUnsafe($condition)))); } $params = empty($condition) ? null : $params; $this->view->condition = $condition; $users = Modules_Core_Services_User::find($condition, $start, $perPage); $numUsers = Modules_Core_Services_User::count($condition); $this->view->users = $users; $roles = Modules_Core_Services_Role::getAllRoles(); $this->view->roles = $roles; // Pager require_once LIB_DIR . DS . 'PEAR' . DS . 'Pager' . DS . 'Sliding.php'; $pagerPath = $this->view->url('core_user_list'); $pagerOptions = array('mode' => 'Sliding', 'append' => false, 'perPage' => $perPage, 'delta' => 5, 'urlVar' => 'page', 'path' => $pagerPath, 'fileName' => null == $params ? 'page-%d' : 'page-%d/?q=' . $params, 'separator' => '', 'nextImg' => '<small class="icon arrow_right"></small>', 'prevImg' => '<small class="icon arrow_left"></small>', 'altNext' => '', 'altPrev' => '', 'altPage' => '', 'totalItems' => $numUsers, 'currentPage' => $pageIndex, 'urlSeparator' => '/', 'spacesBeforeSeparator' => 0, 'spacesAfterSeparator' => 0, 'curPageSpanPre' => '<a href="javascript: void();" class="current">', 'curPageSpanPost' => '</a>'); $pager = new Pager_Sliding($pagerOptions); $this->view->pager = $pager; }