123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- <?php
- /* Copyright (C) 2017 Laurent Destailleur <eldy@users.sourceforge.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- /**
- * \file htdocs/core/class/html.formwebsite.class.php
- * \ingroup core
- * \brief File of class to manage component html for module website
- */
- /**
- * Class to manage component html for module website
- */
- class FormWebsite
- {
- private $db;
- /**
- * @var string Error code (or message)
- */
- public $error;
- /**
- * var int A number of lines
- */
- public $num;
- /**
- * Constructor
- *
- * @param DoliDB $db Database handler
- */
- public function __construct($db)
- {
- $this->db = $db;
- }
- /**
- * Return HTML select list of websites
- *
- * @param string $selected Id modele pre-selectionne
- * @param string $htmlname Name of HTML select
- * @param int $useempty Show empty value or not
- * @return string Html component
- */
- public function selectWebsite($selected = '', $htmlname = 'exportmodelid', $useempty = 0)
- {
- $out = '';
- $sql = "SELECT rowid, ref";
- $sql .= " FROM ".$this->db->prefix()."website";
- $sql .= " WHERE 1 = 1";
- $sql .= " ORDER BY rowid";
- $result = $this->db->query($sql);
- if ($result) {
- $out .= '<select class="flat minwidth100" name="'.$htmlname.'" id="'.$htmlname.'">';
- if ($useempty) {
- $out .= '<option value="-1"> </option>';
- }
- $num = $this->db->num_rows($result);
- $i = 0;
- while ($i < $num) {
- $obj = $this->db->fetch_object($result);
- if ($selected == $obj->rowid) {
- $out .= '<option value="'.$obj->rowid.'" selected>';
- } else {
- $out .= '<option value="'.$obj->rowid.'">';
- }
- $out .= $obj->ref;
- $out .= '</option>';
- $i++;
- }
- $out .= "</select>";
- } else {
- dol_print_error($this->db);
- }
- return $out;
- }
- /**
- * Return a HTML select list of type of containers from the dictionary
- *
- * @param string $htmlname Name of select zone
- * @param string $selected Selected value
- * @param int $useempty 1=Add an empty value in list, 2=Add an empty value in list only if there is more than 2 entries.
- * @param string $moreattrib More attributes on HTML select tag
- * @param int $addjscombo Add js combo
- * @param string $morecss More CSS
- * @return void
- */
- public function selectTypeOfContainer($htmlname, $selected = '', $useempty = 0, $moreattrib = '', $addjscombo = 0, $morecss = 'minwidth200')
- {
- global $langs, $conf, $user;
- $langs->load("admin");
- $sql = "SELECT rowid, code, label, entity";
- $sql .= " FROM ".$this->db->prefix().'c_type_container';
- $sql .= " WHERE active = 1 AND entity IN (".getEntity('c_type_container').")";
- $sql .= " ORDER BY label";
- dol_syslog(get_class($this)."::selectTypeOfContainer", LOG_DEBUG);
- $result = $this->db->query($sql);
- if ($result) {
- $num = $this->db->num_rows($result);
- $i = 0;
- if ($num) {
- print '<select id="select'.$htmlname.'" class="flat selectTypeOfContainer'.($morecss ? ' '.$morecss : '').'" name="'.$htmlname.'"'.($moreattrib ? ' '.$moreattrib : '').'>';
- if ($useempty == 1 || ($useempty == 2 && $num > 1)) {
- print '<option value="-1"> </option>';
- }
- while ($i < $num) {
- $obj = $this->db->fetch_object($result);
- if ($selected == $obj->rowid || $selected == $obj->code) {
- print '<option value="'.$obj->code.'" selected>';
- } else {
- print '<option value="'.$obj->code.'">';
- }
- print $obj->label;
- print '</option>';
- $i++;
- }
- print "</select>";
- if ($user->admin) {
- print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"), 1);
- }
- if ($addjscombo) {
- print ajax_combobox('select'.$htmlname);
- }
- } else {
- print $langs->trans("NoTypeOfPagePleaseEditDictionary");
- }
- } else {
- dol_print_error($this->db);
- }
- }
- /**
- * Return a HTML select list of samples of containers content
- *
- * @param string $htmlname Name of select zone
- * @param string $selected Selected value
- * @param int $useempty 1=Add an empty value in list
- * @param string $moreattrib More attributes on HTML select tag
- * @param int $addjscombo Add js combo
- * @param string $morecss More css
- * @return string HTML select component with list of type of containers
- */
- public function selectSampleOfContainer($htmlname, $selected = '', $useempty = 0, $moreattrib = '', $addjscombo = 0, $morecss = 'minwidth200')
- {
- global $langs, $conf, $user;
- $langs->load("admin");
- $listofsamples = dol_dir_list(DOL_DOCUMENT_ROOT.'/website/samples', 'files', 0, '^page-sample-.*\.html$');
- $arrayofsamples = array();
- $arrayofsamples['empty'] = 'EmptyPage'; // Always this one first
- foreach ($listofsamples as $sample) {
- $reg = array();
- if (preg_match('/^page-sample-(.*)\.html$/', $sample['name'], $reg)) {
- $key = $reg[1];
- $labelkey = ucfirst($key);
- if ($key == 'empty') {
- $labelkey = 'EmptyPage';
- }
- $arrayofsamples[$key] = $labelkey;
- }
- }
- $out = '';
- $out .= '<select id="select'.$htmlname.'" class="selectSampleOfContainer'.($morecss? ' '.$morecss : '').'" name="'.$htmlname.'"'.($moreattrib ? ' '.$moreattrib : '').'>';
- if ($useempty == 1 || $useempty == 2) {
- $out .= '<option value="-1"> </option>';
- }
- foreach ($arrayofsamples as $key => $val) {
- if ($selected == $key) {
- $out .= '<option value="'.$key.'" selected>';
- } else {
- $out .= '<option value="'.$key.'">';
- }
- $out .= $langs->trans($val);
- $out .= '</option>';
- }
- $out .= "</select>";
- if ($addjscombo) {
- $out .= ajax_combobox('select'.$htmlname);
- }
- return $out;
- }
- /**
- * Return a HTML select list of containers of a website.
- * Note: $website->lines must have been loaded.
- *
- * @param Website $website Object Website
- * @param string $htmlname Name of select zone
- * @param int $pageid Preselected container ID
- * @param int $showempty Show empty record
- * @param string $action Action on page that use this select list
- * @param string $morecss More CSS
- * @param array $excludeids Exclude some ID in list
- * @return string HTML select component with list of block containers
- */
- public function selectContainer($website, $htmlname = 'pageid', $pageid = 0, $showempty = 0, $action = '', $morecss = 'minwidth200', $excludeids = null)
- {
- global $conf, $langs;
- $this->num = 0;
- $atleastonepage = (is_array($website->lines) && count($website->lines) > 0);
- $out = '';
- if ($atleastonepage && $action != 'editsource') {
- $out .= '<select name="'.$htmlname.'" id="'.$htmlname.'" class="maxwidth300'.($morecss ? ' '.$morecss : '').'">';
- } else {
- $out .= '<select name="pageidbis" id="pageid" class="maxwidth300'.($morecss ? ' '.$morecss : '').'"'.($action == 'editsource' ? ' disabled="disabled"' : '').'>';
- }
- if ($showempty || !$atleastonepage) {
- $out .= '<option class="optiongrey" value="-1">'.(is_numeric($showempty) ? ' ' : $showempty).'</option>';
- }
- /*if (!empty($conf->use_javascript_ajax)) {
- $valueoption = '<span class="classlink">'.img_picto('', 'add', 'class="paddingrightonly"').$langs->trans("AddPage").'</span>';
- $out .= '<option value="-2" data-html="'.dol_escape_htmltag($valueoption).'">'.$valueoption.'</option>';
- }*/
- if ($atleastonepage) {
- if (empty($pageid) && $action != 'createcontainer') { // Page id is not defined, we try to take one
- $firstpageid = 0;
- $homepageid = 0;
- foreach ($website->lines as $key => $valpage) {
- if (empty($firstpageid)) {
- $firstpageid = $valpage->id;
- }
- if ($website->fk_default_home && $key == $website->fk_default_home) {
- $homepageid = $valpage->id;
- }
- }
- $pageid = $homepageid ? $homepageid : $firstpageid; // We choose home page and if not defined yet, we take first page
- }
- foreach ($website->lines as $key => $valpage) {
- if (is_array($excludeids) && count($excludeids) && in_array($valpage->id, $excludeids)) {
- continue;
- }
- $valueforoption = '<span class="opacitymedium">['.$valpage->type_container.' '.sprintf("%03d", $valpage->id).']</span> ';
- $valueforoption .= $valpage->pageurl.' - '.$valpage->title;
- if ($website->otherlang) { // If there is alternative lang for this web site, we show the language code
- if ($valpage->lang) {
- $valueforoption .= ' <span class="opacitymedium">('.$valpage->lang.')</span>';
- }
- }
- if ($website->fk_default_home && $key == $website->fk_default_home) {
- //$valueforoption .= ' <span class="opacitymedium">('.$langs->trans("HomePage").')</span>';
- $valueforoption .= ' <span class="opacitymedium fa fa-home"></span>';
- }
- $out .= '<option value="'.$key.'"';
- if ($pageid > 0 && $pageid == $key) {
- $out .= ' selected'; // To preselect a value
- }
- $out .= ' data-html="'.dol_escape_htmltag($valueforoption).'"';
- $out .= '>';
- $out .= $valueforoption;
- $out .= '</option>';
- ++$this->num;
- }
- }
- $out .= '</select>';
- if ($atleastonepage && $action != 'editsource') {
- $out .= ajax_combobox($htmlname);
- } else {
- $out .= '<input type="hidden" name="'.$htmlname.'" value="'.$pageid.'">';
- $out .= ajax_combobox($htmlname);
- }
- return $out;
- }
- }
|