width = $width; // Height. $this->height = $height; // Grid Width. $this->gridWidth = $gridWidth; // Cell Id. $this->cellId = $cellId; // Options. $this->values = $this->decoders($this->getOptionsWidget()); // Positions. $this->position = $this->getPositionWidget(); // Page. $this->page = basename(__FILE__); // ClassName. $class = new \ReflectionClass($this); $this->className = $class->getShortName(); // Title. $this->title = __('Pandora ITSM tickets'); // Name. if (empty($this->name) === true) { $this->name = 'ITSMIncidences'; } // This forces at least a first configuration. $this->configurationRequired = false; if (isset($config['ITSM_enabled']) === false || (bool) $config['ITSM_enabled'] === false) { $this->configurationRequired = true; } else { if (empty($this->values['customSearch']) === true || empty($this->values['fields']) === true) { $this->configurationRequired = true; } } $this->overflow_scrollbars = false; } /** * Decoders hack for retrocompability. * * @param array $decoder Values. * * @return array Returns the values ​​with the correct key. */ public function decoders(array $decoder): array { $values = []; // Retrieve global - common inputs. $values = parent::decoders($decoder); if (isset($decoder['show_full_legend']) === true) { $values['showLegend'] = $decoder['show_full_legend']; } if (isset($decoder['fields']) === true) { if (is_array($decoder['fields']) === true) { $decoder['fields'] = implode(',', $decoder['fields']); } $values['fields'] = $decoder['fields']; } if (isset($decoder['limit']) === true) { $values['limit'] = $decoder['limit']; } if (isset($decoder['customSearch']) === true) { $values['customSearch'] = $decoder['customSearch']; } return $values; } /** * Generates inputs for form (specific). * * @return array Of inputs. * * @throws Exception On error. */ public function getFormInputs(): array { global $config; $values = $this->values; // Retrieve global - common inputs. $inputs = parent::getFormInputs(); // Default values. if (isset($values['fields']) === false) { $values['fields'] = implode( ',', [ 'idIncidence', 'title', 'priority', 'idCreator', ] ); } if (isset($values['limit']) === false) { $values['limit'] = $config['block_size']; } $inputs[] = [ 'label' => __('Limit'), 'arguments' => [ 'type' => 'number', 'name' => 'limit', 'value' => $values['limit'], 'return' => true, 'max' => 100, 'min' => 0, ], ]; $customSearches = []; if (isset($config['ITSM_enabled']) === true && (bool) $config['ITSM_enabled'] === true) { try { $ITSM = new ITSM(); $customSearches = $ITSM->listCustomSearch(); } catch (\Throwable $th) { $error = $th->getMessage(); } } $inputs[] = [ 'label' => __('Custom search'), 'arguments' => [ 'type' => 'select', 'fields' => $customSearches, 'name' => 'customSearch', 'selected' => $values['customSearch'], 'return' => true, 'sort' => false, ], ]; $fields = [ 'idIncidence' => __('ID'), 'title' => __('Title'), 'groupCompany' => __('Group').'/'.__('Company'), 'statusResolution' => __('Status').'/'.__('Resolution'), 'priority' => __('Priority'), 'updateDate' => __('Updated'), 'startDate' => __('Started'), 'idCreator' => __('Creator'), 'owner' => __('Owner'), ]; $inputs[] = [ 'label' => __('Fields to show'), 'arguments' => [ 'type' => 'select', 'fields' => $fields, 'name' => 'fields[]', 'selected' => explode(',', $values['fields']), 'return' => true, 'multiple' => true, 'sort' => false, ], ]; return $inputs; } /** * Get Post for widget. * * @return array */ public function getPost():array { // Retrieve global - common inputs. $values = parent::getPost(); $values['fields'] = \get_parameter('fields', []); $values['limit'] = \get_parameter('limit', 20); $values['customSearch'] = \get_parameter('customSearch', 20); return $values; } /** * Draw widget. * * @return string; */ public function load() { global $config; \ui_require_css_file('pandoraitsm', 'include/styles/', true); $fields = [ 'idIncidence' => __('ID'), 'title' => __('Title'), 'groupCompany' => __('Group').'/'.__('Company'), 'statusResolution' => __('Status').'/'.__('Resolution'), 'priority' => __('Priority'), 'updateDate' => __('Updated'), 'startDate' => __('Started'), 'idCreator' => __('Creator'), 'owner' => __('Owner'), ]; $fields_selected = explode(',', $this->values['fields']); if (is_array($fields_selected) === false && empty($fields_selected) === true) { $output = ''; $output .= '
'; $output .= \ui_print_info_message( __('Not found fields selected'), '', true ); $output .= '
'; return $output; } $columns = $fields_selected; $column_names = []; foreach ($fields_selected as $field) { $column_names[] = $fields[$field]; } $tableId = 'ITSMIncidence_'.$this->dashboardId.'_'.$this->cellId; try { ui_print_datatable( [ 'id' => $tableId, 'class' => 'info_table', 'style' => 'width: 99%', 'columns' => $columns, 'column_names' => $column_names, 'ajax_url' => 'operation/ITSM/itsm', 'ajax_data' => [ 'method' => 'getListTickets', 'customSearch' => $this->values['customSearch'], ], 'order' => [ 'field' => 'updateDate', 'direction' => 'desc', ], 'csv' => 0, 'dom_elements' => 'frtip', 'default_pagination' => $this->values['limit'], ] ); } catch (\Exception $e) { echo $e->getMessage(); } } /** * Get description. * * @return string. */ public static function getDescription() { return __('Pandora ITSM tickets'); } /** * Get Name. * * @return string. */ public static function getName() { return 'ITSMIncidences'; } /** * Get size Modal Configuration. * * @return array */ public function getSizeModalConfiguration(): array { $size = [ 'width' => 450, 'height' => 430, ]; return $size; } }