. */ namespace HTMLBuilder\Manager; use Util\Query; /** * @since 2.4 */ class WidgetManager implements ManagerInterface { public function manage($options) { $result = ''; if (isset($options['id'])) { $result = $this->widget($options); } else { $result = $this->group($options); } return $result; } protected function widget($options) { $database = database(); // Widget richiesto $widget = $database->fetchArray('SELECT * FROM zz_widgets WHERE id = '.prepare($options['id']))[0]; $result = ' '; // Generazione del widget in base al tipo switch ($widget['type']) { // Stampa case 'print': $result = $this->prints($widget); break; // Statistiche case 'stats': $result = $this->stats($widget); break; // Chart (codice PHP) case 'chart': $result = $this->chart($widget); break; // Personalizzato (codice PHP e icona) case 'custom': $result = $this->custom($widget); break; } return $result; } protected static function getModule() { return \Modules::get('Stato dei servizi'); } protected function prints($widget) { return $this->stats($widget); } protected function stats($widget) { // Individuazione della query relativa $query = $widget['query']; $additionals = \Modules::getAdditionalsQuery($widget['id_module']); if (!empty($additionals)) { $query = str_replace('1=1', '1=1 '.$additionals, $query); } $query = Query::replacePlaceholder($query); // Individuazione del risultato della query $database = database(); $value = null; if (!empty($query)) { $value = $database->fetchArray($query)[0]['dato']; if (!preg_match('/\\d/', $value)) { $value = '-'; } } return $this->render($widget, $widget['text'], $value); } protected function chart($widget, $number = null) { $content = null; if (!empty($widget['php_include'])) { $is_title_request = true; ob_start(); include base_dir().'/'.$widget['php_include']; $content = ob_get_clean(); } return $this->render($widget, $content, $number); } protected function custom($widget) { $content = null; if (!empty($widget['php_include'])) { $is_number_request = true; ob_start(); include base_dir().'/'.$widget['php_include']; $content = ob_get_clean(); } return $this->render($widget, $widget['text'], $content); } protected function render($widget, $title, $number = null) { $result = ' '; if (!empty($widget['more_link'])) { $result .= ' '; if (!empty($widget['icon'])) { $result .= ' '; } $result .= '
'.$title.' '.(!empty($widget['help']) ? '' : '').' '; if (isset($number)) { $result .= ' '.$number.''; } $result .= '
'; $result .= ' '; if (!empty($widget['more_link'])) { $result .= '
'; } return $result; } protected function group($options) { $query = 'SELECT id FROM zz_widgets WHERE id_module = '.prepare($options['id_module']).' AND (|position|) AND enabled = 1 ORDER BY `order` ASC'; // Mobile (tutti i widget a destra) if (isMobile()) { if ($options['position'] == 'right') { $position = "location = '".$options['place']."_right' OR location = '".$options['place']."_top'"; } elseif ($options['position'] == 'top') { $position = '1=0'; } } // Widget a destra elseif ($options['position'] == 'right') { $position = "location = '".$options['place']."_right'"; } // Widget in alto elseif ($options['position'] == 'top') { $position = "location = '".$options['place']."_top'"; } $query = str_replace('|position|', $position, $query); // Individuazione dei widget interessati $database = database(); $widgets = $database->fetchArray($query); $result = ' '; // Generazione del codice HTML if (!empty($widgets)) { $row_max = count($widgets); if ($row_max > 4) { $row_max = 4; } elseif ($row_max < 2) { $row_max = 2; } $result = ' '; } return $result; } }