From 43f594f72ed1c7e50f5e61d788ff65903b213017 Mon Sep 17 00:00:00 2001 From: Robert Sesek Date: Sat, 22 Jul 2006 01:24:17 +0000 Subject: [PATCH] r915: Adding and implementing the AutoActionAPI --- admin/autoaction.php | 84 ++++++++---------------- docs/changes.txt | 1 + includes/api_autoaction.php | 127 ++++++++++++++++++++++++++++++++++++ 3 files changed, 157 insertions(+), 55 deletions(-) create mode 100644 includes/api_autoaction.php diff --git a/admin/autoaction.php b/admin/autoaction.php index ee55014..0c78bc3 100644 --- a/admin/autoaction.php +++ b/admin/autoaction.php @@ -20,7 +20,7 @@ \*=====================================================================*/ require_once('./global.php'); -require_once('./includes/functions_datastore.php'); +require_once('./includes/api_autoaction.php'); NavLinks::fieldsPages(); $navigator->set_focus('tab', 'fields', null); @@ -71,11 +71,6 @@ if ($_REQUEST['do'] == 'delete') if ($_POST['do'] == 'insert' OR $_POST['do'] == 'update') { - if (empty($bugsys->in['name'])) - { - $admin->error($lang->string('You need to specify a name for this action.')); - } - foreach ($bugsys->in['fields'] AS $key => $value) { if (!empty($value) AND $value != -1 AND !is_array($value)) @@ -92,43 +87,23 @@ if ($_POST['do'] == 'insert' OR $_POST['do'] == 'update') } } - if (sizeof($deltas['custom']) < 1 AND sizeof($deltas['builtin']) < 1) - { - $admin->error($lang->string('You need to specify some fields to change.')); - } + $action = new AutoActionAPI($bugsys); + $action->set('name', $bugsys->in['name']); + $action->set('description', $bugsys->in['description']); + $action->set('fieldchanges', $deltas); + $action->set('comment', $bugsys->in['comment']); if ($_POST['do'] == 'insert') { - $db->query(" - INSERT INTO " . TABLE_PREFIX . "autoaction - (name, description, fieldchanges, comment) - VALUES - ('" . $bugsys->in['name'] . "', '" . $bugsys->in['description'] . "', - '" . $bugsys->escape(serialize($deltas)) . "', '" . $bugsys->in['comment'] . "' - )" - ); - - build_auto_actions(); + $action->insert(); $admin->redirect('autoaction.php'); } else { - if (!$bugsys->in['actionid']) - { - $admin->error($lang->getlex('error_invalid_id')); - } - - $db->query(" - UPDATE " . TABLE_PREFIX . "autoaction - SET name = '" . $bugsys->in['name'] . "', - description = '" . $bugsys->in['description'] . "', - fieldchanges = '" . $bugsys->escape(serialize($deltas)) . "', - comment = '" . $bugsys->in['comment'] . "' - WHERE actionid = " . $bugsys->input_clean('actionid', TYPE_UINT) - ); - - build_auto_actions(); + $action->set('actionid', $bugsys->in['actionid']); + $action->set_condition(); + $action->update(); $admin->redirect('autoaction.php'); } @@ -146,12 +121,11 @@ if ($_REQUEST['do'] == 'add' OR $_REQUEST['do'] == 'edit') NavLinks::autoactionsEdit($bugsys->in['actionid']); $navigator->set_focus('link', 'fields-pages-autoactions', 'fields-pages'); - $action = $db->query_first("SELECT * FROM " . TABLE_PREFIX . "autoaction WHERE actionid = " . $bugsys->input_clean('actionid', TYPE_UINT)); - if (!$action) - { - $admin->error($lang->getlex('error_invalid_id')); - } - $action['fields'] = unserialize($action['fieldchanges']); + $action = new AutoActionAPI($bugsys); + $action->set('actionid', $bugsys->in['actionid']); + $action->set_condition(); + $action->fetch(); + $action->objdata['fields'] = unserialize($action->objdata['fieldchanges']); } else { @@ -165,30 +139,30 @@ if ($_REQUEST['do'] == 'add' OR $_REQUEST['do'] == 'edit') if ($edit) { - $admin->form_hidden_field('actionid', $action['actionid']); + $admin->form_hidden_field('actionid', $action->objdata['actionid']); } $admin->table_start(); $admin->table_head(($add ? $lang->string('New Automatic Action') : $lang->string('Edit Automatic Action'))); - $admin->row_input($lang->string('Name'), 'name', $action['name']); - $admin->row_textarea($lang->string('Description'), 'description', $action['description']); - $admin->row_textarea($lang->string('Add Comment'), 'comment', $action['comment']); + $admin->row_input($lang->string('Name'), 'name', $action->objdata['name']); + $admin->row_textarea($lang->string('Description'), 'description', $action->objdata['description']); + $admin->row_textarea($lang->string('Add Comment'), 'comment', $action->objdata['comment']); $admin->row_span($lang->string('Field Changes'), 'thead', 'center'); // ------------------------------------------------------------------- // built-in fields - construct_datastore_select('severity', 'severity', 'severityid', $action['fields']['builtin']['severity'], true, true); + construct_datastore_select('severity', 'severity', 'severityid', $action->objdata['fields']['builtin']['severity'], true, true); $admin->row_list($lang->string('Severity'), 'fields[severity]'); - construct_datastore_select('priority', 'priority', 'priorityid', $action['fields']['builtin']['priority'], true, true); + construct_datastore_select('priority', 'priority', 'priorityid', $action->objdata['fields']['builtin']['priority'], true, true); $admin->row_list($lang->string('Priority'), 'fields[priority]'); - construct_datastore_select('status', 'status', 'statusid', $action['fields']['builtin']['status'], true, true); + construct_datastore_select('status', 'status', 'statusid', $action->objdata['fields']['builtin']['status'], true, true); $admin->row_list($lang->string('Status'), 'fields[status]'); - construct_datastore_select('resolution', 'resolution', 'resolutionid', $action['fields']['builtin']['resolution'], true, true); + construct_datastore_select('resolution', 'resolution', 'resolutionid', $action->objdata['fields']['builtin']['resolution'], true, true); $admin->row_list($lang->string('Resolution'), 'fields[resolution]'); $admin->row_span('', 'tcat', 'center'); @@ -209,24 +183,24 @@ if ($_REQUEST['do'] == 'add' OR $_REQUEST['do'] == 'edit') switch ($field['type']) { case 'input_text': - $admin->row_input($field['name'], "fields[custom][$field[fieldid]]", $action['fields']['custom']["$field[fieldid]"]); + $admin->row_input($field['name'], "fields[custom][$field[fieldid]]", $action->objdata['fields']['custom']["$field[fieldid]"]); break; case 'input_checkbox': - $admin->list_item('', 0, ((!$action['fields']['custom']["$field[fieldid]"]) ? true : false)); - $admin->list_item($lang->string('Checked'), 1, (($action['fields']['custom']["$field[fieldid]"] == 1) ? true : false)); - $admin->list_item($lang->string('Un-Checked'), 2, (($action['fields']['custom']["$field[fieldid]"] == 2) ? true : false)); + $admin->list_item('', 0, ((!$action->objdata['fields']['custom']["$field[fieldid]"]) ? true : false)); + $admin->list_item($lang->string('Checked'), 1, (($action->objdata['fields']['custom']["$field[fieldid]"] == 1) ? true : false)); + $admin->list_item($lang->string('Un-Checked'), 2, (($action->objdata['fields']['custom']["$field[fieldid]"] == 2) ? true : false)); $admin->row_list($field['name'], "fields[custom][$field[fieldid]]"); break; case 'select_single': $selectopts = unserialize($field['selects']); - $admin->list_item('', -1, ((!$action['fields']['custom']["$field[fieldid]"]) ? true : false)); + $admin->list_item('', -1, ((!$action->objdata['fields']['custom']["$field[fieldid]"]) ? true : false)); foreach ($selectopts AS $id => $select) { - $admin->list_item(stripslashes($select), $id, (($action['fields']['custom']["$field[fieldid]"] == $id AND $edit) ? true : false)); + $admin->list_item(stripslashes($select), $id, (($action->objdata['fields']['custom']["$field[fieldid]"] == $id AND $edit) ? true : false)); } $admin->row_list($field['name'], "fields[custom][$field[fieldid]]"); break; diff --git a/docs/changes.txt b/docs/changes.txt index 0811171..116b725 100644 --- a/docs/changes.txt +++ b/docs/changes.txt @@ -15,6 +15,7 @@ - Removed the useless "dependency" table - Added the following APIs: - Attachment + - Automatic action - Bug - Comment - Custom field diff --git a/includes/api_autoaction.php b/includes/api_autoaction.php new file mode 100644 index 0000000..d96e41d --- /dev/null +++ b/includes/api_autoaction.php @@ -0,0 +1,127 @@ +load('api', null); + +require_once('./includes/functions_datastore.php'); + +/** +* API: Automatic Action +* +* @author Iris Studios, Inc. +* @copyright Copyright ©2002 - [#]year[#], Iris Studios, Inc. +* @version $Revision$ +* @package Bugdar +* +*/ +class AutoActionAPI extends API +{ + /** + * Fields + * @var array + * @access private + */ + var $fields = array( + 'actionid' => array(TYPE_UINT, REQ_AUTO, 'verify_nozero'), + 'name' => array(TYPE_STR, REQ_YES, 'verify_noempty'), + 'description' => array(TYPE_STR, REQ_NO), + 'fieldchanges' => array(TYPE_NONE, REQ_YES, ':self'), + 'comment' => array(TYPE_STR, REQ_NO) + ); + + /** + * Table + * @var string + * @access private + */ + var $table = 'autoaction'; + + /** + * Table prefix + * @var string + * @access private + */ + var $prefix = TABLE_PREFIX; + + // ################################################################### + /** + * Post-insert + * + * @access private + */ + function post_insert() + { + build_auto_actions(); + } + + // ################################################################### + /** + * Post-update + * + * @access private + */ + function post_update() + { + build_auto_actions(); + } + + // ################################################################### + /** + * Post-delete + * + * @access private + */ + function post_delete() + { + build_auto_actions(); + } + + // ################################################################### + /** + * Verify: fieldchanges + * + * @access private + */ + function verify_fieldchanges() + { + if (!is_array($this->values['fieldchanges']) OR sizeof($this->values['fieldchanges']) != 2 OR !is_array($this->values['fieldchanges']['custom']) OR !is_array($this->values['fieldchanges']['builtin'])) + { + return $this->registry->lang->string('Invalid array type passed. The fieldchaneges array must be a two-dimensional array: array("builtin" => array("fieldname" => "newvalue" ...), "custom" => array("fieldname" => "fieldvalue" ...))'); + } + + if (sizeof($this->values['fieldchanges']['custom']) < 1 AND sizeof($this->values['fieldchanges']['builtin']) < 1) + { + return $this->registry->lang->string('You need to specify some fields to change.'); + } + + $this->values['fieldchanges'] = serialize($this->values['fieldchanges']); + + return true; + } +} + +/*=====================================================================*\ +|| ################################################################### +|| # $HeadURL$ +|| # $Id$ +|| ################################################################### +\*=====================================================================*/ +?> \ No newline at end of file -- 2.22.5