public function deleteAction() { $this->setNoRender(); $this->disableLayout(); $request = $this->getRequest(); if (!$request->isPost()) { return; } $roleId = $request->getPost('role_id'); $role = Modules_Core_Services_Role::getById($roleId); $condition = array('role_id' => $roleId); if (null == $role || Modules_Core_Services_User::count($condition) > 0) { $this->getResponse()->setBody('RESULT_NOT_OK'); return; } /** * Delete role's rules */ Modules_Core_Services_Rule::deleteByRole($roleId); /** * Delete role */ Modules_Core_Services_Role::delete($roleId); $this->getResponse()->setBody('RESULT_OK'); }
public function profileAction() { $this->disableLayout(); $request = $this->getRequest(); $id = $request->getParam('id'); $user = Modules_Core_Services_User::getById($id); $this->view->user = $user; $width = $request->getParam('width'); $align = strtolower($request->getParam('align')); switch ($align) { case 'left': $margin = '8px 0'; break; case 'right': $margin = '8px 0 8px auto'; break; case 'center': $margin = '8px auto'; default: break; } $this->view->margin = $margin; $this->view->id = $id; $this->view->width = $width; $this->view->align = $align; header('Content-type: application/x-javascript'); }
/** * 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 myopenidAction() { $this->disableLayout(); $this->setNoRender(); $request = Gio_Core_Request::getInstance(); $this->setLayout('login'); require_once LIB_DIR . DS . 'openid' . DS . 'class.openid.v2.php'; if ($request->isPost()) { $openidUrl = $request->getPost('openid_url'); $openidUrl = rtrim($openidUrl, '/'); $openid = new OpenIDService(); $openid->SetIdentity($openidUrl); $openid->SetTrustRoot($request->getBaseUrl()); $openid->SetRequiredFields(array('email', 'fullname')); $openid->SetOptionalFields(array('dob', 'gender', 'country')); if ($openid->GetOpenIDServer()) { $openid->SetApprovedURL($this->view->url('core_auth_myopenid')); $openid->Redirect(); } else { $error = $openid->GetError(); $error_code = $error["code"]; $error_string = $error["description"]; } } elseif ($request->getParam('openid_mode') == 'id_res') { $openid = new OpenIDService(); $openidUrl = $request->getParam('openid_identity'); $openidUrl = rtrim($openidUrl, '/'); $openid->SetIdentity($openidUrl); $openid_validation_result = $openid->ValidateWithServer(); /** * Login success */ if ($openid_validation_result == true) { $user = Modules_Core_Services_User::getByOpenID($openidUrl); if ($user) { $user['last_login'] = date('Y-m-d H:i:s'); Modules_Core_Services_User::setLastLogin($user); $configs = Gio_Core_Config_Xml::getConfig('session'); $json = new Services_JSON(); $sessionId = session_id(); $session = array('session_id' => $sessionId, 'created_date' => strtotime(date('Y-m-d H:i:s')), 'last_update' => strtotime(date('Y-m-d H:i:s')), 'lifetime' => isset($configs->lifetime) ? $configs->lifetime : 3600, 'inactive_time' => isset($configs->inactive_time) ? $configs->inactive_time : 120, 'data' => $json->encodeUnsafe($user), 'status' => 'active'); Gio_Core_Session::add($session); $this->redirect($this->view->url('core_dashboard_index')); } } } }
/** * Perform install actions * * @param bool $importSampleData * @return bool */ public static function install($importSampleData = false, $adminInfo = array()) { try { $view = Gio_Core_View::getInstance(); $moduleDirs = Gio_Core_File::getSubDir(ROOT_DIR . DS . 'modules'); /** * Install modules */ $modules = array(); foreach ($moduleDirs as $module) { $modules[] = Modules_Core_Services_Module::install($module); } foreach ($modules as $module) { if ($module) { Modules_Core_Services_Module::add($module); } } /** * Install widgets */ foreach ($moduleDirs as $module) { /** * Load all widgets from module */ $widgetDirs = Gio_Core_File::getSubDir(ROOT_DIR . DS . 'modules' . DS . $module . DS . 'widgets'); foreach ($widgetDirs as $widgetName) { $widget = array('module_id' => $module, 'widget_id' => $widgetName, 'title' => $view->TRANSLATOR->widget('about_title', $module, $widgetName), 'description' => $view->TRANSLATOR->widget('about_description', $module, $widgetName), 'created_date' => date('Y-m-d H:i:s')); Modules_Core_Services_Widget::add($widget); } } /** * Create resources and previleges */ foreach ($moduleDirs as $module) { $file = ROOT_DIR . DS . 'modules' . DS . $module . DS . 'configs' . DS . 'permissions.xml'; if (!file_exists($file)) { continue; } $xml = simplexml_load_file($file); foreach ($xml->controller as $res) { $attr = $res->attributes(); $langKey = (string) $attr['langKey']; $description = $view->TRANSLATOR->translator($langKey, $module); $description = $description == $langKey ? (string) $attr['description'] : $description; $resource = array('controller_id' => $attr['name'], 'description' => $description, 'module_id' => $module, 'created_date' => date('Y-m-d H:i:s')); /** * Add resource */ Modules_Core_Services_Controller::add($resource); if ($res->action) { foreach ($res->action as $pri) { $attr2 = $pri->attributes(); $langKey = (string) $attr2['langKey']; $description = $view->TRANSLATOR->translator($langKey, $module); $description = $description == $langKey ? (string) $attr2['description'] : $description; $privilege = array('controller_id' => $attr['name'], 'description' => $description, 'module_id' => $module, 'action_id' => $attr2['name'], 'created_date' => date('Y-m-d H:i:s')); Modules_Core_Services_Action::add($privilege); } } } } /** * Finally, init data */ $dbFile = ROOT_DIR . DS . 'install' . DS . 'db.xml'; if (file_exists($dbFile)) { $xml = simplexml_load_file($dbFile); $xpath = $xml->xpath('module/query'); if (is_array($xpath) && count($xpath) > 0) { $conn = Gio_Db_Connection::getConnection(); foreach ($xpath as $query) { $q = str_replace('###table_prefix###', $conn->_tablePrefix, (string) $query); $conn->query($q); } } } /** * Allows user to import sample data */ if ($importSampleData) { $file = ROOT_DIR . DS . 'install' . DS . 'giocms_sample_db.sql'; $importer = Gio_Core_Import_Importer::getInstance(); if ($importer != null && $file != null) { $importer->import($file); } } /** * Create admin user */ $salt = md5(time()); $user = array('username' => $adminInfo['username'], 'password' => md5(md5($adminInfo['password']) . $salt), 'email' => $adminInfo['email'], 'fullname' => $adminInfo['fullname'], 'salt' => $salt, 'status' => 'active', 'created_date' => date('Y-m-d H:i:s'), 'role_id' => 1); Modules_Core_Services_User::add($user); } catch (Exception $ex) { return false; } 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; }
public function userAction() { $request = $this->getRequest(); $userId = $request->getParam('user_id'); $user = Modules_Core_Services_User::getById($userId); if (null == $user) { return; } $this->view->user = $user; $act = $request->getParam('act'); if ($request->isPost()) { $this->setNoRender(); $this->disableLayout(); $mod = $request->getPost('mod'); $this->view->mod = $mod; $controllers = Modules_Core_Services_Action::getDbActionsByModule($mod); switch ($act) { case 'save': /** * Reset rule for user */ Modules_Core_Services_Rule::reset('user', $user['user_id'], $mod); $actions = $request->getPost('actions'); if ($controllers) { foreach ($controllers as $index => $controller) { if ($controller['actions']) { foreach ($controller['actions'] as $indexAction => $controllerAction) { $allow = 0; if ($actions) { foreach ($actions as $action) { if ($mod . '_' . $controller['controller_id'] . '_' . $controllerAction['action_id'] == $action) { $allow = 1; } } } $rule = array('module_id' => $mod, 'controller_id' => $controller['controller_id'], 'action_id' => $controllerAction['action_id'], 'object_type' => 'user', 'object_id' => $user['user_id'], 'allow' => $allow); $ruleId = Modules_Core_Services_Rule::add($rule); } } } } $this->getResponse()->setBody('RESULT_OK'); return; break; default: $dbUserRules = Modules_Core_Services_Rule::getRules('user', $user['user_id']); $dbRoleRules = Modules_Core_Services_Rule::getRules('role', $user['role_id']); $dbRules = array_merge($dbUserRules, $dbRoleRules); $this->view->dbRules = $dbRules; $this->view->controllers = $controllers; $viewFile = ROOT_DIR . DS . 'templates' . DS . $this->view->APP_TEMPLATE . DS . 'modules' . DS . 'core' . DS . 'permission' . DS . 'user.ajax.phtml'; $response = $this->view->render($viewFile); $this->getResponse()->setBody($response); return; break; } } $modules = Modules_Core_Services_Module::getModulesInstalled(); /** * Add module core to the top array */ $modules = array_pad($modules, -count($modules) - 1, array('module_id' => 'core')); $this->view->modules = $modules; }