public function setWithDisplayValue($value) { if ($value === '' || $value === null) { parent::setValue(null); return; } $parts = explode("//", $value); $mainId = $this->mainModel->getKeyField(); $mainField = Model::resolvePath($this->mainModelField); $mainField = $mainField['field']; $subField = Model::resolvePath($this->subModelField); $subField = $subField['field']; $possibleMainItem = reset($this->mainModel->getWithField2("trim({$mainField})", trim($parts[0]))); if ($possibleMainItem === false) { throw new Exception("Invalid option <b>{$value}</b> for <b>{$this->label}</b> field."); } $possibleSubItem = reset($this->subModel->get(array('conditions' => "{$mainId} = {$possibleMainItem[$mainId]} and trim({$subField}) = '" . trim($this->mainModel->escape($parts[1])) . "'"), Model::MODE_ASSOC, false, false)); if ($possibleSubItem === false) { throw new Exception("Invalid option <b>{$value}</b> for <b>{$this->label}</b> field."); } else { if ($possibleSubItem === false) { parent::setValue(null); } else { parent::setValue($possibleSubItem[$this->getName()]); } } }
/** * Creates a new ModelField. The example below creates a ModelField which * lists client accounts for selection. * * @code * $clients = new ModelField("brokerage.setup.clients.client_id", "account"); * @endcode * @param $path The full path to the field in the module which is to be returned by this field. * @param $value The name of the field from the model whose value should be displayed in the list. */ public function __construct($path, $value) { global $redirectedPackage; $this->info = Model::resolvePath($path); $this->model = Model::load((substr($this->info["model"], 0, 1) == "." ? $redirectedPackage : "") . $this->info["model"]); $this->valueField = $value; $field = $this->model->getFields(array($value)); $this->setLabel($field[0]["label"]); $this->setDescription($field[0]["description"]); $this->setName($this->info["field"]); $params = array("fields" => array($this->info["field"], $this->valueField), "sort_field" => $this->valueField); if ($this->conditions != '') { $params['conditions'] = $this->conditions; } $data = $this->model->get($params, Model::MODE_ARRAY); $this->addOption("Add new " . Utils::singular($this->model->getEntity()), 'NEW'); foreach ($data as $datum) { if ($datum[1] == "") { $this->addOption($datum[0]); } else { $this->addOption($datum[1], $datum[0]); } } $modelPath = str_replace('.', '/', $this->model->package); $this->addAttribute('onchange', "fapiAddModelItem('{$modelPath}', this, '{$value}')"); }
/** * A utility function around the SQLDataStore::getMulti() method. This function * allows for dynamic fields. These dynamic fields are fields which are read * from a database table. * * @param array $params * @param int $mode * @return array * @see SQLDataStore::getMulti() */ public static function getReportData($params, $mode = SQLDatabaseModel::MODE_ASSOC) { $dynamicFields = array(); if (is_array($params["dynamicHeaders"])) { foreach ($params["dynamicHeaders"] as $key => $dynamicHeader) { $info = Model::resolvePath($dynamicHeader); $headers = Model::load($info["model"]); $data = $headers->get(array("fields" => array($headers->getKeyField(), $info["field"])), SQLDataBaseModel::MODE_ARRAY); foreach ($data as $dat) { $replacement[$dat[1]] = null; } $dynamicFields[$key]["replacement"] = $replacement; $dynamicFields[$key]["headers"] = $data; $dynamicFields[$key]["field"] = $params["dynamicFields"][$key]; $dynamicFields[$key]["keyField"] = count($params["fields"]); //array_search($headers->getKeyField(), $params["fields"]); $dynamicFields[$key]["replaceIndex"] = array_search($params["dynamicFields"][$key], $params["fields"]); $dynamicFields[$key]["numFields"] = count($data); $params["fields"][] = $headers->package . "." . $headers->getKeyField(); } } $data = SQLDBDataStore::getMulti($params, $mode); $numData = count($data); if ($numData == 0) { return $data; } elseif ($numData == 1) { foreach ($dynamicFields as $dynamicField) { array_splice($data[0], $dynamicField["replaceIndex"], 1, array_pad(array(), $dynamicField["numFields"], $data[0][$dynamicField["replaceIndex"]])); } } else { if (count($dynamicFields) == 0) { return $data; } $keys = array_keys($data[0]); $numReturnData = 0; for ($i = 0; $i < $numData;) { foreach ($dynamicFields as $dynamicField) { $base = $i; $returnData[] = $data[$i]; array_splic($returnData[$numReturnData], $dynamicField["replaceIndex"], 1, $dynamicField["replacement"]); foreach ($dynamicField["headers"] as $header) { for ($j = 0; $j < $dynamicField["numFields"]; $j++) { if ($data[$base + $j][$dynamicField["keyField"]] == $header[0]) { $returnData[$numReturnData][$header[1]] = $data[$base + $j][$keys[$dynamicField["replaceIndex"]]]; break; } } $i++; } unset($returnData[$numReturnData][$dynamicField["keyField"]]); $numReturnData++; } } $data = $returnData; } return $data; }
public function __construct($path = null, $value = null) { if ($path != null) { $info = Model::resolvePath($path); if ($value == "") { $value = $info["field"]; } $this->model = model::load($info["model"]); $field = $this->model->getFields(array($value)); $this->setLabel($field[0]["label"]); $this->setDescription($field[0]["description"]); $this->setName($info["field"]); $this->addSearchField($value); $this->storedField = $info["field"]; } }
public function setWithDisplayValue($value) { $parts = explode("//", $value); $mainId = $this->mainModel->getKeyField(); $mainField = Model::resolvePath($this->mainModelField); $mainField = $mainField['field']; $subField = Model::resolvePath($this->subModelField); $subField = $subField['field']; $possibleMainItem = reset($this->mainModel->getWithField2("trim({$mainField})", trim($parts[0]))); if ($possibleMainItem === false) { parent::setValue(null); return; } $possibleSubItem = reset($this->subModel->get(array('filter' => "{$mainId} = ? and trim({$subField}) = ?", 'bind' => [$possibleMainItem[$mainId], trim($this->mainModel->escape($parts[1]))]), Model::MODE_ASSOC, false, false)); parent::setValue($possibleSubItem[$this->getName()]); }
/** * Creates a new relationship field. * @param unknown_type $label The label for the field. * @param unknown_type $name The name for the field. * @param unknown_type $mainModelPath The path of the main model. * @param unknown_type $subModelPath The path of the sub model. */ public function __construct($label, $name, $mainModelPath, $subModelPath) { $this->setName($name); $this->setLabel($label); $this->mainSelectionList = new SelectionList(); $this->mainSelectionList->setId($name . "_main"); $this->mainSelectionList->addAttribute("onchange", "fapi_change_{$name}()"); $this->subSelectionList = new SelectionList(); $this->subSelectionList->setName($name); $subSelectionList = new SelectionList(); $mainModelPathInfo = Model::resolvePath($mainModelPath); $this->subModelPathInfo = Model::resolvePath($subModelPath); $this->mainModel = Model::load($mainModelPathInfo["model"]); $this->subModel = Model::load($this->subModelPathInfo["model"]); $info = $this->mainModel->get(array("fields" => array($mainModelPathInfo["field"], $this->mainModel->getKeyField()), "sort_field" => $mainModelPathInfo["field"]), Model::MODE_ARRAY); foreach ($info as $inf) { $this->mainSelectionList->addOption($inf[0], $inf[1]); } }
/** * Creates a new ModelField. The example below creates a ModelField which * lists client accounts for selection. * * @code * $clients = new ModelField("brokerage.setup.clients.client_id", "account"); * @endcode * @param $path The full path to the field in the module which is to be returned by this field. * @param $value The name of the field from the model whose value should be displayed in the list. */ public function __construct($path, $value) { global $redirectedPackage; $info = Model::resolvePath($path); $this->model = Model::load((substr($info["model"], 0, 1) == "." ? $redirectedPackage : "") . $info["model"]); $this->valueField = $value; $field = $this->model->getFields(array($value)); $this->setLabel($field[0]["label"]); $this->setDescription($field[0]["description"]); $this->setName($info["field"]); $data = $this->model->get(array("fields" => array($info["field"], $value), "sort_field" => $value), Model::MODE_ARRAY); $this->addOption("", ""); foreach ($data as $datum) { if ($datum[1] == "") { $this->addOption($datum[0]); } else { $this->addOption($datum[1], $datum[0]); } } }
public static function getMulti($params, $mode = SQLDatabaseModel::MODE_ASSOC) { //Load all models $fields = array(); $field_infos = array(); $models = array(); $fieldDescriptions = array(); $headers = array(); $fixedConditions = array(); foreach ($params["fields"] as $field) { $fieldreferences = explode(", ", $field); if (count($fieldreferences) == 1) { $fields[] = (string) $field; $field_infos[] = Model::resolvePath((string) $field); } else { $fields[] = $fieldreferences; foreach ($fieldreferences as $ref) { $infos[] = Model::resolvePath((string) $ref); } $field_infos[] = $infos; } } foreach ($fields as $i => $field) { if (is_array($field)) { foreach ($field_infos[$i] as $info) { if (array_search($info["model"], array_keys($models)) === false) { $models[$info["model"]] = Model::load($info["model"]); } } } else { if (array_search($field_infos[$i]["model"], array_keys($models)) === false) { $models[$field_infos[$i]["model"]] = Model::load($field_infos[$i]["model"]); if ($models[$field_infos[$i]["model"]]->fixedConditions != "") { $fixedConditions[] = $models[$field_infos[$i]["model"]]->fixedConditions; } } } } // Replace any conditions with filters if (isset($params['filter'])) { $params['conditions'] = $params['filter']; } else { $params['conditions'] = ''; } if (count($fixedConditions) > 0) { $params["conditions"] = ($params["conditions"] == "" ? "" : "(" . $params["conditions"] . ") AND ") . "(" . implode(" AND ", $fixedConditions) . ")"; } //Buld the query $query = "SELECT "; $fieldList = array(); $rawFields = array(); $functions = $params["global_functions"]; foreach ($fields as $i => $field) { $field_info = $field_infos[$i]; if (is_array($field)) { $concatFieldList = array(); foreach ($field_info as $info) { $fieldData = $models[$info["model"]]->getFields(array($info["field"])); $concatFieldList[] = $models[$info["model"]]->datastore->formatField($fieldData[0], $models[$info["model"]]->getDatabase() . "." . $info["field"], true, null, true); $rawFields[] = $models[$info["model"]]->getDatabase() . "." . $info["field"]; } $fieldList[] = $models[$info["model"]]->datastore->applySqlFunctions($models[$info["model"]]->datastore->concatenate($concatFieldList), $functions); } else { $fieldData = $models[$field_infos[$i]["model"]]->getFields(array($field_info["field"])); $fieldDescriptions[] = $fieldData[0]; $headers[] = $fieldData[0]["label"]; $fieldList[] = $models[$field_info["model"]]->datastore->formatField($fieldData[0], $models[$field_info["model"]]->getDatabase() . "." . $field_info["field"], true, $functions, true); $rawFields[] = $models[$field_info["model"]]->getDatabase() . "." . $field_info["field"]; } } if ($params['moreInfoOnly'] === true) { return array("data" => $data, "fieldInfos" => $fieldDescriptions, "headers" => $headers, "rawFields" => $rawFields); } $tableList = array(); foreach ($models as $model) { $tableList[] = $model->getDatabase(); } $joinConditions = array(); $hasDontJoin = is_array($params['dont_join']); foreach ($models as $model) { foreach ($models as $other_model) { // skip if the models are the same if ($model->name == $other_model->name) { continue; } if ($model->hasField($other_model->getKeyField())) { if ($hasDontJoin) { $modelPair = "{$model->package},{$other_model->package}"; $fieldPair = "{$model->package}.{$other_model->getKeyField()},{$other_model->package}.{$other_model->getKeyField()}"; Application::log('GET_MULTI')->debug("Trying to skip a join", ['model_pair' => $modelPair, 'field_pair' => $fieldPair, 'dont_join' => $params['dont_join']]); if (array_search($modelPair, $params['dont_join']) !== false) { continue; } if (array_search($fieldPair, $params['dont_join']) !== false) { continue; } } $joinConditions[] = "{$model->getDatabase()}.{$other_model->getKeyField()}={$other_model->getDatabase()}.{$other_model->getKeyField()}"; } } } if ($params["distinct"] === true) { $query .= " DISTINCT "; } // Apply any special modifiers to the fields if ($params["count"] === true || $params["enumerate"] === true) { $query .= ' COUNT(*) as "count" FROM ' . implode(', ', array_unique($tableList)); } else { if ($params["sum"] === true) { $query .= "SUM(" . implode("), SUM(", $rawFields) . ") FROM " . implode(", ", array_unique($tableList)); } else { if ($params["max"] === true) { $query .= "MAX(" . implode("), MAX(", $rawFields) . ") FROM " . implode(", ", array_unique($tableList)); } else { $query .= ($params["resolve"] === false ? implode(",", $rawFields) : implode(",", $fieldList)) . " FROM " . implode(",", array_unique($tableList)); } } } if (count($joinConditions) > 0) { $query .= " WHERE (" . implode(" AND ", $joinConditions) . ") "; $query .= strlen($params["conditions"]) > 0 ? " AND (" . $params["conditions"] . ")" : ""; } else { $query .= strlen($params["conditions"]) > 0 ? " WHERE " . $params["conditions"] : ""; } if (is_array($params["sort_field"]) && $params["count"] !== true) { if (count($params["sort_field"]) > 0) { $query .= " ORDER BY "; $orderClauses = array(); foreach ($params["sort_field"] as $sortField) { if ($sortField["field"] == "") { continue; } $orderClauses[] = "{$sortField["field"]} {$sortField["type"]}"; } $query .= implode(", ", $orderClauses); } } else { if ($params["sort_field"] != "" && $params["count"] !== true) { $query .= " ORDER BY {$params["sort_field"]} {$params["sort_type"]}"; } } if ($params["group_field"] != "") { $query .= " GROUP BY {$params["group_field"]}"; foreach ($rawFields as $field) { if ($field != $params["group_field"]) { $query .= "," . $field; } } } if (isset($params["limit"])) { $query .= " LIMIT ?"; $params['bind'][] = $params['limit']; } if (isset($params['offset'])) { $query .= " OFFSET ?"; $params['bind'][] = $params['offset']; } Application::log()->info($params['cache_key']); $data = $other_model->datastore->query($query, $mode, $params['bind'], $params['cache_key']); if (isset($params['cache_key'])) { Cache::add($params['cache_key'], $query); } if ($params["moreInfo"] === true) { if (isset($params['cache_key'])) { Cache::add("{$params['cache_key']}_meta", ['fieldInfos' => $fieldDescriptions, 'headers' => $headers, 'rawFields' => $rawFields]); } return array("data" => $data, "fieldInfos" => $fieldDescriptions, "headers" => $headers, "rawFields" => $rawFields); } else { return $data; } }
public static function getMulti($params, $mode = SQLDatabaseModel::MODE_ASSOC) { //Load all models $fields = array(); $field_infos = array(); $models = array(); $fieldDescriptions = array(); $headers = array(); $fixedConditions = array(); foreach ($params["fields"] as $field) { $fieldreferences = explode(", ", $field); if (count($fieldreferences) == 1) { $fields[] = (string) $field; $field_infos[] = Model::resolvePath((string) $field); } else { $fields[] = $fieldreferences; foreach ($fieldreferences as $ref) { $infos[] = Model::resolvePath((string) $ref); } $field_infos[] = $infos; } } foreach ($fields as $i => $field) { if (is_array($field)) { foreach ($field_infos[$i] as $info) { if (array_search($info["model"], array_keys($models)) === false) { $models[$info["model"]] = Model::load($info["model"]); } } } else { if (array_search($field_infos[$i]["model"], array_keys($models)) === false) { $models[$field_infos[$i]["model"]] = Model::load($field_infos[$i]["model"]); if ($models[$field_infos[$i]["model"]]->fixedConditions != "") { $fixedConditions[] = $models[$field_infos[$i]["model"]]->fixedConditions; } } } } if (count($fixedConditions) > 0) { $params["conditions"] = ($params["conditions"] == "" ? "" : "(" . $params["conditions"] . ") AND ") . "(" . implode(" AND ", $fixedConditions) . ")"; } //Buld the query $query = "SELECT "; $fieldList = array(); $rawFields = array(); $functions = $params["global_functions"]; foreach ($fields as $i => $field) { $field_info = $field_infos[$i]; if (is_array($field)) { $concatFieldList = array(); foreach ($field_info as $info) { $fieldData = $models[$info["model"]]->getFields(array($info["field"])); $concatFieldList[] = $models[$info["model"]]->datastore->formatField($fieldData[0], $models[$info["model"]]->getDatabase() . "." . $info["field"], true, null, true); $rawFields[] = $models[$info["model"]]->getDatabase() . "." . $info["field"]; } $fieldList[] = $models[$info["model"]]->datastore->applySqlFunctions($models[$info["model"]]->datastore->concatenate($concatFieldList), $functions); } else { $fieldData = $models[$field_infos[$i]["model"]]->getFields(array($field_info["field"])); $fieldDescriptions[] = $fieldData[0]; $headers[] = $fieldData[0]["label"]; $fieldList[] = $models[$field_info["model"]]->datastore->formatField($fieldData[0], $models[$field_info["model"]]->getDatabase() . "." . $field_info["field"], true, $functions, true); $rawFields[] = $models[$field_info["model"]]->getDatabase() . "." . $field_info["field"]; } } if ($params['moreInfoOnly'] === true) { return array("data" => $data, "fieldInfos" => $fieldDescriptions, "headers" => $headers, "rawFields" => $rawFields); } $tableList = array(); foreach ($models as $model) { $tableList[] = $model->getDatabase(); } $joinConditions = array(); foreach ($models as $model) { foreach ($models as $other_model) { // skip if the models are the same if ($model->name == $other_model->name) { continue; } // skip explicitly selected models if (is_array($params['dont_join'])) { if (array_search("{$model->package},{$other_model->package}", $params['dont_join']) !== false) { continue; } if (array_search("{$other_model->package},{$model->package}", $params['dont_join']) !== false) { continue; } } if ($model->hasField($other_model->getKeyField())) { $joinConditions[] = "{$model->getDatabase()}.{$other_model->getKeyField()}={$other_model->getDatabase()}.{$other_model->getKeyField()}"; } } } if ($params["distinct"] === true) { $query .= " DISTINCT "; } if ($params["count"] === true || $params["enumerate"] === true) { $query .= ' COUNT(*) as "count" FROM ' . implode(', ', array_unique($tableList)); } else { if ($params["sum"] === true) { $query .= "SUM(" . implode("), SUM(", $rawFields) . ") FROM " . implode(", ", array_unique($tableList)); } else { $query .= ($params["resolve"] === false ? implode(",", $rawFields) : implode(",", $fieldList)) . " FROM " . implode(",", array_unique($tableList)); } } if (count($joinConditions) > 0) { $query .= " WHERE (" . implode(" AND ", $joinConditions) . ") "; $query .= strlen($params["conditions"]) > 0 ? " AND (" . $params["conditions"] . ")" : ""; } else { $query .= strlen($params["conditions"]) > 0 ? " WHERE " . $params["conditions"] : ""; } if (is_array($params["sort_field"]) && $params["count"] !== true) { if (count($params["sort_field"]) > 0) { $query .= " ORDER BY "; $orderClauses = array(); foreach ($params["sort_field"] as $sortField) { if ($sortField["field"] == "") { continue; } $orderClauses[] = "{$sortField["field"]} {$sortField["type"]}"; } $query .= implode(", ", $orderClauses); } } else { if ($params["sort_field"] != "" && $params["count"] !== true) { $query .= " ORDER BY {$params["sort_field"]} {$params["sort_type"]}"; } } if ($params["group_field"] != "") { $query .= " GROUP BY {$params["group_field"]}"; foreach ($rawFields as $field) { if ($field != $params["group_field"]) { $query .= "," . $field; } } } if (isset($params["limit"])) { $query .= " LIMIT {$params["limit"]}"; //$query = "select * from ( select a.*, ROWNUM autoremove_oracle_rnum from ( $query ) a where ROWNUM <= ".($params["offset"]+$params["limit"])." ) where autoremove_oracle_rnum >= ".($params["offset"]+0); } if (isset($params['offset'])) { $query .= " OFFSET {$params["offset"]}"; } $data = $other_model->datastore->query($query, $mode); if ($params["moreInfo"] === true) { return array("data" => $data, "fieldInfos" => $fieldDescriptions, "headers" => $headers, "rawFields" => $rawFields); } else { return $data; } }
public function setResolvableData($data, $primary_key_field = null, $primary_key_value = null) { $errors = array(); foreach ($data as $key => $value) { switch ($this->fields[$key]["type"]) { case "date": if ($value != "") { $data[$key] = Model::stringToTime($value); if ($data[$key] === false) { $errors[$key][] = "Invalid Date Format. Use yy/mm/dddd."; } } break; case "datetime": if ($value != "") { $data[$key] = Model::stringToTime($value, true); if ($data[$key] === false) { $errors[$key][] = "Invalid Date Format. Use yy/mm/dddd."; } } break; case "enum": if ($data[$key] != "") { $data[$key] = array_search(trim($value), $this->fields[$key]["options"]); if ($data[$key] === false) { $errors[$key][] = "Invalid Value '<b>{$value}</b>'<br/>Possible values may include <ul><li>'" . implode("'</li><li>'", $this->fields[$key]["options"]) . "'</li></ul>"; } $data[$key] = (string) $data[$key]; } break; case "boolean": $data[$key] = $value == "Yes" ? "1" : "0"; break; case "reference": if ($data[$key] != "") { $modelInfo = Model::resolvePath($this->fields[$key]["reference"]); $model = Model::load($modelInfo["model"]); $row = $model->get(array("fields" => array($modelInfo["field"]), "conditions" => "TRIM(UPPER({$this->fields[$key]["referenceValue"]}))=TRIM(UPPER('{$data[$key]}'))")); if (isset($row[0][$modelInfo["field"]])) { $data[$key] = $row[0][$modelInfo["field"]]; } else { $errors[$key][] = "Invalid Value"; } } break; } } if (count($errors) == 0) { return $this->setData($data, $primary_key_field, $primary_key_value); } else { return array("errors" => $errors); } }
/** * Returns a form to be used to filter the report. This method analyses the * XML file and uses the fields specified in there to generate a very form * which allows you to define filter for the form. The form generated also * gives you options to sort and group the reports. * @return Form */ public function getForm() { $this->initializeForm(); $filters = array(); $fieldInfos = array(); $queries = $this->xml->xpath("/rapi:report/rapi:query"); $tables = $this->xml->xpath("/rapi:report/rapi:table"); /// Filters and sorting. foreach ($tables as $table) { $numConcatFields = 0; $fields = $table->xpath("/rapi:report/rapi:table[@name='{$table["name"]}']/rapi:fields/rapi:field"); $labels = $table->xpath("/rapi:report/rapi:table[@name='{$table["name"]}']/rapi:fields/rapi:field/@label"); $filters = new TableLayout(count($fields) + 1, 5); $filters->add(Element::create("Label", "Field")->addCssClass("header-label"), 0, 0)->add(Element::create("Label", "Options")->addCssClass("header-label"), 0, 1)->add(Element::create("Label", "Exclude")->addCssClass("header-label"), 0, 4)->resetCssClasses()->addCssClass("filter-table")->setRenderer("default"); $sortingField = new SelectionList("Sorting Field", "{$table["name"]}_sorting_field"); $grouping1 = new SelectionList(); $i = 1; foreach ($fields as $key => $field) { if (isset($field["labelsField"])) { continue; } if (count(explode(",", (string) $field)) == 1) { $fieldInfo = Model::resolvePath((string) $field); $model = Model::load($fieldInfo["model"]); $fieldName = $fieldInfo["field"]; $fieldInfo = $model->getFields(array($fieldName)); $fieldInfo = $fieldInfo[0]; $fields[$key] = (string) $field; $sortingField->addOption(str_replace("\\n", " ", $fieldInfo["label"]), $model->getDatabase() . "." . $fieldInfo["name"]); $grouping1->addOption(str_replace("\\n", " ", $field["label"]), (string) $field); if (array_search($model->getKeyField(), $this->referencedFields) === false || $fieldInfo["type"] == "double" || $fieldInfo["type"] == "date") { switch ($fieldInfo["type"]) { case "integer": case "double": $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}.{$fieldInfo["name"]}_option")->addOption("Equals", "EQUALS")->addOption("Greater Than", "GREATER")->addOption("Less Than", "LESS")->addOption("Between", "BETWEEN")->setValue("BETWEEN"), $i, 1)->add(Element::create("TextField", "", "{$table["name"]}.{$fieldInfo["name"]}_start_value")->setAsNumeric(), $i, 2)->add(Element::create("TextField", "", "{$table["name"]}.{$fieldInfo["name"]}_end_value")->setAsNumeric(), $i, 3); //->add(Element::create("Checkbox","","{$table["name"]}.{$fieldInfo["name"]}_ignore","","1"),$i,4); break; case "date": case "datetime": $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}.{$fieldInfo["name"]}_option")->addOption("Before", "LESS")->addOption("After", "GREATER")->addOption("On", "EQUALS")->addOption("Between", "BETWEEN")->setValue("BETWEEN"), $i, 1)->add(Element::create("DateField", "", "{$table["name"]}.{$fieldInfo["name"]}_start_date")->setId("{$table["name"]}_{$fieldInfo["name"]}_start_date"), $i, 2)->add(Element::create("DateField", "", "{$table["name"]}.{$fieldInfo["name"]}_end_date")->setId("{$table["name"]}_{$fieldInfo["name"]}_end_date"), $i, 3); //->add(Element::create("Checkbox","","{$table["name"]}.{$fieldInfo["name"]}_ignore","","1"),$i,4); break; case "enum": $enum_list = new SelectionList("", "{$table["name"]}.{$fieldInfo["name"]}_value"); $enum_list->setMultiple(true); foreach ($fieldInfo["options"] as $value => $label) { $enum_list->addOption($label, $value); } if (!isset($field["value"])) { $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}.{$fieldInfo["name"]}_option")->addOption("Is any of", "INCLUDE")->addOption("Is none of", "EXCLUDE")->setValue("INCLUDE"), $i, 1)->add($enum_list, $i, 2); } //->add(Element::create("Checkbox","","{$table["name"]}.{$fieldInfo["name"]}_ignore","","1"),$i,4); break; case "string": case "text": $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}.{$fieldInfo["name"]}_option")->addOption("Is exactly", "EXACTLY")->addOption("Contains", "CONTAINS")->setValue("CONTAINS"), $i, 1)->add(Element::create("TextField", "", "{$table["name"]}.{$fieldInfo["name"]}_value"), $i, 2); //->add(Element::create("Checkbox","","{$table["name"]}.{$fieldInfo["name"]}_ignore","","1"),$i,4); break; } if (isset($field["hide"])) { $filters->add(Element::create("HiddenField", "{$table["name"]}.{$fieldInfo["name"]}_ignore", "1"), $i, 4); } else { $filters->add(Element::create("Checkbox", "", "{$table["name"]}.{$fieldInfo["name"]}_ignore", "", "1"), $i, 4); } } else { $enum_list = new ModelSearchField(); $enum_list->setName("{$table["name"]}.{$fieldInfo["name"]}_value"); $enum_list->setModel($model, $fieldInfo["name"]); $enum_list->addSearchField($fieldInfo["name"]); $enum_list->boldFirst = false; $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}.{$fieldInfo["name"]}_option")->addOption("Is any of", "IS_ANY_OF")->addOption("Is none of", "IS_NONE_OF")->setValue("IS_ANY_OF"), $i, 1)->add(Element::create("MultiFields")->setTemplate($enum_list), $i, 2)->add(Element::create("Checkbox", "", "{$table["name"]}.{$fieldInfo["name"]}_ignore", "", "1"), $i, 4); } } else { $grouping1->addOption(str_replace("\\n", " ", $field["label"]), $field); $filters->add(Element::create("Label", str_replace("\\n", " ", (string) $field["label"])), $i, 0)->add(Element::create("SelectionList", "", "{$table["name"]}_concat_{$numConcatFields}_option")->addOption("Is exactly", "EXACTLY")->addOption("Contains", "CONTAINS")->setValue("CONTAINS"), $i, 1)->add(Element::create("TextField", "", "{$table["name"]}_concat_{$numConcatFields}_value"), $i, 2)->add(Element::create("Checkbox", "", "{$table["name"]}_concat_{$numConcatFields}_ignore", "", "1"), $i, 4); $numConcatFields++; } $i++; } $grouping1->setName("{$table["name"]}_grouping[]")->setLabel("Grouping Field 1"); $g1Paging = new Checkbox("Start on a new page", "grouping_1_newpage", "", "1"); $g1Logo = new Checkbox("Repeat Logos", "grouping_1_logo", "", "1"); $g1Summarize = new Checkbox("Summarize", "grouping_1_summary", "", "1"); $grouping2 = clone $grouping1; $grouping2->setName("{$table["name"]}_grouping[]")->setLabel("Grouping Field 2"); $g2Paging = new Checkbox("Start on a new page", "grouping_2_newpage", "", "1"); $g2Logo = new Checkbox("Repeat Logos", "grouping_2_logo", "", "1"); $grouping3 = clone $grouping1; $grouping3->setName("{$table["name"]}_grouping[]")->setLabel("Grouping Field 3"); $g3Paging = new Checkbox("Start on a new page", "grouping_3_newpage", "", "1"); $g3Logo = new Checkbox("Repeat Logos", "grouping_3_logo", "", "1"); $sortingField->setLabel("Sorting Field"); $sortingField->setName($table["name"] . "_sorting"); $groupingTable = new TableLayout(3, 4); $groupingTable->add($grouping1, 0, 0); $groupingTable->add($g1Paging, 0, 1); $groupingTable->add($g1Logo, 0, 2); $groupingTable->add($g1Summarize, 0, 3); $groupingTable->add($grouping2, 1, 0); /* $groupingTable->add($g2Paging, 1, 1); $groupingTable->add($g2Logo, 1, 2); */ $groupingTable->add($grouping3, 2, 0); $container = new FieldSet($table["name"]); $container->setId("{$table["name"]}_options"); $container->add(Element::create("FieldSet", "Filters")->add($filters)->setId("table_{$table['name']}"), Element::create("FieldSet", "Sorting & Limiting")->add($sortingField, Element::create("SelectionList", "Direction", "{$table["name"]}.sorting_direction")->addOption("Ascending", "ASC")->addOption("Descending", "DESC"), Element::create('TextField', 'Limit', "{$table['name']}.limit")->setAsNumeric())->setId("{$table['name']}_sorting_fs"), Element::create("FieldSet", "Grouping")->setId("{$table['name']}_grouping_fs")->add($groupingTable)); $sortingField->setName($table["name"] . "_sorting"); $this->form->add($container); } $this->form->setSubmitValue("Generate"); $this->form->addAttribute("action", $this->path . "/generate"); $this->form->addAttribute("target", "blank"); return $this->form; }
/** * Default controller action. This is the default action which is executed * when no action is specified for a given call. * @see lib/controllers/Controller::getContents() */ public function getContents() { if (count($this->listFields) > 0) { $fieldNames = $this->listFields; } else { if ($this->app != null) { $fieldNames = $this->app->xpath("/app:app/app:list/app:field"); $concatenatedLabels = $this->app->xpath("/app:app/app:list/app:field/@label"); } else { $fieldNames = array(); $keyField = $this->model->getKeyField(); $fieldNames[$keyField] = "{$this->model->package}.{$keyField}"; $fields = $this->model->getFields(); foreach ($fields as $i => $field) { if ($field["reference"] == "") { $fieldNames[$i] = $this->model->package . "." . $field["name"]; } else { $modelInfo = Model::resolvePath($field["reference"]); $fieldNames[$i] = $modelInfo["model"] . "." . $field["referenceValue"]; } } } } foreach ($fieldNames as $i => $fieldName) { $fieldNames[$i] = substr((string) $fieldName, 0, 1) == "." ? $this->redirectedPackage . (string) $fieldName : (string) $fieldName; } if (count($this->fieldNames) > 0) { $fieldNames = $this->fieldNames; } if ($this->apiMode === false) { $this->setupList(); $params["fields"] = $fieldNames; $params["page"] = 0; $params["sort_field"] = array(array("field" => $this->model->database . "." . $this->model->getKeyField(), "type" => "DESC")); $this->table->setParams($params); $return = '<div id="table-wrapper">' . $this->toolbar->render() . $this->table->render() . '</div>'; } else { $params["fields"] = $fieldNames; $params["page"] = 0; $params["sort_field"] = array(array("field" => $this->model->database . "." . $this->model->getKeyField(), "type" => "DESC")); $return = json_encode(SQLDBDataStore::getMulti($params)); } return $return; }
private function getDefaultFieldNames() { $fieldNames = array(); $keyField = $this->model->getKeyField(); $fieldNames[$keyField] = "{$this->model->package}.{$keyField}"; $fields = $this->model->getFields(); foreach ($fields as $i => $field) { if ($field["reference"] == "") { $fieldNames[$i] = $this->model->package . "." . $field["name"]; } else { $modelInfo = Model::resolvePath($field["reference"]); $fieldNames[$i] = $modelInfo["model"] . "." . $field["referenceValue"]; } } return $fieldNames; }