function getSearchForm() { $entities = func_get_args(); if (!isset($_REQUEST['page'])) { $_REQUEST['page'] = 0; } switch ($_REQUEST['page']) { case 0: /* FORM EMISSION - This should be done on a presentation layer! */ $content = "<div id=\"search\"> <form name=\"search\">\n"; $content .= "<input type=\"hidden\" name=\"page\" value=\"1\">\n"; $content .= "<input type=\"hidden\" name=\"action\" value=\"search\">\n"; $content .= "<table>\n"; $content .= "<tr>\n"; $content .= "<td>Free Text </td>\n"; #$content .= "<td><input type=\"text\" name=\"text\" size=\"30\" onkeyup=\"searchRequest();\"></td>\n"; $content .= "<td><input type=\"text\" name=\"text\" size=\"30\" ></td>\n"; $content .= "</tr>\n"; foreach ($entities as $k => $entity) { if (is_array($entity->searchFields['CHECK'])) { foreach ($entity->searchFields['CHECK'] as $index => $field) { $result[$entity->name][$field] = aux::getResult("SELECT DISTINCT {$field} FROM {$entity->name} WHERE {$field} <> '' ORDER BY {$field}"); $label[$field] = $entity->searchFields['CHECKLABEL'][$index]; } } } $finalArray = array(); $field = ""; if (is_array($result)) { foreach ($result as $entity => $v1) { foreach ($v1 as $field => $v2) { foreach ($v2 as $v3) { foreach ($v3 as $k => $v) { if ($k != $field) { $field = $k; } $finalArray[$field] = aux::add_distinct($finalArray[$field], $v); } } } } } $field = ""; foreach ($finalArray as $k => $item) { $content .= "<tr>\n"; if ($k != $field) { $content .= "<td valign=\"top\">{$label[$k]}</td>\n"; $field = $k; } else { $content .= "<td></td>\n"; } $content .= "<td>\n"; $sorted = $item; asort($sorted); $content .= "\n\n<!-- BEGIN -->\n<table width=\"100%\">\n"; $checkcount = 0; foreach ($sorted as $k => $v) { if ($checkcount % 2 == 0) { $content .= "<tr>\n"; $content .= "<td width=\"50%\"><input type=\"checkbox\" name=\"{$field}_{$v}\" value=\"{$v}\"> {$v}</td>\n"; } else { $content .= "<td width=\"50%\"><input type=\"checkbox\" name=\"{$field}_{$v}\" value=\"{$v}\"> {$v}</td>\n"; $content .= "</tr>\n"; } $checkcount++; } if ($checkcount % 2 == 0) { $content .= "<td></td>\n"; $content .= "</tr>\n"; } $content .= "</table>\n\n<!-- END -->\n\n"; $content .= "</td>\n"; $content .= "</tr>\n"; } foreach ($entities as $k => $entity) { if (is_array($entity->searchRelations)) { foreach ($entity->searchRelations as $index => $relation) { $relations[$relation->name] = $relation; if ($relation->entity_1->name == $entity->name) { $data = $relation->entity_2->getReference(); } else { $data = $relation->entity_1->getReference(); } $name = $relation->name; $content .= "<tr><td valign=\"top\">{$entity->searchFields['RELATIONLABEL'][$index]}</td><td>\n"; $content .= "<table width=\"100%\">\n"; $checkcount = 0; foreach ($data as $v) { if ($checkcount % 2 == 0) { $content .= "<tr>\n"; $content .= "<td width=\"50%\"><input type=\"checkbox\" name=\"{$name}_{$v['value']}\" value=\"{$v['value']}\"> {$v['text']}</td>\n"; } else { $content .= "<td width=\"50%\"><input type=\"checkbox\" name=\"{$name}_{$v['value']}\" value=\"{$v['value']}\"> {$v['text']}</td>\n"; $content .= "</tr>"; } $checkcount++; } if ($checkcount % 2 == 0) { $content .= "<td></td>\n"; $content .= "</tr>"; } $content .= "</table>\n"; $content .= "</td></tr>\n"; } } } $content .= "<tr><td></td>\n"; $content .= "<td><input type=\"submit\" value=\"Show Result\"></td>\n"; $content .= "</tr>\n</table>\n</form></div>\n\n"; return $content; break; case 1: // ****************** foreach ($entities as $entity) { unset($sub_cond); $fields = "{$entity->name}.{$entity->fields[0]['name']} AS {$entity->name}_{$entity->fields[0]['name']}"; if (is_array($entity->searchFields['TEXT'])) { foreach ($entity->searchFields['TEXT'] as $field) { $fields .= ", {$entity->name}.{$field} AS {$entity->name}_{$field}"; } } if (is_array($entity->searchFields['CHECK'])) { foreach ($entity->searchFields['CHECK'] as $field) { $fields .= ", {$entity->name}.{$field} AS {$entity->name}_{$field}"; } } if (is_array($entity->searchFields['TEXT'])) { if ($entity->owner) { $fields .= ", username, creation"; } } $query = "SELECT {$fields} FROM {$entity->name} "; $left = ""; if (count($entity->searchRelations) > 0) { foreach ($entity->searchRelations as $relation) { $left .= "LEFT JOIN {$relation->name} ON {$relation->name}.id_{$entity->name} = {$entity->name}.{$entity->fields[0]['name']} "; } } if ($_REQUEST['text'] != "") { $condition = ""; if (count($entity->searchFields['TEXT']) > 0) { foreach ($entity->searchFields['TEXT'] as $field) { $condition .= aux::first_comma("{$entity->name} cond_1", " OR ") . "{$entity->name}.{$field} LIKE '%{$_REQUEST['text']}%'"; } } if ($condition != "") { $sub_cond[] = $condition; } } $condition = ""; if (count($entity->searchFields['CHECK']) > 0) { foreach ($entity->searchFields['CHECK'] as $field) { foreach ($_REQUEST as $element => $value) { if (ereg($field, $element)) { $condition .= aux::first_comma("{$entity->name} cond_2", " OR ") . "{$entity->name}.{$field} = '{$value}'"; } } } } if ($condition != "") { $sub_cond[] = $condition; } if (count($entity->searchRelations) > 0) { foreach ($entity->searchRelations as $relation) { $condition = ""; foreach ($_REQUEST as $element => $value) { if (ereg($relation->name, $element)) { $condition .= aux::first_comma($relation->name, " OR ") . "{$relation->name}.id_{$entity->name} = '{$value}'"; } } if ($condition != "") { $sub_cond[] = $condition; $query .= $left; } } } if (count($sub_cond) > 0) { $query .= " WHERE "; foreach ($sub_cond as $condition) { $query .= aux::first_comma("{$entity->name} WHERE", " AND ") . "({$condition})"; } } return $query; } break; } }