| 1 |
<?php |
<?php |
| 2 |
// $Id: fasttoggle.module,v 1.8.2.7 2008/11/08 11:24:54 timcn Exp $ |
// $Id: fasttoggle.module,v 1.8.2.8 2008/11/08 11:38:19 timcn Exp $ |
| 3 |
|
|
| 4 |
/** |
/** |
| 5 |
* @file |
* @file |
| 6 |
* Enables fast toggling of binary or not so binary settings |
* Enables fast toggling of binary or not so binary settings. |
| 7 |
*/ |
*/ |
| 8 |
|
|
| 9 |
/** |
/** |
| 131 |
* Either a complete HTML link or a link array structure for use in hook_link. |
* Either a complete HTML link or a link array structure for use in hook_link. |
| 132 |
*/ |
*/ |
| 133 |
function fasttoggle($title, $callback, $html = TRUE, $token = '', $class = '') { |
function fasttoggle($title, $callback, $html = TRUE, $token = '', $class = '') { |
| 134 |
static $sent = false; |
static $sent = FALSE; |
| 135 |
|
|
| 136 |
// Only include the support files once. |
// Only include the support files once. |
| 137 |
if (!$sent) { |
if (!$sent) { |
| 138 |
$sent = true; |
$sent = TRUE; |
| 139 |
drupal_add_js(drupal_get_path('module', 'fasttoggle') .'/fasttoggle.js'); |
drupal_add_js(drupal_get_path('module', 'fasttoggle') .'/fasttoggle.js'); |
| 140 |
drupal_add_css(drupal_get_path('module', 'fasttoggle') .'/fasttoggle.css', 'module', 'all', FALSE); |
drupal_add_css(drupal_get_path('module', 'fasttoggle') .'/fasttoggle.css', 'module', 'all', FALSE); |
| 141 |
} |
} |
| 142 |
$attributes = array('class' => 'fasttoggle' . (!empty($class) ? ' '. $class : ''), 'title' => t('Toggle this setting')); |
$attributes = array('class' => 'fasttoggle'. (!empty($class) ? ' '. $class : ''), 'title' => t('Toggle this setting')); |
| 143 |
$query = drupal_get_destination() .'&token='. drupal_get_token($token); |
$query = drupal_get_destination() .'&token='. drupal_get_token($token); |
| 144 |
|
|
| 145 |
if ($html) { |
if ($html) { |
| 182 |
return call_user_func_array('module_invoke_all', $args); |
return call_user_func_array('module_invoke_all', $args); |
| 183 |
} |
} |
| 184 |
|
|
|
|
|
| 185 |
/** |
/** |
| 186 |
* Implementation of hook_fasttoggle_options(). |
* Implementation of hook_fasttoggle_options(). |
| 187 |
*/ |
*/ |
| 229 |
return $return; |
return $return; |
| 230 |
} |
} |
| 231 |
|
|
|
|
|
| 232 |
/** |
/** |
| 233 |
* Implementation of hook_form_alter(). |
* Implementation of hook_form_alter(). |
| 234 |
*/ |
*/ |
| 241 |
|
|
| 242 |
foreach ($form['admin']['status'] as $key => $status) { |
foreach ($form['admin']['status'] as $key => $status) { |
| 243 |
$status = intval($status['#value'] == t('published')); |
$status = intval($status['#value'] == t('published')); |
| 244 |
$form['admin']['status'][$key]['#value'] = fasttoggle($labels[$status], 'node/'. $key .'/toggle/status', true, 'status_'. $key, 'fasttoggle-status-node-status-'. $status); |
$form['admin']['status'][$key]['#value'] = fasttoggle($labels[$status], 'node/'. $key .'/toggle/status', TRUE, 'status_'. $key, 'fasttoggle-status-node-status-'. $status); |
| 245 |
} |
} |
| 246 |
} |
} |
| 247 |
break; |
break; |
| 252 |
|
|
| 253 |
foreach ($form['status'] as $key => $status) { |
foreach ($form['status'] as $key => $status) { |
| 254 |
$status = intval($status['#value'] == t('active')); |
$status = intval($status['#value'] == t('active')); |
| 255 |
$form['status'][$key]['#value'] = fasttoggle($labels[$status], 'user/'. $key .'/toggle/status', true, 'status_'. $key, 'fasttoggle-status-user-status-'. $status); |
$form['status'][$key]['#value'] = fasttoggle($labels[$status], 'user/'. $key .'/toggle/status', TRUE, 'status_'. $key, 'fasttoggle-status-user-status-'. $status); |
| 256 |
} |
} |
| 257 |
} |
} |
| 258 |
break; |
break; |
| 259 |
} |
} |
| 260 |
} |
} |
| 261 |
|
|
|
|
|
| 262 |
/** |
/** |
| 263 |
* Implementation of hook_link(). |
* Implementation of hook_link(). |
| 264 |
*/ |
*/ |
| 265 |
function fasttoggle_link($type, $obj = null, $teaser = false) { |
function fasttoggle_link($type, $obj = NULL, $teaser = FALSE) { |
| 266 |
$links = array(); |
$links = array(); |
| 267 |
$options = fasttoggle_get_options($type, $obj); |
$options = fasttoggle_get_options($type, $obj); |
| 268 |
|
|
| 270 |
switch ($type) { |
switch ($type) { |
| 271 |
case 'node': |
case 'node': |
| 272 |
foreach (array_keys($options) as $key) { |
foreach (array_keys($options) as $key) { |
| 273 |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'node/'. $obj->nid .'/toggle/'. $key, false, $key .'_'. $obj->nid, 'fasttoggle-status-node-'. $key .'-'. intval($obj->$key)); |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'node/'. $obj->nid .'/toggle/'. $key, FALSE, $key .'_'. $obj->nid, 'fasttoggle-status-node-'. $key .'-'. intval($obj->$key)); |
| 274 |
} |
} |
| 275 |
break; |
break; |
| 276 |
case 'comment': |
case 'comment': |
| 277 |
fasttoggle_load_comment($obj); |
fasttoggle_load_comment($obj); |
| 278 |
foreach (array_keys($options) as $key) { |
foreach (array_keys($options) as $key) { |
| 279 |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'comment/toggle/'. $obj->cid .'/'. $key, false, $key .'_'. $obj->cid, 'fasttoggle-status-comment-'. $key .'-'. (1 - intval($obj->$key))); |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'comment/toggle/'. $obj->cid .'/'. $key, FALSE, $key .'_'. $obj->cid, 'fasttoggle-status-comment-'. $key .'-'. (1 - intval($obj->$key))); |
| 280 |
} |
} |
| 281 |
break; |
break; |
| 282 |
// User is not one of the standard types for hook_link(). This |
// User is not one of the standard types for hook_link(). This |
| 283 |
// use enables adding of user links to a user profile. |
// use enables adding of user links to a user profile. |
| 284 |
case 'user': |
case 'user': |
| 285 |
foreach (array_keys($options) as $key) { |
foreach (array_keys($options) as $key) { |
| 286 |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'user/'. $obj->uid .'/toggle/'. $key, false, $key .'_'. $obj->uid, 'fasttoggle-status-user-'. $key .'-'. $obj->$key); |
$links['fasttoggle_'. $key] = fasttoggle($options[$key][intval($obj->$key)], 'user/'. $obj->uid .'/toggle/'. $key, FALSE, $key .'_'. $obj->uid, 'fasttoggle-status-user-'. $key .'-'. $obj->$key); |
| 287 |
} |
} |
| 288 |
break; |
break; |
| 289 |
} |
} |
| 292 |
return $links; |
return $links; |
| 293 |
} |
} |
| 294 |
|
|
|
|
|
|
/** |
|
|
* Implementation of hook_views_tables(). |
|
|
*/ |
|
|
function fasttoggle_views_tables() { |
|
|
$tables['fasttoggle'] = array( |
|
|
'fields' => array( |
|
|
'fasttoggle' => array( |
|
|
'name' => t('Node: Fasttoggle'), |
|
|
'handler' => 'fasttoggle_handler_field', |
|
|
'query_handler' => 'fasttoggle_node_query_handler', |
|
|
'sortable' => false, |
|
|
'option' => array( |
|
|
'#type' => 'select', |
|
|
'#options' => array( |
|
|
'status' => t('Status'), |
|
|
'promote' => t('Promoted'), |
|
|
'sticky' => t('Sticky'), |
|
|
'comment' => t('Comment settings'), |
|
|
), |
|
|
), |
|
|
'notafield' => 'true', |
|
|
'help' => t('This field contains a fasttoggle link for the selected action for the current node.'), |
|
|
), |
|
|
), |
|
|
); |
|
|
|
|
|
return $tables; |
|
|
} |
|
|
|
|
|
/** |
|
|
* Views query callback. |
|
|
*/ |
|
|
function fasttoggle_node_query_handler($fielddata, $fieldinfo, &$query) { |
|
|
foreach (array('status', 'comment', 'promote', 'sticky') as $field) { |
|
|
if (!in_array('node.'. $field, $query->fields)) { |
|
|
$query->fields[] = 'node.'. $field; |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
| 295 |
/** |
/** |
| 296 |
* Implementation of hook_fasttoggle_labels(). |
* Implementation of hook_fasttoggle_labels(). |
| 297 |
*/ |
*/ |
| 322 |
return $labels; |
return $labels; |
| 323 |
} |
} |
| 324 |
|
|
|
|
|
| 325 |
/** |
/** |
| 326 |
* Returns an array with labels for a given setting. |
* Returns an array with labels for a given setting. |
| 327 |
*/ |
*/ |
| 343 |
|
|
| 344 |
return $lables[$style][$label]; |
return $lables[$style][$label]; |
| 345 |
} |
} |
|
|
|
|
|
|
|
/** |
|
|
* Views handler callback. |
|
|
*/ |
|
|
function fasttoggle_handler_field($fieldinfo, $fielddata, $value, $data) { |
|
|
$options = fasttoggle_get_options('node', $data); |
|
|
$key = $fielddata['options']; |
|
|
|
|
|
if (isset($options[$key]) && isset($data->$key)) { |
|
|
return fasttoggle($options[$key][intval($data->$key)], 'node/'. $data->nid .'/toggle/'. $key, true, $key .'_'. $data->nid); |
|
|
} |
|
|
} |
|