/** * Get options order by * * @param string $view View mode '' or 'filter' * @param JDatabaseQuery|bool $query Set to false to return a string * * @return string order by statement */ protected function getOrderBy($view = '', $query = false) { $params = $this->getParams(); $orderBy = $params->get('notes_order_element'); if ($orderBy == '') { return $query ? $query : ''; } else { $order = FabrikString::safeQuoteName($params->get('join_db_name') . '.' . $orderBy) . ' ' . $params->get('notes_order_dir', 'ASC'); if ($query) { $query->order($order); return $query; } return " ORDER BY " . $order; } }
/** * If repeated element we need to make a joined db table to store repeated data in * * @param object $elementModel element model * @param object $row element item * * @return void */ public function createRepeatElement($elementModel, $row) { if (!$elementModel->isJoin()) { return; } $row->name = str_replace('`', '', $row->name); $listModel = $elementModel->getListModel(); $groupModel = $elementModel->getGroupModel(); $tableName = $this->getRepeatElementTableName($elementModel, $row); // Create db table! $formModel = $elementModel->getForm(); $db = $listModel->getDb(); $desc = $elementModel->getFieldDescription(); $name = $db->quoteName($row->name); $db->setQuery('CREATE TABLE IF NOT EXISTS ' . $db->quoteName($tableName) . ' ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, parent_id INT(11), ' . $name . ' ' . $desc . ', ' . $db->quoteName('params') . ' TEXT );'); $db->execute(); // Remove previous join records if found if ((int) $row->id !== 0) { $jdb = FabrikWorker::getDbo(true); $query = $jdb->getQuery(true); $query->delete('#__{package}_joins')->where('element_id = ' . (int) $row->id); $jdb->setQuery($query); $jdb->execute(); } // Create or update fabrik join if ($groupModel->isJoin()) { $joinFromTable = $groupModel->getJoinModel()->getJoin()->table_join; } else { $joinFromTable = $listModel->getTable()->db_table_name; } $data = array('list_id' => $listModel->getTable()->id, 'element_id' => $row->id, 'join_from_table' => $joinFromTable, 'table_join' => $tableName, 'table_key' => $row->name, 'table_join_key' => 'parent_id', 'join_type' => 'left'); $join = $this->getTable('join'); $join->load(array('element_id' => $data['element_id'])); $opts = new stdClass(); $opts->type = 'repeatElement'; $opts->pk = FabrikString::safeQuoteName($tableName . '.id'); $data['params'] = json_encode($opts); $join->bind($data); $join->store(); $fieldName = $tableName . '___parent_id'; $listModel->addIndex($fieldName, 'parent_fk', 'INDEX', ''); $fields = $listModel->getDBFields($tableName, 'Field'); $field = FArrayHelper::getValue($fields, $row->name, false); switch ($field->BaseType) { case 'VARCHAR': $size = (int) $field->BaseLength < 10 ? $field->BaseLength : 10; break; case 'INT': case 'DATETIME': default: $size = ''; break; } $fieldName = $tableName . '___' . $row->name; $listModel->addIndex($fieldName, 'repeat_el', 'INDEX', $size); }