<?php # vim: set filetype=php expandtab tabstop=2 shiftwidth=2 autoindent smartindent:
/*
ERROR: warning: require_once(modules/system/user_queue_member.admin.inc) [function.require-once]: failed to open stream: No such file or directory in /data/projects/voip_support/trunk/control_interface/includes/menu.inc on line 344.
WHEN I GET ERROR: I get error when I go to "admin/user/user_queue_member"
NOTE: admin/user/user_queue_member is defined in user_queue_member_menu() ..
*/
define('USER_QUEUE_MEMBER_PHONE_NUMBER',
'USER_QUEUE_MEMBER_PHONE_NUMBER');
/* TODO: add an admin settings where user can create the phone number field or assign something .. */
function user_queue_member_enable() {
/* Add phone number field in profile.module */
/* XXX we are not using drupal_execute(), so validation is left apart .. BAD ! */
if(db_query("INSERT INTO {profile_fields} (title, name, explanation, category, type, weight, required, register, visibility, autocomplete, options, page) VALUES ('%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, %d, '%s', '%s')",
'Phone Number',
'phone_number',
'',
'Account Information',
'textfield',
4/* weight */,
1,
1,
0,
0,
NULL,
NULL)) {
}
}
}
function user_queue_member_perm() {
return array('can be queue member');
}
function user_queue_member_help($path, $arg) {
/* TODO: say that activating profile will add support to calling the user by phone, and activating user_sip will enable calling using sip account .. */
switch($path) {
case 'user/%user/queue_member' :
return 'Asterisk queue membership details.';
}
}
function user_queue_member_menu() {
'user/%user/queue_member' =>
array(
'title' => 'Asterisk queue membership',
'description' => 'Asterisk queue membership details.',
'page callback' => 'user_queue_member_details',
'page arguments' =>
array(1),
'access callback' => 'user_is_queue_member',
'access arguments' =>
array(1),
'file' => 'user_queue_member.pages.inc',
)
,
'user/%user/queue_member/list' =>
array(
'title' => 'List',
'weight' => 0,
)
,
'user/%user/queue_member/add' =>
array(
'title' => 'Add',
'description' =>
t('Be a new queue member.'),
'page callback' => 'node_add',
'page arguments' =>
array('queue_member',
1),
'access callback' => 'node_access',
'access arguments' =>
array('create',
'queue_member'),
'file' => 'user_queue_member.node.pages.wrapper.inc',
'weight' => 1,
)
,
'user/%user/queue_member/%node' =>
array(
'title' => 'Edit',
'description' => 'Asterisk queue membership details.',
'page arguments' =>
array('user_queue_member_details',
1),
'access callback' => 'user_is_queue_member',
'access arguments' =>
array(1),
'file' => 'user_queue_member.pages.inc',
'weight' => 2,
)
,
'admin/user/user_queue_member' =>
array(
'title' => 'User queue member',
'description' => 'User Queue Member Settings.',
'page arguments' =>
array('user_queue_member_admin'),
'access arguments' =>
array('administer users'),
'file' => 'user_queue_member.admin.inc',
)
,
'admin/user/user_queue_member/autocomplete' =>
array(
'title' => 'Profile field name autocomplete',
'page callback' => 'user_queue_member_admin_autocomplete',
'file' => 'user_queue_member.admin.inc',
)
);
}
function user_is_queue_member($account) {
/*
* if I omit the following check it creates
* following error:
* ==========================================================
* warning: array_fill() [function.array-fill]: Number of elements must be positive in /data/projects/voip_support/trunk/control_interface/includes/database.inc on line 235.
* warning: implode() [function.implode]: Bad arguments. in /data/projects/voip_support/trunk/control_interface/includes/database.inc on line 235.
* warning: array_keys() [function.array-keys]: The first argument should be an array in /data/projects/voip_support/trunk/control_interface/modules/user/user.module on line 500.
* user warning: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ')' at line 1 query: SELECT p.perm FROM web_role r INNER JOIN web_permission p ON p.rid = r.rid WHERE r.rid IN () in /data/projects/voip_support/trunk/control_interface/modules/user/user.module on line 500.
* ==========================================================
* The probable reason is $account->role is not assigned when user_access() is called. Note that I called this in hook_user implementation which is called before all the node elements are loaded.
*/
return FALSE;
}
if($account->uid == 1) {
return FALSE; /* forbid the admin user.. */
}
return FALSE;
}
if($account->
uid ==
$user->
uid ||
user_access('administer users',
$user)) {
return TRUE;
}
return FALSE;
}
function user_queue_member_user($op, &$edit, &$account, $category = NULL) {
if(!user_is_queue_member($account)) {
return;
}
switch($op) {
case 'view':
/* TODO: show the queues we are member of .. */
return;
case 'delete':
}
return;
}
}
function user_queue_member_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
if($node->type != 'queue_member') {
return;
}
/* handle delete */
switch($op) {
case 'delete':
'DELETE FROM {user_queue_member} WHERE nid = %d'
, $node->nid
);
return;
}
/* check if we are working under a specific user */
if(!$params[1]) {
return;
}
if(!$account || !$account->uid) {
return;
}
switch($op) {
case 'insert':
/* associate the node with that user */
'INSERT INTO {user_queue_member} SET uid = %d, nid = %d'
, $node->related_user
, $node->nid
);
break;
}
}
function user_queue_member_form_alter(&$form, $form_state, $form_id) {
if($form_id != 'queue_member_node_form') {
return;
}
if(!$params[1]) {
return;
}
if(!$account || !$account->uid) {
return;
}
$form['related_user'] =
array(
'#type' => 'value'
,'#value' => $account->uid
);
}
function user_queue_member_queue_member($op, $data = NULL) {
switch($op) {
case 'title':
if($params[0] != 'user' || !$params[1]) {
return;
}
if(!$account || !$account->uid) {
return;
}
if(_user_queue_member_get_profile_field()) {
$result['user_phone'] = 'User Phone Number';
}
$result['user_sip'] = 'User sip account';
}
return $result;
}
}
function _user_queue_member_get_profile_field() {
}