mobile_tools_roles.inc in Mobile Tools 6
Contains the functionality to add mobile user roles
File
mobile_tools_roles.incView source
<?php
/**
* Being called in the hook_init() implementation
* This function is in charge of changing the user role
*/
function mobile_tools_roles_boot() {
global $user;
$roles = $user->roles;
//count the number of mobile roles... must be bigger then 1
$item = db_fetch_object(db_query("SELECT COUNT(*) as count FROM {mobile_tools_roles_relations}"));
if ($item->count > 0) {
foreach ($roles as $key => $value) {
$role = mobile_tools_roles_info(array(
'id' => $key,
));
if ($role->type == 'desktop' && $role->has_sibling == 1 && ($_SESSION['mobile-tools-site-type'] == 'mobile' || $_SESSION['mobile-tools-mobile-device']['type'] == 'mobile' && variable_get('mobile-tools-theme-switch', FALSE) == 'mobile-tools-mobile-device')) {
unset($user->roles[$key]);
$user->roles[$role->sibling['id']] = $role->sibling['name'];
}
}
}
}
/**
* Implementation of the user_load function to assure that the right role is being assigned to the user.
* This is the same actions as in the hook_init() method
*/
function mobile_tools_user($op, &$edit, &$account, $category = NULL) {
if (variable_get('mobile_tools_enable_roles', 0)) {
switch ($op) {
case 'load':
$user = $account;
$roles = $user->roles;
foreach ($roles as $key => $value) {
$role = mobile_tools_roles_info(array(
'id' => $key,
));
if ($role->type == 'desktop' && $role->has_sibling == 1 && $_SESSION['mobile-tools-site-type'] == 'mobile') {
unset($user->roles[$key]);
$user->roles[$role->sibling['id']] = $role->sibling['name'];
}
}
break;
}
}
}
/**
* @file
* Contains the functionality to add mobile user roles
*
*/
/**
* Configuration form for configuring the mobile context in the permission system
*/
function mobile_tools_roles_configuration_form() {
global $base_url;
$form['mobile_tools_settings'] = array(
'#type' => 'fieldset',
'#title' => t('Mobile Tools settings'),
'#collapsible' => TRUE,
'#description' => t('The Mobile Tools module allows the creation of a mobile version of each role . these mobile versions of each role will be assigned to the mobile user. In the !url configuration panel, you can assign permissions to the mobile user.', array(
'!url' => l('permissions', $base_url . '/admin/user/permissions'),
)),
);
$form['mobile_tools_settings']['mobile_tools_enable_roles'] = array(
'#type' => 'checkbox',
'#title' => t('Activate mobile user roles'),
'#description' => t('When activated, mobile users will get the mobile versions of their normal roles when the site is being mobilized.'),
'#default_value' => variable_get('mobile_tools_enable_roles', 0),
);
$form['mobile_tools_roles'] = array(
'#type' => 'fieldset',
'#title' => t('Mobile roles'),
'#collapsible' => TRUE,
'#description' => t('Enable or disable the mobile version of each user role. When no mobile role is created, the user will
keep its normal role. The settings can also be configured in the !roles configuration section.', array(
'!roles' => l('roles', 'admin/user/roles'),
)),
'#suffix' => mobile_tools_roles_overview(),
);
$result = db_query("SELECT * FROM {role}");
while ($item = db_fetch_object($result)) {
$role = mobile_tools_roles_info(array(
'id' => $item->rid,
));
if ($role->type == 'desktop') {
$form['mobile_tools_roles']['mobile_tools_role_' . $item->rid] = array(
'#type' => 'checkbox',
'#title' => $item->name,
'#default_value' => $role->has_sibling ? TRUE : FALSE,
'#description' => t('Enabling will create the %role role . the name can be changed afterwards in the !roles settings page', array(
'%role' => $role->name . ' (Mobile)',
'!role' => l('roless', 'admin/user/roles'),
)),
);
}
}
$form['#submit'][] = 'mobile_tools_roles_settings_submit';
return system_settings_form($form);
}
function mobile_tools_roles_overview() {
$output = '';
$query = "SELECT * FROM {mobile_tools_roles_relations}";
$result = db_query($query);
$rows = array();
while ($item = db_fetch_object($result)) {
$query = "SELECT * FROM {role} WHERE rid = %d";
$result1 = db_query($query, $item->rid);
$result2 = db_query($query, $item->mrid);
$rows[] = array(
db_fetch_object($result1)->name,
db_fetch_object($result2)->name,
);
}
$headers = array(
"original role",
"mobile role",
);
if (count($rows) == 0) {
$output .= '<div class="message">No Mobile roles were assigned</div>';
}
else {
$output .= theme('table', $headers, $rows);
$output .= '<br>' . t('Configure the !permissions', array(
'!permissions' => l('permissions', 'admin/user/permissions'),
)) . '<br />';
}
return $output;
}
/**
* Helper function to return the desktop user roles
*/
function mobile_tools_user_roles() {
//$roles = array('none');
$roles = user_roles();
$desktop_roles = array();
foreach ($roles as $key => $value) {
$role = mobile_tools_roles_info(array(
'id' => $key,
));
if ($role->type == 'desktop') {
$desktop_roles[$key] = $value;
}
}
return $desktop_roles;
}
/**
* Helper function to return the mobile user roles
*/
function mobile_tools_mobile_user_roles() {
//$roles = array('none');
$roles = user_roles();
$mobile_roles = array();
foreach ($roles as $key => $value) {
$role = mobile_tools_roles_info(array(
'id' => $key,
));
if ($role->type == 'mobile') {
$mobile_roles[$key] = $value;
}
}
return $mobile_roles;
}
/**
* Function helping in getting information for each role:
* @param $identifier
* array('id' => id) or array('name' => name)
*
* @return
* a $role object with the folowing info
* $role->id
* $role->name
* $role->type = mobile/desktop
* $role->sibling[id]
* $role->sibling[name]
*/
function mobile_tools_roles_info($identifier) {
if (array_key_exists('id', $identifier)) {
$query = "SELECT * FROM {role} WHERE rid = %d";
$result = db_query($query, $identifier['id']);
$name = db_fetch_object($result)->name;
$rid = $identifier['id'];
}
elseif (array_key_exists('name', $identifier)) {
$query = "SELECT * FROM {role} WHERE name = '%s'";
$result = db_query($query, $identifier['name']);
$rid = db_fetch_object($result)->rid;
$name = $identifier['name'];
}
$role->id = $rid;
$role->name = $name;
$query = "SELECT COUNT(*) as count, mrid FROM {mobile_tools_roles_relations} WHERE rid = %d GROUP BY mrid";
$result = db_query($query, $rid);
$item = db_fetch_object($result);
if (is_object($item)) {
$count = $item->count;
}
else {
$count = 0;
}
if ($count != 0) {
$role->type = 'desktop';
$role->has_sibling = 1;
$result = db_query("SELECT * FROM {role} WHERE rid = %d", $item->mrid);
$sibling = db_fetch_object($result);
}
else {
$result = db_query("SELECT COUNT(*) as count, rid FROM {mobile_tools_roles_relations} WHERE mrid = %d GROUP BY rid", $rid);
$item = db_fetch_object($result);
if ($count == 0) {
$role->has_sibling = 0;
$role->type = 'desktop';
}
else {
$role->type = 'mobile';
$role->has_sibling = 1;
$result = db_query("SELECT * FROM {role} WHERE rid = %d", $item->rid);
$sibling = db_fetch_object($result);
}
}
if (isset($sibling)) {
$role->sibling['id'] = $sibling->rid;
$role->sibling['name'] = $sibling->name;
}
return $role;
}
/**
* Submit function for the mobile tools / mobile roles configuration page
*
*/
function mobile_tools_roles_settings_submit($form) {
$query = "SELECT * FROM {role}";
$result = db_query($query);
while ($item = db_fetch_object($result)) {
$role = mobile_tools_roles_info(array(
'id' => $item->rid,
));
if ($role->type == 'desktop') {
$choice = $form['#post']['mobile_tools_role_' . $item->rid]['#value'];
if ($role->has_sibling == 1 && $choice == 0) {
// DELETE
mobile_tools_edit_mobile_role('delete', $role);
}
elseif ($role->has_sibling == 0 && $choice == 1) {
mobile_tools_edit_mobile_role('add', $role);
}
}
}
}
/**
* Submit handler for the roles configuration form. It organises the mobile context for each user role.
*
*/
function mobile_tools_roles_configuration_submit($form) {
$role = mobile_tools_roles_info(array(
'id' => $form['rid']['#value'],
));
switch ($form['#post']['op']) {
case 'Save role':
if ($role->has_sibling == 1 && $form['#post']['mobile_tools_configure_role_' . $form['rid']['#value']] == FALSE && $role->type == 'desktop') {
mobile_tools_edit_mobile_role('delete', $role);
}
elseif ($role->has_sibbling == FALSE && $form['#post']['mobile_tools_configure_role_' . $form['rid']['#value']] == TRUE && $role->type == 'desktop') {
mobile_tools_edit_mobile_role('add', $role);
}
break;
case 'Delete role':
if ($role->type == 'mobile') {
$role = mobile_tools_roles_info(array(
'id' => $role->sibling['id'],
));
}
mobile_tools_edit_mobile_role('delete', $role);
}
}
/**
* Function helping in saving and deleting the mobile roles
* @param $op
* the operation that has to be performed: 'delete' will delete the mobile role, 'add' will add the mobile role.
* @param $role
* the $role object of the normal role (the already existing non-mobile role)
*/
function mobile_tools_edit_mobile_role($op, $role) {
switch ($op) {
case 'delete':
db_query('DELETE FROM {role} WHERE rid = %d', $role->sibling['id']);
db_query('DELETE FROM {mobile_tools_roles_relations} WHERE mrid = %d', $role->sibling['id']);
break;
case 'add':
$result = db_query("INSERT INTO {role} (name) VALUES ('%s')", $role->name . ' (Mobile)');
db_query("INSERT INTO {mobile_tools_roles_relations} (rid, mrid) VALUES (%d, %d)", $role->id, db_last_insert_id('role', 'rid'));
break;
}
}
Functions
Name | Description |
---|---|
mobile_tools_edit_mobile_role | Function helping in saving and deleting the mobile roles |
mobile_tools_mobile_user_roles | Helper function to return the mobile user roles |
mobile_tools_roles_boot | Being called in the hook_init() implementation This function is in charge of changing the user role |
mobile_tools_roles_configuration_form | Configuration form for configuring the mobile context in the permission system |
mobile_tools_roles_configuration_submit | Submit handler for the roles configuration form. It organises the mobile context for each user role. |
mobile_tools_roles_info | Function helping in getting information for each role: |
mobile_tools_roles_overview | |
mobile_tools_roles_settings_submit | Submit function for the mobile tools / mobile roles configuration page |
mobile_tools_user | Implementation of the user_load function to assure that the right role is being assigned to the user. This is the same actions as in the hook_init() method |
mobile_tools_user_roles | Helper function to return the desktop user roles |