/** * 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; }
/** * 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; }
/** * 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); } }