/**
 * Smarty {widget_product_gallery} function plugin
 *
 * Type:     function
 * Name:     microgalery
 * Date:     January 11 2013
 * Update:     March 20 2014
 * Purpose:  
 * Output:
 * @author   Gerits Aurelien
 * @author   Sire Sam (sire-sam.be)
 * @link http://www.magix-cms.com
 * @version  1.0
 * @param array
 * @param Smarty
 * @return string
 *
 */
function smarty_function_widget_product_gallery($params, $template)
{
    $ModelSystem = new magixglobal_model_system();
    $ModelConstructor = new magixglobal_model_constructor();
    $ModelCatalog = new frontend_model_catalog();
    // Set and load data
    $current = $ModelSystem->setCurrentId();
    $conf = array('context' => 'product-gallery');
    $data = $ModelCatalog->getData($conf, $current);
    $html = null;
    if ($data != null) {
        $pattern['default'] = patternMicroGallery();
        $pattern['custom'] = null;
        if ($params['pattern']) {
            $pattern['custom'] = is_array($params['pattern']) ? $params['pattern'] : patternMicroGallery($params['pattern']);
        }
        $pattern['global'] = $ModelConstructor->mergeHtmlPattern($pattern['default'], $pattern['custom']);
        magixcjquery_debug_magixfire::magixFireTable('pattern', $pattern);
        magixcjquery_debug_magixfire::magixFireTable('pattern global', $pattern['global']);
        $i = 0;
        $items['html'] = null;
        foreach ($data as $row) {
            $i++;
            // *** Construit donées de l'item en array avec clée nominative unifiée ('name' => 'monname,'descr' => '<p>ma descr</p>,...)
            $item['data'] = $ModelCatalog->setItemData($row, $current);
            // Configuration de la structure HTML de l'item
            $pattern['item'] = $ModelConstructor->setItemPattern($pattern['global'], $i);
            if ($pattern['item']['img']['classLink'] != '') {
                $pattern['item']['img']['classLink'] = ' class="' . $pattern['item']['img']['classLink'] . '"';
            }
            // remise à zero du compteur si élément est le dernier de la ligne
            if ($pattern['item']['is_last'] == 1) {
                $i = 0;
            }
            $items['html'] .= $pattern['item']['item']['before'];
            $items['html'] .= '<a href="' . $item['data']['imgSrc']['medium'] . '" rel="productGallery" title="Agrandir"' . $pattern['item']['img']['classLink'] . '>';
            $items['html'] .= '<img src="' . $item['data']['imgSrc']['small'] . '" alt="Galery" />';
            $items['html'] .= '</a>';
            $items['html'] .= $pattern['item']['item']['after'];
        }
    }
    // *** ouput
    if ($items['html'] != null) {
        $html = isset($params['title']) ? $params['title'] : '';
        $html .= $pattern['global']['container']['before'];
        $html .= isset($params['htmlPrepend']) ? $params['htmlPrepend'] : null;
        $html .= $items['html'];
        $html .= isset($params['htmlAppend']) ? $params['htmlAppend'] : null;
        $html .= $pattern['global']['container']['after'];
    }
    return $html;
}
/**
 * Smarty plugin
 * @package     Smarty
 * @subpackage  plugins
 * Type:        function
 * Name:        widget_catalog_display
 * Date:        27/09/2013
 * Update:      05/03/2013
 * @author      Samuel Lesire
 * @author      Gerits Aurelien
 * @link        htt://www.sire-sam.be, http://www.magix-dev.be
 * @version     1.1
 * @param       array
 * @param       Smarty
 * @return      string
 */
function smarty_function_widget_catalog_display($params, $template)
{
    $ModelSystem = new magixglobal_model_system();
    $ModelConstructor = new magixglobal_model_constructor();
    $ModelCatalog = new frontend_model_catalog();
    // Set and load data
    $current = $ModelSystem->setCurrentId();
    $conf = is_array($params['conf']) ? $params['conf'] : array();
    $data = $ModelCatalog->getData($conf, $current);
    $html = null;
    if ($data != null) {
        $pattern['default'] = patternCatalog();
        $pattern['custom'] = null;
        if ($params['pattern']) {
            $pattern['custom'] = is_array($params['pattern']) ? $params['pattern'] : patternCatalog($params['pattern']);
        }
        $pattern['global'] = $ModelConstructor->mergeHtmlPattern($pattern['default'], $pattern['custom']);
        // *** format items loop (foreach item)
        // ** Loop management var
        $deep = 1;
        $deep_minus = $deep - 1;
        $deep_plus = $deep + 1;
        $pass_trough = 0;
        $data_empty = false;
        // ** Loop format & output var
        $row = array();
        $items = array();
        $i[$deep] = 0;
        // *** boucle / loop
        do {
            // *** loop management START
            if ($pass_trough == 0) {
                // Si je n'ai plus de données à traiter je vide ma variable
                $row[$deep] = null;
            } else {
                // Sinon j'active le traitement des données
                $pass_trough = 0;
            }
            // Si je suis au premier niveaux et que je n'ai pas de donnée à traiter
            if ($deep == 1 and $row[$deep] == null) {
                // récupération des données dans $data
                $row[$deep] = array_shift($data);
            }
            // Si ma donnée possède des sous-donnée sous-forme de tableau
            if (isset($row[$deep]['subdata'])) {
                if (is_array($row[$deep]['subdata']) and $row[$deep]['subdata'] != null) {
                    // On monte d'une profondeur
                    $deep++;
                    $deep_minus++;
                    $deep_plus++;
                    // on récupére la  première valeur des sous-données en l'éffacant du tableau d'origine
                    $row[$deep] = array_shift($row[$deep_minus]['subdata']);
                    // Désactive le traitement des données
                    $pass_trough = 1;
                }
            } elseif ($deep != 1) {
                if ($row[$deep] == null) {
                    if ($row[$deep_minus]['subdata'] == null) {
                        // Si je n'ai pas de sous-données & pas de données à traiter & pas de frères à récupérer dans mon parent
                        // ====> désactive le tableaux de sous-données du parent et retourne au niveau de mon parent
                        unset($row[$deep_minus]['subdata']);
                        unset($i[$deep]);
                        $items[$deep] = $pattern['item']['container']['before'] . $items[$deep] . $pattern['item']['container']['after'];
                        $deep--;
                        $deep_minus = $deep - 1;
                        $deep_plus = $deep + 1;
                    } else {
                        // Je récupère un frère dans mon parent
                        $row[$deep] = array_shift($row[$deep_minus]['subdata']);
                    }
                    // Désactive le traitement des données
                    $pass_trough = 1;
                }
            }
            // *** loop management END
            // *** list format START
            if ($row[$deep] != null and $pass_trough != 1) {
                $i[$deep]++;
                // Construit doonées de l'item en array avec clée nominative unifiée ('name' => 'monname,'descr' => '<p>ma descr</p>,...)
                $itemData = $ModelCatalog->setItemData($row[$deep], $current['catalog']);
                // Configuration de la structure HTML de l'item
                $pattern['global']['is_current'] = $itemData['active'];
                $pattern['global']['id'] = isset($itemData['id']) ? $itemData['id'] : 0;
                $pattern['global']['url'] = isset($itemData['url']) ? $itemData['url'] : '#';
                $pattern['item'] = $ModelConstructor->setItemPattern($pattern['global'], $i[$deep], $deep);
                // Récupération de la taille de l'image
                if (isset($pattern['global']['img']['size_' . $deep])) {
                    $row[$deep]['img_size'] = $pattern['global']['img']['size_' . $deep];
                } elseif (isset($pattern['global']['img']['size'])) {
                    $row[$deep]['img_size'] = $pattern['global']['img']['size'];
                } else {
                    $row[$deep]['img_size'] = 'medium';
                }
                $imgSize = isset($pattern['item']['img']['size']) ? $pattern['item']['img']['size'] : 'small';
                if (isset($itemData['imgSrc'][$imgSize])) {
                    $itemData['imgSrc'] = $itemData['imgSrc'][$imgSize];
                } else {
                    $itemData['imgSrc'] = $itemData['imgSrc']['default'];
                }
                // remise à zero du compteur si élément est le dernier de la ligne
                if ($pattern['item']['is_last'] == 1) {
                    $i[$deep] = 0;
                }
                // Récupération de l'affichage pour le niveau
                $pattern['item']['display'] = is_array($pattern['global']['display'][$deep]) ? $pattern['global']['display'][$deep] : $pattern['global']['display'][1];
                if ($pattern['item']['display'] == null) {
                    $pattern['item']['display'] = $pattern['default']['display'][1];
                }
                // Récupération des sous-données (enfants)
                if (isset($items[$deep_plus]) != null) {
                    $subitems = $items[$deep_plus];
                    $items[$deep_plus] = null;
                } else {
                    $subitems = null;
                }
                $item = null;
                foreach ($pattern['item']['display'] as $elem_type) {
                    // BOUCLE de formatage des éléments contenus dans item
                    $pattern['elem'] = $pattern['item'][$elem_type];
                    if (array_search($elem_type, $pattern['item']['display'])) {
                        // Config class link
                        $item_classLink = null;
                        if (isset($pattern['elem']['classLink'])) {
                            $item_classLink = ' class="' . $pattern['elem']['classLink'] . '"';
                            $item_classLink = $pattern['elem']['classLink'] == 'none' ? 'none' : $item_classLink;
                        }
                        // Format element on switch
                        switch ($elem_type) {
                            case 'name':
                                $elem = $item_classLink != 'none' ? '<a' . $item_classLink . ' href="' . $itemData['url'] . '" title="' . $itemData['name'] . '">' : '';
                                $elem .= $itemData['name'];
                                $elem .= $item_classLink != 'none' ? '</a>' : '';
                                break;
                            case 'img':
                                $elem = $item_classLink != 'none' ? '<a' . $item_classLink . ' href="' . $itemData['url'] . '" title="' . $itemData['name'] . '">' : '';
                                $elem .= '<img src="' . $itemData['imgSrc'] . '" alt="' . $itemData['name'] . '"/>';
                                $elem .= $item_classLink != 'none' ? '</a>' : '';
                                break;
                            case 'descr':
                                $elem = magixcjquery_form_helpersforms::inputCleanTruncate(magixcjquery_form_helpersforms::inputTagClean($itemData['content']), $pattern['item']['descr']['lenght'], $pattern['item']['descr']['delemiter']);
                                break;
                            case 'price':
                                if (is_numeric($itemData['price'])) {
                                    $elem = $itemData['price'] . $pattern['item']['price']['currency'];
                                } else {
                                    $elem = null;
                                }
                                break;
                            default:
                                $elem = null;
                        }
                        if ($elem != null) {
                            $item .= $pattern['elem']['before'];
                            $item .= $elem;
                            $item .= $pattern['elem']['after'];
                        }
                    }
                }
                $items[$deep] .= $pattern['item']['item']['before'];
                $items[$deep] .= $item;
                $items[$deep] .= $subitems;
                $items[$deep] .= $pattern['item']['item']['after'];
            }
            // *** list format END
            // Si $data est vide => arrête la boucle
            if (empty($data) and $row[1] == null) {
                $data_empty = true;
            }
        } while ($data_empty == false);
        // *** container construct
        if ($items[1] != null) {
            $html = isset($params['title']) ? $params['title'] : '';
            $html .= $pattern['global']['container']['before'];
            $html .= isset($params['prepend']) ? $params['prepend'] : null;
            $html .= $items[1];
            $html .= isset($params['append']) ? $params['append'] : null;
            $html .= $pattern['global']['container']['after'];
        } else {
            $html = null;
        }
    }
    return $html;
}
/**
 * Smarty plugin
 * @package     Smarty
 * @subpackage  plugins
 * Type:        function
 * Name:        widget_news_display
 * date:        25/12/2013
 * Update:      10/03/2013
 * Examples:    {widget_news_display}
 * @author      Sire Sam (sire-sam.be)
 * @link        htt://www.sire-sam.be, http://www.magix-dev.be
 * @author      Gerits Aurelien
 * @version     1.1
 * @param       array
 * @param       Smarty
 * @return      string
 */
function smarty_function_widget_news_display($params, $template)
{
    $ModelSystem = new magixglobal_model_system();
    $ModelRewrite = new magixglobal_model_rewrite();
    $ModelConstructor = new magixglobal_model_constructor();
    $ModelNews = new frontend_model_news();
    $ModelPager = new magixglobal_model_pager();
    $Debug = new magixcjquery_debug_magixfire();
    // Set and load data
    $current = $ModelSystem->setCurrentId();
    $conf = is_array($params['conf']) ? $params['conf'] : array();
    $data = $ModelNews->getData($conf, $current);
    // Set Pagination
    $pagination['html'] = null;
    if (isset($data['total']) and isset($data['limit'])) {
        $pagination['src'] = $ModelPager->setPaginationData($data['total'], $data['limit'], '/' . $current['lang']['iso'] . $ModelRewrite->mod_news_lang($current['lang']['iso']), $current['news']['pagination']['id'], '/');
        $pagination['html'] = $ModelConstructor->formatPaginationHtml($pagination['src'], $current['news']['pagination']['id']);
        unset($data['total']);
        unset($data['limit']);
    }
    $current = $current['news'];
    // Format data
    $html = null;
    if ($data != null) {
        $pattern['default'] = patternNews();
        $pattern['custom'] = null;
        if ($params['pattern']) {
            $pattern['custom'] = is_array($params['pattern']) ? $params['pattern'] : patternNews($params['pattern']);
        }
        $pattern['global'] = $ModelConstructor->mergeHtmlPattern($pattern['default'], $pattern['custom']);
        $i = 0;
        $items['html'] = null;
        foreach ($data as $row) {
            $i++;
            $itemData = $ModelNews->setItemData($row, $current);
            // *** set item html structure & var
            $pattern['global']['is_active'] = $itemData['active'] === true ? 1 : 0;
            $pattern['global']['id'] = isset($itemData['id']) ? $itemData['id'] : 0;
            $pattern['global']['url'] = isset($itemData['uri']) ? $itemData['uri'] : '#';
            $pattern['item'] = $ModelConstructor->setItemPattern($pattern['global'], $i);
            // *** Reset iteration if item is last of the line
            if ($pattern['item']['is_last'] == 1) {
                $i = 0;
            }
            // *** in case diplay is null, we take default value
            if ($pattern['item']['display'][1] == null) {
                $pattern['item']['display'][1] = $pattern['default']['display'][1];
            }
            $imgSize = isset($pattern['item']['img']['size']) ? $pattern['item']['img']['size'] : 'small';
            if (isset($itemData['imgSrc'][$imgSize])) {
                $itemData['imgSrc'] = $itemData['imgSrc'][$imgSize];
            } else {
                $itemData['imgSrc'] = $itemData['imgSrc']['default'];
            }
            // *** format item loop (foreach element)
            $itemHtml = null;
            foreach ($pattern['item']['display'][1] as $elem_type) {
                $pattern['elem'] = $pattern['item'][$elem_type];
                if (array_search($elem_type, $pattern['item']['display'][1])) {
                    switch ($elem_type) {
                        case 'name':
                            $elem = $itemData['name'];
                            break;
                        case 'img':
                            $elem = '<img src="' . $itemData['imgSrc'] . '" alt="' . $itemData['name'] . '"/>';
                            break;
                        case 'descr':
                            $elem = magixcjquery_form_helpersforms::inputCleanTruncate(magixcjquery_form_helpersforms::inputTagClean($itemData['content']), $pattern['item']['descr']['lenght'], $pattern['item']['descr']['delemiter']);
                            break;
                        case 'date':
                            $elem = $ModelConstructor->formatDateHtml($itemData['date']['publish'], $pattern['item']);
                            break;
                        case 'tag':
                            $elem = $itemData['tag'];
                            break;
                        default:
                            $elem = null;
                    }
                    if ($elem != null or isset($pattern['elem']['before']) or isset($pattern['elem']['after'])) {
                        $itemHtml .= $pattern['elem']['before'];
                        $itemHtml .= $elem;
                        $itemHtml .= $pattern['elem']['after'];
                    }
                }
            }
            // *** item construct
            $items['html'] .= $pattern['item']['item']['before'];
            $items['html'] .= $itemHtml;
            $items['html'] .= $pattern['item']['item']['after'];
        }
        // *** container construct
        $html = isset($params['title']) ? $params['title'] : '';
        $html .= $pattern['global']['container']['before'];
        $html .= isset($params['prepend']) ? $params['prepend'] : null;
        $html .= $items['html'];
        $html .= isset($params['append']) ? $params['append'] : null;
        $html .= $pattern['global']['container']['after'];
        $html .= $pagination['html'];
    }
    return $html;
}
/**
 * Smarty {widget_lang_display} function plugin
 *
 * Type:     function
 * Name:     widget_lang_display
 * Date:     03/01/2013
 * Date Update : 12/01/2013
 * Output:
 * @author   Sire Sam (http://www.sire-sam.be)
 * @author   Gerits Aurélien (http://www.magix-dev.be)
 * @link
 * @version  1.0
 * @param $params
 * @param $template
 * @return string
 */
function smarty_function_widget_lang_display($params, $template)
{
    $ModelConstructor = new magixglobal_model_constructor();
    // *** Catch location var
    $iso_current = magixcjquery_filter_request::isGet('strLangue');
    // *** Load SQL DATA
    $data = frontend_db_lang::s_fetch_lang();
    $output = null;
    if ($data != null) {
        // *** set default html structure
        $strucHtml_default = array('container' => array('before' => '<ul class="nav">', 'after' => '</ul>'), 'item' => array('before' => '<li>', 'after' => '</li>'), 'icon' => array('before' => ' ', 'after' => ' '), 'name' => array('before' => ' ', 'after' => ' '), 'iso' => array('before' => '(', 'after' => ')'), 'current' => array('class' => ' current'), 'last' => array('class' => ' last', 'col' => 1));
        // *** Set default elem to display
        $strucHtml_default['allow'] = array('', 'icon', 'name', 'iso');
        $strucHtml_default['display'] = array(1 => array('', 'icon', 'name', 'iso'));
        // *** Update html struct & item setting with custom var (params['structureHTML']) @TODO vérifier si le paramaètre htmlDispaly tj opérationnel
        $structHtml_custom = $params['htmlStructure'] ? $params['htmlStructure'] : null;
        $strucHtml = $ModelConstructor->mergeHtmlPattern($strucHtml_default, $structHtml_custom);
        // *** Set translation var
        $t_go_to_version = frontend_model_template::getConfigVars('go_to_version');
        // *** format items loop (foreach item)
        $items = null;
        $i = 0;
        foreach ($data as $row) {
            $i++;
            // *** set additional var in htmlStruct
            $strucHtml['is_current'] = $iso_current == $row['iso'] ? 1 : 0;
            $strucHtml['is_last'] = 0;
            if ($i == $strucHtml['last']['col']) {
                $strucHtml['is_last'] = 1;
                $i = 0;
            }
            // *** in case diplay is null, we take default value
            if ($strucHtml['display'][1] == null) {
                $strucHtml['display'][1] = $strucHtml_default['display'][1];
            }
            // *** set link class
            $item_classLink = null;
            if ($strucHtml['is_last'] == 1 or $strucHtml['is_current'] == 1) {
                $item_class = ' class="';
                $item_class .= $strucHtml['is_last'] == 1 ? $strucHtml['last']['class'] : '';
                $item_class .= $strucHtml['is_current'] == 1 ? $strucHtml['current']['class'] : '';
                $item_class .= '"';
            }
            // *** format item loop (foreach element)
            $item = null;
            foreach ($strucHtml['display'][1] as $elem_type) {
                $strucHtml_elem = $strucHtml[$elem_type];
                if (array_search($elem_type, $strucHtml['display'][1])) {
                    switch ($elem_type) {
                        case 'name':
                            $elem = ucfirst($row['language']);
                            break;
                        case 'icon':
                            $elem = '<img src="/skin/' . frontend_model_template::frontendTheme()->themeSelected() . '/img/lang/' . $row['iso'] . '.png" alt="' . $row['name'] . '"/>';
                            break;
                        case 'iso':
                            $elem = $row['iso'];
                            break;
                        default:
                            $elem = null;
                    }
                    // *** elem construct
                    if ($elem != null) {
                        $item .= $strucHtml_elem['before'];
                        $item .= $elem;
                        $item .= $strucHtml_elem['after'];
                    }
                }
            }
            // *** item construct
            $items .= $strucHtml['item']['before'];
            $items .= '<a href="/' . $row['iso'] . '/" hreflang="' . $row['iso'] . '" title="' . ucfirst($t_go_to_version) . ': ' . $row['language'] . '">';
            $items .= $item;
            $items .= '</a>';
            $items .= $strucHtml['item']['after'];
        }
        // *** container construct
        $output .= $strucHtml['container']['before'];
        $output .= isset($params['htmlPrepend']) ? $params['htmlPrepend'] : null;
        $output .= $items;
        $output .= isset($params['htmlAppend']) ? $params['htmlAppend'] : null;
        $output .= $strucHtml['container']['after'];
    }
    return $output;
}