Пример #1
0
 /**
  * @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;
 }
Пример #2
0
 * @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");
    }
};
Пример #3
0
                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;
    }
};
Пример #4
0
 * @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());
};
Пример #5
0
    }
    $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;
};
Пример #6
0
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()];
    }
};
Пример #7
0
 /**
  * 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);
 }
Пример #8
0
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());
    }
};
Пример #9
0
<?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';
};
Пример #10
0
 /**
  * {@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;
 }
Пример #11
0
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');
};
Пример #12
0
    $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());
        }
    }
};
Пример #13
0
<?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';
};
Пример #14
0
/**
 * 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");
};
Пример #15
0
<?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");
    }
};
Пример #16
0
<?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');
    }
};
Пример #17
0
    } 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());
            }
        }
    }
};
Пример #18
0
 *
 * @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()];
    }
};
Пример #19
0
                $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');
    }
};
Пример #20
0
 *
 * @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;
};