Пример #1
0
 /**
  * Construit un sélecteur de produit(s) en fonction des paramètres et en tenant compte du nombre total de produits dans la base
  *
  * @todo: Remplacer les paramètres par un objet paramètre et/ou un tableau
  * @param  string  $caption     Le titre du sélecteur
  * @param  string  $name        Le nom du champ qui receuille les produits
  * @param  mixed   $value       La valeur sélectionnées
  * @param  integer $size        Le nombre d'éléments visibles dans le sélecteur
  * @param  boolean $multiple    Indique si c'est un sélecteur multiple ou pas
  * @param  array   $values      Les valeurs sélectionnées ou les valeurs qui font le sélecteur
  * @param  boolean $showAll     Indique s'il faut voir tous les produits ou pas (pas publiés et en stock)
  * @param  string  $sort        Zone de tri
  * @param  string  $order       Ordre de tri
  * @param  string  $formName    Nom du formulaire
  * @param  string  $description Description à rajouter à la zone
  * @param  mixed   $withNull    Option à rajouter en premier
  * @return object  Retourne soit un objet de type tray {@link XoopsFormElementTray} soit un select {@link XoopsFormSelect}
  */
 public function productSelector(oledrion_parameters $parameters)
 {
     $parameters = $parameters->extend(new oledrion_parameters(array('caption' => '', 'name' => '', 'value' => null, 'size' => 1, 'multiple' => false, 'values' => null, 'showAll' => true, 'sort' => 'product_title', 'order' => 'ASC', 'formName' => '', 'description' => '', 'withNull' => null)));
     static $jqueryIncluded = null;
     require_once XOOPS_ROOT_PATH . "/class/xoopsformloader.php";
     $criteria = new CriteriaCompo();
     $criteria->add(new Criteria('product_id', 0, '<>'));
     if (!$parameters['showAll']) {
         if (oledrion_utils::getModuleOption('show_unpublished') == 0) {
             // Ne pas afficher les produits qui ne sont pas publiés
             $criteria->add(new Criteria('product_submitted', time(), '<='));
         }
         if (oledrion_utils::getModuleOption('nostock_display') == 0) {
             // Se limiter aux seuls produits encore en stock
             $criteria->add(new Criteria('product_stock', 0, '>'));
         }
     }
     $criteria->setSort($parameters['sort']);
     $criteria->setOrder($parameters['order']);
     $itemsCount = $this->getCount($criteria);
     if ($itemsCount > oledrion_utils::getModuleOption('max_products')) {
         // Il faut créer notre propre sélecteur
         if ($parameters['multiple']) {
             if ($jqueryIncluded == null) {
                 $jqueryIncluded = true;
                 global $xoTheme;
                 $xoTheme->addScript("browse.php?Frameworks/jquery/jquery.js");
             }
             oledrion_utils::callJavascriptFile('select/select.js', false, true);
             $productTray = new XoopsFormElementTray($parameters['caption'], '');
             $productsList = new XoopsFormSelect('', $parameters['name'], $parameters['values'], $parameters['size'], $parameters['multiple']);
             // Recherche des produits
             $selectedProducts = $this->getList(new Criteria('product_id', '(' . implode(',', $parameters['values']) . ')', 'IN'));
             $productsList->addOptionArray($selectedProducts);
             // Les valeurs sélectionnées
             $productTray->addElement($productsList);
             $removeButton = new XoopsFormButton('', 'removeProduct', _AM_OLEDRION_REMOVE_SELECTED, 'button');
             if (oledrion_utils::isX20()) {
                 $removeButton->setExtra(" onclick=\"removeOptionSelected('" . $parameters['name'] . "[]');\"");
             } else {
                 $removeButton->setExtra(" onclick=\"removeOptionSelected('" . $parameters['name'] . "');\"");
             }
             $productTray->addElement($removeButton);
             if (oledrion_utils::isX20()) {
                 $link = "<a href=\"javascript:openWithSelfMain('" . OLEDRION_ADMIN_URL . "productsselector.php?mutipleSelect=1&amp;callerName=" . $parameters['name'] . "[]', '', " . OLEDRION_MAX_PRODUCTS_POPUP_WIDTH . ", " . OLEDRION_MAX_PRODUCTS_POPUP_HEIGHT . ");\">" . _AM_OLEDRION_SELECT_OTHER_P . "</a>";
             } else {
                 $link = "<a href=\"javascript:openWithSelfMain('" . OLEDRION_ADMIN_URL . "productsselector.php?mutipleSelect=1&amp;callerName=" . $parameters['name'] . "', '', " . OLEDRION_MAX_PRODUCTS_POPUP_WIDTH . ", " . OLEDRION_MAX_PRODUCTS_POPUP_HEIGHT . ");\">" . _AM_OLEDRION_SELECT_OTHER_P . "</a>";
             }
             $linkLabel = new xoopsFormLabel('', '<br />' . $link);
             $productTray->addElement($linkLabel);
             echo "<script type=\"text/javascript\">\n";
             echo "jQuery().ready(function(\$) {\n";
             echo "\$(\"#" . $parameters['formName'] . "\").submit( function() {\n";
             echo "\tselectAll('" . $parameters['name'] . "', true);\n";
             echo "} );\n";
             echo "});\n";
             echo "</script>\n";
         } else {
             // Pas de sélection multiple
             $productTray = new XoopsFormElementTray($parameters['caption'], '');
             $productsList = new XoopsFormSelect('', $parameters['name'], $parameters['value'], $parameters['size'], $parameters['multiple']);
             // Recherche des produits
             if ($parameters['value'] > 0) {
                 $selectedProducts = $this->getList(new Criteria('product_id', $parameters['value'], '='));
                 if (!is_null($parameters['withNull'])) {
                     $selectedProducts[0] = $parameters['withNull'];
                     ksort($selectedProducts);
                 }
                 $productsList->addOptionArray($selectedProducts);
                 // Les valeurs sélectionnées
             }
             $productTray->addElement($productsList);
             $link = "<a href=\"javascript:openWithSelfMain('" . OLEDRION_ADMIN_URL . "productsselector.php?mutipleSelect=0&amp;callerName=" . $parameters['name'] . "', '', " . OLEDRION_MAX_PRODUCTS_POPUP_WIDTH . ", " . OLEDRION_MAX_PRODUCTS_POPUP_HEIGHT . ");\">" . _AM_OLEDRION_SELECT_PRODUCT . "</a>";
             $linkLabel = new xoopsFormLabel('', '<br />' . $link);
             $productTray->addElement($linkLabel);
         }
     } else {
         $productTray = new XoopsFormSelect($parameters['caption'], $parameters['name'], $parameters['value'], $parameters['size'], $parameters['multiple']);
         $products = $this->getList($criteria);
         $productTray->addOptionArray($products);
     }
     if (trim($parameters['description']) != '') {
         $productTray->setDescription($parameters['description']);
     }
     return $productTray;
 }