<?php
/**
* Implements hook_boot();
*
* @param Environment $env
* The Environment.
* @param array $vars
* Miscellaneous environment / page variables.
*/
function user_boot($env, $vars) {
$env->sysdir('users', '_users');
$env->sysdir('roles', '_roles');
//setcookie('user', NULL, $env->getData('session_lifetime', time() - 86400));
}
/**
* Implements hook_init();
*
* Refresh user's session cookie.
*
* @param Environment $env
* The Environment.
* @param array $vars
* Miscellaneous environment / page variables.
*/
function user_init($env, $vars) {
$user = UserFactory::current($env);
//setcookie('user', NULL, $env->getData('session_lifetime', 86400));
}
/**
* Implements hook_load_includes().
*
* @param Environment $env
* The Environment.
* @param array $vars
* Miscellaneous environment / page variables.
*/
function user_load_includes($env, $vars) {
$module_path = $env->getModulePath('user');
$env->addInclude($module_path . '/js/user.js');
$env->addInclude($module_path . '/css/user.css');
}
/**
* Implements hook_doctor_setup().
* Main setup of users.
*
* @param Environment $env
* The Environment.
* @param array $vars
* Miscellaneous environment / page variables.
*/
function user_doctor_setup($env, $vars) {
/** @var Doctor $doctor */
$doctor = $vars['doctor'];
$doctor->op('Creating basic roles');
// Create the basic roles.
$basic_roles = array(
'anonymous' => array('title' => 'Anonymous'),
'logged' => array('title' => 'Logged-in User'),
'admin' => array('title' => 'Admin'),
);
foreach ($basic_roles as $role => $roledata) {
if (!is_dir($env->dir['roles'] . '/' . $role)) {
NodeFactory::buildNode($env, $role, '_roles', $roledata);
}
}
$doctor->op('Looking for Admin user');
$adminuser = UserFactory::load($env, 'administrator');
if (!($adminuser->exists)) {
$doctor->talk('Not found! Attempting to create Admin User...');
$password = 'pass';
$password_repeat = 'pass_repeat';
while ($password != $password_repeat) {
$password = $doctor->ask('Please enter a password for the administrator user', TRUE);
$password_repeat = $doctor->ask('Please repeat your password', TRUE);
if ($password != $password_repeat) {
$doctor->ko('The two passwords are not matching. Please try again!');
}
}
UserFactory::buildUser($env, 'administrator', array(
'title' => 'Administrator',
'password' => $password,
'roles' => array('admin'),
'email' => 'admin@changeme.com',
'first_name' => 'John',
'last_name' => 'Doe',
'language' => LANGUAGE_NEUTRAL,
));
$doctor->ok('Done!');
}
else {
$doctor->ok('Found!');
}
}
/**
* Implements hook_body_classes.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_body_classes($env, $vars) {
$user = UserFactory::current($env);
$roles = $user->getRoles();
foreach ($roles as $role) {
$vars['page']->addData('body_classes', array('user-' . trim($role)));
}
}
/**
* Implements hook_action_login().
* There is an user login request.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_action_login($env, $vars) {
$username = array_pop($vars['data']['username']);
// We allow also using email for logging in.
if (valid_email($username)) {
$username = UserFactory::getUserFromField($env, 'email', $username);
}
// Initialize an user object.
$tmp_user = new User($env, $username);
// Attempt to log in the user.
$login = $tmp_user->logIn(array_pop($vars['data']['password']));
exit($login);
}
/**
* Implements hook_shadow_user_register_form().
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_shadow_user_register_form($env, $vars) {
$user = UserFactory::current($env);
$tab = '<h2>Create a free account</h2>' . $user->renderEditForm($env->getContext());
$vars['shadow']->addTab('Insert your data', $tab, 1);
$vars['shadow']->addButton('edit-save', '<span style="color:green">✓ </span> Sign Up!');
}
/**
* Implements hook_shadow_user_edit_form().
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_shadow_user_edit_form($env, $vars) {
$curr_user = UserFactory::current($env);
$user = new User($env, $curr_user->name);
/** @var Shadow $shadow */
$shadow = $vars['shadow'];
// TODO: customizable titles.
switch($env->getContext()) {
case 'user_register':
$title = 'Create a free account';
break;
case 'user_edit_own':
$title = 'Edit your profile';
break;
case 'user_edit':
$title = 'Edit user: ' . $user->getName();
break;
}
$tab = '<h2>' . $title . '</h2>' . $user->renderEditForm($env->getContext());
$shadow->addTab('Your Profile', $tab, 1);
$shadow->addButton('edit-save', '<span style="color:green">✓ </span> Update');
}
/**
* Implements hook_shadow_user_login_form.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_shadow_user_login_form($env, $vars) {
$user = UserFactory::current($env);
$tab = $user->renderLoginForm();
/** @var Shadow $shadow */
$shadow = $vars['shadow'];
$shadow->addTab('Your Login Data', $tab, 1);
$shadow->addButton('edit-save', '<span style="color:green">✓ </span> Login');
}
/**
* Implements hook_action_user_edit.
* There is an user edit request.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_action_user_edit($env, $vars) {
$response_json = UserFactory::requestAction($env, $vars['data']['action'], $vars['data']);
exit($response_json);
}
/**
* Implements hook_action_user_edit_own.
* There is an user self edit request.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_action_user_edit_own($env, $vars) {
user_action_user_edit($env, $vars);
}
/**
* Implements hook_action_user_register().
* There is an user registration request.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_action_user_register($env, $vars) {
// Prepare the response object.
$response = new StdClass();
$user = UserFactory::requestAction($env, $vars['data']['action'], $vars['data']);
// Check if there are validation errors.
if (!empty($user->getData('validation_errors'))) {
foreach ($user->getData('validation_errors') as $error) {
new Message($env, $error, MESSAGE_WARNING);
}
$response->errors = Message::burnMessages();
}
else {
$username = array_pop($vars['data']['name']);
$user = UserFactory::load($env, $username);
$user->login(NULL, t('Hello %user, thank you for signing up. You are now a registered member.', array('%user' => $username)), TRUE);
$response->redirect = NodeFactory::current($env)->getName();
}
// Encode the response JSON code.
$response_json = json_encode($response);
exit($response_json);
}
/**
* Implements hook_action_logout().
*
* There is an user logout request.
*
* @param Environment $env
* The Environment.
* @param array $vars
* An array of variables.
*/
function user_action_logout($env, $vars) {
$user = UserFactory::current($env, TRUE);
$logout = $user->logOut();
exit($logout);
}
|