Base =& $uiBase; $this->prefix = 'SEARCH'; //$this->results =& $_SESSION[UI_SEARCH_SESSNAME]['results']; $this->criteria =& $_SESSION[UI_SEARCH_SESSNAME]['criteria']; $this->reloadUrl = UI_BROWSER.'?popup[]=_reload_parent&popup[]=_close'; if (empty($this->criteria['limit'])) { $this->criteria['limit'] = UI_BROWSE_DEFAULT_LIMIT; } } function setReload() { $this->Base->redirUrl = $this->reloadUrl; } function getResult() { $this->searchDB(); return $this->results; } function getCriteria() { return $this->criteria; } function searchForm($id, $mask2) { //print_r($this->criteria['form']); include(dirname(__FILE__).'/formmask/metadata.inc.php'); $form = new HTML_QuickForm('search', UI_STANDARD_FORM_METHOD, UI_HANDLER); $counter = isset($this->criteria['counter']) ? $this->criteria['counter'] : 1; $form->setConstants(array('id'=>$id, 'counter'=>$counter)); foreach ($mask['pages'] as $key=>$val) { foreach ($mask['pages'][$key] as $v){ if (isset($v['type']) && $v['type']) { $col1[uiBase::formElementEncode($v['element'])] = tra($v['label']); if (isset($val['relation'])) { $col2[uiBase::formElementEncode($v['element'])] = $mask2['relations'][$v['relation']]; } else { $col2[uiBase::formElementEncode($v['element'])] = $mask2['relations']['standard']; } } }; }; for ($n = 1; $n <= UI_SEARCH_MAX_ROWS; $n++) { unset($group); if (($n > 1) && ($n > $counter) ) { $activerow = FALSE; } else { $activerow = TRUE; } $form->addElement('static', 's1', NULL, "
"); if ($activerow === FALSE) { $form->addElement('static', 's1_style', NULL, ""); } $sel = &$form->createElement('hierselect', "row_$n", NULL); $sel->setOptions(array($col1, $col2)); $group[] = &$sel; $group[] = &$form->createElement('text', "row_$n".'[2]', NULL, array('size' => 25, 'maxlength' => UI_INPUT_STANDARD_MAXLENGTH)); if ($activerow) { $group[] = &$form->createElement('hidden', "row_$n".'[active]', TRUE); } else { $group[] = &$form->createElement('hidden', "row_$n".'[active]', FALSE); } if ($n === 1) { $group[] = &$form->createElement('button', "addRow", tra('+'), array('onClick' => "SearchForm_addRow('$n')", 'class' => UI_BUTTON_STYLE)); } else { $group[] = &$form->createElement('button', "dropRow_$n", tra('-'), array('onClick' => "SearchForm_dropRow('$n')", 'class' => UI_BUTTON_STYLE)); } $form->addGroup($group); $form->addElement('static', 's2', NULL, "
"); } uiBase::parseArrayToForm($form, $mask2['search']); $constants = isset($this->criteria['form']) ? $this->criteria['form'] : null; $form->setConstants($constants); $form->validate(); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); $output['dynform'] = $renderer->toArray(); //print_r($output); //echo 'output:'; print_r($output); echo "\n"; return $output; } function newSearch(&$formdata) { #print_r($formdata); $this->results = NULL; $this->criteria['conditions'] = NULL; $this->criteria['offset'] = NULL; $this->criteria['form'] = NULL; $this->criteria['operator'] = $formdata['operator']; $this->criteria['filetype'] = $formdata['filetype']; $this->criteria['limit'] = $formdata['limit']; $this->criteria['counter'] = 0; // $criteria['form'] is used for retransfer to form $this->criteria['form']['operator'] = $formdata['operator']; $this->criteria['form']['filetype'] = $formdata['filetype']; $this->criteria['form']['limit'] = $formdata['limit']; foreach ($formdata as $key=>$val) { if (is_array($val) && $val['active']) { $this->criteria['counter']++; $this->criteria['conditions'][$key] = array('cat' => uiBase::formElementDecode($val[0]), 'op' => $val[1], 'val' => stripslashes($val[2]) ); $this->criteria['form'][$key] = array(0 => $val[0], 1 => $val[1], 2 => stripslashes($val[2]) ); } } $this->Base->redirUrl = UI_BROWSER.'?act='.$this->prefix; //$this->searchDB(); } function simpleSearchForm($mask) { $form = new HTML_QuickForm('simplesearch', UI_STANDARD_FORM_METHOD, UI_HANDLER); uiBase::parseArrayToForm($form, $mask); $renderer = new HTML_QuickForm_Renderer_Array(true, true); $form->accept($renderer); $output = $renderer->toArray(); //print_r($output); return $output; } function simpleSearch($formdata) { $this->results = NULL; $this->criteria['conditions'] = NULL; $this->criteria['offset'] = NULL; $this->criteria['operator'] = UI_SIMPLESEARCH_OPERATOR; $this->criteria['filetype'] = UI_SIMPLESEARCH_FILETYPE; $this->criteria['limit'] = UI_SIMPLESEARCH_LIMIT; $this->criteria['counter'] = UI_SIMPLESEARCH_ROWS; $this->criteria['form']['operator'] = 'OR'; ## $criteria['form'] is used for retransfer to form ## $this->criteria['form']['filetype'] = UI_SIMPLESEARCH_FILETYPE; $this->criteria['form']['limit'] = UI_SIMPLESEARCH_LIMIT; for ($n = 1; $n <= UI_SIMPLESEARCH_ROWS; $n++) { $this->criteria['conditions'][$n] = array('cat' => constant('UI_SIMPLESEARCH_CAT'.$n), 'op' => constant('UI_SIMPLESEARCH_OP'.$n), 'val' => stripslashes($formdata['criterium']) ); $this->criteria['form']['row_'.$n]= array(0 => uiBase::formElementEncode(constant('UI_SIMPLESEARCH_CAT'.$n)), 1 => constant('UI_SIMPLESEARCH_OP'.$n), 2 => stripslashes($formdata['criterium']) ); } $this->Base->redirUrl = UI_BROWSER.'?act='.$this->prefix; #$this->searchDB(); } function searchDB() { if (count($this->criteria) === 0) { return FALSE; } $offset = (isset($this->criteria['offset'])) ? $this->criteria['offset'] : 0; $this->results = array('page' => $offset / $this->criteria['limit']); //print_r($this->criteria); $results = $this->Base->gb->localSearch($this->criteria, $this->Base->sessid); if (PEAR::isError($results)) { //print_r($results); return FALSE; } foreach ($results['results'] as $rec) { $tmpId = $this->Base->gb->_idFromGunid($rec["gunid"]); $this->results['items'][] = $this->Base->getMetaInfo($tmpId); } $this->results['cnt'] = $results['cnt']; /* ## test for ($n=0; $n<=$this->criteria['limit']; $n++) { $this->results['items'][] = Array ( 'id' => 24, 'gunid' => '1cc472228d0cb2ac', 'title' => 'Item '.$n, 'creator' => 'Sebastian', 'duration' => '   10:00', 'type' => 'webstream' ); } $results['cnt'] = 500; $this->results['cnt'] = $results['cnt']; ## end test */ //print_r($this->results); $this->pagination($results); return TRUE; } function pagination($results) { if (sizeof($this->results['items']) == 0) { return FALSE; } $offset = isset($this->criteria['offset']) ? $this->criteria['offset'] : 0; $currp = ($offset / $this->criteria['limit']) + 1; // current page $maxp = ceil($results['cnt'] / $this->criteria['limit']); // maximum page /* for ($n = 1; $n <= $maxp; $n = $n+$width) { $width = pow(10, floor(($n)/10)); $this->results['pagination'][$n] = $n; } */ $deltaLower = UI_SEARCHRESULTS_DELTA; $deltaUpper = UI_SEARCHRESULTS_DELTA; $start = $currp; if ($start + $maxp > 0) { $deltaLower += $start - $maxp; // correct lower boarder if page is near end } for ($n = $start-$deltaLower; $n <= $start+$deltaUpper; $n++) { if ($n <= 0) { $deltaUpper++; // correct upper boarder if page is near zero } elseif ($n <= $maxp) { $this->results['pagination'][$n] = $n; } } #array_pop($this->results['pagination']); $this->results['pagination'][1] ? NULL : $this->results['pagination'][1] = '|<<'; $this->results['pagination'][$maxp] ? NULL : $this->results['pagination'][$maxp] = '>>|'; $this->results['next'] = ($results['cnt'] > $offset + $this->criteria['limit']) ? TRUE : FALSE; $this->results['prev'] = ($offset > 0) ? TRUE : FALSE; ksort($this->results['pagination']); return TRUE; } function reOrder($by) { $this->criteria['offset'] = NULL; if ($this->criteria['orderby'] == $by && !$this->criteria['desc']) { $this->criteria['desc'] = TRUE; } else { $this->criteria['desc'] = FALSE; } $this->criteria['orderby'] = $by; $this->setReload(); //$this->searchDB(); } function clear() { //$this->results = NULL; $this->criteria['form'] = NULL; $this->criteria['counter'] = NULL; $this->setReload(); } function setOffset($page) { $o =& $this->criteria['offset']; $l =& $this->criteria['limit']; if ($page == 'next') { $o += $l; } elseif ($page == 'prev') { $o -= $l; } elseif (is_numeric($page)) { $o = $l * ($page-1); } $this->setReload(); //$this->searchDB(); } } // class uiSearch ?>