public function roleUpdateAction() { $role_id = $this->_request->getParam('role_id'); $role_name = $this->_request->getParam('role_name'); if (empty($role_id) || empty($role_name)) { throw new Exception(__METHOD__ . ' : Empty input parameters'); } $form = new FormRole(null, $role_id); $table = new Wbroles(); if ($this->_request->isPost()) { // Проверяем валидность данных формы if ($form->isValid($this->_getAllParams())) { // update data $data = array('name' => $role_name, 'order_role' => $this->_request->getParam('order'), 'description' => $this->_request->getParam('description'), 'inherit_id' => $this->_request->getParam('inherit_id')); $where = $table->getAdapter()->quoteInto('id = ?', $role_id); try { $table->update($data, $where); } catch (Zend_Exception $e) { $this->view->exception = $this->view->translate->_('Exception') . ' : ' . $e->getMessage(); } // clear all cache $this->cache_helper->clearAllCache(); // render $this->_forward('role-main-form', 'admin', null, array('role_id' => $role_id, 'role_name' => $role_name)); // action, controller return; } } // create form $row = $table->find($role_id)->current(); // fill form $form->populate(array('acl' => 'role', 'role_id' => $role_id, 'name' => $row->name, 'order' => $row->order_role, 'description' => $row->description, 'inherit_id' => $row->inherit_id)); $form->submit->setLabel($this->view->translate->_('Update')); $form->setAction($this->view->baseUrl . '/admin/role-update'); $this->view->form = $form; $this->view->title = 'Webacula :: ' . $this->view->translate->_('Role update'); $this->renderScript('admin/form-role.phtml'); }
public function loginAction() { if ($this->isAuth()) { $this->_forward('index', 'index'); // если уже залогинен: action, controller return; } $form = new formLogin(); if ($this->_request->isPost()) { /* Проверяем валидность данных формы */ if ($form->isValid($this->_getAllParams())) { $db = Zend_Registry::get('db_bacula'); /** * Настраиваем правила выборки пользователей из БД * имя таблицы, название поля с идентификатором пользователя, название поля пароля * * [ $zendDb = null], [string $tableName = null], [string $identityColumn = null], * [string $credentialColumn = null], [string $credentialTreatment = null]) */ if (Zend_Registry::get('DB_ADAPTER') == 'PDO_SQLITE') { // Sqlite do not have MD5 function $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', '? AND active = 1'); } else { $authAdapter = new Zend_Auth_Adapter_DbTable($db, 'webacula_users', 'login', 'pwd', 'MD5(?) AND active = 1'); } /* Передаем в адаптер данные пользователя */ $authAdapter->setIdentity($form->getValue('login')); $authAdapter->setCredential($form->getValue('pwd')); /* Собственно, процесс аутентификации */ $auth = Zend_Auth::getInstance(); $resultAuth = $auth->authenticate($authAdapter); /* Проверяем валидность результата */ if ($resultAuth->isValid()) { /* Пишем в сессию (default) необходимые нам данные (пароль обнуляем) */ $storage = $auth->getStorage(); $data = $authAdapter->getResultRowObject(array('id', 'login', 'role_id', 'role_name', 'email')); // find role name $table = new Wbroles(); $row = $table->find($data->role_id); if ($row->count() == 1) { $data->role_name = $row[0]['name']; } $storage->write($data); // обнуляем счетчик неудачных логинов if (isset($this->defNamespace->numLoginFails)) { $this->defNamespace->numLoginFails = 0; } // remember me if ($form->getValue('rememberme')) { Zend_Session::rememberMe(self::MAX_LIFETIME); Zend_Session::getSaveHandler()->setLifetime(self::MAX_LIFETIME); } // update user statistics $users = new Wbusers(); $users->updateLoginStat($data->login); // goto home page $this->_redirect('index/index'); } else { sleep(7); $this->view->msg = $this->view->translate->_("Username or password is incorrect"); // включаем счетчик, если кол-во неудачных логинов большое то включаем капчу $this->defNamespace->numLoginFails++; } } } /* Если данные не передавались или неверный логин, то выводим форму для авторизации */ $this->view->caption = sprintf($this->view->translate->_("Login with your %sWe%sbacula%s account"), '<font color="#00008B">', '</font><font color="#A80000">', '</font>'); $this->view->title = $this->view->translate->_('Login with your Webacula account'); $this->view->form = $form; // workaround for unit tests 'Action Helper by name Layout not found' if (!$this->_helper->hasHelper('layout')) { $this->render(); } }