Exemplo n.º 1
0
 /**
  * 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;
     }
 }
Exemplo n.º 2
0
 /**
  * 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);
 }