public static function getInstance() { if (!self::$_instance) { self::$_instance = new self(); } return self::$_instance; }
public final function __construct($step) { $this->step = $step; $this->datas = Datas::getInstance(); // Set current language $this->language = InstallLanguages::getInstance(); if (!$this->datas->language) { die('No language defined'); } $this->language->setLanguage($this->datas->language); $this->init(); }
/** * ONLY FOR DEVELOPMENT PURPOSE */ public function getEntityContents($entity) { $xml = $this->loadEntity($entity); $primary = isset($xml->fields['primary']) && $xml->fields['primary'] ? (string) $xml->fields['primary'] : 'id_' . $entity; $is_multilang = $this->isMultilang($entity); // Check if current table is an association table (if multiple primary keys) $is_association = false; if (strpos($primary, ',') !== false) { $is_association = true; $primary = array_map('trim', explode(',', $primary)); } // Build query $sql = new DbQuery(); $sql->select('a.*'); $sql->from($entity, 'a'); if ($is_multilang) { $sql->select('b.*'); $sql->leftJoin($entity . '_lang', 'b', 'a.' . $primary . ' = b.' . $primary); } if (isset($xml->fields['sql']) && $xml->fields['sql']) { $sql->where((string) $xml->fields['sql']); } if (!$is_association) { $sql->select('a.' . $primary); if (!isset($xml->fields['ordersql']) || !$xml->fields['ordersql']) { $sql->orderBy('a.' . $primary); } } if ($is_multilang && (!isset($xml->fields['ordersql']) || !$xml->fields['ordersql'])) { $sql->orderBy('b.id_lang'); } if (isset($xml->fields['ordersql']) && $xml->fields['ordersql']) { $sql->orderBy((string) $xml->fields['ordersql']); } // Get multilang columns $alias_multilang = array(); if ($is_multilang) { $columns = $this->getColumns($entity); $multilang_columns = $this->getColumns($entity, true); // If some columns from _lang table have same name than original table, rename them (E.g. value in configuration) foreach ($multilang_columns as $c => $is_text) { if (isset($columns[$c])) { $alias = $c . '_alias'; $alias_multilang[$c] = $alias; $sql->select('a.' . $c . ' as ' . $c . ', b.' . $c . ' as ' . $alias); } } } // Get all results $nodes = $nodes_lang = array(); $results = Db::getInstance()->executeS($sql); if (Db::getInstance()->getNumberError()) { $this->setError($this->language->l('SQL error on query <i>%s</i>', $sql)); } else { foreach ($results as $row) { // Store common columns if ($is_association) { $id = $entity; foreach ($primary as $key) { $id .= '_' . $row[$key]; } } else { $id = $this->generateId($entity, $row[$primary], $row, isset($xml->fields['id']) && $xml->fields['id'] ? (string) $xml->fields['id'] : null); } if (!isset($nodes[$id])) { $node = array(); foreach ($xml->fields->field as $field) { $column = (string) $field['name']; if (isset($field['relation'])) { $sql = 'SELECT `id_' . bqSQL($field['relation']) . '` FROM `' . bqSQL(_DB_PREFIX_ . $field['relation']) . '` WHERE `id_' . bqSQL($field['relation']) . '` = ' . (int) $row[$column]; $node[$column] = $this->generateId((string) $field['relation'], Db::getInstance()->getValue($sql)); // A little trick to allow storage of some hard values, like '-1' for tab.id_parent if (!$node[$column] && $row[$column]) { $node[$column] = $row[$column]; } } else { $node[$column] = $row[$column]; } } $nodes[$id] = $node; } // Store multilang columns if ($is_multilang && $row['id_lang']) { $node = array(); foreach ($multilang_columns as $column => $is_text) { $node[$column] = $row[isset($alias_multilang[$column]) ? $alias_multilang[$column] : $column]; } $nodes_lang[$row['id_lang']][$id] = $node; } } } return array('nodes' => $nodes, 'nodes_lang' => $nodes_lang); }
public function __construct() { $this->language = InstallLanguages::getInstance(); }
public function getDocumentationUpgradeLink() { return $this->language->getInformation('documentation_upgrade', true); }
public function onInstall($dropTable) { require_once 'InstallLanguages.php'; return InstallLanguages::onInstall($this, $dropTable); }