Example of usage
use Bluz\Proxy\Messages;
Messages::addSuccess('All Ok!');
/** * Reset layout and Request */ protected static function resetApp() { if (self::$app) { self::$app->useLayout(true); } Proxy\Auth::clearIdentity(); Proxy\Messages::popAll(); Proxy\Request::setInstance(new Http\Request()); Proxy\Response::setInstance(new Http\Response()); Proxy\Response::setPresentation(null); }
/** * Denied access * @throws ForbiddenException * @return void */ public function denied() { // add messages make sense only if presentation is not json, xml, etc if (!$this->getResponse()->getPresentation()) { Messages::addError('You don\'t have permissions, please sign in'); } // redirect to login page if (!$this->user()) { // save URL to session and redirect make sense if presentation is null if (!$this->getResponse()->getPresentation()) { Session::set('rollback', Request::getRequestUri()); $this->redirectTo('users', 'signin'); } } throw new ForbiddenException(); }
/** * @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; }
/** * Response as Json */ public function process() { // override response code so javascript can process it $this->response->setHeader('Content-Type', 'application/json'); // setup messages if (Messages::count()) { $this->response->setHeader('Bluz-Notify', json_encode(Messages::popAll())); } // prepare body if ($body = $this->response->getBody()) { // convert to JSON $body = json_encode($body); // setup content length $this->response->setHeader('Content-Length', strlen($body)); // prepare to JSON output $this->response->setBody($body); } }
public function testUserNotLinkedTo() { $userProfile = new \Hybrid_User_Profile(); $userProfile->identifier = null; $this->hybridAuthMock->method('authenticate')->willReturn(new \Hybrid_Provider_Adapter()); $this->authAdapterMock->method('getUserProfile')->willReturn($userProfile); $this->assertInstanceOf('\\Hybrid_Auth', $this->hybridAuthMock); $provider = new AuthProvider('Facebook'); $provider->setResponse($this->getApp()); $provider->setHybridauth($this->hybridAuthMock); $provider->setAuthAdapter($this->authAdapterMock); try { $provider->authProcess(); } catch (RedirectException $red) { } catch (\Exception $e) { } $message = Messages::pop(); $this->assertEquals("First you need to be linked to Facebook", $message->text); }
} $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; };
/** * @param $auth * @return mixed */ public function alreadyRegisteredLogic($auth) { $user = Users\Table::findRow($auth->userId); if ($user->status != Users\Table::STATUS_ACTIVE) { Messages::addError('User is not active'); } $user->login(); $this->response->redirectTo('index', 'index'); }
/** * Test Messages container */ public function testMessagesPopAllForEmpty() { $messages = Proxy\Messages::popAll(); $this->assertArrayHasKey('error', $messages); $this->assertArrayHasKey('notice', $messages); $this->assertArrayHasKey('success', $messages); }
break; case 501: $title = __("Not Implemented"); $description = __("The server does not understand or does not support the HTTP method"); break; case 503: $title = __("Service Unavailable"); $description = __("The server is currently unable to handle the request due to a temporary overloading"); Response::setHeader('Retry-After', '600'); break; default: $title = __("Internal Server Error"); $description = __("An unexpected error occurred with your request. Please try again later"); break; } // check CLI or HTTP request if (Request::isHttp()) { // simple AJAX call, accept JSON if (Request::getAccept(['application/json'])) { $this->useJson(); Messages::addError($description); return null; } // dialog AJAX call, accept HTML if (!Request::isXmlHttpRequest()) { $this->useLayout('small.phtml'); } } Layout::title($title); return ['error' => $title, 'description' => $description]; };
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()); } };
*/ /** * @namespace */ namespace Application; use Application\Categories; use Bluz\Proxy\Layout; use Bluz\Proxy\Messages; return function ($id = null) use($view) { /** * @var Bootstrap $this * @var \Bluz\View\View $view */ Layout::setTemplate('dashboard.phtml'); Layout::headStyle($view->baseUrl('css/categories.css')); Layout::breadCrumbs([$view->ahref('Dashboard', ['dashboard', 'grid']), __('Categories')]); $categoriesTable = Categories\Table::getInstance(); $rootTree = $categoriesTable->getAllRootCategory(); if (count($rootTree) == 0) { Messages::addNotice('There are no categories'); return $view; } $view->rootTree = $rootTree; if (!$id) { $id = $rootTree[0]->id; } $view->branch = $id; $view->tree = $categoriesTable->buildTree($id); return $view; };
/** * Reset layout and Request */ protected static function resetApp() { if (self::$app) { self::$app->useLayout(true); self::$app->resetRouter(); } Proxy\Auth::clearIdentity(); Proxy\Messages::popAll(); Proxy\Request::setInstance(RequestFactory::fromGlobals()); Proxy\Response::setInstance(new Bluz\Response\Response()); }
/** * Check Messages * * @param string $type * @param string $text * @return void */ private function checkMessage($type, $text = null) { $message = Messages::pop($type); if (!$message) { $this->fail("System should be generated `{$type}` message"); } if ($text) { $this->assertEquals($text, $message->text); } }
* @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()); };
case 503: $title = __("Service Unavailable"); $description = __("The server is currently unable to handle the request due to a temporary overloading"); Response::setHeader('Retry-After', '600'); break; default: $title = __("Internal Server Error"); $description = __("An unexpected error occurred with your request. Please try again later"); break; } // check CLI or HTTP request if (Request::isHttp()) { // simple AJAX call, accept JSON if (Request::getAccept() == Request::ACCEPT_JSON) { $this->useJson(); Messages::addError($message); return $view; } // dialog AJAX call, accept HTML if (!Request::isXmlHttpRequest()) { $this->useLayout('small.phtml'); } } Layout::title($title); $view->error = $title; $view->description = $description; if (getenv('BLUZ_DEBUG') && $message != '') { $view->message = $message; } return $view; };
/** * Initialize process * * @param string $environment * @throws ApplicationException * @return void */ public function init($environment = 'production') { $this->environment = $environment; try { // first log message Logger::info('app:init'); // initial default helper path $this->addHelperPath(dirname(__FILE__) . '/Helper/'); // init Config $this->initConfig(); // init Session, start inside class (if needed) Session::getInstance(); // init Messages Messages::getInstance(); // init Translator Translator::getInstance(); // init Request $this->initRequest(); // init Response $this->initResponse(); // init Router $this->initRouter(); } catch (\Exception $e) { throw new ApplicationException("Application can't be loaded: " . $e->getMessage()); } }
/** * 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 /** * 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'; };
/** * send * * @throws NotAcceptableException */ public function send() { $body = $this->getBody(); $this->sendCookies(); switch (true) { case 'CLI' == $this->type: // CLI response $response = new CliResponse($body->render('CLI'), $this->getStatusCode()); break; case is_null($body): case 204 == $this->getStatusCode(): $response = new EmptyResponse($this->getStatusCode(), $this->getHeaders()); break; case 301 == $this->getStatusCode(): case 302 == $this->getStatusCode(): $response = new RedirectResponse($this->getHeader('Location'), $this->getStatusCode(), $this->getHeaders()); break; case 'JSON' == $this->type: // JSON response // setup messages if (Messages::count()) { $this->setHeader('Bluz-Notify', json_encode(Messages::popAll())); } // encode body data to JSON $response = new JsonResponse($body, $this->getStatusCode(), $this->getHeaders()); break; case 'HTML' == $this->type: default: // HTML response $response = new HtmlResponse((string) $body, $this->getStatusCode(), $this->getHeaders()); break; } $emitter = new SapiEmitter(); $emitter->emit($response); }
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'); };
/** * {@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; }
<?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'; };
<?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'); } };
/** * Initialize process * @param string $environment Array format only! * @throws ApplicationException * @return void */ public function init($environment = 'production') { $this->environment = $environment; try { // initial default helper path $this->addHelperPath(dirname(__FILE__) . '/Helper/'); // first log message Logger::info('app:init'); // setup configuration for current environment if ($debug = Config::getData('debug')) { $this->debugFlag = (bool) $debug; } // initial php settings if ($ini = Config::getData('php')) { foreach ($ini as $key => $value) { $result = ini_set($key, $value); Logger::info('app:init:php:' . $key . ':' . ($result ?: '---')); } } // init session, start inside class Session::getInstance(); // init Messages Messages::getInstance(); // init Translator Translator::getInstance(); // init request $this->initRequest(); // init response $this->initResponse(); // init router Router::getInstance(); } catch (\Exception $e) { throw new ApplicationException("Application can't be loaded: " . $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()]; } };
protected function tearDown() { Db::delete('users')->where('id IN (?)', [1, 2])->execute(); Messages::popAll(); }
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()]; } };
$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'); } };
<?php /** * Logout proccess * * @author Anton Shevchuk * @created 20.07.11 18:39 * @return closure */ namespace Application; use Application\Auth as AppAuth; use Bluz\Controller\Controller; use Bluz\Proxy\Auth; use Bluz\Proxy\Messages; use Bluz\Proxy\Response; /** * @return void */ return function () { /** * @var Controller $this */ if ($this->user()) { AppAuth\Table::getInstance()->removeCookieToken($this->user()->id); Auth::clearIdentity(); } Messages::addNotice('You are signout'); Response::redirectTo('index', 'index'); };