diff options
Diffstat (limited to 'sites/all/modules/views_bulk_operations/actions/script.action.inc')
-rw-r--r-- | sites/all/modules/views_bulk_operations/actions/script.action.inc | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/sites/all/modules/views_bulk_operations/actions/script.action.inc b/sites/all/modules/views_bulk_operations/actions/script.action.inc new file mode 100644 index 000000000..b98b2acf7 --- /dev/null +++ b/sites/all/modules/views_bulk_operations/actions/script.action.inc @@ -0,0 +1,92 @@ +<?php + +function views_bulk_operations_script_action_info() { + $actions = array(); + $actions['views_bulk_operations_script_action'] = array( + 'type' => 'entity', + 'label' => t('Execute arbitrary PHP script'), + 'configurable' => TRUE, + 'triggers' => array('any'), + ); + // Provide a strict default permission if actions_permissions is disabled. + if (!module_exists('actions_permissions')) { + $actions['views_bulk_operations_script_action']['permissions'] = array('administer site configuration'); + } + + return $actions; +} + +function views_bulk_operations_script_action($entity, $context) { + $return = eval($context['script']); + if ($return === FALSE) { + $msg = 'Error in script.'; + $arg = array(); + $error = error_get_last(); + if ($error) { + $msg = '!err in script: !msg in line \'%line\'.'; + $arg = array( + '!msg' => $error['message'], + '%line' => _views_bulk_operations_script_action_error_line($context['script'], $error['line']), + '!err' => _views_bulk_operations_script_action_error_type($error['type']), + ); + } + drupal_set_message(t($msg, $arg), 'error', FALSE); + watchdog('actions', $msg, $arg, WATCHDOG_ERROR); + } +} + +function views_bulk_operations_script_action_form($context) { + $form['script'] = array( + '#type' => 'textarea', + '#title' => t('PHP script'), + '#description' => t('Type the PHP snippet that will run upon execution of this action. You can use variables <code>$entity</code> and <code>$context</code> in your snippet. + Note that it is up to the script to save the $entity once it\'s done modifying it.'), + '#default_value' => @$context['script'], + ); + return $form; +} + +function views_bulk_operations_script_action_validate($form, $form_state) { +} + +function views_bulk_operations_script_action_submit($form, $form_state) { + return array( + 'script' => $form_state['values']['script'], + ); +} + +function _views_bulk_operations_script_action_error_line($script, $line) { + $lines = preg_split("/(\r?\n)/", $script); + if (isset($lines[$line-1])) { + return $lines[$line-1]; + } + else { + return t('Line !line', array('!line' => $line)); + } +} + +function _views_bulk_operations_script_action_error_type($type) { + $types = array( + E_ERROR => 'Error', + E_WARNING => 'Warning', + E_PARSE => 'Parsing Error', + E_NOTICE => 'Notice', + E_CORE_ERROR => 'Core Error', + E_CORE_WARNING => 'Core Warning', + E_COMPILE_ERROR => 'Compile Error', + E_COMPILE_WARNING => 'Compile Warning', + E_USER_ERROR => 'User Error', + E_USER_WARNING => 'User Warning', + E_USER_NOTICE => 'User Notice', + E_STRICT => 'Runtime Notice', + E_RECOVERABLE_ERROR => 'Catchable Fatal Error', + ); + if (version_compare(PHP_VERSION, '5.3.0') >= 0) { + $types += array( + E_DEPRECATED => 'Deprecated Notice', + E_USER_DEPRECATED => 'User Deprecated Notice', + ); + } + + return t($types[$type]); +} |