示例#1
0
 /**
  * Get the headings for the csv file
  *
  * @return  array    heading labels
  */
 public function getHeadings()
 {
     $input = $this->app->input;
     $w = new FabrikWorker();
     $table = $this->model->getTable();
     $params = $this->model->getParams();
     $headingFormat = $params->get('csvfullname');
     $data = $this->model->getData();
     $g = current($data);
     if (empty($g)) {
         return $g;
     }
     $r = current($g);
     $formModel = $this->model->getFormModel();
     $groups = $formModel->getGroupsHiarachy();
     $h = array();
     if (!is_object($r)) {
         return new stdClass();
     }
     $incRaw = $input->get('incraw', true);
     $incData = $input->get('inctabledata', true);
     $shortKey = FabrikString::shortColName($table->db_primary_key);
     foreach ($r as $heading => $value) {
         $found = false;
         foreach ($groups as $groupModel) {
             $elementModels = $groupModel->getPublishedElements();
             foreach ($elementModels as $elementModel) {
                 $element = $elementModel->getElement();
                 $fullName = $elementModel->getFullName(true, false);
                 if ($fullName == $heading || $fullName . '_raw' == $heading) {
                     $found = true;
                     switch ($headingFormat) {
                         default:
                         case '0':
                             $n = $element->name;
                             break;
                         case '1':
                             $n = $elementModel->getFullName(false, false);
                             break;
                         case '2':
                             $n = $elementModel->getListHeading();
                             break;
                     }
                     /**
                      * $$$ hugh - added next line as special case for a client, do not remove!
                      * (used in conjunction with "Custom QS" option, to allow variable header labels
                      */
                     $n = $w->parseMessageForPlaceHolder($n, array());
                     if ($fullName . '_raw' == $heading) {
                         $n .= '_raw';
                     }
                     if ($incData && JString::substr($n, JString::strlen($n) - 4, JString::strlen($n)) !== '_raw') {
                         if (!in_array($n, $h)) {
                             // Only add heading once
                             $h[] = $n;
                         } else {
                             $h[] = $this->uniqueHeading($n, $h);
                         }
                     }
                     if ($incRaw && JString::substr($n, JString::strlen($n) - 4, strlen($n)) == '_raw') {
                         if (!in_array($n, $h)) {
                             // Only add heading once
                             $h[] = $n;
                         } else {
                             $h[] = $this->uniqueHeading($n, $h);
                         }
                     }
                 }
             }
         }
         if (!$found) {
             if (!(JString::substr($heading, JString::strlen($heading) - 4, JString::strlen($heading)) == '_raw' && !$incRaw)) {
                 // Stop id getting added to tables when exported with full element name key
                 if ($headingFormat != 1 && $heading != $shortKey) {
                     $h[] = $heading;
                 }
             }
         }
     }
     if ($input->get('inccalcs') == 1) {
         array_unshift($h, FText::_('Calculation'));
     }
     $h = array_map(array($this, "quote"), $h);
     return $h;
 }
示例#2
0
 /**
  * Alter the db table's collation
  *
  * @param   FabrikFEModelList $feModel       Front end list model
  * @param   string            $origCollation Original collection name
  * @param   JTable            $row           New collation
  *
  * @since   3.0.7
  *
  * @return boolean
  */
 protected function collation($feModel, $origCollation, $row)
 {
     // Don't attempt to alter new table, or a view, or if we shouldn't alter the table
     if ($row->get('id') == 0 || $feModel->isView() || !$feModel->canAlterFields()) {
         return false;
     }
     $params = new Registry($row->get('params'));
     $newCollation = $params->get('collation');
     if ($newCollation !== $origCollation) {
         $db = $feModel->getDb();
         $item = $feModel->getTable();
         $db->setQuery('ALTER TABLE ' . $item->db_table_name . ' COLLATE  ' . $newCollation);
         $db->execute();
     }
     return true;
 }
示例#3
0
 /**
  * Get search form filters
  *
  * @param   array  &$filters  list filters
  *
  * @return  void
  */
 private function getSearchFormFilters(&$filters)
 {
     $fromFormId = $this->getSearchFormId();
     if (!empty($fromFormId)) {
         $formModel = $this->listModel->getFormModel();
         $db = FabrikWorker::getDbo();
         $lookupKeys = FArrayHelper::getValue($filters, 'key', array());
         if ($fromFormId != $formModel->get('id')) {
             $fromForm = JModelLegacy::getInstance('Form', 'FabrikFEModel');
             $fromForm->setId($fromFormId);
             //$fromFormParams = $fromForm->getParams();
             /**
              * $$$ hugh Added $filter_elements from 'filter_name'
              * which we'll need in the case of $elid not being in $elements for search forms
              */
             $elements = $this->listModel->getElements('id');
             $filter_elements = $this->listModel->getElements('filtername');
             $tableName = $db->qn($this->listModel->getTable()->db_table_name);
             $searchFilters = $this->app->getUserState('com_' . $this->package . '.searchform.form' . $fromFormId . '.filters');
             for ($i = 0; $i < count($searchFilters['key']); $i++) {
                 $eval = FABRIKFILTER_TEXT;
                 $found = false;
                 $key = $searchFilters['key'][$i];
                 $elid = $searchFilters['elementid'][$i];
                 if (array_key_exists($elid, $elements)) {
                     $found = true;
                     $elementModel = $elements[$elid];
                 } else {
                     // If sent from a search form - the table name will be blank
                     $key = explode('.', $key);
                     $key = $tableName . '.' . array_pop($key);
                     if (array_key_exists($key, $filter_elements)) {
                         $found = true;
                         $elementModel = $filter_elements["{$key}"];
                     } else {
                         // $$$ rob - I've not actually tested this code
                         $joins = $this->listModel->getJoins();
                         foreach ($joins as $join) {
                             $key = $db->qn($join->table_join) . '.' . array_pop(explode('.', $key));
                             if (array_key_exists($key, $filter_elements)) {
                                 $found = true;
                                 $elementModel = $filter_elements[$key];
                                 break;
                             }
                         }
                     }
                 }
                 if (!isset($elementModel) || !is_a($elementModel, 'plgFabrik_Element') || $found === false) {
                     // Could be looking for an element which exists in a join
                     continue;
                 }
                 $index = array_key_exists('key', $filters) ? array_search($key, $lookupKeys) : false;
                 $element = $elementModel->getElement();
                 $elParams = $elementModel->getParams();
                 $grouped = array_key_exists($i, $searchFilters['grouped_to_previous']) ? $searchFilters['grouped_to_previous'][$i] : 0;
                 $join = $searchFilters['join'][$i];
                 if ($index === false) {
                     $filters['value'][] = $searchFilters['value'][$i];
                     $filters['condition'][] = $elementModel->getDefaultFilterCondition();
                     $filters['join'][] = $join;
                     $filters['no-filter-setup'][] = $element->filter_type == '' ? 1 : 0;
                     $filters['hidden'][] = $element->filter_type == '' ? 1 : 0;
                     $filters['key'][] = $key;
                     $filters['search_type'][] = 'search';
                     $filters['match'][] = $element->filter_exact_match;
                     $filters['full_words_only'][] = $elParams->get('full_words_only');
                     $filters['eval'][] = $eval;
                     $filters['required'][] = $elParams->get('filter_required');
                     $filters['access'][] = $elParams->get('filter_access');
                     $filters['grouped_to_previous'][] = $grouped;
                     $filters['label'][] = $elementModel->getListHeading();
                     $filters['raw'][] = false;
                 } else {
                     unset($lookupKeys[$index]);
                     $filters['value'][$index] = $searchFilters['value'][$i];
                     $filters['condition'][$index] = $elementModel->getDefaultFilterCondition();
                     $filters['join'][$index] = $join;
                     $filters['no-filter-setup'][$index] = $element->filter_type == '' ? 1 : 0;
                     $filters['hidden'][$index] = $element->filter_type == '' ? 1 : 0;
                     $filters['key'][$index] = $key;
                     $filters['search_type'][$index] = 'search';
                     $filters['match'][$index] = $element->filter_exact_match;
                     $filters['full_words_only'][$index] = $elParams->get('full_words_only');
                     $filters['eval'][$index] = $eval;
                     $filters['required'][$index] = $elParams->get('filter_required');
                     $filters['access'][$index] = $elParams->get('filter_access');
                     $filters['grouped_to_previous'][$index] = $grouped;
                     $filters['label'][$index] = $elementModel->getListHeading();
                     $filters['raw'][$index] = false;
                 }
                 $filters['elementid'][] = $element->id;
             }
         }
         /**
          * unset the search form id so we wont reuse the search data
          * until a new search is performed
          */
         $this->setSearchFormId(null);
     }
 }