Beispiel #1
0
 public function check_lang()
 {
     $result = array('title' => lang('ionize_title_check_lang'), 'status' => 'success', 'message' => lang('ionize_message_check_ok'));
     // Get the languages : DB + config/language.php
     $db_languages = Settings::get_languages();
     $config_available_languages = config_item('available_languages');
     // Check differences between DB and config/language.php file
     $result_status = TRUE;
     foreach ($db_languages as $lang) {
         if (!array_key_exists($lang['lang'], $config_available_languages)) {
             $result_status = FALSE;
         }
     }
     // Correct if needed
     if ($result_status == FALSE) {
         // Default language
         $def_lang = '';
         // Available languages array
         $available_languages = array();
         foreach ($db_languages as $l) {
             // Set default lang code
             if ($l['def'] == '1') {
                 $def_lang = $l['lang'];
             }
             $available_languages[$l['lang']] = $l['name'];
         }
         $this->config_model->change('language.php', 'default_lang_code', $def_lang);
         if (!empty($available_languages)) {
             $this->config_model->change('language.php', 'available_languages', $available_languages);
         }
         $result['message'] = lang('ionize_message_check_corrected');
     }
     $this->xhr_output($result);
 }
 /**
  * Get the current extend fields and their values for one parent element
  * Used by backend, as all the languages data are also got
  *
  * @param	string	parent name
  * @param	int		parent ID
  *
  */
 function get_element_extend_fields($parent, $id_parent = null)
 {
     $data = array();
     $extend_fields = array();
     // Element extend fields
     $where = array('parent' => $parent);
     $extend_fields = $this->get_list($where);
     // Current element extend field
     $this->db->where(array('extend_field.parent' => $parent, $this->elements_table . '.id_parent' => $id_parent));
     $this->db->join($this->elements_table, $this->elements_table . '.id_' . $this->table . ' = ' . $this->table . '.id_' . $this->table, 'inner');
     $query = $this->db->get($this->table);
     $result = array();
     if ($query->num_rows() > 0) {
         $result = $query->result_array();
     }
     $langs = Settings::get_languages();
     $element_fields = $this->db->list_fields($this->elements_table);
     foreach ($extend_fields as $k => &$extend_field) {
         // A not tranlated extend field...
         if ($extend_field['translated'] != '1') {
             // fill the base data with empty values
             $extend_field = array_merge(array_fill_keys($element_fields, ''), $extend_field);
             foreach ($result as $row) {
                 if ($row['id_extend_field'] == $extend_field['id_extend_field']) {
                     $extend_field = array_merge($extend_field, $row);
                 }
             }
         } else {
             foreach ($langs as $language) {
                 // Lang code
                 $lang = $language['lang'];
                 // Feed lang key with blank array
                 $extend_field[$lang] = array();
                 $extend_field[$lang]['content'] = '';
                 // Feeding of template languages elements
                 foreach ($result as $row) {
                     if ($row['id_extend_field'] == $extend_field['id_extend_field'] && $row['lang'] == $lang) {
                         $extend_field[$lang] = $row;
                     }
                 }
             }
         }
     }
     return $extend_fields;
 }
 /**
  * Returns the element definition list
  * Used to admin elements (elements_definition_list and element_definition views)
  *
  * XHR call
  *
  */
 function get_element_definition_list()
 {
     $elements = $this->element_definition_model->get_list(array('order_by' => 'ordering ASC'));
     $elements_lang = $this->element_definition_model->get_lang();
     // Elements
     foreach ($elements as &$element) {
         // Translated elements.
         $langs = array_values(array_filter($elements_lang, create_function('$row', 'return $row["id_element_definition"] == "' . $element['id_element_definition'] . '";')));
         foreach (Settings::get_languages() as $lang) {
             $element[$lang['lang']] = array_pop(array_filter($langs, create_function('$row', 'return $row["lang"] == "' . $lang['lang'] . '";')));
         }
         // Element's fields
         $element['fields'] = $this->extend_field_model->get_list(array('id_element_definition' => $element['id_element_definition']));
         // Name of the field type ("checkbox", "input", ...)
         foreach ($element['fields'] as &$field) {
             $field['type_name'] = self::$type_names[$field['type']];
         }
     }
     $this->template['elements'] = $elements;
     $this->output('element_definition_list');
 }
Beispiel #4
0
 /**
  * Returns the element definition list
  * Used to admin elements (elements_definition_list and element_definition views)
  *
  * XHR call
  *
  */
 function get_element_definition_list()
 {
     $elements = $this->element_definition_model->get_lang_list(array('order_by' => 'ordering ASC'), Settings::get_lang('default'));
     $elements_lang = $this->element_definition_model->get_all('element_definition_lang');
     // Elements
     foreach ($elements as &$element) {
         $element['languages'] = array();
         // Translated elements.
         foreach (Settings::get_languages() as $lang) {
             $element['languages'][$lang['lang']] = array('title' => '');
             foreach ($elements_lang as $ld) {
                 if ($ld['id_element_definition'] == $element['id_element_definition'] && $ld['lang'] == $lang['lang']) {
                     $element['languages'][$lang['lang']] = $ld;
                 }
             }
         }
         // Element's fields
         $element['fields'] = $this->extend_field_model->get_list(array('parent' => 'element', 'id_parent' => $element['id_element_definition']), Settings::get_lang('default'));
     }
     $this->template['elements'] = $elements;
     $this->output('element/definition/list');
 }
Beispiel #5
0
 public function save($inputs)
 {
     // Arrays of data which will be saved
     $data = $data_lang = array();
     // Fields of the author table
     $fields = $this->list_fields();
     // Set the data to the posted value.
     foreach ($fields as $field) {
         $data[$field] = $inputs[$field];
     }
     $lang_fields = $this->list_fields($this->_author_lang_table);
     foreach (Settings::get_languages() as $language) {
         foreach ($lang_fields as $field) {
             if ($field != $this->pk_name && $field != 'lang') {
                 $input_field = $field . '_' . $language['lang'];
                 if ($inputs[$input_field] !== FALSE) {
                     $data_lang[$language['lang']][$field] = $inputs[$input_field];
                 }
             }
         }
     }
     return parent::save($data, $data_lang);
 }
 /**
  * Gets already translated items from language files
  *
  * @return	array	Array of already translated terms
  *
  */
 function _get_theme_translations()
 {
     $items = array();
     $this->load->helper('file');
     // Theme folder
     $path = FCPATH . 'themes/' . Settings::get('theme');
     // Read the template language directory
     foreach (Settings::get_languages() as $language) {
         $lang_files = array();
         $lang_code = $language['lang'];
         $items[$lang_code] = array();
         // Translation file name. Named [theme_name]_lang.php
         $file = $path . '/language/' . $lang_code . '/' . Settings::get('theme') . '_lang.php';
         // Include the file if it exists
         if (file_exists($file)) {
             include $file;
             if (isset($lang)) {
                 $items[$lang_code] = $lang;
                 unset($lang);
             }
         }
     }
     return $items;
 }
Beispiel #7
0
 /**
  * Saves settings according to the passed settings tables
  *
  * @param	array	Settings keys array
  * @param	array	Lang Settings keys array
  *
  */
 function _save_settings($settings = array(), $lang_settings = array())
 {
     /* 
      * Save the lang settings first 
      */
     if (!empty($lang_settings)) {
         foreach (Settings::get_languages() as $language) {
             foreach ($lang_settings as $setting) {
                 $data = array('name' => $setting, 'content' => ($content = $this->input->post($setting . '_' . $language['lang'])) ? $content : '', 'lang' => $language['lang']);
                 $this->settings_model->save_setting($data);
             }
         }
     }
     /*
      * Saves settings
      */
     foreach ($settings as $setting) {
         $content = '';
         if ($this->input->post($setting)) {
             // Avoid or not security XSS filter
             if (!in_array($setting, $this->no_xss_filter)) {
                 $content = $this->input->post($setting);
             } else {
                 $content = stripslashes($_REQUEST[$setting]);
             }
         }
         $data = array('name' => $setting, 'content' => $content);
         $this->settings_model->save_setting($data);
     }
 }
 /**
  * Add lang content to each article in the article list.
  * This function is used for backend
  *
  * @param	Array	by ref. Array of articles
  *
  */
 function add_lang_data(&$articles = array())
 {
     if (!empty($articles)) {
         // Add lang content to each article
         $articles_lang = $this->get_lang();
         foreach ($articles as &$article) {
             $article['langs'] = array();
             // $langs = array_values(array_filter($articles_lang, create_function('$row','return $row["id_article"] == "'. $article['id_article'] .'";')));
             $langs = array();
             foreach ($articles_lang as $al) {
                 if ($al['id_article'] == $article['id_article']) {
                     $langs[] = $al;
                 }
             }
             foreach (Settings::get_languages() as $lang) {
                 //				$article['langs'][$lang['lang']] = array_pop(array_filter($langs, create_function('$row','return $row["lang"] == "'. $lang['lang'] .'";')));
                 foreach ($langs as $l) {
                     if ($l['lang'] == $lang['lang']) {
                         $article['langs'][$lang['lang']] = $l;
                     }
                 }
             }
         }
     }
 }
Beispiel #9
0
 /**
  * Add item windows
  * Purpose : Create one item (backend)
  * At this state, the item isn't added
  *
  */
 public function add_item()
 {
     $id_definition = $this->input->post('id_item_definition');
     $item_definition = $this->item_definition_model->get(array('id_item_definition' => $id_definition), Settings::get_lang('default'));
     // Element's fields
     $fields = $this->extend_field_model->get_lang_list(array('parent' => 'item', 'id_parent' => $id_definition, 'order_by' => 'ordering ASC'), Settings::get_lang('default'));
     $fields_lang = $this->extend_field_model->get_all('extend_field_lang');
     foreach ($fields as &$field) {
         foreach (Settings::get_languages() as $lang) {
             $langs = array_values(array_filter($fields_lang, create_function('$row', 'return $row["id_extend_field"] == "' . $field['id_extend_field'] . '";')));
             $field['langs'][$lang['lang']] = array_pop(array_filter($langs, create_function('$row', 'return $row["lang"] == "' . $lang['lang'] . '";')));
         }
     }
     $this->template['item_definition'] = $item_definition;
     $this->template['fields'] = $fields;
     $lang_fields = array_values(array_filter($fields, create_function('$row', 'return $row["translated"] == 1;')));
     $this->template['lang_fields'] = $lang_fields;
     // Check for langs fields different from
     $has_lang_fields = FALSE;
     foreach ($lang_fields as $lf) {
         if ($lf['type'] != 8) {
             $has_lang_fields = TRUE;
         }
     }
     $this->template['has_lang_fields'] = $has_lang_fields;
     // Check for Media type
     $has_media_fields = FALSE;
     foreach ($fields as $f) {
         if ($f['type'] == 8) {
             $has_media_fields = TRUE;
         }
     }
     $this->template['has_media_fields'] = $has_media_fields;
     $this->output('item/instance/edit');
 }
Beispiel #10
0
 /**
  * Clean unused language depending settings -- Kochin
  *
  * When a language is deleted, language depending settings are left untouched.
  * This function cleans up any unused language depending settings.
  *
  * @return	Int	number of rows deleted
  */
 function clean_lang_settings()
 {
     // Get the existing languages
     $languages = Settings::get_languages();
     $lang_codes = array();
     foreach ($languages as $lang) {
         $lang_codes[] = $lang['lang'];
     }
     // Execute the cleaning request
     $nb_affected_rows = 0;
     if (!empty($lang_codes)) {
         $this->{$this->db_group}->where("NOT(lang IS NULL OR lang='')")->where_not_in('lang', $lang_codes);
         $nb_affected_rows = $this->{$this->db_group}->delete($this->table);
     }
     return $nb_affected_rows;
 }
Beispiel #11
0
 /**
  * Adds info about each media
  *
  * @param $medias
  *
  * @return mixed
  */
 private function _add_lang_data_to_media_list($medias)
 {
     if (!empty($medias)) {
         $media_ids = array();
         foreach ($medias as $media) {
             $media_ids[] = $media['id_media'];
         }
         // Fields of media_lang
         $media_lang_fields = $this->list_fields('media_lang');
         // Get media lang data
         $this->{$this->db_group}->where_in('id_media', $media_ids);
         $query = $this->{$this->db_group}->get('media_lang');
         $medias_lang = array();
         if ($query->num_rows() > 0) {
             $medias_lang = $query->result_array();
         }
         // Enrich each media
         foreach ($medias as &$media) {
             $media['alt_missing'] = FALSE;
             $media['is_used'] = TRUE;
             $media['has_source'] = empty($media['provider']) ? file_exists(DOCPATH . $media['path']) : TRUE;
             $media['lang'] = array();
             // Is linked to page or article
             if (empty($media['page_paths']) && empty($media['article_paths'])) {
                 $media['is_used'] = FALSE;
             }
             foreach (Settings::get_languages() as $lang) {
                 $media['lang'][$lang['lang']] = array_fill_keys($media_lang_fields, '');
                 $media['lang'][$lang['lang']]['id_media'] = $media['id_media'];
             }
             foreach ($medias_lang as $media_lang) {
                 if ($media_lang['id_media'] == $media['id_media']) {
                     $media['lang'][$media_lang['lang']] = $media_lang;
                 }
             }
             // Alt missing
             foreach (Settings::get_languages() as $lang) {
                 if (empty($media['lang'][$lang['lang']]['alt'])) {
                     $media['alt_missing'] = TRUE;
                 }
             }
         }
     }
     return $medias;
 }
Beispiel #12
0
 /**
  * Feed the template array with blank data for each field in language table
  *
  * @param	array	By ref, the template array
  *
  */
 function feed_blank_lang_template(&$template = FALSE)
 {
     if ($template == FALSE) {
         $template = array();
     }
     $fields = $this->{$this->db_group}->list_fields($this->lang_table);
     $fields_data = $this->field_data($this->lang_table);
     foreach (Settings::get_languages() as $language) {
         $lang = $language['lang'];
         foreach ($fields as $field) {
             $field_data = array_values(array_filter($fields_data, create_function('$row', 'return $row["Field"] == "' . $field . '";')));
             $field_data = isset($field_data[0]) ? $field_data[0] : false;
             $template[$lang][$field] = isset($field_data['Default']) ? $field_data['Default'] : '';
         }
     }
     return $template;
 }
Beispiel #13
0
    function get_fields_from_parent($parent, $id_parent, $lang, $id_definition = FALSE, $id_element = FALSE)
    {
        // Loads the element model if it isn't loaded
        $CI =& get_instance();
        if (!isset($CI->element_definition_model)) {
            $CI->load->model('element_definition_model');
        }
        if (!isset($CI->extend_field_model)) {
            $CI->load->model('extend_field_model');
        }
        // Get definitions
        $cond = array();
        if ($id_definition != FALSE) {
            $cond['element_definition.id_element_definition'] = $id_definition;
        }
        $definitions = $CI->element_definition_model->get_lang_list($cond, $lang);
        // Get definitions fields
        $cond = array('id_element_definition <>' => '0', 'order_by' => 'ordering ASC');
        $definitions_fields = $CI->extend_field_model->get_lang_list($cond, $lang);
        // Get Elements
        $cond = array('order_by' => 'element.ordering ASC');
        if ($id_element) {
            $cond['id_element'] = $id_element;
        } else {
            $cond['parent'] = $parent;
            $cond['id_parent'] = $id_parent;
        }
        $elements = $this->get_elements($cond);
        // Get fields instances
        $where = ' where extend_fields.id_element in (
					select id_element from element
					where parent= \'' . $parent . '\'
					and id_parent= \'' . $id_parent . '\'
				)';
        if ($id_element) {
            $where = ' where extend_fields.id_element = \'' . $id_element . '\'';
        }
        $sql = 'select extend_field.*, extend_fields.*
				from extend_fields
				join extend_field on extend_field.id_extend_field = extend_fields.id_extend_field' . $where;
        $query = $this->{$this->db_group}->query($sql);
        $result = array();
        if ($query->num_rows() > 0) {
            $result = $query->result_array();
        }
        $query->free_result();
        $langs = Settings::get_languages();
        $extend_field_fields = $this->{$this->db_group}->list_fields('extend_field');
        $extend_fields_fields = $this->{$this->db_group}->list_fields('extend_fields');
        foreach ($definitions as $key => &$definition) {
            $definition['elements'] = array();
            foreach ($elements as $element) {
                // The element match a definition
                if ($element['id_element_definition'] == $definition['id_element_definition']) {
                    $element['fields'] = array();
                    foreach ($definitions_fields as $df) {
                        if ($df['id_element_definition'] == $definition['id_element_definition']) {
                            $el = array_merge(array_fill_keys($extend_fields_fields, ''), $df);
                            foreach ($result as $row) {
                                if ($row['id_element'] == $element['id_element'] && $row['id_extend_field'] == $df['id_extend_field']) {
                                    $el = array_merge($el, $row);
                                    if ($df['translated'] == '1') {
                                        foreach ($langs as $language) {
                                            $lang = $language['lang'];
                                            if ($row['lang'] == $lang) {
                                                $el[$lang] = $row;
                                            }
                                        }
                                    }
                                }
                            }
                            $element['fields'][$df['name']] = $el;
                        }
                    }
                    $definition['elements'][] = $element;
                }
            }
            if (empty($definition['elements'])) {
                unset($definitions[$key]);
            }
        }
        if (count($definitions) == 1) {
            $definitions = array_shift($definitions);
        }
        return $definitions;
    }
Beispiel #14
0
    /**
     * Get item definitions with nested fields
     *
     * @param $id_item_definition
     * @param $lang
     *
     * @return array
     */
    public function get_list_from_definition($id_item_definition, $lang)
    {
        self::$ci->load->model('item_definition_model');
        self::$ci->load->model('extend_field_model');
        // Definitions Fields : Extend Field Types
        $definitions_fields = self::$ci->extend_field_model->get_lang_list(array('parent' => 'item', 'id_parent' => $id_item_definition), $lang);
        // Items Instances
        $items = $this->get_lang_list(array('id_item_definition' => $id_item_definition, 'order_by' => 'ordering ASC'), $lang);
        // Fields
        $sql = "\r\n\t\t\tSELECT\r\n\t\t\t\textend_fields.*\r\n\t\t\tFROM\r\n\t\t\t\textend_fields\r\n\t\t\tWHERE\r\n\t\t\t\textend_fields.parent = 'item' AND\r\n \t\t\t\textend_fields.id_parent in (\r\n\t\t\t\t\tSELECT id_item from item\r\n\t\t\t\t\tWHERE id_item_definition= " . $id_item_definition . '
				)
			';
        $query = $this->{$this->db_group}->query($sql);
        $fields = array();
        if ($query->num_rows() > 0) {
            $fields = $query->result_array();
        }
        $query->free_result();
        // Extend Fields DB fields
        $extend_fields_fields = $this->{$this->db_group}->list_fields('extend_fields');
        // Languages
        $langs = Settings::get_languages();
        // Feed each item with its fields
        foreach ($items as &$item) {
            $item['fields'] = array();
            foreach ($definitions_fields as $df) {
                // Create one empty field for each definition extend field, to have data, even empty
                $el = array_merge(array_fill_keys($extend_fields_fields, NULL), $df);
                $el['lang_data'] = array();
                foreach ($fields as $row) {
                    if ($row['id_parent'] == $item['id_item'] && $row['id_extend_field'] == $df['id_extend_field']) {
                        if ($df['translated'] == '1') {
                            foreach ($langs as $language) {
                                $lang_code = $language['lang'];
                                if ($row['lang'] == $lang_code) {
                                    if ($lang_code == $lang) {
                                        $el = array_merge($el, $row);
                                    }
                                    $el['lang_data'][$lang_code] = $row;
                                }
                            }
                        } else {
                            $el = array_merge($el, $row);
                            $el['data'] = $row;
                        }
                    }
                }
                $item['fields'][$df['name']] = $el;
            }
        }
        return $items;
    }
 /**
  * Check if all langs defined in DB are set in the config file
  *
  */
 function check_lang()
 {
     $result = array('title' => lang('ionize_title_check_lang'), 'result_status' => 'success', 'result_text' => lang('ionize_message_check_ok'));
     // Get the languages : DB + config/language.php
     $db_languages = Settings::get_languages();
     $config_languages = config_item('lang_uri_abbr');
     // Check differences between DB and config/language.php file
     $result_status = TRUE;
     foreach ($db_languages as $lang) {
         if (!array_key_exists($lang['lang'], $config_languages)) {
             $result_status = FALSE;
         }
     }
     // Correct if needed
     if ($result_status == FALSE) {
         // Default language
         $def_lang = '';
         // Available languages array
         $lang_uri_abbr = array();
         foreach ($db_languages as $l) {
             // Set default lang code
             if ($l['def'] == '1') {
                 $def_lang = $l['lang'];
             }
             $lang_uri_abbr[$l['lang']] = $l['name'];
         }
         $this->config_model->change('language.php', 'language_abbr', $def_lang);
         if (!empty($lang_uri_abbr)) {
             $this->config_model->change('language.php', 'lang_uri_abbr', $lang_uri_abbr);
         }
         $result['result_text'] = lang('ionize_message_check_corrected');
     }
     // Result view
     $view = $this->load->view('system_check_result', $result, TRUE);
     $this->callback = array(array('fn' => 'ION.appendDomElement', 'args' => array('system_check_report', $view)), array('fn' => 'ION.JSON', 'args' => array('system_check/check_page_level')));
     $this->response();
 }
Beispiel #16
0
 /**
  * Updates all the existing languages
  *
  */
 function update()
 {
     foreach (Settings::get_languages() as $lang) {
         // Update existing languages
         $data = array('lang' => $this->input->post('lang_' . $lang['lang']), 'name' => $this->input->post('name_' . $lang['lang']), 'online' => $this->input->post('online_' . $lang['lang']), 'direction' => $this->input->post('direction_' . $lang['lang']));
         $this->input->post('default_lang') == $lang['lang'] ? $data['def'] = '1' : ($data['def'] = '0');
         if ($lang['lang'] != $data['lang'] && $this->lang_model->exists(array('lang' => $data['lang']))) {
             $this->error(lang('ionize_message_lang_code_already_exists'));
         }
         // If the default lang is different from the current one, pages need to be checked
         // Update the lang
         $this->lang_model->update($lang['lang'], $data);
         // If the lang code changed, update all the pages and articles content translations
         if ($lang['lang'] != $data['lang']) {
             $tables = array('article', 'page', 'media', 'category');
             $this->lang_model->update_lang_tables($tables, $from = $lang['lang'], $to = $data['lang']);
         }
     }
     // Update the language config file
     if (false == $this->_update_config_file()) {
         $this->error(lang('ionize_message_lang_file_not_saved'));
     }
     // UI update panels
     $this->_reload_panel();
     $this->success(lang('ionize_message_lang_updated'));
 }
Beispiel #17
0
 /**
  * Prepare data before saving
  * 
  */
 function _prepare_data()
 {
     $this->data = $this->input->post();
     // Some safe !
     $this->data['name'] = url_title($this->data['name']);
     $this->data['translated'] = $this->input->post('translated');
     // Lang data
     $this->lang_data = array();
     $fields = $this->db->list_fields('extend_field_lang');
     foreach (Settings::get_languages() as $language) {
         foreach ($fields as $field) {
             if ($this->input->post($field . '_' . $language['lang']) !== false) {
                 $content = $this->input->post($field . '_' . $language['lang']);
                 $this->lang_data[$language['lang']][$field] = $content;
             }
         }
     }
 }
Beispiel #18
0
 /** 
  * Prepare data before saving
  *
  */
 private function _prepare_data($xhr = FALSE)
 {
     // Standard fields
     $fields = $this->db->list_fields('category');
     // Set the data to the posted value.
     foreach ($fields as $field) {
         $this->data[$field] = $this->input->post($field);
     }
     // Some safe !
     $this->data['name'] = url_title($this->data['name']);
     // Lang data
     $this->lang_data = array();
     $fields = $this->db->list_fields('category_lang');
     foreach (Settings::get_languages() as $language) {
         foreach ($fields as $field) {
             if ($this->input->post($field . '_' . $language['lang']) !== FALSE) {
                 $this->lang_data[$language['lang']][$field] = $this->input->post($field . '_' . $language['lang']);
             }
         }
     }
 }
Beispiel #19
0
 /**
  * Cleans one data
  *
  * @param      $data		The data array to clean
  * @param bool $table		Reference table. $this->table if not set.
  *
  * @return array
  */
 public function clean_data_lang($data, $table = FALSE)
 {
     $table = $table !== FALSE ? $table : $this->lang_table;
     $fields = $this->{$this->db_group}->list_fields($table);
     $cleaned_data = array();
     foreach (Settings::get_languages() as $language) {
         $lang = $language['lang'];
         // Was done before : Prepare in controller or model => do not alter
         if (isset($data[$lang])) {
             $cleaned_data[$lang] = $data[$lang];
         } else {
             $cleaned_data[$lang] = array();
             foreach ($fields as $field) {
                 if (isset($data[$field . '_' . $lang])) {
                     $cleaned_data[$lang][$field] = $data[$field . '_' . $lang];
                 }
             }
         }
     }
     return $cleaned_data;
 }
Beispiel #20
0
 /**
  * Standalone language tag
  *
  * @param 	FTL_Binding $tag
  *
  * @return 	string
  *
  * @usage	<ion:language>
  * 				<ion:code />
  * 				<ion:name />
  * 				<ion:url />
  * 				<ion:is_default />
  * 				<ion:is_active />
  * 			</ion:language>
  */
 public static function tag_language(FTL_Binding $tag)
 {
     if (is_null(self::$_current_language)) {
         $page = self::registry('page');
         foreach (Settings::get_languages() as $language) {
             if ($language['lang'] == Settings::get_lang()) {
                 $language['id'] = $language['lang'];
                 $language['absolute_url'] = $page['absolute_urls'][$language['lang']];
                 self::$_current_language = $language;
                 break;
             }
         }
     }
     $tag->set('language', self::$_current_language);
     return $tag->expand();
 }
Beispiel #21
0
 /** 
  * Prepare data before saving
  * 
  */
 function _prepare_data()
 {
     // Standard fields
     $fields = $this->db->list_fields('extend_field');
     // Set the data to the posted value.
     foreach ($fields as $field) {
         $this->data[$field] = $this->input->post($field);
     }
     // Some safe !
     $this->data['name'] = url_title($this->data['name']);
     // Set the parent type
     $this->data['parent'] = 'element';
     // Lang data
     $this->lang_data = array();
     $fields = $this->db->list_fields('extend_field_lang');
     foreach (Settings::get_languages() as $language) {
         foreach ($fields as $field) {
             if ($this->input->post($field . '_' . $language['lang']) !== false) {
                 $content = $this->input->post($field . '_' . $language['lang']);
                 $this->lang_data[$language['lang']][$field] = $content;
             }
         }
     }
 }
Beispiel #22
0
 /**
  * Returns all the URLs sent for this element
  *
  * @param		Boolean		$fill_empty_lang    Should the empty lang index be filled with '' ?
  * @return		Array		                    Multidimensional array of URLs
  *							                    ex : $url['en'] = 'my-element-url'
  */
 protected function _get_urls($fill_empty_lang = FALSE)
 {
     $urls = array();
     foreach (Settings::get_languages() as $l) {
         // If lang URL exists, use it
         if ($this->input->post('url_' . $l['lang']) !== '') {
             $urls[$l['lang']] = url_title(convert_accented_characters($this->input->post('url_' . $l['lang'])));
         } else {
             // Try to use the lang title
             if ($this->input->post('title_' . $l['lang']) !== '') {
                 $urls[$l['lang']] = url_title(convert_accented_characters($this->input->post('title_' . $l['lang'])));
             } else {
                 if ($fill_empty_lang === TRUE) {
                     $urls[$l['lang']] = '';
                 }
             }
         }
     }
     $default_lang_url = $urls[Settings::get_lang('default')];
     foreach ($urls as $lang => $url) {
         if ($url == '') {
             $urls[$lang] = $default_lang_url;
         }
     }
     return $urls;
 }
Beispiel #23
0
 /**
  * @param $data
  * @param $tags
  *
  */
 private function add_ID3_to_data($data, $tags)
 {
     // Displayed datas
     $data['copyright'] = $tags['artist'];
     $data['date'] = date('Y.m.d H:m:s', strtotime($tags['year']));
     // Title
     foreach (Settings::get_languages() as $lang) {
         $data[$lang['lang']]['title'] = $tags['title'];
         $data[$lang['lang']]['alt'] = $data[$lang['lang']]['description'] = $tags['artist'] . ' - ' . $tags['album'] . ' : ' . $tags['title'];
     }
     return $data;
 }
</div> <!-- /sidecolumn -->


<!-- Main Column -->
<div id="maincolumn">

	<h2 class="main languages" id="main-title"><?php 
echo lang('ionize_title_language');
?>
</h2>


	<!-- No languages -->
	<?php 
if (!($languages = Settings::get_languages())) {
    ?>

		<p><?php 
    echo lang('ionize_message_no_languages');
    ?>
</p>

	<!-- Existing languages -->
	<?php 
} else {
    ?>

		<form name="existingLangForm" id="existingLangForm" method="post" action="<?php 
    echo admin_url();
    ?>
Beispiel #25
0

<ul id="articleList<?php 
echo $id_page;
?>
" class="sortable-container">

<?php 
$nbLang = count(Settings::get_languages());
$flag_width = 25 * $nbLang;
$select_views_class = is_null($all_article_types) ? 'w180' : 'w110';
$select_types_class = is_null($all_article_views) ? 'w180' : 'w80';
?>

<?php 
foreach ($articles as $article) {
    ?>

	<?php 
    $title = $article['title'] != '' ? $article['title'] : $article['name'];
    $rel = $article['id_page'] . '.' . $article['id_article'];
    $flat_rel = $article['id_page'] . 'x' . $article['id_article'];
    $status = !$article['online_in_page'] ? 'offline' : 'online';
    // Content for each existing language
    $content_html = '';
    // Array of status
    $content = array();
    foreach ($article['languages'] as $lang_content) {
        if (!empty($lang_content['content'])) {
            $content[] = '<img class="left pl5 pt3" src="' . admin_style_url() . 'images/world_flags/flag_' . $lang_content['lang'] . '.gif" />';
        }
Beispiel #26
0
 /**
  * Re-Order "Settings::get_languages()" by default translation language code
  *
  * @return array
  */
 function _order_languages_by_default()
 {
     $languages = array();
     $i = 1;
     foreach (Settings::get_languages() as $key => $lang) {
         if ($lang['lang'] == $this->default_lang_code) {
             $languages[0] = $lang;
         } else {
             $languages[$i++] = $lang;
         }
     }
     ksort($languages);
     return $languages;
 }
Beispiel #27
0
 /**
  * Inserts / Update a media into the media table.
  * Updates the media if the media complete path already exists
  *
  * @param      $path		Complete relative path to the medium, including file name, including the "files" folder
  * @param null $provider
  *
  * @return bool				TRUE if succeed, FALSE if errors
  */
 public function insert_media($path, $provider = NULL)
 {
     if ($path) {
         // If no '/' in the path...
         if (strpos($path, '/') === FALSE) {
             $file_name = $path;
             $base_path = '';
         } else {
             $file_name = substr(strrchr($path, '/'), 1);
             $base_path = str_replace($file_name, '', $path);
         }
         $type = $this->get_type($file_name, $provider);
         $data = array('type' => $type, 'path' => $path, 'file_name' => $file_name, 'base_path' => $base_path, 'provider' => !is_null($provider) ? $provider : '');
         // Update if exists
         $is_new = FALSE;
         $query = $this->get_where(array('path' => $path));
         if ($query->num_rows() > 0) {
             $medium = $query->row_array();
             $this->{$this->db_group}->where('path', $path);
             $this->{$this->db_group}->update($this->table, $data);
             $id = $medium['id_media'];
         } else {
             $is_new = TRUE;
             $this->{$this->db_group}->insert($this->table, $data);
             $id = $this->{$this->db_group}->insert_id();
         }
         // Tag ID3 if MP3
         if ($type == 'music' && $this->is($path, 'mp3') && $is_new) {
             $data['id_media'] = $id;
             // Displayed datas
             $tags = $this->get_ID3($path);
             $data['copyright'] = $tags['artist'];
             $data['date'] = date('Y.m.d H:m:s', strtotime($tags['year']));
             // Title
             foreach (Settings::get_languages() as $lang) {
                 $data[$lang['lang']]['title'] = $tags['title'];
                 $data[$lang['lang']]['alt'] = $data[$lang['lang']]['description'] = $tags['artist'] . ' - ' . $tags['album'] . ' : ' . $tags['title'];
             }
             $this->save($data, $data);
         }
         return $id;
     }
     return FALSE;
 }
Beispiel #28
0
 /**
  * Add lang content to each article in the article list.
  * This function is used for backend
  *
  * @param	Array	&$articles 		by ref. Array of articles
  */
 public function add_lang_data(&$articles = array())
 {
     if (!empty($articles)) {
         $ids = array();
         foreach ($articles as $article) {
             $ids[] = $article['id_article'];
         }
         if (!empty($ids)) {
             $this->{$this->db_group}->where('id_article in (' . implode(',', $ids) . ')');
             $query = $this->{$this->db_group}->get('article_lang');
             $result = array();
             if ($query->num_rows() > 0) {
                 $result = $query->result_array();
             }
             foreach ($articles as &$article) {
                 $article['languages'] = array();
                 foreach (Settings::get_languages() as $lang) {
                     $lang_code = $lang['lang'];
                     $article['languages'][$lang_code] = array();
                     foreach ($result as $row) {
                         if ($row['id_article'] == $article['id_article'] && $row['lang'] == $lang_code) {
                             $article['languages'][$lang_code] = $row;
                         }
                     }
                 }
             }
         }
     }
 }
Beispiel #29
0
    echo lang('ionize_label_media_limit_display_to_lang');
    ?>
</label></dt>
						<dd>
							<input type="radio" name="lang_display" id="display_all" value="" <?php 
    if ($context_data['lang_display'] == '') {
        ?>
checked="checked"<?php 
    }
    ?>
/><label for="display_all"><?php 
    echo lang('ionize_label_media_no_limit_display');
    ?>
</label>
							<?php 
    foreach (Settings::get_languages() as $language) {
        ?>
							<input id="display_<?php 
        echo $language['lang'];
        ?>
" type="radio" name="lang_display" value="<?php 
        echo $language['lang'];
        ?>
"  <?php 
        if ($context_data['lang_display'] == $language['lang']) {
            ?>
checked="checked"<?php 
        }
        ?>
/><label for="display_<?php 
        echo $language['lang'];
Beispiel #30
0
 /**
  * Get the current extend fields and their values for one parent element
  * Used by backend, as all the languages data are also get
  *
  * @param	string		$parent				Field & Field Definition parent name, eg: 'article'
  * @param	string		[$id_parent]		Field instance parent ID
  * @param	string		[$id_field_parent]	Field Definition parent ID
  * @return 	array
  */
 public function get_element_extend_fields($parent, $id_parent = NULL, $id_field_parent = NULL)
 {
     // Definitions
     $where = array('parent' => $parent);
     if ($id_field_parent) {
         $where['id_parent'] = $id_field_parent;
     }
     $definitions = $this->get_list($where);
     if ($parent === 'article') {
         /**
          * Article:
          * Reduce extend fields to those linked to current article type +fields w/o article type
          */
         $keepDefinitionIDs = array_merge($this->get_extend_field_ids_by_article_id($id_parent), $this->get_extend_field_ids_without_article_id());
         $keepDefinitions = array();
         foreach ($definitions as $definition) {
             if (in_array($definition['id_extend_field'], $keepDefinitionIDs)) {
                 $keepDefinitions[] = $definition;
             }
         }
         $definitions = $keepDefinitions;
     }
     // Fields Instances
     $fields = array();
     $get_fields = FALSE;
     if (!$id_field_parent && $id_parent) {
         // Get fields instances directly linked to parent
         $this->{$this->db_group}->where(array('extend_field.parent' => $parent, 'extend_fields.id_parent' => $id_parent));
         $get_fields = TRUE;
     } else {
         if ($id_field_parent && $id_parent) {
             // Get fields linked to the field definition
             $this->{$this->db_group}->where(array('extend_field.parent' => $parent, 'extend_field.id_parent' => $id_field_parent, 'extend_fields.id_parent' => $id_parent));
             $get_fields = TRUE;
         }
     }
     if ($get_fields) {
         $this->{$this->db_group}->join($this->instances_table, $this->instances_table . '.id_' . $this->table . ' = ' . $this->table . '.id_' . $this->table, 'inner');
         /** @var	CI_DB_result	$query */
         $query = $this->{$this->db_group}->get($this->get_table());
         if ($query->num_rows() > 0) {
             $fields = $query->result_array();
         }
     }
     // Languages
     $languages = Settings::get_languages();
     // Instances table columns
     $fields_columns = $this->{$this->db_group}->list_fields($this->instances_table);
     foreach ($definitions as $k => &$extend_field) {
         // One not translated extend field...
         if ($extend_field['translated'] != '1') {
             // fill the base data with empty values
             $extend_field = array_merge(array_fill_keys($fields_columns, NULL), $extend_field);
             foreach ($fields as $row) {
                 if ($row['id_extend_field'] == $extend_field['id_extend_field']) {
                     $extend_field = array_merge($extend_field, $row);
                 }
             }
         } else {
             $extend_field['lang_data'] = array();
             foreach ($languages as $language) {
                 // Lang code
                 $lang_code = $language['lang'];
                 // Feed lang key with blank array
                 $extend_field['lang_data'][$lang_code] = array('content' => NULL);
                 // Feeding of template languages elements
                 foreach ($fields as $row) {
                     if ($row['id_extend_field'] == $extend_field['id_extend_field'] && $row['lang'] == $lang_code) {
                         $extend_field['lang_data'][$lang_code] = $row;
                     }
                 }
             }
         }
     }
     return $definitions;
 }