/** * @param array $data * @throws Exception * @throws ValidatorException * @return integer */ public function createOne($data) { // password $password = $data['password'] ?? null; $password2 = $data['password2'] ?? null; if (empty($password)) { throw ValidatorException::exception('password', __('Password can\'t be empty')); } if ($password !== $password2) { throw ValidatorException::exception('password2', __('Password is not equal')); } if ($data['id'] == '') { unset($data['id']); } /** @var $row Row */ $row = $this->getTable()->create(); $row->setFromArray($data); $row->status = Table::STATUS_PENDING; $row->save(); $userId = $row->id; // create auth Auth\Table::getInstance()->generateEquals($row, $password); // create activation token // valid for 5 days $actionRow = UsersActions\Table::getInstance()->generate($userId, UsersActions\Table::ACTION_ACTIVATION, 5); // send activation email // generate activation URL $activationUrl = Router::getFullUrl('users', 'activation', ['code' => $actionRow->code, 'id' => $userId]); $subject = "Activation"; $body = Application::getInstance()->dispatch('users', 'mail/template', ['template' => 'registration', 'vars' => ['user' => $row, 'activationUrl' => $activationUrl, 'password' => $password]])->render(); try { $mail = Mailer::create(); $mail->Subject = $subject; $mail->msgHTML(nl2br($body)); $mail->addAddress($data['email']); Mailer::send($mail); } catch (\Exception $e) { Logger::log('error', $e->getMessage(), ['module' => 'users', 'controller' => 'change-email', 'userId' => $userId]); throw new Exception('Unable to send email. Please contact administrator.'); } // show notification and redirect Messages::addSuccess("Your account has been created and an activation link has" . "been sent to the e-mail address you entered.<br/>" . "Note that you must activate the account by clicking on the activation link" . "when you get the e-mail before you can login."); // wtf? // redirectTo('index', 'index'); return $userId; }
* @namespace */ namespace Application; use Bluz\Common\Nil; use Bluz\Proxy\Cache; use Bluz\Proxy\Messages; return function () { /** * @var Bootstrap $this */ if (!Cache::getInstance() instanceof Nil) { // routers Cache::delete('router:routers'); Cache::delete('router:reverse'); // roles Cache::deleteByTag('roles'); Cache::deleteByTag('privileges'); // reflection data Cache::deleteByTag('reflection'); // db metadata Cache::deleteByTag('db'); // view data Cache::deleteByTag('view'); // html data Cache::deleteByTag('html'); Messages::addSuccess("Cache is cleaned"); } else { Messages::addNotice("Cache is disabled"); } };
throw new Exception('User is inactive'); } // create activation token // valid for 5 days $actionRow = UsersActions\Table::getInstance()->generate($user->id, UsersActions\Table::ACTION_RECOVERY, 5); // send activation email // generate restore URL $resetUrl = Router::getFullUrl('users', 'recovery-reset', ['code' => $actionRow->code, 'id' => $user->id]); $subject = "Password Recovery"; $body = $this->dispatch('users', 'mail-template', ['template' => 'recovery', 'vars' => ['user' => $user, 'resetUrl' => $resetUrl]])->render(); try { $mail = Mailer::create(); // subject $mail->Subject = $subject; $mail->MsgHTML(nl2br($body)); $mail->AddAddress($user->email); Mailer::send($mail); } catch (\Exception $e) { // log it Logger::log('error', $e->getMessage(), ['module' => 'users', 'controller' => 'recovery', 'email' => $email]); throw new Exception('Unable to send email. Please contact administrator.'); } // show notification and redirect Messages::addSuccess("Reset password instructions has been sent to your email address"); $this->redirectTo('index', 'index'); } catch (Exception $e) { Messages::addError($e->getMessage()); } $view->email = $email; } };
* @accept HTML * @accept JSON * @privilege Management * * @param int $id * @return bool * @throws Exception */ return function ($id) { /** * @var Controller $this */ $user = Users\Table::findRow($id); if (!$user) { throw new Exception('User ID is incorrect'); } if (Request::isPost()) { $roles = Request::getParam('roles'); // update roles Db::delete('acl_users_roles')->where('userId = ?', $user->id)->execute(); foreach ($roles as $role) { Db::insert('acl_users_roles')->set('userId', $user->id)->set('roleId', $role)->execute(); } // clean cache Cache::delete('user:'******'User roles was updated'); return false; } $this->assign('user', $user); $this->assign('roles', Roles\Table::getInstance()->getRoles()); };
} $datetime1 = new \DateTime(); // now $datetime2 = new \DateTime($actionRow->expired); $interval = $datetime1->diff($datetime2); if ($actionRow->action !== UsersActions\Table::ACTION_ACTIVATION) { Messages::addError('Invalid activation code'); } elseif ($interval->invert) { Messages::addError('The activation code has expired'); $actionRow->delete(); } else { // change user status $userRow = Users\Table::findRow($id); $userRow->status = Users\Table::STATUS_ACTIVE; $userRow->save(); // create user role // get member role $roleRow = Roles\Table::findRowWhere(['name' => Table::BASIC_MEMBER]); // create relation user to role $usersRoleRow = new UsersRoles\Row(); $usersRoleRow->roleId = $roleRow->id; $usersRoleRow->userId = $userRow->id; $usersRoleRow->save(); // remove old code $actionRow->delete(); Messages::addSuccess('Your Account has been successfully activated. <br/>' . 'You can now log in using the username and password you chose during the registration.'); $this->redirectTo('users', 'signin'); } $this->redirectTo('index', 'index'); return false; };
namespace Application; use Bluz\Application\Exception\BadRequestException; use Bluz\Application\Exception\NotImplementedException; use Bluz\Proxy\Messages; use Bluz\Proxy\Request; use Bluz\Validator\Exception\ValidatorException; /** * @accept HTML * @accept JSON * @method PUT * * @param \Bluz\Crud\Table $crud * @param mixed $primary * @param array $data * @return void|array * @throws BadRequestException * @throws NotImplementedException */ return function ($crud, $primary, $data) { try { // Result is numbers of affected rows $crud->updateOne($primary, $data); Messages::addSuccess("Record was updated"); return ['row' => $crud->readOne($primary), 'method' => Request::getMethod()]; } catch (ValidatorException $e) { $row = $crud->readOne($primary); $row->setFromArray($data); return ['row' => $row, 'errors' => $e->getErrors(), 'method' => Request::getMethod()]; } };
/** * Test Messages container */ public function testMessagesPopAll() { Proxy\Messages::addError('error'); Proxy\Messages::addNotice('notice'); Proxy\Messages::addSuccess('success'); $messages = Proxy\Messages::popAll(); $this->assertArrayHasKeyAndSize($messages, 'error', 1); $this->assertArrayHasKeyAndSize($messages, 'notice', 1); $this->assertArrayHasKeyAndSize($messages, 'success', 1); }
use Bluz\Proxy\Messages; return function ($tree, $treeParent) use($view) { /** * @var Bootstrap $this */ try { $categories = json_decode($tree); if (!$categories) { throw new Exception('Categories tree is broken'); } foreach ($categories as $node) { if (isset($node->item_id)) { $dbNode = Categories\Table::findRow($node->item_id); if (!$node->parent_id) { $node->parent_id = $treeParent; } if ($dbNode->parentId != $node->parent_id && $node->parent_id) { $dbNode->parentId = $node->parent_id; $dbNode->save(); } if ($dbNode->order != $node->order && $node->order) { $dbNode->order = $node->order; $dbNode->save(); } } } Messages::addSuccess('Tree has been saved'); } catch (\Exception $e) { Messages::addError($e->getMessage()); } };
<?php /** * Test CLI * * @author Anton Shevchuk * @created 18.11.12 19:41 */ namespace Application; use Bluz\Proxy\Messages; return function ($flag = false) use($view) { /** * @var Bootstrap $this * @var \Bluz\View\View $view */ if ($flag) { Messages::addNotice('Notice Text'); Messages::addSuccess('Success Text'); Messages::addError('Error Text'); Messages::addError('Another Error Text'); } $view->string = 'bar'; $view->array = ['some', 'array']; $view->object = new \stdClass(); $view->object->property = 'example'; };
/** * {@inheritdoc} * * @param mixed $primary * @return int * @throws \Bluz\Application\Exception\ApplicationException * @throws \Bluz\Application\Exception\NotImplementedException */ public function deleteOne($primary) { $result = parent::deleteOne($primary); Messages::addSuccess("Record was deleted"); return $result; }
use Bluz\Proxy\Cache; use Bluz\Proxy\Db; use Bluz\Proxy\Messages; return function ($acl) use($view) { /** * @var Bootstrap $this * @var \Bluz\View\View $view */ $callback = function () use($acl) { /** * @var Bootstrap $this */ Db::query('DELETE FROM acl_privileges'); foreach ($acl as $roleId => $modules) { foreach ($modules as $module => $privileges) { foreach ($privileges as $privilege => $flag) { Db::query('INSERT INTO acl_privileges SET roleId = ?, module = ?, privilege = ?', array($roleId, $module, $privilege)); } } } }; if (empty($acl)) { Messages::addError('Privileges set is empty. You can\'t remove all of them'); } elseif (Db::transaction($callback)) { Cache::deleteByTag('privileges'); Messages::addSuccess('All data was saved'); } else { Messages::addError('Internal Server Error'); } $this->redirectTo('acl', 'index'); };
$user = Users\Table::findRow($userId); if (!$user) { throw new NotFoundException('User not found'); } if (Request::isPost()) { // process form try { if (empty($password)) { throw new BadRequestException('Please input current password'); } if (empty($new_password)) { throw new BadRequestException('Please input new password'); } if (empty($new_password2)) { throw new BadRequestException('Please repeat new password'); } $authTable = Auth\Table::getInstance(); // password check $authTable->checkEquals($user->login, $password); // create new Auth record $authTable->generateEquals($user, $new_password); Messages::addSuccess("The password was updated successfully"); // try back to index $this->redirectTo('users', 'profile'); } catch (BadRequestException $e) { Messages::addError($e->getMessage()); } catch (AuthException $e) { Messages::addError($e->getMessage()); } } };
<?php /** * Test AJAX * * @author Anton Shevchuk * @created 26.09.11 17:41 * @return closure */ namespace Application; use Bluz\Proxy\Messages; use Bluz\Proxy\Request; return function ($messages = false) use($view) { /** * @var Bootstrap $this * @var \Bluz\View\View $view */ if ($messages) { Messages::addNotice('Notice for AJAX call'); Messages::addSuccess('Success for AJAX call'); Messages::addError('Error for AJAX call'); $view->baz = 'qux'; } Messages::addNotice('Method ' . Request::getMethod()); $view->foo = 'bar'; };
/** * CRUD controller for DELETE method * * @category Application * * @author Anton Shevchuk * @created 19.02.15 16:27 */ namespace Application; use Bluz\Application\Exception\BadRequestException; use Bluz\Proxy\Messages; /** * @accept HTML * @accept JSON * @method DELETE * * @param \Bluz\Crud\Table $crud * @param mixed $primary * @param array $data * @return void * @throws BadRequestException * @throws \Bluz\Application\Exception\NotFoundException * @throws \Bluz\Application\Exception\NotImplementedException */ return function ($crud, $primary, $data) { // @throws NotFoundException $crud->deleteOne($primary); Messages::addSuccess("Record was deleted"); };
<?php /** * Build list of routers * * @author Anton Shevchuk * @created 12.06.12 12:27 */ /** * @namespace */ namespace Application; use Bluz\Common\Nil; use Bluz\Proxy\Cache; use Bluz\Proxy\Messages; return function () { /** * @var Bootstrap $this */ if (!Cache::getInstance() instanceof Nil) { Cache::flush(); Messages::addSuccess("Cache is flushed"); } else { Messages::addNotice("Cache is disabled"); } };
<?php /** * Delete of CRUD * * @category Application * * @author dark * @created 14.05.13 10:51 */ namespace Application; use Bluz\Proxy\Messages; return function ($id) use($view) { /** * @var Bootstrap $this */ if ($row = Test\Table::findRow($id)) { $row->delete(); $this->redirectTo('test', 'index'); Messages::addSuccess("Row was removed"); } else { throw new Exception('Record not found'); } };
} elseif ($interval->invert) { Messages::addError('The activation code has expired'); $actionRow->delete(); Response::redirectTo('index', 'index'); } else { $user = Users\Table::findRow($id); $this->assign('user', $user); $this->assign('code', $code); if (Request::isPost()) { try { if (empty($password) or empty($password2)) { throw new Exception('Please enter your new password'); } if ($password != $password2) { throw new Exception('Please repeat your new password'); } // remove old auth record if ($oldAuth = Auth\Table::getInstance()->getAuthRow(Auth\Table::PROVIDER_EQUALS, $user->login)) { $oldAuth->delete(); } // create new auth record Auth\Table::getInstance()->generateEquals($user, $password); // show notification and redirect Messages::addSuccess("Your password has been updated"); Response::redirectTo('users', 'signin'); } catch (Exception $e) { Messages::addError($e->getMessage()); } } } };
* * @author Anton Shevchuk * @created 19.02.15 16:27 */ namespace Application; use Bluz\Proxy\Messages; use Bluz\Proxy\Request; use Bluz\Validator\Exception\ValidatorException; /** * @accept HTML * @accept JSON * @method POST * * @param \Bluz\Crud\Table $crud * @param mixed $primary * @param array $data * @return array */ return function ($crud, $primary, $data) { try { // Result is Primary Key(s) $result = $crud->createOne($data); Messages::addSuccess("Record was created"); return ['row' => $crud->readOne($result), 'method' => Request::METHOD_PUT]; } catch (ValidatorException $e) { $row = $crud->readOne(null); $row->setFromArray($data); return ['row' => $row, 'errors' => $e->getErrors(), 'method' => Request::getMethod()]; } };
$mail->msgHTML(nl2br($body)); $mail->addAddress($email); Mailer::send($mail); Messages::addNotice('Check your email and follow instructions in letter.'); } catch (\Exception $e) { Logger::log('error', $e->getMessage(), ['module' => 'users', 'controller' => 'change-email', 'userId' => $userId]); throw new Exception('Unable to send email. Please contact administrator.'); } // try back to index Response::redirectTo('users', 'profile'); } catch (Exception $e) { Messages::addError($e->getMessage()); $this->assign('email', $email); } catch (AuthException $e) { Messages::addError($e->getMessage()); $this->assign('email', $email); } } elseif ($token) { // process activation $actionRow = UsersActions\Table::findRowWhere(['code' => $token, 'userId' => $userId]); if (!$actionRow) { throw new Exception('Invalid token'); } $params = $actionRow->getParams(); $user->email = $params['email']; $user->save(); $actionRow->delete(); Messages::addSuccess('Email was updated'); Response::redirectTo('users', 'profile'); } };
* * @author Anton Shevchuk * @created 07.09.12 18:28 */ namespace Application; use Bluz\Proxy\Layout; use Bluz\Proxy\Mailer; use Bluz\Proxy\Messages; use Bluz\Proxy\Request; return function ($email = "*****@*****.**") use($view) { /** * @var Bootstrap $this * @var \Bluz\View\View $view */ Layout::breadCrumbs([$view->ahref('Test', ['test', 'index']), 'Mailer Example']); if (Request::isPost()) { try { $mail = Mailer::create(); // subject $mail->Subject = "Example of Bluz Mailer"; $mail->MsgHTML("Hello!<br/>How are you?"); $mail->AddAddress($email); Mailer::send($mail); Messages::addSuccess("Email was send"); } catch (\Exception $e) { Messages::addError($e->getMessage()); } } $view->email = $email; };