/** * 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&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&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&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; }