Beispiel #1
0
 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');
 }
Beispiel #2
0
 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');
 }
Beispiel #3
0
 /**
  * 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;
     }
 }
Beispiel #4
0
 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'));
             }
         }
     }
 }
Beispiel #5
0
 /**
  * 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;
 }
Beispiel #6
0
 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;
 }
Beispiel #7
0
 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;
 }