phpgroupware-cvs
[Top][All Lists]
Advanced

[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>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]