Get a checkbox.
static public getCheckbox ( array $options ) : the | ||
$options | array | array of parameters: - title its title - name its name - id its id - value the value to set when checked - readonly can we edit it ? - massive_tags the tag to set for massive checkbox update - checked is it checked or not ? - zero_on_empty do we send 0 on submit when it is not checked ? - specific_tags HTML5 tags to add - criterion the criterion for massive checkbox |
return | the | HTML code for the checkbox |
/** * Get right linear right choice. * * @since version 0.85 * * @param $elements array all pair identifier => label * @param $options array possible: * 'canedit' * 'field' name of the HTML field * 'value' the value inside the database * 'max_per_line' maximum number of elements per line * 'check_all' add a checkbox to check or uncheck every checkbox * 'rand' random value used to generate the ids * 'zero_on_empty' do we send 0 when checkbox is not checked ? * 'display' * 'check_method' method used to check the right * * @return content if !display **/ static function getLinearRightChoice(array $elements, array $options = array()) { $param = array(); $param['canedit'] = true; $param['field'] = ''; $param['value'] = ''; $param['max_per_line'] = 10; $param['check_all'] = false; $param['rand'] = mt_rand(); $param['zero_on_empty'] = true; $param['display'] = true; $param['check_method'] = function ($element, $field) { return ($field & $element) == $element; }; if (is_array($options) && count($options)) { foreach ($options as $key => $val) { $param[$key] = $val; } } if (empty($param['field'])) { return; } $nb_cbs = count($elements); $cb_options = array('readonly' => !$param['canedit']); if ($param['check_all']) { $nb_cbs++; $massive_tag = 'checkall_' . $param['field'] . '_' . $param['rand']; $cb_options['massive_tags'] = $massive_tag; } $nb_lines = ceil($nb_cbs / $param['max_per_line']); $nb_item_per_line = ceil($nb_cbs / $nb_lines); $out = ''; $count = 0; $nb_checked = 0; foreach ($elements as $element => $label) { if ($count != 0) { if ($count % $nb_item_per_line == 0) { $out .= "<br>\n"; } else { $out .= " -\n\t\t "; } } else { $out .= "\n\t\t"; } $out .= $label . ' '; $cb_options['name'] = $param['field'] . '[' . $element . ']'; $cb_options['id'] = Html::cleanId('checkbox_linear_' . $cb_options['name'] . '_' . $param['rand']); $cb_options['zero_on_empty'] = $param['zero_on_empty']; $cb_options['checked'] = $param['check_method']($element, $param['value']); $out .= Html::getCheckbox($cb_options); $count++; if ($cb_options['checked']) { $nb_checked++; } } if ($param['check_all']) { $cb_options = array('criterion' => array('tag_for_massive' => $massive_tag), 'id' => Html::cleanId('checkbox_linear_' . $param['rand'])); if ($nb_checked > count($elements) / 2) { $cb_options['checked'] = true; } $out .= " - <i><b>" . __('Select/unselect all') . "</b></i> " . Html::getCheckbox($cb_options); } if (!$param['display']) { return $out; } echo $out; }
/** * Get the group of elements regarding given item. * Two kind of item : * - Device* feed by a link to the attached item (Computer, Printer ...) * - Computer, Printer ...: feed by the "global" properties of the CommonDevice * Then feed with the specificities of the Item_Device elements * In cas of $item is an instance, then $options contains the type of the item (Computer, * Printer ...). * * @param $item * @param $table * @param $options array * @param $delete_all_column (default NULL) * @param $common_column * @param $specific_column * @param $delete_column (default NULL) * @param $dynamic_column **/ function getTableGroup(CommonDBTM $item, HTMLTableMain $table, array $options, HTMLTableSuperHeader $delete_all_column = NULL, HTMLTableSuperHeader $common_column, HTMLTableSuperHeader $specific_column, HTMLTableSuperHeader $delete_column = NULL, $dynamic_column) { global $DB; $is_device = $item instanceof CommonDevice; if ($is_device) { $peer_type = $options['itemtype']; if (empty($peer_type)) { $column_label = __('Dissociated devices'); $group_name = 'None'; } else { $column_label = $peer_type::getTypeName(Session::getPluralNumber()); $group_name = $peer_type; } $table_group = $table->createGroup($group_name, ''); $peer_column = $table_group->addHeader('item', $column_label, $common_column, NULL); if (!empty($peer_type)) { //TRANS : %1$s is the type of the device // %2$s is the type of the item // %3$s is the name of the item (used for headings of a list), $itemtype_nav_title = sprintf(__('%1$s of %2$s: %3$s'), $peer_type::getTypeName(Session::getPluralNumber()), $item->getTypeName(1), $item->getName()); $peer_column->setItemType($peer_type, $itemtype_nav_title); } } else { $peer_type = $this->getDeviceType(); $table_group = $table->createGroup($peer_type, ''); //TRANS : %1$s is the type of the device // %2$s is the type of the item // %3$s is the name of the item (used for headings of a list), $options['itemtype_title'] = sprintf(__('%1$s of %2$s: %3$s'), $peer_type::getTypeName(Session::getPluralNumber()), $item->getTypeName(1), $item->getName()); $peer_type::getHTMLTableHeader($item->getType(), $table_group, $common_column, NULL, $options); } $specificity_columns = array(); $link_column = $table_group->addHeader('spec_link', '', $specific_column); $spec_column = $link_column; foreach ($this->getSpecificities() as $field => $attributs) { $spec_column = $table_group->addHeader('spec_' . $field, $attributs['long name'], $specific_column, $spec_column); $specificity_columns[$field] = $spec_column; } $infocom_column = $table_group->addHeader('infocom', Infocom::getTypeName(Session::getPluralNumber()), $specific_column, $spec_column); $document_column = $table_group->addHeader('document', Document::getTypeName(Session::getPluralNumber()), $specific_column, $spec_column); if ($item->isDynamic()) { $dynamics_column = $table_group->addHeader('one', ' ', $dynamic_column, $spec_column); $previous_column = $dynamics_column; } else { $previous_column = $spec_column; } if ($options['canedit']) { $group_checkbox_tag = empty($peer_type) ? '__' : $peer_type; $content = Html::getCheckbox(array('criterion' => array('tag_for_massive' => $group_checkbox_tag))); $delete_one = $table_group->addHeader('one', $content, $delete_column, $previous_column); } if ($is_device) { $fk = 'items_id'; // Entity restrict $leftjoin = ''; $where = ""; if (!empty($peer_type)) { $leftjoin = "LEFT JOIN `" . getTableForItemType($peer_type) . "`\n ON (`" . $this->getTable() . "`.`items_id` = `" . getTableForItemType($peer_type) . "`.`id`\n AND `" . $this->getTable() . "`.`itemtype` = '{$peer_type}')"; $where = getEntitiesRestrictRequest(" AND", getTableForItemType($peer_type)); } $query = "SELECT `" . $this->getTable() . "`.*\n FROM `" . $this->getTable() . "`\n {$leftjoin}\n WHERE `" . $this->getDeviceForeignKey() . "` = '" . $item->getID() . "'\n AND `" . $this->getTable() . "`.`itemtype` = '{$peer_type}'\n AND `" . $this->getTable() . "`.`is_deleted` = '0'\n {$where}\n ORDER BY `" . $this->getTable() . "`.`itemtype`, `" . $this->getTable() . "`.`{$fk}`"; } else { $fk = $this->getDeviceForeignKey(); $query = "SELECT *\n FROM `" . $this->getTable() . "`\n WHERE `itemtype` = '" . $item->getType() . "'\n AND `items_id` = '" . $item->getID() . "'\n AND `is_deleted` = '0'\n ORDER BY {$fk}"; } if (!empty($peer_type)) { $peer = new $peer_type(); $peer->getEmpty(); } else { $peer = NULL; } foreach ($DB->request($query) as $link) { Session::addToNavigateListItems(static::getType(), $link["id"]); $this->getFromDB($link['id']); if (is_null($peer) || $link[$fk] != $peer->getID()) { if ($peer instanceof CommonDBTM) { $peer->getFromDB($link[$fk]); } $current_row = $table_group->createRow(); $peer_group = $peer_type . '_' . $link[$fk] . '_' . mt_rand(); $current_row->setHTMLID($peer_group); if ($options['canedit']) { $cell_value = Html::getCheckAllAsCheckbox($peer_group); $current_row->addCell($delete_all_column, $cell_value); } if ($is_device) { $cell = $current_row->addCell($peer_column, $peer ? $peer->getLink() : __('None'), NULL, $peer); if (is_null($peer)) { $cell->setHTMLClass('center'); } } else { $peer->getHTMLTableCellForItem($current_row, $item, NULL, $options); } } if (Session::haveRight('device', UPDATE)) { $mode = __s('Update'); } else { $mode = __s('View'); } $spec_cell = $current_row->addCell($link_column, "<a href='" . $this->getLinkURL() . "'>{$mode}</a>"); foreach ($this->getSpecificities() as $field => $attributs) { if (!empty($link[$field])) { $content = $link[$field]; } else { $content = ''; } $spec_cell = $current_row->addCell($specificity_columns[$field], $content, $spec_cell); } if (countElementsInTable('glpi_infocoms', "`itemtype`='" . $this->getType() . "' AND\n `items_id`='" . $link['id'] . "'")) { $content = array(array('function' => 'Infocom::showDisplayLink', 'parameters' => array($this->getType(), $link['id']))); } else { $content = ''; } $current_row->addCell($infocom_column, $content, $spec_cell); $content = array(); // The order is to be sure that specific documents appear first $query = "SELECT `documents_id`\n FROM `glpi_documents_items`\n WHERE (`itemtype` = '" . $this->getType() . "' AND `items_id` = '" . $link['id'] . "')\n OR (`itemtype` = '" . $this->getDeviceType() . "'\n AND `items_id` = '" . $link[$this->getDeviceForeignKey()] . "')\n ORDER BY `itemtype` = '" . $this->getDeviceType() . "'"; $document = new Document(); foreach ($DB->request($query) as $document_link) { if ($document->can($document_link['documents_id'], READ)) { $content[] = $document->getLink(); } } $content = implode('<br>', $content); $current_row->addCell($document_column, $content, $spec_cell); if ($item->isDynamic()) { $previous_cell = $current_row->addCell($dynamics_column, Dropdown::getYesNo($link['is_dynamic']), $spec_cell); } else { $previous_cell = $spec_cell; } if ($options['canedit']) { $cell_value = Html::getMassiveActionCheckBox($this->getType(), $link['id'], array('massive_tags' => $group_checkbox_tag)); $current_row->addCell($delete_one, $cell_value, $previous_cell); } } }
/** * Display choice matrix * * @since version 0.85 * @param $columns array of column field name => column label * @param $rows array of field name => array( * 'label' the label of the row * 'columns' an array of specific information regaring current row and given column indexed by column field_name * * a string if only have to display a string * * an array('value' => ???, 'readonly' => ???) that is used to Dropdown::showYesNo() * @param $options array possible: * 'title' of the matrix * 'first_cell' the content of the upper-left cell * 'row_check_all' set to true to display a checkbox to check all elements of the row * 'col_check_all' set to true to display a checkbox to check all elements of the col * 'rand' random number to use for ids * * @return random value used to generate the ids **/ static function showCheckboxMatrix(array $columns, array $rows, array $options = array()) { $param['title'] = ''; $param['first_cell'] = ' '; $param['row_check_all'] = false; $param['col_check_all'] = false; $param['rotate_column_titles'] = false; $param['rand'] = mt_rand(); $param['table_class'] = 'tab_cadre_fixehov'; $param['cell_class_method'] = NULL; if (is_array($options) && count($options)) { foreach ($options as $key => $val) { $param[$key] = $val; } } $cb_options = array('title' => __s('Check/uncheck all')); $number_columns = count($columns) + 1; if ($param['row_check_all']) { $number_columns += 1; } $width = round(100 / $number_columns); echo "\n<table class='" . $param['table_class'] . "'>\n"; if (!empty($param['title'])) { echo "\t<tr>\n"; echo "\t\t<th colspan='{$number_columns}'>" . $param['title'] . "</th>\n"; echo "\t</tr>\n"; } echo "\t<tr class='tab_bg_1'>\n"; echo "\t\t<td>" . $param['first_cell'] . "</td>\n"; foreach ($columns as $col_name => $column) { $nb_cb_per_col[$col_name] = array('total' => 0, 'checked' => 0); $col_id = Html::cleanId('col_label_' . $col_name . '_' . $param['rand']); echo "\t\t<td class='center b"; if ($param['rotate_column_titles']) { echo " rotate"; } echo "' id='{$col_id}' width='{$width}%'>"; if (!is_array($column)) { $columns[$col_name] = $column = array('label' => $column); } if (isset($column['short']) && isset($column['long'])) { echo $column['short']; self::showToolTip($column['long'], array('applyto' => $col_id)); } else { echo $column['label']; } echo "</td>\n"; } if ($param['row_check_all']) { $col_id = Html::cleanId('col_of_table_' . $param['rand']); echo "\t\t<td class='center"; if ($param['rotate_column_titles']) { echo " rotate"; } echo "' id='{$col_id}'>" . __('Select/unselect all') . "</td>\n"; } echo "\t</tr>\n"; foreach ($rows as $row_name => $row) { if (!is_string($row) && !is_array($row)) { continue; } echo "\t<tr class='tab_bg_1'>\n"; if (is_string($row)) { echo "\t\t<th colspan='{$number_columns}'>{$row}</th>\n"; } else { $row_id = Html::cleanId('row_label_' . $row_name . '_' . $param['rand']); if (isset($row['class'])) { $class = $row['class']; } else { $class = ''; } echo "\t\t<td class='b {$class}' id='{$row_id}'>"; if (!empty($row['label'])) { echo $row['label']; } else { echo " "; } echo "</td>\n"; $nb_cb_per_row = array('total' => 0, 'checked' => 0); foreach ($columns as $col_name => $column) { $class = ''; if (!empty($row['class']) && !empty($column['class'])) { if (is_callable($param['cell_class_method'])) { $class = $param['cell_class_method']($row['class'], $column['class']); } } else { if (!empty($row['class'])) { $class = $row['class']; } else { if (!empty($column['class'])) { $class = $column['class']; } } } echo "\t\t<td class='center {$class}'>"; // Warning: isset return false if the value is NULL ... if (array_key_exists($col_name, $row['columns'])) { $content = $row['columns'][$col_name]; if (is_array($content) && array_key_exists('checked', $content)) { if (!array_key_exists('readonly', $content)) { $content['readonly'] = false; } $content['massive_tags'] = array(); if ($param['row_check_all']) { $content['massive_tags'][] = 'row_' . $row_name . '_' . $param['rand']; } if ($param['col_check_all']) { $content['massive_tags'][] = 'col_' . $col_name . '_' . $param['rand']; } if ($param['row_check_all'] && $param['col_check_all']) { $content['massive_tags'][] = 'table_' . $param['rand']; } $content['name'] = $row_name . "[{$col_name}]"; $content['id'] = Html::cleanId('cb_' . $row_name . '_' . $col_name . '_' . $param['rand']); Html::showCheckbox($content); $nb_cb_per_col[$col_name]['total']++; $nb_cb_per_row['total']++; if ($content['checked']) { $nb_cb_per_col[$col_name]['checked']++; $nb_cb_per_row['checked']++; } } else { if (is_string($content)) { echo $content; } else { echo " "; } } } else { echo " "; } echo "</td>\n"; } } if ($param['row_check_all'] && !is_string($row) && $nb_cb_per_row['total'] > 1) { $cb_options['criterion'] = array('tag_for_massive' => 'row_' . $row_name . '_' . $param['rand']); $cb_options['massive_tags'] = 'table_' . $param['rand']; $cb_options['id'] = Html::cleanId('cb_checkall_row_' . $row_name . '_' . $param['rand']); $cb_options['checked'] = $nb_cb_per_row['checked'] > $nb_cb_per_row['total'] / 2; echo "\t\t<td class='center'>" . Html::getCheckbox($cb_options) . "</td>\n"; } echo "\t</tr>\n"; } if ($param['col_check_all']) { echo "\t<tr class='tab_bg_1'>\n"; echo "\t\t<td>" . __('Select/unselect all') . "</td>\n"; foreach ($columns as $col_name => $column) { echo "\t\t<td class='center'>"; if ($nb_cb_per_col[$col_name]['total'] > 1) { $cb_options['criterion'] = array('tag_for_massive' => 'col_' . $col_name . '_' . $param['rand']); $cb_options['massive_tags'] = 'table_' . $param['rand']; $cb_options['id'] = Html::cleanId('cb_checkall_col_' . $col_name . '_' . $param['rand']); $cb_options['checked'] = $nb_cb_per_col[$col_name]['checked'] > $nb_cb_per_col[$col_name]['total'] / 2; echo Html::getCheckbox($cb_options); } else { echo " "; } echo "</td>\n"; } if ($param['row_check_all']) { $cb_options['criterion'] = array('tag_for_massive' => 'table_' . $param['rand']); $cb_options['massive_tags'] = ''; $cb_options['id'] = Html::cleanId('cb_checkall_table_' . $param['rand']); echo "\t\t<td class='center'>" . Html::getCheckbox($cb_options) . "</td>\n"; } echo "\t</tr>\n"; } echo "</table>\n"; return $param['rand']; }
/** * Display a section of settings present in the $arrSettings class array * * See the description of {@see show()} for details. * @param \Cx\Core\Html\Sigma $objTemplateLocal The Template object, * by reference * @param string $section The optional section header * text to add * @param string $prefix The optional prefix for * language variables. * Defaults to 'TXT_' * @return boolean True on success, false otherwise */ static function show_section(&$objTemplateLocal, $section = '', $prefix = 'TXT_', $readOnly = false) { global $_ARRAYLANG, $_CORELANG; $arrSettings = self::getCurrentSettings(); self::verify_template($objTemplateLocal); // This is set to multipart if necessary $enctype = ''; $i = 0; if ($objTemplateLocal->blockExists('core_setting_row')) { $objTemplateLocal->setCurrentBlock('core_setting_row'); } foreach ($arrSettings as $name => $arrSetting) { // Determine HTML element for type and apply values and selected $element = ''; $value = $arrSetting['value']; $values = self::splitValues($arrSetting['values']); $type = $arrSetting['type']; // Not implemented yet: // Warn if some mandatory value is empty if (empty($value) && preg_match('/_mandatory$/', $type)) { \Message::warning(sprintf($_CORELANG['TXT_CORE_SETTING_WARNING_EMPTY'], $_ARRAYLANG[$prefix . strtoupper($name)], $name)); } // Warn if some language variable is not defined if (empty($_ARRAYLANG[$prefix . strtoupper($name)])) { \Message::warning(sprintf($_CORELANG['TXT_CORE_SETTING_WARNING_MISSING_LANGUAGE'], $prefix . strtoupper($name), $name)); } //DBG::log("Value: $value -> align $value_align"); switch ($type) { // Dropdown menu case self::TYPE_DROPDOWN: $matches = null; if (preg_match('/^\\{src:([a-z0-9_\\\\:]+)\\(\\)\\}$/i', $arrSetting['values'], $matches)) { $arrValues = self::splitValues(call_user_func($matches[1])); } else { $arrValues = self::splitValues($arrSetting['values']); } //DBG::log("Values: ".var_export($arrValues, true)); $element = \Html::getSelect($name, $arrValues, $value, '', '', 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;' . (isset($arrValues[$value]) && is_numeric($arrValues[$value]) ? 'text-align: right;' : '') . '"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')); break; case self::TYPE_DROPDOWN_USER_CUSTOM_ATTRIBUTE: $element = \Html::getSelect($name, User_Profile_Attribute::getCustomAttributeNameArray(), $arrSetting['value'], '', '', 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')); break; case self::TYPE_DROPDOWN_USERGROUP: $element = \Html::getSelect($name, UserGroup::getNameArray(), $arrSetting['value'], '', '', 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')); break; case self::TYPE_WYSIWYG: // These must be treated differently, as wysiwyg editors // claim the full width if ($readOnly) { // TODO: this might be dangerous! should be rewritten probably $element = $value; } else { $element = new \Cx\Core\Wysiwyg\Wysiwyg($name, $value); } $objTemplateLocal->setVariable(array('CORE_SETTING_ROW' => $_ARRAYLANG[$prefix . strtoupper($name)], 'CORE_SETTING_ROWCLASS1' => ++$i % 2 ? '1' : '2')); $objTemplateLocal->parseCurrentBlock(); $objTemplateLocal->setVariable(array('CORE_SETTING_ROW' => $element . '<br /><br />', 'CORE_SETTING_ROWCLASS1' => ++$i % 2 ? '1' : '2')); $objTemplateLocal->parseCurrentBlock(); // Skip the part below, all is done already continue 2; case self::TYPE_FILEUPLOAD: //echo("\Cx\Core\Setting\Controller\Setting::show_section(): Setting up upload for $name, $value<br />"); $element = \Html::getInputFileupload($name, $value ? $name : false, Filetype::MAXIMUM_UPLOAD_FILE_SIZE, $arrSetting['values'], 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : ''), true, $value ? $value : 'media/' . (isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : 'other')); // File uploads must be multipart encoded $enctype = 'enctype="multipart/form-data"'; break; case self::TYPE_BUTTON: // The button is only available to trigger some event. $event = 'onclick=\'' . 'if (confirm("' . $_ARRAYLANG[$prefix . strtoupper($name) . '_CONFIRM'] . '")) {' . 'document.getElementById("' . $name . '").value=1;' . 'document.formSettings_' . self::$tab_index . '.submit();' . '}\''; //DBG::log("\Cx\Core\Setting\Controller\Setting::show_section(): Event: $event"); $element = \Html::getInputButton('__' . $name, $_ARRAYLANG[strtoupper($prefix . $name) . '_LABEL'], 'button', false, $event . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')) . \Html::getHidden($name, 0, ''); //DBG::log("\Cx\Core\Setting\Controller\Setting::show_section(): Element: $element"); break; case self::TYPE_TEXTAREA: $element = \Html::getTextarea($name, $value, 80, 8, $readOnly ? \Html::ATTRIBUTE_DISABLED : ''); // 'style="width: '.self::DEFAULT_INPUT_WIDTH.'px;'.$value_align.'"'); break; case self::TYPE_CHECKBOX: $arrValues = self::splitValues($arrSetting['values']); $value_true = current($arrValues); $element = \Html::getCheckbox($name, $value_true, false, in_array($value, $arrValues), '', $readOnly ? \Html::ATTRIBUTE_DISABLED : ''); break; case self::TYPE_CHECKBOXGROUP: $checked = self::splitValues($value); $element = \Html::getCheckboxGroup($name, $values, $values, $checked, '', '', '<br />', $readOnly ? \Html::ATTRIBUTE_DISABLED : '', ''); break; // 20120508 UNTESTED! // 20120508 UNTESTED! case self::TYPE_RADIO: $checked = $value; $element = \Html::getRadioGroup($name, $values, $checked, '', $readOnly ? \Html::ATTRIBUTE_DISABLED : ''); break; case self::TYPE_PASSWORD: $element = \Html::getInputPassword($name, $value, 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')); break; //datepicker //datepicker case self::TYPE_DATE: $element = \Html::getDatepicker($name, array('defaultDate' => $value), 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"'); break; //datetimepicker //datetimepicker case self::TYPE_DATETIME: $element = \Html::getDatetimepicker($name, array('defaultDate' => $value), 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;"'); break; // Default to text input fields // Default to text input fields case self::TYPE_TEXT: case self::TYPE_EMAIL: default: $element = \Html::getInputText($name, $value, false, 'style="width: ' . self::DEFAULT_INPUT_WIDTH . 'px;' . (is_numeric($value) ? 'text-align: right;' : '') . '"' . ($readOnly ? \Html::ATTRIBUTE_DISABLED : '')); } //add Tooltip $toolTips = ''; $toolTipsHelp = ''; if (isset($_ARRAYLANG[$prefix . strtoupper($name) . '_TOOLTIP'])) { // generate tooltip for configuration option $toolTips = ' <span class="icon-info tooltip-trigger"></span><span class="tooltip-message">' . $_ARRAYLANG[$prefix . strtoupper($name) . '_TOOLTIP'] . '</span>'; } if (isset($_ARRAYLANG[$prefix . strtoupper($name) . '_TOOLTIP_HELP'])) { // generate tooltip for configuration option $toolTipsHelp = ' <span class="icon-info tooltip-trigger"></span><span class="tooltip-message">' . $_ARRAYLANG[$prefix . strtoupper($name) . '_TOOLTIP_HELP'] . '</span>'; } $objTemplateLocal->setVariable(array('CORE_SETTING_NAME' => (isset($_ARRAYLANG[$prefix . strtoupper($name)]) ? $_ARRAYLANG[$prefix . strtoupper($name)] : $name) . $toolTips, 'CORE_SETTING_VALUE' => $element . $toolTipsHelp, 'CORE_SETTING_ROWCLASS2' => ++$i % 2 ? '1' : '2')); $objTemplateLocal->parseCurrentBlock(); //echo("\Cx\Core\Setting\Controller\Setting::show(objTemplateLocal, $prefix): shown $name => $value<br />"); } // Set form encoding to multipart if necessary if (!empty($enctype)) { $objTemplateLocal->setVariable('CORE_SETTING_ENCTYPE', $enctype); } if (!empty($section) && $objTemplateLocal->blockExists('core_setting_section')) { //echo("\Cx\Core\Setting\Controller\Setting::show(objTemplateLocal, $header, $prefix): creating section $header<br />"); $objTemplateLocal->setVariable(array('CORE_SETTING_SECTION' => $section)); //$objTemplateLocal->parse('core_setting_section'); } return true; }
/** * @since version 0.85 * * @see CommonDBRelation::showRelationMassiveActionsSubForm() **/ static function showRelationMassiveActionsSubForm(MassiveAction $ma, $peer_number) { if ($ma->getAction() == 'add') { echo "<br><br>" . __('Tagged') . Html::getCheckbox(array('name' => 'tagged')); } }
/** * Edit coupons * @param \Cx\Core\Html\Sigma $objTemplate The Template */ static function edit($objTemplate) { global $_ARRAYLANG; //DBG::activate(DBG_ADODB|DBG_LOG_FIREPHP|DBG_PHP); $result = true; if (isset($_GET['delete'])) { list($code, $customer_id) = explode('-', $_GET['delete']); $result &= self::delete(contrexx_input2raw($code), intval($customer_id)); } $edit = isset($_REQUEST['edit']) ? contrexx_input2raw($_REQUEST['edit']) : null; //DBG::log("Edit: ".($edit ? $edit : 'NULL')); $code = isset($_POST['code']) ? contrexx_input2raw($_POST['code']) : null; $payment_id = empty($_POST['payment_id']) ? 0 : intval($_POST['payment_id']); $start_time = empty($_POST['start_date']) ? 0 : strtotime(contrexx_input2raw($_POST['start_date'])); $end_time = empty($_POST['end_date_unlimited']) ? empty($_POST['end_date']) ? 0 : strtotime(contrexx_input2raw($_POST['end_date'])) : 0; $coupon_type = empty($_POST['coupon_type']) ? null : contrexx_input2raw($_POST['coupon_type']); $discount_rate = intval(empty($_POST['discount_rate']) ? 0 : floatval($_POST['discount_rate'])); $discount_amount = Currency::formatPrice(empty($_POST['discount_amount']) ? 0 : floatval($_POST['discount_amount'])); if ($coupon_type == 'rate') { $discount_amount = 0; } if ($coupon_type == 'amount') { $discount_rate = 0; } $minimum_amount = Currency::formatPrice(empty($_POST['minimum_amount']) ? 0 : floatval($_POST['minimum_amount'])); $uses = empty($_POST['unlimited']) ? empty($_POST['uses']) ? 1 : intval($_POST['uses']) : self::USES_UNLIMITED; $customer_id = empty($_POST['customer_id']) ? 0 : intval($_POST['customer_id']); $product_id = empty($_POST['product_id']) ? 0 : intval($_POST['product_id']); $global = !empty($_POST['global_or_customer']); //DBG::log("code $code, start_time $start_time, end_time $end_time, minimum amount $minimum_amount, discount_rate $discount_rate, discount_amount $discount_amount, uses $uses, customer_id $customer_id"); if (isset($code)) { $result &= self::storeCode($code, $payment_id, $minimum_amount, $discount_rate, $discount_amount, $start_time, $end_time, $uses, $global, $customer_id, $product_id, $edit); if ($result) { $code = $edit = null; } else { if (empty($edit)) { $edit = "{$code}-{$customer_id}"; } } } // Reset the end time if it's in the past if ($end_time < time()) { $end_time = 0; } $uri = \Html::getRelativeUri(); \Html::stripUriParam($uri, 'view'); \Html::stripUriParam($uri, 'edit'); \Html::stripUriParam($uri, 'order_coupon'); $arrSortingFields = array('code' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_CODE'], 'start_time' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_START_TIME'], 'end_time' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_END_TIME'], 'minimum_amount' => sprintf($_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT_FORMAT'], Currency::getDefaultCurrencyCode()), 'discount_rate' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_RATE'], 'discount_amount' => sprintf($_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_AMOUNT_FORMAT'], Currency::getDefaultCurrencyCode()), 'uses' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_USES'], 'global' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_SCOPE'], 'customer_id' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_CUSTOMER'], 'product_id' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PRODUCT'], 'payment_id' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PAYMENT']); $objSorting = new \Sorting($uri, $arrSortingFields, true, 'order_coupon'); $objTemplate->setGlobalVariable($_ARRAYLANG + array('TXT_SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT_CURRENCY' => sprintf($_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT_FORMAT'], Currency::getDefaultCurrencyCode()), 'TXT_SHOP_DISCOUNT_COUPON_AMOUNT_CURRENCY' => sprintf($_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_AMOUNT_FORMAT'], Currency::getDefaultCurrencyCode()), 'TXT_SHOP_DISCOUNT_COUPON_ADD_OR_EDIT' => $_ARRAYLANG[$edit ? 'TXT_SHOP_DISCOUNT_COUPON_EDIT' : 'TXT_SHOP_DISCOUNT_COUPON_ADD'], 'SHOP_DISCOUNT_COUPON_VIEW_ACTIVE' => $edit ? '' : 'active', 'SHOP_DISCOUNT_COUPON_EDIT_ACTIVE' => $edit ? 'active' : '', 'SHOP_DISCOUNT_COUPON_VIEW_DISPLAY' => $edit ? 'none' : 'block', 'SHOP_DISCOUNT_COUPON_EDIT_DISPLAY' => $edit ? 'block' : 'none', 'HEADER_SHOP_DISCOUNT_COUPON_CODE' => $objSorting->getHeaderForField('code'), 'HEADER_SHOP_DISCOUNT_COUPON_START_TIME' => $objSorting->getHeaderForField('start_time'), 'HEADER_SHOP_DISCOUNT_COUPON_END_TIME' => $objSorting->getHeaderForField('end_time'), 'HEADER_SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT_CURRENCY' => $objSorting->getHeaderForField('minimum_amount'), 'HEADER_SHOP_DISCOUNT_COUPON_RATE' => $objSorting->getHeaderForField('discount_rate'), 'HEADER_SHOP_DISCOUNT_COUPON_AMOUNT_CURRENCY' => $objSorting->getHeaderForField('discount_amount'), 'HEADER_SHOP_DISCOUNT_COUPON_USES' => $objSorting->getHeaderForField('uses'), 'HEADER_SHOP_DISCOUNT_COUPON_SCOPE' => $objSorting->getHeaderForField('global'), 'HEADER_SHOP_DISCOUNT_COUPON_CUSTOMER' => $objSorting->getHeaderForField('customer_id'), 'HEADER_SHOP_DISCOUNT_COUPON_PRODUCT' => $objSorting->getHeaderForField('product_id'), 'HEADER_SHOP_DISCOUNT_COUPON_PAYMENT' => $objSorting->getHeaderForField('payment_id'))); $count = 0; $limit = \Cx\Core\Setting\Controller\Setting::getValue('numof_coupon_per_page_backend', 'Shop'); if (empty($limit)) { self::errorHandler(); } $arrCoupons = self::getArray(\Paging::getPosition(), $limit, $count, $objSorting->getOrder()); $arrProductName = Products::getNameArray(true, $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PRODUCT_FORMAT']); $arrPaymentName = Payment::getNameArray(); $i = 0; $row = 0; $objCouponEdit = new Coupon(); $objCouponEdit->code($code); $objCouponEdit->payment_id($payment_id); $objCouponEdit->minimum_amount($minimum_amount); $objCouponEdit->discount_rate($discount_rate); $objCouponEdit->discount_amount($discount_amount); $objCouponEdit->start_time($start_time); $objCouponEdit->end_time($end_time); $objCouponEdit->uses($uses); $objCouponEdit->is_global($global); $objCouponEdit->customer_id($customer_id); $objCouponEdit->product_id($product_id); global $_CONFIG; foreach ($arrCoupons as $index => $objCoupon) { $coupon_uri_id = 'coupon_uri_' . $index; $objTemplate->setVariable(array('SHOP_ROWCLASS' => 'row' . (++$row % 2 + 1), 'SHOP_DISCOUNT_COUPON_CODE' => $objCoupon->code, 'SHOP_DISCOUNT_COUPON_URI_ICON' => '<div class="icon_url"' . '> </div>', 'SHOP_DISCOUNT_COUPON_URI_INPUT' => '<div class="layer_url" id="' . $coupon_uri_id . '">' . \Html::getInputText('dummy', 'http://' . $_CONFIG['domainUrl'] . \Cx\Core\Core\Controller\Cx::instanciate()->getWebsiteOffsetPath() . '/' . CONTREXX_DIRECTORY_INDEX . '?section=Shop' . MODULE_INDEX . '&coupon_code=' . $objCoupon->code, false, 'readonly="readonly"' . ' style="width: 200px;"' . ' onfocus="this.select();"' . ' onblur="cx.jQuery(\'#' . $coupon_uri_id . '\').hide();"') . '</div>', 'SHOP_DISCOUNT_COUPON_START_TIME' => $objCoupon->start_time ? date(ASCMS_DATE_FORMAT_DATE, $objCoupon->start_time) : $_ARRAYLANG['TXT_SHOP_DATE_NONE'], 'SHOP_DISCOUNT_COUPON_END_TIME' => $objCoupon->end_time ? date(ASCMS_DATE_FORMAT_DATE, $objCoupon->end_time) : $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_END_TIME_UNLIMITED'], 'SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT' => $objCoupon->minimum_amount > 0 ? $objCoupon->minimum_amount : $_ARRAYLANG['TXT_SHOP_AMOUNT_NONE'], 'SHOP_DISCOUNT_COUPON_RATE' => $objCoupon->discount_rate > 0 ? $objCoupon->discount_rate : $_ARRAYLANG['TXT_SHOP_RATE_NONE'], 'SHOP_DISCOUNT_COUPON_AMOUNT' => $objCoupon->discount_amount > 0 ? $objCoupon->discount_amount : $_ARRAYLANG['TXT_SHOP_AMOUNT_NONE'], 'SHOP_DISCOUNT_COUPON_USES' => sprintf($_ARRAYLANG['TXT_SHOP_COUPON_USES_FORMAT'], $objCoupon->used, $objCoupon->uses < 1000000000.0 ? $objCoupon->uses : $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_USES_UNLIMITED']), 'SHOP_DISCOUNT_COUPON_SCOPE' => $objCoupon->global ? $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_GLOBALLY'] : $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PER_CUSTOMER'], 'SHOP_DISCOUNT_COUPON_PER_CUSTOMER' => !$objCoupon->global ? \Html::getRadio('foo_' . ++$i, '', false, true, '', \Html::ATTRIBUTE_DISABLED) : ' ', 'SHOP_DISCOUNT_COUPON_CUSTOMER' => $objCoupon->customer_id ? Customers::getNameById($objCoupon->customer_id, '%4$s (%3$u)') : $_ARRAYLANG['TXT_SHOP_CUSTOMER_ANY'], 'SHOP_DISCOUNT_COUPON_PRODUCT' => $objCoupon->product_id ? isset($arrProductName[$objCoupon->product_id]) ? $arrProductName[$objCoupon->product_id] : $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PRODUCT_INVALID'] : $_ARRAYLANG['TXT_SHOP_PRODUCT_ANY'], 'SHOP_DISCOUNT_COUPON_PAYMENT' => $objCoupon->payment_id ? sprintf($_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PAYMENT_FORMAT'], $objCoupon->payment_id, $arrPaymentName[$objCoupon->payment_id]) : $_ARRAYLANG['TXT_SHOP_PAYMENT_ANY'], 'SHOP_DISCOUNT_COUPON_FUNCTIONS' => \Html::getBackendFunctions(array('edit' => ADMIN_SCRIPT_PATH . '?cmd=Shop&act=settings&tpl=coupon&edit=' . urlencode($index), 'delete' => "javascript:delete_coupon('" . urlencode($index) . "');")))); $objTemplate->parse('shopDiscountCouponView'); if ($index === $edit) { $objCouponEdit = $objCoupon; } } $objTemplate->replaceBlock('shopDiscountCouponView', '', true); $paging = \Paging::get($uri, $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_CODES'], $count, $limit); //DBG::log("Paging: $paging"); $objTemplate->setVariable('SHOP_PAGING', $paging); $attribute_code = 'style="width: 230px; text-align: left;" maxlength="20"'; $attribute_time = 'style="width: 230px; text-align: left;" maxlength="10"'; $attribute_discount_rate = 'style="width: 230px; text-align: right;" maxlength="3"'; $attribute_discount_amount = 'style="width: 230px; text-align: right;" maxlength="9"'; $attribute_minimum_amount = 'style="width: 230px; text-align: right;" maxlength="9"'; $attribute_uses = 'style="width: 230px; text-align: right;" maxlength="6"'; // Superseded by the widget, see below // $attribute_customer = 'style="width: 230px;"'; $attribute_product = 'style="width: 230px;"'; $attribute_payment = 'style="width: 230px;"'; $type = $objCouponEdit->discount_rate > 0 ? 'rate' : 'amount'; $customer_name = ''; //reset the add view if (!$edit) { $objCouponEdit = new Coupon(); } if ($objCouponEdit->customer_id) { $customer_name = Customers::getNameById($objCouponEdit->customer_id, '%4$s (%3$u)'); //DBG::log("Customer ID ".$objCouponEdit->customer_id.": name $customer_name"); } $objTemplate->setVariable(array('SHOP_ROWCLASS' => 'row' . (++$row % 2 + 1), 'SHOP_DISCOUNT_COUPON_INDEX' => $objCouponEdit->getIndex(), 'SHOP_DISCOUNT_COUPON_CODE' => \Html::getInputText('code', $objCouponEdit->code, '', $attribute_code), 'SHOP_DISCOUNT_COUPON_CODE_CREATE' => \Html::getInputButton('code_create', $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_CODE_NEW'], 'button', false, 'onclick="cx.jQuery(\'#code\').val(\'' . Coupon::getNewCode() . '\');' . 'cx.jQuery(this).css(\'display\', \'none\');"'), 'SHOP_DISCOUNT_COUPON_START_TIME' => \Html::getDatepicker('start_date', array('defaultDate' => date(ASCMS_DATE_FORMAT_DATE, $objCouponEdit->start_time ? $objCouponEdit->start_time : time())), $attribute_time), 'SHOP_DISCOUNT_COUPON_END_TIME' => \Html::getDatepicker('end_date', array('defaultDate' => $objCouponEdit->end_time ? date(ASCMS_DATE_FORMAT_DATE, $objCouponEdit->end_time) : ''), $attribute_time), 'SHOP_DISCOUNT_COUPON_END_TIME_UNLIMITED' => \Html::getCheckbox('end_time_unlimited', 1, '', $objCouponEdit->end_time ? '' : \Html::ATTRIBUTE_CHECKED) . \Html::getLabel('end_time_unlimited', $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_END_TIME_UNLIMITED']), 'SHOP_DISCOUNT_COUPON_MINIMUM_AMOUNT' => \Html::getInputText('minimum_amount', $objCouponEdit->minimum_amount, false, $attribute_minimum_amount), 'SHOP_DISCOUNT_COUPON_TYPE' => \Html::getRadioGroup('coupon_type', array('rate' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_TYPE_RATE'], 'amount' => $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_TYPE_AMOUNT']), $type), 'SHOP_DISCOUNT_COUPON_TYPE_SELECTED' => $type, 'SHOP_DISCOUNT_COUPON_RATE' => \Html::getInputText('discount_rate', $objCouponEdit->discount_rate, false, $attribute_discount_rate), 'SHOP_DISCOUNT_COUPON_AMOUNT' => \Html::getInputText('discount_amount', number_format($objCouponEdit->discount_amount, 2, '.', ''), false, $attribute_discount_amount), 'SHOP_DISCOUNT_COUPON_USES' => \Html::getInputText('uses', $objCouponEdit->uses < 1000000000.0 ? $objCouponEdit->uses : '', 'uses', $attribute_uses), 'SHOP_DISCOUNT_COUPON_USES_UNLIMITED' => \Html::getCheckbox('unlimited', 1, 'unlimited', $objCouponEdit->uses > 1000000000.0) . \Html::getLabel('unlimited', $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_USES_UNLIMITED']), 'SHOP_DISCOUNT_COUPON_GLOBALLY' => \Html::getRadio('global_or_customer', '1', 'global', $objCouponEdit->global) . \Html::getLabel('global', $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_GLOBALLY']), 'SHOP_DISCOUNT_COUPON_PER_CUSTOMER' => \Html::getRadio('global_or_customer', '0', 'customer', !$objCouponEdit->global) . \Html::getLabel('customer', $_ARRAYLANG['TXT_SHOP_DISCOUNT_COUPON_PER_CUSTOMER']), 'SHOP_DISCOUNT_COUPON_CUSTOMER_ID' => $objCouponEdit->customer_id, 'SHOP_DISCOUNT_COUPON_CUSTOMER_NAME' => $customer_name, 'SHOP_DISCOUNT_COUPON_PRODUCT' => \Html::getSelect('product_id', array(0 => $_ARRAYLANG['TXT_SHOP_PRODUCT_ANY']) + $arrProductName, $objCouponEdit->product_id, false, '', $attribute_product), 'SHOP_DISCOUNT_COUPON_PAYMENT' => \Html::getSelect('payment_id', array(0 => $_ARRAYLANG['TXT_SHOP_PAYMENT_ANY']) + $arrPaymentName, $objCouponEdit->payment_id, false, '', $attribute_payment), 'SHOP_DISCOUNT_COUPON_CUSTOMER_WIDGET_DISPLAY' => $objCouponEdit->global ? \Html::CSS_DISPLAY_NONE : \Html::CSS_DISPLAY_INLINE)); $objTemplate->parse('shopDiscountCouponEdit'); // Depends on, and thus implies loading jQuery as well! \FWUser::getUserLiveSearch(array('minLength' => 3, 'canCancel' => true, 'canClear' => true)); return $result; }
public function showTaskjobSummary($taskjob_data) { global $CFG_GLPI; $id = $taskjob_data['id']; $name = $taskjob_data['name']; if ($name == '') { $name = "({$id})"; } echo implode("\n", array("<td class='control'>", Html::getCheckbox(array('name' => 'taskjobs[]', 'value' => $id)), "</td>")); echo implode("\n", array("<td id='taskjob_{$id}' class='taskjob_block'>", " <a ", " href='#taskjobs_form'", " onclick='taskjobs.edit(", " \"" . $this->getBaseUrlFor('fi.job.edit') . "\", ", " {$id}", " )'>{$name}</a>", "</td>")); echo "<td class='rowhandler control'><div class='drag'/></td>"; }
/** * Summary of setLockedByMessage * Shows 'Locked by ' message and proposes to request unlock from locker **/ private function setLockedByMessage() { global $CFG_GLPI; // should get locking user info $user = new User(); $user->getFromDBByQuery(" WHERE id = " . $this->fields['users_id']); $useremail = new UserEmail(); $showAskUnlock = $useremail->getFromDBByQuery(" WHERE users_id = " . $this->fields['users_id'] . "\n AND is_default = 1 ") && $CFG_GLPI['use_mailing'] == 1; $completeUserName = formatUserName(0, $user->fields['name'], $user->fields['realname'], $user->fields['firstname']); if ($showAskUnlock) { $ret = Html::scriptBlock("\n function askUnlock() {\n \$('#message_after_lock').fadeToggle() ;\n " . Html::jsConfirmCallback(__('Ask for unlock item?'), $this->itemtypename . " #" . $this->itemid, "function() {\n \$.ajax({\n url: '" . $CFG_GLPI['root_doc'] . "/ajax/unlockobject.php',\n cache: false,\n data: 'requestunlock=1&id=" . $this->fields['id'] . "',\n success: function( data, textStatus, jqXHR ) {\n " . Html::jsAlertCallback($completeUserName, __('Request sent to'), "function() { \$('#message_after_lock').fadeToggle() ; }") . "\n }\n });\n }", "function() {\n \$('#message_after_lock').fadeToggle() ;\n }") . "\n }\n\n "); echo $ret; } $ret = Html::scriptBlock("\n \$(function(){\n var lockStatusTimer ;\n \$('#alertMe').change(function( eventObject ){\n if( this.checked ) {\n lockStatusTimer = setInterval( function() {\n \$.ajax({\n url: '" . $CFG_GLPI['root_doc'] . "/ajax/unlockobject.php',\n cache: false,\n data: 'lockstatus=1&id=" . $this->fields['id'] . "',\n success: function( data, textStatus, jqXHR ) {\n if( data == 0 ) {\n clearInterval(lockStatusTimer);\n \$('#message_after_lock').fadeToggle() ;" . Html::jsConfirmCallback(__('Reload page?'), __('Item unlocked!'), "function() {\n window.location.reload(true);\n }") . "\n }\n }\n });\n },15000)\n } else {\n clearInterval(lockStatusTimer);\n }\n });\n });\n "); echo $ret; $msg = "<table><tr><td class=red nowrap>"; $msg .= __('Locked by ') . "<a href='" . $user->getLinkURL() . "'>{$completeUserName}</a> -> " . Html::convDateTime($this->fields['date_mod']); $msg .= "</td><td nowrap>"; if ($showAskUnlock) { $msg .= "<a class='vsubmit' onclick='javascript:askUnlock();'>" . __('Ask for unlock') . "</a>"; } $msg .= "</td><td> </td><td>" . __('Alert me when unlocked') . "</td><td> " . Html::getCheckbox(array('id' => 'alertMe')) . "</td></tr></table>"; $this->displayLockMessage($msg); }
static function view_settings_general() { // General settings self::$objTemplate->addBlockfile('SHOP_SETTINGS_FILE', 'settings_block', 'module_shop_settings_general.html'); // TODO: Temporary. Remove in release with working update // Returns NULL on missing entries even when other settings are properly loaded $test = \Cx\Core\Setting\Controller\Setting::getValue('shopnavbar_on_all_pages', 'Shop'); if ($test === NULL) { ShopSettings::errorHandler(); \Cx\Core\Setting\Controller\Setting::init('Shop', 'config'); } self::$objTemplate->setVariable(array('SHOP_CONFIRMATION_EMAILS' => \Cx\Core\Setting\Controller\Setting::getValue('email_confirmation', 'Shop'), 'SHOP_CONTACT_EMAIL' => \Cx\Core\Setting\Controller\Setting::getValue('email', 'Shop'), 'SHOP_CONTACT_COMPANY' => \Cx\Core\Setting\Controller\Setting::getValue('company', 'Shop'), 'SHOP_CONTACT_ADDRESS' => \Cx\Core\Setting\Controller\Setting::getValue('address', 'Shop'), 'SHOP_CONTACT_TEL' => \Cx\Core\Setting\Controller\Setting::getValue('telephone', 'Shop'), 'SHOP_CONTACT_FAX' => \Cx\Core\Setting\Controller\Setting::getValue('fax', 'Shop'), 'SHOP_GENERAL_COUNTRY_MENUOPTIONS' => \Cx\Core\Country\Controller\Country::getMenuoptions(\Cx\Core\Setting\Controller\Setting::getValue('country_id', 'Shop')), 'SHOP_THUMBNAIL_MAX_WIDTH' => \Cx\Core\Setting\Controller\Setting::getValue('thumbnail_max_width', 'Shop'), 'SHOP_THUMBNAIL_MAX_HEIGHT' => \Cx\Core\Setting\Controller\Setting::getValue('thumbnail_max_height', 'Shop'), 'SHOP_THUMBNAIL_QUALITY' => \Cx\Core\Setting\Controller\Setting::getValue('thumbnail_quality', 'Shop'), 'SHOP_WEIGHT_ENABLE_CHECKED' => \Cx\Core\Setting\Controller\Setting::getValue('weight_enable', 'Shop') ? \Html::ATTRIBUTE_CHECKED : '', 'SHOP_SHOW_PRODUCTS_DEFAULT_OPTIONS' => Products::getDefaultViewMenuoptions(\Cx\Core\Setting\Controller\Setting::getValue('show_products_default', 'Shop')), 'SHOP_PRODUCT_SORTING_MENUOPTIONS' => Products::getProductSortingMenuoptions(), 'SHOP_ORDERITEMS_AMOUNT_MAX' => Currency::formatPrice(\Cx\Core\Setting\Controller\Setting::getValue('orderitems_amount_max', 'Shop')), 'SHOP_ORDERITEMS_AMOUNT_MIN' => Currency::formatPrice(\Cx\Core\Setting\Controller\Setting::getValue('orderitems_amount_min', 'Shop')), 'SHOP_CURRENCY_CODE' => Currency::getCurrencyCodeById(Currency::getDefaultCurrencyId()), 'SHOP_SETTING_CART_USE_JS' => \Html::getCheckbox('use_js_cart', 1, false, \Cx\Core\Setting\Controller\Setting::getValue('use_js_cart', 'Shop')), 'SHOP_SETTING_SHOPNAVBAR_ON_ALL_PAGES' => \Html::getCheckbox('shopnavbar_on_all_pages', 1, false, \Cx\Core\Setting\Controller\Setting::getValue('shopnavbar_on_all_pages', 'Shop')), 'SHOP_SETTING_REGISTER' => \Html::getSelectCustom('register', ShopLibrary::getRegisterMenuoptions(\Cx\Core\Setting\Controller\Setting::getValue('register', 'Shop')), false, '', 'style="width: 270px;"'), 'SHOP_SETTING_NUMOF_PRODUCTS_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_products_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_ORDERS_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_orders_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_CUSTOMERS_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_customers_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_MANUFACTURERS_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_manufacturers_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_MAILTEMPLATE_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_mailtemplate_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_COUPON_PER_PAGE_BACKEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_coupon_per_page_backend', 'Shop'), 'SHOP_SETTING_NUMOF_PRODUCTS_PER_PAGE_FRONTEND' => \Cx\Core\Setting\Controller\Setting::getValue('numof_products_per_page_frontend', 'Shop'), 'SHOP_SETTING_USERGROUP_ID_CUSTOMER' => \Html::getSelect('usergroup_id_customer', \UserGroup::getNameArray(), \Cx\Core\Setting\Controller\Setting::getValue('usergroup_id_customer', 'Shop'), '', '', 'tabindex="0" style="width: 270px;"'), 'SHOP_SETTING_USERGROUP_ID_RESELLER' => \Html::getSelect('usergroup_id_reseller', \UserGroup::getNameArray(), \Cx\Core\Setting\Controller\Setting::getValue('usergroup_id_reseller', 'Shop'), '', '', 'tabindex="0" style="width: 270px;"'), 'SHOP_SETTING_USER_PROFILE_ATTRIBUTE_CUSTOMER_GROUP_ID' => \Html::getSelect('user_profile_attribute_customer_group_id', \User_Profile_Attribute::getCustomAttributeNameArray(), \Cx\Core\Setting\Controller\Setting::getValue('user_profile_attribute_customer_group_id', 'Shop'), '', '', 'tabindex="0" style="width: 270px;"'), 'SHOP_SETTING_USER_PROFILE_ATTRIBUTE_NOTES' => \Html::getSelect('user_profile_attribute_notes', \User_Profile_Attribute::getCustomAttributeNameArray(), \Cx\Core\Setting\Controller\Setting::getValue('user_profile_attribute_notes', 'Shop'), '', '', 'tabindex="0" style="width: 270px;"'))); }
/** * Show the selected mail template for editing * * Stores the MailTemplate if the 'bsubmit' parameter has been posted. * If the $key argument is empty, tries to pick the value from * $_REQUEST['key']. * @param mixed $section The section of the mail template * to be edited * @param string $key The optional key of the mail template * to be edited * @param string $act The action of the mail template * @return \Cx\Core\Html\Sigma The template object */ static function edit($section, $key = '', $useDefaultActs = true, $act = 'mailtemplate_overview') { global $_CORELANG; // If the $key parameter is empty, check the request if (empty($key)) { if (isset($_REQUEST['key'])) { $key = $_REQUEST['key']; } } // Try to load an existing template for any non-empty key $arrTemplate = null; if ($key != '') { $arrTemplate = self::get($section, $key, FRONTEND_LANG_ID); } // If there is none, get an empty template $new = false; if (!$arrTemplate) { $new = true; $arrTemplate = self::getEmpty($key); } // Copy the template? if (isset($_REQUEST['copy'])) { $arrTemplate['key'] = ''; $new = true; } $objTemplate = new \Cx\Core\Html\Sigma(\Env::get('cx')->getCodeBaseCorePath() . '/MailTemplate/View/Template/Generic'); $objTemplate->setErrorHandling(PEAR_ERROR_DIE); \Cx\Core\Csrf\Controller\Csrf::add_placeholder($objTemplate); if (!$objTemplate->loadTemplateFile('Edit.html')) { die("Failed to load template Edit.html"); } $uri = \Html::getRelativeUri_entities(); \Html::stripUriParam($uri, 'key'); $uriAppendix = ''; if ($useDefaultActs) { \Html::stripUriParam($uri, 'act'); $uriAppendix = '&act=' . $act; } $tab_index = \Cx\Core\Setting\Controller\Setting::tab_index(); \Html::replaceUriParameter($uri, 'active_tab=' . $tab_index); \Html::replaceUriParameter($uri, 'userFrontendLangId=' . FRONTEND_LANG_ID); $objTemplate->setGlobalVariable($_CORELANG + array('CORE_MAILTEMPLATE_EDIT_TITLE' => $new ? $_CORELANG['TXT_CORE_MAILTEMPLATE_ADD'] : $_CORELANG['TXT_CORE_MAILTEMPLATE_EDIT'], 'CORE_MAILTEMPLATE_CMD' => isset($_REQUEST['cmd']) ? $_REQUEST['cmd'] : '', 'CORE_MAILTEMPLATE_ACTIVE_TAB' => $tab_index, 'URI_BASE' => $uri . $uriAppendix)); $i = 0; foreach ($arrTemplate as $name => $value) { // See if there is a posted parameter value if (isset($_POST[$name])) { $value = $_POST[$name]; } // IDs are set up as hidden fields. // They *MUST NOT* be edited! if (preg_match('/(?:_id)$/', $name)) { // For copies, IDs *MUST NOT* be reused! if (isset($_REQUEST['copy'])) { $value = 0; } $objTemplate->setVariable('MAILTEMPLATE_HIDDEN', \Html::getHidden($name, $value)); $objTemplate->parse('core_mailtemplate_hidden'); continue; } // Regular inputs of various kinds $input = ''; $attribute = ''; // $arrMimetype = ''; switch ($name) { case 'available': continue 2; /* TODO: WARNING: FCKEditor v2.x f***s up the blocks in the mail template! Use plain text areas instead. See below. */ /* TODO: WARNING: FCKEditor v2.x f***s up the blocks in the mail template! Use plain text areas instead. See below. */ case 'message_html': // Show WYSIWYG only if HTML is enabled if (empty($arrTemplate['html'])) { continue 2; } $objTemplate->setVariable(array('MAILTEMPLATE_ROWCLASS' => ++$i % 2 + 1, 'MAILTEMPLATE_SPECIAL' => $_CORELANG['TXT_CORE_MAILTEMPLATE_' . strtoupper($name)])); $objTemplate->touchBlock('core_mailtemplate_special'); $objTemplate->parse('core_mailtemplate_special'); $objTemplate->setVariable(array('MAILTEMPLATE_ROWCLASS' => ++$i % 2 + 1, 'MAILTEMPLATE_SPECIAL' => new \Cx\Core\Wysiwyg\Wysiwyg($name, $value, 'fullpage'))); $objTemplate->touchBlock('core_mailtemplate_special'); $objTemplate->parse('core_mailtemplate_special'); continue 2; //$objTemplate->replaceBlock('core_mailtemplate_special', '', true); // case 'message_html': //$objTemplate->replaceBlock('core_mailtemplate_special', '', true); // case 'message_html': case 'message': $input = \Html::getTextarea($name, $value, '', 10, 'style="width: 600px;"'); break; case 'protected': $attribute = \Html::ATTRIBUTE_DISABLED; $input = \Html::getCheckbox($name, 1, '', $value, '', $attribute); break; case 'html': $input = \Html::getCheckbox($name, 1, '', $value, '', $attribute) . ' ' . $_CORELANG['TXT_CORE_MAILTEMPLATE_STORE_TO_SWITCH_EDITOR']; break; case 'inline': case 'attachments': continue 2; // TODO: These do not work properly yet /* // These are identical except for the MIME types case 'inline': $arrMimetype = \Filetype::getImageMimetypes(); case 'attachments': $arrAttachments = self::attachmentsToArray($arrTemplate[$name]); // Show at least one empty attachment/inline row if (empty($arrAttachments)) $arrAttachments = array(array('path' => '', ), ); $i = 0; foreach ($arrAttachments as $arrAttachment) { $div_id = $name.'-'.(++$i); $element_name = $name.'['.$i.']'; $input .= '<div id="'.$div_id.'">'. \Html::getHidden( $element_name.'[old]', $arrAttachment['path'], $name.'-hidden-'.$i). $arrAttachment['path'].' '. $_CORELANG['TXT_CORE_MAILTEMPLATE_ATTACHMENT_UPLOAD']. \Html::getInputFileupload( $element_name.'[new]', $name.'-file-'.$i, \Filetype::MAXIMUM_UPLOAD_FILE_SIZE, $arrMimetype). // Links for adding/removing inputs \Html::getRemoveAddLinks($div_id). '</div>'; } //echo("$name => ".htmlentities($input)."<hr />"); break; */ // Once the key is defined, it cannot be changed. // To fix a wrong key, copy the old template and enter a new key, // then delete the old one. // TODO: These do not work properly yet /* // These are identical except for the MIME types case 'inline': $arrMimetype = \Filetype::getImageMimetypes(); case 'attachments': $arrAttachments = self::attachmentsToArray($arrTemplate[$name]); // Show at least one empty attachment/inline row if (empty($arrAttachments)) $arrAttachments = array(array('path' => '', ), ); $i = 0; foreach ($arrAttachments as $arrAttachment) { $div_id = $name.'-'.(++$i); $element_name = $name.'['.$i.']'; $input .= '<div id="'.$div_id.'">'. \Html::getHidden( $element_name.'[old]', $arrAttachment['path'], $name.'-hidden-'.$i). $arrAttachment['path'].' '. $_CORELANG['TXT_CORE_MAILTEMPLATE_ATTACHMENT_UPLOAD']. \Html::getInputFileupload( $element_name.'[new]', $name.'-file-'.$i, \Filetype::MAXIMUM_UPLOAD_FILE_SIZE, $arrMimetype). // Links for adding/removing inputs \Html::getRemoveAddLinks($div_id). '</div>'; } //echo("$name => ".htmlentities($input)."<hr />"); break; */ // Once the key is defined, it cannot be changed. // To fix a wrong key, copy the old template and enter a new key, // then delete the old one. case 'key': $input = $arrTemplate['key'] ? $value . \Html::getHidden($name, $value) : \Html::getInputText($name, $value, '', 'style="width: 300px;"'); //echo("Key /$key/ -> attr $attribute<br />"); break; default: $input = \Html::getInputText($name, $value, '', 'style="width: 300px;"'); } $name_upper = strtoupper($name); $objTemplate->setVariable(array('MAILTEMPLATE_ROWCLASS' => ++$i % 2 + 1, 'MAILTEMPLATE_NAME' => $_CORELANG['TXT_CORE_MAILTEMPLATE_' . $name_upper], 'MAILTEMPLATE_VALUE' => $input)); // Add note with helpful hints, if available if (isset($_CORELANG['TXT_CORE_MAILTEMPLATE_NOTE_' . $name_upper])) { $objTemplate->setVariable('MAILTEMPLATE_VALUE_NOTE', $_CORELANG['TXT_CORE_MAILTEMPLATE_NOTE_' . $name_upper]); } $objTemplate->parse('core_mailtemplate_row'); } // Send the (possibly edited and now stored) mail, if requested if (empty($_POST['to_test'])) { return $objTemplate; } if (empty($key)) { \Message::error($_CORELANG['TXT_CORE_MAILTEMPLATE_ERROR_NO_KEY']); return $objTemplate; } $to_test = contrexx_input2raw($_POST['to_test']); $objTemplate->setVariable('CORE_MAILTEMPLATE_TO_TEST', $to_test); self::sendTestMail($section, $key, $to_test); return $objTemplate; }