'noaccess']); } include 'general/noaccess.php'; exit; } // Set baseUrl for use it in several locations in this class. $this->baseUrl = ui_get_full_url('index.php?sec=gmodules&sec2=godmode/modules/manage_module_templates'); // Capture all parameters before start. $this->id_np = get_parameter('id_np', -1); $this->name = get_parameter('name', ''); $this->description = get_parameter('description', ''); $this->pen = get_parameter('pen', ''); $this->offset = get_parameter('offset', 0); $this->ajaxController = $ajax_controller; $this->ncGroup = get_parameter('add-modules-group', '0'); $this->ncFilter = get_parameter('add-modules-filter', ''); return $this; } /** * Run main page. * * @return void */ public function run() { // Require specific CSS and JS. ui_require_css_file('wizard'); ui_require_css_file('discovery'); // Header section. // Breadcrums. $this->setBreadcrum([]); $this->prepareBreadcrum( [ [ 'link' => '', 'label' => __('Configuration'), 'selected' => false, ], [ 'link' => '', 'label' => __('Templates'), 'selected' => false, ], [ 'link' => $this->baseUrl, 'label' => __('Module template management'), 'selected' => true, ], ], true ); ui_print_page_header( __('Module template management'), '', false, '', true, '', false, '', GENERIC_SIZE_TEXT, '', $this->printHeader(true) ); } /** * Get the value of this current thing ??? * * @return integer Id of this thing ??? */ public function getIdNp() { return $this->id_np; } /** * Save or Update the data received. * * @return void */ public function processData() { // Get action if is needed. $action = get_parameter('submit_button', ''); $modules_submit = get_parameter('add-modules-submit', ''); // Success variable. $success = false; // Evaluate the modules allowed. if (!empty($action)) { $numberComponent = []; foreach ($_POST as $k => $value) { if (strpos($k, 'module_check_') >= 0 && $value == 1) { $tmpNumberComponent = explode('_', $k); $numberComponent[] = $tmpNumberComponent[2]; } } switch ($action) { case 'Update': $dbResult_tnp = db_process_sql_update( 'tnetwork_profile', [ 'name' => $this->name, 'description' => $this->description, ], ['id_np' => $this->id_np] ); if ($dbResult_tnp === false) { $success = false; } else { db_process_sql_delete('tnetwork_profile_pen', ['id_np' => $this->id_np]); $pensList = explode(',', $this->pen); if (count($pensList) > 0) { // Set again the new PENs associated. foreach ($pensList as $currentPen) { $dbResult_pen = db_process_sql_insert( 'tnetwork_profile_pen', [ 'pen' => $currentPen, 'id_np' => $this->id_np, ] ); if ($dbResult_pen === false) { $success = false; break; } $success = true; } } else { $success = true; } } break; case 'Create': $dbResult_tnp = db_process_sql_insert( 'tnetwork_profile', [ 'name' => $this->name, 'description' => $this->description, ] ); // The insert gone fine! if ($dbResult_tnp != false) { // Set the new id_np. $this->id_np = $dbResult_tnp; $pensList = explode(',', $this->pen); // Insert all of new PENs associated with this id_np. foreach ($pensList as $currentPen) { $dbResult_pen = db_process_sql_insert( 'tnetwork_profile_pen', [ 'pen' => $currentPen, 'id_np' => $this->id_np, ] ); // If something is wrong, is better stop. if ($dbResult_pen === false) { break; } $success = true; } } break; case 'Delete': // Only in this case, catch delete_profile. $deleteProfile = get_parameter('delete_profile', -1); $dbResult = db_process_sql_delete('tnetwork_profile', ['id_np' => $deleteProfile]); if ($dbResult != false) { $success = true; } break; default: $success = false; break; } if ($success === false) { ui_print_error_message(__('Error saving data')); } else { ui_print_success_message(__('Changes saved sucessfully')); } } else if ($modules_submit != '') { $modulesToAdd = get_parameter('add-modules-components-values', ''); $modulesToAddList = explode(',', $modulesToAdd); foreach ($modulesToAddList as $module) { db_process_sql_insert( 'tnetwork_profile_component', [ 'id_nc' => $module, 'id_np' => $this->id_np, ] ); } } } /** * Show the adding modules form * * @return void */ public function addingModulesForm() { // Get the groups for select input $result = db_get_all_rows_in_table('tnetwork_component_group', 'name'); if ($result === false) { $result = []; } // 2 arrays. 1 with the groups, 1 with the groups by parent $groups = []; $groups_compound = []; // Default group filter. $groups_compound[0] = 'Group - All'; foreach ($result as $row) { $groups[$row['id_sg']] = $row['name']; } foreach ($result as $row) { $groups_compound[$row['id_sg']] = ''; if ($row['parent'] > 1) { $groups_compound[$row['id_sg']] = $groups[$row['parent']].' / '; } $groups_compound[$row['id_sg']] .= $row['name']; } // Get the components for show in a list for select if ($this->ncGroup > 0) { $sql = sprintf( " SELECT id_nc, name, id_group FROM tnetwork_component WHERE id_group = %d AND name LIKE '%".$this->ncFilter."%' ORDER BY name", $this->ncGroup ); } else { $sql = " SELECT id_nc, name, id_group FROM tnetwork_component WHERE name LIKE '%".$this->ncFilter."%' ORDER BY name"; } $result = db_get_all_rows_sql($sql); $components = []; if ($result === false) { $result = []; } foreach ($result as $row) { $components[$row['id_nc']] = $row['name']; } // Main form. $form = [ 'action' => $this->baseUrl, 'id' => 'add_module_form', 'method' => 'POST', 'class' => 'databox filters', 'extra' => '', ]; // Inputs. $inputs = []; $inputs[] = [ 'id' => 'inp-id_np', 'arguments' => [ 'name' => 'id_np', 'type' => 'hidden', 'value' => $this->id_np, 'return' => true, ], ]; $inputs[] = [ 'id' => 'add-modules-components-values', 'arguments' => [ 'name' => 'add-modules-components-values', 'type' => 'hidden', 'value' => '', 'return' => true, ], ]; $inputs[] = [ 'label' => __('Filter'), 'id' => 'txt-add-modules-filter', 'arguments' => [ 'name' => 'add-modules-filter', 'input_class' => 'flex-row', 'type' => 'text', 'value' => '', 'return' => true, ], ]; $inputs[] = [ 'label' => __('Group'), 'id' => 'add-modules-group', 'arguments' => [ 'name' => 'add-modules-group', 'input_class' => 'flex-row', 'type' => 'select', 'script' => 'this.form.submit()', 'fields' => $groups_compound, 'nothing' => $groups_compound[$this->ncGroup], 'return' => true, ], ]; $inputs[] = [ 'label' => __('Components'), 'id' => 'slc-add-modules-components2', 'arguments' => [ 'name' => 'add-modules-components', 'input_class' => 'flex-row', 'type' => 'select', 'multiple' => true, 'fields' => $components, 'return' => true, ], ]; $inputs[] = [ 'arguments' => [ 'label' => __('Add components'), 'name' => 'add-modules-submit', 'type' => 'submit', 'attributes' => 'class="sub wand"', 'return' => true, ], ]; $this->printFormAsList( [ 'form' => $form, 'inputs' => $inputs, true ] ); } /** * General setter * * @return void */ private function setNetworkProfile() { // Get t $profileInfo = db_get_row('tnetwork_profile', 'id_np', $this->id_np); $this->name = $profileInfo['name']; $this->description = $profileInfo['description']; $penInfo = db_get_all_rows_filter('tnetwork_profile_pen', ['id_np' => $this->id_np]); $penList = []; foreach ($penInfo as $pen) { $penList[] = $pen['pen']; } $this->pen = implode(',', $penList); } /** * Create the table with the list of Blocks Templates * * @return html Formed table */ public function moduleBlockList() { global $config; // Get the count of Blocks. $countModuleBlocks = db_get_value( 'count(*)', 'tnetwork_profile' ); // Get all the data. $resultModuleBlocksTable = db_get_all_rows_filter( 'tnetwork_profile', [ 'order' => 'name', 'limit' => $config['block_size'], 'offset' => $this->offset, ] ); ui_pagination($countModuleBlocks, false, $this->offset); // Create the table with Module Block list. $table = new StdClasS(); $table->class = 'databox data'; $table->width = '75%'; $table->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white;'; $table->rowid = []; $table->data = []; $table->cellpadding = 0; $table->cellspacing = 0; $table->width = '100%'; $table->class = 'info_table'; $table->head = []; $table->head[0] = html_print_checkbox('all_delete', 0, false, true, false); $table->head[1] = __('Name'); $table->head[2] = __('Description'); $table->head[3] = ''.__('Action').''; $table->size = []; $table->size[0] = '20px'; $table->size[2] = '65%'; $table->size[3] = '15%'; $table->align = []; $table->align[3] = 'left'; $table->data = []; foreach ($resultModuleBlocksTable as $row) { $data = []; $data[0] = html_print_checkbox_extended('delete_multiple[]', $row['id_np'], false, false, '', 'class="check_delete"', true); $data[1] = ''.io_safe_output($row['name']).''; $data[2] = ui_print_truncate_text(io_safe_output($row['description']), 'description', true, true, true, '[…]'); $table->cellclass[][3] = 'action_buttons'; $data[3] = html_print_input_image( 'delete_profile', 'images/cross.png', $row['id_np'], '', true, ['onclick' => 'if (!confirm(\''.__('Are you sure?').'\')) return false;'] ); $data[3] .= html_print_input_image( 'export_profile', 'images/csv.png', $row['id_np'], '', true, ['title' => 'Export to CSV'] ); $data[3] = ''.html_print_image('images/cross.png', true, ['title' => __('Delete')]).''; $data[3] .= ''.html_print_image('images/csv.png', true, ['title' => __('Export to CSV')]).''; array_push($table->data, $data); } html_print_table($table); $output = '
'; $form = [ 'method' => 'POST', 'action' => $this->baseUrl, ]; $inputs[] = [ 'arguments' => [ 'name' => 'id_np', 'type' => 'hidden', 'value' => 0, 'return' => true, ], ]; $inputs[] = [ 'arguments' => [ 'label' => __('Create'), 'name' => 'crt', 'type' => 'submit', 'attributes' => 'class="sub wand"', 'return' => true, ], ]; $output .= $this->printForm( [ 'form' => $form, 'inputs' => $inputs, ], true ); $output .= '
'; echo $output; } /** * Prints Form for template management */ public function moduleTemplateForm() { $createNewBlock = ($this->id_np == 0) ? true : false; if ($createNewBlock) { // Assignation for submit button. $formButtonClass = 'sub wand'; $formButtonValue = 'create'; $formButtonLabel = __('Create'); } else { // Assignation for submit button. $formButtonClass = 'sub upd'; $formButtonValue = 'update'; $formButtonLabel = __('Update'); // Profile exists. Set the attributes with the info. $this->setNetworkProfile(); } // Main form. $form = [ 'action' => $this->baseUrl, 'id' => 'module_block_form', 'method' => 'POST', 'class' => 'databox filters', 'extra' => '', ]; // Inputs. $inputs = []; // Inputs. $rawInputs = ''; $inputs[] = [ 'id' => 'inp-id_np', 'arguments' => [ 'name' => 'id_np', 'type' => 'hidden', 'value' => $this->id_np, 'return' => true, ], ]; $inputs[] = [ 'label' => __('Name'), 'id' => 'inp-name', 'arguments' => [ 'name' => 'name', 'input_class' => 'flex-row', 'type' => 'text', 'value' => $this->name, 'return' => true, ], ]; $inputs[] = [ 'label' => __('Description'), 'id' => 'inp-description', 'arguments' => [ 'name' => 'description', 'input_class' => 'flex-row', 'type' => 'textarea', 'value' => $this->description, 'return' => true, ], ]; $inputs[] = [ 'label' => __('PEN'), 'id' => 'inp-pen', 'arguments' => [ 'name' => 'pen', 'input_class' => 'flex-row', 'type' => 'text', 'value' => $this->pen, 'return' => true, ], ]; $inputs[] = [ 'arguments' => [ 'name' => 'submit_button', 'label' => $formButtonLabel, 'type' => 'submit', 'value' => $formButtonValue, 'attributes' => 'class="'.$formButtonClass.'"', 'return' => true, ], ]; ui_require_jquery_file('tag-editor'); ui_require_css_file('jquery.tag-editor'); $js = '$(\'#text-pen\').tagEditor();'; if ($createNewBlock === false) { // Get the data. $sql = sprintf( 'SELECT npc.id_nc AS component_id, nc.name, nc.type, nc.description, nc.id_group AS `group`, ncg.name AS `group_name` FROM tnetwork_profile_component AS npc, tnetwork_component AS nc INNER JOIN tnetwork_component_group AS ncg ON ncg.id_sg = nc.id_group WHERE npc.id_nc = nc.id_nc AND npc.id_np = %d', $this->id_np ); $moduleBlocks = db_get_all_rows_sql($sql); // hd($moduleBlocks); if ($moduleBlocks) { $blockTables = []; // Build the information of the blocks foreach ($moduleBlocks as $block) { if (key_exists($block['group'], $blockTables) === false) { $blockTables[$block['group']] = [ 'name' => $block['group_name'], 'data' => [], ]; } $blockTables[$block['group']]['data'][] = [ 'component_id' => $block['component_id'], 'name' => $block['name'], 'type' => $block['type'], 'description' => $block['description'], ]; } if (count($blockTables) === 0) { ui_print_info_message(__('No module blocks for this profile')); } else { foreach ($blockTables as $id_group => $blockTable) { $blockData = $blockTable['data']; $blockTitle = $blockTable['name']; $blockTitle .= '
'.html_print_checkbox_switch_extended('block_id_'.$id_group, 1, 0, false, '', '', true).'
'; $table = new StdClasS(); $table->class = 'databox data'; $table->width = '75%'; $table->styleTable = 'margin: 2em auto 0;border: 1px solid #ddd;background: white;'; $table->rowid = []; $table->data = []; $table->cellpadding = 0; $table->cellspacing = 0; $table->width = '100%'; $table->class = 'info_table'; $table->head = []; $table->head[0] = __('Module Name'); $table->head[1] = __('Type'); $table->head[2] = __('Description'); $table->head[3] = ''.__('Add').''; $table->size = []; $table->size[0] = '20%'; $table->size[2] = '65%'; $table->size[3] = '15%'; $table->align = []; $table->align[3] = 'right'; $table->style = []; $table->style[3] = 'padding-right:2em'; $table->data = []; foreach ($blockData as $module) { $data[0] = $module['name']; $data[1] = ui_print_moduletype_icon($module['type'], true); $data[2] = mb_strimwidth(io_safe_output($module['description']), 0, 150, '...'); $data[3] = html_print_checkbox_switch_extended('module_check_'.$id_group.'_'.$module['component_id'], 1, 0, false, 'switchBlockControl(event)', '', true); array_push($table->data, $data); } $content = html_print_table($table, true); $rawInputs .= ui_toggle($content, $blockTitle, '', '', false, true); } } } else { ui_print_info_message(__('No module blocks for this profile')); } } $this->printFormAsList( [ 'form' => $form, 'inputs' => $inputs, 'rawInputs' => $rawInputs, 'js' => $js, true ] ); $javascript = " "; echo $javascript; if ($createNewBlock === false) { echo '

Add modules

'; $this->addingModulesForm(); } $this->printGoBackButton($this->baseUrl); } }