Example #1
0
 public function render()
 {
     //print count($this->elements)."<br/>";
     $num_elements = count($this->elements);
     if (!$this->reArranged) {
         $elements_per_col = ceil(count($this->elements) / $this->num_columns);
         for ($j = 0, $k = 0; $j < $this->num_columns; $j++) {
             for ($i = 0; $i < $elements_per_col; $i++, $k++) {
                 if ($k < $num_elements) {
                     $this->elements[$k]->parent = null;
                     parent::add($this->elements[$k], 0, $j);
                 } else {
                     break;
                 }
             }
         }
         $this->reArranged = true;
     }
     return parent::render();
 }
 /**
  * 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;
 }