예제 #1
0
 public static function getInstance()
 {
     if (!self::$_instance) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
예제 #2
0
 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();
 }
예제 #3
0
    /**
     * 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);
    }
예제 #4
0
 public function __construct()
 {
     $this->language = InstallLanguages::getInstance();
 }
예제 #5
0
 public function getDocumentationUpgradeLink()
 {
     return $this->language->getInformation('documentation_upgrade', true);
 }
예제 #6
0
 public function onInstall($dropTable)
 {
     require_once 'InstallLanguages.php';
     return InstallLanguages::onInstall($this, $dropTable);
 }