[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Phpgroupware-cvs] tts inc/class.botts.inc.php inc/class.uitts.inc...
From: |
Dave Hall |
Subject: |
[Phpgroupware-cvs] tts inc/class.botts.inc.php inc/class.uitts.inc... |
Date: |
Sun, 17 Dec 2006 23:29:29 +0000 |
CVSROOT: /cvsroot/phpgroupware
Module name: tts
Changes by: Dave Hall <skwashd> 06/12/17 23:29:29
Modified files:
inc : class.botts.inc.php class.uitts.inc.php
templates/base/css: base.css
Added files:
js/base : search.js
templates/base : search.xsl select_ticket.xsl
Log message:
dump more code in and add some missing files. This is still very much
a work in progress, email me if you have problems - I don't want to deal with
conflicts.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/tts/inc/class.botts.inc.php?cvsroot=phpgroupware&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/tts/inc/class.uitts.inc.php?cvsroot=phpgroupware&r1=1.4&r2=1.5
http://cvs.savannah.gnu.org/viewcvs/tts/js/base/search.js?cvsroot=phpgroupware&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/tts/templates/base/search.xsl?cvsroot=phpgroupware&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/tts/templates/base/select_ticket.xsl?cvsroot=phpgroupware&rev=1.1
http://cvs.savannah.gnu.org/viewcvs/tts/templates/base/css/base.css?cvsroot=phpgroupware&r1=1.2&r2=1.3
Patches:
Index: inc/class.botts.inc.php
===================================================================
RCS file: /cvsroot/phpgroupware/tts/inc/class.botts.inc.php,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- inc/class.botts.inc.php 29 Nov 2006 12:53:23 -0000 1.3
+++ inc/class.botts.inc.php 17 Dec 2006 23:29:29 -0000 1.4
@@ -5,7 +5,7 @@
* @copyright Copyright (C) 2000-2005 Free Software Foundation, Inc.
http://www.fsf.org/
* @license http://www.gnu.org/licenses/gpl.html GNU General Public
License
* @package tts
- * @version $Id: class.botts.inc.php,v 1.3 2006/11/29 12:53:23 skwashd
Exp $
+ * @version $Id: class.botts.inc.php,v 1.4 2006/12/17 23:29:29 skwashd
Exp $
*/
@@ -55,9 +55,11 @@
/**
* @var array $public_methods the publicly available methods of
this class
*/
- var $public_methods = array
+ var $public_functions = array
(
- 'list_methods' => true
+ 'get_search_fields' => true,
+ 'list_methods' => true,
+ 'search' => true
);
/**
@@ -156,11 +158,6 @@
}
}
- function test()
- {
- return 'This is a string';
- }
-
function cached_accounts($account_id)
{
$this->accounts = CreateObject('phpgwapi.accounts',
$account_id);
@@ -405,6 +402,45 @@
return $ret;
}
+ function get_search_fields($cat_id = -1)
+ {
+ if ( $cat_id == -1 ) //being called directly by JSON
+ {
+ $cat_id = isset($_GET['cat_id']) ? (int)
$_GET['cat_id'] : 0;
+ }
+ $fields = $this->get_fields($cat_id, ($cat_id > 0) );
+
+ //echo "<pre>fields == " . print_r($fields, true) .
'</pre>';
+
+ $values = array();
+ if ( count($fields) )
+ {
+ foreach ( $fields as $id => $field )
+ {
+ $values[$id] = array
+ (
+ 'field_name' => $field['id'],
+ 'descr' =>
$field['label'],
+ 'type' =>
strtoupper($field['type']),
+ 'is_custom' =>
($cat_id > 0)
+ );
+
+ if ( $field['type'] == 'select' )
+ {
+ $values[$id]['type'] = 'LOOKUP';
+ $values[$id]['lookup_values'] =
$field['options'];
+ }
+ }
+ }
+ //echo "<pre>values == " . print_r($values, true) .
'</pre>';
+ return $values;
+ }
+
+ function get_field()
+ {
+
+ }
+
function get_fields($cat_id, $custom_only = false)
{
$fields = array();
@@ -414,6 +450,7 @@
$fields[] = array
(
'id' => 'ticket_id',
+ 'label' => lang('ticket id'),
'type' => 'hidden',
'nullable' => True
);
@@ -421,6 +458,7 @@
$fields[] = array
(
'id' => 'ticket_type',
+ 'label' => lang('ticket type'),
'type' => 'hidden',
'change_key'=> 'T',
'nullable' => False
@@ -809,9 +847,32 @@
return $ticket_id;
}
- function search()
+ /**
+ * Search for tickets
+ *
+ * @param bool $caled_from_ui is the script being called from
the UI layer or directly?
+ * @return array the search results, empty array for nothing
found
+ */
+ function search($called_from_ui = false, $args = array() )
+ {
+ if ( !$called_from_ui )
{
+ $args = (array) $_POST;
+ }
+ error_log(print_r($_POST, true));
+
+ $where = array();
+ foreach ( $args['value'] as $key => $val )
+ {
+ $where[] =
$this->_criteria2sql($args['field'][$key], $args['stype'][$key], $val);
+ }
+
+ return '';
+
+ $concat = ($_POST['search_type'] == 'AND' ? ' AND ' : '
OR ');
+
+ $sql = 'SELECT * FROM phpgw_tts_tickets WHERE ' .
implode($concat, $where);
}
/**
@@ -938,6 +999,20 @@
}
/**
+ * Convert a search criteria entry to a snippet of SQL
+ */
+ function _criteria2sql($field, $stype, $val)
+ {
+ error_log("field $field, stype $stype, val $val");
+ $ftype = $this->_get_field_type($field);
+ }
+
+ function _get_field_type($field)
+ {
+
+ }
+
+ /**
* Get a list of groups
*
* @return array list of groups
Index: inc/class.uitts.inc.php
===================================================================
RCS file: /cvsroot/phpgroupware/tts/inc/class.uitts.inc.php,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- inc/class.uitts.inc.php 29 Nov 2006 12:53:23 -0000 1.4
+++ inc/class.uitts.inc.php 17 Dec 2006 23:29:29 -0000 1.5
@@ -5,7 +5,7 @@
* @copyright Copyright (C) 2000-2006 Free Software Foundation, Inc.
http://www.fsf.org/
* @license http://www.gnu.org/licenses/gpl.html GNU General Public
License
* @package tts
- * @version $Id: class.uitts.inc.php,v 1.4 2006/11/29 12:53:23 skwashd
Exp $
+ * @version $Id: class.uitts.inc.php,v 1.5 2006/12/17 23:29:29 skwashd
Exp $
*/
class uitts
@@ -30,6 +30,7 @@
'get_cats' => true,
'get_users' => true,
'index' => true,
+ 'search' => true,
'view' => true
);
@@ -356,6 +357,51 @@
}
/**
+ * Search for a ticket
+ */
+ function search()
+ {
+ $GLOBALS['phpgw']->common->phpgw_header(true);
+ echo 'coming soon! :)';
+ $GLOBALS['phpgw']->common->phpgw_exit();
+ $GLOBALS['phpgw_info']['flags']['xslt_app'] = true;
+ $GLOBALS['phpgw']->xslttpl->add_file('search');
+ if ( !isset($GLOBALS['phpgw']->js) ||
!is_object($GLOBALS['phpgw']->js) )
+ {
+ $GLOBALS['phpgw']->js =
createObject('phpgwapi.javascript');
+ }
+ $js =& $GLOBALS['phpgw']->js;
+ $js->validate_file('base', 'search', 'tts');
+ $js->validate_file('json', 'json');
+ $js->add_event('load', "loadFields(0, true);");
+
+ $values = array();
+
+ $values['lang'] = array
+ (
+ 'add' => lang('add'),
+ 'advanced' =>
lang('advanced'),
+ 'edit' => lang('edit'),
+ 'find_all' => lang('find
all items that meet the following criteria'),
+ 'find_items' => lang('find items'),
+ 'go' => lang('go'),
+ 'if_all' => lang('if all
criteria are met'),
+ 'if_any' => lang('if any
criteria are met'),
+ 'saved_searches' => lang('saved
searches'),
+ 'search' =>
lang('search'),
+ 'search_criteria' => lang('Search
criteria'),
+ 'search_name' => lang('search name'),
+ );
+
+ $values['url'] = array
+ (
+ );
+
+ $GLOBALS['phpgw']->xslttpl->set_var('phpgw',
array('search' => $values) );
+ $GLOBALS['phpgw']->common->phpgw_exit(true);
+ }
+
+ /**
* Inform users that they have been denied access
*/
function _access_denied()
Index: templates/base/css/base.css
===================================================================
RCS file: /cvsroot/phpgroupware/tts/templates/base/css/base.css,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- templates/base/css/base.css 28 Nov 2006 10:09:32 -0000 1.2
+++ templates/base/css/base.css 17 Dec 2006 23:29:29 -0000 1.3
@@ -384,3 +384,46 @@
{
width: 220px;
}
+
+#tts_search_adv_criteria
+{
+ border: 1px solid #999;
+ height: 200px;
+ margin: 10px;
+ max-height: 200px;
+ overflow: auto;
+ padding: 10px 0px;
+ width: 95%;
+}
+
+#tts_search_adv_criteria div
+{
+ white-space: nowrap;
+}
+
+#tts_search_adv_criteria button
+{
+ margin: 0px 0px 10px 0px;
+ padding: 0px;
+}
+
+#tts_search_adv_criteria select.stype
+{
+ width: 50px;
+}
+
+#tts_search_adv_criteria select.stype option
+{
+ width: 125px;
+}
+
+#tts_search_adv_criteria select.criteria
+{
+ width: 150px;
+}
+
+#tts_saved_searches input
+{
+ width: 100px;
+}
+
Index: js/base/search.js
===================================================================
RCS file: js/base/search.js
diff -N js/base/search.js
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ js/base/search.js 17 Dec 2006 23:29:29 -0000 1.1
@@ -0,0 +1,527 @@
+// TTS Search Javascript
+// Written by Dave Hall
+// (c) 2006 Dave Hall, All Rights Reserved
+
+var arFields = [];
+
+
+/**
+* Create a date input field
+*
+* @todo make it work properly
+* @param object oActive ???
+* @param int iID the row number identifier
+* @return object the input field
+*/
+function addDateValue(oActive, iID)
+{
+ var oInput = document.createElement('input');
+ oInput.type = 'text';
+ oInput.id = 'value_' + iID;
+ oInput.id = 'name_' + iID;
+ return oInput;
+}
+
+/**
+* Create a select option list with the available options for a date based
search
+*
+* @param object oSelect the select tag to append the options to
+*/
+function addDateTypes(oSelect)
+{
+ var oOption = document.createElement('option');
+ oOption.value = 'is';
+ oOption.appendChild(document.createTextNode('is'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'is_not';
+ oOption.appendChild(document.createTextNode('is not'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'before';
+ oOption.appendChild(document.createTextNode('is before'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'after';
+ oOption.appendChild(document.createTextNode('is after'));
+ oSelect.appendChild(oOption);
+}
+
+/**
+* Add a list of available search fields
+*
+* @param string strSelected the currently selected item from the list
+* @return object the new select option list
+*/
+function addFieldList(strSelected, iID)
+{
+ oSelect = document.createElement('select');
+ oSelect.id = 'field_' + iID;
+ oSelect.className = 'field';
+ for ( var entry in arFields )
+ {
+ oOption = document.createElement('option');
+ oOption.value = arFields[entry].field_name;
+
oOption.appendChild(document.createTextNode(arFields[entry].descr));
+ oOption.selected = arFields[entry].field_name == strSelected;
+ oSelect.appendChild(oOption);
+ }
+
+ if ( strSelected == '' )
+ {
+ oSelect.options[0].selected = true;
+ }
+
+ oSelect.onchange = function(e)
+ {
+ if ( typeof(e) == 'undefined' )
+ {
+ e = window.event;
+ }
+ var source = e.target ? e.target : e.srcElement;
+ var iID = source.id.substr(6); //strip the field_ to get the ID
as an int
+ for ( var i = (source.parentNode.childNodes.length - 1); i >=
0; --i )
+ {
+ if ( source.parentNode.childNodes[i].id == source.id )
+ {
+ continue;
+ }
+
source.parentNode.removeChild(source.parentNode.childNodes[i]);
+ }
+
source.parentNode.appendChild(addFieldLookup(arFields[source.options.selectedIndex],
iID) );
+
source.parentNode.appendChild(addSearchValue(arFields[source.options.selectedIndex],
iID) );
+ source.parentNode.appendChild(addRemoveButton(iID) );
+ }
+ return oSelect;
+}
+
+function addNewCriteria(iID, strFieldSelected, strLookupSelected, strValue)
+{
+ var oDiv;
+ var bAppend = true;
+ if ( !iID )
+ {
+ iID =
document.getElementById('tts_search_adv_criteria').childNodes.length;
+ oDiv = document.createElement('div');
+ oDiv.id = 'entry_' + iID;
+ }
+ else
+ {
+ oDiv = document.getElementById('entry_' + iID);
+ bAppend = false;
+ while ( oDiv.hasChild )
+ {
+ oDiv.removeChild(oDiv.firstChild);
+ }
+ }
+
+ var iFieldSelected = 0;
+ if ( strFieldSelected )
+ {
+ iFieldSelected = getFieldSelection(strFieldSelected);
+ }
+
+ oDiv.className = 'row_' + (iID % 2 ? 'on' : 'off');
+ oDiv.appendChild(addFieldList(strFieldSelected, iID) );
+
//document.getElementsByTagName('body').item(0).appendChild(document.createTextNode(JSON.stringify(arFields)));
+ oDiv.appendChild(addFieldLookup(arFields[0], iID ) );
+ oDiv.appendChild(addSearchValue(arFields[0], iID ) );
+ oDiv.appendChild(addRemoveButton(iID));
+
+ if ( bAppend )
+ {
+
document.getElementById('tts_search_adv_criteria').appendChild(oDiv);
+ }
+}
+
+function addRemoveButton(iID)
+{
+ var oButton = document.createElement('button');
+ oButton.type = 'button';
+ oButton.id = 'removebutton_' + iID;
+ oButton.appendChild(document.createTextNode("-\nRemove"));
+ oButton.onclick = removeEntry;
+ oButton.style.position = 'relative';
+ oButton.style.right = '-30px';
+ return oButton;
+}
+
+function addSearchValue(oActive, iID)
+{
+ switch ( oActive.type )
+ {
+ case 'INT':
+ case 'DOUBLE':
+ return addNumericValue(oActive, iID);
+ case 'DATE':
+ return addDateValue(oActive, iID);
+ case 'LOOKUP':
+ return addLookupValue(oActive, iID);
+ case 'TEXT':
+ default:
+ return addTextValue(oActive, iID);
+ }
+}
+
+function addLookupValue(oActive, iID)
+{
+ var oSelect = document.createElement('select');
+ oSelect.id = 'value_' + iID;
+ var oOption;
+ for ( entry in oActive.lookup_values )
+ {
+ oOption = document.createElement('option');
+ oOption.value = oActive.lookup_values[entry].id;
+
oOption.appendChild(document.createTextNode(oActive.lookup_values[entry].value));
+ oSelect.appendChild(oOption);
+ }
+ return oSelect;
+}
+
+function addNumericValue(oActive, strID)
+{
+ var oInput = document.createElement('input');
+ oInput.type = 'text';
+ oInput.id = 'value_' + strID;
+ oInput.value = 0;
+ return oInput;
+}
+
+function addTextValue(oActive, strID)
+{
+ var oInput = document.createElement('input');
+ oInput.type = 'text';
+ oInput.id = 'value_' + strID;
+ return oInput;
+}
+
+function addFieldLookup(oActive, iID)
+{
+ var oSelect = document.createElement('select');
+ oSelect.id = 'stype_' + iID;
+ oSelect.className = 'stype';
+ switch ( oActive.type )
+ {
+ case 'INT':
+ case 'DOUBLE':
+ addNumericTypes(oSelect);
+ break;
+
+ case 'DATE':
+ addDateTypes(oSelect);
+ break;
+
+ case 'LOOKUP':
+ addLookupTypes(oSelect);
+ break;
+
+ case 'TEXT':
+ default:
+ addTextTypes(oSelect);
+ }
+ return oSelect;
+}
+
+function addLookupTypes(oSelect)
+{
+ var oOption = document.createElement('option');
+ oOption.value = 'is';
+ oOption.appendChild(document.createTextNode('is'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'is_not';
+ oOption.appendChild(document.createTextNode('is not'));
+ oSelect.appendChild(oOption);
+}
+
+function addNumericTypes(oSelect)
+{
+ var oOption = document.createElement('option');
+ oOption.value = 'equals';
+ oOption.appendChild(document.createTextNode('equals'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'not_equals';
+ oOption.appendChild(document.createTextNode('not equals'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'greater_than';
+ oOption.appendChild(document.createTextNode('greater than'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'less_than';
+ oOption.appendChild(document.createTextNode('less than'));
+ oSelect.appendChild(oOption);
+}
+
+function addTextTypes(oSelect)
+{
+ var oOption = document.createElement('option');
+ oOption.value = 'is';
+ oOption.appendChild(document.createTextNode('is'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'is_not';
+ oOption.appendChild(document.createTextNode('is not'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'contains';
+ oOption.appendChild(document.createTextNode('contains'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'not_contains';
+ oOption.appendChild(document.createTextNode('does not contain'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'starts';
+ oOption.appendChild(document.createTextNode('starts with'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'not_starts';
+ oOption.appendChild(document.createTextNode('does not start with'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'ends';
+ oOption.appendChild(document.createTextNode('ends with'));
+ oSelect.appendChild(oOption);
+
+ oOption = document.createElement('option');
+ oOption.value = 'not_ends';
+ oOption.appendChild(document.createTextNode('does not end with'));
+ oSelect.appendChild(oOption);
+}
+
+function displayLoading()
+{
+ var elmBody = document.getElementsByTagName('body').item(0);
+ var elmDIV = document.createElement('div');
+ elmDIV.id = 'loading';
+ elmDIV.style.textAlign = 'right';
+ elmDIV.appendChild(document.createTextNode('Loading ...'));
+ elmBody.insertBefore(elmDIV, elmBody.firstChild);
+}
+
+/**
+* Find the field object for the current field object
+*
+* return object the currently selected field object - null for not matched
+*/
+function getFieldSelection(strSelection)
+{
+ for ( var entry in arFields )
+ {
+ if ( arFields[entry].field_name == strSelection )
+ {
+ return entry;
+ }
+ }
+ return null;
+}
+
+/**
+* handle the onreadystate change event
+*
+* @param bool bAdd add a search entry
+*/
+function handleORSC(bAdd)
+{
+ if ( xhr.readyState != 4 )
+ {
+ return false; //ignore it
+ }
+
+ var responseData = eval(xhr.responseText);
+ if ( typeof(responseData) != 'object'
+ || !responseData.length )
+ {
+ return false; // it is useless, so bail out
+ }
+
+ if ( !arFields.length ) //empty
+ {
+ arFields = responseData;
+ }
+ else
+ {
+ arFields.concat(responseData);
+ }
+
+ arFields = arFields.sort(sortFields);
+
+ var arSelects =
document.getElementById('tts_search_adv_criteria').getElementsByTagName('select');
+ if ( !arSelects.length )
+ {
+ return false; //nothing to see here people, keep moving
+ }
+
+ var strSelected = '';
+ var oOption;
+ for ( var i = (arSelects.length - 1); i >= 0; --i )
+ {
+ if ( !arSelects[i].id.length
+ || arSelects[i].id.substr(0, 9) != 'field_' )
+ {
+ continue;
+ }
+
+ if ( arSelects[i].options.selectedIndex != -1 )
+ {
+ strSelected =
arSelects[i].options[arSelects[i].options.selectedIndex].value;
+ }
+
+ while ( arSelects[i].hasChild )
+ {
+ arSelects[i].removeChild(arSelects[i].firstChild);
+ }
+
+
arSelects[i].parentNode.appendChild(addFieldLookup(arFields[arSelects[i].options.selectedIndex],
arSelects[i].id.substr(9) ) );
+
arSelects[i].parentNode.appendChild(addSearchValue(arFields[arSelects[i].options.selectedIndex],
arSelects[i].id.substr(9) ) );
+ }
+ //unset the xhr obj
+ xhr = null;
+}
+
+function hideLoading()
+{
+ var elmLoading = document.getElementById('loading');
+ if ( typeof(elmLoading) != 'undefined' )
+ {
+ elmLoading.parentNode.removeChild(elmLoading);
+ }
+}
+
+/**
+* Load up the search field
+*
+* @param int iType the ticket type - 0 == base
+* @param bool bAdd add a search entry
+*/
+function loadFields(iType, bAdd)
+{
+ xhr = new XMLHttpRequest();
+ xhr.open('GET', phpGWLink('/index.php', {menuaction:
'tts.botts.get_search_fields', cat_id: iType, phpgw_return_as: 'json'}), true);
+ xhr.onreadystatechange = function() { handleORSC(bAdd); };
+ xhr.send('');
+}
+
+/**
+* Remove button event handler
+*
+* @param object event object for the button click
+*/
+function removeEntry(e)
+{
+ if ( typeof(e) == 'undefined' )
+ {
+ e = window.event;
+ }
+ var source = source = e.target ? e.target : e.srcElement;
+ source.parentNode.parentNode.removeChild(source.parentNode);
+ renumberEntries();
+}
+
+/**
+* Renumber the field list and associated divs after a delete - makes server
side processing easier
+*/
+function renumberEntries()
+{
+ var oParent = document.getElementById('tts_search_adv_criteria');
+ var iEntries = oParent.childNodes.length;
+ for ( i = 0; i < iEntries; ++i )
+ {
+ if ( oParent.childNodes[i].id == 'entry_' + i )
+ {
+ continue; // nothing to do as it is in the right spot
+ }
+
+ oParent.childNodes[i].className = 'row_' + (i % 2 ? 'on' :
'off');
+
+ oParent.childNodes[i].id = 'entry_' + i;
+
+ var arID = [];
+ for ( var j = (oParent.childNodes[i].childNodes.length - 1); j
>= 0; --j )
+ {
+ arID =
oParent.childNodes[i].childNodes[j].id.split('_');
+ oParent.childNodes[i].childNodes[j].id = arID[0] + j;
+ oParent.childNodes[i].childNodes[j].name = arID[0] +
'[' + j + ']';
+ }
+ }
+}
+
+/**
+* Sort the list the field list by description
+*
+* @internal callBack method for arFields.sort
+*/
+function sortFields(a, b)
+{
+ var x = a.descr.toLowerCase();
+ var y = b.descr.toLowerCase();
+ return (x < y) ? -1 : (x > y) ? 1 : 0;
+}
+
+// TODO Move me
+function form2POST()
+{
+ var strForm = '';
+
+ var oRows =
document.getElementById('tts_search_adv_criteria').childNodes;
+ for ( i = oRows.length - 1; i >= 0; --i )
+ {
+ strForm += 'field[' + i + ']=' +
encodeURI(document.getElementById('field_' +
i).options[document.getElementById('field_' + i).selectedIndex].value) + '&'
+ + 'stype[' + i + ']=' +
encodeURI(document.getElementById('stype_' +
i).options[document.getElementById('stype_' + i).selectedIndex].value) + '&';
+ if ( document.getElementById('value_' + i).tagName.toLowerCase
== 'select' )
+ {
+ strForm += 'value[' + i + ']=' +
encodeURI(document.getElementById('value_' +
i).options[document.getElementById('value_' + i).selectedIndex].value);
+ }
+ else //must be input
+ {
+ strForm += 'value[' + i + ']=' +
encodeURI(document.getElementById('value_' + i).value);
+ }
+ strForm += '&';
+ }
+ return strForm;
+}
+
+/**
+* Submit the advanced form
+*/
+function submitAdvSearch()
+{
+ if (
!document.getElementById('tts_search_adv_criteria').childNodes.length )
+ {
+ return !alert('You must specify at least one field');
+ }
+
+ var strPOST = form2POST() + 'search_type=' +
encodeURI(document.getElementById('tts_search_type'));
+
+ displayLoading();
+
+ var xhr = new XMLHttpRequest();
+ xhr.open('POST', phpGWLink('/index.php', {menuaction:
'tts.botts.search', phpgw_return_as: 'json'}), true);
+ xhr.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
+ xhr.setRequestHeader("Content-length", strPOST.length);
+ xhr.onreadystatechange = function()
+ {
+
+ if ( xhr.readyState == 4 )
+ {
+ hideLoading();
+ }
+ }
+ xhr.send(strPOST);
+ return false;
+}
Index: templates/base/search.xsl
===================================================================
RCS file: templates/base/search.xsl
diff -N templates/base/search.xsl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ templates/base/search.xsl 17 Dec 2006 23:29:29 -0000 1.1
@@ -0,0 +1,70 @@
+ <xsl:template match="search">
+ <div>
+ <form action="{url/simple_action}" method="post">
+ <fieldset>
+ <legend><xsl:value-of
select="lang/search" /></legend>
+ <div>
+ <select>
+ <option>subject</option>
+
<option>description</option>
+ </select>
+
+ <select>
+ <option>is</option>
+
<option>contains</option>
+ <option>starts
with</option>
+ </select>
+
+ <input type="text" />
+ <input type="button"
value="{lang/search}" />
+ </div>
+ </fieldset>
+ </form>
+ </div>
+
+ <div>
+ <form action="{url/saved}" method="post">
+ <fieldset id="tts_saved_searches">
+ <legend><xsl:value-of
select="lang/saved_searches" /></legend>
+ <select>
+ <option
value="db_id">Search</option>
+ </select>
+ <input type="submit" name="go"
value="{lang/go}" />
+ <input type="submit" name="edit"
value="{lang/edit}" />
+ </fieldset>
+ </form>
+ </div>
+
+
+ <div>
+ <form action="{url/advanced}" method="post">
+ <fieldset>
+ <legend><xsl:value-of
select="lang/advanced" /></legend>
+ <div>
+ <label
for="tts_search_name"><xsl:value-of select="lang/search_name" /></label>
+ <input type="text"
name="tts_search_name" id="tts_search_name" /><br />
+ </div>
+
+ <div><xsl:value-of
select="lang/find_all" /></div>
+
+ <button type="button"
onclick="addNewCriteria();">
+ +
+ <xsl:value-of select="lang/add"
/>
+ </button>
+
+ <label
for="tts_search_type"><xsl:value-of select="lang/find_all" /></label>
+ <select name="tts_search_type"
id="tts_search_type">
+ <option
value="AND"><xsl:value-of select="lang/if_all" /></option>
+ <option
value="OR"><xsl:value-of select="lang/if_any" /></option>
+ </select><br />
+
+ <h2><xsl:value-of
select="lang/search_criteria" /></h2>
+ <div id="tts_search_adv_criteria"></div>
+
+ <input type="submit"
name="tts_search_save" id="tts_search_save" value="Save"
onclick="saveAdvSearch(); return false;" />
+ <input type="submit"
name="tts_search_cancel" id="tts_search_cancel" value="Cancel"
onclick="window.location='http://google.com';"/>
+ <input type="submit"
name="tts_search_ok" id="tts_search_ok" value="{lang/search}"
onclick="submitAdvSearch(); return false;"/>
+ </fieldset>
+ </form>
+ </div>
+ </xsl:template>
Index: templates/base/select_ticket.xsl
===================================================================
RCS file: templates/base/select_ticket.xsl
diff -N templates/base/select_ticket.xsl
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ templates/base/select_ticket.xsl 17 Dec 2006 23:29:29 -0000 1.1
@@ -0,0 +1,16 @@
+<!-- $Id: select_ticket.xsl,v 1.1 2006/12/17 23:29:29 skwashd Exp $ -->
+
+<xsl:template match="select_ticket">
+ <form action="{url_form_action}" method="post">
+ <label for="ticket_type"><xsl:value-of
select="lang/ticket_type" /></label>:
+ <select name="ticket_type" id="type_id">
+ <xsl:for-each select="ticket_type">
+ <option value="{id}"><xsl:value-of
disable-output-escaping="yes" select="value" /></option>
+ </xsl:for-each>
+ </select><br />
+ <div class="btngrp">
+ <input type="submit" name="cancel"
value="{lang/cancel}" class="button" />
+ <input type="submit" name="next" value="{lang/next}"
class="button" />
+ </div>
+ </form>
+</xsl:template>
- [Phpgroupware-cvs] tts inc/class.botts.inc.php inc/class.uitts.inc...,
Dave Hall <=