';
$tmp->action .= html_print_image(
'images/edit.svg',
true,
diff --git a/pandora_console/include/class/Tree.class.php b/pandora_console/include/class/Tree.class.php
index c5af28b54f..b6aca966a7 100644
--- a/pandora_console/include/class/Tree.class.php
+++ b/pandora_console/include/class/Tree.class.php
@@ -133,6 +133,11 @@ class Tree
protected function getEmptyModuleFilterStatus()
{
+ if ($this->filter['statusModule'] === 'fired') {
+ $this->filter['statusModuleOriginal'] = $this->filter['statusModule'];
+ $this->filter['statusModule'] = -1;
+ }
+
return (
!isset($this->filter['statusModule']) ||
$this->filter['statusModule'] == -1
@@ -219,6 +224,10 @@ class Tree
$agent_status_filter = ' AND (ta.critical_count > 0
OR ta.warning_count > 0) ';
break;
+
+ case AGENT_STATUS_ALERT_FIRED:
+ $agent_status_filter = ' AND ta.fired_count > 0 ';
+ break;
}
return $agent_status_filter;
@@ -284,6 +293,11 @@ class Tree
protected function getModuleStatusFilter()
{
+ if ($this->filter['statusModule'] === 'fired') {
+ $this->filter['statusModuleOriginal'] = $this->filter['statusModule'];
+ $this->filter['statusModule'] = -1;
+ }
+
$show_init_condition = ($this->filter['show_not_init_agents']) ? '' : ' AND ta.notinit_count <> ta.total_count';
if ($this->getEmptyModuleFilterStatus()) {
@@ -294,6 +308,10 @@ class Tree
return ' AND (ta.warning_count > 0 OR ta.critical_count > 0)';
}
+ if ($this->filter['statusModule'] === 'fired') {
+ return ' AND ta.fired_count > 0';
+ }
+
$field_filter = modules_get_counter_by_states($this->filter['statusModule']);
if ($field_filter === false) {
return ' AND 1=0';
@@ -333,6 +351,11 @@ class Tree
protected function getModuleStatusFilterFromTestado($state=false, $without_ands=false)
{
+ if ($this->filter['statusModule'] === 'fired') {
+ $this->filter['statusModuleOriginal'] = $this->filter['statusModule'];
+ $this->filter['statusModule'] = -1;
+ }
+
$selected_status = ($state !== false && $state !== self::TV_DEFAULT_AGENT_STATUS) ? $state : $this->filter['statusModule'];
$filter = [modules_get_state_condition($selected_status)];
@@ -811,6 +834,11 @@ class Tree
protected function processAgent(&$agent, $server=false)
{
+ if ($this->filter['statusModule'] === 'fired') {
+ $this->filter['statusModuleOriginal'] = $this->filter['statusModule'];
+ $this->filter['statusModule'] = -1;
+ }
+
global $config;
$agent['type'] = 'agent';
diff --git a/pandora_console/include/config_process.php b/pandora_console/include/config_process.php
index bd79e6120d..8407e27dd3 100644
--- a/pandora_console/include/config_process.php
+++ b/pandora_console/include/config_process.php
@@ -20,7 +20,7 @@
/**
* Pandora build version and version
*/
-$build_version = 'PC230413';
+$build_version = 'PC230503';
$pandora_version = 'v7.0NG.770';
// Do not overwrite default timezone set if defined.
diff --git a/pandora_console/include/constants.php b/pandora_console/include/constants.php
index 1d11aad151..54325f28e0 100644
--- a/pandora_console/include/constants.php
+++ b/pandora_console/include/constants.php
@@ -813,6 +813,7 @@ define('AUDIT_LOG_SERVICE_MANAGEMENT', 'Service management');
define('AUDIT_LOG_INCIDENT_MANAGEMENT', 'Incident management');
define('AUDIT_LOG_UMC', 'Warp Manager');
define('AUDIT_LOG_NMS_VIOLATION', 'NMS Violation');
+define('AUDIT_LOG_ENTERPRISE_VIOLATION', 'Enterprise Violation');
// MIMEs.
define(
diff --git a/pandora_console/include/functions.php b/pandora_console/include/functions.php
index 3de5a2c36c..81799a549d 100644
--- a/pandora_console/include/functions.php
+++ b/pandora_console/include/functions.php
@@ -3908,7 +3908,14 @@ function series_type_graph_array($data, $show_elements_graph)
$type_graph = $show_elements_graph['type_graph'];
}
- $color_series = color_graph_array();
+ if (isset($show_elements_graph['array_colors']) === true
+ && empty($show_elements_graph['array_colors']) === false
+ && is_array($show_elements_graph['array_colors']) === true
+ ) {
+ $color_series = $show_elements_graph['array_colors'];
+ } else {
+ $color_series = color_graph_array();
+ }
if ($show_elements_graph['id_widget_dashboard']) {
$opcion = unserialize(
@@ -4050,7 +4057,7 @@ function series_type_graph_array($data, $show_elements_graph)
$name_legend .= ' * '.$value['weight'].') ';
}
- $data_return['legend'][$key] = $name_legend;
+ $data_return['legend'][$key] = ''.$name_legend.'';
if ((int) $value['min'] === PHP_INT_MAX) {
$value['min'] = 0;
}
@@ -4059,28 +4066,28 @@ function series_type_graph_array($data, $show_elements_graph)
$value['max'] = 0;
}
- $data_return['legend'][$key] .= __('Min:').remove_right_zeros(
+ $data_return['legend'][$key] .= ''.__('Min').' '.remove_right_zeros(
number_format(
$value['min'],
$config['graph_precision'],
$config['csv_decimal_separator'],
$config['csv_decimal_separator'] == ',' ? '.' : ','
)
- ).' '.__('Max:').remove_right_zeros(
+ ).' '.$value['unit'].' '.__('Max').' '.remove_right_zeros(
number_format(
$value['max'],
$config['graph_precision'],
$config['csv_decimal_separator'],
$config['csv_decimal_separator'] == ',' ? '.' : ','
)
- ).' '._('Avg:').remove_right_zeros(
+ ).' '.$value['unit'].' '._('Avg.').' '.remove_right_zeros(
number_format(
$value['avg'],
$config['graph_precision'],
$config['csv_decimal_separator'],
$config['csv_decimal_separator'] == ',' ? '.' : ','
)
- ).' '.$str;
+ ).' '.$value['unit'].' '.$str;
if ($show_elements_graph['compare'] == 'overlapped'
&& $key == 'sum2'
@@ -4122,9 +4129,9 @@ function series_type_graph_array($data, $show_elements_graph)
$name_legend .= $value['module_name'].': ';
}
- $data_return['legend'][$key] = $name_legend;
+ $data_return['legend'][$key] = ''.$name_legend.'';
if ($show_elements_graph['type_mode_graph']) {
- $data_return['legend'][$key] .= __('Min:');
+ $data_return['legend'][$key] .= ''.__('Min:').' ';
$data_return['legend'][$key] .= remove_right_zeros(
number_format(
$value['min'],
@@ -4132,8 +4139,8 @@ function series_type_graph_array($data, $show_elements_graph)
$config['decimal_separator'],
$config['thousand_separator']
)
- );
- $data_return['legend'][$key] .= ' '.__('Max:');
+ ).' '.$value['unit'];
+ $data_return['legend'][$key] .= ' '.__('Max:').' ';
$data_return['legend'][$key] .= remove_right_zeros(
number_format(
$value['max'],
@@ -4141,8 +4148,8 @@ function series_type_graph_array($data, $show_elements_graph)
$config['decimal_separator'],
$config['thousand_separator']
)
- );
- $data_return['legend'][$key] .= ' '._('Avg:');
+ ).' '.$value['unit'];
+ $data_return['legend'][$key] .= ' '._('Avg:').' ';
$data_return['legend'][$key] .= remove_right_zeros(
number_format(
$value['avg'],
@@ -4150,7 +4157,7 @@ function series_type_graph_array($data, $show_elements_graph)
$config['decimal_separator'],
$config['thousand_separator']
)
- ).' '.$str;
+ ).' '.$value['unit'].' '.$str;
}
if ($show_elements_graph['compare'] == 'overlapped'
@@ -4164,21 +4171,21 @@ function series_type_graph_array($data, $show_elements_graph)
} else if (strpos($key, 'event') !== false) {
$data_return['series_type'][$key] = 'points';
if ($show_elements_graph['show_events']) {
- $data_return['legend'][$key] = __('Events').' '.$str;
+ $data_return['legend'][$key] = ''.__('Events').''.$str;
}
$data_return['color'][$key] = $color_series['event'];
} else if (strpos($key, 'alert') !== false) {
$data_return['series_type'][$key] = 'points';
if ($show_elements_graph['show_alerts']) {
- $data_return['legend'][$key] = __('Alert').' '.$str;
+ $data_return['legend'][$key] = ''.__('Alert').''.$str;
}
$data_return['color'][$key] = $color_series['alert'];
} else if (strpos($key, 'unknown') !== false) {
$data_return['series_type'][$key] = 'unknown';
if ($show_elements_graph['show_unknown']) {
- $data_return['legend'][$key] = __('Unknown').' '.$str;
+ $data_return['legend'][$key] = ''.__('Unknown').''.$str;
}
$data_return['color'][$key] = $color_series['unknown'];
@@ -4186,7 +4193,7 @@ function series_type_graph_array($data, $show_elements_graph)
$data_return['series_type'][$key] = 'percentil';
if ($show_elements_graph['percentil']) {
if ($show_elements_graph['unit']) {
- $name_legend = __('Percentil').' ';
+ $name_legend = ''.__('Percentil').'';
$name_legend .= $config['percentil'].'º ';
$name_legend .= __('of module').' ';
$name_legend .= $value['agent_alias'].' / ';
diff --git a/pandora_console/include/functions_api.php b/pandora_console/include/functions_api.php
index bd1577116c..aa884c5bec 100644
--- a/pandora_console/include/functions_api.php
+++ b/pandora_console/include/functions_api.php
@@ -13090,10 +13090,18 @@ function api_set_create_event($id, $trash1, $other, $returnType)
if ($other['data'][18] != '') {
$values['id_extra'] = $other['data'][18];
- $sql_validation = 'SELECT id_evento FROM tevento where estado IN (0,2) and id_extra ="'.$other['data'][18].'";';
+ $sql_validation = 'SELECT id_evento,estado FROM tevento where estado IN (0,2) and id_extra ="'.$other['data'][18].'";';
$validation = db_get_all_rows_sql($sql_validation);
+
if ($validation) {
foreach ($validation as $val) {
+ if ((bool) $config['keep_in_process_status_extra_id'] === true
+ && (int) $val['estado'] === EVENT_STATUS_INPROCESS
+ && (int) $values['status'] === 0
+ ) {
+ $values['status'] = 2;
+ }
+
api_set_validate_event_by_id($val['id_evento']);
}
}
diff --git a/pandora_console/include/functions_config.php b/pandora_console/include/functions_config.php
index b94892e7c1..e7438890f8 100644
--- a/pandora_console/include/functions_config.php
+++ b/pandora_console/include/functions_config.php
@@ -370,6 +370,10 @@ function config_update_config()
$error_update[] = __('alias_as_name');
}
+ if (config_update_value('keep_in_process_status_extra_id', get_parameter('keep_in_process_status_extra_id'), true) === false) {
+ $error_update[] = __('keep_in_process_status_extra_id');
+ }
+
if (config_update_value('console_log_enabled', get_parameter('console_log_enabled'), true) === false) {
$error_update[] = __('Console log enabled');
}
@@ -1222,6 +1226,10 @@ function config_update_config()
$error_update[] = __('Mobile view not allow visual console orientation');
}
+ if (config_update_value('display_item_frame', (int) get_parameter('display_item_frame'), true) === false) {
+ $error_update[] = __('Display item frame on alert triggered');
+ }
+
if (config_update_value('ser_menu_items', (int) get_parameter('ser_menu_items', 10), true) === false) {
$error_update[] = __('Default line menu items for the Services');
}
@@ -2343,6 +2351,10 @@ function config_process_config()
config_update_value('alias_as_name', 0);
}
+ if (!isset($config['keep_in_process_status_extra_id'])) {
+ config_update_value('keep_in_process_status_extra_id', 0);
+ }
+
if (!isset($config['console_log_enabled'])) {
config_update_value('console_log_enabled', 0);
}
@@ -3417,6 +3429,10 @@ function config_process_config()
config_update_value('mobile_view_orientation_vc', 0);
}
+ if (isset($config['display_item_frame']) === false) {
+ config_update_value('display_item_frame', 1);
+ }
+
if (!isset($config['agent_size_text_small'])) {
config_update_value('agent_size_text_small', 18);
}
diff --git a/pandora_console/include/functions_events.php b/pandora_console/include/functions_events.php
index 9616634adb..9f4ba19bb1 100644
--- a/pandora_console/include/functions_events.php
+++ b/pandora_console/include/functions_events.php
@@ -2523,8 +2523,8 @@ function events_print_event_table(
$i = 0;
$table->head[$i] = ''.__('Type').'';
- $table->headstyle[$i] = 'width: 3%;text-align: center;';
- $table->style[$i++] = 'text-align: center;';
+ $table->headstyle[$i] = 'width: 3%;text-align: left;';
+ $table->style[$i++] = 'text-align: left;';
$table->head[$i] = ''.__('Event name').'';
$table->headstyle[$i] = '';
@@ -2541,12 +2541,12 @@ function events_print_event_table(
$table->style[$i++] = 'padding: 0 5px;word-break: break-word;';
$table->head[$i] = ''.__('Status').'';
- $table->headstyle[$i] = 'width: 150px;text-align: center;';
- $table->style[$i++] = 'padding: 0 5px;text-align: center;';
+ $table->headstyle[$i] = 'width: 150px;text-align: left;';
+ $table->style[$i++] = 'padding: 0 5px;text-align: left;';
$table->head[$i] = "".__('V.').'';
- $table->headstyle[$i] = 'width: 1%;text-align: center;';
- $table->style[$i++] = 'text-align: center;';
+ $table->headstyle[$i] = 'width: 1%;text-align: left;';
+ $table->style[$i++] = 'text-align: left;';
$all_groups = [];
if ($agent_id != 0) {
@@ -2730,7 +2730,7 @@ function events_print_type_img(
[
'title' => events_print_type_description($type, true),
'class' => $style,
- 'style' => 'margin: 0 auto;'.((empty($icon) === false) ? 'background-image: url('.$icon.'); background-repeat: no-repeat;' : ''),
+ 'style' => ((empty($icon) === false) ? 'background-image: url('.$icon.'); background-repeat: no-repeat;' : ''),
],
true
);
@@ -5122,7 +5122,7 @@ function events_page_general($event)
&& count($table_data[$i]) === 2
) {
$table_general->colspan[$i][1] = 2;
- $table_general->style[2] = 'text-align:center; width:10%;';
+ $table_general->style[2] = 'text-align:left; width:10%;';
}
}
@@ -5204,7 +5204,7 @@ function events_page_comments($event, $ajax=false, $groupedComments=[])
$comments = (empty($groupedComments) === true) ? $event['user_comment'] : $groupedComments;
if (empty($comments) === true) {
- $table_comments->style[0] = 'text-align:center;';
+ $table_comments->style[0] = 'text-align:left;';
$table_comments->colspan[0][0] = 2;
$data = [];
$data[0] = __('There are no comments');
@@ -5272,7 +5272,7 @@ function events_page_comments($event, $ajax=false, $groupedComments=[])
'%s %s %s%s',
$c['action'],
__('by'),
- get_user_fullname($c['id_user']).' ('.$c['id_user'].')',
+ get_user_fullname(io_safe_input($c['id_user'])).' ('.io_safe_input($c['id_user']).')',
$eventIdExplanation
);
diff --git a/pandora_console/include/functions_graph.php b/pandora_console/include/functions_graph.php
index fdf08bbcce..d1702ef9d6 100644
--- a/pandora_console/include/functions_graph.php
+++ b/pandora_console/include/functions_graph.php
@@ -833,6 +833,10 @@ function grafico_modulo_sparse($params)
$params['basic_chart'] = false;
}
+ if (isset($params['array_colors']) === false) {
+ $params['array_colors'] = false;
+ }
+
// If is metaconsole set 10pt size value.
if (is_metaconsole()) {
$font_size = '10';
@@ -5237,7 +5241,7 @@ function graph_monitor_wheel($width=550, $height=600, $filter=false)
'name' => __('Main node'),
'type' => 'center_node',
'children' => iterate_group_array($data_groups, $data_agents),
- 'color' => '#3F3F3F',
+ 'color' => ($config['style'] === 'pandora_black') ? '#111' : '#FFF',
];
if (empty($graph_data['children'])) {
diff --git a/pandora_console/include/functions_groups.php b/pandora_console/include/functions_groups.php
index d2d77b241a..286e1f7306 100644
--- a/pandora_console/include/functions_groups.php
+++ b/pandora_console/include/functions_groups.php
@@ -251,6 +251,22 @@ function groups_check_used($idGroup)
$return['tables'][] = __('Network maps');
}
+ switch ($config['dbtype']) {
+ case 'mysql':
+ case 'postgresql':
+ $numRows = db_get_num_rows('SELECT * FROM talert_snmp WHERE id_group = '.$idGroup.';');
+ break;
+
+ case 'oracle':
+ $numRows = db_get_num_rows('SELECT * FROM talert_snmp WHERE id_group = '.$idGroup);
+ break;
+ }
+
+ if ($numRows > 0) {
+ $return['return'] = true;
+ $return['tables'][] = __('SNMP alerts');
+ }
+
$hookEnterprise = enterprise_include_once('include/functions_groups.php');
if ($hookEnterprise !== ENTERPRISE_NOT_HOOK) {
$returnEnterprise = enterprise_hook('groups_check_used_group_enterprise', [$idGroup]);
diff --git a/pandora_console/include/functions_html.php b/pandora_console/include/functions_html.php
index 37054a3e86..bc8ffefe8a 100644
--- a/pandora_console/include/functions_html.php
+++ b/pandora_console/include/functions_html.php
@@ -77,7 +77,7 @@ function html_debug_print($var, $file='', $oneline=false)
fprintf($f, '%s', $output);
fclose($f);
} else {
- echo ''.date('Y/m/d H:i:s').' ('.gettype($var).') '.$more_info."\n";
+ echo ''.date('Y/m/d H:i:s').' ('.gettype($var).') '.$more_info."\n";
print_r($var);
echo '
';
}
@@ -2130,10 +2130,7 @@ function html_print_extended_select_for_time(
$fields[$selected] = human_time_description_raw($selected, true);
}
- if (empty($nothing) === true
- && (empty($selected) === true
- || $selected === '0')
- ) {
+ if (empty($nothing) === true && (is_int($selected) === true)) {
$selected = 300;
}
@@ -2248,6 +2245,13 @@ function html_print_extended_select_for_time(
$('#".$uniq_name."_manual').show();
$('#".$uniq_name."_default').hide();
}
+
+ if ($('#text-".$uniq_name."_text').val() === '0') {
+ setTimeout(() => {
+ $('#".$uniq_name."_manual').hide();
+ $('#".$uniq_name."_default').show();
+ }, 100);
+ }
";
$returnString = ob_get_clean();
@@ -2880,6 +2884,7 @@ function html_print_input_password(
$class='',
$autocomplete='off',
$hide_div_eye=false,
+ $div_class=''
) {
if ($maxlength == 0) {
$maxlength = 255;
@@ -2910,7 +2915,7 @@ function html_print_input_password(
}
}
- return ''.html_print_input_text_extended($name, $value, 'password-'.$name, $alt, $size, $maxlength, $disabled, '', $attr, $return, true, '', $autocomplete, false, $hide_div_eye).'
';
+ return ''.html_print_input_text_extended($name, $value, 'password-'.$name, $alt, $size, $maxlength, $disabled, '', $attr, $return, true, '', $autocomplete, false, $hide_div_eye).'
';
}
@@ -6435,7 +6440,11 @@ function html_print_select_agent_secondary($agent, $id_agente, $options=[])
[$id_agente]
);
- $name = 'secondary_groups_selected'.$options['extra_id'];
+ if ($options['selected_post'] !== null) {
+ $secondary_groups_selected['plain'] = $options['selected_post'];
+ }
+
+ $name = 'secondary_groups_selected[]'.$options['extra_id'];
if ($options['only_select'] === true) {
$name = 'secondary_groups'.$options['extra_id'].'[]';
}
@@ -6455,7 +6464,7 @@ function html_print_select_agent_secondary($agent, $id_agente, $options=[])
$name,
// Selected.
// No select any by default.
- $secondary_groups_selected['for_select'],
+ $secondary_groups_selected['plain'],
// Script.
// Javascript onChange code.
'',
diff --git a/pandora_console/include/functions_inventory.php b/pandora_console/include/functions_inventory.php
index dc0c23a31c..5b3efedc93 100644
--- a/pandora_console/include/functions_inventory.php
+++ b/pandora_console/include/functions_inventory.php
@@ -36,7 +36,8 @@ function inventory_get_data(
$return_mode=false,
$order_by_agent=false,
$node='',
- $pagination_url_parameters=[]
+ $pagination_url_parameters=[],
+ $regular_expression=''
) {
global $config;
@@ -268,7 +269,15 @@ function inventory_get_data(
$i++;
}
- $data[] = $temp_row;
+ if ($regular_expression !== '') {
+ if (is_array(preg_grep('/'.$regular_expression.'/', $temp_row))) {
+ if (count(preg_grep('/'.$regular_expression.'/', $temp_row)) > 0) {
+ $data[] = $temp_row;
+ }
+ }
+ } else {
+ $data[] = $temp_row;
+ }
}
}
diff --git a/pandora_console/include/functions_menu.php b/pandora_console/include/functions_menu.php
index 921e921172..a7f48f44af 100644
--- a/pandora_console/include/functions_menu.php
+++ b/pandora_console/include/functions_menu.php
@@ -585,7 +585,9 @@ function menu_add_extras(&$menu)
$menu_extra['reporting']['sub']['enterprise/godmode/reporting/graph_template_wizard']['text'] = __('Graph template wizard');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=wizard&action=wizard']['text'] = __('Templates wizard');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=template&action=list_template']['text'] = __('Templates');
+ $menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&action=new']['text'] = __('New custom reports');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&action=edit']['text'] = __('Edit custom reports');
+ $menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&action=delete_report']['text'] = __('Remove custom reports');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=list_items&action=edit']['text'] = __('List items');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=item_editor&action=new']['text'] = __('Edit item');
$menu_extra['reporting']['sub']['godmode/reporting/reporting_builder&tab=wizard&action=edit']['text'] = __('Wizard');
diff --git a/pandora_console/include/functions_network_components.php b/pandora_console/include/functions_network_components.php
index 25542ec4bf..f6c0087b37 100644
--- a/pandora_console/include/functions_network_components.php
+++ b/pandora_console/include/functions_network_components.php
@@ -570,7 +570,7 @@ function network_components_get_name($id_network_component)
return false;
}
- return @db_get_value('name', 'tnetwork_component', 'id', $id_network_component);
+ return @db_get_value('name', 'tnetwork_component', 'id_nc', $id_network_component);
}
diff --git a/pandora_console/include/functions_notifications.php b/pandora_console/include/functions_notifications.php
index 6918bad686..eab3ff5067 100644
--- a/pandora_console/include/functions_notifications.php
+++ b/pandora_console/include/functions_notifications.php
@@ -1118,7 +1118,7 @@ function notifications_print_dropdown_element($message_info)
$message_info['id_mensaje'],
messages_get_url($message_info['id_mensaje']),
$target,
- html_print_image('images/'.$message_info['icon'], true),
+ html_print_image('images/info.svg', true, ['style' => 'height: 40px;margin-left: -20px;margin-top: -40px;']),
io_safe_output($message_info['subject']),
$body_preview
);
diff --git a/pandora_console/include/functions_os.php b/pandora_console/include/functions_os.php
index 2b5b25c24d..64020cb6aa 100755
--- a/pandora_console/include/functions_os.php
+++ b/pandora_console/include/functions_os.php
@@ -232,3 +232,97 @@ function os_get_icon($id_os)
{
return db_get_value('icon_name', 'tconfig_os', 'id_os', (int) $id_os);
}
+
+
+/**
+ * Transform the old icon url.
+ *
+ * @param string $url_icon Icon url .
+ *
+ * @return string
+ */
+function os_transform_url_icon($url_icon)
+{
+ $return = substr($url_icon, 0, strpos($url_icon, basename($url_icon)));
+ switch (basename($url_icon)) {
+ case 'android.png':
+ $return .= 'android@os.svg';
+ break;
+
+ case 'so_mac.png':
+ $return .= 'apple@os.svg';
+ break;
+
+ case 'so_cisco.png':
+ $return .= 'cisco@os.svg';
+ break;
+
+ case 'so_aix.png':
+ $return .= 'aix@os.svg';
+ break;
+
+ case 'so_win.png':
+ $return .= 'windows@os.svg';
+ break;
+
+ case 'so_vmware.png':
+ $return .= 'vmware@os.svg';
+ break;
+
+ case 'so_solaris.png':
+ $return .= 'solaris@os.svg';
+ break;
+
+ case 'so_linux.png':
+ $return .= 'linux@os.svg';
+ break;
+
+ case 'so_bsd.png':
+ $return .= 'freebsd@os.svg';
+ break;
+
+ case 'so_cluster.png':
+ $return .= 'cluster@os.svg';
+ break;
+
+ case 'so_other.png':
+ $return .= 'other-OS@os.svg';
+ break;
+
+ case 'so_switch.png':
+ $return .= 'switch@os.svg';
+ break;
+
+ case 'so_mainframe.png':
+ $return .= 'mainframe@os.svg';
+ break;
+
+ case 'so_hpux.png':
+ case 'server_hpux.png':
+ $return .= 'HP@os.svg';
+ break;
+
+ case 'so_router.png':
+ case 'router.png':
+ $return .= 'routers@os.svg';
+ break;
+
+ case 'embedded.png':
+ $return .= 'embedded@os.svg';
+ break;
+
+ case 'network.png':
+ $return .= 'network-server@os.svg';
+ break;
+
+ case 'satellite.png':
+ $return .= 'satellite@os.svg';
+ break;
+
+ default:
+ $return = $url_icon;
+ break;
+ }
+
+ return $return;
+}
diff --git a/pandora_console/include/functions_reporting.php b/pandora_console/include/functions_reporting.php
index 9c99d47a2a..5adae9abf7 100755
--- a/pandora_console/include/functions_reporting.php
+++ b/pandora_console/include/functions_reporting.php
@@ -3170,6 +3170,7 @@ function reporting_inventory($report, $content, $type)
$date = $es['date'];
$description = $content['description'];
+ $inventory_regular_expression = $es['inventory_regular_expression'];
switch ($type) {
case 'data':
@@ -3179,7 +3180,11 @@ function reporting_inventory($report, $content, $type)
$date,
'',
false,
- 'csv'
+ 'csv',
+ false,
+ '',
+ [],
+ $inventory_regular_expression
);
break;
@@ -3190,7 +3195,11 @@ function reporting_inventory($report, $content, $type)
$date,
'',
false,
- 'hash'
+ 'hash',
+ false,
+ '',
+ [],
+ $inventory_regular_expression
);
break;
}
@@ -12121,6 +12130,70 @@ function reporting_get_stats_indicators($data, $width=280, $height=20, $html=tru
}
+function reporting_get_stats_indicators_mobile($data, $width=280, $height=20, $html=true)
+{
+ $table_ind = html_get_predefined_table();
+
+ $servers = [];
+ $servers['all'] = (int) db_get_value('COUNT(id_server)', 'tserver');
+ $servers['up'] = (int) servers_check_status();
+ $servers['down'] = ($servers['all'] - $servers['up']);
+ if ($servers['all'] == 0) {
+ $servers['health'] = 0;
+ } else {
+ $servers['health'] = ($servers['up'] / ($servers['all'] / 100));
+ }
+
+ $return = [];
+
+ $color = get_color_progress_mobile($servers['health']);
+ $return['server_health'] = [
+ 'title' => __('Server health'),
+ 'graph' => ui_progress($servers['health'], '90%', '.8', $color, true, ' ', false),
+ ];
+
+ $color = get_color_progress_mobile($data['monitor_health']);
+ $return['monitor_health'] = [
+ 'title' => __('Monitor health'),
+ 'graph' => ui_progress($data['monitor_health'], '90%', '.8', $color, true, ' ', false),
+ ];
+
+ $color = get_color_progress_mobile($data['module_sanity']);
+ $return['module_sanity'] = [
+ 'title' => __('Module sanity'),
+ 'graph' => ui_progress($data['module_sanity'], '90%', '.8', $color, true, ' ', false),
+ ];
+
+ $color = get_color_progress_mobile($data['alert_level']);
+ $return['alert_level'] = [
+ 'title' => __('Alert level'),
+ 'graph' => ui_progress($data['alert_level'], '90%', '.8', $color, true, ' ', false),
+ ];
+
+ return $return;
+}
+
+
+function get_color_progress_mobile($value)
+{
+ $color = '';
+
+ if ((int) $value > 66) {
+ $color = '#82B92E';
+ }
+
+ if ((int) $value < 66) {
+ $color = '#FCAB10';
+ }
+
+ if ((int) $value < 33) {
+ $color = '#ED474A';
+ }
+
+ return $color;
+}
+
+
function reporting_get_stats_alerts($data, $links=false)
{
global $config;
diff --git a/pandora_console/include/functions_reporting_html.php b/pandora_console/include/functions_reporting_html.php
index e1e68b94f0..60b70c751d 100644
--- a/pandora_console/include/functions_reporting_html.php
+++ b/pandora_console/include/functions_reporting_html.php
@@ -1041,11 +1041,11 @@ function reporting_html_event_report_group($table, $item, $pdf=0)
$table1->class = 'info_table';
$table1->align = [];
- $table1->align[0] = 'center';
+ $table1->align[0] = 'left';
if ($item['show_summary_group']) {
- $table1->align[3] = 'center';
+ $table1->align[3] = 'left';
} else {
- $table1->align[2] = 'center';
+ $table1->align[2] = 'left';
}
$table1->data = [];
@@ -1299,7 +1299,7 @@ function reporting_html_event_report_module($table, $item, $pdf=0)
$table1->class = 'info_table';
$table1->data = [];
$table1->head = [];
- $table1->align = 'left';
+ $table1->align[0] = 'left';
if ($show_summary_group) {
$table1->head[0] = __('Status');
@@ -1378,7 +1378,16 @@ function reporting_html_event_report_module($table, $item, $pdf=0)
$custom_data = json_decode($event['custom_data'], true);
$custom_data_text = '';
foreach ($custom_data as $key => $value) {
- $custom_data_text .= $key.' = '.$value.'
';
+ if (is_array($value)) {
+ $custom_data_text .= $key.' = ';
+ foreach ($value as $action) {
+ $custom_data_text .= $action.', ';
+ }
+
+ $custom_data_text = rtrim($custom_data_text, ', ').'
';
+ } else {
+ $custom_data_text .= $key.' = '.$value.'
';
+ }
}
$data[6] = $custom_data_text;
@@ -1996,6 +2005,13 @@ function reporting_html_inventory($table, $item, $pdf=0)
&& is_array($type_modules) === true
) {
foreach ($type_modules as $key_type_module => $type_module) {
+ $print_table = true;
+ foreach ($type_module as $key => $module) {
+ if (count($module['data']) == 0) {
+ unset($type_module[$key]);
+ }
+ }
+
$table1 = new stdClass();
$table1->width = '99%';
$table1->class = 'info_table';
@@ -2006,57 +2022,62 @@ function reporting_html_inventory($table, $item, $pdf=0)
if (isset($type_module) === true
&& is_array($type_module) === true
) {
- foreach ($type_module as $key_type => $module) {
- if (isset($module['data']) === true
- && is_array($module['data']) === true
- ) {
- array_pop($module['data']);
- foreach ($module['data'] as $k_module => $v_module) {
- $str_key = $key_type_module.'-'.$key_type.'-'.$k_module;
- $table1->head[0] = __('Agent');
- $table1->head[1] = __('Module');
- $table1->head[2] = __('Date');
- $table1->headstyle[0] = 'text-align: left';
- $table1->headstyle[1] = 'text-align: left';
- $table1->headstyle[2] = 'text-align: left';
- $table1->cellstyle[$str_key][0] = 'text-align: left;';
- $table1->cellstyle[$str_key][1] = 'text-align: left;';
- $table1->cellstyle[$str_key][2] = 'text-align: left;';
- $table1->data[$str_key][0] = $module['agent_name'];
- $table1->data[$str_key][1] = $key_type_module;
- $dateModule = explode(' ', $module['timestamp']);
- $table1->data[$str_key][2] = $dateModule[0];
- if (isset($v_module) === true
- && is_array($v_module) === true
- ) {
- foreach ($v_module as $k => $v) {
- $table1->head[$k] = $k;
- $table1->headstyle[$k] = 'text-align: left';
- $table1->cellstyle[$str_key][$k] = 'text-align: left;';
- if ($pdf === 0) {
- $table1->data[$str_key][$k] = $v;
- } else {
- // Workaround to prevent table columns from growing indefinitely in PDFs.
- $table1->data[$str_key][$k] = preg_replace(
- '/([^\s]{30})(?=[^\s])/',
- '$1'.'
',
- $v
- );
+ if (count($type_module) > 0) {
+ foreach ($type_module as $key_type => $module) {
+ if (isset($module['data']) === true
+ && is_array($module['data']) === true
+ ) {
+ foreach ($module['data'] as $k_module => $v_module) {
+ $str_key = $key_type_module.'-'.$key_type.'-'.$k_module;
+ $table1->head[0] = __('Agent');
+ $table1->head[1] = __('Module');
+ $table1->head[2] = __('Date');
+ $table1->headstyle[0] = 'text-align: left';
+ $table1->headstyle[1] = 'text-align: left';
+ $table1->headstyle[2] = 'text-align: left';
+ $table1->cellstyle[$str_key][0] = 'text-align: left;';
+ $table1->cellstyle[$str_key][1] = 'text-align: left;';
+ $table1->cellstyle[$str_key][2] = 'text-align: left;';
+ $table1->data[$str_key][0] = $module['agent_name'];
+ $table1->data[$str_key][1] = $key_type_module;
+ $dateModule = explode(' ', $module['timestamp']);
+ $table1->data[$str_key][2] = $dateModule[0];
+ if (isset($v_module) === true
+ && is_array($v_module) === true
+ ) {
+ foreach ($v_module as $k => $v) {
+ $table1->head[$k] = $k;
+ $table1->headstyle[$k] = 'text-align: left';
+ $table1->cellstyle[$str_key][$k] = 'text-align: left;';
+ if ($pdf === 0) {
+ $table1->data[$str_key][$k] = $v;
+ } else {
+ // Workaround to prevent table columns from growing indefinitely in PDFs.
+ $table1->data[$str_key][$k] = preg_replace(
+ '/([^\s]{30})(?=[^\s])/',
+ '$1'.'
',
+ $v
+ );
+ }
}
}
}
}
}
+ } else {
+ $print_table = false;
}
+ } else {
+ $print_table = false;
}
- if ($pdf === 0) {
+ if ($pdf === 0 && $print_table === true) {
$table->colspan[$key_type_module]['cell'] = 3;
$table->data[$key_type_module]['cell'] = html_print_table(
$table1,
true
);
- } else {
+ } else if ($print_table === true) {
$return_pdf .= html_print_table(
$table1,
true
@@ -2620,16 +2641,14 @@ function reporting_html_event_report_agent($table, $item, $pdf=0)
$table1->width = '99%';
$table1->class = 'info_table';
$table1->align = [];
- $table1->align[0] = 'center';
- $table1->align[1] = 'center';
- $table1->align[3] = 'center';
- if ((bool) $item['show_custom_data'] === true) {
- if ($item['show_summary_group']) {
- $table1->align[7] = 'left';
- } else {
- $table1->align[6] = 'left';
- }
- }
+ $table1->align[0] = 'left';
+ $table1->align[1] = 'left';
+ $table1->align[2] = 'left';
+ $table1->align[3] = 'left';
+ $table1->align[4] = 'left';
+ $table1->align[5] = 'left';
+ $table1->align[6] = 'left';
+ $table1->align[7] = 'left';
$table1->data = [];
@@ -2705,7 +2724,7 @@ function reporting_html_event_report_agent($table, $item, $pdf=0)
}
if ($item['show_summary_group']) {
- $data[] = ''.date($config['date_format'], strtotime($event['timestamp'])).'';
+ $data[] = ''.date($config['date_format'], $event['timestamp']).'';
} else {
$data[] = ''.date($config['date_format'], strtotime($event['timestamp'])).'';
}
@@ -2714,7 +2733,16 @@ function reporting_html_event_report_agent($table, $item, $pdf=0)
$custom_data = json_decode($event['custom_data'], true);
$custom_data_text = '';
foreach ($custom_data as $key => $value) {
- $custom_data_text .= $key.' = '.$value.'
';
+ if (is_array($value)) {
+ $custom_data_text .= $key.' = ';
+ foreach ($value as $action) {
+ $custom_data_text .= $action.', ';
+ }
+
+ $custom_data_text = rtrim($custom_data_text, ', ').'
';
+ } else {
+ $custom_data_text .= $key.' = '.$value.'
';
+ }
}
$data[] = $custom_data_text;
@@ -4721,7 +4749,7 @@ function reporting_html_availability_graph($table, $item, $pdf=0)
$table1->style[0] = 'overflow-wrap: break-word';
// Align percentage and checks resume.
- $table1->align[2] = 'center';
+ $table1->align[2] = 'left';
$table1->data[$k_chart][0] = $chart['agent'];
$table1->data[$k_chart][0] .= '
';
$table1->data[$k_chart][0] .= $chart['module'];
@@ -5988,7 +6016,7 @@ function reporting_get_events($data, $links=false)
$tooltip = ui_print_help_tip(
__(
- "Event count corresponds to events within the last hour"
+ 'Event count corresponds to events within the last hour'
),
true
);
diff --git a/pandora_console/include/functions_servers.php b/pandora_console/include/functions_servers.php
index 28daa277e7..7ba3c50303 100644
--- a/pandora_console/include/functions_servers.php
+++ b/pandora_console/include/functions_servers.php
@@ -522,7 +522,7 @@ function servers_get_rate($avg_interval, $num_modules)
*
* @return mixed False in case the server doesn't exist or an array with info.
*/
-function servers_get_info($id_server=-1)
+function servers_get_info($id_server=-1, $sql_limit=-1)
{
global $config;
@@ -538,6 +538,14 @@ function servers_get_info($id_server=-1)
SELECT *
FROM tserver '.$select_id.'
ORDER BY server_type';
+
+ if ($sql_limit !== -1) {
+ $sql = '
+ SELECT *
+ FROM tserver '.$select_id.'
+ ORDER BY server_type'.$sql_limit;
+ }
+
$result = db_get_all_rows_sql($sql);
$time = get_system_time();
@@ -996,12 +1004,14 @@ function servers_get_info($id_server=-1)
'SELECT UNIX_TIMESTAMP() - utimestamp
FROM trecon_task
WHERE UNIX_TIMESTAMP() > (utimestamp + interval_sweep)
+ AND interval_sweep > 0
AND id_recon_server = '.$server['id_server']
);
$server['module_lag'] = db_get_sql(
'SELECT COUNT(id_rt)
FROM trecon_task
WHERE UNIX_TIMESTAMP() > (utimestamp + interval_sweep)
+ AND interval_sweep > 0
AND id_recon_server = '.$server['id_server']
);
} else {
diff --git a/pandora_console/include/functions_snmp_browser.php b/pandora_console/include/functions_snmp_browser.php
index 1d7fffd922..091793f940 100644
--- a/pandora_console/include/functions_snmp_browser.php
+++ b/pandora_console/include/functions_snmp_browser.php
@@ -1302,9 +1302,10 @@ function snmp_browser_create_modules_snmp(
$snmp3_auth_pass = $snmp_values['snmp3_browser_auth_pass'];
}
- if (isset($snmp_values['snmp3_privacy_method']) === true) {
- $snmp3_privacy_method = $snmp_values['snmp3_privacy_method'];
+ if (isset($snmp_values['snmp3_browser_privacy_method']) === true) {
+ $snmp3_privacy_method = $snmp_values['snmp3_browser_privacy_method'];
};
+
if (isset($snmp_values['snmp3_browser_privacy_pass']) === true) {
$snmp3_privacy_pass = $snmp_values['snmp3_browser_privacy_pass'];
}
@@ -1376,9 +1377,9 @@ function snmp_browser_create_modules_snmp(
'id_module_group' => 3,
'id_modulo' => 2,
'id_plugin' => 0,
- 'plugin_user' => '',
- 'plugin_pass' => '',
- 'plugin_parameter' => '',
+ 'plugin_user' => $snmp3_auth_user,
+ 'plugin_pass' => $snmp3_auth_pass,
+ 'plugin_parameter' => $snmp3_auth_method,
'macros' => '',
'max_timeout' => 0,
'max_retries' => 0,
@@ -1394,9 +1395,9 @@ function snmp_browser_create_modules_snmp(
'max_critical' => 0,
'str_critical' => '',
'min_ff_event' => 0,
- 'custom_string_1' => '',
- 'custom_string_2' => '',
- 'custom_string_3' => '',
+ 'custom_string_1' => $snmp3_privacy_method,
+ 'custom_string_2' => $snmp3_privacy_pass,
+ 'custom_string_3' => $snmp3_security_level,
'post_process' => 0,
'unit' => '',
'wizard_level' => 'nowizard',
@@ -1435,9 +1436,9 @@ function snmp_browser_create_modules_snmp(
'id_module_group' => 3,
'id_modulo' => 2,
'id_plugin' => 0,
- 'plugin_user' => '',
- 'plugin_pass' => '',
- 'plugin_parameter' => '',
+ 'plugin_user' => $snmp3_auth_user,
+ 'plugin_pass' => $snmp3_auth_pass,
+ 'plugin_parameter' => $snmp3_auth_method,
'macros' => '',
'max_timeout' => 0,
'max_retries' => 0,
@@ -1453,9 +1454,9 @@ function snmp_browser_create_modules_snmp(
'max_critical' => 0,
'str_critical' => '',
'min_ff_event' => 0,
- 'custom_string_1' => '',
- 'custom_string_2' => '',
- 'custom_string_3' => '',
+ 'custom_string_1' => $snmp3_privacy_method,
+ 'custom_string_2' => $snmp3_privacy_pass,
+ 'custom_string_3' => $snmp3_security_level,
'post_process' => 0,
'unit' => '',
'wizard_level' => 'nowizard',
@@ -1496,9 +1497,9 @@ function snmp_browser_create_modules_snmp(
'snmp_community' => $community,
'id_module_group' => 3,
'id_plugin' => 0,
- 'plugin_user' => '',
- 'plugin_pass' => '',
- 'plugin_parameter' => '',
+ 'plugin_user' => $snmp3_auth_user,
+ 'plugin_pass' => $snmp3_auth_pass,
+ 'plugin_parameter' => $snmp3_auth_method,
'macros' => '',
'max_timeout' => 0,
'max_retries' => 0,
@@ -1514,9 +1515,9 @@ function snmp_browser_create_modules_snmp(
'max_critical' => 0,
'str_critical' => '',
'min_ff_event' => 0,
- 'custom_string_1' => '',
- 'custom_string_2' => '',
- 'custom_string_3' => '',
+ 'custom_string_1' => $snmp3_privacy_method,
+ 'custom_string_2' => $snmp3_privacy_pass,
+ 'custom_string_3' => $snmp3_security_level,
'post_process' => 0,
'unit' => '',
'macros' => '',
diff --git a/pandora_console/include/functions_ui.php b/pandora_console/include/functions_ui.php
index 0cf2267dd3..a5bdb1218f 100755
--- a/pandora_console/include/functions_ui.php
+++ b/pandora_console/include/functions_ui.php
@@ -712,7 +712,14 @@ function ui_print_group_icon($id_group, $return=false, $path='', $style='', $lin
$output = '';
- $icon = ($id_group > 0) ? (string) db_get_value('icon', 'tgrupo', 'id_grupo', (int) $id_group) : 'unknown@groups.svg';
+ $icon = 'world@svg.svg';
+ if ($id_group > 0) {
+ $icon = db_get_value('icon', 'tgrupo', 'id_grupo', (int) $id_group);
+ if (empty($icon) === true) {
+ $icon = 'unknown@groups.svg';
+ }
+ }
+
$extension = pathinfo($icon, PATHINFO_EXTENSION);
if (empty($extension) === true) {
$icon .= '.png';
@@ -1763,7 +1770,7 @@ function ui_require_javascript_file($name, $path='include/javascript/', $echo_ta
if (is_metaconsole()
&& (isset($config['requirements_use_base_url']) === false
- || $config['requirements_use_base_url'] === false)
+ || $config['requirements_use_base_url'] === false) && $filename !== 'include/javascript/select2.min.js'
) {
$config['js'][$name] = '../../'.$filename;
} else {
@@ -3871,7 +3878,7 @@ function ui_print_datatable(array $parameters)
$export_columns = ',columns: \'th:not(:last-child)\'';
}
- if (isset($parameters['data_element']) === false) {
+ if (isset($parameters['data_element']) === false || isset($parameters['print_pagination_search_csv'])) {
if (isset($parameters['ajax_url'])) {
$type_data = 'ajax: {
url: "'.ui_get_full_url('ajax.php', false, false, false).'",
@@ -7050,23 +7057,20 @@ function ui_print_comments($comments)
}
}
- $last_comment = [];
- foreach ($comments_array as $comm) {
- // Show the comments more recent first.
- if (is_array($comm)) {
- $order_utimestamp = array_reduce(
- $comm,
- function ($carry, $item) {
- $carry[$item['utimestamp']] = $item;
- return $carry;
- }
- );
+ $order_utimestamp = array_reduce(
+ $comments_array,
+ function ($carry, $item) {
+ foreach ($item as $k => $v) {
+ $carry[$v['utimestamp']] = $v;
+ }
- $key_max_utimestamp = max(array_keys($order_utimestamp));
-
- $last_comment = $order_utimestamp[$key_max_utimestamp];
+ return $carry;
}
- }
+ );
+
+ $key_max_utimestamp = max(array_keys($order_utimestamp));
+
+ $last_comment = $order_utimestamp[$key_max_utimestamp];
if (empty($last_comment) === true) {
return '';
@@ -7455,13 +7459,20 @@ function ui_get_inventory_module_add_form(
0,
'',
__('Select inventory module'),
- 0,
+ '',
true,
false,
false,
'w100p',
false,
- 'width: 100%'
+ 'width: 100%',
+ false,
+ false,
+ false,
+ '',
+ false,
+ false,
+ true
)
);
} else {
@@ -7556,81 +7567,95 @@ function ui_get_inventory_module_add_form(
$table->data['userpass-row'] = $row;
$row = [];
- $row['hidden-title'] = '';
- $row['hidden-input'] = html_print_input_hidden('hidden-custom-field-name', '', true);
- $row['hidden-input'] .= html_print_input_hidden('hidden-custom-field-is-secure', 0, true);
- $row['hidden-input'] .= html_print_input_text(
- 'hidden-custom-field-input',
- '',
- '',
- 25,
- 40,
- true,
- false,
- false,
- '',
- 'w93p'
- );
- $row['hidden-input'] .= html_print_image(
- 'images/delete.svg',
- true,
- [
- 'border' => '0',
- 'title' => __('Remove'),
- 'style' => 'cursor: pointer;',
- 'class' => 'remove-custom-field invert_filter',
- ]
- );
- $table->data['hidden-custom-field-row'] = $row;
+ $table->data['hidden-custom-field-row'] = html_print_label_input_block(
+ '',
+ ''.html_print_input_hidden(
+ 'hidden-custom-field-name',
+ '',
+ true
+ ).html_print_input_hidden(
+ 'hidden-custom-field-is-secure',
+ 0,
+ true
+ ).html_print_input_text(
+ 'hidden-custom-field-input',
+ '',
+ '',
+ 25,
+ 40,
+ true,
+ false,
+ false,
+ '',
+ 'w100p'
+ ).html_print_image(
+ 'images/delete.svg',
+ true,
+ [
+ 'border' => '0',
+ 'title' => __('Remove'),
+ 'style' => 'cursor: pointer;',
+ 'class' => 'remove-custom-field invert_filter main_menu_icon',
+ ]
+ ).'
'
+ );
+ $table->colspan['hidden-custom-field-row'][0] = 2;
if ($custom_fields_enabled) {
foreach ($custom_fields as $i => $field) {
- $row = [];
- $row['title'] = ''.$field['name'].'';
- $row['input'] = html_print_input_hidden(
- 'custom_fields['.$i.'][name]',
- $field['name'],
- true
- );
- $row['input'] .= html_print_input_hidden(
- 'custom_fields['.$i.'][secure]',
- $field['secure'],
- true
- );
if ($field['secure']) {
- $row['input'] .= html_print_input_password(
+ $secure = html_print_input_password(
'custom_fields['.$i.'][value]',
- $field['value'],
+ io_safe_input($field['value']),
'',
- 25,
+ false,
40,
- true
+ true,
+ false,
+ false,
+ '',
+ 'off',
+ false,
+ 'w100p'
);
} else {
- $row['input'] .= html_print_input_text(
+ $secure = html_print_input_text(
'custom_fields['.$i.'][value]',
- $field['value'],
+ io_safe_input($field['value']),
'',
- 25,
+ false,
40,
- true
+ true,
+ false,
+ false,
+ '',
+ 'w100p'
);
}
- $row['input'] .= ' ';
- $row['input'] .= html_print_image(
- 'images/delete.svg',
- true,
- [
- 'border' => '0',
- 'title' => __('Remove'),
- 'style' => 'cursor: pointer;',
- 'class' => 'remove-custom-field invert_filter',
- ]
+ $table->colspan['custom-field-row-'.$i][0] = 2;
+ $table->data['custom-field-row-'.$i] = html_print_label_input_block(
+ $field['name'],
+ ''.html_print_input_hidden(
+ 'custom_fields['.$i.'][name]',
+ $field['name'],
+ true
+ ).html_print_input_hidden(
+ 'custom_fields['.$i.'][secure]',
+ $field['secure'],
+ true
+ ).$secure.html_print_image(
+ 'images/delete.svg',
+ true,
+ [
+ 'border' => '0',
+ 'title' => __('Remove'),
+ 'style' => 'cursor: pointer;',
+ 'class' => 'remove-custom-field invert_filter main_menu_icon',
+ ]
+ ).'
'
);
-
- $table->data['custom-field-row-'.$i] = $row;
}
}
@@ -7689,46 +7714,50 @@ function ui_get_inventory_module_add_form(
$("#inventory-module-form-userpass-row").hide();
$("#inventory-module-form-custom-fields-row").show();
$("tr[id^=inventory-module-form-custom-field-row-]").show();
+ $('#inventory-module-form-custom-fields-button').show();
} else {
$("#inventory-module-form-userpass-row").show();
$("#inventory-module-form-custom-fields-row").hide();
$("tr[id^=inventory-module-form-custom-field-row-]").hide();
+ $('#inventory-module-form-custom-fields-button').hide();
}
}
function add_row_for_custom_field (fieldName, isSecure) {
var custom_fields_num = $("tr[id^=inventory-module-form-custom-field-row-]").length;
$("#inventory-module-form-hidden-custom-field-row")
- .clone()
- .prop("id", "inventory-module-form-custom-field-row-" + custom_fields_num)
- .children("#inventory-module-form-hidden-custom-field-row-hidden-title")
- .prop("id", "inventory-module-form-custom-field-row-title-" + custom_fields_num)
- .html("" + fieldName + "")
- .parent()
- .children("#inventory-module-form-hidden-custom-field-row-hidden-input")
- .prop("id", "inventory-module-form-custom-field-row-input-" + custom_fields_num)
- .prop("colspan", 2)
- .children("input[name=hidden-custom-field-name]")
+ .clone()
+ .prop("id", "inventory-module-form-custom-field-row-" + custom_fields_num)
+ .children("[id^='inventory-module-form-hidden-custom-field-row']") // go to TD
+ .prop("id", "inventory-module-form-hidden-custom-field-row-"+ custom_fields_num)
+ .children() // go to DIV
+ .find('label')
+ .html(fieldName)
+ .parent() // up to DIV padre
+ .find('div') //go to DIV no label
+ .children("[id^=hidden-hidden-custom-field-name]")
.prop("id", "custom-field-name-" + custom_fields_num)
.prop("name", "custom_fields[" + custom_fields_num + "][name]")
- .val(fieldName)
+ .prop("value", fieldName)
.parent()
- .children("input[name=hidden-custom-field-is-secure]")
- .prop("id", "custom-field-is-secure-" + custom_fields_num)
- .prop("name", "custom_fields[" + custom_fields_num + "][secure]")
- .val(isSecure ? 1 : 0)
- .parent()
- .children("input[name=hidden-custom-field-input]")
- .prop("id", "custom-field-input-" + custom_fields_num)
- .prop("type", isSecure ? "password" : "text")
- .prop("name", "custom_fields[" + custom_fields_num + "][value]")
- .parent()
- .children("img.remove-custom-field")
- .click(remove_custom_field)
- .parent()
- .parent()
- .insertBefore($("#inventory-module-form-custom-fields-row"))
- .show();
+ .children("input[name=hidden-custom-field-is-secure]")
+ .prop("id", "custom-field-is-secure-" + custom_fields_num)
+ .prop("name", "custom_fields[" + custom_fields_num + "][secure]")
+ .val(isSecure ? 1 : 0)
+ .parent()
+ .children("input[name=hidden-custom-field-input]")
+ .prop("id", "custom-field-input-" + custom_fields_num)
+ .prop("type", isSecure ? "password" : "text")
+ .prop("name", "custom_fields[" + custom_fields_num + "][value]")
+ .parent()
+ .children("img.remove-custom-field")
+ .click(remove_custom_field)
+ .parent()
+ .parent()
+ .parent() // up to TD
+ .parent() // up to TR
+ .insertBefore($("#inventory-module-form-custom-fields-row"))
+ .show();
}
function add_custom_field () {
diff --git a/pandora_console/include/graphs/flot/pandora.flot.js b/pandora_console/include/graphs/flot/pandora.flot.js
index 750ec4781a..ee99a0ad4f 100644
--- a/pandora_console/include/graphs/flot/pandora.flot.js
+++ b/pandora_console/include/graphs/flot/pandora.flot.js
@@ -2062,7 +2062,8 @@ function pandoraFlotArea(
yaxes: [
{
tickFormatter: yFormatter,
- position: "left"
+ position: "left",
+ minTickSize: 0.5
}
],
legend: {
@@ -2462,12 +2463,13 @@ function pandoraFlotArea(
$.each(update_legend, function(index, value) {
if (typeof value[x - 1] !== "undefined") {
data_legend[index] =
- " Min: " +
+ " Min: " +
number_format(value[x - 1].min, 0, unit, short_data, divisor) +
- " Max: " +
+ " Max: " +
number_format(value[x - 1].max, 0, unit, short_data, divisor) +
- " Avg: " +
- number_format(value[x - 1].avg, 0, unit, short_data, divisor);
+ " Avg: " +
+ number_format(value[x - 1].avg, 0, unit, short_data, divisor) +
+ "";
} else {
data_legend[index] = " Min: " + 0 + " Max: " + 0 + " Avg: " + 0;
}
@@ -2475,9 +2477,9 @@ function pandoraFlotArea(
if (typeof data_legend[series.label] !== "undefined") {
label_aux =
- legend[series.label].split(": Min")[0] +
- ": " +
- data_legend[series.label];
+ legend[series.label].split(
+ ''
+ )[0] + data_legend[series.label];
$("#legend_" + graph_id + " .legendLabel")
.eq(i)
.html(label_aux);
diff --git a/pandora_console/include/graphs/functions_flot.php b/pandora_console/include/graphs/functions_flot.php
index 9ea3abda95..1ee377f290 100644
--- a/pandora_console/include/graphs/functions_flot.php
+++ b/pandora_console/include/graphs/functions_flot.php
@@ -272,6 +272,11 @@ function flot_area_graph(
style=' width: ".$params['width'].'px;
height: '.$params['height']."px;'>";
+ $legend_top = 10;
+ if (empty($params['show_legend']) === false) {
+ $legend_top = (int) $params['height'];
+ }
+
if ($params['menu']) {
$params['height'] = 100;
} else {
@@ -280,13 +285,9 @@ function flot_area_graph(
if ((bool) $params['vconsole'] === false) {
$return .= '';
- $legend_top = 10;
- if (empty($params['show_legend']) === false) {
- $legend_top = (20 + (count($legend) * 18));
- }
if ($water_mark != '' && (bool) $params['dashboard'] === false) {
- $return .= '';
+ $return .= '
';
$return .= '

';
$return .= '
';
}
diff --git a/pandora_console/include/graphs/pandora.d3.js b/pandora_console/include/graphs/pandora.d3.js
index 09150de658..5c8b59013b 100644
--- a/pandora_console/include/graphs/pandora.d3.js
+++ b/pandora_console/include/graphs/pandora.d3.js
@@ -825,8 +825,7 @@ function sunburst(recipient, data, width, height, tooltip = true) {
if (height === "auto") {
height = width;
}
- // var width = 960,
- // height = 700;
+
var radius = Math.min(width, height) / 2;
var x = d3.scale.linear().range([0, 2 * Math.PI]);
@@ -857,7 +856,11 @@ function sunburst(recipient, data, width, height, tooltip = true) {
return Math.max(0, y(d.y));
})
.outerRadius(function(d) {
- return Math.max(0, y(d.y + d.dy));
+ if (d.children || d.depth === 4) {
+ return Math.max(0, y(d.y + d.dy));
+ } else {
+ return Math.max(0, y(d.y + d.dy)) + 20;
+ }
});
var g = svg
@@ -879,6 +882,7 @@ function sunburst(recipient, data, width, height, tooltip = true) {
: color((d.children ? d : d.parent).name);
})
.style("cursor", "pointer")
+ .style("stroke-width", "0.2")
.on("click", click)
.on("mouseover", tooltip === "1" ? over_user : "")
.on("mouseout", out_user)
@@ -888,23 +892,38 @@ function sunburst(recipient, data, width, height, tooltip = true) {
if (d.type === "central_service") {
return 0;
}
+
var ang = ((x(d.x + d.dx / 2) - Math.PI / 2) / Math.PI) * 180;
- return ang > 90 ? 180 + ang : ang;
+ if (calculate_angle(d) < 20) {
+ return ang;
+ } else {
+ return Math.trunc(ang) == 90 || Math.trunc(ang) == 89
+ ? ang - 90
+ : 90 + ang;
+ }
}
var text = g
.append("text")
.attr("transform", function(d) {
- return (
- "translate(" +
- arc.centroid(d) +
- ")rotate(" +
- computeTextRotation(d) +
- ")"
- );
+ if (typeof d.show_name != "undefined" && d.show_name) {
+ return (
+ "translate(" +
+ arc.centroid(d) +
+ ")rotate(" +
+ computeTextRotation(d) +
+ ")"
+ );
+ }
})
.attr("x", function(d) {
- return computeTextRotation(d) > 180 ? -40 : -30;
+ if (typeof d.show_name != "undefined" && d.show_name) {
+ if (calculate_angle(d) < 20) {
+ return (d.name.length + 15) * -1;
+ } else {
+ return (d.name.length + 25) * -1;
+ }
+ }
})
.attr("dx", "6") // margin
.attr("dy", function(d) {
@@ -914,17 +933,30 @@ function sunburst(recipient, data, width, height, tooltip = true) {
return ".35em";
}) // vertical-align
.attr("opacity", function(d) {
- if (
- (typeof d.show_name != "undefined" && d.show_name) ||
- d.type === "central_service"
- )
+ if (typeof d.show_name != "undefined" && d.show_name) {
return 1;
- else return 0;
+ } else {
+ return 0;
+ }
})
.text(function(d) {
+ if (d.name.length > 20) {
+ var resta = d.name.length - 12;
+ var string = d.name.slice(
+ d.name.length / 2 - resta / 2,
+ d.name.length / 2 + resta / 2
+ );
+ var split = d.name.split(`${string}`);
+ return `${split[0]}...${split[1]}`;
+ }
return d.name;
})
- .style("font-size", "10px")
+ .style("font-size", "11px")
+ .style("fill", function(d) {
+ if (d.color !== "#82b92e") {
+ return "white";
+ }
+ })
// Makes svg elements invisible to events
.style("pointer-events", "none");
@@ -972,7 +1004,11 @@ function sunburst(recipient, data, width, height, tooltip = true) {
);
})
.attr("x", function(d) {
- return computeTextRotation(d) > 180 ? -40 : -30;
+ if (calculate_angle(d) < 20) {
+ return (d.name.length + 15) * -1;
+ } else {
+ return (d.name.length + 25) * -1;
+ }
})
.transition()
.duration(250)
@@ -1074,6 +1110,15 @@ function sunburst(recipient, data, width, height, tooltip = true) {
function hide_tooltip() {
$("#tooltip").hide();
}
+
+ function calculate_angle(d) {
+ var start_angle = Math.max(0, Math.min(2 * Math.PI, x(d.x)));
+ start_angle = (start_angle * 180) / Math.PI;
+ var end_angle = Math.max(0, Math.min(2 * Math.PI, x(d.x + d.dx)));
+ end_angle = (end_angle * 180) / Math.PI;
+
+ return end_angle - start_angle;
+ }
}
function createGauge(
diff --git a/pandora_console/include/javascript/datatables.min.js b/pandora_console/include/javascript/datatables.min.js
index c2afd85400..b396fe83d4 100644
--- a/pandora_console/include/javascript/datatables.min.js
+++ b/pandora_console/include/javascript/datatables.min.js
@@ -451,7 +451,7 @@ aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:
iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:
this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=x={buttons:{},
classes:{},build:"dt/dt-1.10.18",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature,oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});
-h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
+h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter padding-lft-10",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
sJUIHeader:"",sJUIFooter:""});var Kb=n.ext.pager;h.extend(Kb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e,
f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,n=0,o=function(b,d){var k,s,u,r,v=function(b){Ta(a,b.data.action,true)};k=0;for(s=d.length;k
").appendTo(b);o(u,r)}else{m=null;l="";switch(r){case "ellipsis":b.append('
…');break;case "first":m=j.sFirst;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":m=
diff --git a/pandora_console/include/javascript/fulldatatables.min.js b/pandora_console/include/javascript/fulldatatables.min.js
index 250972a5d2..a572786969 100644
--- a/pandora_console/include/javascript/fulldatatables.min.js
+++ b/pandora_console/include/javascript/fulldatatables.min.js
@@ -410,7 +410,7 @@ aoFooter:[],oPreviousSearch:{},aoPreSearchCols:[],aaSorting:null,aaSortingFixed:
iStateDuration:0,aoStateSave:[],aoStateLoad:[],oSavedState:null,oLoadedState:null,sAjaxSource:null,sAjaxDataProp:null,bAjaxDataGet:!0,jqXHR:null,json:k,oAjaxData:k,fnServerData:null,aoServerParams:[],sServerMethod:null,fnFormatNumber:null,aLengthMenu:null,iDraw:0,bDrawing:!1,iDrawError:-1,_iDisplayLength:10,_iDisplayStart:0,_iRecordsTotal:0,_iRecordsDisplay:0,oClasses:{},bFiltered:!1,bSorted:!1,bSortCellsTop:null,oInit:null,aoDestroyCallback:[],fnRecordsTotal:function(){return"ssp"==y(this)?1*this._iRecordsTotal:
this.aiDisplayMaster.length},fnRecordsDisplay:function(){return"ssp"==y(this)?1*this._iRecordsDisplay:this.aiDisplay.length},fnDisplayEnd:function(){var a=this._iDisplayLength,b=this._iDisplayStart,c=b+a,d=this.aiDisplay.length,e=this.oFeatures,f=e.bPaginate;return e.bServerSide?!1===f||-1===a?b+d:Math.min(b+a,this._iRecordsDisplay):!f||c>d||-1===a?d:c},oInstance:null,sInstance:null,iTabIndex:0,nScrollHead:null,nScrollFoot:null,aLastSort:[],oPlugins:{},rowIdFn:null,rowId:null};n.ext=x={buttons:{},
classes:{},build:"ju-1.12.1/jq-3.3.1/dt-1.10.18",errMode:"alert",feature:[],search:[],selector:{cell:[],column:[],row:[]},internal:{},legacy:{ajax:null},pager:{},renderer:{pageButton:{},header:{}},order:{},type:{detect:[],search:{},order:{}},_unique:0,fnVersionCheck:n.fnVersionCheck,iApiIndex:0,oJUIClasses:{},sVersion:n.version};h.extend(x,{afnFiltering:x.search,aTypes:x.type.detect,ofnSearch:x.type.search,oSort:x.type.order,afnSortData:x.order,aoFeatures:x.feature,oApi:x.internal,oStdClasses:x.classes,oPagination:x.pager});
-h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
+h.extend(n.ext.classes,{sTable:"dataTable",sNoFooter:"no-footer",sPageButton:"paginate_button",sPageButtonActive:"current",sPageButtonDisabled:"disabled",sStripeOdd:"odd",sStripeEven:"even",sRowEmpty:"dataTables_empty",sWrapper:"dataTables_wrapper",sFilter:"dataTables_filter padding-lft-10",sInfo:"dataTables_info",sPaging:"dataTables_paginate paging_",sLength:"dataTables_length",sProcessing:"dataTables_processing",sSortAsc:"sorting_asc",sSortDesc:"sorting_desc",sSortable:"sorting",sSortableAsc:"sorting_asc_disabled",
sSortableDesc:"sorting_desc_disabled",sSortableNone:"sorting_disabled",sSortColumn:"sorting_",sFilterInput:"",sLengthSelect:"",sScrollWrapper:"dataTables_scroll",sScrollHead:"dataTables_scrollHead",sScrollHeadInner:"dataTables_scrollHeadInner",sScrollBody:"dataTables_scrollBody",sScrollFoot:"dataTables_scrollFoot",sScrollFootInner:"dataTables_scrollFootInner",sHeaderTH:"",sFooterTH:"",sSortJUIAsc:"",sSortJUIDesc:"",sSortJUI:"",sSortJUIAscAllowed:"",sSortJUIDescAllowed:"",sSortJUIWrapper:"",sSortIcon:"",
sJUIHeader:"",sJUIFooter:""});var Kb=n.ext.pager;h.extend(Kb,{simple:function(){return["previous","next"]},full:function(){return["first","previous","next","last"]},numbers:function(a,b){return[ia(a,b)]},simple_numbers:function(a,b){return["previous",ia(a,b),"next"]},full_numbers:function(a,b){return["first","previous",ia(a,b),"next","last"]},first_last_numbers:function(a,b){return["first",ia(a,b),"last"]},_numbers:ia,numbers_length:7});h.extend(!0,n.ext.renderer,{pageButton:{_:function(a,b,c,d,e,
f){var g=a.oClasses,j=a.oLanguage.oPaginate,i=a.oLanguage.oAria.paginate||{},m,l,n=0,o=function(b,d){var k,s,u,r,v=function(b){Ta(a,b.data.action,true)};k=0;for(s=d.length;k
").appendTo(b);o(u,r)}else{m=null;l="";switch(r){case "ellipsis":b.append('
…');break;case "first":m=j.sFirst;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "previous":m=j.sPrevious;l=r+(e>0?"":" "+g.sPageButtonDisabled);break;case "next":m=
diff --git a/pandora_console/include/javascript/functions_pandora_networkmap.js b/pandora_console/include/javascript/functions_pandora_networkmap.js
index 5a2f75889e..c1c7a7d4f8 100644
--- a/pandora_console/include/javascript/functions_pandora_networkmap.js
+++ b/pandora_console/include/javascript/functions_pandora_networkmap.js
@@ -3887,7 +3887,8 @@ function draw_elements_graph() {
return d.id + networkmap_id;
})
.attr("style", function(d) {
- return d.id === 0 ? "filter: invert(0%)" : "";
+ const extension = d.image_url.split(".").pop();
+ return extension !== "svg" || d.id === 0 ? "filter: invert(0%)" : "";
})
.attr("id", "image2995")
.classed("dragable_node", true) //own dragable
diff --git a/pandora_console/include/javascript/pandora.js b/pandora_console/include/javascript/pandora.js
index 4fa8511a60..ea69d5f8d8 100644
--- a/pandora_console/include/javascript/pandora.js
+++ b/pandora_console/include/javascript/pandora.js
@@ -1433,80 +1433,18 @@ function openURLTagWindow(url) {
* @param added_config Associative Array. Config to add adding default.
*/
-function defineTinyMCE(added_config) {
- // Default values
- var buttons1 =
- "bold,italic,underline,|,link,image,|,cut,copy,paste,|,undo,redo,|,forecolor,fontselect,fontsizeselect,|,justifyleft,justifycenter,justifyright";
- var elements = added_config["elements"];
- var plugins = added_config["plugins"];
- // Initialize with fixed parameters. Some parameters must be initialized too.
- tinyMCE.init({
- mode: "exact",
- theme: "advanced",
- elements: elements,
- plugins: plugins,
- theme_advanced_buttons1: buttons1,
- theme_advanced_toolbar_location: "top",
- theme_advanced_toolbar_align: "left",
- theme_advanced_statusbar_location: "bottom",
- theme_advanced_resizing: true,
- convert_urls: false,
- element_format: "html",
- object_resizing: true,
- autoresize_bottom_margin: 50,
- autoresize_on_init: true,
- extended_valid_elements: "img[*]"
+function defineTinyMCE(selector) {
+ tinymce.init({
+ selector: selector,
+ plugins: "preview, searchreplace, table, nonbreaking",
+ promotion: false,
+ branding: false
});
-
- if (!isEmptyObject(added_config)) {
- // If use asterisk mask, you can add at end of buttons new buttons.
- for (var key in added_config) {
- switch (key) {
- case "theme_advanced_buttons1*":
- tinyMCE.settings.theme_advanced_buttons1 =
- buttons1 + ",|," + added_config[key];
- break;
- case "theme_advanced_font_sizes":
- tinyMCE.settings.theme_advanced_font_sizes =
- "4pt=.visual_font_size_4pt, " +
- "6pt=.visual_font_size_6pt, " +
- "8pt=.visual_font_size_8pt, " +
- "10pt=.visual_font_size_10pt, " +
- "12pt=.visual_font_size_12pt, " +
- "14pt=.visual_font_size_14pt, " +
- "18pt=.visual_font_size_18pt, " +
- "24pt=.visual_font_size_24pt, " +
- "28pt=.visual_font_size_28pt, " +
- "36pt=.visual_font_size_36pt, " +
- "48pt=.visual_font_size_48pt, " +
- "60pt=.visual_font_size_60pt, " +
- "72pt=.visual_font_size_72pt, " +
- "84pt=.visual_font_size_84pt, " +
- "96pt=.visual_font_size_96pt, " +
- "116pt=.visual_font_size_116pt, " +
- "128pt=.visual_font_size_128pt, " +
- "140pt=.visual_font_size_140pt, " +
- "154pt=.visual_font_size_154pt, " +
- "196pt=.visual_font_size_196pt";
- break;
- default:
- tinyMCE.settings[key] = added_config[key];
- break;
- }
- }
- }
}
-function removeTinyMCE(elementID) {
- if (elementID.length > 0 && !isEmptyObject(tinyMCE))
- tinyMCE.EditorManager.execCommand("mceRemoveControl", true, elementID);
-}
-
-function addTinyMCE(elementID) {
- if (elementID.length > 0 && !isEmptyObject(tinyMCE))
- tinyMCE.EditorManager.execCommand("mceAddControl", true, elementID);
- tinyMCE.EditorManager.execCommand("mceAutoResize");
- tinymce.EditorManager.execCommand("mceTableSizingMode", false, "responsive");
+function UndefineTinyMCE(textarea_id) {
+ tinyMCE.remove(textarea_id);
+ $(textarea_id).show("");
}
function toggle_full_value(id) {
diff --git a/pandora_console/include/javascript/pandora_dashboards.js b/pandora_console/include/javascript/pandora_dashboards.js
index f46c64082f..5b36832b29 100644
--- a/pandora_console/include/javascript/pandora_dashboards.js
+++ b/pandora_console/include/javascript/pandora_dashboards.js
@@ -418,21 +418,10 @@ function initialiceLayout(data) {
onsubmit: {
page: data.page,
method: "saveWidgetIntoCell",
- dataType: "json",
- preaction: function() {
- if (tinyMCE != undefined && tinyMCE.editors.length > 0 && widgetId) {
- // Content tiny.
- var label = tinyMCE.activeEditor.getContent();
- $("#textarea_text").val(label);
- }
- }
+ dataType: "json"
},
ajax_callback: update_widget_to_cell,
- onsubmitClose: 1,
- beforeClose: function() {
- tinyMCE.remove("#textarea_text");
- tinyMCE.execCommand("mceRemoveControl", true, "textarea_text");
- }
+ onsubmitClose: 1
});
}
@@ -1438,45 +1427,7 @@ function dashboardLoadVC(settings) {
// eslint-disable-next-line no-unused-vars
function dashboardInitTinyMce(url) {
// Initialice.
- tinyMCE.init({
- selector: "#textarea_text",
- theme: "advanced",
- content_css: url + "include/styles/pandora.css",
- theme_advanced_font_sizes:
- "4pt=.visual_font_size_4pt, " +
- "6pt=.visual_font_size_6pt, " +
- "8pt=.visual_font_size_8pt, " +
- "10pt=.visual_font_size_10pt, " +
- "12pt=.visual_font_size_12pt, " +
- "14pt=.visual_font_size_14pt, " +
- "18pt=.visual_font_size_18pt, " +
- "24pt=.visual_font_size_24pt, " +
- "28pt=.visual_font_size_28pt, " +
- "36pt=.visual_font_size_36pt, " +
- "48pt=.visual_font_size_48pt, " +
- "60pt=.visual_font_size_60pt, " +
- "72pt=.visual_font_size_72pt, " +
- "84pt=.visual_font_size_84pt, " +
- "96pt=.visual_font_size_96pt, " +
- "116pt=.visual_font_size_116pt, " +
- "128pt=.visual_font_size_128pt, " +
- "140pt=.visual_font_size_140pt, " +
- "154pt=.visual_font_size_154pt, " +
- "196pt=.visual_font_size_196pt",
- theme_advanced_toolbar_location: "top",
- theme_advanced_toolbar_align: "left",
- theme_advanced_buttons1:
- "bold,italic, |,justifyleft, justifycenter, justifyright, |, undo, redo, |, image, link",
- theme_advanced_buttons2: "fontselect, forecolor, fontsizeselect, |,code",
- theme_advanced_buttons3: "",
- theme_advanced_statusbar_location: "none",
- body_class: "",
- forced_root_block: false,
- force_p_newlines: false,
- force_br_newlines: true,
- convert_newlines_to_brs: false,
- remove_linebreaks: true
- });
+ UndefineTinyMCE("#textarea_text");
}
function debounce(func, wait, immediate) {
@@ -1571,16 +1522,12 @@ function type_change() {
var type = document.getElementById("type").value;
switch (type) {
- case "3":
- $("#li_tags").hide();
- $("#li_groups").hide();
- $("#li_module_groups").hide();
- break;
case "2":
$("#li_tags").hide();
$("#li_groups").hide();
$("#li_module_groups").show();
break;
+
case "1":
$("#li_tags").show();
$("#li_groups").hide();
@@ -1588,6 +1535,7 @@ function type_change() {
break;
default:
+ case "3":
case "0":
$("#li_tags").hide();
$("#li_groups").show();
diff --git a/pandora_console/include/javascript/pandora_events.js b/pandora_console/include/javascript/pandora_events.js
index 2f657779a6..dcc5649679 100644
--- a/pandora_console/include/javascript/pandora_events.js
+++ b/pandora_console/include/javascript/pandora_events.js
@@ -465,22 +465,19 @@ function event_comment(current_event) {
return false;
}
- var params = [];
- params.push("page=include/ajax/events");
- params.push("add_comment=1");
- if (event.event_rep > 0) {
- params.push("event_id=" + event.max_id_evento);
- } else {
- params.push("event_id=" + event.id_evento);
- }
- params.push("comment=" + comment);
- params.push("server_id=" + event.server_id);
+ var params = {
+ page: "include/ajax/events",
+ add_comment: 1,
+ event_id: event.event_rep > 0 ? event.max_id_evento : event.id_evento,
+ comment: comment,
+ server_id: event.server_id
+ };
$("#button-comment_button").attr("disabled", "disabled");
$("#response_loading").show();
jQuery.ajax({
- data: params.join("&"),
+ data: params,
type: "POST",
url: getUrlAjax(),
dataType: "html",
@@ -947,8 +944,28 @@ function process_buffers(buffers) {
}
function openSoundEventModal(settings) {
- settings = JSON.parse(atob(settings));
+ if ($("#hidden-metaconsole_activated").val() === "1") {
+ var win = open(
+ "../../operation/events/sound_events.php",
+ "day_123",
+ "width=600,height=500"
+ );
+ } else {
+ var win = open(
+ "operation/events/sound_events.php",
+ "day_123",
+ "width=600,height=500"
+ );
+ }
+ if (win) {
+ //Browser has allowed it to be opened
+ win.focus();
+ } else {
+ //Browser has blocked it
+ alert("Please allow popups for this website");
+ }
+ settings = JSON.parse(atob(settings));
// Check modal exists and is open.
if (
$("#modal-sound").hasClass("ui-dialog-content") &&
@@ -956,102 +973,6 @@ function openSoundEventModal(settings) {
) {
return;
}
-
- // Initialize modal.
- $("#modal-sound")
- .empty()
- .dialog({
- title: settings.title,
- resizable: false,
- modal: true,
- position: { my: "right top", at: "right bottom", of: window },
- overlay: {
- opacity: 0.5,
- background: "black"
- },
- width: 600,
- height: 600,
- open: function() {
- $(".ui-widget-overlay")
- .css("background", "black")
- .css("opacity", 0.5);
- $.ajax({
- method: "post",
- url: settings.url,
- data: {
- page: settings.page,
- drawConsoleSound: 1
- },
- dataType: "html",
- success: function(data) {
- $("#modal-sound").append(data);
- $("#tabs-sound-modal").tabs({
- disabled: [1]
- });
-
- // Test sound.
- $("#button-melody_sound").click(function() {
- var sound = false;
- if ($("#id_sound_event").length == 0) {
- sound = true;
- }
-
- test_sound_button(sound, settings.urlSound);
- });
-
- // Play Stop.
- $("#button-start-search").click(function() {
- var mode = $("#hidden-mode_alert").val();
- var action = false;
- if (mode == 0) {
- action = true;
- }
-
- action_events_sound(action, settings);
- });
-
- // Silence Alert.
- $("#button-no-alerts").click(function() {
- if ($("#button-no-alerts").hasClass("silence-alerts") === true) {
- // Remove audio.
- remove_audio();
-
- // Clean events.
- $("#tabs-sound-modal .elements-discovered-alerts ul").empty();
- $("#tabs-sound-modal .empty-discovered-alerts").removeClass(
- "invisible_important"
- );
-
- // Clean progress.
- $("#progressbar_time").empty();
-
- // Change img button.
- $("#button-no-alerts")
- .removeClass("silence-alerts")
- .addClass("alerts");
- // Change value button.
- $("#button-no-alerts").val(settings.noAlert);
- $("#button-no-alerts > span").text(settings.noAlert);
-
- // Background button.
- $(".container-button-alert").removeClass("fired");
-
- // New progress.
- listen_event_sound(settings);
- }
- });
- },
- error: function(error) {
- console.error(error);
- }
- });
- },
- close: function() {
- remove_audio();
- $(this).dialog("destroy");
- }
- })
- .show();
}
function test_sound_button(test_sound, urlSound) {
diff --git a/pandora_console/include/javascript/pandora_visual_console.js b/pandora_console/include/javascript/pandora_visual_console.js
index 49464b0724..354934039c 100755
--- a/pandora_console/include/javascript/pandora_visual_console.js
+++ b/pandora_console/include/javascript/pandora_visual_console.js
@@ -1350,24 +1350,14 @@ function createOrUpdateVisualConsoleItem(
onshow: {
page: "include/rest-api/index",
method: "loadTabs",
- maxHeight: 600,
+ maxHeight: 900,
minHeight: 400
},
onsubmit: {
page: "include/rest-api/index",
method: "processForm",
preaction: function() {
- if (
- tinyMCE != undefined &&
- tinyMCE.editors.length > 0 &&
- item.itemProps.type != 12 &&
- item.itemProps.type != 13 &&
- item.itemProps.type != 21
- ) {
- // Content tiny.
- var label = tinyMCE.activeEditor.getContent();
- $("#textarea_label").val(label);
- }
+ UndefineTinyMCE("#textarea_label");
if (item.itemProps.id) {
item.setMeta({ isUpdating: true });
} else {
@@ -1387,11 +1377,7 @@ function createOrUpdateVisualConsoleItem(
}
}
},
- onsubmitClose: 1,
- beforeClose: function() {
- tinyMCE.remove("#textarea_label");
- tinyMCE.execCommand("mceRemoveControl", true, "textarea_label");
- }
+ onsubmitClose: 1
});
}
diff --git a/pandora_console/include/javascript/tree/TreeController.js b/pandora_console/include/javascript/tree/TreeController.js
index 59a4f43d50..a32a749c5e 100644
--- a/pandora_console/include/javascript/tree/TreeController.js
+++ b/pandora_console/include/javascript/tree/TreeController.js
@@ -1381,7 +1381,6 @@ var TreeController = {
.removeClass("leaf-closed")
.removeClass("leaf-error")
.addClass("leaf-loading");
-
$.ajax({
url: controller.ajaxURL,
type: "POST",
@@ -1413,6 +1412,53 @@ var TreeController = {
data.tree.length > 0) ||
$group.length > 0
) {
+ if (controller.filter.statusModule === "fired") {
+ var newData = { success: data.success, tree: [] };
+
+ data.tree.forEach(element => {
+ // Agents.
+ if (
+ typeof element.counters !== "undefined" &&
+ element.counters.alerts > 0
+ ) {
+ var treeTmp = element;
+
+ treeTmp.counters.critical = 0;
+ treeTmp.counters.not_init = 0;
+ treeTmp.counters.ok = 0;
+ treeTmp.counters.unknown = 0;
+ treeTmp.counters.warning = 0;
+ treeTmp.counters.total =
+ element.counters.alerts;
+
+ treeTmp.critical_count = 0;
+ treeTmp.normal_count = 0;
+ treeTmp.notinit_count = 0;
+ treeTmp.unknown_count = 0;
+ treeTmp.warning_count = 0;
+ treeTmp.total_count = element.fired_count;
+
+ treeTmp.state_critical = 0;
+ treeTmp.state_normal = 0;
+ treeTmp.state_notinit = 0;
+ treeTmp.state_unknown = 0;
+ treeTmp.state_warning = 0;
+ treeTmp.state_total = element.fired_count;
+
+ newData.tree.push(treeTmp);
+ data = newData;
+ }
+
+ // Modules.
+ if (element.alerts > 0) {
+ var treeTmp = element;
+
+ newData.tree.push(treeTmp);
+ data = newData;
+ }
+ });
+ }
+
$node.addClass("leaf-open");
if ($group.length <= 0) {
@@ -1513,6 +1559,34 @@ var TreeController = {
this.reload();
},
init: function(data) {
+ if (data.filter.statusModule === "fired") {
+ const newData = {
+ ajaxUrl: data.ajaxURL,
+ baseURL: data.baseURL,
+ counterTitle: data.counterTitle,
+ detailRecipient: data.detailRecipient,
+ emptyMessage: data.emptyMessage,
+ filter: data.filter,
+ foundMessage: data.foundMessage,
+ page: data.page,
+ recipient: data.recipient,
+ tree: []
+ };
+ data.tree.forEach(element => {
+ if (element.counters.alerts > 0) {
+ element.counters.critical = 0;
+ element.counters.not_init = 0;
+ element.counters.ok = 0;
+ element.counters.unknown = 0;
+ element.counters.warning = 0;
+ element.counters.total = element.counters.alerts;
+
+ newData.tree.push(element);
+ }
+ });
+
+ data = newData;
+ }
if (
typeof data.recipient !== "undefined" &&
data.recipient.length > 0
diff --git a/pandora_console/include/lib/Dashboard/Widget.php b/pandora_console/include/lib/Dashboard/Widget.php
index ec962bb36d..245c9f0481 100644
--- a/pandora_console/include/lib/Dashboard/Widget.php
+++ b/pandora_console/include/lib/Dashboard/Widget.php
@@ -423,6 +423,7 @@ class Widget
case 'EventCardboard':
case 'ModulesByStatus':
case 'AvgSumMaxMinModule':
+ case 'BasicChart':
$className .= '\\'.$name;
break;
diff --git a/pandora_console/include/lib/Dashboard/Widgets/BasicChart.php b/pandora_console/include/lib/Dashboard/Widgets/BasicChart.php
new file mode 100644
index 0000000000..8041cf77d9
--- /dev/null
+++ b/pandora_console/include/lib/Dashboard/Widgets/BasicChart.php
@@ -0,0 +1,681 @@
+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 = __('Basic chart');
+
+ // Name.
+ if (empty($this->name) === true) {
+ $this->name = 'BasicChart';
+ }
+
+ // This forces at least a first configuration.
+ $this->configurationRequired = false;
+ if (empty($this->values['moduleId']) === true) {
+ $this->configurationRequired = true;
+ } else {
+ try {
+ if (is_metaconsole() === true
+ && $this->values['metaconsoleId'] > 0
+ ) {
+ $node = new Node($this->values['metaconsoleId']);
+ $node->connect();
+ }
+
+ $check_exist = db_get_sql(
+ sprintf(
+ 'SELECT id_agente_modulo
+ FROM tagente_modulo
+ WHERE id_agente_modulo = %s
+ AND delete_pending = 0',
+ $this->values['moduleId']
+ )
+ );
+ } catch (\Exception $e) {
+ // Unexistent agent.
+ if (is_metaconsole() === true
+ && $this->values['metaconsoleId'] > 0
+ ) {
+ $node->disconnect();
+ }
+
+ $check_exist = false;
+ } finally {
+ if (is_metaconsole() === true
+ && $this->values['metaconsoleId'] > 0
+ ) {
+ $node->disconnect();
+ }
+ }
+
+ if ($check_exist === false) {
+ $this->loadError = 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['id_agent_'.$this->cellId]) === true) {
+ $values['agentId'] = $decoder['id_agent_'.$this->cellId];
+ }
+
+ if (isset($decoder['agentId']) === true) {
+ $values['agentId'] = $decoder['agentId'];
+ }
+
+ if (isset($decoder['metaconsoleId']) === true) {
+ $values['metaconsoleId'] = $decoder['metaconsoleId'];
+ }
+
+ if (isset($decoder['id_module_'.$this->cellId]) === true) {
+ $values['moduleId'] = $decoder['id_module_'.$this->cellId];
+ }
+
+ if (isset($decoder['moduleId']) === true) {
+ $values['moduleId'] = $decoder['moduleId'];
+ }
+
+ if (isset($decoder['period']) === true) {
+ $values['period'] = $decoder['period'];
+ }
+
+ if (isset($decoder['showLabel']) === true) {
+ $values['showLabel'] = $decoder['showLabel'];
+ }
+
+ if (isset($decoder['showValue']) === true) {
+ $values['showValue'] = $decoder['showValue'];
+ }
+
+ if (isset($decoder['sizeLabel']) === true) {
+ $values['sizeLabel'] = $decoder['sizeLabel'];
+ }
+
+ if (isset($decoder['sizeValue']) === true) {
+ $values['sizeValue'] = $decoder['sizeValue'];
+ }
+
+ if (isset($decoder['colorLabel']) === true) {
+ $values['colorLabel'] = $decoder['colorLabel'];
+ }
+
+ if (isset($decoder['colorValue']) === true) {
+ $values['colorValue'] = $decoder['colorValue'];
+ }
+
+ if (isset($decoder['colorChart']) === true) {
+ $values['colorChart'] = $decoder['colorChart'];
+ }
+
+ if (isset($decoder['formatData']) === true) {
+ $values['formatData'] = $decoder['formatData'];
+ }
+
+ if (isset($decoder['label']) === true) {
+ $values['label'] = $decoder['label'];
+ }
+
+ return $values;
+ }
+
+
+ /**
+ * Generates inputs for form (specific).
+ *
+ * @return array Of inputs.
+ *
+ * @throws Exception On error.
+ */
+ public function getFormInputs(): array
+ {
+ global $config;
+ $values = $this->values;
+
+ // Default values.
+ if (isset($values['period']) === false) {
+ $values['period'] = SECONDS_1DAY;
+ }
+
+ if (isset($values['colorChart']) === false) {
+ $values['colorChart'] = $config['graph_color1'];
+ }
+
+ if (isset($values['showLabel']) === false) {
+ $values['showLabel'] = 1;
+ }
+
+ if (isset($values['showValue']) === false) {
+ $values['showValue'] = 1;
+ }
+
+ if (isset($values['sizeLabel']) === false) {
+ $values['sizeLabel'] = 20;
+ }
+
+ if (isset($values['sizeValue']) === false) {
+ $values['sizeValue'] = 20;
+ }
+
+ if (isset($values['colorLabel']) === false) {
+ $values['colorLabel'] = '#333';
+ }
+
+ if (isset($values['colorValue']) === false) {
+ $values['colorValue'] = '#333';
+ }
+
+ if (isset($values['formatData']) === false) {
+ $values['formatData'] = 1;
+ }
+
+ if (isset($values['label']) === false) {
+ $values['label'] = 'module';
+ }
+
+ // Retrieve global - common inputs.
+ $inputs = parent::getFormInputs();
+
+ $blocks = [
+ 'row1',
+ 'row2',
+ ];
+
+ $inputs['blocks'] = $blocks;
+
+ foreach ($inputs as $kInput => $vInput) {
+ $inputs['inputs']['row1'][] = $vInput;
+ }
+
+ // Autocomplete agents.
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Agent'),
+ 'arguments' => [
+ 'type' => 'autocomplete_agent',
+ 'name' => 'agentAlias',
+ 'id_agent_hidden' => $values['agentId'],
+ 'name_agent_hidden' => 'agentId',
+ 'server_id_hidden' => $values['metaconsoleId'],
+ 'name_server_hidden' => 'metaconsoleId',
+ 'return' => true,
+ 'module_input' => true,
+ 'module_name' => 'moduleId',
+ 'module_none' => false,
+ 'size' => 0,
+ ],
+ ];
+
+ // Autocomplete module.
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Module'),
+ 'arguments' => [
+ 'type' => 'autocomplete_module',
+ 'name' => 'moduleId',
+ 'selected' => $values['moduleId'],
+ 'return' => true,
+ 'sort' => false,
+ 'agent_id' => $values['agentId'],
+ 'metaconsole_id' => $values['metaconsoleId'],
+ 'style' => 'width: inherit;',
+ 'nothing' => __('None'),
+ 'nothing_value' => 0,
+ ],
+ ];
+
+ // Period.
+ $inputs['inputs']['row1'][] = [
+ 'label' => __('Interval'),
+ 'arguments' => [
+ 'name' => 'period',
+ 'type' => 'interval',
+ 'value' => $values['period'],
+ 'nothing' => __('None'),
+ 'nothing_value' => 0,
+ 'style_icon' => 'flex-grow: 0',
+ ],
+ ];
+
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Color chart'),
+ 'arguments' => [
+ 'wrapper' => 'div',
+ 'name' => 'colorChart',
+ 'type' => 'color',
+ 'value' => $values['colorChart'],
+ 'return' => true,
+ ],
+ ];
+
+ $inputs['inputs']['row1'][] = [
+ 'label' => __('Show label'),
+ 'arguments' => [
+ 'name' => 'showLabel',
+ 'id' => 'showLabel',
+ 'type' => 'switch',
+ 'value' => $values['showLabel'],
+ ],
+ ];
+
+ $fields = [
+ 'module' => __('Module'),
+ 'agent' => __('Agent'),
+ 'agent_module' => __('Agent / module'),
+ ];
+
+ $inputs['inputs']['row1'][] = [
+ 'label' => __('Label'),
+ 'arguments' => [
+ 'type' => 'select',
+ 'fields' => $fields,
+ 'name' => 'label',
+ 'selected' => $values['label'],
+ 'return' => true,
+ ],
+ ];
+
+ $inputs['inputs']['row1'][] = [
+ 'label' => __('Label size in px'),
+ 'arguments' => [
+ 'name' => 'sizeLabel',
+ 'type' => 'number',
+ 'value' => $values['sizeLabel'],
+ 'return' => true,
+ 'min' => 5,
+ 'max' => 50,
+ ],
+ ];
+
+ $inputs['inputs']['row1'][] = [
+ 'label' => __('Color label'),
+ 'arguments' => [
+ 'wrapper' => 'div',
+ 'name' => 'colorLabel',
+ 'type' => 'color',
+ 'value' => $values['colorLabel'],
+ 'return' => true,
+ ],
+ ];
+
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Show Value'),
+ 'arguments' => [
+ 'name' => 'showValue',
+ 'id' => 'showValue',
+ 'type' => 'switch',
+ 'value' => $values['showValue'],
+ ],
+ ];
+
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Format'),
+ 'arguments' => [
+ 'name' => 'formatData',
+ 'id' => 'formatData',
+ 'type' => 'switch',
+ 'value' => $values['formatData'],
+ ],
+ ];
+
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Value size in px'),
+ 'arguments' => [
+ 'name' => 'sizeValue',
+ 'type' => 'number',
+ 'value' => $values['sizeValue'],
+ 'return' => true,
+ 'min' => 5,
+ 'max' => 50,
+ ],
+ ];
+
+ $inputs['inputs']['row2'][] = [
+ 'label' => __('Color value'),
+ 'arguments' => [
+ 'wrapper' => 'div',
+ 'name' => 'colorValue',
+ 'type' => 'color',
+ 'value' => $values['colorValue'],
+ 'return' => true,
+ ],
+ ];
+
+ return $inputs;
+ }
+
+
+ /**
+ * Get Post for widget.
+ *
+ * @return array
+ */
+ public function getPost():array
+ {
+ // Retrieve global - common inputs.
+ $values = parent::getPost();
+ $values['agentId'] = \get_parameter('agentId', 0);
+ $values['metaconsoleId'] = \get_parameter('metaconsoleId', 0);
+ $values['moduleId'] = \get_parameter('moduleId', 0);
+ $values['period'] = \get_parameter('period', 0);
+ $values['showLabel'] = \get_parameter_switch('showLabel');
+ $values['showValue'] = \get_parameter_switch('showValue');
+ $values['sizeLabel'] = \get_parameter('sizeLabel', 0);
+ $values['sizeValue'] = \get_parameter('sizeValue', 0);
+ $values['colorLabel'] = \get_parameter('colorLabel');
+ $values['colorValue'] = \get_parameter('colorValue');
+ $values['colorChart'] = \get_parameter('colorChart');
+ $values['formatData'] = \get_parameter_switch('formatData');
+ $values['label'] = \get_parameter('label');
+
+ return $values;
+ }
+
+
+ /**
+ * Draw widget.
+ *
+ * @return string;
+ */
+ public function load()
+ {
+ global $config;
+
+ $size = parent::getSize();
+ hd($size, true);
+
+ include_once $config['homedir'].'/include/functions_graph.php';
+ include_once $config['homedir'].'/include/functions_agents.php';
+ include_once $config['homedir'].'/include/functions_modules.php';
+
+ $module_name = \modules_get_agentmodule_name($this->values['moduleId']);
+ $alias = \modules_get_agentmodule_agent_alias($this->values['moduleId']);
+
+ $title = $module_name;
+ if ($this->values['label'] === 'agent') {
+ $title = $alias;
+ } else if ($this->values['label'] === 'agent_module') {
+ $title = $alias.'/'.$module_name;
+ }
+
+ $units_name = \modules_get_unit($this->values['moduleId']);
+ $value = \modules_get_last_value($this->values['moduleId']);
+ if (isset($this->values['formatData']) === true
+ && (bool) $this->values['formatData'] === true
+ ) {
+ $value = \format_for_graph(
+ $value,
+ $config['graph_precision']
+ );
+ } else {
+ $value = \sla_truncate(
+ $value,
+ $config['graph_precision']
+ );
+ }
+
+ $color_status = \modules_get_color_status(modules_get_agentmodule_last_status($this->values['moduleId']));
+ if ($color_status === COL_NORMAL) {
+ $color_status = $this->values['colorValue'];
+ }
+
+ $params = [
+ 'agent_module_id' => $this->values['moduleId'],
+ 'period' => $this->values['period'],
+ 'show_events' => false,
+ 'width' => '100%',
+ 'height' => $size['height'],
+ 'title' => $module_name,
+ 'unit' => $units_name,
+ 'only_image' => false,
+ 'menu' => false,
+ 'vconsole' => true,
+ 'return_img_base_64' => false,
+ 'show_legend' => false,
+ 'show_title' => false,
+ 'dashboard' => true,
+ 'backgroundColor' => 'transparent',
+ // 'server_id' => $metaconsoleId,
+ 'basic_chart' => true,
+ 'array_colors' => [
+ [
+ 'border' => '#000000',
+ 'color' => (isset($this->values['colorChart']) === true) ? $this->values['colorChart'] : $config['graph_color1'],
+ 'alpha' => CHART_DEFAULT_ALPHA,
+ ],
+ ],
+ ];
+
+ $output = '
';
+ return $output;
+ }
+
+
+ /**
+ * Get description.
+ *
+ * @return string.
+ */
+ public static function getDescription()
+ {
+ return __('Basic chart');
+ }
+
+
+ /**
+ * Get Name.
+ *
+ * @return string.
+ */
+ public static function getName()
+ {
+ return 'BasicChart';
+ }
+
+
+ /**
+ * Get size Modal Configuration.
+ *
+ * @return array
+ */
+ public function getSizeModalConfiguration(): array
+ {
+ $size = [
+ 'width' => 850,
+ 'height' => 430,
+ ];
+
+ return $size;
+ }
+
+
+}
diff --git a/pandora_console/include/lib/Dashboard/Widgets/alerts_fired.php b/pandora_console/include/lib/Dashboard/Widgets/alerts_fired.php
index 48eeefac75..51fcfacf08 100755
--- a/pandora_console/include/lib/Dashboard/Widgets/alerts_fired.php
+++ b/pandora_console/include/lib/Dashboard/Widgets/alerts_fired.php
@@ -208,6 +208,10 @@ class AlertsFiredWidget extends Widget
$values['groupId'] = $decoder['groupId'];
}
+ if (isset($decoder['group_recursion']) === true) {
+ $values['group_recursion'] = $decoder['group_recursion'];
+ }
+
return $values;
}
@@ -245,6 +249,18 @@ class AlertsFiredWidget extends Widget
],
];
+ // Group recursion.
+ $inputs[] = [
+ 'label' => __('Recursion'),
+ 'arguments' => [
+ 'wrapper' => 'div',
+ 'name' => 'group_recursion',
+ 'type' => 'switch',
+ 'value' => $values['group_recursion'],
+ 'return' => true,
+ ],
+ ];
+
return $inputs;
}
@@ -260,6 +276,7 @@ class AlertsFiredWidget extends Widget
$values = parent::getPost();
$values['groupId'] = \get_parameter('groupId', 0);
+ $values['group_recursion'] = \get_parameter_switch('group_recursion');
return $values;
}
@@ -282,6 +299,11 @@ class AlertsFiredWidget extends Widget
$groups = [$this->values['groupId'] => ''];
}
+ $group_recursion = false;
+ if (empty($this->values['group_recursion']) === false) {
+ $group_recursion = true;
+ }
+
if (isset($groups) === true && is_array($groups) === true) {
$table = new \StdClass();
$table->class = 'databox data centered';
@@ -300,6 +322,25 @@ class AlertsFiredWidget extends Widget
$url .= '&refr=60&filter=fired&filter_standby=all';
$flag = false;
+
+ $groups_ids = [];
+ $groups_ids_tmp = [];
+ foreach ($groups as $id_group => $name) {
+ if ($group_recursion === true) {
+ $groups_ids_tmp[] = groups_get_children_ids($id_group);
+ }
+ }
+
+ if ($group_recursion === true) {
+ foreach ($groups_ids_tmp as $ids_tmp => $values) {
+ foreach ($values as $value) {
+ $groups_ids[$value] = '';
+ }
+ }
+
+ $groups = $groups_ids;
+ }
+
foreach ($groups as $id_group => $name) {
$alerts_group = get_group_alerts([$id_group]);
if (isset($alerts_group['simple']) === true) {
diff --git a/pandora_console/include/lib/Dashboard/Widgets/groups_status.php b/pandora_console/include/lib/Dashboard/Widgets/groups_status.php
index fec43d000b..524ff5ad26 100755
--- a/pandora_console/include/lib/Dashboard/Widgets/groups_status.php
+++ b/pandora_console/include/lib/Dashboard/Widgets/groups_status.php
@@ -302,9 +302,16 @@ class GroupsStatusWidget extends Widget
);
$data .= '';
- $url = $config['homeurl'];
- $url .= 'index.php?sec=estado&sec2=operation/agentes/estado_agente';
- $url .= '&refr=60&group_id='.$this->values['groupId'];
+ if (is_metaconsole() === true) {
+ $url = $config['homeurl'];
+ $url .= 'index.php?sec=monitoring&sec2=operation/tree&refr=0&tab=group&pure='.$config['pure'];
+ $url .= '&refr=60&searchGroup='.groups_get_name($this->values['groupId']);
+ } else {
+ $url = $config['homeurl'];
+ $url .= 'index.php?sec=estado&sec2=operation/agentes/estado_agente';
+ $url .= '&refr=60&group_id='.$this->values['groupId'];
+ }
+
$data .= '
\n";
+ if ($options['return_html_dialog'] === true) {
+ return $dialogHtml;
+ }
+
$this->dialogs[$type][] = $dialogHtml;
}
diff --git a/pandora_console/mobile/include/user.class.php b/pandora_console/mobile/include/user.class.php
index 6e932366c8..200a3faba8 100644
--- a/pandora_console/mobile/include/user.class.php
+++ b/pandora_console/mobile/include/user.class.php
@@ -366,6 +366,60 @@ class User
$ui->showFooter(false);
$ui->beginContent();
+ $ui->contentAddHtml(
+ '
+
+
+ '
+ );
+
$logo_image = html_print_image(
ui_get_mobile_login_icon(),
true,
@@ -389,17 +443,29 @@ class User
'name' => 'user',
'value' => $this->user,
'placeholder' => __('user'),
- 'label' => __('User'),
+ // 'autofocus' => 'autofocus',
+ // 'label' => __('User'),
];
$ui->formAddInputText($options);
$options = [
'name' => 'password',
'value' => '',
'placeholder' => __('password'),
- 'label' => __('Password'),
+ // 'label' => __('Password'),
'required' => 'required',
];
$ui->formAddInputPassword($options);
+
+ $spinner = '
+
+
+
+
+
+
+ ';
+ $ui->formAddHtml($spinner);
+
$options = [
'value' => __('Login'),
'icon' => 'arrow-r',
@@ -431,6 +497,7 @@ class User
}
$ui->contentAddHtml('');
+ $ui->contentAddHtml(''.$pandora_version.'
');
$ui->endContent();
$ui->showPage();
@@ -465,43 +532,79 @@ class User
$ui->createHeader('', $left_button);
$ui->showFooter(false);
$ui->beginContent();
- $ui->contentAddHtml(
- ''.html_print_image(
- ui_get_mobile_login_icon(),
- true,
- [
- 'alt' => 'logo',
- 'border' => 0,
- ],
- false,
- false,
- false,
- true
- ).'
'
- );
- $ui->contentAddHtml('');
- $ui->beginForm();
- $ui->formAddHtml(html_print_input_hidden('action', 'double_auth', true));
- $options = [
- 'name' => 'auth_code',
- 'value' => '',
- 'placeholder' => __('Authenticator code'),
- 'label' => __('Authenticator code'),
- ];
- $ui->formAddInputPassword($options);
- $options = [
- 'value' => __('Check code'),
- 'icon' => 'arrow-r',
- 'icon_pos' => 'right',
- 'name' => 'auth_code_btn',
- ];
- $ui->formAddSubmitButton($options);
- $ui->endForm();
- $ui->contentAddHtml('
');
- $ui->endContent();
- $ui->showPage();
- $this->errorDoubleAuth = false;
+ $ui->contentAddHtml(
+ '
+
+
+ '
+ );
+
+ $ui->contentAddHtml(
+ ''.html_print_image(
+ ui_get_mobile_login_icon(),
+ true,
+ [
+ 'alt' => 'logo',
+ 'border' => 0,
+ ],
+ false,
+ false,
+ false,
+ true
+ ).'
'
+ );
+ $ui->contentAddHtml('');
+ $ui->beginForm();
+ $ui->formAddHtml(html_print_input_hidden('action', 'double_auth', true));
+ $options = [
+ 'name' => 'auth_code',
+ 'value' => '',
+ 'placeholder' => __('Authenticator code'),
+ 'autofocus' => 'autofocus',
+ // 'label' => __('Authenticator code'),
+ ];
+ $ui->formAddInputPassword($options);
+ $options = [
+ 'value' => __('Check code'),
+ 'icon' => 'arrow-r',
+ 'icon_pos' => 'right',
+ 'name' => 'auth_code_btn',
+ ];
+ $ui->formAddSubmitButton($options);
+ $ui->endForm();
+ $ui->contentAddHtml('
');
+ $ui->contentAddHtml(''.$pandora_version.'
');
+ $ui->endContent();
+ $ui->showPage();
+
+ $this->errorDoubleAuth = false;
}
diff --git a/pandora_console/mobile/index.php b/pandora_console/mobile/index.php
index dc79e07c04..fe0eb231d8 100644
--- a/pandora_console/mobile/index.php
+++ b/pandora_console/mobile/index.php
@@ -43,6 +43,9 @@ require_once 'operation/module_graph.php';
require_once 'operation/agent.php';
require_once 'operation/visualmaps.php';
require_once 'operation/visualmap.php';
+require_once 'operation/server_status.php';
+require_once 'operation/services.php';
+require_once 'operation/module_data.php';
$enterpriseHook = enterprise_include('mobile/include/enterprise.class.php');
$enterpriseHook = enterprise_include('mobile/operation/home.php');
@@ -177,6 +180,21 @@ switch ($action) {
$tactical->ajax($parameter2);
break;
+ case 'server_status':
+ $server_status = new ServerStatus();
+ $server_status->ajax($parameter2);
+ break;
+
+ case 'services':
+ $services = new Services();
+ $services->ajax($parameter2);
+ break;
+
+ case 'module_data':
+ $module_data = new ModuleData();
+ $module_data->ajax($parameter2);
+ break;
+
default:
if (class_exists('Enterprise')) {
$enterprise->enterpriseAjax($parameter1, $parameter2);
@@ -407,6 +425,21 @@ switch ($action) {
$vc = new Visualmap();
$vc->show();
break;
+
+ case 'server_status':
+ $server_status = new ServerStatus();
+ $server_status->show();
+ break;
+
+ case 'services':
+ $services = new Services();
+ $services->show();
+ break;
+
+ case 'module_data':
+ $module_data = new ModuleData();
+ $module_data->show();
+ break;
}
break;
}
diff --git a/pandora_console/mobile/operation/agent.php b/pandora_console/mobile/operation/agent.php
index 4ab3f7a234..cb55b07259 100644
--- a/pandora_console/mobile/operation/agent.php
+++ b/pandora_console/mobile/operation/agent.php
@@ -27,6 +27,8 @@
* ============================================================================
*/
+use PandoraFMS\Event;
+
// Begin.
require_once '../include/functions_users.php';
@@ -130,9 +132,13 @@ class Agent
{
$ui = Ui::getInstance();
$system = System::getInstance();
+ $eventObj = new Events;
$ui->createPage();
+ $options = $eventObj->getEventDialogOptions();
+ $ui->addDialog($options);
+
if ($this->id != 0) {
$agent_alias = (string) $this->agent['alias'];
@@ -159,7 +165,7 @@ class Agent
$ui->beginContent();
if (empty($this->agent)) {
$ui->contentAddHtml(
- ''.__('No agent found').''
+ ''.__('No agent found').''
);
} else {
$ui->contentBeginGrid();
@@ -191,10 +197,7 @@ class Agent
$address = $this->agent['direccion'];
$ip .= (empty($address) === true) ? ''.__('N/A').'' : $address;
$last_contact = ''.__('Last contact').': ';
- $last_contact .= ui_print_timestamp(
- $this->agent['ultimo_contacto'],
- true
- );
+ $last_contact .= human_time_comparation($this->agent['ultimo_contacto'], 'tiny');
if (empty($agent['comentarios']) === true) {
$description .= ''.__('N/A').'';
@@ -213,7 +216,7 @@ class Agent
false,
false,
false,
- ['class' => 'invert_filter os-big-icon'],
+ ['class' => 'invert_filter main_menu_icon'],
false
).'';
$html .= '';
@@ -366,7 +369,7 @@ class Agent
$ui->contentAddHtml("
detail_event_hook");
$ui->contentAddHtml("
detail_event_dialog_error_hook");
- $ui->contentBeginCollapsible(sprintf(__('Last %s Events'), $system->getPageSize()));
+ $ui->contentBeginCollapsible(sprintf(__('Last %s Events'), $system->getPageSize()), 'agent-last-events');
$tabledata = $events->listEventsHtml(0, true, 'last_agent_events');
$ui->contentCollapsibleAddItem($tabledata['table']);
$ui->contentCollapsibleAddItem($events->putEventsTableJS($this->id));
@@ -438,7 +441,7 @@ class Agent
$.mobile.loading('hide');
var className = $('#list_agent_Modules').attr('class');
if (document.getElementById('list_agent_Modules') == null) {
- $($('p.empty_advice')[0]).parent().html(r);
+ $($('p.no-data')[0]).parent().html(r);
className = 'ui-responsive table-stroke ui-table ui-table-reflow';
} else {
$('#list_agent_Modules').parent().html(r);
diff --git a/pandora_console/mobile/operation/agents.php b/pandora_console/mobile/operation/agents.php
index 1a6b0061e2..0c773d040e 100644
--- a/pandora_console/mobile/operation/agents.php
+++ b/pandora_console/mobile/operation/agents.php
@@ -97,6 +97,7 @@ class Agents
$agent[6] = '
'.__('Status').''.$agent[6];
$agent[7] = '
'.__('Alerts').''.$agent[7];
$agent[8] = '
'.__('Last contact').''.$agent[8];
+ $agent[9] = '
'.__('Last status change').''.$agent[9];
$agents[$key] = $agent;
}
@@ -218,7 +219,7 @@ class Agents
__('Filter Agents by %s'),
$this->filterEventsGetString()
);
- $ui->contentBeginCollapsible($filter_title);
+ $ui->contentBeginCollapsible($filter_title, 'filter-collapsible');
$ui->beginForm('index.php?page=agents');
$system = System::getInstance();
$groups = users_get_groups_for_select(
@@ -400,18 +401,18 @@ class Agents
$serialized_filters_q_param = empty($this->serializedFilters) ? '' : '&agents_filter='.$this->serializedFilters;
- $row[0] = $row[__('Agent')] = '
'.$img_status.''.'
'.ui_print_truncate_text($agent['alias'], 30, false).'';
+ $row[0] = $row[__('Agent')] = '
'.$img_status.''.'
'.ui_print_truncate_text($agent['alias'], 30, false).'';
$row[2] = $row[__('OS')] = ui_print_os_icon($agent['id_os'], false, true);
$row[3] = $row[__('Group')] = ui_print_group_icon($agent['id_grupo'], true, 'groups_small', '', false);
$row[5] = $row[__('Status')] = '
'.__('S.').' '.$img_status;
$row[6] = $row[__('Alerts')] = '
'.__('A.').' '.$img_alert;
- $row[7] = $row[__('Modules')] = '
'.__('Modules').' '.'
'.reporting_tiny_stats($agent, true, 'agent', ' ').' ';
+ $row[7] = $row[__('Modules')] = '
'.reporting_tiny_stats($agent, true, 'agent', ':').' ';
$last_time = time_w_fixed_tz($agent['ultimo_contacto']);
$now = get_system_time();
$diferencia = ($now - $last_time);
- $time = ui_print_timestamp($last_time, true, ['style' => 'font-size: 12px; margin-left: 20px;', 'units' => 'tiny']);
+ $time = human_time_comparation($agent['ultimo_contacto'], 'tiny');
$style = '';
if ($diferencia > ($agent['intervalo'] * 2)) {
$row[8] = $row[__('Last contact')] = '
'.$time.'';
@@ -419,7 +420,10 @@ class Agents
$row[8] = $row[__('Last contact')] = $time;
}
- $row[8] = $row[__('Last contact')] = '
'.__('Last contact').' '.'
'.$row[__('Last contact')].'';
+ $row[8] = $row[__('Last contact')] = '
'.$row[__('Last contact')].'';
+
+ $last_status_change = human_time_comparation(agents_get_last_status_change($agent['id_agente']), 'tiny');
+ $row[9] = $row[__('Last status change')] = '
'.$last_status_change.'';
if (!$ajax) {
unset($row[0]);
@@ -431,6 +435,7 @@ class Agents
unset($row[6]);
unset($row[7]);
unset($row[8]);
+ unset($row[9]);
}
$agents[$agent['id_agente']] = $row;
@@ -451,20 +456,25 @@ class Agents
$listAgents = $this->getListAgents($page);
if ($listAgents['total'] == 0) {
- $ui->contentAddHtml('
'.__('No agents').'
');
+ $ui->contentAddHtml('
'.__('No agents').'
');
} else {
$table = new Table();
$table->id = 'list_agents';
$table->importFromHash($listAgents['agents']);
+
+ $ui->contentAddHtml('
');
+ $ui->contentAddHtml('
');
$ui->contentAddHtml($table->getHTML());
if ($system->getPageSize() < $listAgents['total']) {
$ui->contentAddHtml(
- '
'.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
+ '
'.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
);
$this->addJavascriptAddBottom();
}
+
+ $ui->contentAddHtml('
');
}
$ui->contentAddLinkListener('list_agents');
@@ -513,6 +523,7 @@ class Agents
\"
\" + agent[6] + \" | \" +
\"
\" + agent[7] + \" | \" +
\"
\" + agent[8] + \" | \" +
+ \"
\" + agent[9] + \" | \" +
\"\");
});
@@ -522,7 +533,7 @@ class Agents
},
\"json\");
// Clean
- $('#loading_rows').remove();
+ // $('#loading_rows').remove();
}
}
}
diff --git a/pandora_console/mobile/operation/alerts.php b/pandora_console/mobile/operation/alerts.php
index 65971a52ea..47cdb8012f 100644
--- a/pandora_console/mobile/operation/alerts.php
+++ b/pandora_console/mobile/operation/alerts.php
@@ -208,7 +208,7 @@ class Alerts
__('Filter Alerts by %s'),
$this->filterAlertsGetString()
);
- $ui->contentBeginCollapsible($filter_title);
+ $ui->contentBeginCollapsible($filter_title, 'filter-collapsible');
$ui->beginForm();
$options = [
'name' => 'page',
@@ -331,30 +331,36 @@ class Alerts
}
$row = [];
- if (isset($this->columns['agent']) && $this->columns['agent']) {
- $row[__('Agent')] = sprintf($disabled_style, io_safe_output($alert['agent_alias']));
- }
+ $row[__('Status')] = ui_print_status_image($status, $title, true);
- $row[__('Module')] = sprintf(
+ $row[__('Module/Agent')] = '
';
+ $row[__('Module/Agent')] .= sprintf(
$disabled_style,
io_safe_output($alert['module_name'])
);
+
+ $row[__('Module/Agent')] .= '';
+ if (isset($this->columns['agent']) && $this->columns['agent']) {
+ $row[__('Module/Agent')] .= sprintf($disabled_style, io_safe_output($alert['agent_alias']));
+ }
+
+ $row[__('Module/Agent')] .= '
';
+
$row[__('Template')] = sprintf(
$disabled_style,
io_safe_output($alert['template_name'])
);
$row[__('Last Fired')] = sprintf(
$disabled_style,
- ui_print_timestamp($alert['last_fired'], true)
+ human_time_comparation($alert['last_fired'], 'tiny')
);
- $row[__('Status')] = ui_print_status_image($status, $title, true);
$table[] = $row;
}
$ui = UI::getInstance();
if (empty($table)) {
- $html = '
'.__('No alerts').'
';
+ $html = '
'.__('No alerts').'
';
if (!$return) {
$ui->contentAddHtml($html);
} else {
@@ -365,7 +371,10 @@ class Alerts
$tableHTML->id = 'list_alerts';
$tableHTML->importFromHash($table);
if (!$return) {
+ $ui->contentAddHtml('
');
+ $ui->contentAddHtml('
');
$ui->contentAddHtml($tableHTML->getHTML());
+ $ui->contentAddHtml('
');
} else {
return $tableHTML->getHTML();
}
diff --git a/pandora_console/mobile/operation/events.php b/pandora_console/mobile/operation/events.php
index 50e9aab8ba..82180a40f4 100644
--- a/pandora_console/mobile/operation/events.php
+++ b/pandora_console/mobile/operation/events.php
@@ -195,15 +195,15 @@ class Events
switch ($event['estado']) {
case 0:
- $img_st = 'images/star_white.png';
+ $img_st = 'images/star-dark.svg';
break;
case 1:
- $img_st = 'images/tick_white.png';
+ $img_st = 'images/validate.svg';
break;
case 2:
- $img_st = 'images/hourglass_white.png';
+ $img_st = 'images/clock.svg';
break;
default:
@@ -221,7 +221,7 @@ class Events
$status_icon = html_print_image(
$img_st,
true,
- false,
+ ['class' => 'main_menu_icon'],
false,
false,
false,
@@ -264,11 +264,7 @@ class Events
$row_1 = '
'.$agent_name.'';
$row_1 .= '
';
- $row_1 .= ui_print_timestamp(
- $event['timestamp_last'],
- true,
- ['units' => 'tiny']
- );
+ $row_1 .= human_time_comparation($event['timestamp_last'], 'tiny');
$row_1 .= $status_icon;
$row_1 .= '';
@@ -326,10 +322,7 @@ class Events
$event['clean_tags'] = events_clean_tags(
$event['tags']
);
- $event['timestamp'] = date(
- $system->getConfig('date_format'),
- $event['utimestamp']
- );
+ $event['timestamp'] = human_time_comparation($event['utimestamp'], 'tiny');
if (empty($event['owner_user']) === true) {
$event['owner_user'] = '
'.__('N/A').'';
} else {
@@ -380,30 +373,30 @@ class Events
switch ($event['criticity']) {
default:
case 0:
- $img_sev = 'images/status_sets/default/severity_maintenance.png';
+ $img_sev = 'images/status_sets/default/severity_maintenance_rounded.png';
break;
case 1:
- $img_sev = 'images/status_sets/default/severity_informational.png';
+ $img_sev = 'images/status_sets/default/severity_informational_rounded.png';
break;
case 2:
- $img_sev = 'images/status_sets/default/severity_normal.png';
+ $img_sev = 'images/status_sets/default/severity_normal_rounded.png';
break;
case 3:
- $img_sev = 'images/status_sets/default/severity_warning.png';
+ $img_sev = 'images/status_sets/default/severity_warning_rounded.png';
break;
case 4:
- $img_sev = 'images/status_sets/default/severity_critical.png';
+ $img_sev = 'images/status_sets/default/severity_critical_rounded.png';
break;
case 5:
- $img_sev = 'images/status_sets/default/severity_minor.png';
+ $img_sev = 'images/status_sets/default/severity_minor_rounded.png';
break;
case 6:
- $img_sev = 'images/status_sets/default/severity_major.png';
+ $img_sev = 'images/status_sets/default/severity_major_rounded.png';
break;
}
@@ -412,9 +405,8 @@ class Events
$img_sev,
true,
[
- 'class' => 'image_status',
- 'width' => 12,
- 'height' => 12,
+ 'width' => 30,
+ 'height' => 15,
'title' => $event_criticity,
],
false,
@@ -446,17 +438,17 @@ class Events
// Get Status.
switch ($event['estado']) {
case 0:
- $img_st = 'images/star_dark.png';
+ $img_st = 'images/star-dark.svg';
$title_st = __('New event');
break;
case 1:
- $img_st = 'images/tick.png';
+ $img_st = 'images/validate.svg';
$title_st = __('Event validated');
break;
case 2:
- $img_st = 'images/hourglass.png';
+ $img_st = 'images/clock.svg';
$title_st = __('Event in process');
break;
@@ -592,6 +584,43 @@ class Events
}
break;
+ case 'process_event':
+ $system = System::getInstance();
+
+ $id_event = $system->getRequest('id_event', 0);
+ $server_id = $system->getRequest('server_id', 0);
+
+ try {
+ if (is_metaconsole() === true
+ && $server_id > 0
+ ) {
+ $node = new Node($server_id);
+ $node->connect();
+ }
+
+ if (events_change_status($id_event, EVENT_PROCESS) === true) {
+ echo json_encode(['correct' => 1]);
+ } else {
+ echo json_encode(['correct' => 0]);
+ }
+ } catch (\Exception $e) {
+ // Unexistent agent.
+ if (is_metaconsole() === true
+ && $server_id > 0
+ ) {
+ $node->disconnect();
+ }
+
+ echo json_encode(['correct' => 0]);
+ } finally {
+ if (is_metaconsole() === true
+ && $server_id > 0
+ ) {
+ $node->disconnect();
+ }
+ }
+ break;
+
default:
// Not possible.
break;
@@ -791,7 +820,7 @@ class Events
// Content.
ob_start();
?>
-
+
|
@@ -860,6 +889,14 @@ class Events
'href' => 'javascript: validateEvent();',
];
$options['content_text'] .= $ui->createButton($options_button);
+
+ $options_button = [
+ 'text' => __('In process'),
+ 'id' => 'process_button',
+ 'href' => 'javascript: processEvent();',
+ ];
+ $options['content_text'] .= $ui->createButton($options_button);
+
$options_hidden = [
'id' => 'event_id',
'value' => 0,
@@ -879,7 +916,14 @@ class Events
$options['content_text'] .= '
'.__('Fail validate').'
';
- $options['button_close'] = false;
+ $options['content_text'] .= '';
+ $options['content_text'] .= '
+
'.__('Sucessful in process').'
';
+ $options['content_text'] .= '
+
'.__('Fail in process').'
';
+
+ $options['button_close'] = true;
return $options;
}
@@ -922,7 +966,7 @@ class Events
$ui->contentAddHtml("detail_event_dialog_error_hook");
$filter_title = sprintf(__('Filter Events by %s'), $this->filterEventsGetString());
- $ui->contentBeginCollapsible($filter_title);
+ $ui->contentBeginCollapsible($filter_title, 'filter-collapsible');
$ui->beginForm('index.php?page=events');
$items = db_get_all_rows_in_table('tevent_filter');
$items[] = [
@@ -1012,7 +1056,10 @@ class Events
$html = $ui->getEndForm();
$ui->contentCollapsibleAddItem($html);
$ui->contentEndCollapsible();
+ $ui->contentAddHtml('');
+ $ui->contentAddHtml('');
$this->listEventsHtml();
+ $ui->contentAddHtml('
');
$ui->endContent();
$ui->showPage();
}
@@ -1141,7 +1188,7 @@ class Events
$table = new Table();
$table->id = $id_table;
- $no_events = ''.__('No events').'
';
+ $no_events = ''.__('No events').'
';
if (!$return) {
$ui->contentAddHtml($table->getHTML());
@@ -1206,12 +1253,10 @@ class Events
data: postvars,
success:
function (data) {
- if (data.correct) {
- event = data.event;
+ if (data.correct) {
+ event = data.event;
//Fill the dialog
- $("#detail_event_dialog h1.dialog_title")
- .html(event["evento"]);
- $("#detail_event_dialog .cell_event_name")
+ $("#detail_event_dialog h1.dialog_title")
.html(event["evento"]);
$("#detail_event_dialog .cell_event_id")
.html(id_event);
@@ -1227,6 +1272,8 @@ class Events
.html(event["criticity"]);
$("#detail_event_dialog .cell_event_status")
.html(event["status"]);
+ $("#detail_event_dialog .cell_event_status img")
+ .addClass("main_menu_icon");
$("#detail_event_dialog .cell_event_acknowledged_by")
.html(event["acknowledged_by"]);
$("#detail_event_dialog .cell_event_group")
@@ -1251,11 +1298,21 @@ class Events
//The event is validated.
$("#validate_button").hide();
}
+
+ if (event["status"].indexOf("clock") >= 0) {
+ $("#process_button").hide();
+ }
+
$("#validate_button_loading").hide();
$("#validate_button_fail").hide();
$("#validate_button_correct").hide();
$.mobile.loading( "hide" );
$("#detail_event_dialog_hook").click();
+
+ $("#detail_event_dialog-button_close").html("");
+ $("#detail_event_dialog-button_close").addClass("close-button-dialog");
+ $(".dialog_title").parent().addClass("flex align-items-center space-between");
+ $(".dialog_title").parent().append($("#detail_event_dialog-button_close"));
}
else {
$.mobile.loading( "hide" );
@@ -1316,6 +1373,53 @@ class Events
}
});
}
+
+ function processEvent() {
+ id_event = $("#event_id").val();
+ server_id = $("#server_id").val();
+
+ $("#process_button").hide();
+ $("#process_button_loading").show();
+
+ //Hide the button to close
+ $("#detail_event_dialog div.ui-header a.ui-btn-right")
+ .hide();
+
+ postvars = {};
+ postvars["action"] = "ajax";
+ postvars["parameter1"] = "events";
+ postvars["parameter2"] = "process_event";
+ postvars["id_event"] = id_event;
+ postvars["server_id"] = server_id;
+
+ $.ajax ({
+ type: "POST",
+ url: "index.php",
+ dataType: "json",
+ data: postvars,
+ success:
+ function (data) {
+ $("#process_button_loading").hide();
+
+ if (data.correct) {
+ $("#process_button_correct").show();
+ }
+ else {
+ $("#process_button_fail").show();
+ }
+
+ $("#detail_event_dialog div.ui-header a.ui-btn-right")
+ .show();
+ },
+ error:
+ function (jqXHR, textStatus, errorThrown) {
+ $("#process_button_loading").hide();
+ $("#process_button_fail").show();
+ $("#detail_event_dialog div.ui-header a.ui-btn-right")
+ .show();
+ }
+ });
+ }
'
);
}
@@ -1351,14 +1455,14 @@ class Events
$(\"table#\"+table_id+\" tbody\").append(new_rows);
- load_more_rows = 0;
+ // load_more_rows = 0;
refresh_link_listener_list_events();
}
}
function ajax_load_rows() {
- if (load_more_rows) {
- load_more_rows = 0;
+ if (load_more_rows) {
+ // load_more_rows = 0;
postvars = {};
postvars[\"action\"] = \"ajax\";
postvars[\"parameter1\"] = \"events\";
@@ -1383,7 +1487,7 @@ class Events
//Check if the end of the event list tables is in the client limits
var table_end = $('#list_events').offset().top + $('#list_events').height();
if (table_end < document.documentElement.clientHeight) {
- ajax_load_rows();
+ // ajax_load_rows();
}
}
@@ -1411,26 +1515,47 @@ class Events
if (data.events.length == 0) {
$('#last_agent_events').css('visibility', 'hidden');
$('#empty_advice_events').show();
- }
+ } else {
+ $('#empty_advice_events').hide();
+ }
},
\"json\");
}
+ let intervalId;
+ let count = 0;
+ function getFreeSpace() {
+ let headerHeight = $('div[data-role=\"header\"].ui-header').outerHeight();
+ let contentHeight = $('div[data-role=\"content\"].ui-content').outerHeight();
+ let windowHeight = $(window).height();
+
+ let freeSpace = windowHeight - (headerHeight + contentHeight);
+
+ if (freeSpace > 0 && count < 50) {
+ custom_scroll();
+ } else {
+ clearInterval(intervalId);
+ }
+
+ count++;
+ }
+
$(document).ready(function() {
- ajax_load_rows();
- $(window).bind(\"scroll\", function () {
- custom_scroll();
- });
- $(window).on(\"touchmove\", function(event) {
- custom_scroll();
- });
+ intervalId = setInterval(getFreeSpace, 500);
+ ajax_load_rows();
+ $(window).bind(\"scroll\", function () {
+ custom_scroll();
+ });
+ $(window).on(\"touchmove\", function(event) {
+ custom_scroll();
+ });
});
function custom_scroll() {
if ($(this).scrollTop() + $(this).height()
- >= ($(document).height() - 100)) {
- ajax_load_rows();
- }
+ >= ($(document).height() - 100)) {
+ ajax_load_rows();
+ }
}
"
);
diff --git a/pandora_console/mobile/operation/groups.php b/pandora_console/mobile/operation/groups.php
index 3c7088fd4e..10ecd2568e 100644
--- a/pandora_console/mobile/operation/groups.php
+++ b/pandora_console/mobile/operation/groups.php
@@ -121,6 +121,45 @@ class Groups
$status_image = ui_print_status_image('agent_no_data_ball.png', '', true);
}
+ // Show agent counter by states.
+ $agents_counter = '['.$group['_total_agents_'];
+
+ if ($group['_monitors_alerts_fired_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_monitors_alerts_fired_'].'';
+ }
+
+ if ($group['_monitors_critical_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_monitors_critical_'].'';
+ }
+
+ if ($group['_agents_warning_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_agents_warning_'].'';
+ }
+
+ if ($group['_agents_unknown_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_agents_unknown_'].'';
+ }
+
+ if ($group['_agents_not_init_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_agents_not_init_'].'';
+ }
+
+ if ($group['_agents_ok_'] > 0) {
+ $agents_counter .= ':';
+ $agents_counter .= ''.$group['_agents_ok_'].'';
+ }
+
+ $agents_counter .= ']';
+
+ if ($group['_iconImg_'] !== null) {
+ $img_group = html_print_image('images/'.$group['_iconImg_'], true, false, false, false, false, true);
+ }
+
$group['_iconImg_'] = ($group['_iconImg_'] == '') ? 'world.png' : $group['_iconImg_'];
$ui->contentAddHtml(
'
@@ -138,45 +177,45 @@ class Groups
'
);
$ui->contentAddHtml(
- ''
+ '
'
);
- $ui->contentAddHtml('
'.$group['_name_'].'
');
+ $ui->contentAddHtml('
'.$img_group.' '.$group['_name_'].''.$agents_counter.'
');
$ui->contentAddHtml('
');
$ui->contentAddHtml(
- '- '.''.html_print_image('images/agent.png', true, ['class' => 'invert_filter'], false, false, false, true).__('Total agents').''.''.$group['_total_agents_'].''.'
'
+ '- '.html_print_image('images/agent.png', true, ['class' => 'invert_filter'], false, false, false, true).__('Total agents').''.$group['_total_agents_'].'
'
);
$ui->contentAddHtml(
- '- '.''.html_print_image('images/agent_notinit.png', true, false, false, false, false, true).__('Agents not init').''.''.$group['_agents_not_init_'].''.'
'
+ '- '.html_print_image('images/agent_notinit.png', true, false, false, false, false, true).__('Agents not init').''.$group['_agents_not_init_'].'
'
);
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/agent_critical.png', true, false, false, false, false, true).__('Agents critical').''.''.$group['_agents_critical_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/agent_unknown.png', true, false, false, false, false, true).__('Agents unknown').''.''.$group['_agents_unknown_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/module_unknown.png', true, false, false, false, false, true).__('Unknown modules').''.''.$group['_monitors_unknown_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/module_notinit.png', true, false, false, false, false, true).__('Not init modules').''.''.$group['_monitors_not_init_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/module_ok.png', true, false, false, false, false, true).__('Normal modules').''.''.$group['_monitors_ok_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/module_warning.png', true, false, false, false, false, true).__('Warning modules').''.''.$group['_monitors_warning_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/module_critical.png', true, false, false, false, false, true).__('Critical modules').''.''.$group['_monitors_critical_'].''.'
'
- );
- $ui->contentAddHtml(
- '- '.''.html_print_image('images/bell_error.png', true, false, false, false, false, true).__('Alerts fired').''.''.$group['_monitors_alerts_fired_'].''.'
'
- );
- $ui->contentAddHtml('
');
- $ui->contentAddHtml('
');
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/agent_critical.png', true, false, false, false, false, true).__('Agents critical').''.$group['_agents_critical_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/agent_unknown.png', true, false, false, false, false, true).__('Agents unknown').''.$group['_agents_unknown_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/module_unknown.png', true, false, false, false, false, true).__('Unknown modules').''.$group['_monitors_unknown_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/module_notinit.png', true, false, false, false, false, true).__('Not init modules').''.$group['_monitors_not_init_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/module_ok.png', true, false, false, false, false, true).__('Normal modules').''.$group['_monitors_ok_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/module_warning.png', true, false, false, false, false, true).__('Warning modules').''.$group['_monitors_warning_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/module_critical.png', true, false, false, false, false, true).__('Critical modules').''.$group['_monitors_critical_'].''
+ );
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/bell_error.png', true, false, false, false, false, true).__('Alerts fired').''.$group['_monitors_alerts_fired_'].''
+ );
+ $ui->contentAddHtml('');
+ $ui->contentAddHtml('
');
- $count++;
+ $count++;
}
$ui->contentAddHtml('');
diff --git a/pandora_console/mobile/operation/home.php b/pandora_console/mobile/operation/home.php
index f6ea3e60f1..47a96d6433 100644
--- a/pandora_console/mobile/operation/home.php
+++ b/pandora_console/mobile/operation/home.php
@@ -40,24 +40,24 @@ class Home
$items = [];
- // In home
+ // In home.
$items['tactical'] = [
'name' => __('Tactical view'),
'filename' => 'tactical.php',
'menu_item' => true,
- 'icon' => 'ui-icon-tactical_view ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-op_monitoring ui-widget-icon-floatbeginning ui-icon-menu-square',
];
$items['events'] = [
'name' => __('Events'),
'filename' => 'events.php',
'menu_item' => true,
- 'icon' => 'ui-icon-events ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-op_events ui-widget-icon-floatbeginning ui-icon-menu-square',
];
$items['groups'] = [
'name' => __('Groups'),
'filename' => 'groups.php',
'menu_item' => true,
- 'icon' => 'ui-icon-groups ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-group ui-widget-icon-floatbeginning ui-icon-menu-square',
];
if ((bool) $system->getConfig('legacy_vc', false) === false) {
@@ -66,7 +66,7 @@ class Home
'name' => __('Visual consoles'),
'filename' => 'visualmaps.php',
'menu_item' => true,
- 'icon' => 'ui-icon-visual_console ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-visual_console ui-widget-icon-floatbeginning ui-icon-menu-square',
];
}
@@ -74,23 +74,39 @@ class Home
'name' => __('Alerts'),
'filename' => 'alerts.php',
'menu_item' => true,
- 'icon' => 'ui-icon-alerts ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-op_alerts ui-widget-icon-floatbeginning ui-icon-menu-square',
];
$items['agents'] = [
'name' => __('Agents'),
'filename' => 'agents.php',
'menu_item' => true,
- 'icon' => 'ui-icon-agents ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-agent_ms ui-widget-icon-floatbeginning ui-icon-menu-square',
];
$items['modules'] = [
'name' => __('Modules'),
'filename' => 'modules.php',
'menu_item' => true,
- 'icon' => 'ui-icon-modules ui-widget-icon-floatbeginning',
+ 'icon' => 'ui-icon-menu-brick ui-widget-icon-floatbeginning ui-icon-menu-square',
];
+ $items['server_status'] = [
+ 'name' => __('Server status'),
+ 'filename' => 'server_status.php',
+ 'menu_item' => true,
+ 'icon' => 'ui-icon-menu-server-status ui-widget-icon-floatbeginning ui-icon-menu-square',
+ ];
+
+ if ((int) $system->getConfig('enterprise_installed', false) === 1) {
+ $items['services'] = [
+ 'name' => __('Services'),
+ 'filename' => 'services.php',
+ 'menu_item' => true,
+ 'icon' => 'ui-icon-menu-services ui-widget-icon-floatbeginning ui-icon-menu-square',
+ ];
+ }
+
// Not in home.
$items['agent'] = [
'name' => __('Agent'),
@@ -115,6 +131,7 @@ class Home
$this->loadPagesItems();
}
+ $ui->contentAddHtml('');
}
@@ -143,11 +162,11 @@ class Home
} else {
$left_button = $ui->createHeaderButton(
[
- 'icon' => 'ui-icon-back',
+ 'icon' => 'ui-icon-logout',
'pos' => 'left',
'text' => __('Logout'),
'href' => 'index.php?action=logout',
- 'class' => 'header-button-left',
+ 'class' => 'header-button-left logout-text',
]
);
}
@@ -161,6 +180,7 @@ class Home
$ui->createHeader(__('Home'), $left_button, $user_logged);
$ui->showFooter(false);
$ui->beginContent();
+ $ui->contentAddHtml('');
$ui->beginForm('index.php?page=agents');
$options = [
'name' => 'free_search',
@@ -169,11 +189,13 @@ class Home
];
$ui->formAddInputSearch($options);
$ui->endForm();
+ $ui->contentAddHtml('
');
// List of buttons
$this->loadButtons($ui);
if (!empty($error)) {
+ $error['dialog_id'] = 'error-dialog';
$ui->addDialog($error);
}
diff --git a/pandora_console/mobile/operation/module_data.php b/pandora_console/mobile/operation/module_data.php
new file mode 100644
index 0000000000..5672f0233d
--- /dev/null
+++ b/pandora_console/mobile/operation/module_data.php
@@ -0,0 +1,354 @@
+checkACL($this->acl)) {
+ $this->correct_acl = true;
+ } else {
+ $this->correct_acl = false;
+ }
+
+ $this->moduleId = $system->getRequest('module_id');
+ }
+
+
+ public function ajax($parameter2=false)
+ {
+ $system = System::getInstance();
+
+ if (!$this->correct_acl) {
+ return;
+ } else {
+ switch ($parameter2) {
+ case 'get_module_data':
+ $this->getFilters();
+ $page = $system->getRequest('page', 0);
+ $module_id = $system->getRequest('module_id');
+ $servers = [];
+ $end = 1;
+
+ $listData = $this->getListData($page, true);
+
+ if (!empty($listData['data'])) {
+ $end = 0;
+ $servers = $listData['data'];
+ }
+
+ echo json_encode(['end' => $end, 'servers' => $servers]);
+ break;
+ }
+ }
+ }
+
+
+ public function show()
+ {
+ if (!$this->correct_acl) {
+ $this->show_fail_acl();
+ } else {
+ $this->show_module_data();
+ }
+ }
+
+
+ private function show_fail_acl()
+ {
+ $error['type'] = 'onStart';
+ $error['title_text'] = __('You don\'t have access to this page');
+ $error['content_text'] = System::getDefaultACLFailText();
+ if (class_exists('HomeEnterprise')) {
+ $home = new HomeEnterprise();
+ } else {
+ $home = new Home();
+ }
+
+ $home->show($error);
+ }
+
+
+ private function show_module_data()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->createPage();
+ $ui->createDefaultHeader(
+ __('Module data'),
+ $ui->createHeaderButton(
+ [
+ 'icon' => 'ui-icon-back',
+ 'pos' => 'left',
+ 'text' => __('Back'),
+ 'href' => 'index.php?page=modules',
+ 'class' => 'header-button-left',
+ ]
+ )
+ );
+ $ui->showFooter(false);
+ $ui->beginContent();
+ $this->listDataHtml();
+ $ui->endContent();
+ $ui->showPage();
+ }
+
+
+ private function getListData($page=0, $ajax=false)
+ {
+ global $config;
+ $system = System::getInstance();
+
+ $total = 0;
+ $data = [];
+
+ $module_data = modules_get_agentmodule_data(
+ $this->moduleId,
+ 604800,
+ 0,
+ false,
+ false,
+ 'DESC'
+ );
+
+ $total = (int) count($module_data);
+
+ foreach ($module_data as $module) {
+ $row[__('Data')] = ''.$module['data'].'';
+ $row[__('Timestamp')] = ''.human_time_comparation($module['utimestamp'], 'tiny').'';
+
+ array_push($data, $row);
+ }
+
+ return [
+ 'data' => $data,
+ 'total' => $total,
+ ];
+ }
+
+
+ public function listDataHtml($page=0, $return=false)
+ {
+ $system = System::getInstance();
+ $ui = Ui::getInstance();
+
+ $listData = $this->getListData($page);
+ if ($listData['total'] == 0) {
+ $html = ''.__('No data').'
';
+ if (!$return) {
+ $ui->contentAddHtml($html);
+ } else {
+ return $html;
+ }
+ } else {
+ if (!$return) {
+ $table = new Table();
+ $table->id = 'list_module_data';
+ $table->importFromHash($listData['data']);
+
+ $ui->contentAddHtml('');
+
+ $agent_id = agents_get_agent_id_by_module_id($this->moduleId);
+ $agent_name = agents_get_name($agent_id);
+ $module_name = modules_get_agentmodule_name($this->moduleId);
+ $ui->contentAddHtml('
'.$module_name.'
');
+ $ui->contentAddHtml('
'.$agent_name.'
');
+
+ $ui->contentAddHtml($table->getHTML());
+
+ $ui->contentAddHtml('
');
+ } else {
+ $table = new Table();
+ $table->id = 'list_module_data';
+
+ $table->importFromHash($listData['data']);
+
+ $html = $table->getHTML();
+
+ return $html;
+ }
+
+ // if ($system->getPageSize() < $listData['total']) {
+ // $ui->contentAddHtml(
+ // ''.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
+ // );
+ // $this->addJavascriptAddBottom();
+ // }
+ }
+
+ $ui->contentAddLinkListener('list_servers');
+ }
+
+
+ private function addJavascriptAddBottom()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->contentAddHtml(
+ ""
+ );
+ }
+
+
+ private function filterServersGetString()
+ {
+ if ($this->default) {
+ return __('(Default)');
+ } else {
+ $filters_to_serialize = [];
+
+ if (!$this->default_filters['group']) {
+ $filters_to_serialize[] = sprintf(
+ __('Group: %s'),
+ groups_get_name($this->group, true)
+ );
+ }
+
+ if (!$this->default_filters['module_group']) {
+ $module_group = db_get_value(
+ 'name',
+ 'tmodule_group',
+ 'id_mg',
+ $this->module_group
+ );
+ $module_group = io_safe_output($module_group);
+
+ $filters_to_serialize[] = sprintf(
+ __('Module group: %s'),
+ $module_group
+ );
+ }
+
+ if (!$this->default_filters['status']) {
+ $filters_to_serialize[] = sprintf(
+ __('Status: %s'),
+ $this->list_status[$this->status]
+ );
+ }
+
+ if (!$this->default_filters['free_search']) {
+ $filters_to_serialize[] = sprintf(
+ __('Free Search: %s'),
+ $this->free_search
+ );
+ }
+
+ if (!$this->default_filters['tag']) {
+ $tag_name = tags_get_name($this->tag);
+ $filters_to_serialize[] = sprintf(
+ __('Tag: %s'),
+ $tag_name
+ );
+ }
+
+ $string = '('.implode(' - ', $filters_to_serialize).')';
+
+ return $string;
+ }
+ }
+
+
+}
diff --git a/pandora_console/mobile/operation/module_graph.php b/pandora_console/mobile/operation/module_graph.php
index f8fb4da297..4c7be64b4d 100644
--- a/pandora_console/mobile/operation/module_graph.php
+++ b/pandora_console/mobile/operation/module_graph.php
@@ -404,7 +404,7 @@ class ModuleGraph
)
);
$title = sprintf(__('Options for %s : %s'), $agent_alias, $this->module['nombre']);
- $ui->contentBeginCollapsible($title);
+ $ui->contentBeginCollapsible($title, 'filter-collapsible');
$ui->beginForm('index.php?page=module_graph&id='.$this->id.'&server_id='.$this->server_id);
$options = [
'name' => 'draw_alerts',
diff --git a/pandora_console/mobile/operation/modules.php b/pandora_console/mobile/operation/modules.php
index d610c5a13a..9fa379426e 100644
--- a/pandora_console/mobile/operation/modules.php
+++ b/pandora_console/mobile/operation/modules.php
@@ -250,7 +250,7 @@ class Modules
__('Filter Modules by %s'),
$this->filterEventsGetString()
);
- $ui->contentBeginCollapsible($filter_title);
+ $ui->contentBeginCollapsible($filter_title, 'filter-collapsible');
$ui->beginForm('index.php?page=modules');
$system = System::getInstance();
$groups = users_get_groups_for_select(
@@ -591,7 +591,18 @@ class Modules
}
}
- $row[0] = $row[__('Module name')] = ''.$image_status.''.''.ui_print_truncate_text($module['module_name'], 30, false).'';
+ $script = '';
+ if ($system->getConfig('metaconsole')) {
+ $script = 'onclick="openDialog('.$module['id_agente_modulo'].', '.$this->id_agent.' ,'.$module['server_id'].');"';
+ } else {
+ $script = 'onclick="openDialog('.$module['id_agente_modulo'].', '.$this->id_agent.', \'node\');"';
+ }
+
+ if ($system->getRequest('page') === 'modules') {
+ $row[0] = $row[__('Module name')] = ''.$image_status.''.''.ui_print_truncate_text($module['module_name'], 30, false).'';
+ } else {
+ $row[0] = $row[__('Module name')] = ''.$image_status.''.''.ui_print_truncate_text($module['module_name'], 30, false).'';
+ }
if ($this->columns['agent']) {
$row[1] = $row[__('Agent name')] = ''.__('Agent').' '.ui_print_truncate_text($module['agent_alias'], 50, false).'';
@@ -658,7 +669,7 @@ class Modules
$row[4] = $row[__('Interval')] = ''.__('Interval.').' '.$row[__('Interval')].'';
- $row[6] = $row[__('Timestamp')] = ''.__('Last update.').' '.ui_print_timestamp($module['utimestamp'], true, ['units' => 'tiny']).'';
+ $row[6] = $row[__('Timestamp')] = ''.__('Last update.').' '.human_time_comparation($module['utimestamp'], 'tiny').'';
if (is_numeric($module['datos'])) {
$output = format_numeric($module['datos']);
@@ -712,29 +723,50 @@ class Modules
);
// Row 7.
- $row[__('Data')] = ui_get_snapshot_image($link, $is_snapshot).' ';
+ $row[7] = $row[__('Data')] = ui_get_snapshot_image($link, $is_snapshot).' ';
} else {
- if ($system->getConfig('metaconsole')) {
- $row[__('Data')] = '';
- $row[__('Data')] .= '';
- $row[__('Data')] .= $row[__('Status')].' ';
- $row[__('Data')] .= 'id_agent.'">';
- $row[__('Data')] .= $output.'';
- // Row 7.
- $row[__('Data')];
+ if ($system->getRequest('page') === 'modules') {
+ if ($system->getConfig('metaconsole')) {
+ $row[7] = $row[__('Data')] = '';
+ $row[7] = $row[__('Data')] .= '';
+ $row[7] = $row[__('Data')] .= $row[__('Status')].' ';
+ $row[7] = $row[__('Data')] .= '';
+ // Row 7.
+ $row[7] = $row[__('Data')];
+ } else {
+ // Row 7.
+ $row[7] = $row[__('Data')] = '';
+ $row[7] = $row[__('Data')] .= '';
+ $row[7] = $row[__('Data')] .= $row[__('Status')].' ';
+ $row[7] = $row[__('Data')] .= '';
+ }
} else {
- // Row 7.
- $row[__('Data')] = '';
- $row[__('Data')] .= '';
- $row[__('Data')] .= $row[__('Status')].' ';
- $row[__('Data')] .= 'id_agent.'">';
- $row[__('Data')] .= $output.'';
+ if ($system->getConfig('metaconsole')) {
+ $row[__('Data')] = '';
+ $row[__('Data')] .= '';
+ $row[__('Data')] .= $row[__('Status')].' ';
+ $row[__('Data')] .= 'id_agent.'">';
+ $row[__('Data')] .= $output.'';
+ // Row 7.
+ $row[__('Data')];
+ } else {
+ // Row 7.
+ $row[__('Data')] = '';
+ $row[__('Data')] .= '';
+ $row[__('Data')] .= $row[__('Status')].' ';
+ $row[__('Data')] .= 'id_agent.'">';
+ $row[__('Data')] .= $output.'';
+ }
}
}
@@ -769,7 +801,7 @@ class Modules
$listModules = $this->getListModules($page);
if ($listModules['total'] == 0) {
- $html = ''.__('No modules').'
';
+ $html = ''.__('No modules').'
';
if (!$return) {
$ui->contentAddHtml($html);
} else {
@@ -781,7 +813,21 @@ class Modules
$table->id = 'list_Modules';
$table->importFromHash($listModules['modules']);
+ $ui->contentAddHtml('');
+ $ui->contentAddHtml('');
$ui->contentAddHtml($table->getHTML());
+
+ if (!$this->all_modules) {
+ if ($system->getPageSize() < $listModules['total']) {
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
+ );
+
+ $this->addJavascriptAddBottom();
+ }
+ }
+
+ $ui->contentAddHtml('
');
} else {
$table = new Table();
$table->id = 'list_agent_Modules';
@@ -792,18 +838,31 @@ class Modules
return $html;
}
-
- if (!$this->all_modules) {
- if ($system->getPageSize() < $listModules['total']) {
- $ui->contentAddHtml(
- ''.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
- );
-
- $this->addJavascriptAddBottom();
- }
- }
}
+ $ui->contentAddHtml(
+ '
+
+
+
+
+
'.__('Choose option').'
+
+
+
+
+
'
+ );
+
$ui->contentAddLinkListener('list_Modules');
}
@@ -850,8 +909,8 @@ class Modules
\"".__('Status')."\" + module[5] + \" | \" +
\"".__('Interval')."\" + module[4] + \" | \" +
\"".__('Timestamp')."\" + module[6] + \" | \" +
- \"".__('Data').'" + module[7] + " | " +
- "
");
+ \"".__('Data')."\" + module[7] + \" | \" +
+ \"\");
});
load_more_rows = 1;
@@ -860,21 +919,58 @@ class Modules
},
- "json");
+ \"json\");
}
}
}
-
+
+ function openDialog(moduleId, agentId, serverId) {
+ var graph = '';
+ var historical = '';
+ if (serverId === 'node') {
+ graph = 'index.php?page=module_graph&id='+moduleId+'&id_agent='+agentId;
+ historical = 'index.php?page=module_data&module_id='+moduleId;
+ } else {
+ graph = 'index.php?page=module_graph&id='+moduleId+'&id_agent='+agentId+'&server_id='+serverId;
+ historical = 'index.php?page=module_data&module_id='+moduleId;
+ }
+
+ $('#graph-option').attr('href', graph);
+ $('#historical-option').attr('href', historical);
+
+ $('#module-dialog-button').click();
+ }
+
+ let intervalId;
+ let count = 0;
+ function getFreeSpace() {
+ let headerHeight = $('div[data-role=\"header\"].ui-header').outerHeight();
+ let contentHeight = $('div[data-role=\"content\"].ui-content').outerHeight();
+ let windowHeight = $(window).height();
+
+ let freeSpace = windowHeight - (headerHeight + contentHeight);
+
+ if (freeSpace > 0 && count < 50) {
+ custom_scroll();
+ } else {
+ clearInterval(intervalId);
+ }
+
+ count++;
+ }
+
$(document).ready(function() {
- $(window).bind("scroll", function () {
+ intervalId = setInterval(getFreeSpace, 500);
+
+ $(window).bind(\"scroll\", function () {
custom_scroll();
});
- $(window).on("touchmove", function(event) {
+ $(window).on(\"touchmove\", function(event) {
custom_scroll();
});
- });
- '
+ });
+ "
);
}
diff --git a/pandora_console/mobile/operation/server_status.php b/pandora_console/mobile/operation/server_status.php
new file mode 100644
index 0000000000..eb21825f72
--- /dev/null
+++ b/pandora_console/mobile/operation/server_status.php
@@ -0,0 +1,556 @@
+checkACL($this->acl)) {
+ $this->correct_acl = true;
+ } else {
+ $this->correct_acl = false;
+ }
+
+ if ($system->getConfig('metaconsole') === 0) {
+ $this->all_servers = true;
+ }
+ }
+
+
+ public function ajax($parameter2=false)
+ {
+ $system = System::getInstance();
+
+ if (!$this->correct_acl) {
+ return;
+ } else {
+ switch ($parameter2) {
+ case 'get_server_status':
+ $this->getFilters();
+ $page = $system->getRequest('page', 0);
+ $servers = [];
+ $end = 1;
+
+ $listServers = $this->getListServers($page, true);
+
+ if (!empty($listServers['servers'])) {
+ $end = 0;
+ $servers = $listServers['servers'];
+ }
+
+ echo json_encode(['end' => $end, 'servers' => $servers]);
+ break;
+ }
+ }
+ }
+
+
+ public function setFilters($filters)
+ {
+ if (isset($filters['id_agent'])) {
+ $this->id_agent = $filters['id_agent'];
+ }
+
+ if (isset($filters['all_servers'])) {
+ $this->all_servers = $filters['all_servers'];
+ }
+
+ if (isset($filters['status'])) {
+ $this->status = (int) $filters['status'];
+ }
+
+ if (isset($filters['name'])) {
+ $this->name = $filters['name'];
+ }
+ }
+
+
+ public function disabledColumns($columns=null)
+ {
+ if (!empty($columns)) {
+ foreach ($columns as $column) {
+ $this->columns[$column] = 0;
+ }
+ }
+ }
+
+
+ private function getFilters()
+ {
+ $system = System::getInstance();
+ $user = User::getInstance();
+
+ $this->default_filters['module_group'] = true;
+ $this->default_filters['group'] = true;
+ $this->default_filters['status'] = true;
+ $this->default_filters['free_search'] = true;
+ $this->default_filters['tag'] = true;
+
+ $this->free_search = $system->getRequest('free_search', '');
+ if ($this->free_search != '') {
+ $this->default = false;
+ $this->default_filters['free_search'] = false;
+ }
+
+ $this->status = $system->getRequest('status', __('Status'));
+ if (($this->status === __('Status')) || ((int) $this->status === AGENT_MODULE_STATUS_ALL)) {
+ $this->status = AGENT_MODULE_STATUS_ALL;
+ } else {
+ $this->default = false;
+ $this->default_filters['status'] = false;
+ }
+
+ $this->group = (int) $system->getRequest('group', __('Group'));
+ if (!$user->isInGroup($this->acl, $this->group)) {
+ $this->group = 0;
+ }
+
+ if (($this->group === __('Group')) || ($this->group == 0)) {
+ $this->group = 0;
+ } else {
+ $this->default = false;
+ $this->default_filters['group'] = false;
+ }
+
+ $this->module_group = (int) $system->getRequest('module_group', __('Module group'));
+ if (($this->module_group === __('Module group')) || ($this->module_group === -1)
+ || ($this->module_group == 0)
+ ) {
+ $this->module_group = -1;
+ } else {
+ $this->default = false;
+ $this->module_group = (int) $this->module_group;
+ $this->default_filters['module_group'] = false;
+ }
+
+ $this->tag = (int) $system->getRequest('tag', __('Tag'));
+ if (($this->tag === __('Tag')) || ($this->tag == 0)) {
+ $this->tag = 0;
+ } else {
+ $this->default = false;
+ $this->default_filters['tag'] = false;
+ }
+ }
+
+
+ public function show()
+ {
+ if (!$this->correct_acl) {
+ $this->show_fail_acl();
+ } else {
+ $this->getFilters();
+ $this->show_servers();
+ }
+ }
+
+
+ private function show_fail_acl()
+ {
+ $error['type'] = 'onStart';
+ $error['title_text'] = __('You don\'t have access to this page');
+ $error['content_text'] = System::getDefaultACLFailText();
+ if (class_exists('HomeEnterprise')) {
+ $home = new HomeEnterprise();
+ } else {
+ $home = new Home();
+ }
+
+ $home->show($error);
+ }
+
+
+ private function show_servers()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->createPage();
+ $ui->createDefaultHeader(
+ __('Server status'),
+ $ui->createHeaderButton(
+ [
+ 'icon' => 'ui-icon-back',
+ 'pos' => 'left',
+ 'text' => __('Back'),
+ 'href' => 'index.php?page=home',
+ 'class' => 'header-button-left',
+ ]
+ )
+ );
+ $ui->showFooter(false);
+ $ui->beginContent();
+ $this->listServersHtml();
+ $ui->endContent();
+ $ui->showPage();
+ }
+
+
+ private function getListServers($page=0, $ajax=false)
+ {
+ global $config;
+ $system = System::getInstance();
+ $user = User::getInstance();
+
+ $total = 0;
+ $servers = [];
+ $servers_db = [];
+
+ if ($this->all_servers === true) {
+ $sql_limit = ' LIMIT '.(int) ($page * $system->getPageSize()).','.(int) $system->getPageSize();
+ }
+
+ if ($system->getConfig('metaconsole')) {
+ $servers_info = servers_get_info();
+ $total = (int) count(servers_get_info());
+
+ foreach ($servers_info as $server_value) {
+ $image_status = ui_print_status_image(STATUS_SERVER_OK, '', true);
+ if ($server_value['status'] == -1) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_CRASH,
+ __('Server has crashed.'),
+ true
+ );
+ } else if ($server_value['status'] == 0) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_DOWN,
+ __('Server is stopped.'),
+ true
+ );
+ }
+
+ // $row[__('Status')] = ''.$server_value['status'].'';
+ $row[__('Status')] = ''.$image_status.'';
+ $row[__('Image')] = ''.$server_value['img'].'';
+ $row[__('Name')] = ''.$server_value['name'].'';
+
+ $servers[$server_value['id_server'].'-'.$server_value['name']] = $row;
+ }
+
+ $meta_servers = metaconsole_get_servers();
+
+ if ($meta_servers === false) {
+ $meta_servers = [];
+ }
+
+ foreach ($meta_servers as $server) {
+ if (metaconsole_connect($server) != NOERR) {
+ continue;
+ }
+
+ $servers_info = servers_get_info();
+ $total += (int) count(servers_get_info());
+
+ foreach ($servers_info as $server_value) {
+ $image_status = ui_print_status_image(STATUS_SERVER_OK, '', true);
+ if ($server_value['status'] == -1) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_CRASH,
+ __('Server has crashed.'),
+ true
+ );
+ } else if ($server_value['status'] == 0) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_DOWN,
+ __('Server is stopped.'),
+ true
+ );
+ }
+
+ // $row[__('Status')] = ''.$server_value['status'].'';
+ $row[__('Status')] = ''.$image_status.'';
+ $row[__('Image')] = ''.$server_value['img'].'';
+ $row[__('Name')] = ''.$server_value['name'].'';
+
+ $servers[$server_value['id_server']] = $row;
+ }
+
+ metaconsole_restore_db();
+ }
+ } else {
+ $servers_info = servers_get_info(-1, $sql_limit);
+ $total = count(servers_get_info());
+
+ foreach ($servers_info as $server_value) {
+ $image_status = ui_print_status_image(STATUS_SERVER_OK, '', true);
+ if ($server_value['status'] == -1) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_CRASH,
+ __('Server has crashed.'),
+ true
+ );
+ } else if ($server_value['status'] == 0) {
+ $image_status = ui_print_status_image(
+ STATUS_SERVER_DOWN,
+ __('Server is stopped.'),
+ true
+ );
+ }
+
+ // $row[__('Status')] = ''.$server_value['status'].'';
+ $row[__('Status')] = ''.$image_status.'';
+ $row[__('Image')] = ''.$server_value['img'].'';
+ $row[__('Name')] = ''.$server_value['name'].'';
+
+ $servers[$server_value['id_server']] = $row;
+ }
+ }
+
+ return [
+ 'servers' => $servers,
+ 'total' => $total,
+ ];
+ }
+
+
+ public function listServersHtml($page=0, $return=false)
+ {
+ $system = System::getInstance();
+ $ui = Ui::getInstance();
+
+ $listServers = $this->getListServers($page);
+ if ($listServers['total'] == 0) {
+ $html = ''.__('No servers').'
';
+ if (!$return) {
+ $ui->contentAddHtml($html);
+ } else {
+ return $html;
+ }
+ } else {
+ if (!$return) {
+ $table = new Table();
+ $table->id = 'list_servers';
+ $table->importFromHash($listServers['servers']);
+
+ $ui->contentAddHtml('');
+ $ui->contentAddHtml($table->getHTML());
+
+ if ($this->all_servers === true) {
+ if ($system->getPageSize() < $listServers['total']) {
+ $ui->contentAddHtml(
+ '
'.html_print_image('images/spinner.gif', true, false, false, false, false, true).' '.__('Loading...').'
'
+ );
+
+ $this->addJavascriptAddBottom();
+ }
+ }
+
+ $ui->contentAddHtml('
');
+ } else {
+ $table = new Table();
+ $table->id = 'list_servers_status';
+
+ $table->importFromHash($listServers['servers']);
+
+ $html = $table->getHTML();
+
+ return $html;
+ }
+ }
+
+ $ui->contentAddLinkListener('list_servers');
+ }
+
+
+ private function addJavascriptAddBottom()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->contentAddHtml(
+ ""
+ );
+ }
+
+
+ private function filterServersGetString()
+ {
+ if ($this->default) {
+ return __('(Default)');
+ } else {
+ $filters_to_serialize = [];
+
+ if (!$this->default_filters['group']) {
+ $filters_to_serialize[] = sprintf(
+ __('Group: %s'),
+ groups_get_name($this->group, true)
+ );
+ }
+
+ if (!$this->default_filters['module_group']) {
+ $module_group = db_get_value(
+ 'name',
+ 'tmodule_group',
+ 'id_mg',
+ $this->module_group
+ );
+ $module_group = io_safe_output($module_group);
+
+ $filters_to_serialize[] = sprintf(
+ __('Module group: %s'),
+ $module_group
+ );
+ }
+
+ if (!$this->default_filters['status']) {
+ $filters_to_serialize[] = sprintf(
+ __('Status: %s'),
+ $this->list_status[$this->status]
+ );
+ }
+
+ if (!$this->default_filters['free_search']) {
+ $filters_to_serialize[] = sprintf(
+ __('Free Search: %s'),
+ $this->free_search
+ );
+ }
+
+ if (!$this->default_filters['tag']) {
+ $tag_name = tags_get_name($this->tag);
+ $filters_to_serialize[] = sprintf(
+ __('Tag: %s'),
+ $tag_name
+ );
+ }
+
+ $string = '('.implode(' - ', $filters_to_serialize).')';
+
+ return $string;
+ }
+ }
+
+
+}
diff --git a/pandora_console/mobile/operation/services.php b/pandora_console/mobile/operation/services.php
new file mode 100644
index 0000000000..3819f6084d
--- /dev/null
+++ b/pandora_console/mobile/operation/services.php
@@ -0,0 +1,541 @@
+checkACL($this->acl)) {
+ $this->correct_acl = true;
+
+ $this->services = enterprise_hook('services_get_services');
+ } else {
+ $this->correct_acl = false;
+ }
+
+ if ($system->checkEnterprise() === false) {
+ $this->show_fail_enterprise();
+ }
+ }
+
+
+ public function show()
+ {
+ if (!$this->correct_acl) {
+ $this->show_fail_acl();
+ } else {
+ $this->show_services();
+ }
+ }
+
+
+ private function show_fail_acl()
+ {
+ $error['type'] = 'onStart';
+ $error['title_text'] = __('You don\'t have access to this page');
+ $error['content_text'] = System::getDefaultACLFailText();
+ if (class_exists('HomeEnterprise')) {
+ $home = new HomeEnterprise();
+ } else {
+ $home = new Home();
+ }
+
+ $home->show($error);
+ }
+
+
+ private function show_fail_enterprise()
+ {
+ $error['type'] = 'onStart';
+ $error['title_text'] = __('You don\'t have access to this page');
+ $error['content_text'] = System::getDefaultLicenseFailText();
+ if (class_exists('HomeEnterprise')) {
+ $home = new HomeEnterprise();
+ } else {
+ $home = new Home();
+ }
+
+ $home->show($error);
+ }
+
+
+ public function ajax($parameter2=false)
+ {
+ $system = System::getInstance();
+
+ if (!$this->correct_acl) {
+ return;
+ } else {
+ switch ($parameter2) {
+ case 'get_services':
+ $this->serviceId = $system->getRequest('service_id', 0);
+ $rows = $this->getListServices();
+
+ $this->rows = $rows;
+ $table = $this->getTable();
+
+ echo $table;
+ break;
+ }
+ }
+ }
+
+
+ private function show_services()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->createPage();
+ $ui->createDefaultHeader(
+ __('Services'),
+ $ui->createHeaderButton(
+ [
+ 'icon' => 'ui-icon-back',
+ 'pos' => 'left',
+ 'text' => __('Back'),
+ 'href' => 'index.php?page=home',
+ 'class' => 'header-button-left',
+ ]
+ )
+ );
+ $ui->showFooter(false);
+ $ui->beginContent();
+
+ if (empty($this->services)) {
+ $ui->contentAddHtml(
+ ''.__('No services found').''
+ );
+ }
+
+ $ui->contentAddHtml('');
+ $count = 0;
+ $url_agent = 'index.php?page=agents&group=%s&status=%s';
+ $url_modules = 'index.php?page=modules&group=%s&status=%s';
+
+ foreach ($this->services as $service) {
+ switch ($service['status']) {
+ case SERVICE_STATUS_NORMAL:
+ $color = COL_NORMAL;
+ break;
+
+ case SERVICE_STATUS_CRITICAL:
+ $color = COL_CRITICAL;
+ break;
+
+ case SERVICE_STATUS_WARNING:
+ $color = COL_WARNING;
+ break;
+
+ case SERVICE_STATUS_UNKNOWN:
+ default:
+ $color = COL_UNKNOWN;
+ break;
+ }
+
+ $group_icon = ui_print_group_icon($service['id_group'], true, '../images/groups_small_white', '', false);
+
+ $ui->contentAddHtml(
+ '
+
+ '
+ );
+ $ui->contentAddHtml('
');
+ $arrow = '
';
+ $ui->contentAddHtml('
'.$arrow.$group_icon.' '.$service['name'].'
');
+
+ $spinner = '
+
+
+
+
+
+
+ ';
+
+ $ui->contentAddHtml($spinner);
+ $ui->contentAddHtml('
');
+
+ $count++;
+ }
+
+ $ui->contentAddHtml('
');
+ $this->addJavascriptAddBottom();
+
+ $ui->endContent();
+ $ui->showPage();
+ }
+
+
+ public function getListServices()
+ {
+ $ui = Ui::getInstance();
+ $this->idTable = 'service-table-'.$this->serviceId;
+ $rows = [];
+
+ $elements_list = new Service($this->serviceId);
+ $elements = $elements_list->getElements(true);
+
+ if (empty($elements) === false) {
+ foreach ($elements as $item) {
+ $name = '';
+ // Icon.
+ switch ($item->type()) {
+ case SERVICE_ELEMENT_AGENT:
+ $element_icon = html_print_image(
+ 'images/agents@svg.svg',
+ true,
+ [
+ 'title' => __('Agent'),
+ 'class' => 'main_menu_icon',
+ ]
+ );
+
+ if ($item->exists() !== true) {
+ $name .= ''.__('Nonexistent. This element should be deleted').'';
+ } else {
+ $url = ui_get_full_url('mobile/index.php?page=agent&id='.$item->agent()->id_agente());
+ $name = '';
+ if (((bool) $item->agent()->disabled()) === true) {
+ $disabled_element = true;
+ if (is_metaconsole() === true) {
+ $name .= '';
+ } else {
+ $name .= '';
+ }
+ }
+
+ if (is_metaconsole()
+ && ((int) $item->id_server_meta()) !== 0
+ ) {
+ $name .= $item->nodeName().' » ';
+ }
+
+ $name .= $item->agent()->alias();
+ $name .= '';
+
+ if (((bool) $item->agent()->disabled()) === true) {
+ $name .= ui_print_help_tip(
+ __('This element does not affect service weigth because is disabled.'),
+ true
+ ).'';
+ }
+ }
+ break;
+
+ case SERVICE_ELEMENT_SERVICE:
+ $element_icon = html_print_image(
+ 'images/item-service.svg',
+ true,
+ [
+ 'title' => __('Service'),
+ 'class' => 'main_menu_icon',
+ ]
+ );
+ if ($item->exists() !== true) {
+ $name .= ''.__('Nonexistent. This element should be deleted').'';
+ } else {
+ if (is_metaconsole()
+ && (((int) $item->id_server_meta()) !== 0 )
+ ) {
+ $server = db_get_row(
+ 'tmetaconsole_setup',
+ 'id',
+ $item->id_server_meta()
+ );
+
+ $url = ui_meta_get_url_console_child(
+ $server,
+ 'estado',
+ 'enterprise/operation/services/services',
+ [
+ 'tab' => 'service',
+ 'action' => 'view',
+ 'id_service' => $item->id_service_child(),
+ ]
+ );
+ } else {
+ $url = ui_get_full_url(
+ 'index.php?sec=network&sec2=enterprise/operation/services/services&tab=service&action=view&id_service='.$item->id_service_child()
+ );
+ }
+
+ // $name = '';
+ $name = '';
+ if (((bool) $item->service()->disabled()) === true) {
+ $disabled_element = true;
+ if (is_metaconsole() === true) {
+ $name .= '';
+ } else {
+ $name .= '';
+ }
+ }
+
+ if (is_metaconsole()
+ && ((int) $item->id_server_meta()) !== 0
+ ) {
+ $name .= $item->nodeName().' » ';
+ }
+
+ $name .= $item->service()->name();
+ // $name .= '';
+ if (((bool) $item->service()->disabled()) === true) {
+ $name .= ui_print_help_tip(
+ __('This element does not affect service weigth because is disabled.'),
+ true
+ ).'';
+ }
+ }
+ break;
+
+ case SERVICE_ELEMENT_MODULE:
+ $element_icon = html_print_image(
+ 'images/modules@svg.svg',
+ true,
+ [
+ 'title' => __('Module'),
+ 'class' => 'main_menu_icon',
+ ]
+ );
+
+ if ($item->exists() !== true) {
+ $name .= ''.__('Nonexistent. This element should be deleted').'';
+ } else {
+ $url = ui_get_full_url('mobile/index.php?page=agent&id='.$item->agent()->id_agente());
+ $name = '';
+
+ if (((bool) $item->module()->disabled()) === true) {
+ $disabled_element = true;
+ if (is_metaconsole()) {
+ $name .= '';
+ } else {
+ $name .= '';
+ }
+ }
+
+ if (is_metaconsole()
+ && ((int) $item->id_server_meta()) !== 0
+ ) {
+ $name .= $item->nodeName().' » ';
+ }
+
+ $name .= $item->module()->agent()->alias();
+ $name .= ' » '.$item->module()->nombre();
+
+ if (((bool) $item->module()->disabled()) === true) {
+ $name .= ui_print_help_tip(
+ __('This element does not affect service weigth because is disabled.'),
+ true
+ ).'';
+ }
+
+ $name .= '';
+ }
+ break;
+
+ case SERVICE_ELEMENT_DYNAMIC:
+ $element_icon = html_print_image(
+ 'images/modules-group@svg.svg',
+ true,
+ [
+ 'title' => __('Dynamic element'),
+ 'class' => 'main_menu_icon',
+ ]
+ );
+
+ try {
+ if (empty($item->getMatches(true)) === true) {
+ ui_print_warning_message(
+ __(
+ 'Dynamic element (%d) \'%s\' does not match any target',
+ $item->id(),
+ $item->description()
+ )
+ );
+ }
+ } catch (Exception $e) {
+ ui_print_warning_message(
+ __(
+ 'Dynamic element (%d) \'%s\' causes an error: %s',
+ $item->id(),
+ $item->description(),
+ $e->getMessage()
+ )
+ );
+ }
+
+ if ($item->rules()->dynamic_type === 'agent') {
+ $name = ''.__(
+ 'agents like "%s"',
+ $item->rules()->agent_name
+ ).'';
+ } else if ($item->rules()->dynamic_type === 'module') {
+ $name = ''.__(
+ 'modules like "%s"',
+ $item->rules()->module_name
+ ).'';
+ }
+ break;
+
+ default:
+ $element_icon = '';
+ break;
+ }
+
+ // Status.
+ switch ($item->lastStatus(true)) {
+ case SERVICE_STATUS_NORMAL:
+ case AGENT_STATUS_NORMAL:
+ case AGENT_MODULE_STATUS_NORMAL:
+ $status_element = STATUS_MODULE_OK;
+ $title_element = __('NORMAL');
+ break;
+
+ case SERVICE_STATUS_CRITICAL:
+ case AGENT_MODULE_STATUS_CRITICAL_ALERT:
+ case AGENT_MODULE_STATUS_CRITICAL_BAD:
+ case AGENT_STATUS_CRITICAL:
+ $status_element = STATUS_MODULE_CRITICAL;
+ $title_element = __('CRITICAL');
+ break;
+
+ case SERVICE_STATUS_WARNING:
+ case AGENT_MODULE_STATUS_WARNING:
+ case AGENT_MODULE_STATUS_WARNING_ALERT:
+ case AGENT_STATUS_WARNING:
+ $status_element = STATUS_MODULE_WARNING;
+ $title_element = __('WARNING');
+ break;
+
+ case SERVICE_STATUS_ALERT:
+ case AGENT_MODULE_STATUS_NOT_INIT:
+ case AGENT_STATUS_NOT_INIT:
+ $status_element = STATUS_MODULE_NO_DATA;
+ $title_element = __('NOT INITIALIZED');
+ break;
+
+ case AGENT_MODULE_STATUS_UNKNOWN:
+ case SERVICE_STATUS_UNKNOWN:
+ case AGENT_STATUS_UNKNOWN:
+ default:
+ $status_element = STATUS_MODULE_UNKNOWN;
+ $title_element = __('UNKNOWN');
+ break;
+ }
+
+ $row = [];
+ $row[0] = $element_icon;
+ $row[1] = $name;
+ $row[2] = ui_print_status_image($status_element, $title_element, true);
+
+ array_push($rows, $row);
+ }
+ }
+
+ return $rows;
+ }
+
+
+ public function getTable()
+ {
+ $html = '';
+
+ $html = "serviceId."' data-mode='reflow' class='ui-responsive table-stroke'>";
+
+ // $html .= '';
+ // $html .= '';
+ // $html .= ''.__('Type').' | ';
+ // $html .= ''.__('Name').' | ';
+ // $html .= ''.__('Status').' | ';
+ // $html .= '
';
+ // $html .= '';
+ $html .= '';
+ foreach ($this->rows as $key => $row) {
+ $html .= "";
+
+ foreach ($row as $key_cell => $cell) {
+ $html .= "".$cell.' | ';
+ }
+
+ $html .= '
';
+ }
+
+ $html .= '';
+ $html .= '
';
+
+ return $html;
+ }
+
+
+ private function addJavascriptAddBottom()
+ {
+ $ui = Ui::getInstance();
+
+ $ui->contentAddHtml(
+ ""
+ );
+ }
+
+
+}
diff --git a/pandora_console/mobile/operation/tactical.php b/pandora_console/mobile/operation/tactical.php
index 3651187833..f12bb56120 100755
--- a/pandora_console/mobile/operation/tactical.php
+++ b/pandora_console/mobile/operation/tactical.php
@@ -164,8 +164,8 @@ class Tactical
$data['mobile'] = true;
- $formatted_data = reporting_get_stats_indicators($data, 100, 10, false);
- $formatted_data_untiny = reporting_get_stats_indicators($data, 140, 15, false);
+ $formatted_data = reporting_get_stats_indicators_mobile($data, 100, 10, false);
+ $formatted_data_untiny = reporting_get_stats_indicators_mobile($data, 140, 15, false);
$overview = '
@@ -193,8 +193,8 @@ class Tactical
$agents_monitors = reporting_get_stats_agents_monitors($data);
$alerts_stats = reporting_get_stats_alerts($data);
- $overview .= "
\n".$agents_monitors;
- $overview .= "
\n".$alerts_stats;
+ $overview .= "\n".$agents_monitors;
+ $overview .= "\n".$alerts_stats;
$ui->contentGridAddCell($overview, 'tactical1');
@@ -216,6 +216,7 @@ class Tactical
$ui->contentBeginCollapsible(__('Last activity'));
$table = new Table();
+ $table->id = 'last-activity';
$table->importFromHash($this->getLastActivity());
$ui->contentCollapsibleAddItem($table->getHTML());
$ui->contentEndCollapsible();
@@ -236,7 +237,7 @@ class Tactical
}
function ajax_load_status_pie() {
- $('#status_pie').html(' ".__('Loading...')."

');
+ $('#status_pie').html(' ".__('Loading...')."

');
var pie_width = $('#tactical2').width() * 0.9;
@@ -346,10 +347,9 @@ class Tactical
}
$data[__('Action')] = ui_print_session_action_icon($session['accion'], true);
- $data[__('User')] = $session_id_usuario;
- $data[__('Date')] = human_time_comparation($session['utimestamp'], 'tiny');
- $data[__('Source IP')] = $session_ip_origen;
- $data[__('Description')] = io_safe_output($session['descripcion']);
+ $data[__('User')] = $session_id_usuario.' - '.ui_print_truncate_text(io_safe_output($session['descripcion']), 40, false);
+ $data[__('Date')] = ''.human_time_comparation($session['utimestamp'], 'tiny').'';
+ $data[__('Source IP')] = ''.$session_ip_origen.'';
$return[] = $data;
}
diff --git a/pandora_console/mobile/operation/visualmaps.php b/pandora_console/mobile/operation/visualmaps.php
index 258c1bd94a..07869726ad 100644
--- a/pandora_console/mobile/operation/visualmaps.php
+++ b/pandora_console/mobile/operation/visualmaps.php
@@ -241,7 +241,7 @@ class Visualmaps
'pos' => 'right',
'text' => __('All visual consoles'),
'href' => 'index.php?page=visualmaps&favourite=0',
- 'class' => '',
+ 'class' => 'visual-console-button',
]
)
);
@@ -253,14 +253,16 @@ class Visualmaps
'pos' => 'right',
'text' => __('Favourite visual consoles'),
'href' => 'index.php?page=visualmaps&favourite=1',
- 'class' => '',
+ 'class' => 'visual-console-button',
]
)
);
}
+ $ui->contentAddHtml('');
+
if (empty($visualmaps) === true) {
- $ui->contentAddHtml(''.__('No maps defined').'
');
+ $ui->contentAddHtml(''.__('There are no favorite maps to show').'
');
} else {
$table = new Table();
// Without header jquery.mobile crashes.
@@ -282,7 +284,9 @@ class Visualmaps
$table->addRow([ $map['id'].' flex-center' => $row]);
}
+ $ui->contentAddHtml('');
$ui->contentAddHtml($table->getHTML());
+ $ui->contentAddHtml('
');
$ui->contentAddLinkListener('list_visualmaps');
}
}
diff --git a/pandora_console/operation/agentes/datos_agente.php b/pandora_console/operation/agentes/datos_agente.php
index e484815650..f0a6684eb7 100755
--- a/pandora_console/operation/agentes/datos_agente.php
+++ b/pandora_console/operation/agentes/datos_agente.php
@@ -51,6 +51,7 @@ if (! check_acl($config['id_user'], $group, 'AR') || $module_id == 0) {
return;
}
+$table = new stdClass();
$table->cellpadding = 3;
$table->cellspacing = 3;
$table->width = '98%';
@@ -183,6 +184,7 @@ if ($config['history_db_enabled'] == 1) {
echo '';
+$formtable = new stdClass();
$formtable->width = '98%';
$formtable->class = 'databox';
$formtable->data = [];
diff --git a/pandora_console/operation/agentes/estado_agente.php b/pandora_console/operation/agentes/estado_agente.php
index 83da38563a..6fffdb00ae 100644
--- a/pandora_console/operation/agentes/estado_agente.php
+++ b/pandora_console/operation/agentes/estado_agente.php
@@ -771,7 +771,14 @@ if ($search != '') {
if (empty($id) === false) {
$aux = $id[0]['id_agent'];
$search_sql = sprintf(
- ' AND ( `nombre` LIKE "%%%s%%" OR tagente.id_agente = %d',
+ ' AND ( nombre LIKE "%%%s%%"
+ OR alias LIKE "%%%s%%"
+ OR comentarios LIKE "%%%s%%"
+ OR EXISTS (SELECT * FROM tagent_custom_data WHERE id_agent = id_agente AND description LIKE "%%%s%%")
+ OR tagente.id_agente = %d',
+ $search,
+ $search,
+ $search,
$search,
$aux
);
diff --git a/pandora_console/operation/agentes/estado_generalagente.php b/pandora_console/operation/agentes/estado_generalagente.php
index c79a868f5d..cfb4fb2108 100755
--- a/pandora_console/operation/agentes/estado_generalagente.php
+++ b/pandora_console/operation/agentes/estado_generalagente.php
@@ -331,16 +331,7 @@ if ((bool) $has_remote_conf) {
}
}
-// $table_agent_count_modules .= ui_print_help_tip(__('Agent statuses are re-calculated by the server, they are not shown in real time.'), true);
-/*
- $table_agent = html_print_div(
- [
- 'class' => 'agent_details_header',
- 'content' => $table_agent_header,
- ],
- true
- );
-*/
+
$table_agent = $agentStatusHeader.'
@@ -352,26 +343,6 @@ $table_agent = $agentStatusHeader.'
';
- /*
- $table_agent = '
-
-
-
- '.$table_agent_graph.'
-
- '.$table_agent_count_modules.'
-
-
-
- '.$alive_animation.$table_agent_os.$table_agent_ip.$table_agent_version.$table_agent_description.$remote_cfg.'
-
-
';
-
- */
-
-
/*
* END: TABLE AGENT BUILD.
*/
@@ -781,18 +752,7 @@ if (empty($network_interfaces) === false) {
$table_interface->class = 'info_table';
$table_interface->width = '100%';
$table_interface->style = [];
- $table_interface->style['interface_status'] = 'width: 30px;padding-top:0px;padding-bottom:0px;';
- $table_interface->style['interface_graph'] = 'width: 20px;padding-top:0px;padding-bottom:0px;';
- $table_interface->style['interface_event_graph'] = 'width: 35%;padding-top:0px;padding-bottom:0px;';
- $table_interface->align['interface_event_graph'] = 'right';
- $table_interface->style['interface_event_graph'] = 'width: 3%;padding-top:0px;padding-bottom:0px;';
- $table_interface->style['interface_name'] = 'width: 30%;padding-top:0px;padding-bottom:0px;';
- $table_interface->align['interface_name'] = 'left';
- $table_interface->align['interface_ip'] = 'left';
- $table_interface->align['last_contact'] = 'left';
- $table_interface->style['last_contact'] = 'width: 20%;padding-top:0px;padding-bottom:0px;';
- $table_interface->style['interface_ip'] = 'width: 8%;padding-top:0px;padding-bottom:0px;';
- $table_interface->style['interface_mac'] = 'width: 12%;padding-top:0px;padding-bottom:0px;';
+ $table_interface->style['interface_event_graph'] = 'width: 35%;';
$table_interface->head = [];
$options = [
@@ -834,58 +794,22 @@ if (empty($network_interfaces) === false) {
$graph_link = '';
}
- $events_limit = 5000;
- $user_groups = users_get_groups($config['id_user'], 'ER');
- $user_groups_ids = array_keys($user_groups);
- if (empty($user_groups) === true) {
- $groups_condition = ' 1 = 0 ';
- } else {
- $groups_condition = ' id_grupo IN ('.implode(',', $user_groups_ids).') ';
- }
+ $content = [
+ 'id_agent_module' => $interface['status_module_id'],
+ 'id_group' => $id_group,
+ 'period' => SECONDS_1DAY,
+ 'time_from' => '00:00:00',
+ 'time_to' => '00:00:00',
+ 'sizeForTicks' => 250,
+ 'height_graph' => 40,
+ [
+ ['id_agent_module' => $interface['status_module_id']],
+ ]
+ ];
- if ((bool) check_acl($config['id_user'], 0, 'PM') === false) {
- $groups_condition .= ' AND id_grupo != 0';
- }
-
- $status_condition = ' AND (estado = 0 OR estado = 1) ';
- $unixtime = (get_system_time() - SECONDS_1DAY);
- // Last hour.
- $time_condition = 'AND (utimestamp > '.$unixtime.')';
- // Tags ACLs.
- if ($id_group > 0 && in_array(0, $user_groups_ids)) {
- $group_array = (array) $id_group;
- } else {
- $group_array = $user_groups_ids;
- }
-
- $acl_tags = tags_get_acl_tags(
- $config['id_user'],
- $group_array,
- 'ER',
- 'event_condition',
- 'AND',
- '',
- true,
- [],
- true
- );
-
- $id_modules_array = [];
- $id_modules_array[] = $interface['status_module_id'];
-
- $unixtime = (get_system_time() - SECONDS_1DAY);
- // Last hour.
- $time_condition = 'WHERE (te.utimestamp > '.$unixtime.')';
-
- $sqlEvents = sprintf(
- 'SELECT *
- FROM tevento te
- INNER JOIN tagente_estado tae
- ON te.id_agentmodule = tae.id_agente_modulo
- AND tae.id_agente_modulo IN (%s)
- %s',
- implode(',', $id_modules_array),
- $time_condition
+ $e_graph = \reporting_module_histogram_graph(
+ ['datetime' => time()],
+ $content
);
$sqlLast_contact = sprintf(
@@ -899,21 +823,6 @@ if (empty($network_interfaces) === false) {
$last_contact = array_shift($last_contact);
$last_contact = array_shift($last_contact);
- $events = db_get_all_rows_sql($sqlEvents);
- $text_event_header = __('Events info (24hr.)');
- if (!$events) {
- $no_events = ['color' => ['criticity' => 2]];
- $e_graph = reporting_get_event_histogram(
- $no_events,
- $text_event_header
- );
- } else {
- $e_graph = reporting_get_event_histogram(
- $events,
- $text_event_header
- );
- }
-
$data = [];
$data['interface_name'] = '
'.$interface_name.'';
$data['interface_status'] = $interface['status_image'];
@@ -921,7 +830,7 @@ if (empty($network_interfaces) === false) {
$data['interface_ip'] = $interface['ip'];
$data['interface_mac'] = $interface['mac'];
$data['last_contact'] = __('Last contact: ').$last_contact;
- $data['interface_event_graph'] = $e_graph;
+ $data['interface_event_graph'] = $e_graph['chart'];
$table_interface->data[] = $data;
}
diff --git a/pandora_console/operation/agentes/interface_traffic_graph_win.php b/pandora_console/operation/agentes/interface_traffic_graph_win.php
index afac72db09..94c3142594 100644
--- a/pandora_console/operation/agentes/interface_traffic_graph_win.php
+++ b/pandora_console/operation/agentes/interface_traffic_graph_win.php
@@ -167,7 +167,7 @@ $table->class = 'table_modal_alternate';
$data = [];
$data[0] = __('Refresh time');
-$data[1] = html_print_extended_select_for_time(
+$data[1] = '
'.html_print_extended_select_for_time(
'refresh',
$refresh,
'',
@@ -175,7 +175,7 @@ $data[1] = html_print_extended_select_for_time(
0,
7,
true
-);
+).'
';
$table->data[] = $data;
$table->rowclass[] = '';
@@ -187,7 +187,11 @@ $data[1] = html_print_input_text(
'',
15,
255,
- true
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
);
$data[1] .= html_print_image(
'/images/calendar_view_day.png',
@@ -196,6 +200,7 @@ $data[1] .= html_print_image(
'onclick' => "scwShow(scwID('text-start_date'),this);",
'style' => 'vertical-align: bottom;',
'class' => 'invert_filter',
+ 'style' => 'vertical-align: middle;',
],
false,
false,
@@ -207,13 +212,24 @@ $table->rowclass[] = '';
$data = [];
$data[0] = __('Begin time');
-$data[1] = html_print_input_text('start_time', $start_time, '', 10, 10, true);
+$data[1] = html_print_input_text(
+ 'start_time',
+ $start_time,
+ '',
+ 10,
+ 10,
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
+);
$table->data[] = $data;
$table->rowclass[] = '';
$data = [];
$data[0] = __('Time range');
-$data[1] = html_print_extended_select_for_time(
+$data[1] = '
'.html_print_extended_select_for_time(
'period',
$period,
'',
@@ -221,7 +237,7 @@ $data[1] = html_print_extended_select_for_time(
0,
7,
true
-);
+).'
';
$table->data[] = $data;
$table->rowclass[] = '';
@@ -278,7 +294,10 @@ $form_table .= html_print_submit_button(
__('Reload'),
'submit',
false,
- 'class="sub upd"',
+ [
+ 'class' => 'float-right mini',
+ 'icon' => 'upd',
+ ],
true
);
$form_table .= '
';
@@ -291,34 +310,24 @@ if (empty($server_id) === false) {
$menu_form .= html_print_input_hidden('server', $server_id, true);
}
-$menu_form .= '';
$menu_form .= '';
-echo $menu_form;
+ui_toggle(
+ $menu_form,
+ '',
+ __('Graph configuration menu'),
+ 'update',
+ true,
+ false,
+ '',
+ 'white-box-content no_border',
+ 'filter-datatable-main box-flat white_table_graph fixed_filter_bar top_0px_important toggle-traffic-graph'
+);
+
// Hidden div to forced title.
html_print_div(
diff --git a/pandora_console/operation/agentes/stat_win.php b/pandora_console/operation/agentes/stat_win.php
index 07dd78a297..00ba25a8fd 100644
--- a/pandora_console/operation/agentes/stat_win.php
+++ b/pandora_console/operation/agentes/stat_win.php
@@ -265,7 +265,7 @@ ui_print_message_dialog(
);
$table->data[0][0] = __('Refresh time');
- $table->data[0][1] = html_print_extended_select_for_time(
+ $table->data[0][1] = ''.html_print_extended_select_for_time(
'refresh',
$refresh,
'',
@@ -273,7 +273,7 @@ ui_print_message_dialog(
0,
7,
true
- );
+ ).'
';
$table->data[0][2] = __('Show events');
$disabled = false;
@@ -293,7 +293,11 @@ ui_print_message_dialog(
'',
10,
20,
- true
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
);
$table->data[1][2] = __('Show alerts');
@@ -311,7 +315,11 @@ ui_print_message_dialog(
'',
10,
10,
- true
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
);
$table->data[2][2] = __('Show unknown graph');
@@ -323,7 +331,7 @@ ui_print_message_dialog(
);
$table->data[3][0] = __('Time range');
- $table->data[3][1] = html_print_extended_select_for_time(
+ $table->data[3][1] = ''.html_print_extended_select_for_time(
'period',
$period,
'',
@@ -331,7 +339,7 @@ ui_print_message_dialog(
0,
7,
true
- );
+ ).'
';
$table->data[3][2] = '';
$table->data[3][3] = '';
@@ -345,7 +353,7 @@ ui_print_message_dialog(
$options[3] = 'x3';
$options[4] = 'x4';
$options[5] = 'x5';
- $table->data[4][1] = html_print_select(
+ $table->data[4][1] = ''.html_print_select(
$options,
'zoom',
$zoom,
@@ -355,7 +363,7 @@ ui_print_message_dialog(
true,
false,
false
- );
+ ).'
';
$table->data[4][2] = __('Show percentil');
$table->data[4][3] = html_print_checkbox_switch(
@@ -412,7 +420,11 @@ ui_print_message_dialog(
'',
10,
20,
- true
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
);
$table->data[0][2] = __('Begin time');
@@ -422,11 +434,15 @@ ui_print_message_dialog(
'',
10,
10,
- true
+ true,
+ false,
+ false,
+ '',
+ 'small-input'
);
$table->data[1][0] = __('Time range');
- $table->data[1][1] = html_print_extended_select_for_time(
+ $table->data[1][1] = ''.html_print_extended_select_for_time(
'period',
$period,
'',
@@ -434,7 +450,7 @@ ui_print_message_dialog(
0,
7,
true
- );
+ ).'
';
$table->data[1][2] = __('Time compare (Separated)');
$table->data[1][3] = html_print_checkbox_switch(
diff --git a/pandora_console/operation/events/events.php b/pandora_console/operation/events/events.php
index 62a8850b80..a826986e95 100644
--- a/pandora_console/operation/events/events.php
+++ b/pandora_console/operation/events/events.php
@@ -538,25 +538,30 @@ if (is_ajax() === true) {
);
$user_timezone = users_get_user_by_id($_SESSION['id_usuario'])['timezone'];
- if (!$user_timezone) {
- $timezone = timezone_open(date_default_timezone_get());
- $datetime_eur = date_create('now', timezone_open($config['timezone']));
- $dif = timezone_offset_get($timezone, $datetime_eur);
- date($config['date_format'], $dif);
- if (!date('I')) {
- // For summer -3600sec.
- $dif -= 3600;
- }
+ if (empty($user_timezone) === true) {
+ if (date_default_timezone_get() !== $config['timezone']) {
+ $timezone = timezone_open(date_default_timezone_get());
+ $datetime_eur = date_create('now', timezone_open($config['timezone']));
+ $dif = timezone_offset_get($timezone, $datetime_eur);
+ date($config['date_format'], $dif);
+ if (!date('I')) {
+ // For summer -3600sec.
+ $dif -= 3600;
+ }
- $total_sec = strtotime($tmp->timestamp);
- $total_sec += $dif;
- $last_contact = date($config['date_format'], $total_sec);
- $last_contact_value = ui_print_timestamp($last_contact, true);
+ $total_sec = strtotime($tmp->timestamp);
+ $total_sec += $dif;
+ $last_contact = date($config['date_format'], $total_sec);
+ $last_contact_value = ui_print_timestamp($last_contact, true);
+ } else {
+ $title = date($config['date_format'], strtotime($tmp->timestamp));
+ $value = ui_print_timestamp(strtotime($tmp->timestamp), true);
+ $last_contact_value = ''.$value.'';
+ }
} else {
- $user_timezone = users_get_user_by_id($_SESSION['id_usuario'])['timezone'];
date_default_timezone_set($user_timezone);
$title = date($config['date_format'], strtotime($tmp->timestamp));
- $value = human_time_comparation(strtotime($tmp->timestamp), 'large');
+ $value = ui_print_timestamp(strtotime($tmp->timestamp), true);
$last_contact_value = ''.$value.'';
}
@@ -1209,17 +1214,17 @@ foreach ((array) $tags as $id_tag => $tag) {
if (is_array($tag_with) === true
&& ((array_search($id_tag, $tag_with) === false) || (array_search($id_tag, $tag_with) === null))
) {
- $tags_select_with[$id_tag] = ui_print_truncate_text($tag, 50, true);
+ $tags_select_with[$id_tag] = $tag;
} else {
- $tag_with_temp[$id_tag] = ui_print_truncate_text($tag, 50, true);
+ $tag_with_temp[$id_tag] = $tag;
}
if (is_array($tag_without) === true
&& ((array_search($id_tag, $tag_without) === false) || (array_search($id_tag, $tag_without) === null))
) {
- $tags_select_without[$id_tag] = ui_print_truncate_text($tag, 50, true);
+ $tags_select_without[$id_tag] = $tag;
} else {
- $tag_without_temp[$id_tag] = ui_print_truncate_text($tag, 50, true);
+ $tag_without_temp[$id_tag] = $tag;
}
}
@@ -1255,7 +1260,16 @@ $data[0] = html_print_select(
true,
true,
'select_tags',
- false
+ false,
+ false,
+ false,
+ false,
+ false,
+ '',
+ false,
+ false,
+ false,
+ 25
);
$data[1] = html_print_image(
@@ -1297,7 +1311,16 @@ $data[2] = html_print_select(
true,
true,
'select_tags',
- false
+ false,
+ false,
+ false,
+ false,
+ false,
+ '',
+ false,
+ false,
+ false,
+ 25
);
$tabletags_with->data[] = $data;
@@ -1330,7 +1353,16 @@ $data[0] = html_print_select(
true,
true,
'select_tags',
- false
+ false,
+ false,
+ false,
+ false,
+ false,
+ '',
+ false,
+ false,
+ false,
+ 25
);
$data[1] = html_print_image(
'images/darrowright.png',
@@ -1368,7 +1400,16 @@ $data[2] = html_print_select(
true,
true,
'select_tags',
- false
+ false,
+ false,
+ false,
+ false,
+ false,
+ '',
+ false,
+ false,
+ false,
+ 25
);
$tabletags_without->data[] = $data;
$tabletags_without->rowclass[] = '';
@@ -3006,6 +3047,11 @@ $(document).ready( function() {
});
+ var show_event_dialog = "";
+ if (show_event_dialog !== ''){
+ show_event_dialo(show_event_dialog);
+ }
+
/* Multi select handler */
$('#checkbox-all_validate_box').on('change', function() {
if($('#checkbox-all_validate_box').is(":checked")) {
@@ -3250,4 +3296,105 @@ $(document).ready(function () {
$('.white_table_graph_header').first().append($('.filter_summary'));
});
+
+// Show the modal window of an event
+function show_event_dialo(event, dialog_page) {
+ var ajax_file = getUrlAjax();
+
+ var view = ``;
+
+ if ($("#event_details_window").length) {
+ view = "#event_details_window";
+ } else if ($("#sound_event_details_window").length) {
+ view = "#sound_event_details_window";
+ }
+
+ if (dialog_page == undefined) {
+ dialog_page = "general";
+ }
+
+ try {
+ event = event.replaceAll(" ", "+");
+ event = JSON.parse(atob(event), true);
+ } catch (e) {
+ console.error(e);
+ return;
+ }
+
+ var inputs = $("#events_form :input");
+ var values = {};
+ inputs.each(function() {
+ values[this.name] = $(this).val();
+ });
+
+ // Metaconsole mode flag
+ var meta = $("#hidden-meta").val();
+
+ // History mode flag
+ var history = $("#hidden-history").val();
+
+ jQuery.post(
+ ajax_file,
+ {
+ page: "include/ajax/events",
+ get_extended_event: 1,
+ dialog_page: dialog_page,
+ event: event,
+ meta: meta,
+ history: history,
+ filter: values
+ },
+ function(data) {
+ $(view)
+ .hide()
+ .empty()
+ .append(data)
+ .dialog({
+ title: event.evento,
+ resizable: true,
+ draggable: true,
+ modal: true,
+ minWidth: 875,
+ minHeight: 600,
+ close: function() {
+ $("#refrcounter").countdown("resume");
+ $("div.vc-countdown").countdown("resume");
+ },
+ overlay: {
+ opacity: 0.5,
+ background: "black"
+ },
+ width: 710,
+ height: 650,
+ autoOpen: true,
+ open: function() {
+ if (
+ $.ui &&
+ $.ui.dialog &&
+ $.ui.dialog.prototype._allowInteraction
+ ) {
+ var ui_dialog_interaction =
+ $.ui.dialog.prototype._allowInteraction;
+ $.ui.dialog.prototype._allowInteraction = function(e) {
+ if ($(e.target).closest(".select2-dropdown").length)
+ return true;
+ return ui_dialog_interaction.apply(this, arguments);
+ };
+ }
+ },
+ _allowInteraction: function(event) {
+ return !!$(event.target).is(".select2-input") || this._super(event);
+ }
+ })
+ .show();
+
+ $("#refrcounter").countdown("pause");
+ $("div.vc-countdown").countdown("pause");
+
+ forced_title_callback();
+ },
+ "html"
+ );
+ return false;
+}
diff --git a/pandora_console/operation/events/sound_events.php b/pandora_console/operation/events/sound_events.php
index f2a8c62432..f71dd0fa5d 100644
--- a/pandora_console/operation/events/sound_events.php
+++ b/pandora_console/operation/events/sound_events.php
@@ -160,315 +160,475 @@ if ($config['style'] === 'pandora_black' && !is_metaconsole()) {
}
echo '';
-echo "";
-echo "';
+echo '';
+echo ui_require_css_file('wizard', 'include/styles/', true);
+echo ui_require_css_file('discovery', 'include/styles/', true);
+echo ui_require_css_file('sound_events', 'include/styles/', true);
+$output = '';
+ // Header tabs.
+ $output .= '
';
-// Connection lost alert.
-ui_require_css_file('register', 'include/styles/', true);
-$conn_title = __('Connection with server has been lost');
-$conn_text = __('Connection to the server has been lost. Please check your internet connection or contact with administrator.');
-ui_require_javascript_file('connection_check');
-set_js_value('absolute_homeurl', ui_get_full_url(false, false, false, false));
-ui_print_message_dialog(
- $conn_title,
- $conn_text,
- 'connection',
- '/images/fail@svg.svg'
-);
+ // Content tabs.
+ $output .= '
';
+ $output .= '
';
+ $output .= __('Console configuration');
+ $output .= '
';
+ $inputs = [];
-$inputs = [];
-
-// Load filter.
-$fields = \events_get_event_filter_select();
-$inputs[] = [
- 'label' => \__('Load filter'),
- 'class' => 'flex-row',
- 'arguments' => [
- 'type' => 'select',
- 'fields' => $fields,
- 'name' => 'filter_id',
- 'selected' => 0,
- 'return' => true,
- 'nothing' => \__('All new events'),
- 'nothing_value' => 0,
- 'class' => 'fullwidth',
- ],
-];
-
-$times_interval = [
- 10 => '10 '.__('seconds'),
- 15 => '15 '.__('seconds'),
- 30 => '30 '.__('seconds'),
- 60 => '60 '.__('seconds'),
-];
-
-$times_sound = [
- 2 => '2 '.__('seconds'),
- 5 => '5 '.__('seconds'),
- 10 => '10 '.__('seconds'),
- 15 => '15 '.__('seconds'),
- 30 => '30 '.__('seconds'),
- 60 => '60 '.__('seconds'),
-];
-
-$inputs[] = [
- 'class' => 'flex-row flex-row-center',
- 'direct' => 1,
- 'block_content' => [
- [
- 'label' => __('Interval'),
+ // Load filter.
+ $fields = \events_get_event_filter_select();
+ $inputs[] = [
+ 'label' => \__('Set condition'),
'arguments' => [
- 'type' => 'select',
- 'fields' => $times_interval,
- 'name' => 'interval',
- 'selected' => 10,
- 'return' => true,
+ 'type' => 'select',
+ 'fields' => $fields,
+ 'name' => 'filter_id',
+ 'selected' => 0,
+ 'return' => true,
+ 'nothing' => \__('All new events'),
+ 'nothing_value' => 0,
+ 'class' => 'fullwidth',
],
- ],
- [
- 'label' => __('Time Sound'),
- 'arguments' => [
- 'type' => 'select',
- 'fields' => $times_sound,
- 'name' => 'time_sound',
- 'selected' => 10,
- 'return' => true,
+ ];
+
+ $times_interval = [
+ 10 => '10 '.__('seconds'),
+ 15 => '15 '.__('seconds'),
+ 30 => '30 '.__('seconds'),
+ 60 => '60 '.__('seconds'),
+ ];
+
+ $times_sound = [
+ 2 => '2 '.__('seconds'),
+ 5 => '5 '.__('seconds'),
+ 10 => '10 '.__('seconds'),
+ 15 => '15 '.__('seconds'),
+ 30 => '30 '.__('seconds'),
+ 60 => '60 '.__('seconds'),
+ ];
+
+ $inputs[] = [
+ 'class' => 'interval-sounds',
+ 'direct' => 1,
+ 'block_content' => [
+ [
+ 'label' => __('Interval'),
+ 'arguments' => [
+ 'type' => 'select',
+ 'fields' => $times_interval,
+ 'name' => 'interval',
+ 'selected' => 10,
+ 'return' => true,
+ ],
+ ],
+ [
+ 'label' => __('Sound duration'),
+ 'arguments' => [
+ 'type' => 'select',
+ 'fields' => $times_sound,
+ 'name' => 'time_sound',
+ 'selected' => 10,
+ 'return' => true,
+ ],
+ ],
],
- ],
- ],
-];
+ ];
-$sounds = [
- 'aircraftalarm.wav' => 'Air craft alarm',
- 'air_shock_alarm.wav' => 'Air shock alarm',
- 'alien_alarm.wav' => 'Alien alarm',
- 'alien_beacon.wav' => 'Alien beacon',
- 'bell_school_ringing.wav' => 'Bell school ringing',
- 'Door_Alarm.wav' => 'Door alarm',
- 'EAS_beep.wav' => 'EAS beep',
- 'Firewarner.wav' => 'Fire warner',
- 'HardPCMAlarm.wav' => 'Hard PCM Alarm',
- 'negativebeep.wav' => 'Negative beep',
- 'Star_Trek_emergency_simulation.wav' => 'StarTrek emergency simulation',
-];
+ $sounds = [
+ 'aircraftalarm.wav' => 'Air craft alarm',
+ 'air_shock_alarm.wav' => 'Air shock alarm',
+ 'alien_alarm.wav' => 'Alien alarm',
+ 'alien_beacon.wav' => 'Alien beacon',
+ 'bell_school_ringing.wav' => 'Bell school ringing',
+ 'Door_Alarm.wav' => 'Door alarm',
+ 'EAS_beep.wav' => 'EAS beep',
+ 'Firewarner.wav' => 'Fire warner',
+ 'HardPCMAlarm.wav' => 'Hard PCM Alarm',
+ 'negativebeep.wav' => 'Negative beep',
+ 'Star_Trek_emergency_simulation.wav' => 'StarTrek emergency simulation',
+ ];
-$eventsounds = mysql_db_get_row_sql('SELECT * FROM tevent_sound WHERE active = 1');
-foreach ($eventsounds as $key => $row) {
- $sounds[$row['sound']] = $row['name'];
-}
+ $eventsounds = db_get_all_rows_sql('SELECT * FROM tevent_sound WHERE active = 1');
+ foreach ($eventsounds as $key => $row) {
+ $sounds[$row['sound']] = $row['name'];
+ }
-$inputs[] = [
- 'label' => \__('Sounds'),
- 'class' => 'flex-row',
- 'arguments' => [
- 'type' => 'select',
- 'fields' => $sounds,
- 'name' => 'sound_id',
- 'selected' => 'Star_Trek_emergency_simulation.wav',
- 'return' => true,
- 'class' => 'fullwidth',
- ],
-];
+ $inputs[] = [
+ 'class' => 'test-sounds',
+ 'direct' => 1,
+ 'block_content' => [
+ [
+ 'label' => \__('Sound melody'),
+ 'arguments' => [
+ 'type' => 'select',
+ 'fields' => $sounds,
+ 'name' => 'sound_id',
+ 'selected' => 'Star_Trek_emergency_simulation.wav',
+ 'return' => true,
+ 'class' => 'fullwidth',
+ ],
+ ],
+ [
+ 'arguments' => [
+ 'type' => 'button',
+ 'name' => 'melody_sound',
+ 'label' => __('Test sound'),
+ 'attributes' => ['icon' => 'sound'],
+ 'return' => true,
+ ],
+ ],
+ ],
+ ];
-// Print form.
-HTML::printForm(
- [
- 'form' => [
- 'action' => '',
- 'method' => 'POST',
- ],
- 'inputs' => $inputs,
- ],
- false,
- true
-);
+ // Print form.
+ $output .= HTML::printForm(
+ [
+ 'form' => [
+ 'action' => '',
+ 'method' => 'POST',
+ ],
+ 'inputs' => $inputs,
+ ],
+ true,
+ false
+ );
+ $output .= '';
-$result = '
';
-$result .= '- ';
-$result .= ui_print_info_message(__('Events not found'), '', true);
-$result .= '
';
-$result .= '
';
+ $output .= '
';
+ $output .= '
';
+ $output .= __('Discovered alerts');
+ $output .= '
';
+ $output .= '
';
+ $output .= html_print_image(
+ 'images/no-alerts-discovered.png',
+ true,
+ [
+ 'title' => __('No alerts discovered'),
+ 'class' => 'invert_filter',
+ ]
+ );
+ $output .= '';
+ $output .= __('Congrats! there’s nothing to show');
+ $output .= '';
+ $output .= '
';
+ $output .= '
';
+ $output .= html_print_input_hidden(
+ 'ajax_file_sound_console',
+ ui_get_full_url('ajax.php', false, false, false),
+ true
+ );
+ $output .= html_print_input_hidden(
+ 'meta',
+ is_metaconsole(),
+ true
+ );
+ $output .= '
';
+ $output .= '
';
+ $output .= '
';
+ $output .= '
';
-$result .= '';
+ $output .= '';
+ $output .= '
';
+ $output .= '
';
+ $output .= '
';
+ echo $output;
+ ?>
$id_table,
- 'class' => 'info_table w100p',
- 'style' => 'width: 99%',
- 'columns' => $columns,
- 'column_names' => $columns,
- 'no_sortable_columns' => [],
- 'data_element' => $data,
- 'searching' => true,
- 'dom_elements' => 'ftip',
- 'order' => [
- 'field' => $columns[0],
- 'direction' => 'asc',
- ],
- 'zeroRecords' => __('No inventory found'),
- 'emptyTable' => __('No inventory found'),
- 'return' => true,
- 'no_sortable_columns' => [],
- ]
- );
-
if ($count_rows > 1) {
+ $table = ui_print_datatable(
+ [
+ 'id' => $id_table,
+ 'class' => 'info_table w100p',
+ 'style' => 'width: 99%',
+ 'columns' => $columns,
+ 'column_names' => $columns,
+ 'no_sortable_columns' => [],
+ 'data_element' => $data,
+ 'searching' => true,
+ 'dom_elements' => 'ftip',
+ 'order' => [
+ 'field' => $columns[0],
+ 'direction' => 'asc',
+ ],
+ 'zeroRecords' => __('No inventory found'),
+ 'emptyTable' => __('No inventory found'),
+ 'return' => true,
+ 'no_sortable_columns' => [],
+ ]
+ );
+
ui_toggle(
$table,
array_shift($module_rows)['name'],
@@ -1190,7 +1190,25 @@ if ($inventory_module !== 'basic') {
false
);
} else {
- echo $table;
+ ui_print_datatable(
+ [
+ 'id' => $id_table,
+ 'class' => 'info_table w100p',
+ 'style' => 'width: 99%',
+ 'columns' => $columns,
+ 'column_names' => $columns,
+ 'no_sortable_columns' => [],
+ 'data_element' => $data,
+ 'searching' => true,
+ 'order' => [
+ 'field' => $columns[0],
+ 'direction' => 'asc',
+ ],
+ 'zeroRecords' => __('No inventory found'),
+ 'emptyTable' => __('No inventory found'),
+ 'print_pagination_search_csv' => true,
+ ]
+ );
html_print_action_buttons(
'',
diff --git a/pandora_console/operation/search_modules.php b/pandora_console/operation/search_modules.php
index 29c6fb7fcb..2cdda78b4a 100644
--- a/pandora_console/operation/search_modules.php
+++ b/pandora_console/operation/search_modules.php
@@ -22,6 +22,9 @@ $searchModules = check_acl($config['id_user'], 0, 'AR');
if (!$modules || !$searchModules) {
echo "
".__('Zero results found')."
\n";
} else {
+ // Show the modal window of an module.
+ echo '';
+
$table = new stdClass();
$table->cellpadding = 4;
$table->cellspacing = 4;
@@ -173,14 +176,16 @@ if (!$modules || !$searchModules) {
$win_handle = dechex(crc32($module['id_agente_modulo'].$module['module_name']));
$link = "winopeng('".'operation/agentes/stat_win.php?'."type=$graph_type&".'period='.SECONDS_1DAY.'&id='.$module['id_agente_modulo'].'&refresh='.SECONDS_10MINUTES."', "."'day_".$win_handle."')";
+ $link_module_detail = 'show_module_detail_dialog('.$module['id_agente_modulo'].', '.$module['id_agente'].', '."'', 0, ".SECONDS_1DAY.", '".$module['module_name']."')";
- $graphCell = ''.html_print_image('images/chart_curve.png', true, ['border' => 0, 'alt' => '']).'';
- $graphCell .= ' '."".html_print_image(
- 'images/binary.png',
+ $graphCell = ''.html_print_image('images/module-graph.svg', true, ['border' => 0, 'alt' => '', 'class' => 'main_menu_icon invert_filter' ]).'';
+ $graphCell .= ' '.html_print_image(
+ 'images/simple-value.svg',
true,
[
'border' => '0',
'alt' => '',
+ 'class' => 'main_menu_icon invert_filter',
]
).'';
}
@@ -258,3 +263,105 @@ if (!$modules || !$searchModules) {
]
);
}
+
+ui_include_time_picker();
+ui_require_jquery_file('ui.datepicker-'.get_user_language(), 'include/javascript/i18n/');
+
+?>
+
+
\ No newline at end of file
diff --git a/pandora_console/operation/snmpconsole/snmp_browser.php b/pandora_console/operation/snmpconsole/snmp_browser.php
index 12cba23676..27768a5646 100644
--- a/pandora_console/operation/snmpconsole/snmp_browser.php
+++ b/pandora_console/operation/snmpconsole/snmp_browser.php
@@ -87,7 +87,7 @@ ui_print_standard_header(
],
[
'link' => '',
- 'label' => __('SMNP'),
+ 'label' => __('SNMP'),
],
]
);
diff --git a/pandora_console/operation/snmpconsole/snmp_mib_uploader.php b/pandora_console/operation/snmpconsole/snmp_mib_uploader.php
index e75250842f..3a30860abd 100644
--- a/pandora_console/operation/snmpconsole/snmp_mib_uploader.php
+++ b/pandora_console/operation/snmpconsole/snmp_mib_uploader.php
@@ -57,7 +57,7 @@ ui_print_standard_header(
],
[
'link' => '',
- 'label' => __('SMNP'),
+ 'label' => __('SNMP'),
],
]
);
diff --git a/pandora_console/operation/tree.php b/pandora_console/operation/tree.php
index 35f960744b..8ca4343ea0 100755
--- a/pandora_console/operation/tree.php
+++ b/pandora_console/operation/tree.php
@@ -210,6 +210,7 @@ $agent_status_arr[AGENT_STATUS_WARNING] = __('Warning');
$agent_status_arr[AGENT_STATUS_CRITICAL] = __('Critical');
$agent_status_arr[AGENT_STATUS_UNKNOWN] = __('Unknown');
$agent_status_arr[AGENT_STATUS_NOT_INIT] = __('Not init');
+$agent_status_arr[AGENT_STATUS_ALERT_FIRED] = __('Fired alerts');
$table->data['group_row'][] = html_print_label_input_block(
__('Search group'),
@@ -271,7 +272,7 @@ $table->data['agent_row'][] = html_print_label_input_block(
0,
true,
false,
- true,
+ false,
'',
false,
'width:100%'
@@ -300,6 +301,7 @@ if (is_metaconsole() === false) {
$module_status_arr[AGENT_MODULE_STATUS_CRITICAL_BAD] = __('Critical');
$module_status_arr[AGENT_MODULE_STATUS_UNKNOWN] = __('Unknown');
$module_status_arr[AGENT_MODULE_STATUS_NOT_INIT] = __('Not init');
+ $module_status_arr['fired'] = __('Fired alerts');
$table->data['last_row'][] = html_print_label_input_block(
__('Search module'),
@@ -322,7 +324,7 @@ if (is_metaconsole() === false) {
0,
true,
false,
- true,
+ false,
'',
false,
'width:100%'
@@ -380,7 +382,7 @@ html_print_div(
]
);
-$infoHeadTitle = 'Sombra oscura';
+$infoHeadTitle = '';
?>
diff --git a/pandora_console/operation/visual_console/view.php b/pandora_console/operation/visual_console/view.php
index 6f17e6301c..80254800b5 100644
--- a/pandora_console/operation/visual_console/view.php
+++ b/pandora_console/operation/visual_console/view.php
@@ -568,7 +568,7 @@ if (users_can_manage_group_all('AR') === false) {
}
$ignored_params['refr'] = '';
-ui_require_javascript_file('tiny_mce', 'include/javascript/tiny_mce/');
+ui_require_javascript_file('tinymce', 'vendor/tinymce/tinymce/');
ui_require_javascript_file('pandora_visual_console');
include_javascript_d3();
visual_map_load_client_resources();
diff --git a/pandora_console/pandora_console.redhat.spec b/pandora_console/pandora_console.redhat.spec
index c7d1fd4dfa..5fe50e30ad 100644
--- a/pandora_console/pandora_console.redhat.spec
+++ b/pandora_console/pandora_console.redhat.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
-%define release 230413
+%define release 230503
# User and Group under which Apache is running
%define httpd_name httpd
diff --git a/pandora_console/pandora_console.rhel7.spec b/pandora_console/pandora_console.rhel7.spec
index 0a903c1f32..4a8458243a 100644
--- a/pandora_console/pandora_console.rhel7.spec
+++ b/pandora_console/pandora_console.rhel7.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
-%define release 230413
+%define release 230503
# User and Group under which Apache is running
%define httpd_name httpd
diff --git a/pandora_console/pandora_console.spec b/pandora_console/pandora_console.spec
index 659da16307..94c29c7902 100644
--- a/pandora_console/pandora_console.spec
+++ b/pandora_console/pandora_console.spec
@@ -3,7 +3,7 @@
#
%define name pandorafms_console
%define version 7.0NG.770
-%define release 230413
+%define release 230503
%define httpd_name httpd
# User and Group under which Apache is running
%define httpd_name apache2
diff --git a/pandora_console/vendor/amphp/parallel-functions/.github/workflows/ci.yml b/pandora_console/vendor/amphp/parallel-functions/.github/workflows/ci.yml
new file mode 100644
index 0000000000..82e054fe1d
--- /dev/null
+++ b/pandora_console/vendor/amphp/parallel-functions/.github/workflows/ci.yml
@@ -0,0 +1,92 @@
+name: Continuous Integration
+
+on:
+ - push
+ - pull_request
+
+jobs:
+ tests:
+ strategy:
+ matrix:
+ include:
+ - operating-system: 'ubuntu-latest'
+ php-version: '7.4'
+
+ - operating-system: 'ubuntu-latest'
+ php-version: '8.0'
+
+ - operating-system: 'ubuntu-latest'
+ php-version: '8.1'
+
+ - operating-system: 'windows-latest'
+ php-version: '8.1'
+ job-description: 'on Windows'
+
+ - operating-system: 'macos-latest'
+ php-version: '8.1'
+ job-description: 'on macOS'
+
+ name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
+
+ runs-on: ${{ matrix.operating-system }}
+
+ steps:
+ - name: Set git to use LF
+ run: |
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-version }}
+ extensions: fiber-amphp/ext-fiber@master
+
+ - name: Get Composer cache directory
+ id: composer-cache
+ run: echo "::set-output name=dir::$(composer config cache-dir)"
+
+ - name: Cache dependencies
+ uses: actions/cache@v2
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
+ restore-keys: |
+ composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
+ composer-${{ runner.os }}-${{ matrix.php-version }}-
+ composer-${{ runner.os }}-
+ composer-
+
+ - name: Install dependencies
+ uses: nick-invision/retry@v2
+ with:
+ timeout_minutes: 5
+ max_attempts: 5
+ retry_wait_seconds: 30
+ command: |
+ composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
+ composer info -D
+
+ - name: Run tests
+ run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
+
+ - name: Run examples
+ run: (for f in examples/*.php; do echo $f && if ! php $f; then echo '!! failed !!' && exit 1; fi && echo "-------"; done)
+ if: runner.os != 'Windows'
+
+ - name: Run style fixer
+ env:
+ PHP_CS_FIXER_IGNORE_ENV: 1
+ run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
+ if: runner.os != 'Windows'
+
+ - name: Install composer-require-checker
+ run: php -r 'file_put_contents("composer-require-checker.phar", file_get_contents("https://github.com/maglnet/ComposerRequireChecker/releases/download/3.7.0/composer-require-checker.phar"));'
+ if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
+
+ - name: Run composer-require-checker
+ run: php composer-require-checker.phar check composer.json --config-file $PWD/composer-require-check.json
+ if: runner.os != 'Windows' && matrix.composer-require-checker-version != 'none'
diff --git a/pandora_console/vendor/amphp/parallel-functions/LICENSE b/pandora_console/vendor/amphp/parallel-functions/LICENSE
index 36e5c38de5..507a126b3a 100644
--- a/pandora_console/vendor/amphp/parallel-functions/LICENSE
+++ b/pandora_console/vendor/amphp/parallel-functions/LICENSE
@@ -1,7 +1,7 @@
The MIT License (MIT)
-Copyright (c) 2017 amphp
+Copyright (c) 2017-2022 amphp (Niklas Keller, and contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/pandora_console/vendor/amphp/parallel-functions/composer-require-check.json b/pandora_console/vendor/amphp/parallel-functions/composer-require-check.json
new file mode 100644
index 0000000000..b2ee8e9e67
--- /dev/null
+++ b/pandora_console/vendor/amphp/parallel-functions/composer-require-check.json
@@ -0,0 +1,31 @@
+{
+ "symbol-whitelist": [
+ "null",
+ "true",
+ "false",
+ "static",
+ "self",
+ "parent",
+ "array",
+ "string",
+ "int",
+ "float",
+ "bool",
+ "iterable",
+ "callable",
+ "mixed",
+ "void",
+ "object",
+ "parallel"
+ ],
+ "php-core-extensions": [
+ "Core",
+ "date",
+ "pcre",
+ "Phar",
+ "Reflection",
+ "SPL",
+ "standard",
+ "hash"
+ ]
+}
diff --git a/pandora_console/vendor/amphp/parallel-functions/composer.json b/pandora_console/vendor/amphp/parallel-functions/composer.json
index 759a2dcf6a..2b4fa01643 100644
--- a/pandora_console/vendor/amphp/parallel-functions/composer.json
+++ b/pandora_console/vendor/amphp/parallel-functions/composer.json
@@ -23,19 +23,20 @@
}
},
"require": {
- "php": ">=7",
- "amphp/parallel": "^1.1",
+ "php": ">=7.4",
"amphp/amp": "^2.0.3",
- "opis/closure": "^3.0.7"
+ "amphp/parallel": "^1.4",
+ "amphp/serialization": "^1.0",
+ "laravel/serializable-closure": "^1.0"
},
"require-dev": {
- "amphp/phpunit-util": "^1.0",
- "friendsofphp/php-cs-fixer": "^2.9",
- "phpunit/phpunit": "^6.5"
+ "amphp/php-cs-fixer-config": "v2.x-dev",
+ "amphp/phpunit-util": "^2.0",
+ "phpunit/phpunit": "^9.5.11"
},
"config": {
"platform": {
- "php": "7.0.0"
+ "php": "7.4"
}
},
"scripts": {
diff --git a/pandora_console/vendor/amphp/parallel-functions/src/Internal/SerializedCallableTask.php b/pandora_console/vendor/amphp/parallel-functions/src/Internal/SerializedCallableTask.php
index 038c47a556..808454b058 100644
--- a/pandora_console/vendor/amphp/parallel-functions/src/Internal/SerializedCallableTask.php
+++ b/pandora_console/vendor/amphp/parallel-functions/src/Internal/SerializedCallableTask.php
@@ -6,7 +6,8 @@ use Amp\Parallel\Worker\Environment;
use Amp\Parallel\Worker\Task;
/** @internal */
-class SerializedCallableTask implements Task {
+class SerializedCallableTask implements Task
+{
/** @var string */
private $function;
@@ -17,12 +18,14 @@ class SerializedCallableTask implements Task {
* @param string $function Serialized function.
* @param array $args Arguments to pass to the function. Must be serializable.
*/
- public function __construct(string $function, array $args) {
+ public function __construct(string $function, array $args)
+ {
$this->function = $function;
$this->args = $args;
}
- public function run(Environment $environment) {
+ public function run(Environment $environment)
+ {
$callable = \unserialize($this->function, ['allowed_classes' => true]);
if ($callable instanceof \__PHP_Incomplete_Class) {
diff --git a/pandora_console/vendor/amphp/parallel-functions/src/functions.php b/pandora_console/vendor/amphp/parallel-functions/src/functions.php
index 99900fc661..be2ab41358 100644
--- a/pandora_console/vendor/amphp/parallel-functions/src/functions.php
+++ b/pandora_console/vendor/amphp/parallel-functions/src/functions.php
@@ -3,10 +3,10 @@
namespace Amp\ParallelFunctions;
use Amp\MultiReasonException;
-use Amp\Parallel\Sync\SerializationException;
use Amp\Parallel\Worker\Pool;
use Amp\Promise;
-use Opis\Closure\SerializableClosure;
+use Amp\Serialization\SerializationException;
+use Laravel\SerializableClosure\SerializableClosure;
use function Amp\call;
use function Amp\Parallel\Worker\enqueue;
use function Amp\Promise\any;
@@ -20,7 +20,8 @@ use function Amp\Promise\any;
* @return callable Callable executing in another thread / process.
* @throws SerializationException If the passed callable is not safely serializable.
*/
-function parallel(callable $callable, Pool $pool = null): callable {
+function parallel(callable $callable, Pool $pool = null): callable
+{
if ($callable instanceof \Closure) {
$callable = new SerializableClosure($callable);
}
@@ -47,11 +48,12 @@ function parallel(callable $callable, Pool $pool = null): callable {
* @return Promise Resolves to the result once the operation finished.
* @throws \Error If the passed callable is not safely serializable.
*/
-function parallelMap(array $array, callable $callable, Pool $pool = null): Promise {
+function parallelMap(array $array, callable $callable, Pool $pool = null): Promise
+{
return call(function () use ($array, $callable, $pool) {
// Amp\Promise\any() guarantees that all operations finished prior to resolving. Amp\Promise\all() doesn't.
// Additionally, we return all errors as a MultiReasonException instead of throwing on the first error.
- list($errors, $results) = yield any(\array_map(parallel($callable, $pool), $array));
+ [$errors, $results] = yield any(\array_map(parallel($callable, $pool), $array));
if ($errors) {
throw new MultiReasonException($errors);
@@ -72,7 +74,8 @@ function parallelMap(array $array, callable $callable, Pool $pool = null): Promi
* @return Promise
* @throws \Error If the passed callable is not safely serializable.
*/
-function parallelFilter(array $array, callable $callable = null, int $flag = 0, Pool $pool = null): Promise {
+function parallelFilter(array $array, callable $callable = null, int $flag = 0, Pool $pool = null): Promise
+{
return call(function () use ($array, $callable, $flag, $pool) {
if ($callable === null) {
if ($flag === \ARRAY_FILTER_USE_BOTH || $flag === \ARRAY_FILTER_USE_KEY) {
@@ -87,11 +90,11 @@ function parallelFilter(array $array, callable $callable = null, int $flag = 0,
// Amp\Promise\any() guarantees that all operations finished prior to resolving. Amp\Promise\all() doesn't.
// Additionally, we return all errors as a MultiReasonException instead of throwing on the first error.
if ($flag === \ARRAY_FILTER_USE_BOTH) {
- list($errors, $results) = yield any(\array_map(parallel($callable, $pool), $array, \array_keys($array)));
+ [$errors, $results] = yield any(\array_map(parallel($callable, $pool), $array, \array_keys($array)));
} elseif ($flag === \ARRAY_FILTER_USE_KEY) {
- list($errors, $results) = yield any(\array_map(parallel($callable, $pool), \array_keys($array)));
+ [$errors, $results] = yield any(\array_map(parallel($callable, $pool), \array_keys($array)));
} else {
- list($errors, $results) = yield any(\array_map(parallel($callable, $pool), $array));
+ [$errors, $results] = yield any(\array_map(parallel($callable, $pool), $array));
}
if ($errors) {
diff --git a/pandora_console/vendor/amphp/parallel/lib/Context/Process.php b/pandora_console/vendor/amphp/parallel/lib/Context/Process.php
index bcfe46c351..9efcfb2dca 100644
--- a/pandora_console/vendor/amphp/parallel/lib/Context/Process.php
+++ b/pandora_console/vendor/amphp/parallel/lib/Context/Process.php
@@ -80,9 +80,13 @@ final class Process implements Context
"log_errors" => "1",
];
+ $otherOpts = [];
if ($binary === null) {
if (\PHP_SAPI === "cli") {
$binary = \PHP_BINARY;
+ } else if (\PHP_SAPI === "phpdbg") {
+ $binary = \PHP_BINARY;
+ $otherOpts []= '-qrr';
} else {
$binary = self::$binaryPath ?? self::locateBinary();
}
@@ -136,7 +140,7 @@ final class Process implements Context
$command = \implode(" ", [
\escapeshellarg($binary),
- $this->formatOptions($options),
+ $this->formatOptions($options, $otherOpts),
\escapeshellarg($scriptPath),
$this->hub->getUri(),
$script,
@@ -163,9 +167,9 @@ final class Process implements Context
throw new \Error("Could not locate PHP executable binary");
}
- private function formatOptions(array $options): string
+ private function formatOptions(array $options, array $otherOpts): string
{
- $result = [];
+ $result = $otherOpts;
foreach ($options as $option => $value) {
$result[] = \sprintf("-d%s=%s", $option, $value);
diff --git a/pandora_console/vendor/amphp/parallel/lib/Sync/functions.php b/pandora_console/vendor/amphp/parallel/lib/Sync/functions.php
index 850c0c17ca..9e4178e432 100644
--- a/pandora_console/vendor/amphp/parallel/lib/Sync/functions.php
+++ b/pandora_console/vendor/amphp/parallel/lib/Sync/functions.php
@@ -4,8 +4,16 @@ namespace Amp\Parallel\Sync;
use Amp\Serialization\SerializationException as SerializerException;
-// Alias must be defined in an always-loaded file as catch blocks do not trigger the autoloader.
-\class_alias(SerializerException::class, SerializationException::class);
+if (!\class_exists(SerializationException::class)) {
+ // Wrap definition in error handler to avoid apparently PHP bug with preloading, see amphp/parallel#159
+ set_error_handler(function (): bool { return true; });
+ try {
+ // Alias must be defined in an always-loaded file as catch blocks do not trigger the autoloader.
+ \class_alias(SerializerException::class, SerializationException::class);
+ } finally {
+ restore_error_handler();
+ }
+}
/**
* @param \Throwable $exception
diff --git a/pandora_console/vendor/amphp/parser/.github/workflows/ci.yml b/pandora_console/vendor/amphp/parser/.github/workflows/ci.yml
new file mode 100644
index 0000000000..e403a03f04
--- /dev/null
+++ b/pandora_console/vendor/amphp/parser/.github/workflows/ci.yml
@@ -0,0 +1,85 @@
+name: Continuous Integration
+
+on:
+ - push
+ - pull_request
+
+jobs:
+ tests:
+ strategy:
+ matrix:
+ include:
+ - operating-system: 'ubuntu-latest'
+ php-version: '7.4'
+
+ - operating-system: 'ubuntu-latest'
+ php-version: '8.0'
+
+ - operating-system: 'ubuntu-latest'
+ php-version: '8.1'
+
+ - operating-system: 'windows-latest'
+ php-version: '8.1'
+ job-description: 'on Windows'
+
+ - operating-system: 'macos-latest'
+ php-version: '8.1'
+ job-description: 'on macOS'
+
+ - operating-system: 'ubuntu-latest'
+ php-version: '8.2'
+
+ name: PHP ${{ matrix.php-version }} ${{ matrix.job-description }}
+
+ runs-on: ${{ matrix.operating-system }}
+
+ steps:
+ - name: Set git to use LF
+ run: |
+ git config --global core.autocrlf false
+ git config --global core.eol lf
+
+ - name: Checkout code
+ uses: actions/checkout@v2
+
+ - name: Setup PHP
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: ${{ matrix.php-version }}
+
+ - name: Get Composer cache directory
+ id: composer-cache
+ run: echo "::set-output name=dir::$(composer config cache-dir)"
+
+ - name: Cache dependencies
+ uses: actions/cache@v2
+ with:
+ path: ${{ steps.composer-cache.outputs.dir }}
+ key: composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-${{ matrix.composer-flags }}
+ restore-keys: |
+ composer-${{ runner.os }}-${{ matrix.php-version }}-${{ hashFiles('**/composer.*') }}-
+ composer-${{ runner.os }}-${{ matrix.php-version }}-
+ composer-${{ runner.os }}-
+ composer-
+
+ - name: Install dependencies
+ uses: nick-invision/retry@v2
+ with:
+ timeout_minutes: 5
+ max_attempts: 5
+ retry_wait_seconds: 30
+ command: |
+ composer update --optimize-autoloader --no-interaction --no-progress ${{ matrix.composer-flags }}
+ composer info -D
+
+ - name: Run tests
+ run: vendor/bin/phpunit ${{ matrix.phpunit-flags }}
+
+ - name: Run static analysis
+ run: vendor/bin/psalm.phar
+
+ - name: Run style fixer
+ env:
+ PHP_CS_FIXER_IGNORE_ENV: 1
+ run: vendor/bin/php-cs-fixer --diff --dry-run -v fix
+ if: runner.os != 'Windows'
diff --git a/pandora_console/vendor/amphp/parser/.gitmodules b/pandora_console/vendor/amphp/parser/.gitmodules
deleted file mode 100644
index a58632479d..0000000000
--- a/pandora_console/vendor/amphp/parser/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "docs/.shared"]
- path = docs/.shared
- url = https://github.com/amphp/website-shared
diff --git a/pandora_console/vendor/amphp/parser/.php-cs-fixer.dist.php b/pandora_console/vendor/amphp/parser/.php-cs-fixer.dist.php
new file mode 100644
index 0000000000..63ed811ee6
--- /dev/null
+++ b/pandora_console/vendor/amphp/parser/.php-cs-fixer.dist.php
@@ -0,0 +1,11 @@
+getFinder()
+ ->in(__DIR__ . '/examples')
+ ->in(__DIR__ . '/src')
+ ->in(__DIR__ . '/test');
+
+$config->setCacheFile(__DIR__ . '/.php_cs.cache');
+
+return $config;
diff --git a/pandora_console/vendor/amphp/parser/.php_cs.dist b/pandora_console/vendor/amphp/parser/.php_cs.dist
deleted file mode 100644
index 3fe01f5896..0000000000
--- a/pandora_console/vendor/amphp/parser/.php_cs.dist
+++ /dev/null
@@ -1,39 +0,0 @@
-setRiskyAllowed(true)
- ->setRules([
- "@PSR1" => true,
- "@PSR2" => true,
- "braces" => [
- "allow_single_line_closure" => true,
- "position_after_functions_and_oop_constructs" => "same",
- ],
- "array_syntax" => ["syntax" => "short"],
- "cast_spaces" => true,
- "combine_consecutive_unsets" => true,
- "function_to_constant" => true,
- "no_multiline_whitespace_before_semicolons" => true,
- "no_unused_imports" => true,
- "no_useless_else" => true,
- "no_useless_return" => true,
- "no_whitespace_before_comma_in_array" => true,
- "no_whitespace_in_blank_line" => true,
- "non_printable_character" => true,
- "normalize_index_brace" => true,
- "ordered_imports" => true,
- "php_unit_construct" => true,
- "php_unit_dedicate_assert" => true,
- "php_unit_fqcn_annotation" => true,
- "phpdoc_summary" => true,
- "phpdoc_types" => true,
- "psr4" => true,
- "return_type_declaration" => ["space_before" => "none"],
- "short_scalar_cast" => true,
- "single_blank_line_before_namespace" => true,
- ])
- ->setFinder(
- PhpCsFixer\Finder::create()
- ->in(__DIR__ . "/lib")
- ->in(__DIR__ . "/test")
- );
diff --git a/pandora_console/vendor/amphp/parser/LICENSE b/pandora_console/vendor/amphp/parser/LICENSE
index 36e5c38de5..e92a617575 100644
--- a/pandora_console/vendor/amphp/parser/LICENSE
+++ b/pandora_console/vendor/amphp/parser/LICENSE
@@ -1,7 +1,7 @@
The MIT License (MIT)
-Copyright (c) 2017 amphp
+Copyright (c) 2017-2022 amphp (Niklas Keller, Aaron Piotrowski, and contributors)
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/pandora_console/vendor/amphp/parser/Makefile b/pandora_console/vendor/amphp/parser/Makefile
deleted file mode 100644
index 6c3291b772..0000000000
--- a/pandora_console/vendor/amphp/parser/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-PHP_BIN := php
-COMPOSER_BIN := composer
-
-COVERAGE = coverage
-SRCS = lib test
-
-find_php_files = $(shell find $(1) -type f -name "*.php")
-src = $(foreach d,$(SRCS),$(call find_php_files,$(d)))
-
-.PHONY: test
-test: setup phpunit code-style
-
-.PHONY: clean
-clean: clean-coverage clean-vendor
-
-.PHONY: clean-coverage
-clean-coverage:
- test ! -e coverage || rm -r coverage
-
-.PHONY: clean-vendor
-clean-vendor:
- test ! -e vendor || rm -r vendor
-
-.PHONY: setup
-setup: vendor/autoload.php
-
-.PHONY: deps-update
-deps-update:
- $(COMPOSER_BIN) update
-
-.PHONY: phpunit
-phpunit: setup
- $(PHP_BIN) vendor/bin/phpunit
-
-.PHONY: code-style
-code-style: setup
- PHP_CS_FIXER_IGNORE_ENV=1 $(PHP_BIN) vendor/bin/php-cs-fixer --diff -v fix
-
-composer.lock: composer.json
- $(COMPOSER_BIN) install
- touch $@
-
-vendor/autoload.php: composer.lock
- $(COMPOSER_BIN) install
- touch $@
diff --git a/pandora_console/vendor/amphp/parser/README.md b/pandora_console/vendor/amphp/parser/README.md
index ad22abaa9d..5b1ca739e6 100644
--- a/pandora_console/vendor/amphp/parser/README.md
+++ b/pandora_console/vendor/amphp/parser/README.md
@@ -1,10 +1,7 @@
-# parser
+# amphp/parser
-[](https://travis-ci.org/amphp/parser)
-[](https://coveralls.io/github/amphp/parser?branch=master)
-
-
-`amphp/parser` is a streaming generator parser.
+AMPHP is a collection of event-driven libraries for PHP designed with fibers and concurrency in mind.
+`amphp/parser` allows easily building streaming generator parsers.
## Installation
@@ -16,11 +13,42 @@ composer require amphp/parser
## Requirements
-- PHP 7.0+
+- PHP 7.4+
-## Documentation
+## Usage
-Documentation is bundled within this repository in the [`./docs`](./docs) directory.
+PHP's generators are a great way for building incremental parsers.
+
+## Example
+
+This simple parser parses a line delimited protocol and prints a message for each line. Instead of printing a message, you could also invoke a data callback.
+
+```php
+$parser = new Parser((function () {
+ while (true) {
+ $line = yield "\r\n";
+
+ if (trim($line) === "") {
+ continue;
+ }
+
+ print "New item: {$line}" . PHP_EOL;
+ }
+})());
+
+for ($i = 0; $i < 100; $i++) {
+ $parser->push("bar\r");
+ $parser->push("\nfoo");
+}
+```
+
+Furthere examples can be found in other AMPHP packages which this library to build streaming parsers.
+- [`ChannelParser`](https://github.com/amphp/byte-stream/blob/5c7eb399b746a582e9598935b26483b214250c34/src/Internal/ChannelParser.php#L28) in [`amphp/byte-stream`](https://github.com/amphp/byte-stream)
+- [`RespParser`](https://github.com/amphp/redis/blob/649cff6d5e6b4c579dcab1a20511a437cbe3d62a/src/Connection/RespParser.php#L31) in [`amphp/redis`](https://github.com/amphp/redis)
+
+## Yield Behavior
+
+You can either `yield` a `string` that's used as delimiter, an `integer` that's used as length, or `null` to flush any remaining buffer in the parser (if any) or await the next call to `Parser::push()`.
## Versioning
diff --git a/pandora_console/vendor/amphp/parser/composer.json b/pandora_console/vendor/amphp/parser/composer.json
index e5b14f3fca..cf7a85df8d 100644
--- a/pandora_console/vendor/amphp/parser/composer.json
+++ b/pandora_console/vendor/amphp/parser/composer.json
@@ -23,15 +23,16 @@
}
],
"require": {
- "php": ">=7"
+ "php": ">=7.4"
},
"require-dev": {
- "phpunit/phpunit": "^6",
- "friendsofphp/php-cs-fixer": "^2.3"
+ "phpunit/phpunit": "^9",
+ "amphp/php-cs-fixer-config": "^2",
+ "psalm/phar": "^5.4"
},
"autoload": {
"psr-4": {
- "Amp\\Parser\\": "lib"
+ "Amp\\Parser\\": "src"
}
},
"autoload-dev": {
diff --git a/pandora_console/vendor/amphp/parser/docs/Gemfile b/pandora_console/vendor/amphp/parser/docs/Gemfile
deleted file mode 100644
index ada6383b06..0000000000
--- a/pandora_console/vendor/amphp/parser/docs/Gemfile
+++ /dev/null
@@ -1,5 +0,0 @@
-source "https://rubygems.org"
-gem "github-pages"
-gem "kramdown"
-gem "jekyll-github-metadata"
-gem "jekyll-relative-links"
diff --git a/pandora_console/vendor/amphp/parser/docs/Gemfile.lock b/pandora_console/vendor/amphp/parser/docs/Gemfile.lock
deleted file mode 100644
index 16e7a614c9..0000000000
--- a/pandora_console/vendor/amphp/parser/docs/Gemfile.lock
+++ /dev/null
@@ -1,202 +0,0 @@
-GEM
- remote: https://rubygems.org/
- specs:
- activesupport (4.2.8)
- i18n (~> 0.7)
- minitest (~> 5.1)
- thread_safe (~> 0.3, >= 0.3.4)
- tzinfo (~> 1.1)
- addressable (2.5.1)
- public_suffix (~> 2.0, >= 2.0.2)
- coffee-script (2.4.1)
- coffee-script-source
- execjs
- coffee-script-source (1.12.2)
- colorator (1.1.0)
- ethon (0.10.1)
- ffi (>= 1.3.0)
- execjs (2.7.0)
- faraday (0.12.1)
- multipart-post (>= 1.2, < 3)
- ffi (1.9.18)
- forwardable-extended (2.6.0)
- gemoji (3.0.0)
- github-pages (139)
- activesupport (= 4.2.8)
- github-pages-health-check (= 1.3.3)
- jekyll (= 3.4.3)
- jekyll-avatar (= 0.4.2)
- jekyll-coffeescript (= 1.0.1)
- jekyll-default-layout (= 0.1.4)
- jekyll-feed (= 0.9.2)
- jekyll-gist (= 1.4.0)
- jekyll-github-metadata (= 2.3.1)
- jekyll-mentions (= 1.2.0)
- jekyll-optional-front-matter (= 0.1.2)
- jekyll-paginate (= 1.1.0)
- jekyll-readme-index (= 0.1.0)
- jekyll-redirect-from (= 0.12.1)
- jekyll-relative-links (= 0.4.0)
- jekyll-sass-converter (= 1.5.0)
- jekyll-seo-tag (= 2.2.3)
- jekyll-sitemap (= 1.0.0)
- jekyll-swiss (= 0.4.0)
- jekyll-theme-architect (= 0.0.4)
- jekyll-theme-cayman (= 0.0.4)
- jekyll-theme-dinky (= 0.0.4)
- jekyll-theme-hacker (= 0.0.4)
- jekyll-theme-leap-day (= 0.0.4)
- jekyll-theme-merlot (= 0.0.4)
- jekyll-theme-midnight (= 0.0.4)
- jekyll-theme-minimal (= 0.0.4)
- jekyll-theme-modernist (= 0.0.4)
- jekyll-theme-primer (= 0.2.1)
- jekyll-theme-slate (= 0.0.4)
- jekyll-theme-tactile (= 0.0.4)
- jekyll-theme-time-machine (= 0.0.4)
- jekyll-titles-from-headings (= 0.1.5)
- jemoji (= 0.8.0)
- kramdown (= 1.13.2)
- liquid (= 3.0.6)
- listen (= 3.0.6)
- mercenary (~> 0.3)
- minima (= 2.1.1)
- rouge (= 1.11.1)
- terminal-table (~> 1.4)
- github-pages-health-check (1.3.3)
- addressable (~> 2.3)
- net-dns (~> 0.8)
- octokit (~> 4.0)
- public_suffix (~> 2.0)
- typhoeus (~> 0.7)
- html-pipeline (2.6.0)
- activesupport (>= 2)
- nokogiri (>= 1.4)
- i18n (0.8.4)
- jekyll (3.4.3)
- addressable (~> 2.4)
- colorator (~> 1.0)
- jekyll-sass-converter (~> 1.0)
- jekyll-watch (~> 1.1)
- kramdown (~> 1.3)
- liquid (~> 3.0)
- mercenary (~> 0.3.3)
- pathutil (~> 0.9)
- rouge (~> 1.7)
- safe_yaml (~> 1.0)
- jekyll-avatar (0.4.2)
- jekyll (~> 3.0)
- jekyll-coffeescript (1.0.1)
- coffee-script (~> 2.2)
- jekyll-default-layout (0.1.4)
- jekyll (~> 3.0)
- jekyll-feed (0.9.2)
- jekyll (~> 3.3)
- jekyll-gist (1.4.0)
- octokit (~> 4.2)
- jekyll-github-metadata (2.3.1)
- jekyll (~> 3.1)
- octokit (~> 4.0, != 4.4.0)
- jekyll-mentions (1.2.0)
- activesupport (~> 4.0)
- html-pipeline (~> 2.3)
- jekyll (~> 3.0)
- jekyll-optional-front-matter (0.1.2)
- jekyll (~> 3.0)
- jekyll-paginate (1.1.0)
- jekyll-readme-index (0.1.0)
- jekyll (~> 3.0)
- jekyll-redirect-from (0.12.1)
- jekyll (~> 3.3)
- jekyll-relative-links (0.4.0)
- jekyll (~> 3.3)
- jekyll-sass-converter (1.5.0)
- sass (~> 3.4)
- jekyll-seo-tag (2.2.3)
- jekyll (~> 3.3)
- jekyll-sitemap (1.0.0)
- jekyll (~> 3.3)
- jekyll-swiss (0.4.0)
- jekyll-theme-architect (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-cayman (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-dinky (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-hacker (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-leap-day (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-merlot (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-midnight (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-minimal (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-modernist (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-primer (0.2.1)
- jekyll (~> 3.3)
- jekyll-theme-slate (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-tactile (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-time-machine (0.0.4)
- jekyll (~> 3.3)
- jekyll-titles-from-headings (0.1.5)
- jekyll (~> 3.3)
- jekyll-watch (1.5.0)
- listen (~> 3.0, < 3.1)
- jemoji (0.8.0)
- activesupport (~> 4.0)
- gemoji (~> 3.0)
- html-pipeline (~> 2.2)
- jekyll (>= 3.0)
- kramdown (1.13.2)
- liquid (3.0.6)
- listen (3.0.6)
- rb-fsevent (>= 0.9.3)
- rb-inotify (>= 0.9.7)
- mercenary (0.3.6)
- mini_portile2 (2.2.0)
- minima (2.1.1)
- jekyll (~> 3.3)
- minitest (5.10.2)
- multipart-post (2.0.0)
- net-dns (0.8.0)
- nokogiri (1.8.0)
- mini_portile2 (~> 2.2.0)
- octokit (4.7.0)
- sawyer (~> 0.8.0, >= 0.5.3)
- pathutil (0.14.0)
- forwardable-extended (~> 2.6)
- public_suffix (2.0.5)
- rb-fsevent (0.9.8)
- rb-inotify (0.9.8)
- ffi (>= 0.5.0)
- rouge (1.11.1)
- safe_yaml (1.0.4)
- sass (3.4.24)
- sawyer (0.8.1)
- addressable (>= 2.3.5, < 2.6)
- faraday (~> 0.8, < 1.0)
- terminal-table (1.8.0)
- unicode-display_width (~> 1.1, >= 1.1.1)
- thread_safe (0.3.6)
- typhoeus (0.8.0)
- ethon (>= 0.8.0)
- tzinfo (1.2.3)
- thread_safe (~> 0.1)
- unicode-display_width (1.2.1)
-
-PLATFORMS
- ruby
-
-DEPENDENCIES
- github-pages
- jekyll-github-metadata
- jekyll-relative-links
- kramdown
-
-BUNDLED WITH
- 1.15.0
diff --git a/pandora_console/vendor/amphp/parser/docs/_config.yml b/pandora_console/vendor/amphp/parser/docs/_config.yml
deleted file mode 100644
index 086f15010b..0000000000
--- a/pandora_console/vendor/amphp/parser/docs/_config.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-kramdown:
- input: GFM
- toc_levels: 2..3
-
-baseurl: "/parser"
-layouts_dir: ".shared/layout"
-
-exclude: ["Gemfile", "Gemfile.lock", "README.md", "vendor"]
-include: [".shared"]
-
-repository: amphp/parser
-gems:
- - "jekyll-github-metadata"
- - "jekyll-relative-links"
-
-defaults:
- - scope:
- path: ""
- type: "pages"
- values:
- layout: "docs"
-
-asset_path: "/parser/.shared/asset"
diff --git a/pandora_console/vendor/amphp/parser/docs/index.md b/pandora_console/vendor/amphp/parser/docs/index.md
deleted file mode 100644
index 98a9c189c4..0000000000
--- a/pandora_console/vendor/amphp/parser/docs/index.md
+++ /dev/null
@@ -1,32 +0,0 @@
----
-title: Parser
-permalink: /
----
-PHP's generators are a great way for building incremental parsers.
-
-## Example
-
-This simple parser parses a line delimited protocol and prints a message for each line. Instead of printing a message, you could also invoke a data callback.
-
-```php
-$parser = new Parser((function () {
- while (true) {
- $line = yield "\r\n";
-
- if (trim($line) === "") {
- continue;
- }
-
- print "New item: {$line}" . PHP_EOL;
- }
-})());
-
-for ($i = 0; $i < 100; $i++) {
- $parser->push("bar\r");
- $parser->push("\nfoo");
-}
-```
-
-## Yield Behavior
-
-You can either `yield` a `string` that's used as delimiter, an `integer` that's used as length, or `null` for consuming everything that's available.
diff --git a/pandora_console/vendor/amphp/parser/lib/Parser.php b/pandora_console/vendor/amphp/parser/lib/Parser.php
deleted file mode 100644
index 424e86956f..0000000000
--- a/pandora_console/vendor/amphp/parser/lib/Parser.php
+++ /dev/null
@@ -1,131 +0,0 @@
-generator = $generator;
-
- $this->delimiter = $this->generator->current();
-
- if (!$this->generator->valid()) {
- $this->generator = null;
- return;
- }
-
- if ($this->delimiter !== null
- && (!\is_int($this->delimiter) || $this->delimiter <= 0)
- && (!\is_string($this->delimiter) || !\strlen($this->delimiter))
- ) {
- throw new InvalidDelimiterError(
- $generator,
- \sprintf(
- "Invalid value yielded: Expected NULL, an int greater than 0, or a non-empty string; %s given",
- \is_object($this->delimiter) ? \sprintf("instance of %s", \get_class($this->delimiter)) : \gettype($this->delimiter)
- )
- );
- }
- }
-
- /**
- * Cancels the generator parser and returns any remaining data in the internal buffer. Writing data after calling
- * this method will result in an error.
- *
- * @return string
- */
- final public function cancel(): string {
- $this->generator = null;
- return $this->buffer;
- }
-
- /**
- * @return bool True if the parser can still receive more data to parse, false if it has ended and calling push
- * will throw an exception.
- */
- final public function isValid(): bool {
- return $this->generator !== null;
- }
-
- /**
- * Adds data to the internal buffer and tries to continue parsing.
- *
- * @param string $data Data to append to the internal buffer.
- *
- * @throws InvalidDelimiterError If the generator yields an invalid delimiter.
- * @throws \Error If parsing has already been cancelled.
- * @throws \Throwable If the generator throws.
- */
- final public function push(string $data) {
- if ($this->generator === null) {
- throw new \Error("The parser is no longer writable");
- }
-
- $this->buffer .= $data;
- $end = false;
-
- try {
- while ($this->buffer !== "") {
- if (\is_int($this->delimiter)) {
- if (\strlen($this->buffer) < $this->delimiter) {
- break; // Too few bytes in buffer.
- }
-
- $send = \substr($this->buffer, 0, $this->delimiter);
- $this->buffer = \substr($this->buffer, $this->delimiter);
- } elseif (\is_string($this->delimiter)) {
- if (($position = \strpos($this->buffer, $this->delimiter)) === false) {
- break;
- }
-
- $send = \substr($this->buffer, 0, $position);
- $this->buffer = \substr($this->buffer, $position + \strlen($this->delimiter));
- } else {
- $send = $this->buffer;
- $this->buffer = "";
- }
-
- $this->delimiter = $this->generator->send($send);
-
- if (!$this->generator->valid()) {
- $end = true;
- break;
- }
-
- if ($this->delimiter !== null
- && (!\is_int($this->delimiter) || $this->delimiter <= 0)
- && (!\is_string($this->delimiter) || !\strlen($this->delimiter))
- ) {
- throw new InvalidDelimiterError(
- $this->generator,
- \sprintf(
- "Invalid value yielded: Expected NULL, an int greater than 0, or a non-empty string; %s given",
- \is_object($this->delimiter) ? \sprintf("instance of %s", \get_class($this->delimiter)) : \gettype($this->delimiter)
- )
- );
- }
- }
- } catch (\Throwable $exception) {
- $end = true;
- throw $exception;
- } finally {
- if ($end) {
- $this->generator = null;
- }
- }
- }
-}
diff --git a/pandora_console/vendor/amphp/parser/psalm.xml b/pandora_console/vendor/amphp/parser/psalm.xml
new file mode 100644
index 0000000000..137786878c
--- /dev/null
+++ b/pandora_console/vendor/amphp/parser/psalm.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pandora_console/vendor/amphp/parser/lib/InvalidDelimiterError.php b/pandora_console/vendor/amphp/parser/src/InvalidDelimiterError.php
similarity index 80%
rename from pandora_console/vendor/amphp/parser/lib/InvalidDelimiterError.php
rename to pandora_console/vendor/amphp/parser/src/InvalidDelimiterError.php
index 9f01919751..8e46c5e1a9 100644
--- a/pandora_console/vendor/amphp/parser/lib/InvalidDelimiterError.php
+++ b/pandora_console/vendor/amphp/parser/src/InvalidDelimiterError.php
@@ -1,14 +1,11 @@
-current();
$prefix .= \sprintf(
"; %s yielded at key %s",
diff --git a/pandora_console/vendor/amphp/parser/src/Parser.php b/pandora_console/vendor/amphp/parser/src/Parser.php
new file mode 100644
index 0000000000..debe85fb89
--- /dev/null
+++ b/pandora_console/vendor/amphp/parser/src/Parser.php
@@ -0,0 +1,153 @@
+|null */
+ private ?\Generator $generator;
+
+ /** @var list */
+ private array $buffers = [];
+
+ private int $bufferLength = 0;
+
+ /** @var int|string|null */
+ private $delimiter;
+
+ /**
+ * @param \Generator $generator
+ *
+ * @throws InvalidDelimiterError If the generator yields an invalid delimiter.
+ * @throws \Throwable If the generator throws.
+ */
+ public function __construct(\Generator $generator)
+ {
+ $this->generator = $generator;
+ $this->delimiter = $this->filterDelimiter($this->generator->current());
+
+ if (!$this->generator->valid()) {
+ $this->generator = null;
+ }
+ }
+
+ /**
+ * Cancels the generator parser and returns any remaining data in the internal buffer. Writing data after calling
+ * this method will result in an error.
+ */
+ final public function cancel(): string
+ {
+ $buffer = \implode($this->buffers);
+
+ $this->buffers = [];
+ $this->generator = null;
+
+ return $buffer;
+ }
+
+ /**
+ * @return bool True if the parser can still receive more data to parse, false if it has ended and calling push
+ * will throw an exception.
+ */
+ final public function isValid(): bool
+ {
+ return $this->generator !== null;
+ }
+
+ /**
+ * Adds data to the internal buffer and tries to continue parsing.
+ *
+ * @param string $data Data to append to the internal buffer.
+ *
+ * @throws InvalidDelimiterError If the generator yields an invalid delimiter.
+ * @throws \Error If parsing has already been cancelled.
+ * @throws \Throwable If the generator throws.
+ */
+ final public function push(string $data): void
+ {
+ if ($this->generator === null) {
+ throw new \Error("The parser is no longer writable");
+ }
+
+ $length = \strlen($data);
+ if ($length === 0) {
+ return;
+ }
+
+ $this->bufferLength += $length;
+
+ try {
+ do {
+ if (\is_int($this->delimiter) && $this->bufferLength < $this->delimiter) {
+ return;
+ }
+
+ if (!empty($this->buffers)) {
+ $this->buffers[] = $data;
+ $data = \implode($this->buffers);
+ $this->buffers = [];
+ }
+
+ if (\is_int($this->delimiter)) {
+ $cutAt = $retainFrom = $this->delimiter;
+ } elseif (\is_string($this->delimiter)) {
+ if (($cutAt = \strpos($data, $this->delimiter)) === false) {
+ return;
+ }
+
+ $retainFrom = $cutAt + \strlen($this->delimiter);
+ } else {
+ $cutAt = $retainFrom = $this->bufferLength;
+ }
+
+ if ($this->bufferLength > $cutAt) {
+ $send = \substr($data, 0, $cutAt);
+ $data = \substr($data, $retainFrom);
+ } else {
+ $send = $data;
+ $data = '';
+ }
+
+ $this->bufferLength -= $retainFrom;
+
+ $this->delimiter = $this->filterDelimiter($this->generator->send($send));
+
+ if (!$this->generator->valid()) {
+ $this->generator = null;
+ return;
+ }
+ } while ($this->bufferLength);
+ } catch (\Throwable $exception) {
+ $this->generator = null;
+ throw $exception;
+ } finally {
+ if (\strlen($data)) {
+ $this->buffers[] = $data;
+ }
+ }
+ }
+
+ /**
+ * @param mixed $delimiter Value yielded from Generator.
+ * @return int|string|null
+ */
+ private function filterDelimiter($delimiter)
+ {
+ \assert($this->generator instanceof \Generator, "Invalid parser state");
+
+ if ($delimiter !== null
+ && (!\is_int($delimiter) || $delimiter <= 0)
+ && (!\is_string($delimiter) || !\strlen($delimiter))
+ ) {
+ throw new InvalidDelimiterError(
+ $this->generator,
+ \sprintf(
+ "Invalid value yielded: Expected NULL, an int greater than 0, or a non-empty string; %s given",
+ \is_object($delimiter) ? \sprintf("instance of %s", \get_class($delimiter)) : \gettype($delimiter),
+ )
+ );
+ }
+
+ return $delimiter;
+ }
+}
diff --git a/pandora_console/vendor/amphp/process/lib/Internal/Posix/Handle.php b/pandora_console/vendor/amphp/process/lib/Internal/Posix/Handle.php
index e46efd54d2..b850e8fc29 100644
--- a/pandora_console/vendor/amphp/process/lib/Internal/Posix/Handle.php
+++ b/pandora_console/vendor/amphp/process/lib/Internal/Posix/Handle.php
@@ -3,6 +3,7 @@
namespace Amp\Process\Internal\Posix;
use Amp\Deferred;
+use Amp\Loop;
use Amp\Process\Internal\ProcessHandle;
/** @internal */
@@ -32,4 +33,28 @@ final class Handle extends ProcessHandle
/** @var int */
public $originalParentPid;
+
+ /** @var int */
+ public $shellPid;
+
+ public function wait()
+ {
+ if ($this->shellPid === 0) {
+ return;
+ }
+
+ $pid = $this->shellPid;
+ $this->shellPid = 0;
+
+ Loop::unreference(Loop::repeat(100, static function (string $watcherId) use ($pid) {
+ if (!\extension_loaded('pcntl') || \pcntl_waitpid($pid, $status, \WNOHANG) !== 0) {
+ Loop::cancel($watcherId);
+ }
+ }));
+ }
+
+ public function __destruct()
+ {
+ $this->wait();
+ }
}
diff --git a/pandora_console/vendor/amphp/process/lib/Internal/Posix/Runner.php b/pandora_console/vendor/amphp/process/lib/Internal/Posix/Runner.php
index 012e8d3f39..c65006b26a 100644
--- a/pandora_console/vendor/amphp/process/lib/Internal/Posix/Runner.php
+++ b/pandora_console/vendor/amphp/process/lib/Internal/Posix/Runner.php
@@ -39,6 +39,8 @@ final class Runner implements ProcessRunner
} else {
$handle->joinDeferred->resolve((int) \rtrim(@\stream_get_contents($stream)));
}
+
+ $handle->wait();
}
public static function onProcessStartExtraDataPipeReadable($watcher, $stream, $data)
@@ -102,6 +104,8 @@ final class Runner implements ProcessRunner
throw new ProcessException("Could not get process status");
}
+ $handle->shellPid = \proc_get_status($handle->proc)['pid'];
+
$stdinDeferred = new Deferred;
$handle->stdin = new ProcessOutputStream($stdinDeferred->promise());
diff --git a/pandora_console/vendor/chrome-php/chrome/LICENSE b/pandora_console/vendor/chrome-php/chrome/LICENSE
index 034561bd81..269b23930f 100644
--- a/pandora_console/vendor/chrome-php/chrome/LICENSE
+++ b/pandora_console/vendor/chrome-php/chrome/LICENSE
@@ -1,8 +1,8 @@
The MIT License (MIT)
Copyright (c) 2017-2020 Soufiane Ghzal
-Copyright (c) 2020-2022 Graham Campbell
-Copyright (c) 2020-2022 Enrico Dias
+Copyright (c) 2020-2023 Graham Campbell
+Copyright (c) 2020-2023 Enrico Dias
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/pandora_console/vendor/chrome-php/chrome/composer.json b/pandora_console/vendor/chrome-php/chrome/composer.json
index 4ff43d04e7..cd6fe65b87 100644
--- a/pandora_console/vendor/chrome-php/chrome/composer.json
+++ b/pandora_console/vendor/chrome-php/chrome/composer.json
@@ -16,8 +16,8 @@
}
],
"require": {
- "php": "^7.3 || ^8.0",
- "chrome-php/wrench": "^1.3",
+ "php": "^7.4.15 || ^8.0.2",
+ "chrome-php/wrench": "^1.5",
"evenement/evenement": "^3.0.1",
"monolog/monolog": "^1.27.1 || ^2.8 || ^3.2",
"psr/log": "^1.1 || ^2.0 || ^3.0",
@@ -26,8 +26,8 @@
"symfony/process": "^4.4 || ^5.0 || ^6.0"
},
"require-dev":{
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^9.5.23",
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^9.6.3 || ^10.0.12",
"symfony/var-dumper": "^4.4 || ^5.0 || ^6.0"
},
"autoload":{
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Browser.php b/pandora_console/vendor/chrome-php/chrome/src/Browser.php
index bdcd0ef06f..40ac010307 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Browser.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Browser.php
@@ -120,12 +120,18 @@ class Browser
*/
final public function sendCloseMessage(): void
{
+ if (!$this->connection->isConnected()) {
+ $this->connection->getLogger()->debug('process: chrome already stopped, ignoring');
+
+ return;
+ }
$r = $this->connection->sendMessageSync(new Message('Browser.close'));
if (!$r->isSuccessful()) {
// log
$this->connection->getLogger()->debug('process: ✗ could not close gracefully');
throw new \Exception('cannot close, Browser.close not supported');
}
+ $this->connection->disconnect();
}
/**
@@ -181,6 +187,23 @@ class Browser
return \array_values($this->targets);
}
+ /**
+ * Find a target matching the type and title.
+ *
+ * @param string $type
+ * @param string $title
+ */
+ public function findTarget(string $type, string $title): ?Target
+ {
+ foreach ($this->targets as $target) {
+ if ($target->getTargetInfo('type') === $type && $target->getTargetInfo('title') === $title) {
+ return $target;
+ }
+ }
+
+ return null;
+ }
+
/**
* @param string $targetId
*
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Browser/BrowserProcess.php b/pandora_console/vendor/chrome-php/chrome/src/Browser/BrowserProcess.php
index e01347f52f..0390a0ad14 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Browser/BrowserProcess.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Browser/BrowserProcess.php
@@ -294,6 +294,9 @@ class BrowserProcess implements LoggerAwareInterface
// auto debug port
'--remote-debugging-port=0',
+ // allow remote access
+ '--remote-allow-origins=*',
+
// disable undesired features
'--disable-background-networking',
'--disable-background-timer-throttling',
@@ -344,6 +347,11 @@ class BrowserProcess implements LoggerAwareInterface
$args[] = '--window-size='.\implode(',', $options['windowSize']);
}
+ if (\array_key_exists('userCrashDumpsDir', $options)) {
+ $args[] = '--enable-crash-reporter';
+ $args[] = '--crash-dumps-dir='.$options['userCrashDumpsDir'];
+ }
+
// sandbox mode - useful if you want to use chrome headless inside docker
if (\array_key_exists('noSandbox', $options) && $options['noSandbox']) {
$args[] = '--no-sandbox';
@@ -432,6 +440,9 @@ class BrowserProcess implements LoggerAwareInterface
$this->logger->debug('process: ✓ accepted output');
return $matches[1];
+ } elseif (\preg_match('/Cannot start http server for devtools\./', $output, $matches)) {
+ $process->stop();
+ throw new \RuntimeException('Devtools could not start');
} else {
// log
$this->logger->debug('process: ignoring output:'.\trim($output));
@@ -446,6 +457,7 @@ class BrowserProcess implements LoggerAwareInterface
return Utils::tryWithTimeout($timeout, $generator($process));
} catch (OperationTimedOut $e) {
+ $process->stop();
throw new \RuntimeException('Cannot start browser', 0, $e);
}
}
diff --git a/pandora_console/vendor/chrome-php/chrome/src/BrowserFactory.php b/pandora_console/vendor/chrome-php/chrome/src/BrowserFactory.php
index 8155c68831..eca06dd02d 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/BrowserFactory.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/BrowserFactory.php
@@ -44,6 +44,7 @@ class BrowserFactory
* - startupTimeout: Maximum time in seconds to wait for chrome to start (default: 30 sec)
* - userAgent: User agent to use for the whole browser
* - userDataDir: Chrome user data dir (default: a new empty dir is generated temporarily)
+ * - userCrashDumpsDir: The directory crashpad should store dumps in (crash reporter will be enabled automatically)
* - windowSize: Size of the window. ex: `[1920, 1080]` (default: none)
*/
protected $options = [];
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Communication/Connection.php b/pandora_console/vendor/chrome-php/chrome/src/Communication/Connection.php
index cbd7543382..0df5516795 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Communication/Connection.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Communication/Connection.php
@@ -267,7 +267,7 @@ class Connection extends EventEmitter implements LoggerAwareInterface
public function sendMessageSync(Message $message, int $timeout = null): Response
{
$responseReader = $this->sendMessage($message);
- $response = $responseReader->waitForResponse($timeout ?? $this->sendSyncDefaultTimeout);
+ $response = $responseReader->waitForResponse($timeout);
return $response;
}
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Communication/ResponseReader.php b/pandora_console/vendor/chrome-php/chrome/src/Communication/ResponseReader.php
index 016dbc7d1f..73426868d1 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Communication/ResponseReader.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Communication/ResponseReader.php
@@ -109,8 +109,7 @@ class ResponseReader
return $this->getResponse();
}
- // default 2000ms
- $timeout = $timeout ?? 2000;
+ $timeout = $timeout ?? $this->connection->getSendSyncDefaultTimeout();
return Utils::tryWithTimeout($timeout * 1000, $this->waitForResponseGenerator());
}
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Communication/Session.php b/pandora_console/vendor/chrome-php/chrome/src/Communication/Session.php
index 627a285239..7f7c8c95c9 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Communication/Session.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Communication/Session.php
@@ -86,7 +86,7 @@ class Session extends EventEmitter
{
$responseReader = $this->sendMessage($message);
- $response = $responseReader->waitForResponse($timeout ?? $this->getConnection()->getSendSyncDefaultTimeout());
+ $response = $responseReader->waitForResponse($timeout);
if (!$response) {
throw new NoResponseAvailable('No response was sent in the given timeout');
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Dom/Dom.php b/pandora_console/vendor/chrome-php/chrome/src/Dom/Dom.php
index 99ca137de3..c685f4df04 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Dom/Dom.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Dom/Dom.php
@@ -12,14 +12,16 @@ class Dom extends Node
public function __construct(Page $page)
{
$message = new Message('DOM.getDocument');
- $stream = $page->getSession()->sendMessage($message);
- $response = $stream->waitForResponse(1000);
+ $response = $page->getSession()->sendMessageSync($message);
$rootNodeId = $response->getResultData('root')['nodeId'];
parent::__construct($page, $rootNodeId);
}
+ /**
+ * @return Node[]
+ */
public function search(string $selector): array
{
$message = new Message('DOM.performSearch', [
diff --git a/pandora_console/vendor/chrome-php/chrome/src/Page.php b/pandora_console/vendor/chrome-php/chrome/src/Page.php
index 6a10c81b9c..191154d928 100644
--- a/pandora_console/vendor/chrome-php/chrome/src/Page.php
+++ b/pandora_console/vendor/chrome-php/chrome/src/Page.php
@@ -857,8 +857,10 @@ class Page
*
* @throws CommunicationException
*/
- public function setHtml(string $html, int $timeout = 3000): void
+ public function setHtml(string $html, int $timeout = 3000, string $eventName = self::LOAD): void
{
+ $time = \hrtime(true) / 1000 / 1000;
+
$this->getSession()->sendMessageSync(
new Message(
'Page.setDocumentContent',
@@ -866,10 +868,13 @@ class Page
'frameId' => $this->getFrameManager()->getMainFrame()->getFrameId(),
'html' => $html,
]
- )
+ ),
+ $timeout
);
- $this->waitForReload(self::LOAD, $timeout, '');
+ $timeout -= (int) \floor((\hrtime(true) / 1000 / 1000) - $time);
+
+ $this->waitForReload($eventName, \max(0, $timeout), '');
}
/**
diff --git a/pandora_console/vendor/chrome-php/wrench/composer.json b/pandora_console/vendor/chrome-php/wrench/composer.json
index cff2fb1d36..14a1b2edc0 100644
--- a/pandora_console/vendor/chrome-php/wrench/composer.json
+++ b/pandora_console/vendor/chrome-php/wrench/composer.json
@@ -11,14 +11,14 @@
}
],
"require": {
- "php": "^7.3 || ^8.0",
+ "php": "^7.4.15 || ^8.0.2",
"ext-sockets": "*",
"psr/log": "^1.1 || ^2.0 || ^3.0",
"symfony/polyfill-php80": "^1.26"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^9.5.23"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^9.6.3 || ^10.0.12"
},
"autoload": {
"psr-4": {
diff --git a/pandora_console/vendor/chrome-php/wrench/src/Protocol/Protocol.php b/pandora_console/vendor/chrome-php/wrench/src/Protocol/Protocol.php
index bfc71113c6..5aa846b2da 100644
--- a/pandora_console/vendor/chrome-php/wrench/src/Protocol/Protocol.php
+++ b/pandora_console/vendor/chrome-php/wrench/src/Protocol/Protocol.php
@@ -187,14 +187,7 @@ abstract class Protocol
*/
public function generateKey(): string
{
- if (\extension_loaded('openssl')) {
- $key = \openssl_random_pseudo_bytes(16);
- } else {
- // SHA1 is 128 bit (= 16 bytes)
- $key = \sha1(\spl_object_hash($this).\mt_rand(0, \PHP_INT_MAX).\uniqid('', true), true);
- }
-
- return \base64_encode($key);
+ return \base64_encode(\random_bytes(16));
}
/**
@@ -382,7 +375,7 @@ abstract class Protocol
*
* @return string[]
*/
- protected function getSuccessResponseHeaders($key)
+ protected function getSuccessResponseHeaders(string $key): array
{
return [
self::HEADER_UPGRADE => self::UPGRADE_VALUE,
@@ -398,13 +391,13 @@ abstract class Protocol
*
* @see https://datatracker.ietf.org/doc/html/rfc6455#section-4.2.2
*
- * @param string $encoded_key
+ * @param string $key
*
* @return string
*/
- protected function getAcceptValue($encoded_key)
+ protected function getAcceptValue(string $key): string
{
- return \base64_encode(\sha1($encoded_key.self::MAGIC_GUID, true));
+ return \base64_encode(\sha1($key.self::MAGIC_GUID, true));
}
/**
@@ -437,7 +430,7 @@ abstract class Protocol
*
* @return string
*/
- public function getResponseError($e, array $headers = [])
+ public function getResponseError($e, array $headers = []): string
{
$code = false;
@@ -463,24 +456,37 @@ abstract class Protocol
return false;
}
- $headers = $this->getHeaders($response);
+ $statusCode = $this->getStatusCode($response);
- if (!isset($headers[self::HEADER_ACCEPT])) {
- throw new HandshakeException('No accept header receieved on handshake response');
+ if (self::HTTP_SWITCHING_PROTOCOLS !== $statusCode) {
+ $errorMessage = \explode("\n", \trim($this->getBody($response)), 2)[0];
+
+ throw new HandshakeException(\trim(\sprintf('Expected handshake response status code %d, but received %d. %s', self::HTTP_SWITCHING_PROTOCOLS, $statusCode, $errorMessage)));
}
- $accept = $headers[self::HEADER_ACCEPT];
+ $acceptHeaderValue = $this->getHeaders($response)[self::HEADER_ACCEPT] ?? '';
- if (!$accept) {
- throw new HandshakeException('Invalid accept header');
+ if ('' === $acceptHeaderValue) {
+ throw new HandshakeException('No accept header received on handshake response');
}
- $expected = $this->getAcceptValue($key);
+ return $this->getEncodedHash($key) === $acceptHeaderValue;
+ }
- \preg_match('#Sec-WebSocket-Accept:\s(.*)$#imU', $response, $matches);
- $keyAccept = \trim($matches[1]);
+ /**
+ * Gets the status code from a full response.
+ *
+ * If there is no status line, we return 0.
+ *
+ * @return int
+ */
+ protected function getStatusCode(string $response): int
+ {
+ [$statusLine] = \explode("\r\n", $response, 2);
- return $keyAccept === $this->getEncodedHash($key);
+ [$protocol, $statusCode] = \explode(' ', $response, 2);
+
+ return (int) $statusCode;
}
/**
@@ -488,7 +494,7 @@ abstract class Protocol
*
* @return array
*/
- protected function getHeaders(string $response)
+ protected function getHeaders(string $response): array
{
$parts = \explode("\r\n\r\n", $response, 2);
@@ -500,16 +506,16 @@ abstract class Protocol
$return = [];
foreach (\explode("\r\n", $headers) as $header) {
- $parts = \explode(': ', $header, 2);
+ $parts = \explode(':', $header, 2);
if (2 == \count($parts)) {
[$name, $value] = $parts;
if (!isset($return[$name])) {
- $return[$name] = $value;
+ $return[$name] = \trim($value);
} else {
if (\is_array($return[$name])) {
- $return[$name][] = $value;
+ $return[$name][] = \trim($value);
} else {
- $return[$name] = [$return[$name], $value];
+ $return[$name] = [$return[$name], \trim($value)];
}
}
}
@@ -518,6 +524,16 @@ abstract class Protocol
return \array_change_key_case($return);
}
+ /**
+ * Gets the body from a full response.
+ *
+ * @return string
+ */
+ protected function getBody(string $response): string
+ {
+ return \explode("\r\n\r\n", $response, 2)[1] ?? '';
+ }
+
/**
* Gets an encoded hash for a key.
*
@@ -525,7 +541,7 @@ abstract class Protocol
*
* @return string
*/
- public function getEncodedHash($key)
+ public function getEncodedHash(string $key): string
{
return \base64_encode(\pack('H*', \sha1($key.self::MAGIC_GUID)));
}
@@ -629,7 +645,7 @@ abstract class Protocol
*
* @throws InvalidArgumentException
*/
- protected function getRequestHeaders(string $response)
+ protected function getRequestHeaders(string $response): array
{
$eol = \stripos($response, "\r\n");
diff --git a/pandora_console/vendor/chrome-php/wrench/vendor-bin/phpstan/composer.json b/pandora_console/vendor/chrome-php/wrench/vendor-bin/phpstan/composer.json
index 9da3299ab4..e54046367a 100644
--- a/pandora_console/vendor/chrome-php/wrench/vendor-bin/phpstan/composer.json
+++ b/pandora_console/vendor/chrome-php/wrench/vendor-bin/phpstan/composer.json
@@ -1,7 +1,7 @@
{
"require": {
"php": "^7.4",
- "phpstan/phpstan": "1.8.2"
+ "phpstan/phpstan": "1.10.3"
},
"config": {
"preferred-install": "dist"
diff --git a/pandora_console/vendor/composer/ClassLoader.php b/pandora_console/vendor/composer/ClassLoader.php
index afef3fa2ad..a72151c77c 100644
--- a/pandora_console/vendor/composer/ClassLoader.php
+++ b/pandora_console/vendor/composer/ClassLoader.php
@@ -42,6 +42,9 @@ namespace Composer\Autoload;
*/
class ClassLoader
{
+ /** @var \Closure(string):void */
+ private static $includeFile;
+
/** @var ?string */
private $vendorDir;
@@ -106,6 +109,7 @@ class ClassLoader
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
+ self::initializeIncludeClosure();
}
/**
@@ -425,7 +429,8 @@ class ClassLoader
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
- includeFile($file);
+ $includeFile = self::$includeFile;
+ $includeFile($file);
return true;
}
@@ -555,18 +560,26 @@ class ClassLoader
return false;
}
-}
-/**
- * Scope isolated include.
- *
- * Prevents access to $this/self from included files.
- *
- * @param string $file
- * @return void
- * @private
- */
-function includeFile($file)
-{
- include $file;
+ /**
+ * @return void
+ */
+ private static function initializeIncludeClosure()
+ {
+ if (self::$includeFile !== null) {
+ return;
+ }
+
+ /**
+ * Scope isolated include.
+ *
+ * Prevents access to $this/self from included files.
+ *
+ * @param string $file
+ * @return void
+ */
+ self::$includeFile = \Closure::bind(static function($file) {
+ include $file;
+ }, null, null);
+ }
}
diff --git a/pandora_console/vendor/composer/InstalledVersions.php b/pandora_console/vendor/composer/InstalledVersions.php
index d85e22a1c6..c6b54af7ba 100644
--- a/pandora_console/vendor/composer/InstalledVersions.php
+++ b/pandora_console/vendor/composer/InstalledVersions.php
@@ -266,7 +266,7 @@ class InstalledVersions
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C' && is_file(__DIR__ . '/installed.php')) {
+ if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
@@ -339,7 +339,7 @@ class InstalledVersions
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
- if (substr(__DIR__, -8, 1) !== 'C' && is_file(__DIR__ . '/installed.php')) {
+ if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = require __DIR__ . '/installed.php';
} else {
self::$installed = array();
diff --git a/pandora_console/vendor/composer/LICENSE b/pandora_console/vendor/composer/LICENSE
index 62ecfd8d00..f27399a042 100644
--- a/pandora_console/vendor/composer/LICENSE
+++ b/pandora_console/vendor/composer/LICENSE
@@ -1,3 +1,4 @@
+
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
@@ -17,3 +18,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+
diff --git a/pandora_console/vendor/composer/autoload_files.php b/pandora_console/vendor/composer/autoload_files.php
index 2110373024..85b8edda6c 100644
--- a/pandora_console/vendor/composer/autoload_files.php
+++ b/pandora_console/vendor/composer/autoload_files.php
@@ -9,21 +9,20 @@ return array(
'e8aa6e4b5a1db2f56ae794f1505391a8' => $vendorDir . '/amphp/amp/lib/functions.php',
'76cd0796156622033397994f25b0d8fc' => $vendorDir . '/amphp/amp/lib/Internal/functions.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php',
- 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => $vendorDir . '/amphp/byte-stream/lib/functions.php',
'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => $vendorDir . '/symfony/polyfill-php72/bootstrap.php',
+ '3da389f428d8ee50333e4391c3f45046' => $vendorDir . '/amphp/serialization/src/functions.php',
'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php',
'8dc56fe697ca93c4b40d876df1c94584' => $vendorDir . '/amphp/process/lib/functions.php',
- '3da389f428d8ee50333e4391c3f45046' => $vendorDir . '/amphp/serialization/src/functions.php',
'bcb7d4fc55f4b1a7e10f5806723e9892' => $vendorDir . '/amphp/sync/src/functions.php',
'e187e371b30897d6dc51cac6a8c94ff6' => $vendorDir . '/amphp/sync/src/ConcurrentIterator/functions.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => $vendorDir . '/symfony/polyfill-ctype/bootstrap.php',
+ 'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'430de19db8b7ee88fdbe5c545d82d33d' => $vendorDir . '/amphp/parallel/lib/Context/functions.php',
'888e1afeed2e8d13ef5a662692091e6e' => $vendorDir . '/amphp/parallel/lib/Sync/functions.php',
'384cf4f2eb4d2f896db72315a76066ad' => $vendorDir . '/amphp/parallel/lib/Worker/functions.php',
'6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
- '538ca81a9a966a6716601ecf48f4eaef' => $vendorDir . '/opis/closure/functions.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => $vendorDir . '/symfony/polyfill-iconv/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php',
'861372841bb4b8ba9fdd215894666f40' => $vendorDir . '/amphp/parallel-functions/src/functions.php',
diff --git a/pandora_console/vendor/composer/autoload_psr4.php b/pandora_console/vendor/composer/autoload_psr4.php
index 36310835f9..b7a94d7723 100644
--- a/pandora_console/vendor/composer/autoload_psr4.php
+++ b/pandora_console/vendor/composer/autoload_psr4.php
@@ -10,7 +10,7 @@ return array(
'Wrench\\' => array($vendorDir . '/chrome-php/wrench/src'),
'UpdateManager\\' => array($baseDir . '/update_manager_client/lib/UpdateManager'),
'Tests\\' => array($baseDir . '/tests'),
- 'Test\\' => array($vendorDir . '/halfpastfouram/collection/test', $vendorDir . '/artica/phpchartjs/test'),
+ 'Test\\' => array($vendorDir . '/artica/phpchartjs/test', $vendorDir . '/halfpastfouram/collection/test'),
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'),
'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'),
@@ -22,24 +22,27 @@ return array(
'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'),
'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/src'),
+ 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
'PandoraFMS\\Enterprise\\' => array($baseDir . '/enterprise/include/lib'),
'PandoraFMS\\' => array($baseDir . '/include/lib'),
- 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'),
'Mpdf\\' => array($vendorDir . '/mpdf/mpdf/src'),
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
'Models\\' => array($baseDir . '/include/rest-api/models'),
+ 'Laravel\\SerializableClosure\\' => array($vendorDir . '/laravel/serializable-closure/src'),
'Laminas\\Json\\' => array($vendorDir . '/laminas/laminas-json/src'),
+ 'Http\\Message\\' => array($vendorDir . '/php-http/message-factory/src'),
'HeadlessChromium\\' => array($vendorDir . '/chrome-php/chrome/src'),
'Halfpastfour\\Collection\\' => array($vendorDir . '/halfpastfouram/collection/src'),
'Enterprise\\Models\\' => array($baseDir . '/enterprise/include/rest-api/models'),
'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/src'),
- 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib/Doctrine/Common/Lexer'),
+ 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations'),
+ 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'),
'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'),
'Artica\\PHPChartJS\\' => array($vendorDir . '/artica/phpchartjs/src'),
'Amp\\Sync\\' => array($vendorDir . '/amphp/sync/src'),
'Amp\\Serialization\\' => array($vendorDir . '/amphp/serialization/src'),
'Amp\\Process\\' => array($vendorDir . '/amphp/process/lib'),
- 'Amp\\Parser\\' => array($vendorDir . '/amphp/parser/lib'),
+ 'Amp\\Parser\\' => array($vendorDir . '/amphp/parser/src'),
'Amp\\Parallel\\' => array($vendorDir . '/amphp/parallel/lib'),
'Amp\\ParallelFunctions\\' => array($vendorDir . '/amphp/parallel-functions/src'),
'Amp\\ByteStream\\' => array($vendorDir . '/amphp/byte-stream/lib'),
diff --git a/pandora_console/vendor/composer/autoload_real.php b/pandora_console/vendor/composer/autoload_real.php
index ee29aecfcb..12944ee0da 100644
--- a/pandora_console/vendor/composer/autoload_real.php
+++ b/pandora_console/vendor/composer/autoload_real.php
@@ -33,25 +33,18 @@ class ComposerAutoloaderInit94a17e624d873685991e8ae888e00eb9
$loader->register(true);
- $includeFiles = \Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::$files;
- foreach ($includeFiles as $fileIdentifier => $file) {
- composerRequire94a17e624d873685991e8ae888e00eb9($fileIdentifier, $file);
+ $filesToLoad = \Composer\Autoload\ComposerStaticInit94a17e624d873685991e8ae888e00eb9::$files;
+ $requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
+
+ require $file;
+ }
+ }, null, null);
+ foreach ($filesToLoad as $fileIdentifier => $file) {
+ $requireFile($fileIdentifier, $file);
}
return $loader;
}
}
-
-/**
- * @param string $fileIdentifier
- * @param string $file
- * @return void
- */
-function composerRequire94a17e624d873685991e8ae888e00eb9($fileIdentifier, $file)
-{
- if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
- $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
-
- require $file;
- }
-}
diff --git a/pandora_console/vendor/composer/autoload_static.php b/pandora_console/vendor/composer/autoload_static.php
index 89cd66cc95..9fd3f04237 100644
--- a/pandora_console/vendor/composer/autoload_static.php
+++ b/pandora_console/vendor/composer/autoload_static.php
@@ -10,21 +10,20 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
'e8aa6e4b5a1db2f56ae794f1505391a8' => __DIR__ . '/..' . '/amphp/amp/lib/functions.php',
'76cd0796156622033397994f25b0d8fc' => __DIR__ . '/..' . '/amphp/amp/lib/Internal/functions.php',
'0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php',
- 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'6cd5651c4fef5ed6b63e8d8b8ffbf3cc' => __DIR__ . '/..' . '/amphp/byte-stream/lib/functions.php',
'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php',
'25072dd6e2470089de65ae7bf11d3109' => __DIR__ . '/..' . '/symfony/polyfill-php72/bootstrap.php',
+ '3da389f428d8ee50333e4391c3f45046' => __DIR__ . '/..' . '/amphp/serialization/src/functions.php',
'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php',
'8dc56fe697ca93c4b40d876df1c94584' => __DIR__ . '/..' . '/amphp/process/lib/functions.php',
- '3da389f428d8ee50333e4391c3f45046' => __DIR__ . '/..' . '/amphp/serialization/src/functions.php',
'bcb7d4fc55f4b1a7e10f5806723e9892' => __DIR__ . '/..' . '/amphp/sync/src/functions.php',
'e187e371b30897d6dc51cac6a8c94ff6' => __DIR__ . '/..' . '/amphp/sync/src/ConcurrentIterator/functions.php',
'320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
+ 'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'430de19db8b7ee88fdbe5c545d82d33d' => __DIR__ . '/..' . '/amphp/parallel/lib/Context/functions.php',
'888e1afeed2e8d13ef5a662692091e6e' => __DIR__ . '/..' . '/amphp/parallel/lib/Sync/functions.php',
'384cf4f2eb4d2f896db72315a76066ad' => __DIR__ . '/..' . '/amphp/parallel/lib/Worker/functions.php',
'6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php',
- '538ca81a9a966a6716601ecf48f4eaef' => __DIR__ . '/..' . '/opis/closure/functions.php',
'def43f6c87e4f8dfd0c9e1b1bab14fe8' => __DIR__ . '/..' . '/symfony/polyfill-iconv/bootstrap.php',
'667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php',
'861372841bb4b8ba9fdd215894666f40' => __DIR__ . '/..' . '/amphp/parallel-functions/src/functions.php',
@@ -66,13 +65,10 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
'P' =>
array (
'Psr\\Log\\' => 8,
+ 'Psr\\Http\\Message\\' => 17,
'PandoraFMS\\Enterprise\\' => 22,
'PandoraFMS\\' => 11,
),
- 'O' =>
- array (
- 'Opis\\Closure\\' => 13,
- ),
'M' =>
array (
'Mpdf\\' => 5,
@@ -81,10 +77,12 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
),
'L' =>
array (
+ 'Laravel\\SerializableClosure\\' => 28,
'Laminas\\Json\\' => 13,
),
'H' =>
array (
+ 'Http\\Message\\' => 13,
'HeadlessChromium\\' => 17,
'Halfpastfour\\Collection\\' => 24,
),
@@ -95,6 +93,7 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
),
'D' =>
array (
+ 'Doctrine\\Deprecations\\' => 22,
'Doctrine\\Common\\Lexer\\' => 22,
'DeepCopy\\' => 9,
),
@@ -131,8 +130,8 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
),
'Test\\' =>
array (
- 0 => __DIR__ . '/..' . '/halfpastfouram/collection/test',
- 1 => __DIR__ . '/..' . '/artica/phpchartjs/test',
+ 0 => __DIR__ . '/..' . '/artica/phpchartjs/test',
+ 1 => __DIR__ . '/..' . '/halfpastfouram/collection/test',
),
'Symfony\\Polyfill\\Php80\\' =>
array (
@@ -178,6 +177,10 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
array (
0 => __DIR__ . '/..' . '/psr/log/src',
),
+ 'Psr\\Http\\Message\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/psr/http-message/src',
+ ),
'PandoraFMS\\Enterprise\\' =>
array (
0 => __DIR__ . '/../..' . '/enterprise/include/lib',
@@ -186,10 +189,6 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
array (
0 => __DIR__ . '/../..' . '/include/lib',
),
- 'Opis\\Closure\\' =>
- array (
- 0 => __DIR__ . '/..' . '/opis/closure/src',
- ),
'Mpdf\\' =>
array (
0 => __DIR__ . '/..' . '/mpdf/mpdf/src',
@@ -202,10 +201,18 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
array (
0 => __DIR__ . '/../..' . '/include/rest-api/models',
),
+ 'Laravel\\SerializableClosure\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/laravel/serializable-closure/src',
+ ),
'Laminas\\Json\\' =>
array (
0 => __DIR__ . '/..' . '/laminas/laminas-json/src',
),
+ 'Http\\Message\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/php-http/message-factory/src',
+ ),
'HeadlessChromium\\' =>
array (
0 => __DIR__ . '/..' . '/chrome-php/chrome/src',
@@ -222,9 +229,13 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
array (
0 => __DIR__ . '/..' . '/egulias/email-validator/src',
),
+ 'Doctrine\\Deprecations\\' =>
+ array (
+ 0 => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations',
+ ),
'Doctrine\\Common\\Lexer\\' =>
array (
- 0 => __DIR__ . '/..' . '/doctrine/lexer/lib/Doctrine/Common/Lexer',
+ 0 => __DIR__ . '/..' . '/doctrine/lexer/src',
),
'DeepCopy\\' =>
array (
@@ -248,7 +259,7 @@ class ComposerStaticInit94a17e624d873685991e8ae888e00eb9
),
'Amp\\Parser\\' =>
array (
- 0 => __DIR__ . '/..' . '/amphp/parser/lib',
+ 0 => __DIR__ . '/..' . '/amphp/parser/src',
),
'Amp\\Parallel\\' =>
array (
diff --git a/pandora_console/vendor/composer/installed.json b/pandora_console/vendor/composer/installed.json
index eee21cb847..1022a9f68b 100644
--- a/pandora_console/vendor/composer/installed.json
+++ b/pandora_console/vendor/composer/installed.json
@@ -174,17 +174,17 @@
},
{
"name": "amphp/parallel",
- "version": "v1.4.1",
- "version_normalized": "1.4.1.0",
+ "version": "v1.4.3",
+ "version_normalized": "1.4.3.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/parallel.git",
- "reference": "fbc128383c1ffb3823866f71b88d8c4722a25ce9"
+ "reference": "3aac213ba7858566fd83d38ccb85b91b2d652cb0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parallel/zipball/fbc128383c1ffb3823866f71b88d8c4722a25ce9",
- "reference": "fbc128383c1ffb3823866f71b88d8c4722a25ce9",
+ "url": "https://api.github.com/repos/amphp/parallel/zipball/3aac213ba7858566fd83d38ccb85b91b2d652cb0",
+ "reference": "3aac213ba7858566fd83d38ccb85b91b2d652cb0",
"shasum": ""
},
"require": {
@@ -201,7 +201,7 @@
"amphp/phpunit-util": "^1.1",
"phpunit/phpunit": "^8 || ^7"
},
- "time": "2021-10-25T19:16:02+00:00",
+ "time": "2023-03-23T08:04:23+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -239,7 +239,7 @@
],
"support": {
"issues": "https://github.com/amphp/parallel/issues",
- "source": "https://github.com/amphp/parallel/tree/v1.4.1"
+ "source": "https://github.com/amphp/parallel/tree/v1.4.3"
},
"funding": [
{
@@ -251,31 +251,32 @@
},
{
"name": "amphp/parallel-functions",
- "version": "v1.0.0",
- "version_normalized": "1.0.0.0",
+ "version": "v1.1.0",
+ "version_normalized": "1.1.0.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/parallel-functions.git",
- "reference": "af9795d51abfafc3676cbe7e17965479491abaad"
+ "reference": "04e92fcacfc921a56dfe12c23b3265e62593a7cb"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/af9795d51abfafc3676cbe7e17965479491abaad",
- "reference": "af9795d51abfafc3676cbe7e17965479491abaad",
+ "url": "https://api.github.com/repos/amphp/parallel-functions/zipball/04e92fcacfc921a56dfe12c23b3265e62593a7cb",
+ "reference": "04e92fcacfc921a56dfe12c23b3265e62593a7cb",
"shasum": ""
},
"require": {
"amphp/amp": "^2.0.3",
- "amphp/parallel": "^1.1",
- "opis/closure": "^3.0.7",
- "php": ">=7"
+ "amphp/parallel": "^1.4",
+ "amphp/serialization": "^1.0",
+ "laravel/serializable-closure": "^1.0",
+ "php": ">=7.4"
},
"require-dev": {
- "amphp/phpunit-util": "^1.0",
- "friendsofphp/php-cs-fixer": "^2.9",
- "phpunit/phpunit": "^6.5"
+ "amphp/php-cs-fixer-config": "v2.x-dev",
+ "amphp/phpunit-util": "^2.0",
+ "phpunit/phpunit": "^9.5.11"
},
- "time": "2020-07-10T17:05:35+00:00",
+ "time": "2022-02-03T19:32:41+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -299,7 +300,7 @@
"description": "Parallel processing made simple.",
"support": {
"issues": "https://github.com/amphp/parallel-functions/issues",
- "source": "https://github.com/amphp/parallel-functions/tree/master"
+ "source": "https://github.com/amphp/parallel-functions/tree/v1.1.0"
},
"funding": [
{
@@ -311,32 +312,33 @@
},
{
"name": "amphp/parser",
- "version": "v1.0.0",
- "version_normalized": "1.0.0.0",
+ "version": "v1.1.0",
+ "version_normalized": "1.1.0.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/parser.git",
- "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1"
+ "reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/parser/zipball/f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
- "reference": "f83e68f03d5b8e8e0365b8792985a7f341c57ae1",
+ "url": "https://api.github.com/repos/amphp/parser/zipball/ff1de4144726c5dad5fab97f66692ebe8de3e151",
+ "reference": "ff1de4144726c5dad5fab97f66692ebe8de3e151",
"shasum": ""
},
"require": {
- "php": ">=7"
+ "php": ">=7.4"
},
"require-dev": {
- "friendsofphp/php-cs-fixer": "^2.3",
- "phpunit/phpunit": "^6"
+ "amphp/php-cs-fixer-config": "^2",
+ "phpunit/phpunit": "^9",
+ "psalm/phar": "^5.4"
},
- "time": "2017-06-06T05:29:10+00:00",
+ "time": "2022-12-30T18:08:47+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
- "Amp\\Parser\\": "lib"
+ "Amp\\Parser\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -344,13 +346,13 @@
"MIT"
],
"authors": [
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- },
{
"name": "Aaron Piotrowski",
"email": "aaron@trowski.com"
+ },
+ {
+ "name": "Niklas Keller",
+ "email": "me@kelunik.com"
}
],
"description": "A generator parser to make streaming parsers simple.",
@@ -363,23 +365,29 @@
],
"support": {
"issues": "https://github.com/amphp/parser/issues",
- "source": "https://github.com/amphp/parser/tree/is-valid"
+ "source": "https://github.com/amphp/parser/tree/v1.1.0"
},
+ "funding": [
+ {
+ "url": "https://github.com/amphp",
+ "type": "github"
+ }
+ ],
"install-path": "../amphp/parser"
},
{
"name": "amphp/process",
- "version": "v1.1.3",
- "version_normalized": "1.1.3.0",
+ "version": "v1.1.4",
+ "version_normalized": "1.1.4.0",
"source": {
"type": "git",
"url": "https://github.com/amphp/process.git",
- "reference": "f09e3ed3b0a953ccbfff1140f12be4a884f0aa83"
+ "reference": "76e9495fd6818b43a20167cb11d8a67f7744ee0f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/amphp/process/zipball/f09e3ed3b0a953ccbfff1140f12be4a884f0aa83",
- "reference": "f09e3ed3b0a953ccbfff1140f12be4a884f0aa83",
+ "url": "https://api.github.com/repos/amphp/process/zipball/76e9495fd6818b43a20167cb11d8a67f7744ee0f",
+ "reference": "76e9495fd6818b43a20167cb11d8a67f7744ee0f",
"shasum": ""
},
"require": {
@@ -392,7 +400,7 @@
"amphp/phpunit-util": "^1",
"phpunit/phpunit": "^6"
},
- "time": "2021-12-17T19:09:33+00:00",
+ "time": "2022-07-06T23:50:12+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -425,7 +433,7 @@
"homepage": "https://github.com/amphp/process",
"support": {
"issues": "https://github.com/amphp/process/issues",
- "source": "https://github.com/amphp/process/tree/v1.1.3"
+ "source": "https://github.com/amphp/process/tree/v1.1.4"
},
"funding": [
{
@@ -574,7 +582,7 @@
"dist": {
"type": "path",
"url": "../../../phpchartjs",
- "reference": "4957e7cd699e50cee8e0ba7304e1423aafb2cad2"
+ "reference": "681980c084ad505f9dc811d3d1f02ffc9442ccee"
},
"require": {
"ext-dom": "*",
@@ -635,35 +643,35 @@
},
{
"name": "chrome-php/chrome",
- "version": "v1.7.1",
- "version_normalized": "1.7.1.0",
+ "version": "v1.8.1",
+ "version_normalized": "1.8.1.0",
"source": {
"type": "git",
"url": "https://github.com/chrome-php/chrome.git",
- "reference": "5783c749b2ee385d1c481b0906f1b8acef0296e4"
+ "reference": "9146c37c14d99cff3e4d9cd2f5ba843d149b3cbc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chrome-php/chrome/zipball/5783c749b2ee385d1c481b0906f1b8acef0296e4",
- "reference": "5783c749b2ee385d1c481b0906f1b8acef0296e4",
+ "url": "https://api.github.com/repos/chrome-php/chrome/zipball/9146c37c14d99cff3e4d9cd2f5ba843d149b3cbc",
+ "reference": "9146c37c14d99cff3e4d9cd2f5ba843d149b3cbc",
"shasum": ""
},
"require": {
- "chrome-php/wrench": "^1.3",
+ "chrome-php/wrench": "^1.5",
"evenement/evenement": "^3.0.1",
"monolog/monolog": "^1.27.1 || ^2.8 || ^3.2",
- "php": "^7.3 || ^8.0",
+ "php": "^7.4.15 || ^8.0.2",
"psr/log": "^1.1 || ^2.0 || ^3.0",
"symfony/filesystem": "^4.4 || ^5.0 || ^6.0",
"symfony/polyfill-mbstring": "^1.26",
"symfony/process": "^4.4 || ^5.0 || ^6.0"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^9.5.23",
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^9.6.3 || ^10.0.12",
"symfony/var-dumper": "^4.4 || ^5.0 || ^6.0"
},
- "time": "2022-09-04T21:11:00+00:00",
+ "time": "2023-03-11T18:20:57+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
@@ -706,28 +714,28 @@
],
"support": {
"issues": "https://github.com/chrome-php/chrome/issues",
- "source": "https://github.com/chrome-php/chrome/tree/v1.7.1"
+ "source": "https://github.com/chrome-php/chrome/tree/v1.8.1"
},
"install-path": "../chrome-php/chrome"
},
{
"name": "chrome-php/wrench",
- "version": "v1.3.0",
- "version_normalized": "1.3.0.0",
+ "version": "v1.5.0",
+ "version_normalized": "1.5.0.0",
"source": {
"type": "git",
"url": "https://github.com/chrome-php/wrench.git",
- "reference": "68b8282d5d0d54a519c3212ee3e4c35bef40b7d9"
+ "reference": "725246324339e5fd5d798361b561e81004324f96"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/chrome-php/wrench/zipball/68b8282d5d0d54a519c3212ee3e4c35bef40b7d9",
- "reference": "68b8282d5d0d54a519c3212ee3e4c35bef40b7d9",
+ "url": "https://api.github.com/repos/chrome-php/wrench/zipball/725246324339e5fd5d798361b561e81004324f96",
+ "reference": "725246324339e5fd5d798361b561e81004324f96",
"shasum": ""
},
"require": {
"ext-sockets": "*",
- "php": "^7.3 || ^8.0",
+ "php": "^7.4.15 || ^8.0.2",
"psr/log": "^1.1 || ^2.0 || ^3.0",
"symfony/polyfill-php80": "^1.26"
},
@@ -735,10 +743,10 @@
"wrench/wrench": "*"
},
"require-dev": {
- "bamarni/composer-bin-plugin": "^1.8.1",
- "phpunit/phpunit": "^9.5.23"
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^9.6.3 || ^10.0.12"
},
- "time": "2022-08-28T11:42:16+00:00",
+ "time": "2023-03-11T18:12:56+00:00",
"type": "library",
"extra": {
"bamarni-bin": {
@@ -771,40 +779,88 @@
],
"support": {
"issues": "https://github.com/chrome-php/wrench/issues",
- "source": "https://github.com/chrome-php/wrench/tree/v1.3.0"
+ "source": "https://github.com/chrome-php/wrench/tree/v1.5.0"
},
"install-path": "../chrome-php/wrench"
},
{
- "name": "doctrine/lexer",
- "version": "1.2.2",
- "version_normalized": "1.2.2.0",
+ "name": "doctrine/deprecations",
+ "version": "v1.0.0",
+ "version_normalized": "1.0.0.0",
"source": {
"type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c"
+ "url": "https://github.com/doctrine/deprecations.git",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
- "reference": "9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c",
+ "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
+ "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de",
"shasum": ""
},
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.1|^8.0"
},
"require-dev": {
- "doctrine/coding-standard": "^9.0",
- "phpstan/phpstan": "1.3",
- "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.11"
+ "doctrine/coding-standard": "^9",
+ "phpunit/phpunit": "^7.5|^8.5|^9.5",
+ "psr/log": "^1|^2|^3"
},
- "time": "2022-01-12T08:27:12+00:00",
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "time": "2022-05-02T15:47:09+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
"psr-4": {
- "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
+ "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "support": {
+ "issues": "https://github.com/doctrine/deprecations/issues",
+ "source": "https://github.com/doctrine/deprecations/tree/v1.0.0"
+ },
+ "install-path": "../doctrine/deprecations"
+ },
+ {
+ "name": "doctrine/lexer",
+ "version": "2.1.0",
+ "version_normalized": "2.1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/doctrine/lexer.git",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
+ "shasum": ""
+ },
+ "require": {
+ "doctrine/deprecations": "^1.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "^1.3",
+ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.0"
+ },
+ "time": "2022-12-14T08:49:07+00:00",
+ "type": "library",
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -836,7 +892,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/1.2.2"
+ "source": "https://github.com/doctrine/lexer/tree/2.1.0"
},
"funding": [
{
@@ -856,33 +912,32 @@
},
{
"name": "egulias/email-validator",
- "version": "3.1.2",
- "version_normalized": "3.1.2.0",
+ "version": "3.2.5",
+ "version_normalized": "3.2.5.0",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "ee0db30118f661fb166bcffbf5d82032df484697"
+ "reference": "b531a2311709443320c786feb4519cfaf94af796"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ee0db30118f661fb166bcffbf5d82032df484697",
- "reference": "ee0db30118f661fb166bcffbf5d82032df484697",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b531a2311709443320c786feb4519cfaf94af796",
+ "reference": "b531a2311709443320c786feb4519cfaf94af796",
"shasum": ""
},
"require": {
- "doctrine/lexer": "^1.2",
+ "doctrine/lexer": "^1.2|^2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
},
- "time": "2021-10-11T09:18:27+00:00",
+ "time": "2023-01-02T17:26:14+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -915,7 +970,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
- "source": "https://github.com/egulias/EmailValidator/tree/3.1.2"
+ "source": "https://github.com/egulias/EmailValidator/tree/3.2.5"
},
"funding": [
{
@@ -1092,18 +1147,81 @@
"install-path": "../laminas/laminas-json"
},
{
- "name": "monolog/monolog",
- "version": "2.8.0",
- "version_normalized": "2.8.0.0",
+ "name": "laravel/serializable-closure",
+ "version": "v1.3.0",
+ "version_normalized": "1.3.0.0",
"source": {
"type": "git",
- "url": "https://github.com/Seldaek/monolog.git",
- "reference": "720488632c590286b88b80e62aa3d3d551ad4a50"
+ "url": "https://github.com/laravel/serializable-closure.git",
+ "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50",
- "reference": "720488632c590286b88b80e62aa3d3d551ad4a50",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
+ "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "nesbot/carbon": "^2.61",
+ "pestphp/pest": "^1.21.3",
+ "phpstan/phpstan": "^1.8.2",
+ "symfony/var-dumper": "^5.4.11"
+ },
+ "time": "2023-01-30T18:31:20+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": [
+ "closure",
+ "laravel",
+ "serializable"
+ ],
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "install-path": "../laravel/serializable-closure"
+ },
+ {
+ "name": "monolog/monolog",
+ "version": "2.9.1",
+ "version_normalized": "2.9.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Seldaek/monolog.git",
+ "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
+ "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1",
"shasum": ""
},
"require": {
@@ -1118,7 +1236,7 @@
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
"ext-json": "*",
- "graylog2/gelf-php": "^1.4.2",
+ "graylog2/gelf-php": "^1.4.2 || ^2@dev",
"guzzlehttp/guzzle": "^7.4",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
@@ -1149,7 +1267,7 @@
"rollbar/rollbar": "Allow sending log messages to Rollbar",
"ruflin/elastica": "Allow sending log messages to an Elastic Search server"
},
- "time": "2022-07-24T11:55:47+00:00",
+ "time": "2023-02-06T13:44:46+00:00",
"type": "library",
"extra": {
"branch-alias": {
@@ -1182,7 +1300,7 @@
],
"support": {
"issues": "https://github.com/Seldaek/monolog/issues",
- "source": "https://github.com/Seldaek/monolog/tree/2.8.0"
+ "source": "https://github.com/Seldaek/monolog/tree/2.9.1"
},
"funding": [
{
@@ -1198,17 +1316,17 @@
},
{
"name": "mpdf/mpdf",
- "version": "v8.0.15",
- "version_normalized": "8.0.15.0",
+ "version": "v8.1.5",
+ "version_normalized": "8.1.5.0",
"source": {
"type": "git",
"url": "https://github.com/mpdf/mpdf.git",
- "reference": "d8a5294a6cc2e814c4157aecc8d7ac25014b18ed"
+ "reference": "c264ce27af0d794ecd04e201b7e37a06b8a9d720"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mpdf/mpdf/zipball/d8a5294a6cc2e814c4157aecc8d7ac25014b18ed",
- "reference": "d8a5294a6cc2e814c4157aecc8d7ac25014b18ed",
+ "url": "https://api.github.com/repos/mpdf/mpdf/zipball/c264ce27af0d794ecd04e201b7e37a06b8a9d720",
+ "reference": "c264ce27af0d794ecd04e201b7e37a06b8a9d720",
"shasum": ""
},
"require": {
@@ -1216,7 +1334,9 @@
"ext-mbstring": "*",
"myclabs/deep-copy": "^1.7",
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
- "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0",
+ "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0",
+ "php-http/message-factory": "^1.0",
+ "psr/http-message": "^1.0",
"psr/log": "^1.0 || ^2.0",
"setasign/fpdi": "^2.1"
},
@@ -1224,7 +1344,7 @@
"mockery/mockery": "^1.3.0",
"mpdf/qrcode": "^1.1.0",
"squizlabs/php_codesniffer": "^3.5.0",
- "tracy/tracy": "^2.4",
+ "tracy/tracy": "~2.5",
"yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
@@ -1232,7 +1352,7 @@
"ext-xml": "Needed mainly for SVG manipulation",
"ext-zlib": "Needed for compression of embedded resources, such as fonts"
},
- "time": "2021-11-10T08:15:22+00:00",
+ "time": "2023-04-04T15:06:48+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1276,37 +1396,41 @@
},
{
"name": "myclabs/deep-copy",
- "version": "1.10.2",
- "version_normalized": "1.10.2.0",
+ "version": "1.11.1",
+ "version_normalized": "1.11.1.0",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
+ "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c",
"shasum": ""
},
"require": {
"php": "^7.1 || ^8.0"
},
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
+ "conflict": {
+ "doctrine/collections": "<1.6.8",
+ "doctrine/common": "<2.13.3 || >=3,<3.2.2"
},
- "time": "2020-11-13T09:40:50+00:00",
+ "require-dev": {
+ "doctrine/collections": "^1.6.8",
+ "doctrine/common": "^2.13.3 || ^3.2.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13"
+ },
+ "time": "2023-03-08T13:26:56+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
"files": [
"src/DeepCopy/deep_copy.php"
- ]
+ ],
+ "psr-4": {
+ "DeepCopy\\": "src/DeepCopy/"
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1322,7 +1446,7 @@
],
"support": {
"issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
+ "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1"
},
"funding": [
{
@@ -1332,74 +1456,6 @@
],
"install-path": "../myclabs/deep-copy"
},
- {
- "name": "opis/closure",
- "version": "3.6.3",
- "version_normalized": "3.6.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/opis/closure.git",
- "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/opis/closure/zipball/3d81e4309d2a927abbe66df935f4bb60082805ad",
- "reference": "3d81e4309d2a927abbe66df935f4bb60082805ad",
- "shasum": ""
- },
- "require": {
- "php": "^5.4 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "jeremeamia/superclosure": "^2.0",
- "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
- },
- "time": "2022-01-27T09:35:39+00:00",
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.6.x-dev"
- }
- },
- "installation-source": "dist",
- "autoload": {
- "files": [
- "functions.php"
- ],
- "psr-4": {
- "Opis\\Closure\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marius Sarca",
- "email": "marius.sarca@gmail.com"
- },
- {
- "name": "Sorin Sarca",
- "email": "sarca_sorin@hotmail.com"
- }
- ],
- "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.",
- "homepage": "https://opis.io/closure",
- "keywords": [
- "anonymous functions",
- "closure",
- "function",
- "serializable",
- "serialization",
- "serialize"
- ],
- "support": {
- "issues": "https://github.com/opis/closure/issues",
- "source": "https://github.com/opis/closure/tree/3.6.3"
- },
- "install-path": "../opis/closure"
- },
{
"name": "paragonie/random_compat",
"version": "v9.99.100",
@@ -1453,6 +1509,119 @@
},
"install-path": "../paragonie/random_compat"
},
+ {
+ "name": "php-http/message-factory",
+ "version": "v1.0.2",
+ "version_normalized": "1.0.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/message-factory.git",
+ "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1",
+ "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "psr/http-message": "^1.0"
+ },
+ "time": "2015-12-19T14:08:53+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Factory interfaces for PSR-7 HTTP Message",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "stream",
+ "uri"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/message-factory/issues",
+ "source": "https://github.com/php-http/message-factory/tree/master"
+ },
+ "install-path": "../php-http/message-factory"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "1.1",
+ "version_normalized": "1.1.0.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "reference": "cb6ce4845ce34a8ad9e68117c10ee90a29919eba",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "time": "2023-04-04T09:50:52+00:00",
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.1.x-dev"
+ }
+ },
+ "installation-source": "dist",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/1.1"
+ },
+ "install-path": "../psr/http-message"
+ },
{
"name": "psr/log",
"version": "2.0.0",
@@ -1508,17 +1677,17 @@
},
{
"name": "setasign/fpdi",
- "version": "v2.3.6",
- "version_normalized": "2.3.6.0",
+ "version": "v2.3.7",
+ "version_normalized": "2.3.7.0",
"source": {
"type": "git",
"url": "https://github.com/Setasign/FPDI.git",
- "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31"
+ "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Setasign/FPDI/zipball/6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
- "reference": "6231e315f73e4f62d72b73f3d6d78ff0eed93c31",
+ "url": "https://api.github.com/repos/Setasign/FPDI/zipball/bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
+ "reference": "bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05",
"shasum": ""
},
"require": {
@@ -1538,7 +1707,7 @@
"suggest": {
"setasign/fpdf": "FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured."
},
- "time": "2021-02-11T11:37:01+00:00",
+ "time": "2023-02-09T10:38:43+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1571,7 +1740,7 @@
],
"support": {
"issues": "https://github.com/Setasign/FPDI/issues",
- "source": "https://github.com/Setasign/FPDI/tree/v2.3.6"
+ "source": "https://github.com/Setasign/FPDI/tree/v2.3.7"
},
"funding": [
{
@@ -1662,26 +1831,25 @@
},
{
"name": "symfony/filesystem",
- "version": "v5.4.13",
- "version_normalized": "5.4.13.0",
+ "version": "v6.0.19",
+ "version_normalized": "6.0.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "ac09569844a9109a5966b9438fc29113ce77cf51"
+ "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/ac09569844a9109a5966b9438fc29113ce77cf51",
- "reference": "ac09569844a9109a5966b9438fc29113ce77cf51",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
+ "reference": "3d49eec03fda1f0fc19b7349fbbe55ebc1004214",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
+ "php": ">=8.0.2",
"symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-mbstring": "~1.8",
- "symfony/polyfill-php80": "^1.16"
+ "symfony/polyfill-mbstring": "~1.8"
},
- "time": "2022-09-21T19:53:16+00:00",
+ "time": "2023-01-20T17:44:14+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -1709,7 +1877,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.4.13"
+ "source": "https://github.com/symfony/filesystem/tree/v6.0.19"
},
"funding": [
{
@@ -1814,17 +1982,17 @@
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.24.0",
- "version_normalized": "1.24.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40"
+ "reference": "927013f3aac555983a5059aada98e1907d842695"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/f1aed619e28cb077fc83fac8c4c0383578356e40",
- "reference": "f1aed619e28cb077fc83fac8c4c0383578356e40",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695",
+ "reference": "927013f3aac555983a5059aada98e1907d842695",
"shasum": ""
},
"require": {
@@ -1836,11 +2004,11 @@
"suggest": {
"ext-iconv": "For best performance"
},
- "time": "2022-01-04T09:04:05+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1849,12 +2017,12 @@
},
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Iconv\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Iconv\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1880,7 +2048,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-iconv/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0"
},
"funding": [
{
@@ -1900,17 +2068,17 @@
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.24.0",
- "version_normalized": "1.24.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44"
+ "reference": "639084e360537a19f9ee352433b84ce831f3d2da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
- "reference": "749045c69efb97c70d25d7463abba812e91f3a44",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da",
+ "reference": "639084e360537a19f9ee352433b84ce831f3d2da",
"shasum": ""
},
"require": {
@@ -1921,11 +2089,11 @@
"suggest": {
"ext-intl": "For best performance"
},
- "time": "2021-09-14T14:02:44+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -1934,12 +2102,12 @@
},
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Idn\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -1970,7 +2138,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0"
},
"funding": [
{
@@ -1990,17 +2158,17 @@
},
{
"name": "symfony/polyfill-intl-normalizer",
- "version": "v1.24.0",
- "version_normalized": "1.24.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8"
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8",
- "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6",
+ "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6",
"shasum": ""
},
"require": {
@@ -2009,11 +2177,11 @@
"suggest": {
"ext-intl": "For best performance"
},
- "time": "2021-02-19T12:13:01+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2022,12 +2190,12 @@
},
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
"files": [
"bootstrap.php"
],
+ "psr-4": {
+ "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
+ },
"classmap": [
"Resources/stubs"
]
@@ -2057,7 +2225,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0"
},
"funding": [
{
@@ -2163,27 +2331,27 @@
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.24.0",
- "version_normalized": "1.24.0.0",
+ "version": "v1.27.0",
+ "version_normalized": "1.27.0.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976"
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976",
- "reference": "9a142215a36a3888e30d0a9eeea9766764e96976",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97",
+ "reference": "869329b1e9894268a8a61dabb69153029b7a8c97",
"shasum": ""
},
"require": {
"php": ">=7.1"
},
- "time": "2021-05-27T09:17:38+00:00",
+ "time": "2022-11-03T14:55:06+00:00",
"type": "library",
"extra": {
"branch-alias": {
- "dev-main": "1.23-dev"
+ "dev-main": "1.27-dev"
},
"thanks": {
"name": "symfony/polyfill",
@@ -2192,12 +2360,12 @@
},
"installation-source": "dist",
"autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
"files": [
"bootstrap.php"
- ]
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php72\\": ""
+ }
},
"notification-url": "https://packagist.org/downloads/",
"license": [
@@ -2222,7 +2390,7 @@
"shim"
],
"support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0"
+ "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0"
},
"funding": [
{
@@ -2328,24 +2496,23 @@
},
{
"name": "symfony/process",
- "version": "v5.4.11",
- "version_normalized": "5.4.11.0",
+ "version": "v6.0.19",
+ "version_normalized": "6.0.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1"
+ "reference": "2114fd60f26a296cc403a7939ab91478475a33d4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/6e75fe6874cbc7e4773d049616ab450eff537bf1",
- "reference": "6e75fe6874cbc7e4773d049616ab450eff537bf1",
+ "url": "https://api.github.com/repos/symfony/process/zipball/2114fd60f26a296cc403a7939ab91478475a33d4",
+ "reference": "2114fd60f26a296cc403a7939ab91478475a33d4",
"shasum": ""
},
"require": {
- "php": ">=7.2.5",
- "symfony/polyfill-php80": "^1.16"
+ "php": ">=8.0.2"
},
- "time": "2022-06-27T16:58:25+00:00",
+ "time": "2023-01-01T08:36:10+00:00",
"type": "library",
"installation-source": "dist",
"autoload": {
@@ -2373,7 +2540,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v5.4.11"
+ "source": "https://github.com/symfony/process/tree/v6.0.19"
},
"funding": [
{
@@ -2474,6 +2641,68 @@
}
],
"install-path": "../symfony/var-dumper"
+ },
+ {
+ "name": "tinymce/tinymce",
+ "version": "6.4.1",
+ "version_normalized": "6.4.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/tinymce/tinymce-dist.git",
+ "reference": "b2327c03fba64f8c47ec030c1f3bce98da8f7596"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/tinymce/tinymce-dist/zipball/b2327c03fba64f8c47ec030c1f3bce98da8f7596",
+ "reference": "b2327c03fba64f8c47ec030c1f3bce98da8f7596",
+ "shasum": ""
+ },
+ "time": "2023-03-29T01:33:40+00:00",
+ "type": "component",
+ "extra": {
+ "component": {
+ "scripts": [
+ "tinymce.js",
+ "plugins/*/plugin.js",
+ "themes/*/theme.js",
+ "models/*/model.js",
+ "icons/*/icons.js"
+ ],
+ "files": [
+ "tinymce.min.js",
+ "plugins/*/plugin.min.js",
+ "themes/*/theme.min.js",
+ "models/*/model.min.js",
+ "skins/**",
+ "icons/*/icons.min.js"
+ ]
+ }
+ },
+ "installation-source": "dist",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT-only"
+ ],
+ "description": "Web based JavaScript HTML WYSIWYG editor control.",
+ "homepage": "https://www.tiny.cloud/",
+ "keywords": [
+ "contenteditable",
+ "editing",
+ "html",
+ "javascript",
+ "rich editor",
+ "rich text",
+ "rich text editor",
+ "richtext",
+ "rte",
+ "text",
+ "tinymce",
+ "wysiwyg"
+ ],
+ "support": {
+ "source": "https://github.com/tinymce/tinymce-dist/tree/6.4.1"
+ },
+ "install-path": "../tinymce/tinymce"
}
],
"dev": true,
diff --git a/pandora_console/vendor/composer/installed.php b/pandora_console/vendor/composer/installed.php
index b1658545c2..25619fa69c 100644
--- a/pandora_console/vendor/composer/installed.php
+++ b/pandora_console/vendor/composer/installed.php
@@ -3,7 +3,7 @@
'name' => 'pandorafms/console',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
- 'reference' => '872b079b20910f3fa403f418df510e134db9f463',
+ 'reference' => 'f68cd81d35010b07e3e022ca1141a3fb639e6834',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -29,36 +29,36 @@
'dev_requirement' => false,
),
'amphp/parallel' => array(
- 'pretty_version' => 'v1.4.1',
- 'version' => '1.4.1.0',
- 'reference' => 'fbc128383c1ffb3823866f71b88d8c4722a25ce9',
+ 'pretty_version' => 'v1.4.3',
+ 'version' => '1.4.3.0',
+ 'reference' => '3aac213ba7858566fd83d38ccb85b91b2d652cb0',
'type' => 'library',
'install_path' => __DIR__ . '/../amphp/parallel',
'aliases' => array(),
'dev_requirement' => false,
),
'amphp/parallel-functions' => array(
- 'pretty_version' => 'v1.0.0',
- 'version' => '1.0.0.0',
- 'reference' => 'af9795d51abfafc3676cbe7e17965479491abaad',
+ 'pretty_version' => 'v1.1.0',
+ 'version' => '1.1.0.0',
+ 'reference' => '04e92fcacfc921a56dfe12c23b3265e62593a7cb',
'type' => 'library',
'install_path' => __DIR__ . '/../amphp/parallel-functions',
'aliases' => array(),
'dev_requirement' => false,
),
'amphp/parser' => array(
- 'pretty_version' => 'v1.0.0',
- 'version' => '1.0.0.0',
- 'reference' => 'f83e68f03d5b8e8e0365b8792985a7f341c57ae1',
+ 'pretty_version' => 'v1.1.0',
+ 'version' => '1.1.0.0',
+ 'reference' => 'ff1de4144726c5dad5fab97f66692ebe8de3e151',
'type' => 'library',
'install_path' => __DIR__ . '/../amphp/parser',
'aliases' => array(),
'dev_requirement' => false,
),
'amphp/process' => array(
- 'pretty_version' => 'v1.1.3',
- 'version' => '1.1.3.0',
- 'reference' => 'f09e3ed3b0a953ccbfff1140f12be4a884f0aa83',
+ 'pretty_version' => 'v1.1.4',
+ 'version' => '1.1.4.0',
+ 'reference' => '76e9495fd6818b43a20167cb11d8a67f7744ee0f',
'type' => 'library',
'install_path' => __DIR__ . '/../amphp/process',
'aliases' => array(),
@@ -85,43 +85,52 @@
'artica/phpchartjs' => array(
'pretty_version' => 'v1.0.2',
'version' => '1.0.2.0',
- 'reference' => '4957e7cd699e50cee8e0ba7304e1423aafb2cad2',
+ 'reference' => '681980c084ad505f9dc811d3d1f02ffc9442ccee',
'type' => 'package',
'install_path' => __DIR__ . '/../artica/phpchartjs',
'aliases' => array(),
'dev_requirement' => false,
),
'chrome-php/chrome' => array(
- 'pretty_version' => 'v1.7.1',
- 'version' => '1.7.1.0',
- 'reference' => '5783c749b2ee385d1c481b0906f1b8acef0296e4',
+ 'pretty_version' => 'v1.8.1',
+ 'version' => '1.8.1.0',
+ 'reference' => '9146c37c14d99cff3e4d9cd2f5ba843d149b3cbc',
'type' => 'library',
'install_path' => __DIR__ . '/../chrome-php/chrome',
'aliases' => array(),
'dev_requirement' => false,
),
'chrome-php/wrench' => array(
- 'pretty_version' => 'v1.3.0',
- 'version' => '1.3.0.0',
- 'reference' => '68b8282d5d0d54a519c3212ee3e4c35bef40b7d9',
+ 'pretty_version' => 'v1.5.0',
+ 'version' => '1.5.0.0',
+ 'reference' => '725246324339e5fd5d798361b561e81004324f96',
'type' => 'library',
'install_path' => __DIR__ . '/../chrome-php/wrench',
'aliases' => array(),
'dev_requirement' => false,
),
+ 'doctrine/deprecations' => array(
+ 'pretty_version' => 'v1.0.0',
+ 'version' => '1.0.0.0',
+ 'reference' => '0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../doctrine/deprecations',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'doctrine/lexer' => array(
- 'pretty_version' => '1.2.2',
- 'version' => '1.2.2.0',
- 'reference' => '9c50f840f257bbb941e6f4a0e94ccf5db5c3f76c',
+ 'pretty_version' => '2.1.0',
+ 'version' => '2.1.0.0',
+ 'reference' => '39ab8fcf5a51ce4b85ca97c7a7d033eb12831124',
'type' => 'library',
'install_path' => __DIR__ . '/../doctrine/lexer',
'aliases' => array(),
'dev_requirement' => false,
),
'egulias/email-validator' => array(
- 'pretty_version' => '3.1.2',
- 'version' => '3.1.2.0',
- 'reference' => 'ee0db30118f661fb166bcffbf5d82032df484697',
+ 'pretty_version' => '3.2.5',
+ 'version' => '3.2.5.0',
+ 'reference' => 'b531a2311709443320c786feb4519cfaf94af796',
'type' => 'library',
'install_path' => __DIR__ . '/../egulias/email-validator',
'aliases' => array(),
@@ -154,46 +163,46 @@
'aliases' => array(),
'dev_requirement' => false,
),
+ 'laravel/serializable-closure' => array(
+ 'pretty_version' => 'v1.3.0',
+ 'version' => '1.3.0.0',
+ 'reference' => 'f23fe9d4e95255dacee1bf3525e0810d1a1b0f37',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../laravel/serializable-closure',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'monolog/monolog' => array(
- 'pretty_version' => '2.8.0',
- 'version' => '2.8.0.0',
- 'reference' => '720488632c590286b88b80e62aa3d3d551ad4a50',
+ 'pretty_version' => '2.9.1',
+ 'version' => '2.9.1.0',
+ 'reference' => 'f259e2b15fb95494c83f52d3caad003bbf5ffaa1',
'type' => 'library',
'install_path' => __DIR__ . '/../monolog/monolog',
'aliases' => array(),
'dev_requirement' => false,
),
'mpdf/mpdf' => array(
- 'pretty_version' => 'v8.0.15',
- 'version' => '8.0.15.0',
- 'reference' => 'd8a5294a6cc2e814c4157aecc8d7ac25014b18ed',
+ 'pretty_version' => 'v8.1.5',
+ 'version' => '8.1.5.0',
+ 'reference' => 'c264ce27af0d794ecd04e201b7e37a06b8a9d720',
'type' => 'library',
'install_path' => __DIR__ . '/../mpdf/mpdf',
'aliases' => array(),
'dev_requirement' => false,
),
'myclabs/deep-copy' => array(
- 'pretty_version' => '1.10.2',
- 'version' => '1.10.2.0',
- 'reference' => '776f831124e9c62e1a2c601ecc52e776d8bb7220',
+ 'pretty_version' => '1.11.1',
+ 'version' => '1.11.1.0',
+ 'reference' => '7284c22080590fb39f2ffa3e9057f10a4ddd0e0c',
'type' => 'library',
'install_path' => __DIR__ . '/../myclabs/deep-copy',
'aliases' => array(),
'dev_requirement' => false,
),
- 'opis/closure' => array(
- 'pretty_version' => '3.6.3',
- 'version' => '3.6.3.0',
- 'reference' => '3d81e4309d2a927abbe66df935f4bb60082805ad',
- 'type' => 'library',
- 'install_path' => __DIR__ . '/../opis/closure',
- 'aliases' => array(),
- 'dev_requirement' => false,
- ),
'pandorafms/console' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
- 'reference' => '872b079b20910f3fa403f418df510e134db9f463',
+ 'reference' => 'f68cd81d35010b07e3e022ca1141a3fb639e6834',
'type' => 'library',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
@@ -208,6 +217,24 @@
'aliases' => array(),
'dev_requirement' => false,
),
+ 'php-http/message-factory' => array(
+ 'pretty_version' => 'v1.0.2',
+ 'version' => '1.0.2.0',
+ 'reference' => 'a478cb11f66a6ac48d8954216cfed9aa06a501a1',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../php-http/message-factory',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
+ 'psr/http-message' => array(
+ 'pretty_version' => '1.1',
+ 'version' => '1.1.0.0',
+ 'reference' => 'cb6ce4845ce34a8ad9e68117c10ee90a29919eba',
+ 'type' => 'library',
+ 'install_path' => __DIR__ . '/../psr/http-message',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
'psr/log' => array(
'pretty_version' => '2.0.0',
'version' => '2.0.0.0',
@@ -224,9 +251,9 @@
),
),
'setasign/fpdi' => array(
- 'pretty_version' => 'v2.3.6',
- 'version' => '2.3.6.0',
- 'reference' => '6231e315f73e4f62d72b73f3d6d78ff0eed93c31',
+ 'pretty_version' => 'v2.3.7',
+ 'version' => '2.3.7.0',
+ 'reference' => 'bccc892d5fa1f48c43f8ba7db5ed4ba6f30c8c05',
'type' => 'library',
'install_path' => __DIR__ . '/../setasign/fpdi',
'aliases' => array(),
@@ -242,9 +269,9 @@
'dev_requirement' => false,
),
'symfony/filesystem' => array(
- 'pretty_version' => 'v5.4.13',
- 'version' => '5.4.13.0',
- 'reference' => 'ac09569844a9109a5966b9438fc29113ce77cf51',
+ 'pretty_version' => 'v6.0.19',
+ 'version' => '6.0.19.0',
+ 'reference' => '3d49eec03fda1f0fc19b7349fbbe55ebc1004214',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/filesystem',
'aliases' => array(),
@@ -260,27 +287,27 @@
'dev_requirement' => false,
),
'symfony/polyfill-iconv' => array(
- 'pretty_version' => 'v1.24.0',
- 'version' => '1.24.0.0',
- 'reference' => 'f1aed619e28cb077fc83fac8c4c0383578356e40',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '927013f3aac555983a5059aada98e1907d842695',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-iconv',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-intl-idn' => array(
- 'pretty_version' => 'v1.24.0',
- 'version' => '1.24.0.0',
- 'reference' => '749045c69efb97c70d25d7463abba812e91f3a44',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '639084e360537a19f9ee352433b84ce831f3d2da',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-intl-normalizer' => array(
- 'pretty_version' => 'v1.24.0',
- 'version' => '1.24.0.0',
- 'reference' => '8590a5f561694770bdcd3f9b5c69dde6945028e8',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '19bd1e4fcd5b91116f14d8533c57831ed00571b6',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer',
'aliases' => array(),
@@ -296,9 +323,9 @@
'dev_requirement' => false,
),
'symfony/polyfill-php72' => array(
- 'pretty_version' => 'v1.24.0',
- 'version' => '1.24.0.0',
- 'reference' => '9a142215a36a3888e30d0a9eeea9766764e96976',
+ 'pretty_version' => 'v1.27.0',
+ 'version' => '1.27.0.0',
+ 'reference' => '869329b1e9894268a8a61dabb69153029b7a8c97',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php72',
'aliases' => array(),
@@ -314,9 +341,9 @@
'dev_requirement' => false,
),
'symfony/process' => array(
- 'pretty_version' => 'v5.4.11',
- 'version' => '5.4.11.0',
- 'reference' => '6e75fe6874cbc7e4773d049616ab450eff537bf1',
+ 'pretty_version' => 'v6.0.19',
+ 'version' => '6.0.19.0',
+ 'reference' => '2114fd60f26a296cc403a7939ab91478475a33d4',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/process',
'aliases' => array(),
@@ -331,5 +358,14 @@
'aliases' => array(),
'dev_requirement' => false,
),
+ 'tinymce/tinymce' => array(
+ 'pretty_version' => '6.4.1',
+ 'version' => '6.4.1.0',
+ 'reference' => 'b2327c03fba64f8c47ec030c1f3bce98da8f7596',
+ 'type' => 'component',
+ 'install_path' => __DIR__ . '/../tinymce/tinymce',
+ 'aliases' => array(),
+ 'dev_requirement' => false,
+ ),
),
);
diff --git a/pandora_console/vendor/composer/platform_check.php b/pandora_console/vendor/composer/platform_check.php
index 3c90e422ec..b168ddd5d9 100644
--- a/pandora_console/vendor/composer/platform_check.php
+++ b/pandora_console/vendor/composer/platform_check.php
@@ -4,8 +4,8 @@
$issues = array();
-if (!(PHP_VERSION_ID >= 80000)) {
- $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.0". You are running ' . PHP_VERSION . '.';
+if (!(PHP_VERSION_ID >= 80002)) {
+ $issues[] = 'Your Composer dependencies require a PHP version ">= 8.0.2". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
@@ -16,35 +16,9 @@ if ($issues) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
- require_once __DIR__.'/../../include/functions_ui.php';
-
- $url = str_replace('/var/www/html/', '', __DIR__);
- $url = str_replace('/vendor/composer', '', $url);
-
- echo '';
- ?>
-
-
-
- ';
- echo '';
- echo '

Composer detected issues in your platform:
';
- echo '
';
- echo sprintf(
- 'PandoraFMS requires PHP 8.0 to work properly and the version %s has been detected. Please update the PHP version of the system. More info %s. The latest version with PHP 7.4 support is PandoraFMS 767 hope LTS.',
- PHP_VERSION,
- '
here'
- );
- echo '
';
+ echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
-
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
diff --git a/pandora_console/vendor/opis/closure/LICENSE b/pandora_console/vendor/doctrine/deprecations/LICENSE
similarity index 52%
rename from pandora_console/vendor/opis/closure/LICENSE
rename to pandora_console/vendor/doctrine/deprecations/LICENSE
index 9c0a19ba2a..156905cdd0 100644
--- a/pandora_console/vendor/opis/closure/LICENSE
+++ b/pandora_console/vendor/doctrine/deprecations/LICENSE
@@ -1,20 +1,19 @@
-The MIT License (MIT)
-
-Copyright (c) 2018-2019 Zindex Software
+Copyright (c) 2020-2021 Doctrine Project
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is furnished to do
+so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/pandora_console/vendor/doctrine/deprecations/README.md b/pandora_console/vendor/doctrine/deprecations/README.md
new file mode 100644
index 0000000000..22f0cced3e
--- /dev/null
+++ b/pandora_console/vendor/doctrine/deprecations/README.md
@@ -0,0 +1,154 @@
+# Doctrine Deprecations
+
+A small (side-effect free by default) layer on top of
+`trigger_error(E_USER_DEPRECATED)` or PSR-3 logging.
+
+- no side-effects by default, making it a perfect fit for libraries that don't know how the error handler works they operate under
+- options to avoid having to rely on error handlers global state by using PSR-3 logging
+- deduplicate deprecation messages to avoid excessive triggering and reduce overhead
+
+We recommend to collect Deprecations using a PSR logger instead of relying on
+the global error handler.
+
+## Usage from consumer perspective:
+
+Enable Doctrine deprecations to be sent to a PSR3 logger:
+
+```php
+\Doctrine\Deprecations\Deprecation::enableWithPsrLogger($logger);
+```
+
+Enable Doctrine deprecations to be sent as `@trigger_error($message, E_USER_DEPRECATED)`
+messages.
+
+```php
+\Doctrine\Deprecations\Deprecation::enableWithTriggerError();
+```
+
+If you only want to enable deprecation tracking, without logging or calling `trigger_error` then call:
+
+```php
+\Doctrine\Deprecations\Deprecation::enableTrackingDeprecations();
+```
+
+Tracking is enabled with all three modes and provides access to all triggered
+deprecations and their individual count:
+
+```php
+$deprecations = \Doctrine\Deprecations\Deprecation::getTriggeredDeprecations();
+
+foreach ($deprecations as $identifier => $count) {
+ echo $identifier . " was triggered " . $count . " times\n";
+}
+```
+
+### Suppressing Specific Deprecations
+
+Disable triggering about specific deprecations:
+
+```php
+\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier");
+```
+
+Disable all deprecations from a package
+
+```php
+\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm");
+```
+
+### Other Operations
+
+When used within PHPUnit or other tools that could collect multiple instances of the same deprecations
+the deduplication can be disabled:
+
+```php
+\Doctrine\Deprecations\Deprecation::withoutDeduplication();
+```
+
+Disable deprecation tracking again:
+
+```php
+\Doctrine\Deprecations\Deprecation::disable();
+```
+
+## Usage from a library/producer perspective:
+
+When you want to unconditionally trigger a deprecation even when called
+from the library itself then the `trigger` method is the way to go:
+
+```php
+\Doctrine\Deprecations\Deprecation::trigger(
+ "doctrine/orm",
+ "https://link/to/deprecations-description",
+ "message"
+);
+```
+
+If variable arguments are provided at the end, they are used with `sprintf` on
+the message.
+
+```php
+\Doctrine\Deprecations\Deprecation::trigger(
+ "doctrine/orm",
+ "https://github.com/doctrine/orm/issue/1234",
+ "message %s %d",
+ "foo",
+ 1234
+);
+```
+
+When you want to trigger a deprecation only when it is called by a function
+outside of the current package, but not trigger when the package itself is the cause,
+then use:
+
+```php
+\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside(
+ "doctrine/orm",
+ "https://link/to/deprecations-description",
+ "message"
+);
+```
+
+Based on the issue link each deprecation message is only triggered once per
+request.
+
+A limited stacktrace is included in the deprecation message to find the
+offending location.
+
+Note: A producer/library should never call `Deprecation::enableWith` methods
+and leave the decision how to handle deprecations to application and
+frameworks.
+
+## Usage in PHPUnit tests
+
+There is a `VerifyDeprecations` trait that you can use to make assertions on
+the occurrence of deprecations within a test.
+
+```php
+use Doctrine\Deprecations\PHPUnit\VerifyDeprecations;
+
+class MyTest extends TestCase
+{
+ use VerifyDeprecations;
+
+ public function testSomethingDeprecation()
+ {
+ $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
+
+ triggerTheCodeWithDeprecation();
+ }
+
+ public function testSomethingDeprecationFixed()
+ {
+ $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234');
+
+ triggerTheCodeWithoutDeprecation();
+ }
+}
+```
+
+## What is a deprecation identifier?
+
+An identifier for deprecations is just a link to any resource, most often a
+Github Issue or Pull Request explaining the deprecation and potentially its
+alternative.
diff --git a/pandora_console/vendor/doctrine/deprecations/composer.json b/pandora_console/vendor/doctrine/deprecations/composer.json
new file mode 100644
index 0000000000..c79e38cdcd
--- /dev/null
+++ b/pandora_console/vendor/doctrine/deprecations/composer.json
@@ -0,0 +1,32 @@
+{
+ "name": "doctrine/deprecations",
+ "type": "library",
+ "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.",
+ "homepage": "https://www.doctrine-project.org/",
+ "license": "MIT",
+ "require": {
+ "php": "^7.1|^8.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^7.5|^8.5|^9.5",
+ "psr/log": "^1|^2|^3",
+ "doctrine/coding-standard": "^9"
+ },
+ "suggest": {
+ "psr/log": "Allows logging deprecations via PSR-3 logger implementation"
+ },
+ "autoload": {
+ "psr-4": {"Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations"}
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "DeprecationTests\\": "test_fixtures/src",
+ "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo"
+ }
+ },
+ "config": {
+ "allow-plugins": {
+ "dealerdirect/phpcodesniffer-composer-installer": true
+ }
+ }
+}
diff --git a/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php
new file mode 100644
index 0000000000..1029372faa
--- /dev/null
+++ b/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php
@@ -0,0 +1,266 @@
+ */
+ private static $ignoredPackages = [];
+
+ /** @var array */
+ private static $ignoredLinks = [];
+
+ /** @var bool */
+ private static $deduplication = true;
+
+ /**
+ * Trigger a deprecation for the given package and identfier.
+ *
+ * The link should point to a Github issue or Wiki entry detailing the
+ * deprecation. It is additionally used to de-duplicate the trigger of the
+ * same deprecation during a request.
+ *
+ * @param mixed $args
+ */
+ public static function trigger(string $package, string $link, string $message, ...$args): void
+ {
+ if (self::$type === self::TYPE_NONE) {
+ return;
+ }
+
+ if (array_key_exists($link, self::$ignoredLinks)) {
+ self::$ignoredLinks[$link]++;
+ } else {
+ self::$ignoredLinks[$link] = 1;
+ }
+
+ if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) {
+ return;
+ }
+
+ if (isset(self::$ignoredPackages[$package])) {
+ return;
+ }
+
+ $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
+
+ $message = sprintf($message, ...$args);
+
+ self::delegateTriggerToBackend($message, $backtrace, $link, $package);
+ }
+
+ /**
+ * Trigger a deprecation for the given package and identifier when called from outside.
+ *
+ * "Outside" means we assume that $package is currently installed as a
+ * dependency and the caller is not a file in that package. When $package
+ * is installed as a root package then deprecations triggered from the
+ * tests folder are also considered "outside".
+ *
+ * This deprecation method assumes that you are using Composer to install
+ * the dependency and are using the default /vendor/ folder and not a
+ * Composer plugin to change the install location. The assumption is also
+ * that $package is the exact composer packge name.
+ *
+ * Compared to {@link trigger()} this method causes some overhead when
+ * deprecation tracking is enabled even during deduplication, because it
+ * needs to call {@link debug_backtrace()}
+ *
+ * @param mixed $args
+ */
+ public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void
+ {
+ if (self::$type === self::TYPE_NONE) {
+ return;
+ }
+
+ $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2);
+
+ // first check that the caller is not from a tests folder, in which case we always let deprecations pass
+ if (strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) {
+ $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . $package . DIRECTORY_SEPARATOR;
+
+ if (strpos($backtrace[0]['file'], $path) === false) {
+ return;
+ }
+
+ if (strpos($backtrace[1]['file'], $path) !== false) {
+ return;
+ }
+ }
+
+ if (array_key_exists($link, self::$ignoredLinks)) {
+ self::$ignoredLinks[$link]++;
+ } else {
+ self::$ignoredLinks[$link] = 1;
+ }
+
+ if (self::$deduplication === true && self::$ignoredLinks[$link] > 1) {
+ return;
+ }
+
+ if (isset(self::$ignoredPackages[$package])) {
+ return;
+ }
+
+ $message = sprintf($message, ...$args);
+
+ self::delegateTriggerToBackend($message, $backtrace, $link, $package);
+ }
+
+ /**
+ * @param array $backtrace
+ */
+ private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void
+ {
+ if ((self::$type & self::TYPE_PSR_LOGGER) > 0) {
+ $context = [
+ 'file' => $backtrace[0]['file'],
+ 'line' => $backtrace[0]['line'],
+ 'package' => $package,
+ 'link' => $link,
+ ];
+
+ self::$logger->notice($message, $context);
+ }
+
+ if (! ((self::$type & self::TYPE_TRIGGER_ERROR) > 0)) {
+ return;
+ }
+
+ $message .= sprintf(
+ ' (%s:%d called by %s:%d, %s, package %s)',
+ self::basename($backtrace[0]['file']),
+ $backtrace[0]['line'],
+ self::basename($backtrace[1]['file']),
+ $backtrace[1]['line'],
+ $link,
+ $package
+ );
+
+ @trigger_error($message, E_USER_DEPRECATED);
+ }
+
+ /**
+ * A non-local-aware version of PHPs basename function.
+ */
+ private static function basename(string $filename): string
+ {
+ $pos = strrpos($filename, DIRECTORY_SEPARATOR);
+
+ if ($pos === false) {
+ return $filename;
+ }
+
+ return substr($filename, $pos + 1);
+ }
+
+ public static function enableTrackingDeprecations(): void
+ {
+ self::$type |= self::TYPE_TRACK_DEPRECATIONS;
+ }
+
+ public static function enableWithTriggerError(): void
+ {
+ self::$type |= self::TYPE_TRIGGER_ERROR;
+ }
+
+ public static function enableWithPsrLogger(LoggerInterface $logger): void
+ {
+ self::$type |= self::TYPE_PSR_LOGGER;
+ self::$logger = $logger;
+ }
+
+ public static function withoutDeduplication(): void
+ {
+ self::$deduplication = false;
+ }
+
+ public static function disable(): void
+ {
+ self::$type = self::TYPE_NONE;
+ self::$logger = null;
+ self::$deduplication = true;
+
+ foreach (self::$ignoredLinks as $link => $count) {
+ self::$ignoredLinks[$link] = 0;
+ }
+ }
+
+ public static function ignorePackage(string $packageName): void
+ {
+ self::$ignoredPackages[$packageName] = true;
+ }
+
+ public static function ignoreDeprecations(string ...$links): void
+ {
+ foreach ($links as $link) {
+ self::$ignoredLinks[$link] = 0;
+ }
+ }
+
+ public static function getUniqueTriggeredDeprecationsCount(): int
+ {
+ return array_reduce(self::$ignoredLinks, static function (int $carry, int $count) {
+ return $carry + $count;
+ }, 0);
+ }
+
+ /**
+ * Returns each triggered deprecation link identifier and the amount of occurrences.
+ *
+ * @return array
+ */
+ public static function getTriggeredDeprecations(): array
+ {
+ return self::$ignoredLinks;
+ }
+}
diff --git a/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php b/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php
new file mode 100644
index 0000000000..4c3366a971
--- /dev/null
+++ b/pandora_console/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php
@@ -0,0 +1,66 @@
+ */
+ private $doctrineDeprecationsExpectations = [];
+
+ /** @var array */
+ private $doctrineNoDeprecationsExpectations = [];
+
+ public function expectDeprecationWithIdentifier(string $identifier): void
+ {
+ $this->doctrineDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
+ }
+
+ public function expectNoDeprecationWithIdentifier(string $identifier): void
+ {
+ $this->doctrineNoDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
+ }
+
+ /**
+ * @before
+ */
+ public function enableDeprecationTracking(): void
+ {
+ Deprecation::enableTrackingDeprecations();
+ }
+
+ /**
+ * @after
+ */
+ public function verifyDeprecationsAreTriggered(): void
+ {
+ foreach ($this->doctrineDeprecationsExpectations as $identifier => $expectation) {
+ $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
+
+ $this->assertTrue(
+ $actualCount > $expectation,
+ sprintf(
+ "Expected deprecation with identifier '%s' was not triggered by code executed in test.",
+ $identifier
+ )
+ );
+ }
+
+ foreach ($this->doctrineNoDeprecationsExpectations as $identifier => $expectation) {
+ $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0;
+
+ $this->assertTrue(
+ $actualCount === $expectation,
+ sprintf(
+ "Expected deprecation with identifier '%s' was triggered by code executed in test, but expected not to.",
+ $identifier
+ )
+ );
+ }
+ }
+}
diff --git a/pandora_console/vendor/doctrine/deprecations/phpcs.xml b/pandora_console/vendor/doctrine/deprecations/phpcs.xml
new file mode 100644
index 0000000000..f115e43dd0
--- /dev/null
+++ b/pandora_console/vendor/doctrine/deprecations/phpcs.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ lib
+ tests
+
+
+
+
+
+
diff --git a/pandora_console/vendor/doctrine/lexer/UPGRADE.md b/pandora_console/vendor/doctrine/lexer/UPGRADE.md
new file mode 100644
index 0000000000..42b85b3734
--- /dev/null
+++ b/pandora_console/vendor/doctrine/lexer/UPGRADE.md
@@ -0,0 +1,14 @@
+Note about upgrading: Doctrine uses static and runtime mechanisms to raise
+awareness about deprecated code.
+
+- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or
+ Static Analysis tools (like Psalm, phpstan)
+- Use of our low-overhead runtime deprecation API, details:
+ https://github.com/doctrine/deprecations/
+
+# Upgrade to 2.0.0
+
+`AbstractLexer::glimpse()` and `AbstractLexer::peek()` now return
+instances of `Doctrine\Common\Lexer\Token`, which is an array-like class
+Using it as an array is deprecated in favor of using properties of that class.
+Using `count()` on it is deprecated with no replacement.
diff --git a/pandora_console/vendor/doctrine/lexer/composer.json b/pandora_console/vendor/doctrine/lexer/composer.json
index ac7e4bddab..be3013cffd 100644
--- a/pandora_console/vendor/doctrine/lexer/composer.json
+++ b/pandora_console/vendor/doctrine/lexer/composer.json
@@ -1,7 +1,8 @@
{
"name": "doctrine/lexer",
- "type": "library",
"description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
+ "license": "MIT",
+ "type": "library",
"keywords": [
"php",
"parser",
@@ -9,27 +10,41 @@
"annotations",
"docblock"
],
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "license": "MIT",
"authors": [
- {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"},
- {"name": "Roman Borschel", "email": "roman@code-factory.org"},
- {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"}
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
+ {
+ "name": "Johannes Schmitt",
+ "email": "schmittjoh@gmail.com"
+ }
],
+ "homepage": "https://www.doctrine-project.org/projects/lexer.html",
"require": {
- "php": "^7.1 || ^8.0"
+ "php": "^7.1 || ^8.0",
+ "doctrine/deprecations": "^1.0"
},
"require-dev": {
- "doctrine/coding-standard": "^9.0",
- "phpstan/phpstan": "1.3",
+ "doctrine/coding-standard": "^9 || ^10",
+ "phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
- "vimeo/psalm": "^4.11"
+ "psalm/plugin-phpunit": "^0.18.3",
+ "vimeo/psalm": "^4.11 || ^5.0"
},
"autoload": {
- "psr-4": { "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" }
+ "psr-4": {
+ "Doctrine\\Common\\Lexer\\": "src"
+ }
},
"autoload-dev": {
- "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine" }
+ "psr-4": {
+ "Doctrine\\Tests\\Common\\Lexer\\": "tests"
+ }
},
"config": {
"allow-plugins": {
diff --git a/pandora_console/vendor/doctrine/lexer/psalm.xml b/pandora_console/vendor/doctrine/lexer/psalm.xml
deleted file mode 100644
index f331e50c11..0000000000
--- a/pandora_console/vendor/doctrine/lexer/psalm.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/pandora_console/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php b/pandora_console/vendor/doctrine/lexer/src/AbstractLexer.php
similarity index 80%
rename from pandora_console/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
rename to pandora_console/vendor/doctrine/lexer/src/AbstractLexer.php
index fe01ab0bbd..eed4c5139f 100644
--- a/pandora_console/vendor/doctrine/lexer/lib/Doctrine/Common/Lexer/AbstractLexer.php
+++ b/pandora_console/vendor/doctrine/lexer/src/AbstractLexer.php
@@ -5,9 +5,10 @@ declare(strict_types=1);
namespace Doctrine\Common\Lexer;
use ReflectionClass;
+use UnitEnum;
+use function get_class;
use function implode;
-use function in_array;
use function preg_split;
use function sprintf;
use function substr;
@@ -18,6 +19,9 @@ use const PREG_SPLIT_OFFSET_CAPTURE;
/**
* Base class for writing simple lexers, i.e. for creating small DSLs.
+ *
+ * @template T of UnitEnum|string|int
+ * @template V of string|int
*/
abstract class AbstractLexer
{
@@ -31,14 +35,7 @@ abstract class AbstractLexer
/**
* Array of scanned tokens.
*
- * Each token is an associative array containing three items:
- * - 'value' : the string value of the token in the input string
- * - 'type' : the type of the token (identifier, numeric, string, input
- * parameter, none)
- * - 'position' : the position of the token in the input string
- *
- * @var mixed[][]
- * @psalm-var list
+ * @var list>
*/
private $tokens = [];
@@ -60,7 +57,7 @@ abstract class AbstractLexer
* The next token in the input.
*
* @var mixed[]|null
- * @psalm-var array{value: string, type: string|int|null, position: int}|null
+ * @psalm-var Token|null
*/
public $lookahead;
@@ -68,7 +65,7 @@ abstract class AbstractLexer
* The last matched/seen token.
*
* @var mixed[]|null
- * @psalm-var array{value: string, type: string|int|null, position: int}|null
+ * @psalm-var Token|null
*/
public $token;
@@ -148,31 +145,37 @@ abstract class AbstractLexer
/**
* Checks whether a given token matches the current lookahead.
*
- * @param int|string $token
+ * @param T $type
*
* @return bool
+ *
+ * @psalm-assert-if-true !=null $this->lookahead
*/
- public function isNextToken($token)
+ public function isNextToken($type)
{
- return $this->lookahead !== null && $this->lookahead['type'] === $token;
+ return $this->lookahead !== null && $this->lookahead->isA($type);
}
/**
* Checks whether any of the given tokens matches the current lookahead.
*
- * @param string[] $tokens
+ * @param list $types
*
* @return bool
+ *
+ * @psalm-assert-if-true !=null $this->lookahead
*/
- public function isNextTokenAny(array $tokens)
+ public function isNextTokenAny(array $types)
{
- return $this->lookahead !== null && in_array($this->lookahead['type'], $tokens, true);
+ return $this->lookahead !== null && $this->lookahead->isA(...$types);
}
/**
* Moves to the next token in the input string.
*
* @return bool
+ *
+ * @psalm-assert-if-true !null $this->lookahead
*/
public function moveNext()
{
@@ -187,13 +190,13 @@ abstract class AbstractLexer
/**
* Tells the lexer to skip input tokens until it sees a token with the given value.
*
- * @param string $type The token type to skip until.
+ * @param T $type The token type to skip until.
*
* @return void
*/
public function skipUntil($type)
{
- while ($this->lookahead !== null && $this->lookahead['type'] !== $type) {
+ while ($this->lookahead !== null && ! $this->lookahead->isA($type)) {
$this->moveNext();
}
}
@@ -201,7 +204,7 @@ abstract class AbstractLexer
/**
* Checks if given value is identical to the given token.
*
- * @param mixed $value
+ * @param string $value
* @param int|string $token
*
* @return bool
@@ -215,7 +218,7 @@ abstract class AbstractLexer
* Moves the lookahead token forward.
*
* @return mixed[]|null The next token or NULL if there are no more tokens ahead.
- * @psalm-return array{value: string, type: string|int|null, position: int}|null
+ * @psalm-return Token|null
*/
public function peek()
{
@@ -230,7 +233,7 @@ abstract class AbstractLexer
* Peeks at the next token, returns it and immediately resets the peek.
*
* @return mixed[]|null The next token or NULL if there are no more tokens ahead.
- * @psalm-return array{value: string, type: string|int|null, position: int}|null
+ * @psalm-return Token|null
*/
public function glimpse()
{
@@ -268,26 +271,32 @@ abstract class AbstractLexer
foreach ($matches as $match) {
// Must remain before 'value' assignment since it can change content
- $type = $this->getType($match[0]);
+ $firstMatch = $match[0];
+ $type = $this->getType($firstMatch);
- $this->tokens[] = [
- 'value' => $match[0],
- 'type' => $type,
- 'position' => $match[1],
- ];
+ $this->tokens[] = new Token(
+ $firstMatch,
+ $type,
+ $match[1]
+ );
}
}
/**
* Gets the literal for a given token.
*
- * @param int|string $token
+ * @param T $token
*
* @return int|string
*/
public function getLiteral($token)
{
+ if ($token instanceof UnitEnum) {
+ return get_class($token) . '::' . $token->name;
+ }
+
$className = static::class;
+
$reflClass = new ReflectionClass($className);
$constants = $reflClass->getConstants();
@@ -329,7 +338,9 @@ abstract class AbstractLexer
*
* @param string $value
*
- * @return int|string|null
+ * @return T|null
+ *
+ * @param-out V $value
*/
abstract protected function getType(&$value);
}
diff --git a/pandora_console/vendor/doctrine/lexer/src/Token.php b/pandora_console/vendor/doctrine/lexer/src/Token.php
new file mode 100644
index 0000000000..4fbbf4e403
--- /dev/null
+++ b/pandora_console/vendor/doctrine/lexer/src/Token.php
@@ -0,0 +1,145 @@
+
+ */
+final class Token implements ArrayAccess
+{
+ /**
+ * The string value of the token in the input string
+ *
+ * @readonly
+ * @var V
+ */
+ public $value;
+
+ /**
+ * The type of the token (identifier, numeric, string, input parameter, none)
+ *
+ * @readonly
+ * @var T|null
+ */
+ public $type;
+
+ /**
+ * The position of the token in the input string
+ *
+ * @readonly
+ * @var int
+ */
+ public $position;
+
+ /**
+ * @param V $value
+ * @param T|null $type
+ */
+ public function __construct($value, $type, int $position)
+ {
+ $this->value = $value;
+ $this->type = $type;
+ $this->position = $position;
+ }
+
+ /** @param T ...$types */
+ public function isA(...$types): bool
+ {
+ return in_array($this->type, $types, true);
+ }
+
+ /**
+ * @deprecated Use the value, type or position property instead
+ * {@inheritDoc}
+ */
+ public function offsetExists($offset): bool
+ {
+ Deprecation::trigger(
+ 'doctrine/lexer',
+ 'https://github.com/doctrine/lexer/pull/79',
+ 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead',
+ self::class
+ );
+
+ return in_array($offset, ['value', 'type', 'position'], true);
+ }
+
+ /**
+ * @deprecated Use the value, type or position property instead
+ * {@inheritDoc}
+ *
+ * @param O $offset
+ *
+ * @return mixed
+ * @psalm-return (
+ * O is 'value'
+ * ? V
+ * : (
+ * O is 'type'
+ * ? T|null
+ * : (
+ * O is 'position'
+ * ? int
+ * : mixed
+ * )
+ * )
+ * )
+ *
+ * @template O of array-key
+ */
+ #[ReturnTypeWillChange]
+ public function offsetGet($offset)
+ {
+ Deprecation::trigger(
+ 'doctrine/lexer',
+ 'https://github.com/doctrine/lexer/pull/79',
+ 'Accessing %s properties via ArrayAccess is deprecated, use the value, type or position property instead',
+ self::class
+ );
+
+ return $this->$offset;
+ }
+
+ /**
+ * @deprecated no replacement planned
+ * {@inheritDoc}
+ */
+ public function offsetSet($offset, $value): void
+ {
+ Deprecation::trigger(
+ 'doctrine/lexer',
+ 'https://github.com/doctrine/lexer/pull/79',
+ 'Setting %s properties via ArrayAccess is deprecated',
+ self::class
+ );
+
+ $this->$offset = $value;
+ }
+
+ /**
+ * @deprecated no replacement planned
+ * {@inheritDoc}
+ */
+ public function offsetUnset($offset): void
+ {
+ Deprecation::trigger(
+ 'doctrine/lexer',
+ 'https://github.com/doctrine/lexer/pull/79',
+ 'Setting %s properties via ArrayAccess is deprecated',
+ self::class
+ );
+
+ $this->$offset = null;
+ }
+}
diff --git a/pandora_console/vendor/egulias/email-validator/CHANGELOG.md b/pandora_console/vendor/egulias/email-validator/CHANGELOG.md
index 83fd62e024..539917f535 100644
--- a/pandora_console/vendor/egulias/email-validator/CHANGELOG.md
+++ b/pandora_console/vendor/egulias/email-validator/CHANGELOG.md
@@ -5,7 +5,7 @@
* Access to local part and domain part from EmailParser
* Validations outside of the scope of the RFC will be considered "extra" validations, thus opening the door for adding new; will live in their own folder "extra" (as requested in #248, #195, #183).
-## Breacking changes
+## Breaking changes
* PHP version upgraded to match Symfony's (as of 12/2020).
* DNSCheckValidation now fails for missing MX records. While the RFC argues that the existence of only A records to be valid, starting in v3 they will be considered invalid.
diff --git a/pandora_console/vendor/egulias/email-validator/CONTRIBUTING.md b/pandora_console/vendor/egulias/email-validator/CONTRIBUTING.md
index 7b79e10816..907bc2c9b9 100644
--- a/pandora_console/vendor/egulias/email-validator/CONTRIBUTING.md
+++ b/pandora_console/vendor/egulias/email-validator/CONTRIBUTING.md
@@ -1,6 +1,6 @@
# Contributing
-When contributing to this repository make sure to follow the Pull request process below.
+When contributing to this repository make sure to follow the Pull request process below.
Reduce to the minimum 3rd party dependencies.
Please note we have a [code of conduct](#Code of Conduct), please follow it in all your interactions with the project.
@@ -14,7 +14,7 @@ When doing a PR to v2 remember that you also have to do the PR port to v3, or te
3. Describe the changes you are proposing
1. If adding an extra validation state the benefits of adding it and the problem is solving
2. Document in the readme, by adding it to the list
-4. Provide appropiate tests for the code you are submitting: aim to keep the existing coverage percentage.
+4. Provide appropriate tests for the code you are submitting: aim to keep the existing coverage percentage.
5. Add your Twitter handle (if you have) so we can thank you there.
## License
@@ -139,11 +139,11 @@ This Code of Conduct is adapted from the [Contributor Covenant][homepage],
version 2.0, available at
[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-Community Impact Guidelines were inspired by
+Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
+[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
at [https://www.contributor-covenant.org/translations][translations].
[homepage]: https://www.contributor-covenant.org
diff --git a/pandora_console/vendor/egulias/email-validator/LICENSE b/pandora_console/vendor/egulias/email-validator/LICENSE
index 1f0f2678a0..307440d45d 100644
--- a/pandora_console/vendor/egulias/email-validator/LICENSE
+++ b/pandora_console/vendor/egulias/email-validator/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2021 Eduardo Gulias Davis
+Copyright (c) 2013-2022 Eduardo Gulias Davis
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
diff --git a/pandora_console/vendor/egulias/email-validator/composer.json b/pandora_console/vendor/egulias/email-validator/composer.json
index d598d1b622..6a273e2f3e 100644
--- a/pandora_console/vendor/egulias/email-validator/composer.json
+++ b/pandora_console/vendor/egulias/email-validator/composer.json
@@ -14,11 +14,10 @@
},
"require": {
"php": ">=7.2",
- "doctrine/lexer": "^1.2",
+ "doctrine/lexer": "^1.2|^2",
"symfony/polyfill-intl-idn": "^1.15"
},
"require-dev": {
- "php-coveralls/php-coveralls": "^2.2",
"phpunit/phpunit": "^8.5.8|^9.3.3",
"vimeo/psalm": "^4"
},
diff --git a/pandora_console/vendor/egulias/email-validator/composer.lock b/pandora_console/vendor/egulias/email-validator/composer.lock
deleted file mode 100644
index c575e7fce8..0000000000
--- a/pandora_console/vendor/egulias/email-validator/composer.lock
+++ /dev/null
@@ -1,4440 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
- "This file is @generated automatically"
- ],
- "content-hash": "a77d36b64bc1213fecf4d4f92d759c3b",
- "packages": [
- {
- "name": "doctrine/lexer",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/lexer.git",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042",
- "reference": "e864bbf5904cb8f5bb334f99209b48018522f042",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^6.0",
- "phpstan/phpstan": "^0.11.8",
- "phpunit/phpunit": "^8.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
- {
- "name": "Johannes Schmitt",
- "email": "schmittjoh@gmail.com"
- }
- ],
- "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.",
- "homepage": "https://www.doctrine-project.org/projects/lexer.html",
- "keywords": [
- "annotations",
- "docblock",
- "lexer",
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/doctrine/lexer/issues",
- "source": "https://github.com/doctrine/lexer/tree/1.2.1"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer",
- "type": "tidelift"
- }
- ],
- "time": "2020-05-25T17:44:05+00:00"
- },
- {
- "name": "symfony/polyfill-intl-idn",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "2d63434d922daf7da8dd863e7907e67ee3031483"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/2d63434d922daf7da8dd863e7907e67ee3031483",
- "reference": "2d63434d922daf7da8dd863e7907e67ee3031483",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1",
- "symfony/polyfill-intl-normalizer": "^1.10",
- "symfony/polyfill-php72": "^1.10"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Idn\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Laurent Bassin",
- "email": "laurent@bassin.info"
- },
- {
- "name": "Trevor Rowbotham",
- "email": "trevor.rowbotham@pm.me"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "idn",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-intl-normalizer",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-normalizer.git",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "reference": "43a0283138253ed1d48d352ab6d0bdb3f809f248",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Normalizer\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's Normalizer class and related functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "intl",
- "normalizer",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-php72",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
- "reference": "cc6e6f9b39fe8075b3dabfbaf5b5f645ae1340c9",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php72\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php72/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- }
- ],
- "packages-dev": [
- {
- "name": "amphp/amp",
- "version": "v2.5.2",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/amp.git",
- "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/amp/zipball/efca2b32a7580087adb8aabbff6be1dc1bb924a9",
- "reference": "efca2b32a7580087adb8aabbff6be1dc1bb924a9",
- "shasum": ""
- },
- "require": {
- "php": ">=7"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1",
- "ext-json": "*",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6.0.9 | ^7",
- "psalm/phar": "^3.11@dev",
- "react/promise": "^2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Amp\\": "lib"
- },
- "files": [
- "lib/functions.php",
- "lib/Internal/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Daniel Lowrey",
- "email": "rdlowrey@php.net"
- },
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Bob Weinand",
- "email": "bobwei9@hotmail.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "A non-blocking concurrency framework for PHP applications.",
- "homepage": "http://amphp.org/amp",
- "keywords": [
- "async",
- "asynchronous",
- "awaitable",
- "concurrency",
- "event",
- "event-loop",
- "future",
- "non-blocking",
- "promise"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/amp/issues",
- "source": "https://github.com/amphp/amp/tree/v2.5.2"
- },
- "funding": [
- {
- "url": "https://github.com/amphp",
- "type": "github"
- }
- ],
- "time": "2021-01-10T17:06:37+00:00"
- },
- {
- "name": "amphp/byte-stream",
- "version": "v1.8.0",
- "source": {
- "type": "git",
- "url": "https://github.com/amphp/byte-stream.git",
- "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/amphp/byte-stream/zipball/f0c20cf598a958ba2aa8c6e5a71c697d652c7088",
- "reference": "f0c20cf598a958ba2aa8c6e5a71c697d652c7088",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2",
- "php": ">=7.1"
- },
- "require-dev": {
- "amphp/php-cs-fixer-config": "dev-master",
- "amphp/phpunit-util": "^1.4",
- "friendsofphp/php-cs-fixer": "^2.3",
- "jetbrains/phpstorm-stubs": "^2019.3",
- "phpunit/phpunit": "^6 || ^7 || ^8",
- "psalm/phar": "^3.11.4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Amp\\ByteStream\\": "lib"
- },
- "files": [
- "lib/functions.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Aaron Piotrowski",
- "email": "aaron@trowski.com"
- },
- {
- "name": "Niklas Keller",
- "email": "me@kelunik.com"
- }
- ],
- "description": "A stream abstraction to make working with non-blocking I/O simple.",
- "homepage": "http://amphp.org/byte-stream",
- "keywords": [
- "amp",
- "amphp",
- "async",
- "io",
- "non-blocking",
- "stream"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/amphp",
- "issues": "https://github.com/amphp/byte-stream/issues",
- "source": "https://github.com/amphp/byte-stream/tree/master"
- },
- "time": "2020-06-29T18:35:05+00:00"
- },
- {
- "name": "composer/package-versions-deprecated",
- "version": "1.11.99.1",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/package-versions-deprecated.git",
- "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/package-versions-deprecated/zipball/7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
- "reference": "7413f0b55a051e89485c5cb9f765fe24bb02a7b6",
- "shasum": ""
- },
- "require": {
- "composer-plugin-api": "^1.1.0 || ^2.0",
- "php": "^7 || ^8"
- },
- "replace": {
- "ocramius/package-versions": "1.11.99"
- },
- "require-dev": {
- "composer/composer": "^1.9.3 || ^2.0@dev",
- "ext-zip": "^1.13",
- "phpunit/phpunit": "^6.5 || ^7"
- },
- "type": "composer-plugin",
- "extra": {
- "class": "PackageVersions\\Installer",
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PackageVersions\\": "src/PackageVersions"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be"
- }
- ],
- "description": "Composer plugin that provides efficient querying for installed package versions (no runtime IO)",
- "support": {
- "issues": "https://github.com/composer/package-versions-deprecated/issues",
- "source": "https://github.com/composer/package-versions-deprecated/tree/1.11.99.1"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-11T10:22:58+00:00"
- },
- {
- "name": "composer/semver",
- "version": "3.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/semver.git",
- "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/a02fdf930a3c1c3ed3a49b5f63859c0c20e10464",
- "reference": "a02fdf930a3c1c3ed3a49b5f63859c0c20e10464",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0"
- },
- "require-dev": {
- "phpstan/phpstan": "^0.12.54",
- "symfony/phpunit-bridge": "^4.2 || ^5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "3.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Composer\\Semver\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nils Adermann",
- "email": "naderman@naderman.de",
- "homepage": "http://www.naderman.de"
- },
- {
- "name": "Jordi Boggiano",
- "email": "j.boggiano@seld.be",
- "homepage": "http://seld.be"
- },
- {
- "name": "Rob Bast",
- "email": "rob.bast@gmail.com",
- "homepage": "http://robbast.nl"
- }
- ],
- "description": "Semver library that offers utilities, version constraint parsing and validation.",
- "keywords": [
- "semantic",
- "semver",
- "validation",
- "versioning"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.2.4"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T08:59:24+00:00"
- },
- {
- "name": "composer/xdebug-handler",
- "version": "1.4.5",
- "source": {
- "type": "git",
- "url": "https://github.com/composer/xdebug-handler.git",
- "reference": "f28d44c286812c714741478d968104c5e604a1d4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/f28d44c286812c714741478d968104c5e604a1d4",
- "reference": "f28d44c286812c714741478d968104c5e604a1d4",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.2 || ^7.0 || ^8.0",
- "psr/log": "^1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.7 || 6.5 - 8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Composer\\XdebugHandler\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "John Stevenson",
- "email": "john-stevenson@blueyonder.co.uk"
- }
- ],
- "description": "Restarts a process without Xdebug.",
- "keywords": [
- "Xdebug",
- "performance"
- ],
- "support": {
- "irc": "irc://irc.freenode.org/composer",
- "issues": "https://github.com/composer/xdebug-handler/issues",
- "source": "https://github.com/composer/xdebug-handler/tree/1.4.5"
- },
- "funding": [
- {
- "url": "https://packagist.com",
- "type": "custom"
- },
- {
- "url": "https://github.com/composer",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/composer/composer",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T08:04:11+00:00"
- },
- {
- "name": "dnoegel/php-xdg-base-dir",
- "version": "v0.1.1",
- "source": {
- "type": "git",
- "url": "https://github.com/dnoegel/php-xdg-base-dir.git",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/dnoegel/php-xdg-base-dir/zipball/8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "reference": "8f8a6e48c5ecb0f991c2fdcf5f154a47d85f9ffd",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~7.0|~6.0|~5.0|~4.8.35"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "XdgBaseDir\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "implementation of xdg base directory specification for php",
- "support": {
- "issues": "https://github.com/dnoegel/php-xdg-base-dir/issues",
- "source": "https://github.com/dnoegel/php-xdg-base-dir/tree/v0.1.1"
- },
- "time": "2019-12-04T15:06:13+00:00"
- },
- {
- "name": "doctrine/instantiator",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/doctrine/instantiator.git",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "require-dev": {
- "doctrine/coding-standard": "^8.0",
- "ext-pdo": "*",
- "ext-phar": "*",
- "phpbench/phpbench": "^0.13 || 1.0.0-alpha2",
- "phpstan/phpstan": "^0.12",
- "phpstan/phpstan-phpunit": "^0.12",
- "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Marco Pivetta",
- "email": "ocramius@gmail.com",
- "homepage": "https://ocramius.github.io/"
- }
- ],
- "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
- "homepage": "https://www.doctrine-project.org/projects/instantiator.html",
- "keywords": [
- "constructor",
- "instantiate"
- ],
- "support": {
- "issues": "https://github.com/doctrine/instantiator/issues",
- "source": "https://github.com/doctrine/instantiator/tree/1.4.0"
- },
- "funding": [
- {
- "url": "https://www.doctrine-project.org/sponsorship.html",
- "type": "custom"
- },
- {
- "url": "https://www.patreon.com/phpdoctrine",
- "type": "patreon"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-10T18:47:58+00:00"
- },
- {
- "name": "felixfbecker/advanced-json-rpc",
- "version": "v3.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/felixfbecker/php-advanced-json-rpc.git",
- "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-advanced-json-rpc/zipball/06f0b06043c7438959dbdeed8bb3f699a19be22e",
- "reference": "06f0b06043c7438959dbdeed8bb3f699a19be22e",
- "shasum": ""
- },
- "require": {
- "netresearch/jsonmapper": "^1.0 || ^2.0",
- "php": "^7.1 || ^8.0",
- "phpdocumentor/reflection-docblock": "^4.3.4 || ^5.0.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "AdvancedJsonRpc\\": "lib/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
- }
- ],
- "description": "A more advanced JSONRPC implementation",
- "support": {
- "issues": "https://github.com/felixfbecker/php-advanced-json-rpc/issues",
- "source": "https://github.com/felixfbecker/php-advanced-json-rpc/tree/v3.2.0"
- },
- "time": "2021-01-10T17:48:47+00:00"
- },
- {
- "name": "felixfbecker/language-server-protocol",
- "version": "1.5.1",
- "source": {
- "type": "git",
- "url": "https://github.com/felixfbecker/php-language-server-protocol.git",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
- "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpstan/phpstan": "*",
- "squizlabs/php_codesniffer": "^3.1",
- "vimeo/psalm": "^4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "LanguageServerProtocol\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "ISC"
- ],
- "authors": [
- {
- "name": "Felix Becker",
- "email": "felix.b@outlook.com"
- }
- ],
- "description": "PHP classes for the Language Server Protocol",
- "keywords": [
- "language",
- "microsoft",
- "php",
- "server"
- ],
- "support": {
- "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues",
- "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1"
- },
- "time": "2021-02-22T14:02:09+00:00"
- },
- {
- "name": "guzzlehttp/guzzle",
- "version": "7.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/0aa74dfb41ae110835923ef10a9d803a22d50e79",
- "reference": "0aa74dfb41ae110835923ef10a9d803a22d50e79",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "guzzlehttp/promises": "^1.4",
- "guzzlehttp/psr7": "^1.7",
- "php": "^7.2.5 || ^8.0",
- "psr/http-client": "^1.0"
- },
- "provide": {
- "psr/http-client-implementation": "1.0"
- },
- "require-dev": {
- "ext-curl": "*",
- "php-http/client-integration-tests": "^3.0",
- "phpunit/phpunit": "^8.5.5 || ^9.3.5",
- "psr/log": "^1.1"
- },
- "suggest": {
- "ext-curl": "Required for CURL handler support",
- "ext-intl": "Required for Internationalized Domain Name (IDN) support",
- "psr/log": "Required for using the Log middleware"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "7.1-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Márk Sági-Kazár",
- "email": "mark.sagikazar@gmail.com",
- "homepage": "https://sagikazarmark.hu"
- }
- ],
- "description": "Guzzle is a PHP HTTP client library",
- "homepage": "http://guzzlephp.org/",
- "keywords": [
- "client",
- "curl",
- "framework",
- "http",
- "http client",
- "psr-18",
- "psr-7",
- "rest",
- "web service"
- ],
- "support": {
- "issues": "https://github.com/guzzle/guzzle/issues",
- "source": "https://github.com/guzzle/guzzle/tree/7.2.0"
- },
- "funding": [
- {
- "url": "https://github.com/GrahamCampbell",
- "type": "github"
- },
- {
- "url": "https://github.com/Nyholm",
- "type": "github"
- },
- {
- "url": "https://github.com/alexeyshockov",
- "type": "github"
- },
- {
- "url": "https://github.com/gmponos",
- "type": "github"
- }
- ],
- "time": "2020-10-10T11:47:56+00:00"
- },
- {
- "name": "guzzlehttp/promises",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/promises.git",
- "reference": "60d379c243457e073cff02bc323a2a86cb355631"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/promises/zipball/60d379c243457e073cff02bc323a2a86cb355631",
- "reference": "60d379c243457e073cff02bc323a2a86cb355631",
- "shasum": ""
- },
- "require": {
- "php": ">=5.5"
- },
- "require-dev": {
- "symfony/phpunit-bridge": "^4.4 || ^5.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Promise\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- }
- ],
- "description": "Guzzle promises library",
- "keywords": [
- "promise"
- ],
- "support": {
- "issues": "https://github.com/guzzle/promises/issues",
- "source": "https://github.com/guzzle/promises/tree/1.4.0"
- },
- "time": "2020-09-30T07:37:28+00:00"
- },
- {
- "name": "guzzlehttp/psr7",
- "version": "1.7.0",
- "source": {
- "type": "git",
- "url": "https://github.com/guzzle/psr7.git",
- "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/guzzle/psr7/zipball/53330f47520498c0ae1f61f7e2c90f55690c06a3",
- "reference": "53330f47520498c0ae1f61f7e2c90f55690c06a3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.4.0",
- "psr/http-message": "~1.0",
- "ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
- },
- "provide": {
- "psr/http-message-implementation": "1.0"
- },
- "require-dev": {
- "ext-zlib": "*",
- "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
- },
- "suggest": {
- "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.7-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "GuzzleHttp\\Psr7\\": "src/"
- },
- "files": [
- "src/functions_include.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Michael Dowling",
- "email": "mtdowling@gmail.com",
- "homepage": "https://github.com/mtdowling"
- },
- {
- "name": "Tobias Schultze",
- "homepage": "https://github.com/Tobion"
- }
- ],
- "description": "PSR-7 message implementation that also provides common utility methods",
- "keywords": [
- "http",
- "message",
- "psr-7",
- "request",
- "response",
- "stream",
- "uri",
- "url"
- ],
- "support": {
- "issues": "https://github.com/guzzle/psr7/issues",
- "source": "https://github.com/guzzle/psr7/tree/1.7.0"
- },
- "time": "2020-09-30T07:37:11+00:00"
- },
- {
- "name": "myclabs/deep-copy",
- "version": "1.10.2",
- "source": {
- "type": "git",
- "url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220",
- "shasum": ""
- },
- "require": {
- "php": "^7.1 || ^8.0"
- },
- "replace": {
- "myclabs/deep-copy": "self.version"
- },
- "require-dev": {
- "doctrine/collections": "^1.0",
- "doctrine/common": "^2.6",
- "phpunit/phpunit": "^7.1"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "DeepCopy\\": "src/DeepCopy/"
- },
- "files": [
- "src/DeepCopy/deep_copy.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "description": "Create deep copies (clones) of your objects",
- "keywords": [
- "clone",
- "copy",
- "duplicate",
- "object",
- "object graph"
- ],
- "support": {
- "issues": "https://github.com/myclabs/DeepCopy/issues",
- "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2"
- },
- "funding": [
- {
- "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy",
- "type": "tidelift"
- }
- ],
- "time": "2020-11-13T09:40:50+00:00"
- },
- {
- "name": "netresearch/jsonmapper",
- "version": "v2.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/cweiske/jsonmapper.git",
- "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/e0f1e33a71587aca81be5cffbb9746510e1fe04e",
- "reference": "e0f1e33a71587aca81be5cffbb9746510e1fe04e",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.6"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.8.35 || ~5.7 || ~6.4 || ~7.0",
- "squizlabs/php_codesniffer": "~3.5"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "JsonMapper": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "OSL-3.0"
- ],
- "authors": [
- {
- "name": "Christian Weiske",
- "email": "cweiske@cweiske.de",
- "homepage": "http://github.com/cweiske/jsonmapper/",
- "role": "Developer"
- }
- ],
- "description": "Map nested JSON structures onto PHP classes",
- "support": {
- "email": "cweiske@cweiske.de",
- "issues": "https://github.com/cweiske/jsonmapper/issues",
- "source": "https://github.com/cweiske/jsonmapper/tree/master"
- },
- "time": "2020-04-16T18:48:43+00:00"
- },
- {
- "name": "nikic/php-parser",
- "version": "v4.10.4",
- "source": {
- "type": "git",
- "url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/c6d052fc58cb876152f89f532b95a8d7907e7f0e",
- "reference": "c6d052fc58cb876152f89f532b95a8d7907e7f0e",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.0"
- },
- "require-dev": {
- "ircmaxell/php-yacc": "^0.0.7",
- "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
- },
- "bin": [
- "bin/php-parse"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.9-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "PhpParser\\": "lib/PhpParser"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Nikita Popov"
- }
- ],
- "description": "A PHP parser written in PHP",
- "keywords": [
- "parser",
- "php"
- ],
- "support": {
- "issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.10.4"
- },
- "time": "2020-12-20T10:01:03+00:00"
- },
- {
- "name": "openlss/lib-array2xml",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/nullivex/lib-array2xml.git",
- "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/nullivex/lib-array2xml/zipball/a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
- "reference": "a91f18a8dfc69ffabe5f9b068bc39bb202c81d90",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "type": "library",
- "autoload": {
- "psr-0": {
- "LSS": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "Apache-2.0"
- ],
- "authors": [
- {
- "name": "Bryan Tong",
- "email": "bryan@nullivex.com",
- "homepage": "https://www.nullivex.com"
- },
- {
- "name": "Tony Butler",
- "email": "spudz76@gmail.com",
- "homepage": "https://www.nullivex.com"
- }
- ],
- "description": "Array2XML conversion library credit to lalit.org",
- "homepage": "https://www.nullivex.com",
- "keywords": [
- "array",
- "array conversion",
- "xml",
- "xml conversion"
- ],
- "support": {
- "issues": "https://github.com/nullivex/lib-array2xml/issues",
- "source": "https://github.com/nullivex/lib-array2xml/tree/master"
- },
- "time": "2019-03-29T20:06:56+00:00"
- },
- {
- "name": "phar-io/manifest",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/manifest.git",
- "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
- "reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-phar": "*",
- "ext-xmlwriter": "*",
- "phar-io/version": "^3.0.1",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
- "support": {
- "issues": "https://github.com/phar-io/manifest/issues",
- "source": "https://github.com/phar-io/manifest/tree/master"
- },
- "time": "2020-06-27T14:33:11+00:00"
- },
- {
- "name": "phar-io/version",
- "version": "3.1.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phar-io/version.git",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182",
- "reference": "bae7c545bef187884426f042434e561ab1ddb182",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Heuer",
- "email": "sebastian@phpeople.de",
- "role": "Developer"
- },
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "Developer"
- }
- ],
- "description": "Library for handling version information and constraints",
- "support": {
- "issues": "https://github.com/phar-io/version/issues",
- "source": "https://github.com/phar-io/version/tree/3.1.0"
- },
- "time": "2021-02-23T14:00:09+00:00"
- },
- {
- "name": "php-coveralls/php-coveralls",
- "version": "v2.4.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-coveralls/php-coveralls.git",
- "reference": "909381bd40a17ae6e9076051f0d73293c1c091af"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/909381bd40a17ae6e9076051f0d73293c1c091af",
- "reference": "909381bd40a17ae6e9076051f0d73293c1c091af",
- "shasum": ""
- },
- "require": {
- "ext-json": "*",
- "ext-simplexml": "*",
- "guzzlehttp/guzzle": "^6.0 || ^7.0",
- "php": "^5.5 || ^7.0 || ^8.0",
- "psr/log": "^1.0",
- "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
- "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
- "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
- "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0 || ^7.0 || ^8.0 || ^9.0",
- "sanmai/phpunit-legacy-adapter": "^6.1 || ^8.0"
- },
- "suggest": {
- "symfony/http-kernel": "Allows Symfony integration"
- },
- "bin": [
- "bin/php-coveralls"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "PhpCoveralls\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Kitamura Satoshi",
- "email": "with.no.parachute@gmail.com",
- "homepage": "https://www.facebook.com/satooshi.jp",
- "role": "Original creator"
- },
- {
- "name": "Takashi Matsuo",
- "email": "tmatsuo@google.com"
- },
- {
- "name": "Google Inc"
- },
- {
- "name": "Dariusz Ruminski",
- "email": "dariusz.ruminski@gmail.com",
- "homepage": "https://github.com/keradus"
- },
- {
- "name": "Contributors",
- "homepage": "https://github.com/php-coveralls/php-coveralls/graphs/contributors"
- }
- ],
- "description": "PHP client library for Coveralls API",
- "homepage": "https://github.com/php-coveralls/php-coveralls",
- "keywords": [
- "ci",
- "coverage",
- "github",
- "test"
- ],
- "support": {
- "issues": "https://github.com/php-coveralls/php-coveralls/issues",
- "source": "https://github.com/php-coveralls/php-coveralls/tree/v2.4.3"
- },
- "time": "2020-12-24T09:17:03+00:00"
- },
- {
- "name": "phpdocumentor/reflection-common",
- "version": "2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-2.x": "2.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Jaap van Otterdijk",
- "email": "opensource@ijaap.nl"
- }
- ],
- "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
- "homepage": "http://www.phpdoc.org",
- "keywords": [
- "FQSEN",
- "phpDocumentor",
- "phpdoc",
- "reflection",
- "static analysis"
- ],
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues",
- "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x"
- },
- "time": "2020-06-27T09:03:43+00:00"
- },
- {
- "name": "phpdocumentor/reflection-docblock",
- "version": "5.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
- "reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
- "shasum": ""
- },
- "require": {
- "ext-filter": "*",
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.2",
- "phpdocumentor/type-resolver": "^1.3",
- "webmozart/assert": "^1.9.1"
- },
- "require-dev": {
- "mockery/mockery": "~1.3.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "5.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- },
- {
- "name": "Jaap van Otterdijk",
- "email": "account@ijaap.nl"
- }
- ],
- "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "support": {
- "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
- "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
- },
- "time": "2020-09-03T19:13:55+00:00"
- },
- {
- "name": "phpdocumentor/type-resolver",
- "version": "1.4.0",
- "source": {
- "type": "git",
- "url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
- "shasum": ""
- },
- "require": {
- "php": "^7.2 || ^8.0",
- "phpdocumentor/reflection-common": "^2.0"
- },
- "require-dev": {
- "ext-tokenizer": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "phpDocumentor\\Reflection\\": "src"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Mike van Riel",
- "email": "me@mikevanriel.com"
- }
- ],
- "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
- "support": {
- "issues": "https://github.com/phpDocumentor/TypeResolver/issues",
- "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
- },
- "time": "2020-09-17T18:55:26+00:00"
- },
- {
- "name": "phpspec/prophecy",
- "version": "1.12.2",
- "source": {
- "type": "git",
- "url": "https://github.com/phpspec/prophecy.git",
- "reference": "245710e971a030f42e08f4912863805570f23d39"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/245710e971a030f42e08f4912863805570f23d39",
- "reference": "245710e971a030f42e08f4912863805570f23d39",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.2",
- "php": "^7.2 || ~8.0, <8.1",
- "phpdocumentor/reflection-docblock": "^5.2",
- "sebastian/comparator": "^3.0 || ^4.0",
- "sebastian/recursion-context": "^3.0 || ^4.0"
- },
- "require-dev": {
- "phpspec/phpspec": "^6.0",
- "phpunit/phpunit": "^8.0 || ^9.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.11.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Prophecy\\": "src/Prophecy"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Konstantin Kudryashov",
- "email": "ever.zet@gmail.com",
- "homepage": "http://everzet.com"
- },
- {
- "name": "Marcello Duarte",
- "email": "marcello.duarte@gmail.com"
- }
- ],
- "description": "Highly opinionated mocking framework for PHP 5.3+",
- "homepage": "https://github.com/phpspec/prophecy",
- "keywords": [
- "Double",
- "Dummy",
- "fake",
- "mock",
- "spy",
- "stub"
- ],
- "support": {
- "issues": "https://github.com/phpspec/prophecy/issues",
- "source": "https://github.com/phpspec/prophecy/tree/1.12.2"
- },
- "time": "2020-12-19T10:15:11+00:00"
- },
- {
- "name": "phpunit/php-code-coverage",
- "version": "7.0.14",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bb7c9a210c72e4709cdde67f8b7362f672f2225c",
- "reference": "bb7c9a210c72e4709cdde67f8b7362f672f2225c",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-xmlwriter": "*",
- "php": ">=7.2",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-token-stream": "^3.1.1 || ^4.0",
- "sebastian/code-unit-reverse-lookup": "^1.0.1",
- "sebastian/environment": "^4.2.2",
- "sebastian/version": "^2.0.1",
- "theseer/tokenizer": "^1.1.3"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.2.2"
- },
- "suggest": {
- "ext-xdebug": "^2.7.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "7.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
- "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/7.0.14"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-12-02T13:39:03+00:00"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "2.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/4b49fb70f067272b659ef0174ff9ca40fdaa6357",
- "reference": "4b49fb70f067272b659ef0174ff9ca40fdaa6357",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
- "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/2.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T08:25:21+00:00"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "1.2.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-text-template.git",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
- "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
- },
- "time": "2015-06-21T13:50:34+00:00"
- },
- {
- "name": "phpunit/php-timer",
- "version": "2.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/2454ae1765516d20c4ffe103d85a58a9a3bd5662",
- "reference": "2454ae1765516d20c4ffe103d85a58a9a3bd5662",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-timer/issues",
- "source": "https://github.com/sebastianbergmann/php-timer/tree/2.1.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T08:20:02+00:00"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "3.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "472b687829041c24b25f475e14c2f38a09edf1c2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/472b687829041c24b25f475e14c2f38a09edf1c2",
- "reference": "472b687829041c24b25f475e14c2f38a09edf1c2",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
- "source": "https://github.com/sebastianbergmann/php-token-stream/tree/3.1.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "abandoned": true,
- "time": "2020-11-30T08:38:46+00:00"
- },
- {
- "name": "phpunit/phpunit",
- "version": "8.5.14",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "c25f79895d27b6ecd5abfa63de1606b786a461a3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c25f79895d27b6ecd5abfa63de1606b786a461a3",
- "reference": "c25f79895d27b6ecd5abfa63de1606b786a461a3",
- "shasum": ""
- },
- "require": {
- "doctrine/instantiator": "^1.3.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-xml": "*",
- "ext-xmlwriter": "*",
- "myclabs/deep-copy": "^1.10.0",
- "phar-io/manifest": "^2.0.1",
- "phar-io/version": "^3.0.2",
- "php": ">=7.2",
- "phpspec/prophecy": "^1.10.3",
- "phpunit/php-code-coverage": "^7.0.12",
- "phpunit/php-file-iterator": "^2.0.2",
- "phpunit/php-text-template": "^1.2.1",
- "phpunit/php-timer": "^2.1.2",
- "sebastian/comparator": "^3.0.2",
- "sebastian/diff": "^3.0.2",
- "sebastian/environment": "^4.2.3",
- "sebastian/exporter": "^3.1.2",
- "sebastian/global-state": "^3.0.0",
- "sebastian/object-enumerator": "^3.0.3",
- "sebastian/resource-operations": "^2.0.1",
- "sebastian/type": "^1.1.3",
- "sebastian/version": "^2.0.1"
- },
- "require-dev": {
- "ext-pdo": "*"
- },
- "suggest": {
- "ext-soap": "*",
- "ext-xdebug": "*",
- "phpunit/php-invoker": "^2.0.0"
- },
- "bin": [
- "phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "8.5-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "https://phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/phpunit/issues",
- "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.14"
- },
- "funding": [
- {
- "url": "https://phpunit.de/donate.html",
- "type": "custom"
- },
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2021-01-17T07:37:30+00:00"
- },
- {
- "name": "psr/container",
- "version": "1.0.0",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/container.git",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Container\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common Container Interface (PHP FIG PSR-11)",
- "homepage": "https://github.com/php-fig/container",
- "keywords": [
- "PSR-11",
- "container",
- "container-interface",
- "container-interop",
- "psr"
- ],
- "support": {
- "issues": "https://github.com/php-fig/container/issues",
- "source": "https://github.com/php-fig/container/tree/master"
- },
- "time": "2017-02-14T16:28:37+00:00"
- },
- {
- "name": "psr/http-client",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-client.git",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621",
- "shasum": ""
- },
- "require": {
- "php": "^7.0 || ^8.0",
- "psr/http-message": "^1.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Client\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP clients",
- "homepage": "https://github.com/php-fig/http-client",
- "keywords": [
- "http",
- "http-client",
- "psr",
- "psr-18"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-client/tree/master"
- },
- "time": "2020-06-29T06:28:15+00:00"
- },
- {
- "name": "psr/http-message",
- "version": "1.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/http-message.git",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
- "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Http\\Message\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for HTTP messages",
- "homepage": "https://github.com/php-fig/http-message",
- "keywords": [
- "http",
- "http-message",
- "psr",
- "psr-7",
- "request",
- "response"
- ],
- "support": {
- "source": "https://github.com/php-fig/http-message/tree/master"
- },
- "time": "2016-08-06T14:39:51+00:00"
- },
- {
- "name": "psr/log",
- "version": "1.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/php-fig/log.git",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/0f73288fd15629204f9d42b7055f72dacbe811fc",
- "reference": "0f73288fd15629204f9d42b7055f72dacbe811fc",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psr\\Log\\": "Psr/Log/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "PHP-FIG",
- "homepage": "http://www.php-fig.org/"
- }
- ],
- "description": "Common interface for logging libraries",
- "homepage": "https://github.com/php-fig/log",
- "keywords": [
- "log",
- "psr",
- "psr-3"
- ],
- "support": {
- "source": "https://github.com/php-fig/log/tree/1.1.3"
- },
- "time": "2020-03-23T09:12:05+00:00"
- },
- {
- "name": "ralouphie/getallheaders",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/ralouphie/getallheaders.git",
- "reference": "120b605dfeb996808c31b6477290a714d356e822"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
- "reference": "120b605dfeb996808c31b6477290a714d356e822",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "php-coveralls/php-coveralls": "^2.1",
- "phpunit/phpunit": "^5 || ^6.5"
- },
- "type": "library",
- "autoload": {
- "files": [
- "src/getallheaders.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ralph Khattar",
- "email": "ralph.khattar@gmail.com"
- }
- ],
- "description": "A polyfill for getallheaders.",
- "support": {
- "issues": "https://github.com/ralouphie/getallheaders/issues",
- "source": "https://github.com/ralouphie/getallheaders/tree/develop"
- },
- "time": "2019-03-08T08:55:37+00:00"
- },
- {
- "name": "sebastian/code-unit-reverse-lookup",
- "version": "1.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git",
- "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/1de8cd5c010cb153fcd68b8d0f64606f523f7619",
- "reference": "1de8cd5c010cb153fcd68b8d0f64606f523f7619",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Looks up which function or method a line of code belongs to",
- "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues",
- "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/1.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T08:15:22+00:00"
- },
- {
- "name": "sebastian/comparator",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/comparator.git",
- "reference": "1071dfcef776a57013124ff35e1fc41ccd294758"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/1071dfcef776a57013124ff35e1fc41ccd294758",
- "reference": "1071dfcef776a57013124ff35e1fc41ccd294758",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1",
- "sebastian/diff": "^3.0",
- "sebastian/exporter": "^3.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@2bepublished.at"
- }
- ],
- "description": "Provides the functionality to compare PHP values for equality",
- "homepage": "https://github.com/sebastianbergmann/comparator",
- "keywords": [
- "comparator",
- "compare",
- "equality"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/comparator/issues",
- "source": "https://github.com/sebastianbergmann/comparator/tree/3.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T08:04:30+00:00"
- },
- {
- "name": "sebastian/diff",
- "version": "3.0.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/diff.git",
- "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
- "reference": "14f72dd46eaf2f2293cbe79c93cc0bc43161a211",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5 || ^8.0",
- "symfony/process": "^2 || ^3.3 || ^4"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Kore Nordmann",
- "email": "mail@kore-nordmann.de"
- }
- ],
- "description": "Diff implementation",
- "homepage": "https://github.com/sebastianbergmann/diff",
- "keywords": [
- "diff",
- "udiff",
- "unidiff",
- "unified diff"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/diff/issues",
- "source": "https://github.com/sebastianbergmann/diff/tree/3.0.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:59:04+00:00"
- },
- {
- "name": "sebastian/environment",
- "version": "4.2.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/environment.git",
- "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
- "reference": "d47bbbad83711771f167c72d4e3f25f7fcc1f8b0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^7.5"
- },
- "suggest": {
- "ext-posix": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides functionality to handle HHVM/PHP environments",
- "homepage": "http://www.github.com/sebastianbergmann/environment",
- "keywords": [
- "Xdebug",
- "environment",
- "hhvm"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/environment/issues",
- "source": "https://github.com/sebastianbergmann/environment/tree/4.2.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:53:42+00:00"
- },
- {
- "name": "sebastian/exporter",
- "version": "3.1.3",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/exporter.git",
- "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/6b853149eab67d4da22291d36f5b0631c0fd856e",
- "reference": "6b853149eab67d4da22291d36f5b0631c0fd856e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "ext-mbstring": "*",
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.1.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Volker Dusch",
- "email": "github@wallbash.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- },
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Provides the functionality to export PHP variables for visualization",
- "homepage": "http://www.github.com/sebastianbergmann/exporter",
- "keywords": [
- "export",
- "exporter"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/exporter/issues",
- "source": "https://github.com/sebastianbergmann/exporter/tree/3.1.3"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:47:53+00:00"
- },
- {
- "name": "sebastian/global-state",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/global-state.git",
- "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/474fb9edb7ab891665d3bfc6317f42a0a150454b",
- "reference": "474fb9edb7ab891665d3bfc6317f42a0a150454b",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "ext-dom": "*",
- "phpunit/phpunit": "^8.0"
- },
- "suggest": {
- "ext-uopz": "*"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Snapshotting of global state",
- "homepage": "http://www.github.com/sebastianbergmann/global-state",
- "keywords": [
- "global state"
- ],
- "support": {
- "issues": "https://github.com/sebastianbergmann/global-state/issues",
- "source": "https://github.com/sebastianbergmann/global-state/tree/3.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:43:24+00:00"
- },
- {
- "name": "sebastian/object-enumerator",
- "version": "3.0.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-enumerator.git",
- "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
- "reference": "e67f6d32ebd0c749cf9d1dbd9f226c727043cdf2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0",
- "sebastian/object-reflector": "^1.1.1",
- "sebastian/recursion-context": "^3.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Traverses array structures and object graphs to enumerate all referenced objects",
- "homepage": "https://github.com/sebastianbergmann/object-enumerator/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-enumerator/issues",
- "source": "https://github.com/sebastianbergmann/object-enumerator/tree/3.0.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:40:27+00:00"
- },
- {
- "name": "sebastian/object-reflector",
- "version": "1.1.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/object-reflector.git",
- "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
- "reference": "9b8772b9cbd456ab45d4a598d2dd1a1bced6363d",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Allows reflection of object attributes, including inherited and non-public ones",
- "homepage": "https://github.com/sebastianbergmann/object-reflector/",
- "support": {
- "issues": "https://github.com/sebastianbergmann/object-reflector/issues",
- "source": "https://github.com/sebastianbergmann/object-reflector/tree/1.1.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:37:18+00:00"
- },
- {
- "name": "sebastian/recursion-context",
- "version": "3.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/recursion-context.git",
- "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/367dcba38d6e1977be014dc4b22f47a484dac7fb",
- "reference": "367dcba38d6e1977be014dc4b22f47a484dac7fb",
- "shasum": ""
- },
- "require": {
- "php": ">=7.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^6.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- },
- {
- "name": "Jeff Welch",
- "email": "whatthejeff@gmail.com"
- },
- {
- "name": "Adam Harvey",
- "email": "aharvey@php.net"
- }
- ],
- "description": "Provides functionality to recursively process PHP variables",
- "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
- "support": {
- "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
- "source": "https://github.com/sebastianbergmann/recursion-context/tree/3.0.1"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:34:24+00:00"
- },
- {
- "name": "sebastian/resource-operations",
- "version": "2.0.2",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/resource-operations.git",
- "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/31d35ca87926450c44eae7e2611d45a7a65ea8b3",
- "reference": "31d35ca87926450c44eae7e2611d45a7a65ea8b3",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de"
- }
- ],
- "description": "Provides a list of PHP built-in functions that operate on resources",
- "homepage": "https://www.github.com/sebastianbergmann/resource-operations",
- "support": {
- "issues": "https://github.com/sebastianbergmann/resource-operations/issues",
- "source": "https://github.com/sebastianbergmann/resource-operations/tree/2.0.2"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:30:19+00:00"
- },
- {
- "name": "sebastian/type",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/type.git",
- "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/0150cfbc4495ed2df3872fb31b26781e4e077eb4",
- "reference": "0150cfbc4495ed2df3872fb31b26781e4e077eb4",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2"
- },
- "require-dev": {
- "phpunit/phpunit": "^8.2"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.1-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Collection of value objects that represent the types of the PHP type system",
- "homepage": "https://github.com/sebastianbergmann/type",
- "support": {
- "issues": "https://github.com/sebastianbergmann/type/issues",
- "source": "https://github.com/sebastianbergmann/type/tree/1.1.4"
- },
- "funding": [
- {
- "url": "https://github.com/sebastianbergmann",
- "type": "github"
- }
- ],
- "time": "2020-11-30T07:25:11+00:00"
- },
- {
- "name": "sebastian/version",
- "version": "2.0.1",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/version.git",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/99732be0ddb3361e16ad77b68ba41efc8e979019",
- "reference": "99732be0ddb3361e16ad77b68ba41efc8e979019",
- "shasum": ""
- },
- "require": {
- "php": ">=5.6"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.0.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "Library that helps with managing the version number of Git-hosted PHP projects",
- "homepage": "https://github.com/sebastianbergmann/version",
- "support": {
- "issues": "https://github.com/sebastianbergmann/version/issues",
- "source": "https://github.com/sebastianbergmann/version/tree/master"
- },
- "time": "2016-10-03T07:35:21+00:00"
- },
- {
- "name": "symfony/config",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/config.git",
- "reference": "50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab",
- "reference": "50e0e1314a3b2609d32b6a5a0d0fb5342494c4ab",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/filesystem": "^4.4|^5.0",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-php80": "^1.15"
- },
- "conflict": {
- "symfony/finder": "<4.4"
- },
- "require-dev": {
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/finder": "^4.4|^5.0",
- "symfony/messenger": "^4.4|^5.0",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/yaml": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/yaml": "To use the yaml reference dumper"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Config\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Helps you find, load, combine, autofill and validate configuration values of any kind",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/config/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T10:15:41+00:00"
- },
- {
- "name": "symfony/console",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/console.git",
- "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/89d4b176d12a2946a1ae4e34906a025b7b6b135a",
- "reference": "89d4b176d12a2946a1ae4e34906a025b7b6b135a",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php73": "^1.8",
- "symfony/polyfill-php80": "^1.15",
- "symfony/service-contracts": "^1.1|^2",
- "symfony/string": "^5.1"
- },
- "conflict": {
- "symfony/dependency-injection": "<4.4",
- "symfony/dotenv": "<5.1",
- "symfony/event-dispatcher": "<4.4",
- "symfony/lock": "<4.4",
- "symfony/process": "<4.4"
- },
- "provide": {
- "psr/log-implementation": "1.0"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^4.4|^5.0",
- "symfony/dependency-injection": "^4.4|^5.0",
- "symfony/event-dispatcher": "^4.4|^5.0",
- "symfony/lock": "^4.4|^5.0",
- "symfony/process": "^4.4|^5.0",
- "symfony/var-dumper": "^4.4|^5.0"
- },
- "suggest": {
- "psr/log": "For using the console logger",
- "symfony/event-dispatcher": "",
- "symfony/lock": "",
- "symfony/process": ""
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Console\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Eases the creation of beautiful and testable command line interfaces",
- "homepage": "https://symfony.com",
- "keywords": [
- "cli",
- "command line",
- "console",
- "terminal"
- ],
- "support": {
- "source": "https://github.com/symfony/console/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-28T22:06:19+00:00"
- },
- {
- "name": "symfony/deprecation-contracts",
- "version": "v2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/deprecation-contracts.git",
- "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/5fa56b4074d1ae755beb55617ddafe6f5d78f665",
- "reference": "5fa56b4074d1ae755beb55617ddafe6f5d78f665",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "files": [
- "function.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "A generic function and convention to trigger deprecation notices",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/deprecation-contracts/tree/master"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-09-07T11:33:47+00:00"
- },
- {
- "name": "symfony/filesystem",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/filesystem.git",
- "reference": "262d033b57c73e8b59cd6e68a45c528318b15038"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/262d033b57c73e8b59cd6e68a45c528318b15038",
- "reference": "262d033b57c73e8b59cd6e68a45c528318b15038",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Filesystem\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides basic utilities for the filesystem",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/filesystem/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T10:01:46+00:00"
- },
- {
- "name": "symfony/polyfill-ctype",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/c6c942b1ac76c82448322025e084cadc56048b4e",
- "reference": "c6c942b1ac76c82448322025e084cadc56048b4e",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-ctype": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Ctype\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Gert de Pagter",
- "email": "BackEndTea@gmail.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for ctype functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "ctype",
- "polyfill",
- "portable"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-ctype/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-intl-grapheme",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-intl-grapheme.git",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "reference": "5601e09b69f26c1828b13b6bb87cb07cddba3170",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-intl": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Intl\\Grapheme\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for intl's grapheme_* functions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "grapheme",
- "intl",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-mbstring",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/5232de97ee3b75b0360528dae24e73db49566ab1",
- "reference": "5232de97ee3b75b0360528dae24e73db49566ab1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "suggest": {
- "ext-mbstring": "For best performance"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Mbstring\\": ""
- },
- "files": [
- "bootstrap.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill for the Mbstring extension",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "mbstring",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-22T09:19:47+00:00"
- },
- {
- "name": "symfony/polyfill-php73",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php73.git",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "reference": "a678b42e92f86eca04b7fa4c0f6f19d097fb69e2",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php73\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php73/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/polyfill-php80",
- "version": "v1.22.1",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php80.git",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "reference": "dc3063ba22c2a1fd2f45ed856374d79114998f91",
- "shasum": ""
- },
- "require": {
- "php": ">=7.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.22-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Php80\\": ""
- },
- "files": [
- "bootstrap.php"
- ],
- "classmap": [
- "Resources/stubs"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Ion Bazan",
- "email": "ion.bazan@gmail.com"
- },
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
- "support": {
- "source": "https://github.com/symfony/polyfill-php80/tree/v1.22.1"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-07T16:49:33+00:00"
- },
- {
- "name": "symfony/service-contracts",
- "version": "v2.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/service-contracts.git",
- "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d15da7ba4957ffb8f1747218be9e1a121fd298a1",
- "reference": "d15da7ba4957ffb8f1747218be9e1a121fd298a1",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "psr/container": "^1.0"
- },
- "suggest": {
- "symfony/service-implementation": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.2-dev"
- },
- "thanks": {
- "name": "symfony/contracts",
- "url": "https://github.com/symfony/contracts"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Contracts\\Service\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Generic abstractions related to writing services",
- "homepage": "https://symfony.com",
- "keywords": [
- "abstractions",
- "contracts",
- "decoupling",
- "interfaces",
- "interoperability",
- "standards"
- ],
- "support": {
- "source": "https://github.com/symfony/service-contracts/tree/master"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-09-07T11:33:47+00:00"
- },
- {
- "name": "symfony/stopwatch",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/stopwatch.git",
- "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/b12274acfab9d9850c52583d136a24398cdf1a0c",
- "reference": "b12274acfab9d9850c52583d136a24398cdf1a0c",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/service-contracts": "^1.0|^2"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Stopwatch\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides a way to profile code",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/stopwatch/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-27T10:15:41+00:00"
- },
- {
- "name": "symfony/string",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/string.git",
- "reference": "c95468897f408dd0aca2ff582074423dd0455122"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/c95468897f408dd0aca2ff582074423dd0455122",
- "reference": "c95468897f408dd0aca2ff582074423dd0455122",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-ctype": "~1.8",
- "symfony/polyfill-intl-grapheme": "~1.0",
- "symfony/polyfill-intl-normalizer": "~1.0",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "~1.15"
- },
- "require-dev": {
- "symfony/error-handler": "^4.4|^5.0",
- "symfony/http-client": "^4.4|^5.0",
- "symfony/translation-contracts": "^1.1|^2",
- "symfony/var-exporter": "^4.4|^5.0"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\String\\": ""
- },
- "files": [
- "Resources/functions.php"
- ],
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way",
- "homepage": "https://symfony.com",
- "keywords": [
- "grapheme",
- "i18n",
- "string",
- "unicode",
- "utf-8",
- "utf8"
- ],
- "support": {
- "source": "https://github.com/symfony/string/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-01-25T15:14:59+00:00"
- },
- {
- "name": "symfony/yaml",
- "version": "v5.2.3",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/yaml.git",
- "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/338cddc6d74929f6adf19ca5682ac4b8e109cdb0",
- "reference": "338cddc6d74929f6adf19ca5682ac4b8e109cdb0",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/deprecation-contracts": "^2.1",
- "symfony/polyfill-ctype": "~1.8"
- },
- "conflict": {
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "symfony/console": "^4.4|^5.0"
- },
- "suggest": {
- "symfony/console": "For validating YAML files using the lint command"
- },
- "bin": [
- "Resources/bin/yaml-lint"
- ],
- "type": "library",
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\Yaml\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Loads and dumps YAML files",
- "homepage": "https://symfony.com",
- "support": {
- "source": "https://github.com/symfony/yaml/tree/v5.2.3"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2021-02-03T04:42:09+00:00"
- },
- {
- "name": "theseer/tokenizer",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/theseer/tokenizer.git",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
- "reference": "75a63c33a8577608444246075ea0af0d052e452a",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-tokenizer": "*",
- "ext-xmlwriter": "*",
- "php": "^7.2 || ^8.0"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "src/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Arne Blankerts",
- "email": "arne@blankerts.de",
- "role": "Developer"
- }
- ],
- "description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
- "support": {
- "issues": "https://github.com/theseer/tokenizer/issues",
- "source": "https://github.com/theseer/tokenizer/tree/master"
- },
- "funding": [
- {
- "url": "https://github.com/theseer",
- "type": "github"
- }
- ],
- "time": "2020-07-12T23:59:07+00:00"
- },
- {
- "name": "vimeo/psalm",
- "version": "4.6.2",
- "source": {
- "type": "git",
- "url": "https://github.com/vimeo/psalm.git",
- "reference": "bca09d74adc704c4eaee36a3c3e9d379e290fc3b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/vimeo/psalm/zipball/bca09d74adc704c4eaee36a3c3e9d379e290fc3b",
- "reference": "bca09d74adc704c4eaee36a3c3e9d379e290fc3b",
- "shasum": ""
- },
- "require": {
- "amphp/amp": "^2.1",
- "amphp/byte-stream": "^1.5",
- "composer/package-versions-deprecated": "^1.8.0",
- "composer/semver": "^1.4 || ^2.0 || ^3.0",
- "composer/xdebug-handler": "^1.1",
- "dnoegel/php-xdg-base-dir": "^0.1.1",
- "ext-dom": "*",
- "ext-json": "*",
- "ext-libxml": "*",
- "ext-mbstring": "*",
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "felixfbecker/advanced-json-rpc": "^3.0.3",
- "felixfbecker/language-server-protocol": "^1.5",
- "netresearch/jsonmapper": "^1.0 || ^2.0 || ^3.0 || ^4.0",
- "nikic/php-parser": "^4.10.1",
- "openlss/lib-array2xml": "^1.0",
- "php": "^7.1|^8",
- "sebastian/diff": "^3.0 || ^4.0",
- "symfony/console": "^3.4.17 || ^4.1.6 || ^5.0",
- "webmozart/path-util": "^2.3"
- },
- "provide": {
- "psalm/psalm": "self.version"
- },
- "require-dev": {
- "amphp/amp": "^2.4.2",
- "bamarni/composer-bin-plugin": "^1.2",
- "brianium/paratest": "^4.0||^6.0",
- "ext-curl": "*",
- "php-parallel-lint/php-parallel-lint": "^1.2",
- "phpdocumentor/reflection-docblock": "^5",
- "phpmyadmin/sql-parser": "5.1.0||dev-master",
- "phpspec/prophecy": ">=1.9.0",
- "phpunit/phpunit": "^9.0",
- "psalm/plugin-phpunit": "^0.13",
- "slevomat/coding-standard": "^6.3.11",
- "squizlabs/php_codesniffer": "^3.5",
- "symfony/process": "^4.3",
- "weirdan/prophecy-shim": "^1.0 || ^2.0"
- },
- "suggest": {
- "ext-igbinary": "^2.0.5"
- },
- "bin": [
- "psalm",
- "psalm-language-server",
- "psalm-plugin",
- "psalm-refactor",
- "psalter"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "4.x-dev",
- "dev-3.x": "3.x-dev",
- "dev-2.x": "2.x-dev",
- "dev-1.x": "1.x-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Psalm\\": "src/Psalm/"
- },
- "files": [
- "src/functions.php",
- "src/spl_object_id.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Matthew Brown"
- }
- ],
- "description": "A static analysis tool for finding errors in PHP applications",
- "keywords": [
- "code",
- "inspection",
- "php"
- ],
- "support": {
- "issues": "https://github.com/vimeo/psalm/issues",
- "source": "https://github.com/vimeo/psalm/tree/4.6.2"
- },
- "time": "2021-02-26T02:24:18+00:00"
- },
- {
- "name": "webmozart/assert",
- "version": "1.9.1",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozarts/assert.git",
- "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozarts/assert/zipball/bafc69caeb4d49c39fd0779086c03a3738cbb389",
- "reference": "bafc69caeb4d49c39fd0779086c03a3738cbb389",
- "shasum": ""
- },
- "require": {
- "php": "^5.3.3 || ^7.0 || ^8.0",
- "symfony/polyfill-ctype": "^1.8"
- },
- "conflict": {
- "phpstan/phpstan": "<0.12.20",
- "vimeo/psalm": "<3.9.1"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.8.36 || ^7.5.13"
- },
- "type": "library",
- "autoload": {
- "psr-4": {
- "Webmozart\\Assert\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "Assertions to validate method input/output with nice error messages.",
- "keywords": [
- "assert",
- "check",
- "validate"
- ],
- "support": {
- "issues": "https://github.com/webmozarts/assert/issues",
- "source": "https://github.com/webmozarts/assert/tree/1.9.1"
- },
- "time": "2020-07-08T17:02:28+00:00"
- },
- {
- "name": "webmozart/path-util",
- "version": "2.3.0",
- "source": {
- "type": "git",
- "url": "https://github.com/webmozart/path-util.git",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/webmozart/path-util/zipball/d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "reference": "d939f7edc24c9a1bb9c0dee5cb05d8e859490725",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "webmozart/assert": "~1.0"
- },
- "require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Webmozart\\PathUtil\\": "src/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Bernhard Schussek",
- "email": "bschussek@gmail.com"
- }
- ],
- "description": "A robust cross-platform utility for normalizing, comparing and modifying file paths.",
- "support": {
- "issues": "https://github.com/webmozart/path-util/issues",
- "source": "https://github.com/webmozart/path-util/tree/2.3.0"
- },
- "time": "2015-12-17T08:42:14+00:00"
- }
- ],
- "aliases": [],
- "minimum-stability": "stable",
- "stability-flags": [],
- "prefer-stable": false,
- "prefer-lowest": false,
- "platform": {
- "php": ">=7.2"
- },
- "platform-dev": [],
- "plugin-api-version": "2.0.0"
-}
diff --git a/pandora_console/vendor/egulias/email-validator/src/EmailLexer.php b/pandora_console/vendor/egulias/email-validator/src/EmailLexer.php
index 41e9ea948b..6add6bd2b9 100644
--- a/pandora_console/vendor/egulias/email-validator/src/EmailLexer.php
+++ b/pandora_console/vendor/egulias/email-validator/src/EmailLexer.php
@@ -3,65 +3,69 @@
namespace Egulias\EmailValidator;
use Doctrine\Common\Lexer\AbstractLexer;
+use Doctrine\Common\Lexer\Token;
+/**
+ * @extends AbstractLexer
+ */
class EmailLexer extends AbstractLexer
{
//ASCII values
- const S_EMPTY = null;
- const C_NUL = 0;
- const S_HTAB = 9;
- const S_LF = 10;
- const S_CR = 13;
- const S_SP = 32;
- const EXCLAMATION = 33;
- const S_DQUOTE = 34;
- const NUMBER_SIGN = 35;
- const DOLLAR = 36;
- const PERCENTAGE = 37;
- const AMPERSAND = 38;
- const S_SQUOTE = 39;
- const S_OPENPARENTHESIS = 40;
- const S_CLOSEPARENTHESIS = 41;
- const ASTERISK = 42;
- const S_PLUS = 43;
- const S_COMMA = 44;
- const S_HYPHEN = 45;
- const S_DOT = 46;
- const S_SLASH = 47;
- const S_COLON = 58;
- const S_SEMICOLON = 59;
- const S_LOWERTHAN = 60;
- const S_EQUAL = 61;
- const S_GREATERTHAN = 62;
- const QUESTIONMARK = 63;
- const S_AT = 64;
- const S_OPENBRACKET = 91;
- const S_BACKSLASH = 92;
- const S_CLOSEBRACKET = 93;
- const CARET = 94;
- const S_UNDERSCORE = 95;
- const S_BACKTICK = 96;
- const S_OPENCURLYBRACES = 123;
- const S_PIPE = 124;
- const S_CLOSECURLYBRACES = 125;
- const S_TILDE = 126;
- const C_DEL = 127;
- const INVERT_QUESTIONMARK= 168;
- const INVERT_EXCLAMATION = 173;
- const GENERIC = 300;
- const S_IPV6TAG = 301;
- const INVALID = 302;
- const CRLF = 1310;
- const S_DOUBLECOLON = 5858;
- const ASCII_INVALID_FROM = 127;
- const ASCII_INVALID_TO = 199;
+ public const S_EMPTY = null;
+ public const C_NUL = 0;
+ public const S_HTAB = 9;
+ public const S_LF = 10;
+ public const S_CR = 13;
+ public const S_SP = 32;
+ public const EXCLAMATION = 33;
+ public const S_DQUOTE = 34;
+ public const NUMBER_SIGN = 35;
+ public const DOLLAR = 36;
+ public const PERCENTAGE = 37;
+ public const AMPERSAND = 38;
+ public const S_SQUOTE = 39;
+ public const S_OPENPARENTHESIS = 40;
+ public const S_CLOSEPARENTHESIS = 41;
+ public const ASTERISK = 42;
+ public const S_PLUS = 43;
+ public const S_COMMA = 44;
+ public const S_HYPHEN = 45;
+ public const S_DOT = 46;
+ public const S_SLASH = 47;
+ public const S_COLON = 58;
+ public const S_SEMICOLON = 59;
+ public const S_LOWERTHAN = 60;
+ public const S_EQUAL = 61;
+ public const S_GREATERTHAN = 62;
+ public const QUESTIONMARK = 63;
+ public const S_AT = 64;
+ public const S_OPENBRACKET = 91;
+ public const S_BACKSLASH = 92;
+ public const S_CLOSEBRACKET = 93;
+ public const CARET = 94;
+ public const S_UNDERSCORE = 95;
+ public const S_BACKTICK = 96;
+ public const S_OPENCURLYBRACES = 123;
+ public const S_PIPE = 124;
+ public const S_CLOSECURLYBRACES = 125;
+ public const S_TILDE = 126;
+ public const C_DEL = 127;
+ public const INVERT_QUESTIONMARK= 168;
+ public const INVERT_EXCLAMATION = 173;
+ public const GENERIC = 300;
+ public const S_IPV6TAG = 301;
+ public const INVALID = 302;
+ public const CRLF = 1310;
+ public const S_DOUBLECOLON = 5858;
+ public const ASCII_INVALID_FROM = 127;
+ public const ASCII_INVALID_TO = 199;
/**
* US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
*
* @var array
*/
- protected $charValue = array(
+ protected $charValue = [
'{' => self::S_OPENCURLYBRACES,
'}' => self::S_CLOSECURLYBRACES,
'(' => self::S_OPENPARENTHESIS,
@@ -105,11 +109,29 @@ class EmailLexer extends AbstractLexer
'?' => self::QUESTIONMARK,
'#' => self::NUMBER_SIGN,
'¡' => self::INVERT_EXCLAMATION,
- );
+ ];
- /**
- * @var bool
- */
+ public const INVALID_CHARS_REGEX = "/[^\p{S}\p{C}\p{Cc}]+/iu";
+
+ public const VALID_UTF8_REGEX = '/\p{Cc}+/u';
+
+ public const CATCHABLE_PATTERNS = [
+ '[a-zA-Z]+[46]?', //ASCII and domain literal
+ '[^\x00-\x7F]', //UTF-8
+ '[0-9]+',
+ '\r\n',
+ '::',
+ '\s+?',
+ '.',
+ ];
+
+ public const NON_CATCHABLE_PATTERNS = [
+ '[\xA0-\xff]+',
+ ];
+
+ public const MODIFIERS = 'iu';
+
+ /** @var bool */
protected $hasInvalidTokens = false;
/**
@@ -122,38 +144,34 @@ class EmailLexer extends AbstractLexer
/**
* The last matched/seen token.
*
- * @var array
+ * @var array|Token
*
* @psalm-suppress NonInvariantDocblockPropertyType
- * @psalm-var array{value:string, type:null|int, position:int}
- * @psalm-suppress NonInvariantDocblockPropertyType
+ * @psalm-var array{value:string, type:null|int, position:int}|Token
*/
public $token;
/**
* The next token in the input.
*
- * @var array|null
+ * @var array|Token|null
+ *
+ * @psalm-suppress NonInvariantDocblockPropertyType
+ * @psalm-var array{position: int, type: int|null|string, value: int|string}|Token|null
*/
public $lookahead;
- /**
- * @psalm-var array{value:'', type:null, position:0}
- */
+ /** @psalm-var array{value:'', type:null, position:0} */
private static $nullToken = [
'value' => '',
'type' => null,
'position' => 0,
];
- /**
- * @var string
- */
+ /** @var string */
private $accumulator = '';
- /**
- * @var bool
- */
+ /** @var bool */
private $hasToRecord = false;
public function __construct()
@@ -162,24 +180,13 @@ class EmailLexer extends AbstractLexer
$this->lookahead = null;
}
- /**
- * @return void
- */
- public function reset()
+ public function reset() : void
{
$this->hasInvalidTokens = false;
parent::reset();
$this->previous = $this->token = self::$nullToken;
}
- /**
- * @return bool
- */
- public function hasInvalidTokens()
- {
- return $this->hasInvalidTokens;
- }
-
/**
* @param int $type
* @throws \UnexpectedValueException
@@ -187,7 +194,7 @@ class EmailLexer extends AbstractLexer
*
* @psalm-suppress InvalidScalarArgument
*/
- public function find($type)
+ public function find($type) : bool
{
$search = clone $this;
$search->skipUntil($type);
@@ -198,30 +205,26 @@ class EmailLexer extends AbstractLexer
return true;
}
- /**
- * getPrevious
- *
- * @return array
- */
- public function getPrevious()
- {
- return $this->previous;
- }
-
/**
* moveNext
*
* @return boolean
*/
- public function moveNext()
+ public function moveNext() : bool
{
if ($this->hasToRecord && $this->previous === self::$nullToken) {
$this->accumulator .= $this->token['value'];
}
- $this->previous = $this->token;
+ $this->previous = $this->token instanceof Token
+ ? ['value' => $this->token->value, 'type' => $this->token->type, 'position' => $this->token->position]
+ : $this->token;
+
+ if($this->lookahead === null) {
+ $this->lookahead = self::$nullToken;
+ }
+
$hasNext = parent::moveNext();
- $this->token = $this->token ?: self::$nullToken;
if ($this->hasToRecord) {
$this->accumulator .= $this->token['value'];
@@ -230,36 +233,6 @@ class EmailLexer extends AbstractLexer
return $hasNext;
}
- /**
- * Lexical catchable patterns.
- *
- * @return string[]
- */
- protected function getCatchablePatterns()
- {
- return array(
- '[a-zA-Z]+[46]?', //ASCII and domain literal
- '[^\x00-\x7F]', //UTF-8
- '[0-9]+',
- '\r\n',
- '::',
- '\s+?',
- '.',
- );
- }
-
- /**
- * Lexical non-catchable patterns.
- *
- * @return string[]
- */
- protected function getNonCatchablePatterns()
- {
- return [
- '[\xA0-\xff]+',
- ];
- }
-
/**
* Retrieve token type. Also processes the token value if necessary.
*
@@ -272,7 +245,7 @@ class EmailLexer extends AbstractLexer
$encoded = $value;
if (mb_detect_encoding($value, 'auto', true) !== 'UTF-8') {
- $encoded = utf8_encode($value);
+ $encoded = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
}
if ($this->isValid($encoded)) {
@@ -292,51 +265,64 @@ class EmailLexer extends AbstractLexer
return self::GENERIC;
}
- protected function isInvalidChar(string $value) : bool
- {
- if(preg_match("/[^\p{S}\p{C}\p{Cc}]+/iu", $value) ) {
- return false;
- }
- return true;
- }
-
protected function isValid(string $value) : bool
{
- if (isset($this->charValue[$value])) {
- return true;
- }
-
- return false;
+ return isset($this->charValue[$value]);
}
- /**
- * @param string $value
- * @return bool
- */
- protected function isNullType($value)
+ protected function isNullType(string $value) : bool
{
- if ($value === "\0") {
- return true;
- }
+ return $value === "\0";
+ }
- return false;
+ protected function isInvalidChar(string $value) : bool
+ {
+ return !preg_match(self::INVALID_CHARS_REGEX, $value);
}
protected function isUTF8Invalid(string $value) : bool
{
- if (preg_match('/\p{Cc}+/u', $value)) {
- return true;
- }
+ return preg_match(self::VALID_UTF8_REGEX, $value) !== false;
+ }
- return false;
+ public function hasInvalidTokens() : bool
+ {
+ return $this->hasInvalidTokens;
}
/**
- * @return string
+ * getPrevious
+ *
+ * @return array
*/
- protected function getModifiers()
+ public function getPrevious() : array
{
- return 'iu';
+ return $this->previous;
+ }
+
+ /**
+ * Lexical catchable patterns.
+ *
+ * @return string[]
+ */
+ protected function getCatchablePatterns() : array
+ {
+ return self::CATCHABLE_PATTERNS;
+ }
+
+ /**
+ * Lexical non-catchable patterns.
+ *
+ * @return string[]
+ */
+ protected function getNonCatchablePatterns() : array
+ {
+ return self::NON_CATCHABLE_PATTERNS;
+ }
+
+ protected function getModifiers() : string
+ {
+ return self::MODIFIERS;
}
public function getAccumulatedValues() : string
diff --git a/pandora_console/vendor/egulias/email-validator/src/EmailParser.php b/pandora_console/vendor/egulias/email-validator/src/EmailParser.php
index c78f74a98e..352eae4a03 100644
--- a/pandora_console/vendor/egulias/email-validator/src/EmailParser.php
+++ b/pandora_console/vendor/egulias/email-validator/src/EmailParser.php
@@ -2,7 +2,6 @@
namespace Egulias\EmailValidator;
-use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Parser\LocalPart;
use Egulias\EmailValidator\Parser\DomainPart;
@@ -13,7 +12,7 @@ use Egulias\EmailValidator\Result\Reason\NoLocalPart;
class EmailParser extends Parser
{
- const EMAIL_MAX_LENGTH = 254;
+ public const EMAIL_MAX_LENGTH = 254;
/**
* @var string
diff --git a/pandora_console/vendor/egulias/email-validator/src/MessageIDParser.php b/pandora_console/vendor/egulias/email-validator/src/MessageIDParser.php
index 9b029e1438..b0b6720f8c 100644
--- a/pandora_console/vendor/egulias/email-validator/src/MessageIDParser.php
+++ b/pandora_console/vendor/egulias/email-validator/src/MessageIDParser.php
@@ -2,8 +2,6 @@
namespace Egulias\EmailValidator;
-use Egulias\EmailValidator\Parser;
-use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Result\Result;
use Egulias\EmailValidator\Parser\IDLeftPart;
use Egulias\EmailValidator\Parser\IDRightPart;
@@ -15,7 +13,7 @@ use Egulias\EmailValidator\Result\Reason\NoLocalPart;
class MessageIDParser extends Parser
{
- const EMAILID_MAX_LENGTH = 254;
+ public const EMAILID_MAX_LENGTH = 254;
/**
* @var string
@@ -90,4 +88,4 @@ class MessageIDParser extends Parser
$this->warnings[EmailTooLong::CODE] = new EmailTooLong();
}
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/Comment.php b/pandora_console/vendor/egulias/email-validator/src/Parser/Comment.php
index ffa61281f8..d6f3032fc3 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/Comment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/Comment.php
@@ -59,7 +59,8 @@ class Comment extends PartParser
if($this->openedParenthesis >= 1) {
return new InvalidEmail(new UnclosedComment(), $this->lexer->token['value']);
- } else if ($this->openedParenthesis < 0) {
+ }
+ if ($this->openedParenthesis < 0) {
return new InvalidEmail(new UnOpenedComment(), $this->lexer->token['value']);
}
@@ -100,4 +101,4 @@ class Comment extends PartParser
return true;
}
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
index c388efd65c..410032fea9 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
@@ -15,4 +15,4 @@ interface CommentStrategy
public function endOfLoopValidations(EmailLexer $lexer) : Result;
public function getWarnings() : array;
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php
index b34ce29ad8..cbbe3f201b 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php
@@ -34,4 +34,4 @@ class DomainComment implements CommentStrategy
{
return [];
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
index 73bc7b2bc3..e72319a215 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
@@ -34,4 +34,4 @@ class LocalComment implements CommentStrategy
{
return $this->warnings;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/DomainLiteral.php b/pandora_console/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
index 54a6fab9e6..e6d66d0bd8 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
@@ -22,6 +22,15 @@ use Egulias\EmailValidator\Warning\DomainLiteral as WarningDomainLiteral;
class DomainLiteral extends PartParser
{
+ public const IPV4_REGEX = '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/';
+
+ public const OBSOLETE_WARNINGS = [
+ EmailLexer::INVALID,
+ EmailLexer::C_DEL,
+ EmailLexer::S_LF,
+ EmailLexer::S_BACKSLASH
+ ];
+
public function parse() : Result
{
$this->addTagWarnings();
@@ -41,7 +50,7 @@ class DomainLiteral extends PartParser
}
if ($this->lexer->isNextTokenAny(
- array(EmailLexer::S_HTAB, EmailLexer::S_SP, $this->lexer->token['type'] === EmailLexer::CRLF)
+ array(EmailLexer::S_HTAB, EmailLexer::S_SP, EmailLexer::CRLF)
)) {
$this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
$this->parseFWS();
@@ -138,11 +147,8 @@ class DomainLiteral extends PartParser
public function convertIPv4ToIPv6(string $addressLiteralIPv4) : string
{
- $matchesIP = array();
- $IPv4Match = preg_match(
- '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/',
- $addressLiteralIPv4,
- $matchesIP);
+ $matchesIP = [];
+ $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteralIPv4, $matchesIP);
// Extract IPv4 part from the end of the address-literal (if there is one)
if ($IPv4Match > 0) {
@@ -164,11 +170,8 @@ class DomainLiteral extends PartParser
*/
protected function checkIPV4Tag($addressLiteral) : bool
{
- $matchesIP = array();
- $IPv4Match = preg_match(
- '/\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/',
- $addressLiteral,
- $matchesIP);
+ $matchesIP = [];
+ $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteral, $matchesIP);
// Extract IPv4 part from the end of the address-literal (if there is one)
@@ -186,11 +189,7 @@ class DomainLiteral extends PartParser
private function addObsoleteWarnings() : void
{
- if ($this->lexer->token['type'] === EmailLexer::INVALID ||
- $this->lexer->token['type'] === EmailLexer::C_DEL ||
- $this->lexer->token['type'] === EmailLexer::S_LF ||
- $this->lexer->token['type'] === EmailLexer::S_BACKSLASH
- ) {
+ if(in_array($this->lexer->token['type'], self::OBSOLETE_WARNINGS)) {
$this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT();
}
}
@@ -209,4 +208,4 @@ class DomainLiteral extends PartParser
}
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/DomainPart.php b/pandora_console/vendor/egulias/email-validator/src/Parser/DomainPart.php
index 4ca54f2d9e..e1f5b3bef3 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/DomainPart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/DomainPart.php
@@ -2,6 +2,7 @@
namespace Egulias\EmailValidator\Parser;
+use Doctrine\Common\Lexer\Token;
use Egulias\EmailValidator\EmailLexer;
use Egulias\EmailValidator\Warning\TLD;
use Egulias\EmailValidator\Result\Result;
@@ -24,8 +25,8 @@ use Egulias\EmailValidator\Parser\DomainLiteral as DomainLiteralParser;
class DomainPart extends PartParser
{
- const DOMAIN_MAX_LENGTH = 253;
- const LABEL_MAX_LENGTH = 63;
+ public const DOMAIN_MAX_LENGTH = 253;
+ public const LABEL_MAX_LENGTH = 63;
/**
* @var string
@@ -212,7 +213,10 @@ class DomainPart extends PartParser
return new ValidEmail();
}
- private function checkNotAllowedChars(array $token) : Result
+ /**
+ * @psalm-param array|Token $token
+ */
+ private function checkNotAllowedChars($token) : Result
{
$notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH=> true];
if (isset($notAllowed[$token['type']])) {
@@ -292,7 +296,7 @@ class DomainPart extends PartParser
private function isLabelTooLong(string $label) : bool
{
if (preg_match('/[^\x00-\x7F]/', $label)) {
- idn_to_ascii(utf8_decode($label), IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
+ idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG);
}
return strlen($label) > self::LABEL_MAX_LENGTH;
@@ -309,4 +313,4 @@ class DomainPart extends PartParser
{
return $this->domainPart;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/DoubleQuote.php b/pandora_console/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
index 19c098e858..b32e2b6b23 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
@@ -2,7 +2,6 @@
namespace Egulias\EmailValidator\Parser;
use Egulias\EmailValidator\EmailLexer;
-use Egulias\EmailValidator\Parser\Parser;
use Egulias\EmailValidator\Result\ValidEmail;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Warning\CFWSWithFWS;
@@ -19,18 +18,19 @@ class DoubleQuote extends PartParser
$validQuotedString = $this->checkDQUOTE();
if($validQuotedString->isInvalid()) return $validQuotedString;
- $special = array(
+ $special = [
EmailLexer::S_CR => true,
EmailLexer::S_HTAB => true,
EmailLexer::S_LF => true
- );
+ ];
- $invalid = array(
+ $invalid = [
EmailLexer::C_NUL => true,
EmailLexer::S_HTAB => true,
EmailLexer::S_CR => true,
EmailLexer::S_LF => true
- );
+ ];
+
$setSpecialsWarning = true;
$this->lexer->moveNext();
@@ -84,4 +84,4 @@ class DoubleQuote extends PartParser
return new ValidEmail();
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php b/pandora_console/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
index d32231e7b3..fff6ec3ef5 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
@@ -15,6 +15,14 @@ use Egulias\EmailValidator\Result\ValidEmail;
class FoldingWhiteSpace extends PartParser
{
+ public const FWS_TYPES = [
+ EmailLexer::S_SP,
+ EmailLexer::S_HTAB,
+ EmailLexer::S_CR,
+ EmailLexer::S_LF,
+ EmailLexer::CRLF
+ ];
+
public function parse() : Result
{
if (!$this->isFWS()) {
@@ -73,10 +81,6 @@ class FoldingWhiteSpace extends PartParser
return false;
}
- return $this->lexer->token['type'] === EmailLexer::S_SP ||
- $this->lexer->token['type'] === EmailLexer::S_HTAB ||
- $this->lexer->token['type'] === EmailLexer::S_CR ||
- $this->lexer->token['type'] === EmailLexer::S_LF ||
- $this->lexer->token['type'] === EmailLexer::CRLF;
+ return in_array($this->lexer->token['type'], self::FWS_TYPES);
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/IDLeftPart.php b/pandora_console/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
index abb4982b72..5fd9cdf992 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
@@ -3,7 +3,6 @@
namespace Egulias\EmailValidator\Parser;
use Egulias\EmailValidator\Result\Result;
-use Egulias\EmailValidator\Parser\LocalPart;
use Egulias\EmailValidator\Result\InvalidEmail;
use Egulias\EmailValidator\Result\Reason\CommentsInIDRight;
@@ -13,4 +12,4 @@ class IDLeftPart extends LocalPart
{
return new InvalidEmail(new CommentsInIDRight(), $this->lexer->token['value']);
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/IDRightPart.php b/pandora_console/vendor/egulias/email-validator/src/Parser/IDRightPart.php
index bcf80dd0f2..1a1268f2df 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/IDRightPart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/IDRightPart.php
@@ -12,18 +12,18 @@ class IDRightPart extends DomainPart
{
protected function validateTokens(bool $hasComments) : Result
{
- $invalidDomainTokens = array(
+ $invalidDomainTokens = [
EmailLexer::S_DQUOTE => true,
EmailLexer::S_SQUOTE => true,
EmailLexer::S_BACKTICK => true,
EmailLexer::S_SEMICOLON => true,
EmailLexer::S_GREATERTHAN => true,
EmailLexer::S_LOWERTHAN => true,
- );
+ ];
if (isset($invalidDomainTokens[$this->lexer->token['type']])) {
return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->token['value']), $this->lexer->token['value']);
}
return new ValidEmail();
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/LocalPart.php b/pandora_console/vendor/egulias/email-validator/src/Parser/LocalPart.php
index d505c6183e..154521b27f 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/LocalPart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/LocalPart.php
@@ -15,6 +15,17 @@ use Egulias\EmailValidator\Parser\CommentStrategy\LocalComment;
class LocalPart extends PartParser
{
+ public const INVALID_TOKENS = [
+ EmailLexer::S_COMMA => EmailLexer::S_COMMA,
+ EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
+ EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
+ EmailLexer::S_GREATERTHAN => EmailLexer::S_GREATERTHAN,
+ EmailLexer::S_LOWERTHAN => EmailLexer::S_LOWERTHAN,
+ EmailLexer::S_COLON => EmailLexer::S_COLON,
+ EmailLexer::S_SEMICOLON => EmailLexer::S_SEMICOLON,
+ EmailLexer::INVALID => EmailLexer::INVALID
+ ];
+
/**
* @var string
*/
@@ -88,17 +99,7 @@ class LocalPart extends PartParser
protected function validateTokens(bool $hasComments) : Result
{
- $invalidTokens = array(
- EmailLexer::S_COMMA => EmailLexer::S_COMMA,
- EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
- EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
- EmailLexer::S_GREATERTHAN => EmailLexer::S_GREATERTHAN,
- EmailLexer::S_LOWERTHAN => EmailLexer::S_LOWERTHAN,
- EmailLexer::S_COLON => EmailLexer::S_COLON,
- EmailLexer::S_SEMICOLON => EmailLexer::S_SEMICOLON,
- EmailLexer::INVALID => EmailLexer::INVALID
- );
- if (isset($invalidTokens[$this->lexer->token['type']])) {
+ if (isset(self::INVALID_TOKENS[$this->lexer->token['type']])) {
return new InvalidEmail(new ExpectingATEXT('Invalid token found'), $this->lexer->token['value']);
}
return new ValidEmail();
@@ -161,4 +162,4 @@ class LocalPart extends PartParser
return new ValidEmail();
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Parser/PartParser.php b/pandora_console/vendor/egulias/email-validator/src/Parser/PartParser.php
index fd65fc5602..a75a172acb 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Parser/PartParser.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Parser/PartParser.php
@@ -60,4 +60,4 @@ abstract class PartParser
&&
$this->lexer->token['type'] !== EmailLexer::GENERIC;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/InvalidEmail.php b/pandora_console/vendor/egulias/email-validator/src/Result/InvalidEmail.php
index 3d85e154ae..180f4d8904 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/InvalidEmail.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/InvalidEmail.php
@@ -6,7 +6,7 @@ use Egulias\EmailValidator\Result\Reason\Reason;
class InvalidEmail implements Result
{
- private $token;
+ private $token;
/**
* @var Reason
*/
@@ -43,4 +43,4 @@ class InvalidEmail implements Result
return $this->reason;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
index 76015a2d9e..96e22842f7 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
@@ -13,4 +13,4 @@ class AtextAfterCFWS implements Reason
{
return 'ATEXT found after CFWS';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php
index a0b66e71f6..185b9ebc7b 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php
@@ -4,8 +4,8 @@ namespace Egulias\EmailValidator\Result\Reason;
class CRLFAtTheEnd implements Reason
{
- const CODE = 149;
- const REASON = "CRLF at the end";
+ public const CODE = 149;
+ public const REASON = "CRLF at the end";
public function code() : int
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php
index 45999b3629..7840cc76e1 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php
@@ -13,4 +13,4 @@ class CharNotAllowed implements Reason
{
return "Character not allowed";
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php
index 93d3b56159..055f145764 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php
@@ -13,4 +13,4 @@ class CommaInDomain implements Reason
{
return "Comma ',' is not allowed in domain part";
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php
index 43a7cf7b32..6567a11028 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php
@@ -13,4 +13,4 @@ class CommentsInIDRight implements Reason
{
return 'Comments are not allowed in IDRight for message-id';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php
index 1751987339..8541c924b9 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php
@@ -10,4 +10,4 @@ abstract class DetailedReason implements Reason
{
$this->detailedDescription = $details;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
index 55f44bbafd..bcaefb68a1 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
@@ -13,4 +13,4 @@ class DomainAcceptsNoMail implements Reason
{
return 'Domain accepts no mail (Null MX, RFC7505)';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php
index 8b1135d06d..ffed86c3a6 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php
@@ -23,4 +23,4 @@ class ExceptionFound implements Reason
{
return $this->exception->getMessage();
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php
index 7deffcaffe..525e7acadb 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php
@@ -13,4 +13,4 @@ class ExpectingDomainLiteralClose implements Reason
{
return "Closing bracket ']' for domain literal not found";
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php
index bc7c5d5a3d..c464767bf8 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php
@@ -13,4 +13,4 @@ class LocalOrReservedDomain implements Reason
{
return 'Local, mDNS or reserved domain (RFC2606, RFC6762)';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php
index e217d02c95..2c966c2800 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php
@@ -13,4 +13,4 @@ class NoDNSRecord implements Reason
{
return 'No MX or A DSN record was found for this email';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/Reason.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/Reason.php
index e6810b9365..786eb9b4cb 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/Reason.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/Reason.php
@@ -13,4 +13,4 @@ interface Reason
* Short description of the result, human readable.
*/
public function description() : string;
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php
index cc7915ca36..b0a4316825 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php
@@ -11,6 +11,6 @@ class UnOpenedComment implements Reason
public function description(): string
{
- return 'Missing openning comment parentheses - https://tools.ietf.org/html/rfc5322#section-3.2.2';
+ return 'Missing opening comment parentheses - https://tools.ietf.org/html/rfc5322#section-3.2.2';
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php
index 03873dc09e..861f3bcb87 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php
@@ -23,4 +23,4 @@ class UnusualElements implements Reason
{
return 'Unusual element found, wourld render invalid in majority of cases. Element found: ' . $this->element;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/Result.php b/pandora_console/vendor/egulias/email-validator/src/Result/Result.php
index 1e16bccacc..fd13e6c687 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/Result.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/Result.php
@@ -24,4 +24,4 @@ interface Result
* Code for user land to act upon.
*/
public function code() : int;
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/SpoofEmail.php b/pandora_console/vendor/egulias/email-validator/src/Result/SpoofEmail.php
index 9f010de114..0ad449b71d 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/SpoofEmail.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/SpoofEmail.php
@@ -1,7 +1,6 @@
reason = new ReasonSpoofEmail();
parent::__construct($this->reason, '');
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Result/ValidEmail.php b/pandora_console/vendor/egulias/email-validator/src/Result/ValidEmail.php
index 4f3693a924..fdc882fac6 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Result/ValidEmail.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Result/ValidEmail.php
@@ -24,4 +24,4 @@ class ValidEmail implements Result
return 0;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php b/pandora_console/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php
index a935727840..4882b80443 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php
@@ -17,6 +17,29 @@ class DNSCheckValidation implements EmailValidation
*/
protected const DNS_RECORD_TYPES_TO_CHECK = DNS_MX + DNS_A + DNS_AAAA;
+ /**
+ * Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2),
+ * mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G)
+ */
+ public const RESERVED_DNS_TOP_LEVEL_NAMES = [
+ // Reserved Top Level DNS Names
+ 'test',
+ 'example',
+ 'invalid',
+ 'localhost',
+
+ // mDNS
+ 'local',
+
+ // Private DNS Namespaces
+ 'intranet',
+ 'internal',
+ 'private',
+ 'corp',
+ 'home',
+ 'lan',
+ ];
+
/**
* @var array
*/
@@ -32,12 +55,22 @@ class DNSCheckValidation implements EmailValidation
*/
private $mxRecords = [];
+ /**
+ * @var DNSGetRecordWrapper
+ */
+ private $dnsGetRecord;
- public function __construct()
+ public function __construct(?DNSGetRecordWrapper $dnsGetRecord = null)
{
if (!function_exists('idn_to_ascii')) {
throw new \LogicException(sprintf('The %s class requires the Intl extension.', __CLASS__));
}
+
+ if ($dnsGetRecord == null) {
+ $dnsGetRecord = new DNSGetRecordWrapper();
+ }
+
+ $this->dnsGetRecord = $dnsGetRecord;
}
public function isValid(string $email, EmailLexer $emailLexer) : bool
@@ -53,29 +86,8 @@ class DNSCheckValidation implements EmailValidation
// Get the domain parts
$hostParts = explode('.', $host);
- // Reserved Top Level DNS Names (https://tools.ietf.org/html/rfc2606#section-2),
- // mDNS and private DNS Namespaces (https://tools.ietf.org/html/rfc6762#appendix-G)
- $reservedTopLevelDnsNames = [
- // Reserved Top Level DNS Names
- 'test',
- 'example',
- 'invalid',
- 'localhost',
-
- // mDNS
- 'local',
-
- // Private DNS Namespaces
- 'intranet',
- 'internal',
- 'private',
- 'corp',
- 'home',
- 'lan',
- ];
-
$isLocalDomain = count($hostParts) <= 1;
- $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], $reservedTopLevelDnsNames, true);
+ $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], self::RESERVED_DNS_TOP_LEVEL_NAMES, true);
// Exclude reserved top level DNS names
if ($isLocalDomain || $isReservedTopLevel) {
@@ -120,27 +132,17 @@ class DNSCheckValidation implements EmailValidation
*/
private function validateDnsRecords($host) : bool
{
- // A workaround to fix https://bugs.php.net/bug.php?id=73149
- /** @psalm-suppress InvalidArgument */
- set_error_handler(
- static function (int $errorLevel, string $errorMessage): ?bool {
- throw new \RuntimeException("Unable to get DNS record for the host: $errorMessage");
- }
- );
+ $dnsRecordsResult = $this->dnsGetRecord->getRecords($host, static::DNS_RECORD_TYPES_TO_CHECK);
- try {
- // Get all MX, A and AAAA DNS records for host
- $dnsRecords = dns_get_record($host, static::DNS_RECORD_TYPES_TO_CHECK);
- } catch (\RuntimeException $exception) {
+ if ($dnsRecordsResult->withError()) {
$this->error = new InvalidEmail(new UnableToGetDNSRecord(), '');
-
return false;
- } finally {
- restore_error_handler();
}
+ $dnsRecords = $dnsRecordsResult->getRecords();
+
// No MX, A or AAAA DNS records
- if ($dnsRecords === [] || $dnsRecords === false) {
+ if ($dnsRecords === []) {
$this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
return false;
}
@@ -167,6 +169,11 @@ class DNSCheckValidation implements EmailValidation
*/
private function validateMxRecord($dnsRecord) : bool
{
+ if (!isset($dnsRecord['type'])) {
+ $this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
+ return false;
+ }
+
if ($dnsRecord['type'] !== 'MX') {
return true;
}
@@ -181,4 +188,4 @@ class DNSCheckValidation implements EmailValidation
return true;
}
-}
\ No newline at end of file
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php b/pandora_console/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php
new file mode 100644
index 0000000000..f493c5746c
--- /dev/null
+++ b/pandora_console/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php
@@ -0,0 +1,28 @@
+records = $records;
+ $this->error = $error;
+ }
+
+ public function getRecords() : array
+ {
+ return $this->records;
+ }
+
+ public function withError() : bool
+ {
+ return $this->error;
+ }
+
+
+}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php b/pandora_console/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php
index ee7c41aa03..4a031b163f 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php
@@ -9,7 +9,7 @@ class EmptyValidationList extends \InvalidArgumentException
/**
* @param int $code
*/
- public function __construct($code = 0, Exception $previous = null)
+ public function __construct($code = 0, ?Exception $previous = null)
{
parent::__construct("Empty validation list is not allowed", $code, $previous);
}
diff --git a/pandora_console/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php b/pandora_console/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
index 6debf22fdd..abafe752af 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
@@ -10,16 +10,16 @@ use Egulias\EmailValidator\Result\MultipleErrors;
class MultipleValidationWithAnd implements EmailValidation
{
/**
- * If one of validations fails, the remaining validations will be skept.
+ * If one of validations fails, the remaining validations will be skipped.
* This means MultipleErrors will only contain a single error, the first found.
*/
- const STOP_ON_ERROR = 0;
+ public const STOP_ON_ERROR = 0;
/**
* All of validations will be invoked even if one of them got failure.
* So MultipleErrors will contain all causes.
*/
- const ALLOW_ALL_ERRORS = 1;
+ public const ALLOW_ALL_ERRORS = 1;
/**
* @var EmailValidation[]
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/AddressLiteral.php b/pandora_console/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
index 77e70f7f55..474ff0e75c 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class AddressLiteral extends Warning
{
- const CODE = 12;
+ public const CODE = 12;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php b/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
index be43bbe6f6..8bac12b1ea 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class CFWSNearAt extends Warning
{
- const CODE = 49;
+ public const CODE = 49;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php b/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
index dea3450ec8..ba57601c87 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class CFWSWithFWS extends Warning
{
- const CODE = 18;
+ public const CODE = 18;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/Comment.php b/pandora_console/vendor/egulias/email-validator/src/Warning/Comment.php
index 704c2908b9..6508295e33 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/Comment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/Comment.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class Comment extends Warning
{
- const CODE = 17;
+ public const CODE = 17;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php b/pandora_console/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
index ad43bd7c97..a2578076e7 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class DeprecatedComment extends Warning
{
- const CODE = 37;
+ public const CODE = 37;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/DomainLiteral.php b/pandora_console/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
index 6f36b5e293..034388c47b 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class DomainLiteral extends Warning
{
- const CODE = 70;
+ public const CODE = 70;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/EmailTooLong.php b/pandora_console/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
index 497309dbb0..d25ad12345 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
@@ -6,7 +6,7 @@ use Egulias\EmailValidator\EmailParser;
class EmailTooLong extends Warning
{
- const CODE = 66;
+ public const CODE = 66;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
index ba2fcc01b8..3ecd5bcca6 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6BadChar extends Warning
{
- const CODE = 74;
+ public const CODE = 74;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
index 41afa78c63..3f0c2f2df1 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6ColonEnd extends Warning
{
- const CODE = 77;
+ public const CODE = 77;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
index 1bf754e30c..742fb3bd12 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6ColonStart extends Warning
{
- const CODE = 76;
+ public const CODE = 76;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
index d752caaa19..59c3037a50 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6Deprecated extends Warning
{
- const CODE = 13;
+ public const CODE = 13;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
index 4f82394996..d40660264f 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6DoubleColon extends Warning
{
- const CODE = 73;
+ public const CODE = 73;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
index a59d317f28..551bc3af11 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6GroupCount extends Warning
{
- const CODE = 72;
+ public const CODE = 72;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
index 936274c13e..7f8a410a8a 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class IPV6MaxGroups extends Warning
{
- const CODE = 75;
+ public const CODE = 75;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/LocalTooLong.php b/pandora_console/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
index 0d08d8b35c..b46b874c0c 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
@@ -4,8 +4,8 @@ namespace Egulias\EmailValidator\Warning;
class LocalTooLong extends Warning
{
- const CODE = 64;
- const LOCAL_PART_LENGTH = 64;
+ public const CODE = 64;
+ public const LOCAL_PART_LENGTH = 64;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php b/pandora_console/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
index b3c21a1f3b..bddb96be7b 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class NoDNSMXRecord extends Warning
{
- const CODE = 6;
+ public const CODE = 6;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php b/pandora_console/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
index 10f19e3340..412fd499e5 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class ObsoleteDTEXT extends Warning
{
- const CODE = 71;
+ public const CODE = 71;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedPart.php b/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedPart.php
index 36a4265a51..afa1f9ea24 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedPart.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedPart.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class QuotedPart extends Warning
{
- const CODE = 36;
+ public const CODE = 36;
/**
* @param scalar $prevToken
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedString.php b/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedString.php
index 817e4e84b0..c152ec2e23 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedString.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/QuotedString.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class QuotedString extends Warning
{
- const CODE = 11;
+ public const CODE = 11;
/**
* @param scalar $prevToken
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/TLD.php b/pandora_console/vendor/egulias/email-validator/src/Warning/TLD.php
index 2338b9f442..10cec28164 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/TLD.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/TLD.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
class TLD extends Warning
{
- const CODE = 9;
+ public const CODE = 9;
public function __construct()
{
diff --git a/pandora_console/vendor/egulias/email-validator/src/Warning/Warning.php b/pandora_console/vendor/egulias/email-validator/src/Warning/Warning.php
index bce7e7a5ae..8b39d64485 100644
--- a/pandora_console/vendor/egulias/email-validator/src/Warning/Warning.php
+++ b/pandora_console/vendor/egulias/email-validator/src/Warning/Warning.php
@@ -4,7 +4,7 @@ namespace Egulias\EmailValidator\Warning;
abstract class Warning
{
- const CODE = 0;
+ public const CODE = 0;
/**
* @var string
@@ -42,6 +42,6 @@ abstract class Warning
public function __toString()
{
- return $this->message() . " rfc: " . $this->rfcNumber . "interal code: " . static::CODE;
+ return $this->message() . " rfc: " . $this->rfcNumber . "internal code: " . static::CODE;
}
}
diff --git a/pandora_console/vendor/laravel/serializable-closure/LICENSE.md b/pandora_console/vendor/laravel/serializable-closure/LICENSE.md
new file mode 100644
index 0000000000..79810c848f
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/LICENSE.md
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) Taylor Otwell
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/pandora_console/vendor/laravel/serializable-closure/README.md b/pandora_console/vendor/laravel/serializable-closure/README.md
new file mode 100644
index 0000000000..b1efef38f5
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/README.md
@@ -0,0 +1,72 @@
+# Serializable Closure
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## Introduction
+
+> This project is a fork of the excellent [opis/closure: 3.x](https://github.com/opis/closure) package. At Laravel, we decided to fork this package as the upcoming version [4.x](https://github.com/opis/closure) is a complete rewrite on top of the [FFI extension](https://www.php.net/manual/en/book.ffi.php). As Laravel is a web framework, and FFI is not enabled by default in web requests, this fork allows us to keep using the `3.x` series while adding support for new PHP versions.
+
+Laravel Serializable Closure provides an easy and secure way to **serialize closures in PHP**.
+
+## Official Documentation
+
+### Installation
+
+> **Requires [PHP 7.4+](https://php.net/releases/)**
+
+First, install Laravel Serializable Closure via the [Composer](https://getcomposer.org/) package manager:
+
+```bash
+composer require laravel/serializable-closure
+```
+
+### Usage
+
+You may serialize a closure this way:
+
+```php
+use Laravel\SerializableClosure\SerializableClosure;
+
+$closure = fn () => 'james';
+
+// Recommended
+SerializableClosure::setSecretKey('secret');
+
+$serialized = serialize(new SerializableClosure($closure));
+$closure = unserialize($serialized)->getClosure();
+
+echo $closure(); // james;
+```
+
+### Caveats
+
+1. Creating **anonymous classes** within closures is not supported.
+2. Using attributes within closures is not supported.
+3. Serializing closures on REPL environments such as Laravel Tinker is not supported.
+
+## Contributing
+
+Thank you for considering contributing to Serializable Closure! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
+
+## Code of Conduct
+
+In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
+
+## Security Vulnerabilities
+
+Please review [our security policy](https://github.com/laravel/serializable-closure/security/policy) on how to report security vulnerabilities.
+
+## License
+
+Serializable Closure is open-sourced software licensed under the [MIT license](LICENSE.md).
diff --git a/pandora_console/vendor/laravel/serializable-closure/composer.json b/pandora_console/vendor/laravel/serializable-closure/composer.json
new file mode 100644
index 0000000000..7142366b1e
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/composer.json
@@ -0,0 +1,52 @@
+{
+ "name": "laravel/serializable-closure",
+ "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.",
+ "keywords": ["laravel", "Serializable", "closure"],
+ "license": "MIT",
+ "support": {
+ "issues": "https://github.com/laravel/serializable-closure/issues",
+ "source": "https://github.com/laravel/serializable-closure"
+ },
+ "authors": [
+ {
+ "name": "Taylor Otwell",
+ "email": "taylor@laravel.com"
+ },
+ {
+ "name": "Nuno Maduro",
+ "email": "nuno@laravel.com"
+ }
+ ],
+ "require": {
+ "php": "^7.3|^8.0"
+ },
+ "require-dev": {
+ "nesbot/carbon": "^2.61",
+ "pestphp/pest": "^1.21.3",
+ "phpstan/phpstan": "^1.8.2",
+ "symfony/var-dumper": "^5.4.11"
+ },
+ "autoload": {
+ "psr-4": {
+ "Laravel\\SerializableClosure\\": "src/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/"
+ }
+ },
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "config": {
+ "sort-packages": true,
+ "allow-plugins": {
+ "pestphp/pest-plugin": true
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Contracts/Serializable.php b/pandora_console/vendor/laravel/serializable-closure/src/Contracts/Serializable.php
new file mode 100644
index 0000000000..1a62922eaa
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Contracts/Serializable.php
@@ -0,0 +1,20 @@
+serializable = Serializers\Signed::$signer
+ ? new Serializers\Signed($closure)
+ : new Serializers\Native($closure);
+ }
+
+ /**
+ * Resolve the closure with the given arguments.
+ *
+ * @return mixed
+ */
+ public function __invoke()
+ {
+ if (\PHP_VERSION_ID < 70400) {
+ throw new PhpVersionNotSupportedException();
+ }
+
+ return call_user_func_array($this->serializable, func_get_args());
+ }
+
+ /**
+ * Gets the closure.
+ *
+ * @return \Closure
+ */
+ public function getClosure()
+ {
+ if (\PHP_VERSION_ID < 70400) {
+ throw new PhpVersionNotSupportedException();
+ }
+
+ return $this->serializable->getClosure();
+ }
+
+ /**
+ * Create a new unsigned serializable closure instance.
+ *
+ * @param Closure $closure
+ * @return \Laravel\SerializableClosure\UnsignedSerializableClosure
+ */
+ public static function unsigned(Closure $closure)
+ {
+ return new UnsignedSerializableClosure($closure);
+ }
+
+ /**
+ * Sets the serializable closure secret key.
+ *
+ * @param string|null $secret
+ * @return void
+ */
+ public static function setSecretKey($secret)
+ {
+ Serializers\Signed::$signer = $secret
+ ? new Hmac($secret)
+ : null;
+ }
+
+ /**
+ * Sets the serializable closure secret key.
+ *
+ * @param \Closure|null $transformer
+ * @return void
+ */
+ public static function transformUseVariablesUsing($transformer)
+ {
+ Serializers\Native::$transformUseVariables = $transformer;
+ }
+
+ /**
+ * Sets the serializable closure secret key.
+ *
+ * @param \Closure|null $resolver
+ * @return void
+ */
+ public static function resolveUseVariablesUsing($resolver)
+ {
+ Serializers\Native::$resolveUseVariables = $resolver;
+ }
+
+ /**
+ * Get the serializable representation of the closure.
+ *
+ * @return array
+ */
+ public function __serialize()
+ {
+ return [
+ 'serializable' => $this->serializable,
+ ];
+ }
+
+ /**
+ * Restore the closure after serialization.
+ *
+ * @param array $data
+ * @return void
+ *
+ * @throws \Laravel\SerializableClosure\Exceptions\InvalidSignatureException
+ */
+ public function __unserialize($data)
+ {
+ if (Signed::$signer && ! $data['serializable'] instanceof Signed) {
+ throw new InvalidSignatureException();
+ }
+
+ $this->serializable = $data['serializable'];
+ }
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Native.php b/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Native.php
new file mode 100644
index 0000000000..4a04b981e2
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Native.php
@@ -0,0 +1,514 @@
+closure = $closure;
+ }
+
+ /**
+ * Resolve the closure with the given arguments.
+ *
+ * @return mixed
+ */
+ public function __invoke()
+ {
+ return call_user_func_array($this->closure, func_get_args());
+ }
+
+ /**
+ * Gets the closure.
+ *
+ * @return \Closure
+ */
+ public function getClosure()
+ {
+ return $this->closure;
+ }
+
+ /**
+ * Get the serializable representation of the closure.
+ *
+ * @return array
+ */
+ public function __serialize()
+ {
+ if ($this->scope === null) {
+ $this->scope = new ClosureScope();
+ $this->scope->toSerialize++;
+ }
+
+ $this->scope->serializations++;
+
+ $scope = $object = null;
+ $reflector = $this->getReflector();
+
+ if ($reflector->isBindingRequired()) {
+ $object = $reflector->getClosureThis();
+
+ static::wrapClosures($object, $this->scope);
+ }
+
+ if ($scope = $reflector->getClosureScopeClass()) {
+ $scope = $scope->name;
+ }
+
+ $this->reference = spl_object_hash($this->closure);
+
+ $this->scope[$this->closure] = $this;
+
+ $use = $reflector->getUseVariables();
+
+ if (static::$transformUseVariables) {
+ $use = call_user_func(static::$transformUseVariables, $reflector->getUseVariables());
+ }
+
+ $code = $reflector->getCode();
+
+ $this->mapByReference($use);
+
+ $data = [
+ 'use' => $use,
+ 'function' => $code,
+ 'scope' => $scope,
+ 'this' => $object,
+ 'self' => $this->reference,
+ ];
+
+ if (! --$this->scope->serializations && ! --$this->scope->toSerialize) {
+ $this->scope = null;
+ }
+
+ return $data;
+ }
+
+ /**
+ * Restore the closure after serialization.
+ *
+ * @param array $data
+ * @return void
+ */
+ public function __unserialize($data)
+ {
+ ClosureStream::register();
+
+ $this->code = $data;
+ unset($data);
+
+ $this->code['objects'] = [];
+
+ if ($this->code['use']) {
+ $this->scope = new ClosureScope();
+
+ if (static::$resolveUseVariables) {
+ $this->code['use'] = call_user_func(static::$resolveUseVariables, $this->code['use']);
+ }
+
+ $this->mapPointers($this->code['use']);
+
+ extract($this->code['use'], EXTR_OVERWRITE | EXTR_REFS);
+
+ $this->scope = null;
+ }
+
+ $this->closure = include ClosureStream::STREAM_PROTO.'://'.$this->code['function'];
+
+ if ($this->code['this'] === $this) {
+ $this->code['this'] = null;
+ }
+
+ $this->closure = $this->closure->bindTo($this->code['this'], $this->code['scope']);
+
+ if (! empty($this->code['objects'])) {
+ foreach ($this->code['objects'] as $item) {
+ $item['property']->setValue($item['instance'], $item['object']->getClosure());
+ }
+ }
+
+ $this->code = $this->code['function'];
+ }
+
+ /**
+ * Ensures the given closures are serializable.
+ *
+ * @param mixed $data
+ * @param \Laravel\SerializableClosure\Support\ClosureScope $storage
+ * @return void
+ */
+ public static function wrapClosures(&$data, $storage)
+ {
+ if ($data instanceof Closure) {
+ $data = new static($data);
+ } elseif (is_array($data)) {
+ if (isset($data[self::ARRAY_RECURSIVE_KEY])) {
+ return;
+ }
+
+ $data[self::ARRAY_RECURSIVE_KEY] = true;
+
+ foreach ($data as $key => &$value) {
+ if ($key === self::ARRAY_RECURSIVE_KEY) {
+ continue;
+ }
+ static::wrapClosures($value, $storage);
+ }
+
+ unset($value);
+ unset($data[self::ARRAY_RECURSIVE_KEY]);
+ } elseif ($data instanceof \stdClass) {
+ if (isset($storage[$data])) {
+ $data = $storage[$data];
+
+ return;
+ }
+
+ $data = $storage[$data] = clone $data;
+
+ foreach ($data as &$value) {
+ static::wrapClosures($value, $storage);
+ }
+
+ unset($value);
+ } elseif (is_object($data) && ! $data instanceof static && ! $data instanceof UnitEnum) {
+ if (isset($storage[$data])) {
+ $data = $storage[$data];
+
+ return;
+ }
+
+ $instance = $data;
+ $reflection = new ReflectionObject($instance);
+
+ if (! $reflection->isUserDefined()) {
+ $storage[$instance] = $data;
+
+ return;
+ }
+
+ $storage[$instance] = $data = $reflection->newInstanceWithoutConstructor();
+
+ do {
+ if (! $reflection->isUserDefined()) {
+ break;
+ }
+
+ foreach ($reflection->getProperties() as $property) {
+ if ($property->isStatic() || ! $property->getDeclaringClass()->isUserDefined()) {
+ continue;
+ }
+
+ $property->setAccessible(true);
+
+ if (PHP_VERSION >= 7.4 && ! $property->isInitialized($instance)) {
+ continue;
+ }
+
+ $value = $property->getValue($instance);
+
+ if (is_array($value) || is_object($value)) {
+ static::wrapClosures($value, $storage);
+ }
+
+ $property->setValue($data, $value);
+ }
+ } while ($reflection = $reflection->getParentClass());
+ }
+ }
+
+ /**
+ * Gets the closure's reflector.
+ *
+ * @return \Laravel\SerializableClosure\Support\ReflectionClosure
+ */
+ public function getReflector()
+ {
+ if ($this->reflector === null) {
+ $this->code = null;
+ $this->reflector = new ReflectionClosure($this->closure);
+ }
+
+ return $this->reflector;
+ }
+
+ /**
+ * Internal method used to map closure pointers.
+ *
+ * @param mixed $data
+ * @return void
+ */
+ protected function mapPointers(&$data)
+ {
+ $scope = $this->scope;
+
+ if ($data instanceof static) {
+ $data = &$data->closure;
+ } elseif (is_array($data)) {
+ if (isset($data[self::ARRAY_RECURSIVE_KEY])) {
+ return;
+ }
+
+ $data[self::ARRAY_RECURSIVE_KEY] = true;
+
+ foreach ($data as $key => &$value) {
+ if ($key === self::ARRAY_RECURSIVE_KEY) {
+ continue;
+ } elseif ($value instanceof static) {
+ $data[$key] = &$value->closure;
+ } elseif ($value instanceof SelfReference && $value->hash === $this->code['self']) {
+ $data[$key] = &$this->closure;
+ } else {
+ $this->mapPointers($value);
+ }
+ }
+
+ unset($value);
+ unset($data[self::ARRAY_RECURSIVE_KEY]);
+ } elseif ($data instanceof \stdClass) {
+ if (isset($scope[$data])) {
+ return;
+ }
+
+ $scope[$data] = true;
+
+ foreach ($data as $key => &$value) {
+ if ($value instanceof SelfReference && $value->hash === $this->code['self']) {
+ $data->{$key} = &$this->closure;
+ } elseif (is_array($value) || is_object($value)) {
+ $this->mapPointers($value);
+ }
+ }
+
+ unset($value);
+ } elseif (is_object($data) && ! ($data instanceof Closure)) {
+ if (isset($scope[$data])) {
+ return;
+ }
+
+ $scope[$data] = true;
+ $reflection = new ReflectionObject($data);
+
+ do {
+ if (! $reflection->isUserDefined()) {
+ break;
+ }
+
+ foreach ($reflection->getProperties() as $property) {
+ if ($property->isStatic() || ! $property->getDeclaringClass()->isUserDefined()) {
+ continue;
+ }
+
+ $property->setAccessible(true);
+
+ if (PHP_VERSION >= 7.4 && ! $property->isInitialized($data)) {
+ continue;
+ }
+
+ $item = $property->getValue($data);
+
+ if ($item instanceof SerializableClosure || $item instanceof UnsignedSerializableClosure || ($item instanceof SelfReference && $item->hash === $this->code['self'])) {
+ $this->code['objects'][] = [
+ 'instance' => $data,
+ 'property' => $property,
+ 'object' => $item instanceof SelfReference ? $this : $item,
+ ];
+ } elseif (is_array($item) || is_object($item)) {
+ $this->mapPointers($item);
+ $property->setValue($data, $item);
+ }
+ }
+ } while ($reflection = $reflection->getParentClass());
+ }
+ }
+
+ /**
+ * Internal method used to map closures by reference.
+ *
+ * @param mixed $data
+ * @return void
+ */
+ protected function mapByReference(&$data)
+ {
+ if ($data instanceof Closure) {
+ if ($data === $this->closure) {
+ $data = new SelfReference($this->reference);
+
+ return;
+ }
+
+ if (isset($this->scope[$data])) {
+ $data = $this->scope[$data];
+
+ return;
+ }
+
+ $instance = new static($data);
+
+ $instance->scope = $this->scope;
+
+ $data = $this->scope[$data] = $instance;
+ } elseif (is_array($data)) {
+ if (isset($data[self::ARRAY_RECURSIVE_KEY])) {
+ return;
+ }
+
+ $data[self::ARRAY_RECURSIVE_KEY] = true;
+
+ foreach ($data as $key => &$value) {
+ if ($key === self::ARRAY_RECURSIVE_KEY) {
+ continue;
+ }
+
+ $this->mapByReference($value);
+ }
+
+ unset($value);
+ unset($data[self::ARRAY_RECURSIVE_KEY]);
+ } elseif ($data instanceof \stdClass) {
+ if (isset($this->scope[$data])) {
+ $data = $this->scope[$data];
+
+ return;
+ }
+
+ $instance = $data;
+ $this->scope[$instance] = $data = clone $data;
+
+ foreach ($data as &$value) {
+ $this->mapByReference($value);
+ }
+
+ unset($value);
+ } elseif (is_object($data) && ! $data instanceof SerializableClosure && ! $data instanceof UnsignedSerializableClosure) {
+ if (isset($this->scope[$data])) {
+ $data = $this->scope[$data];
+
+ return;
+ }
+
+ $instance = $data;
+
+ if ($data instanceof DateTimeInterface) {
+ $this->scope[$instance] = $data;
+
+ return;
+ }
+
+ if ($data instanceof UnitEnum) {
+ $this->scope[$instance] = $data;
+
+ return;
+ }
+
+ $reflection = new ReflectionObject($data);
+
+ if (! $reflection->isUserDefined()) {
+ $this->scope[$instance] = $data;
+
+ return;
+ }
+
+ $this->scope[$instance] = $data = $reflection->newInstanceWithoutConstructor();
+
+ do {
+ if (! $reflection->isUserDefined()) {
+ break;
+ }
+
+ foreach ($reflection->getProperties() as $property) {
+ if ($property->isStatic() || ! $property->getDeclaringClass()->isUserDefined()) {
+ continue;
+ }
+
+ $property->setAccessible(true);
+
+ if (PHP_VERSION >= 7.4 && ! $property->isInitialized($instance)) {
+ continue;
+ }
+
+ $value = $property->getValue($instance);
+
+ if (is_array($value) || is_object($value)) {
+ $this->mapByReference($value);
+ }
+
+ $property->setValue($data, $value);
+ }
+ } while ($reflection = $reflection->getParentClass());
+ }
+ }
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Signed.php b/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Signed.php
new file mode 100644
index 0000000000..391d20d67a
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Serializers/Signed.php
@@ -0,0 +1,91 @@
+closure = $closure;
+ }
+
+ /**
+ * Resolve the closure with the given arguments.
+ *
+ * @return mixed
+ */
+ public function __invoke()
+ {
+ return call_user_func_array($this->closure, func_get_args());
+ }
+
+ /**
+ * Gets the closure.
+ *
+ * @return \Closure
+ */
+ public function getClosure()
+ {
+ return $this->closure;
+ }
+
+ /**
+ * Get the serializable representation of the closure.
+ *
+ * @return array
+ */
+ public function __serialize()
+ {
+ if (! static::$signer) {
+ throw new MissingSecretKeyException();
+ }
+
+ return static::$signer->sign(
+ serialize(new Native($this->closure))
+ );
+ }
+
+ /**
+ * Restore the closure after serialization.
+ *
+ * @param array $signature
+ * @return void
+ *
+ * @throws \Laravel\SerializableClosure\Exceptions\InvalidSignatureException
+ */
+ public function __unserialize($signature)
+ {
+ if (static::$signer && ! static::$signer->verify($signature)) {
+ throw new InvalidSignatureException();
+ }
+
+ /** @var \Laravel\SerializableClosure\Contracts\Serializable $serializable */
+ $serializable = unserialize($signature['serializable']);
+
+ $this->closure = $serializable->getClosure();
+ }
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Signers/Hmac.php b/pandora_console/vendor/laravel/serializable-closure/src/Signers/Hmac.php
new file mode 100644
index 0000000000..d94b0a2a30
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Signers/Hmac.php
@@ -0,0 +1,53 @@
+secret = $secret;
+ }
+
+ /**
+ * Sign the given serializable.
+ *
+ * @param string $serialized
+ * @return array
+ */
+ public function sign($serialized)
+ {
+ return [
+ 'serializable' => $serialized,
+ 'hash' => base64_encode(hash_hmac('sha256', $serialized, $this->secret, true)),
+ ];
+ }
+
+ /**
+ * Verify the given signature.
+ *
+ * @param array $signature
+ * @return bool
+ */
+ public function verify($signature)
+ {
+ return hash_equals(base64_encode(
+ hash_hmac('sha256', $signature['serializable'], $this->secret, true)
+ ), $signature['hash']);
+ }
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Support/ClosureScope.php b/pandora_console/vendor/laravel/serializable-closure/src/Support/ClosureScope.php
new file mode 100644
index 0000000000..64ca19a3c8
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Support/ClosureScope.php
@@ -0,0 +1,22 @@
+content = "length = strlen($this->content);
+
+ return true;
+ }
+
+ /**
+ * Read from stream.
+ *
+ * @param int $count
+ * @return string
+ */
+ public function stream_read($count)
+ {
+ $value = substr($this->content, $this->pointer, $count);
+
+ $this->pointer += $count;
+
+ return $value;
+ }
+
+ /**
+ * Tests for end-of-file on a file pointer.
+ *
+ * @return bool
+ */
+ public function stream_eof()
+ {
+ return $this->pointer >= $this->length;
+ }
+
+ /**
+ * Change stream options.
+ *
+ * @param int $option
+ * @param int $arg1
+ * @param int $arg2
+ * @return bool
+ */
+ public function stream_set_option($option, $arg1, $arg2)
+ {
+ return false;
+ }
+
+ /**
+ * Retrieve information about a file resource.
+ *
+ * @return array|bool
+ */
+ public function stream_stat()
+ {
+ $stat = stat(__FILE__);
+ // @phpstan-ignore-next-line
+ $stat[7] = $stat['size'] = $this->length;
+
+ return $stat;
+ }
+
+ /**
+ * Retrieve information about a file.
+ *
+ * @param string $path
+ * @param int $flags
+ * @return array|bool
+ */
+ public function url_stat($path, $flags)
+ {
+ $stat = stat(__FILE__);
+ // @phpstan-ignore-next-line
+ $stat[7] = $stat['size'] = $this->length;
+
+ return $stat;
+ }
+
+ /**
+ * Seeks to specific location in a stream.
+ *
+ * @param int $offset
+ * @param int $whence
+ * @return bool
+ */
+ public function stream_seek($offset, $whence = SEEK_SET)
+ {
+ $crt = $this->pointer;
+
+ switch ($whence) {
+ case SEEK_SET:
+ $this->pointer = $offset;
+ break;
+ case SEEK_CUR:
+ $this->pointer += $offset;
+ break;
+ case SEEK_END:
+ $this->pointer = $this->length + $offset;
+ break;
+ }
+
+ if ($this->pointer < 0 || $this->pointer >= $this->length) {
+ $this->pointer = $crt;
+
+ return false;
+ }
+
+ return true;
+ }
+
+ /**
+ * Retrieve the current position of a stream.
+ *
+ * @return int
+ */
+ public function stream_tell()
+ {
+ return $this->pointer;
+ }
+
+ /**
+ * Registers the stream.
+ *
+ * @return void
+ */
+ public static function register()
+ {
+ if (! static::$isRegistered) {
+ static::$isRegistered = stream_wrapper_register(static::STREAM_PROTO, __CLASS__);
+ }
+ }
+}
diff --git a/pandora_console/vendor/opis/closure/src/ReflectionClosure.php b/pandora_console/vendor/laravel/serializable-closure/src/Support/ReflectionClosure.php
similarity index 78%
rename from pandora_console/vendor/opis/closure/src/ReflectionClosure.php
rename to pandora_console/vendor/laravel/serializable-closure/src/Support/ReflectionClosure.php
index 1f6a8322d9..a0d3707527 100644
--- a/pandora_console/vendor/opis/closure/src/ReflectionClosure.php
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Support/ReflectionClosure.php
@@ -1,15 +1,11 @@
isStaticClosure === null) {
$this->isStaticClosure = strtolower(substr($this->getCode(), 0, 6)) === 'static';
@@ -55,13 +53,20 @@ class ReflectionClosure extends ReflectionFunction
return $this->isStaticClosure;
}
+ /**
+ * Checks if the closure is a "short closure".
+ *
+ * @return bool
+ */
public function isShortClosure()
{
if ($this->isShortClosure === null) {
$code = $this->getCode();
+
if ($this->isStatic()) {
$code = substr($code, 6);
}
+
$this->isShortClosure = strtolower(substr(trim($code), 0, 2)) === 'fn';
}
@@ -69,11 +74,13 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the closure's code.
+ *
* @return string
*/
public function getCode()
{
- if($this->code !== null){
+ if ($this->code !== null) {
return $this->code;
}
@@ -83,21 +90,21 @@ class ReflectionClosure extends ReflectionFunction
$className = null;
if (null !== $className = $this->getClosureScopeClass()) {
- $className = '\\' . trim($className->getName(), '\\');
+ $className = '\\'.trim($className->getName(), '\\');
}
$builtin_types = self::getBuiltinTypes();
$class_keywords = ['self', 'static', 'parent'];
- $ns = $this->getNamespaceName();
- $nsf = $ns == '' ? '' : ($ns[0] == '\\' ? $ns : '\\' . $ns);
+ $ns = $this->getClosureNamespaceName();
+ $nsf = $ns == '' ? '' : ($ns[0] == '\\' ? $ns : '\\'.$ns);
$_file = var_export($fileName, true);
$_dir = var_export(dirname($fileName), true);
$_namespace = var_export($ns, true);
- $_class = var_export(trim($className, '\\'), true);
- $_function = $ns . ($ns == '' ? '' : '\\') . '{closure}';
- $_method = ($className == '' ? '' : trim($className, '\\') . '::') . $_function;
+ $_class = var_export(trim($className ?: '', '\\'), true);
+ $_function = $ns.($ns == '' ? '' : '\\').'{closure}';
+ $_method = ($className == '' ? '' : trim($className, '\\').'::').$_function;
$_function = var_export($_function, true);
$_method = var_export($_method, true);
$_trait = null;
@@ -105,28 +112,35 @@ class ReflectionClosure extends ReflectionFunction
$tokens = $this->getTokens();
$state = $lastState = 'start';
$inside_structure = false;
+ $isFirstClassCallable = false;
$isShortClosure = false;
+
$inside_structure_mark = 0;
$open = 0;
$code = '';
$id_start = $id_start_ci = $id_name = $context = '';
$classes = $functions = $constants = null;
- $use = array();
+ $use = [];
$lineAdd = 0;
$isUsingScope = false;
$isUsingThisObject = false;
- for($i = 0, $l = count($tokens); $i < $l; $i++) {
+ for ($i = 0, $l = count($tokens); $i < $l; $i++) {
$token = $tokens[$i];
+
switch ($state) {
case 'start':
if ($token[0] === T_FUNCTION || $token[0] === T_STATIC) {
$code .= $token[1];
+
$state = $token[0] === T_FUNCTION ? 'function' : 'static';
} elseif ($token[0] === T_FN) {
$isShortClosure = true;
$code .= $token[1];
$state = 'closure_args';
+ } elseif ($token[0] === T_PUBLIC || $token[0] === T_PROTECTED || $token[0] === T_PRIVATE) {
+ $code = '';
+ $isFirstClassCallable = true;
}
break;
case 'static':
@@ -145,8 +159,13 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'function':
- switch ($token[0]){
+ switch ($token[0]) {
case T_STRING:
+ if ($isFirstClassCallable) {
+ $state = 'closure_args';
+ break;
+ }
+
$code = '';
$state = 'named_function';
break;
@@ -159,7 +178,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'named_function':
- if($token[0] === T_FUNCTION || $token[0] === T_STATIC){
+ if ($token[0] === T_FUNCTION || $token[0] === T_STATIC) {
$code = $token[1];
$state = $token[0] === T_FUNCTION ? 'function' : 'static';
} elseif ($token[0] === T_FN) {
@@ -169,9 +188,9 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'closure_args':
- switch ($token[0]){
+ switch ($token[0]) {
case T_NAME_QUALIFIED:
- list($id_start, $id_start_ci, $id_name) = $this->parseNameQualified($token[1]);
+ [$id_start, $id_start_ci, $id_name] = $this->parseNameQualified($token[1]);
$context = 'args';
$state = 'id_name';
$lastState = 'closure_args';
@@ -209,7 +228,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'use':
- switch ($token[0]){
+ switch ($token[0]) {
case T_VARIABLE:
$use[] = substr($token[1], 1);
$code .= $token[1];
@@ -229,7 +248,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'return':
- switch ($token[0]){
+ switch ($token[0]) {
case T_WHITESPACE:
case T_COMMENT:
case T_DOC_COMMENT:
@@ -245,7 +264,7 @@ class ReflectionClosure extends ReflectionFunction
$lastState = 'return';
break 2;
case T_NAME_QUALIFIED:
- list($id_start, $id_start_ci, $id_name) = $this->parseNameQualified($token[1]);
+ [$id_start, $id_start_ci, $id_name] = $this->parseNameQualified($token[1]);
$context = 'return_type';
$state = 'id_name';
$lastState = 'return';
@@ -267,7 +286,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'closure':
- switch ($token[0]){
+ switch ($token[0]) {
case T_CURLY_OPEN:
case T_DOLLAR_OPEN_CURLY_BRACES:
case '{':
@@ -276,10 +295,10 @@ class ReflectionClosure extends ReflectionFunction
break;
case '}':
$code .= '}';
- if(--$open === 0 && !$isShortClosure){
+ if (--$open === 0 && ! $isShortClosure) {
break 3;
} elseif ($inside_structure) {
- $inside_structure = !($open === $inside_structure_mark);
+ $inside_structure = ! ($open === $inside_structure_mark);
}
break;
case '(':
@@ -295,7 +314,7 @@ class ReflectionClosure extends ReflectionFunction
if ($open === 0) {
break 3;
}
- --$open;
+ $open--;
}
$code .= $token[0];
break;
@@ -330,18 +349,18 @@ class ReflectionClosure extends ReflectionFunction
case T_COMMENT:
if (substr($token[1], 0, 8) === '#trackme') {
$timestamp = time();
- $code .= '/**' . PHP_EOL;
- $code .= '* Date : ' . date(DATE_W3C, $timestamp) . PHP_EOL;
- $code .= '* Timestamp : ' . $timestamp . PHP_EOL;
- $code .= '* Line : ' . ($line + 1) . PHP_EOL;
- $code .= '* File : ' . $_file . PHP_EOL . '*/' . PHP_EOL;
+ $code .= '/**'.PHP_EOL;
+ $code .= '* Date : '.date(DATE_W3C, $timestamp).PHP_EOL;
+ $code .= '* Timestamp : '.$timestamp.PHP_EOL;
+ $code .= '* Line : '.($line + 1).PHP_EOL;
+ $code .= '* File : '.$_file.PHP_EOL.'*/'.PHP_EOL;
$lineAdd += 5;
} else {
$code .= $token[1];
}
break;
case T_VARIABLE:
- if($token[1] == '$this' && !$inside_structure){
+ if ($token[1] == '$this' && ! $inside_structure) {
$isUsingThisObject = true;
}
$code .= $token[1];
@@ -357,7 +376,7 @@ class ReflectionClosure extends ReflectionFunction
$lastState = 'closure';
break 2;
case T_NAME_QUALIFIED:
- list($id_start, $id_start_ci, $id_name) = $this->parseNameQualified($token[1]);
+ [$id_start, $id_start_ci, $id_name] = $this->parseNameQualified($token[1]);
$context = 'root';
$state = 'id_name';
$lastState = 'closure';
@@ -382,6 +401,7 @@ class ReflectionClosure extends ReflectionFunction
$lastState = 'closure';
break;
case T_OBJECT_OPERATOR:
+ case T_NULLSAFE_OBJECT_OPERATOR:
case T_DOUBLE_COLON:
$code .= $token[1];
$lastState = 'closure';
@@ -390,7 +410,7 @@ class ReflectionClosure extends ReflectionFunction
case T_FUNCTION:
$code .= $token[1];
$state = 'closure_args';
- if (!$inside_structure) {
+ if (! $inside_structure) {
$inside_structure = true;
$inside_structure_mark = $open;
}
@@ -408,7 +428,7 @@ class ReflectionClosure extends ReflectionFunction
$struct['start'] <= $startLine &&
$struct['end'] >= $endLine
) {
- $_trait = ($ns == '' ? '' : $ns . '\\') . $struct['name'];
+ $_trait = ($ns == '' ? '' : $ns.'\\').$struct['name'];
break;
}
}
@@ -423,7 +443,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'ignore_next':
- switch ($token[0]){
+ switch ($token[0]) {
case T_WHITESPACE:
case T_COMMENT:
case T_DOC_COMMENT:
@@ -454,7 +474,7 @@ class ReflectionClosure extends ReflectionFunction
}
break;
case 'id_start':
- switch ($token[0]){
+ switch ($token[0]) {
case T_WHITESPACE:
case T_COMMENT:
case T_DOC_COMMENT:
@@ -470,7 +490,7 @@ class ReflectionClosure extends ReflectionFunction
$state = 'id_name';
break 2;
case T_NAME_QUALIFIED:
- list($id_start, $id_start_ci, $id_name) = $this->parseNameQualified($token[1]);
+ [$id_start, $id_start_ci, $id_name] = $this->parseNameQualified($token[1]);
$state = 'id_name';
break 2;
case T_VARIABLE:
@@ -482,12 +502,21 @@ class ReflectionClosure extends ReflectionFunction
$state = 'anonymous';
break;
default:
- $i--;//reprocess last
+ $i--; //reprocess last
$state = 'id_name';
}
break;
case 'id_name':
- switch ($token[0]){
+ switch ($token[0]) {
+ // named arguments...
+ case ':':
+ if ($lastState === 'closure' && $context === 'root') {
+ $state = 'ignore_next';
+ $lastState = 'closure';
+ $code .= $id_start.$token;
+ }
+
+ break;
case T_NAME_QUALIFIED:
case T_NS_SEPARATOR:
case T_STRING:
@@ -500,76 +529,76 @@ class ReflectionClosure extends ReflectionFunction
if ($isShortClosure) {
$open++;
}
- if($context === 'new' || false !== strpos($id_name, '\\')){
- if($id_start_ci === 'self' || $id_start_ci === 'static') {
- if (!$inside_structure) {
+ if ($context === 'new' || false !== strpos($id_name, '\\')) {
+ if ($id_start_ci === 'self' || $id_start_ci === 'static') {
+ if (! $inside_structure) {
$isUsingScope = true;
}
- } elseif ($id_start !== '\\' && !in_array($id_start_ci, $class_keywords)) {
+ } elseif ($id_start !== '\\' && ! in_array($id_start_ci, $class_keywords)) {
if ($classes === null) {
$classes = $this->getClasses();
}
if (isset($classes[$id_start_ci])) {
$id_start = $classes[$id_start_ci];
}
- if($id_start[0] !== '\\'){
- $id_start = $nsf . '\\' . $id_start;
+ if ($id_start[0] !== '\\') {
+ $id_start = $nsf.'\\'.$id_start;
}
}
} else {
- if($id_start !== '\\'){
- if($functions === null){
+ if ($id_start !== '\\') {
+ if ($functions === null) {
$functions = $this->getFunctions();
}
- if(isset($functions[$id_start_ci])){
+ if (isset($functions[$id_start_ci])) {
$id_start = $functions[$id_start_ci];
- } elseif ($nsf !== '\\' && function_exists($nsf . '\\' . $id_start)) {
- $id_start = $nsf . '\\' . $id_start;
+ } elseif ($nsf !== '\\' && function_exists($nsf.'\\'.$id_start)) {
+ $id_start = $nsf.'\\'.$id_start;
// Cache it to functions array
$functions[$id_start_ci] = $id_start;
}
}
}
- $code .= $id_start . $id_name . '(';
+ $code .= $id_start.$id_name.'(';
$state = $lastState;
break;
case T_VARIABLE:
case T_DOUBLE_COLON:
- if($id_start !== '\\') {
- if($id_start_ci === 'self' || $id_start_ci === 'parent'){
- if (!$inside_structure) {
+ if ($id_start !== '\\') {
+ if ($id_start_ci === 'self' || $id_start_ci === 'parent') {
+ if (! $inside_structure) {
$isUsingScope = true;
}
} elseif ($id_start_ci === 'static') {
- if (!$inside_structure) {
+ if (! $inside_structure) {
$isUsingScope = $token[0] === T_DOUBLE_COLON;
}
- } elseif (!(\PHP_MAJOR_VERSION >= 7 && in_array($id_start_ci, $builtin_types))){
+ } elseif (! (\PHP_MAJOR_VERSION >= 7 && in_array($id_start_ci, $builtin_types))) {
if ($classes === null) {
$classes = $this->getClasses();
}
if (isset($classes[$id_start_ci])) {
$id_start = $classes[$id_start_ci];
}
- if($id_start[0] !== '\\'){
- $id_start = $nsf . '\\' . $id_start;
+ if ($id_start[0] !== '\\') {
+ $id_start = $nsf.'\\'.$id_start;
}
}
}
- $code .= $id_start . $id_name . $token[1];
+ $code .= $id_start.$id_name.$token[1];
$state = $token[0] === T_DOUBLE_COLON ? 'ignore_next' : $lastState;
break;
default:
- if($id_start !== '\\' && !defined($id_start)){
- if($constants === null){
+ if ($id_start !== '\\' && ! defined($id_start)) {
+ if ($constants === null) {
$constants = $this->getConstants();
}
- if(isset($constants[$id_start])){
+ if (isset($constants[$id_start])) {
$id_start = $constants[$id_start];
- } elseif($context === 'new'){
- if(in_array($id_start_ci, $class_keywords)) {
- if (!$inside_structure) {
+ } elseif ($context === 'new') {
+ if (in_array($id_start_ci, $class_keywords)) {
+ if (! $inside_structure) {
$isUsingScope = true;
}
} else {
@@ -580,36 +609,36 @@ class ReflectionClosure extends ReflectionFunction
$id_start = $classes[$id_start_ci];
}
if ($id_start[0] !== '\\') {
- $id_start = $nsf . '\\' . $id_start;
+ $id_start = $nsf.'\\'.$id_start;
}
}
- } elseif($context === 'use' ||
+ } elseif ($context === 'use' ||
$context === 'instanceof' ||
$context === 'args' ||
$context === 'return_type' ||
$context === 'extends' ||
$context === 'root'
- ){
- if(in_array($id_start_ci, $class_keywords)){
- if (!$inside_structure && !$id_start_ci === 'static') {
+ ) {
+ if (in_array($id_start_ci, $class_keywords)) {
+ if (! $inside_structure && ! $id_start_ci === 'static') {
$isUsingScope = true;
}
- } elseif (!(\PHP_MAJOR_VERSION >= 7 && in_array($id_start_ci, $builtin_types))){
- if($classes === null){
+ } elseif (! (\PHP_MAJOR_VERSION >= 7 && in_array($id_start_ci, $builtin_types))) {
+ if ($classes === null) {
$classes = $this->getClasses();
}
- if(isset($classes[$id_start_ci])){
+ if (isset($classes[$id_start_ci])) {
$id_start = $classes[$id_start_ci];
}
- if($id_start[0] !== '\\'){
- $id_start = $nsf . '\\' . $id_start;
+ if ($id_start[0] !== '\\') {
+ $id_start = $nsf.'\\'.$id_start;
}
}
}
}
- $code .= $id_start . $id_name;
+ $code .= $id_start.$id_name;
$state = $lastState;
- $i--;//reprocess last token
+ $i--; //reprocess last token
}
break;
case 'anonymous':
@@ -625,7 +654,7 @@ class ReflectionClosure extends ReflectionFunction
break;
case '{':
$state = 'closure';
- if (!$inside_structure) {
+ if (! $inside_structure) {
$inside_structure = true;
$inside_structure_mark = $open;
}
@@ -647,19 +676,45 @@ class ReflectionClosure extends ReflectionFunction
$this->isShortClosure = $isShortClosure;
$this->isBindingRequired = $isUsingThisObject;
$this->isScopeRequired = $isUsingScope;
+
+ if (PHP_VERSION_ID >= 80100) {
+ $attributesCode = array_map(function ($attribute) {
+ $arguments = $attribute->getArguments();
+
+ $name = $attribute->getName();
+ $arguments = implode(', ', array_map(function ($argument, $key) {
+ $argument = sprintf("'%s'", str_replace("'", "\\'", $argument));
+
+ if (is_string($key)) {
+ $argument = sprintf('%s: %s', $key, $argument);
+ }
+
+ return $argument;
+ }, $arguments, array_keys($arguments)));
+
+ return "#[$name($arguments)]";
+ }, $this->getAttributes());
+
+ if (! empty($attributesCode)) {
+ $code = implode("\n", array_merge($attributesCode, [$code]));
+ }
+ }
+
$this->code = $code;
return $this->code;
}
/**
+ * Get PHP native built in types.
+ *
* @return array
*/
- private static function getBuiltinTypes()
+ protected static function getBuiltinTypes()
{
- // PHP 5
- if (\PHP_MAJOR_VERSION === 5) {
- return ['array', 'callable'];
+ // PHP 8.1
+ if (PHP_VERSION_ID >= 80100) {
+ return ['array', 'callable', 'string', 'int', 'bool', 'float', 'iterable', 'void', 'object', 'mixed', 'false', 'null', 'never'];
}
// PHP 8
@@ -679,16 +734,18 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Gets the use variables by the closure.
+ *
* @return array
*/
public function getUseVariables()
{
- if($this->useVariables !== null){
+ if ($this->useVariables !== null) {
return $this->useVariables;
}
$tokens = $this->getTokens();
- $use = array();
+ $use = [];
$state = 'start';
foreach ($tokens as &$token) {
@@ -718,11 +775,13 @@ class ReflectionClosure extends ReflectionFunction
}
/**
- * return bool
+ * Checks if binding is required.
+ *
+ * @return bool
*/
public function isBindingRequired()
{
- if($this->isBindingRequired === null){
+ if ($this->isBindingRequired === null) {
$this->getCode();
}
@@ -730,11 +789,13 @@ class ReflectionClosure extends ReflectionFunction
}
/**
- * return bool
+ * Checks if access to the scope is required.
+ *
+ * @return bool
*/
public function isScopeRequired()
{
- if($this->isScopeRequired === null){
+ if ($this->isScopeRequired === null) {
$this->getCode();
}
@@ -742,6 +803,8 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * The the hash of the current file name.
+ *
* @return string
*/
protected function getHashedFileName()
@@ -754,13 +817,15 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the file tokens.
+ *
* @return array
*/
protected function getFileTokens()
{
$key = $this->getHashedFileName();
- if (!isset(static::$files[$key])) {
+ if (! isset(static::$files[$key])) {
static::$files[$key] = token_get_all(file_get_contents($this->getFileName()));
}
@@ -768,6 +833,8 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the tokens.
+ *
* @return array
*/
protected function getTokens()
@@ -776,11 +843,11 @@ class ReflectionClosure extends ReflectionFunction
$tokens = $this->getFileTokens();
$startLine = $this->getStartLine();
$endLine = $this->getEndLine();
- $results = array();
+ $results = [];
$start = false;
foreach ($tokens as &$token) {
- if (!is_array($token)) {
+ if (! is_array($token)) {
if ($start) {
$results[] = $token;
}
@@ -809,13 +876,15 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the classes.
+ *
* @return array
*/
protected function getClasses()
{
$key = $this->getHashedFileName();
- if (!isset(static::$classes[$key])) {
+ if (! isset(static::$classes[$key])) {
$this->fetchItems();
}
@@ -823,13 +892,15 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the functions.
+ *
* @return array
*/
protected function getFunctions()
{
$key = $this->getHashedFileName();
- if (!isset(static::$functions[$key])) {
+ if (! isset(static::$functions[$key])) {
$this->fetchItems();
}
@@ -837,13 +908,15 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Gets the constants.
+ *
* @return array
*/
protected function getConstants()
{
$key = $this->getHashedFileName();
- if (!isset(static::$constants[$key])) {
+ if (! isset(static::$constants[$key])) {
$this->fetchItems();
}
@@ -851,27 +924,34 @@ class ReflectionClosure extends ReflectionFunction
}
/**
+ * Get the structures.
+ *
* @return array
*/
protected function getStructures()
{
$key = $this->getHashedFileName();
- if (!isset(static::$structures[$key])) {
+ if (! isset(static::$structures[$key])) {
$this->fetchItems();
}
return static::$structures[$key];
}
+ /**
+ * Fetch the items.
+ *
+ * @return void.
+ */
protected function fetchItems()
{
$key = $this->getHashedFileName();
- $classes = array();
- $functions = array();
- $constants = array();
- $structures = array();
+ $classes = [];
+ $functions = [];
+ $constants = [];
+ $structures = [];
$tokens = $this->getFileTokens();
$open = 0;
@@ -887,7 +967,6 @@ class ReflectionClosure extends ReflectionFunction
$structIgnore = false;
foreach ($tokens as $token) {
-
switch ($state) {
case 'start':
switch ($token[0]) {
@@ -950,7 +1029,7 @@ class ReflectionClosure extends ReflectionFunction
case ',':
case ';':
if ($name === '' || $name[0] !== '\\') {
- $name = '\\' . $name;
+ $name = '\\'.$name;
}
if ($alias !== '') {
@@ -989,16 +1068,16 @@ class ReflectionClosure extends ReflectionFunction
case '}':
if ($prefix === '' || $prefix[0] !== '\\') {
- $prefix = '\\' . $prefix;
+ $prefix = '\\'.$prefix;
}
if ($alias !== '') {
if ($isFunc) {
- $functions[strtolower($alias)] = $prefix . $name;
+ $functions[strtolower($alias)] = $prefix.$name;
} elseif ($isConst) {
- $constants[$alias] = $prefix . $name;
+ $constants[$alias] = $prefix.$name;
} else {
- $classes[strtolower($alias)] = $prefix . $name;
+ $classes[strtolower($alias)] = $prefix.$name;
}
}
$name = $alias = '';
@@ -1051,13 +1130,13 @@ class ReflectionClosure extends ReflectionFunction
break;
case '}':
if (--$open == 0) {
- if(!$structIgnore){
- $structures[] = array(
- 'type' => $structType,
- 'name' => $structName,
+ if (! $structIgnore) {
+ $structures[] = [
+ 'type' => $structType,
+ 'name' => $structName,
'start' => $startLine,
- 'end' => $endLine,
- );
+ 'end' => $endLine,
+ ];
}
$structIgnore = false;
$state = 'start';
@@ -1078,7 +1157,30 @@ class ReflectionClosure extends ReflectionFunction
static::$structures[$key] = $structures;
}
- private function parseNameQualified($token)
+ /**
+ * Returns the namespace associated to the closure.
+ *
+ * @return string
+ */
+ protected function getClosureNamespaceName()
+ {
+ $ns = $this->getNamespaceName();
+
+ // First class callables...
+ if ($this->getName() !== '{closure}' && empty($ns) && ! is_null($this->getClosureScopeClass())) {
+ $ns = $this->getClosureScopeClass()->getNamespaceName();
+ }
+
+ return $ns;
+ }
+
+ /**
+ * Parse the given token.
+ *
+ * @param string $token
+ * @return array
+ */
+ protected function parseNameQualified($token)
{
$pieces = explode('\\', $token);
@@ -1086,7 +1188,7 @@ class ReflectionClosure extends ReflectionFunction
$id_start_ci = strtolower($id_start);
- $id_name = '\\' . implode('\\', $pieces);
+ $id_name = '\\'.implode('\\', $pieces);
return [$id_start, $id_start_ci, $id_name];
}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/Support/SelfReference.php b/pandora_console/vendor/laravel/serializable-closure/src/Support/SelfReference.php
new file mode 100644
index 0000000000..58319504ac
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/Support/SelfReference.php
@@ -0,0 +1,24 @@
+hash = $hash;
+ }
+}
diff --git a/pandora_console/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php b/pandora_console/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php
new file mode 100644
index 0000000000..1588e7cc0b
--- /dev/null
+++ b/pandora_console/vendor/laravel/serializable-closure/src/UnsignedSerializableClosure.php
@@ -0,0 +1,82 @@
+serializable = new Serializers\Native($closure);
+ }
+
+ /**
+ * Resolve the closure with the given arguments.
+ *
+ * @return mixed
+ */
+ public function __invoke()
+ {
+ if (\PHP_VERSION_ID < 70400) {
+ throw new PhpVersionNotSupportedException();
+ }
+
+ return call_user_func_array($this->serializable, func_get_args());
+ }
+
+ /**
+ * Gets the closure.
+ *
+ * @return \Closure
+ */
+ public function getClosure()
+ {
+ if (\PHP_VERSION_ID < 70400) {
+ throw new PhpVersionNotSupportedException();
+ }
+
+ return $this->serializable->getClosure();
+ }
+
+ /**
+ * Get the serializable representation of the closure.
+ *
+ * @return array
+ */
+ public function __serialize()
+ {
+ return [
+ 'serializable' => $this->serializable,
+ ];
+ }
+
+ /**
+ * Restore the closure after serialization.
+ *
+ * @param array $data
+ * @return void
+ */
+ public function __unserialize($data)
+ {
+ $this->serializable = $data['serializable'];
+ }
+}
diff --git a/pandora_console/vendor/monolog/monolog/CHANGELOG.md b/pandora_console/vendor/monolog/monolog/CHANGELOG.md
index 7f9db2b074..8a8c651244 100644
--- a/pandora_console/vendor/monolog/monolog/CHANGELOG.md
+++ b/pandora_console/vendor/monolog/monolog/CHANGELOG.md
@@ -1,3 +1,18 @@
+### 2.9.1 (2023-02-06)
+
+ * Fixed Logger not being serializable anymore (#1792)
+
+### 2.9.0 (2023-02-05)
+
+ * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748)
+ * Added support for enum context values in PsrLogMessageProcessor (#1773)
+ * Added graylog2/gelf-php 2.x support (#1747)
+ * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739)
+ * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791)
+ * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758)
+ * Fixed infinite loop detection within Fibers (#1753)
+ * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781)
+
### 2.8.0 (2022-07-24)
* Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734)
diff --git a/pandora_console/vendor/monolog/monolog/composer.json b/pandora_console/vendor/monolog/monolog/composer.json
index ab775ad634..b9437d6d52 100644
--- a/pandora_console/vendor/monolog/monolog/composer.json
+++ b/pandora_console/vendor/monolog/monolog/composer.json
@@ -21,7 +21,7 @@
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
"doctrine/couchdb": "~1.0@dev",
"elasticsearch/elasticsearch": "^7 || ^8",
- "graylog2/gelf-php": "^1.4.2",
+ "graylog2/gelf-php": "^1.4.2 || ^2@dev",
"guzzlehttp/guzzle": "^7.4",
"guzzlehttp/psr7": "^2.2",
"mongodb/mongodb": "^1.8",
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
index 41b56b3c0a..867ae586bf 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
@@ -15,6 +15,7 @@ namespace Monolog\Formatter;
* formats the record to be used in the FlowdockHandler
*
* @author Dominik Liebler
+ * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
*/
class FlowdockFormatter implements FormatterInterface
{
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
index a1a79372df..3b3e1e7f6d 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
@@ -47,6 +47,11 @@ class GelfMessageFormatter extends NormalizerFormatter
*/
protected $maxLength;
+ /**
+ * @var int
+ */
+ private $gelfVersion = 2;
+
/**
* Translates Monolog log levels to Graylog2 log priorities.
*
@@ -78,6 +83,10 @@ class GelfMessageFormatter extends NormalizerFormatter
$this->extraPrefix = is_null($extraPrefix) ? '' : $extraPrefix;
$this->contextPrefix = $contextPrefix;
$this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength;
+
+ if (method_exists(Message::class, 'setFacility')) {
+ $this->gelfVersion = 1;
+ }
}
/**
@@ -113,16 +122,20 @@ class GelfMessageFormatter extends NormalizerFormatter
$message->setShortMessage(Utils::substr($record['message'], 0, $this->maxLength));
}
- if (isset($record['channel'])) {
- $message->setFacility($record['channel']);
- }
- if (isset($extra['line'])) {
- $message->setLine($extra['line']);
- unset($extra['line']);
- }
- if (isset($extra['file'])) {
- $message->setFile($extra['file']);
- unset($extra['file']);
+ if ($this->gelfVersion === 1) {
+ if (isset($record['channel'])) {
+ $message->setFacility($record['channel']);
+ }
+ if (isset($extra['line'])) {
+ $message->setLine($extra['line']);
+ unset($extra['line']);
+ }
+ if (isset($extra['file'])) {
+ $message->setFile($extra['file']);
+ unset($extra['file']);
+ }
+ } else {
+ $message->setAdditional('facility', $record['channel']);
}
foreach ($extra as $key => $val) {
@@ -147,11 +160,13 @@ class GelfMessageFormatter extends NormalizerFormatter
$message->setAdditional($this->contextPrefix . $key, $val);
}
- /** @phpstan-ignore-next-line */
- if (null === $message->getFile() && isset($context['exception']['file'])) {
- if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
- $message->setFile($matches[1]);
- $message->setLine($matches[2]);
+ if ($this->gelfVersion === 1) {
+ /** @phpstan-ignore-next-line */
+ if (null === $message->getFile() && isset($context['exception']['file'])) {
+ if (preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) {
+ $message->setFile($matches[1]);
+ $message->setLine($matches[2]);
+ }
}
}
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php
index 0cd287f5e4..ca52ebf4e5 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php
@@ -17,6 +17,7 @@ use Monolog\LogRecord;
/**
* Encodes message information into JSON in a format compatible with Cloud logging.
*
+ * @see https://cloud.google.com/logging/docs/structured-logging
* @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry
*
* @author Luís Cobucci
@@ -28,7 +29,7 @@ final class GoogleCloudLoggingFormatter extends JsonFormatter
{
// Re-key level for GCP logging
$record['severity'] = $record['level_name'];
- $record['timestamp'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED);
+ $record['time'] = $record['datetime']->format(DateTimeInterface::RFC3339_EXTENDED);
// Remove keys that are not used by GCP
unset($record['level'], $record['level_name'], $record['datetime']);
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php
index c4997482e8..994872ce89 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php
@@ -151,13 +151,14 @@ class AmqpHandler extends AbstractProcessingHandler
private function createAmqpMessage(string $data): AMQPMessage
{
- return new AMQPMessage(
- $data,
- [
- 'delivery_mode' => 2,
- 'content_type' => 'application/json',
- ]
- );
+ $attributes = [
+ 'delivery_mode' => 2,
+ 'content_type' => 'application/json',
+ ];
+ if ($this->extraAttributes) {
+ $attributes = array_merge($attributes, $this->extraAttributes);
+ }
+ return new AMQPMessage($data, $attributes);
}
/**
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php
index fa383f1c21..95bbfed426 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php
@@ -14,6 +14,7 @@ namespace Monolog\Handler;
use Monolog\Formatter\FormatterInterface;
use Monolog\Formatter\LineFormatter;
use Monolog\Utils;
+use Monolog\Logger;
use function count;
use function headers_list;
@@ -177,7 +178,7 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
$extra = static::dump('Extra', $record['extra']);
if (empty($context) && empty($extra)) {
- $script[] = static::call_array('log', static::handleStyles($record['formatted']));
+ $script[] = static::call_array(static::getConsoleMethodForLevel($record['level']), static::handleStyles($record['formatted']));
} else {
$script = array_merge(
$script,
@@ -192,6 +193,20 @@ class BrowserConsoleHandler extends AbstractProcessingHandler
return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);";
}
+ private static function getConsoleMethodForLevel(int $level): string
+ {
+ return [
+ Logger::DEBUG => 'debug',
+ Logger::INFO => 'info',
+ Logger::NOTICE => 'info',
+ Logger::WARNING => 'warn',
+ Logger::ERROR => 'error',
+ Logger::CRITICAL => 'error',
+ Logger::ALERT => 'error',
+ Logger::EMERGENCY => 'error',
+ ][$level] ?? 'log';
+ }
+
/**
* @return string[]
*/
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php
index b837bdb66e..5715d5800f 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php
@@ -28,6 +28,7 @@ use Monolog\Formatter\FormatterInterface;
* @see https://www.flowdock.com/api/push
*
* @phpstan-import-type FormattedRecord from AbstractProcessingHandler
+ * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4
*/
class FlowdockHandler extends SocketHandler
{
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php
index 2dd136720e..b6d3d3b197 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php
@@ -64,4 +64,18 @@ class WhatFailureGroupHandler extends GroupHandler
}
}
}
+
+ /**
+ * {@inheritDoc}
+ */
+ public function close(): void
+ {
+ foreach ($this->handlers as $handler) {
+ try {
+ $handler->close();
+ } catch (\Throwable $e) {
+ // What failure?
+ }
+ }
+ }
}
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Logger.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Logger.php
index 1ab75b9e09..84a2f55102 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Logger.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Logger.php
@@ -168,6 +168,11 @@ class Logger implements LoggerInterface, ResettableInterface
*/
private $logDepth = 0;
+ /**
+ * @var \WeakMap<\Fiber, int>|null Keeps track of depth inside fibers to prevent infinite logging loops
+ */
+ private $fiberLogDepth;
+
/**
* @var bool Whether to detect infinite logging loops
*
@@ -189,6 +194,13 @@ class Logger implements LoggerInterface, ResettableInterface
$this->setHandlers($handlers);
$this->processors = $processors;
$this->timezone = $timezone ?: new DateTimeZone(date_default_timezone_get() ?: 'UTC');
+
+ if (\PHP_VERSION_ID >= 80100) {
+ // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
+ /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
+ $fiberLogDepth = new \WeakMap();
+ $this->fiberLogDepth = $fiberLogDepth;
+ }
}
public function getName(): string
@@ -332,12 +344,20 @@ class Logger implements LoggerInterface, ResettableInterface
}
if ($this->detectCycles) {
- $this->logDepth += 1;
+ if (\PHP_VERSION_ID >= 80100 && $fiber = \Fiber::getCurrent()) {
+ $this->fiberLogDepth[$fiber] = $this->fiberLogDepth[$fiber] ?? 0;
+ $logDepth = ++$this->fiberLogDepth[$fiber];
+ } else {
+ $logDepth = ++$this->logDepth;
+ }
+ } else {
+ $logDepth = 0;
}
- if ($this->logDepth === 3) {
+
+ if ($logDepth === 3) {
$this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.');
return false;
- } elseif ($this->logDepth >= 5) { // log depth 4 is let through so we can log the warning above
+ } elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above
return false;
}
@@ -387,7 +407,11 @@ class Logger implements LoggerInterface, ResettableInterface
}
} finally {
if ($this->detectCycles) {
- $this->logDepth--;
+ if (isset($fiber)) {
+ $this->fiberLogDepth[$fiber]--;
+ } else {
+ $this->logDepth--;
+ }
}
}
@@ -698,4 +722,40 @@ class Logger implements LoggerInterface, ResettableInterface
($this->exceptionHandler)($e, $record);
}
+
+ /**
+ * @return array
+ */
+ public function __serialize(): array
+ {
+ return [
+ 'name' => $this->name,
+ 'handlers' => $this->handlers,
+ 'processors' => $this->processors,
+ 'microsecondTimestamps' => $this->microsecondTimestamps,
+ 'timezone' => $this->timezone,
+ 'exceptionHandler' => $this->exceptionHandler,
+ 'logDepth' => $this->logDepth,
+ 'detectCycles' => $this->detectCycles,
+ ];
+ }
+
+ /**
+ * @param array $data
+ */
+ public function __unserialize(array $data): void
+ {
+ foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) {
+ if (isset($data[$property])) {
+ $this->$property = $data[$property];
+ }
+ }
+
+ if (\PHP_VERSION_ID >= 80100) {
+ // Local variable for phpstan, see https://github.com/phpstan/phpstan/issues/6732#issuecomment-1111118412
+ /** @var \WeakMap<\Fiber, int> $fiberLogDepth */
+ $fiberLogDepth = new \WeakMap();
+ $this->fiberLogDepth = $fiberLogDepth;
+ }
+ }
}
diff --git a/pandora_console/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/pandora_console/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php
index 2c2a00e75f..e7c12176a7 100644
--- a/pandora_console/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php
+++ b/pandora_console/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php
@@ -66,6 +66,8 @@ class PsrLogMessageProcessor implements ProcessorInterface
} else {
$replacements[$placeholder] = $val->format($this->dateFormat ?: static::SIMPLE_DATE);
}
+ } elseif ($val instanceof \UnitEnum) {
+ $replacements[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name;
} elseif (is_object($val)) {
$replacements[$placeholder] = '[object '.Utils::getClass($val).']';
} elseif (is_array($val)) {
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/01_bug_report.yml b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/01_bug_report.yml
new file mode 100644
index 0000000000..0ce324aa31
--- /dev/null
+++ b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/01_bug_report.yml
@@ -0,0 +1,35 @@
+name: Bug report 🐛
+description: The library does not work as expected
+body:
+
+ - type: checkboxes
+ attributes:
+ label: Guidelines
+ description: Please confirm this is a bug report and not general troubleshooting.
+ options:
+ - label: I understand that [if I fail to provide all required details, this issue may be closed without review](https://github.com/mpdf/mpdf/blob/development/.github/CONTRIBUTING.md).
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Description of the bug
+ validations:
+ required: true
+
+ - type: input
+ attributes:
+ label: mPDF version
+ validations:
+ required: true
+
+ - type: input
+ attributes:
+ label: PHP Version and environment (server type, cli provider etc., enclosing libraries and their respective versions)
+ validations:
+ required: true
+
+ - type: textarea
+ attributes:
+ label: Reproducible PHP+CSS+HTML snippet suffering by the error
+ validations:
+ required: true
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/02_feature_request.yml b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/02_feature_request.yml
new file mode 100644
index 0000000000..88d9bdca68
--- /dev/null
+++ b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/02_feature_request.yml
@@ -0,0 +1,8 @@
+name: Feature request 🚀
+description: I would like to have a new functionality added
+body:
+ - type: textarea
+ attributes:
+ label: Please describe the new functionality as best as you can.
+ validations:
+ required: true
\ No newline at end of file
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/Bug_report.md b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/Bug_report.md
deleted file mode 100644
index aef3f66c53..0000000000
--- a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/Bug_report.md
+++ /dev/null
@@ -1,29 +0,0 @@
----
-name: Bug report 🐛
-about: The library does not work as expected
----
-
-
-
-### I found this bug
-
-### This is mPDF and PHP version and environment (server/fpm/cli etc) I am using
-
-### This is the PHP code snippet I use
-
-```
-
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/config.yml b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/config.yml
index 901d9c25ee..3c03ea0d09 100644
--- a/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/config.yml
+++ b/pandora_console/vendor/mpdf/mpdf/.github/ISSUE_TEMPLATE/config.yml
@@ -1,3 +1,4 @@
+blank_issues_enabled: false
contact_links:
- name: General questions and troubleshooting ❓
url: https://github.com/mpdf/mpdf/discussions
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/SECURITY.md b/pandora_console/vendor/mpdf/mpdf/.github/SECURITY.md
new file mode 100644
index 0000000000..c4f92d3131
--- /dev/null
+++ b/pandora_console/vendor/mpdf/mpdf/.github/SECURITY.md
@@ -0,0 +1,6 @@
+How to disclose potential security issues
+============
+
+As mPDF does not have a domain or a dedicated contact apart from its Github repository, to prevent
+disclosing maintainers' contacts publicly, please create an Issue about the security issue with means to contact you.
+We will reach out to you as soon as possible.
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/workflows/coverage.yml b/pandora_console/vendor/mpdf/mpdf/.github/workflows/coverage.yml
index 13b1207b8c..45980f9dc7 100644
--- a/pandora_console/vendor/mpdf/mpdf/.github/workflows/coverage.yml
+++ b/pandora_console/vendor/mpdf/mpdf/.github/workflows/coverage.yml
@@ -25,7 +25,7 @@ jobs:
steps:
- name: "Checkout"
- uses: "actions/checkout@v2"
+ uses: "actions/checkout@v3"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/workflows/cs.yml b/pandora_console/vendor/mpdf/mpdf/.github/workflows/cs.yml
index ff003e0174..1fdf0aa0ae 100644
--- a/pandora_console/vendor/mpdf/mpdf/.github/workflows/cs.yml
+++ b/pandora_console/vendor/mpdf/mpdf/.github/workflows/cs.yml
@@ -26,7 +26,7 @@ jobs:
steps:
- name: "Checkout"
- uses: "actions/checkout@v2"
+ uses: "actions/checkout@v3"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
diff --git a/pandora_console/vendor/mpdf/mpdf/.github/workflows/tests.yml b/pandora_console/vendor/mpdf/mpdf/.github/workflows/tests.yml
index ff64a8162e..71d26dc194 100644
--- a/pandora_console/vendor/mpdf/mpdf/.github/workflows/tests.yml
+++ b/pandora_console/vendor/mpdf/mpdf/.github/workflows/tests.yml
@@ -30,11 +30,12 @@ jobs:
- "7.4"
- "8.0"
- "8.1"
+ - "8.2"
operating-system: [ubuntu-latest, windows-latest]
steps:
- name: "Checkout"
- uses: "actions/checkout@v2"
+ uses: "actions/checkout@v3"
- name: "Install PHP"
uses: "shivammathur/setup-php@v2"
@@ -49,4 +50,4 @@ jobs:
run: "composer install --no-interaction --no-progress"
- name: "Tests"
- run: composer test
+ run: composer test
\ No newline at end of file
diff --git a/pandora_console/vendor/mpdf/mpdf/CHANGELOG.md b/pandora_console/vendor/mpdf/mpdf/CHANGELOG.md
index 16869e339e..0b68c37a96 100644
--- a/pandora_console/vendor/mpdf/mpdf/CHANGELOG.md
+++ b/pandora_console/vendor/mpdf/mpdf/CHANGELOG.md
@@ -1,3 +1,26 @@
+mPDF 8.1.x
+===========================
+
+New features
+------------
+
+* Service container for internal services
+* Set /Lang entry for better accessibility when document language is available (@cuongmits, #1418)
+* More verbose helper methods for `Output`: `OutputBinaryData`, `OutputHttpInline`, `OutputHttpDownload`, `OutputFile` (since v8.1.2)
+* Set font-size to `auto` in textarea and input in active forms to resize the font-size (@ChrisB9, #1721)
+* PHP 8.2 support in mPDF 8.1.3
+
+Bugfixes
+--------
+
+* Better exception message about fonts with MarkGlyphSets (Fix for #1408)
+* Updated Garuda font with fixed "k" character (Fix for #1440)
+* Testing and suppressing PNG file conversion errors
+* Prevent hyphenation of urls starting with https and e-mail addresses (@HKandulla, #1634)
+* Colorspace restrictor reads mode from Mpdf and works again (Fix for #1094)
+* Prevent exception when multiple columns wrap to next page
+* Update default `curlUserAgent` configuration variable from Firefox 13 to 108
+
mPDF 8.0.x
===========================
@@ -35,6 +58,8 @@ mPDF 8.0.x
* Added optional `continue2pages` parameter to `SetDocTemplate` method, allowing a template to continue the last 2 pages alternately (@bmg-ruudv)
* Ensure that all digits of a string are hexadecimal before decoding in ColorConverter (@derklaro)
* Fix: Using mpdf in phar package leads to weird errors (#1504, @sandreas)
+* WEBP images support (#1525)
+
mPDF 8.0.0
===========================
diff --git a/pandora_console/vendor/mpdf/mpdf/README.md b/pandora_console/vendor/mpdf/mpdf/README.md
index 366ddace64..65b1519008 100644
--- a/pandora_console/vendor/mpdf/mpdf/README.md
+++ b/pandora_console/vendor/mpdf/mpdf/README.md
@@ -18,11 +18,12 @@ Requirements
PHP versions and extensions
---------------------------
-- `mPDF >=7.0` is supported on `PHP ^5.6 || ~7.0.0 || ~7.1.0 || ~7.2.0`
+- `PHP >=5.6 <7.3.0` is supported for `mPDF >= 7.0`
- `PHP 7.3` is supported since `mPDF v7.1.7`
- `PHP 7.4` is supported since `mPDF v8.0.4`
- `PHP 8.0` is supported since `mPDF v8.0.10`
- `PHP 8.1` is supported as of `mPDF v8.0.13`
+- `PHP 8.2` is supported as of `mPDF v8.1.3`
PHP `mbstring` and `gd` extensions have to be loaded.
diff --git a/pandora_console/vendor/mpdf/mpdf/composer.json b/pandora_console/vendor/mpdf/mpdf/composer.json
index c93e87d20a..0ba8494467 100644
--- a/pandora_console/vendor/mpdf/mpdf/composer.json
+++ b/pandora_console/vendor/mpdf/mpdf/composer.json
@@ -21,11 +21,13 @@
"docs": "http://mpdf.github.io"
},
"require": {
- "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0",
+ "php": "^5.6 || ^7.0 || ~8.0.0 || ~8.1.0 || ~8.2.0",
"ext-gd": "*",
"ext-mbstring": "*",
"myclabs/deep-copy": "^1.7",
"paragonie/random_compat": "^1.4|^2.0|^9.99.99",
+ "php-http/message-factory": "^1.0",
+ "psr/http-message": "^1.0",
"psr/log": "^1.0 || ^2.0",
"setasign/fpdi": "^2.1"
},
@@ -33,7 +35,7 @@
"mockery/mockery": "^1.3.0",
"mpdf/qrcode": "^1.1.0",
"squizlabs/php_codesniffer": "^3.5.0",
- "tracy/tracy": "^2.4",
+ "tracy/tracy": "~2.5",
"yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
diff --git a/pandora_console/vendor/mpdf/mpdf/src/AssetFetcher.php b/pandora_console/vendor/mpdf/mpdf/src/AssetFetcher.php
new file mode 100644
index 0000000000..48419b6679
--- /dev/null
+++ b/pandora_console/vendor/mpdf/mpdf/src/AssetFetcher.php
@@ -0,0 +1,124 @@
+mpdf = $mpdf;
+ $this->contentLoader = $contentLoader;
+ $this->http = $http;
+ $this->logger = $logger;
+ }
+
+ public function fetchDataFromPath($path, $originalSrc = null)
+ {
+ /**
+ * Prevents insecure PHP object injection through phar:// wrapper
+ * @see https://github.com/mpdf/mpdf/issues/949
+ * @see https://github.com/mpdf/mpdf/issues/1381
+ */
+ $wrapperChecker = new StreamWrapperChecker($this->mpdf);
+
+ if ($wrapperChecker->hasBlacklistedStreamWrapper($path)) {
+ throw new \Mpdf\Exception\AssetFetchingException('File contains an invalid stream. Only ' . implode(', ', $wrapperChecker->getWhitelistedStreamWrappers()) . ' streams are allowed.');
+ }
+
+ if ($originalSrc && $wrapperChecker->hasBlacklistedStreamWrapper($originalSrc)) {
+ throw new \Mpdf\Exception\AssetFetchingException('File contains an invalid stream. Only ' . implode(', ', $wrapperChecker->getWhitelistedStreamWrappers()) . ' streams are allowed.');
+ }
+
+ $this->mpdf->GetFullPath($path);
+
+ return $this->isPathLocal($path) || ($originalSrc !== null && $this->isPathLocal($originalSrc))
+ ? $this->fetchLocalContent($path, $originalSrc)
+ : $this->fetchRemoteContent($path);
+ }
+
+ public function fetchLocalContent($path, $originalSrc)
+ {
+ $data = '';
+
+ if ($originalSrc && $this->mpdf->basepathIsLocal && $check = @fopen($originalSrc, 'rb')) {
+ fclose($check);
+ $path = $originalSrc;
+ $this->logger->debug(sprintf('Fetching content of file "%s" with local basepath', $path), ['context' => LogContext::REMOTE_CONTENT]);
+
+ return $this->contentLoader->load($path);
+ }
+
+ if ($path && $check = @fopen($path, 'rb')) {
+ fclose($check);
+ $this->logger->debug(sprintf('Fetching content of file "%s" with non-local basepath', $path), ['context' => LogContext::REMOTE_CONTENT]);
+
+ return $this->contentLoader->load($path);
+ }
+
+ return $data;
+ }
+
+ public function fetchRemoteContent($path)
+ {
+ $data = '';
+
+ try {
+
+ $this->logger->debug(sprintf('Fetching remote content of file "%s"', $path), ['context' => LogContext::REMOTE_CONTENT]);
+
+ /** @var \Mpdf\Http\Response $response */
+ $response = $this->http->sendRequest(new Request('GET', $path));
+
+ if ($response->getStatusCode() !== 200) {
+
+ $message = sprintf('Non-OK HTTP response "%s" on fetching remote content "%s" because of an error', $response->getStatusCode(), $path);
+ if ($this->mpdf->debug) {
+ throw new \Mpdf\MpdfException($message);
+ }
+
+ $this->logger->info($message);
+
+ return $data;
+ }
+
+ $data = $response->getBody()->getContents();
+
+ } catch (\InvalidArgumentException $e) {
+ $message = sprintf('Unable to fetch remote content "%s" because of an error "%s"', $path, $e->getMessage());
+ if ($this->mpdf->debug) {
+ throw new \Mpdf\MpdfException($message, 0, E_ERROR, null, null, $e);
+ }
+
+ $this->logger->warning($message);
+ }
+
+ return $data;
+ }
+
+ public function isPathLocal($path)
+ {
+ return strpos($path, '://') === false; // @todo More robust implementation
+ }
+
+ public function setLogger(LoggerInterface $logger)
+ {
+ $this->logger = $logger;
+ }
+
+}
diff --git a/pandora_console/vendor/mpdf/mpdf/src/Color/ColorConverter.php b/pandora_console/vendor/mpdf/mpdf/src/Color/ColorConverter.php
index fe5e547d21..1af7aa9230 100644
--- a/pandora_console/vendor/mpdf/mpdf/src/Color/ColorConverter.php
+++ b/pandora_console/vendor/mpdf/mpdf/src/Color/ColorConverter.php
@@ -193,6 +193,11 @@ class ColorConverter
} elseif (strpos($color, '#') === 0) { // case of #nnnnnn or #nnn
$c = $this->processHashColor($color);
} elseif (preg_match('/(rgba|rgb|device-cmyka|cmyka|device-cmyk|cmyk|hsla|hsl|spot)\((.*?)\)/', $color, $m)) {
+ // quickfix for color containing CSS variable
+ preg_match('/var\(--([a-z-_]+)\)/i', $m[0], $var);
+ if ($var) {
+ $m[2] = '0, 0, 0, 100';
+ }
$c = $this->processModeColor($m[1], explode(',', $m[2]));
}
diff --git a/pandora_console/vendor/mpdf/mpdf/src/Color/ColorSpaceRestrictor.php b/pandora_console/vendor/mpdf/mpdf/src/Color/ColorSpaceRestrictor.php
index 195138f5ce..aeed5dbb36 100644
--- a/pandora_console/vendor/mpdf/mpdf/src/Color/ColorSpaceRestrictor.php
+++ b/pandora_console/vendor/mpdf/mpdf/src/Color/ColorSpaceRestrictor.php
@@ -38,11 +38,10 @@ class ColorSpaceRestrictor
* @param \Mpdf\Color\ColorModeConverter $colorModeConverter
* @param int $mode
*/
- public function __construct(Mpdf $mpdf, ColorModeConverter $colorModeConverter, $mode)
+ public function __construct(Mpdf $mpdf, ColorModeConverter $colorModeConverter)
{
$this->mpdf = $mpdf;
$this->colorModeConverter = $colorModeConverter;
- $this->mode = $mode;
}
/**
@@ -93,11 +92,11 @@ class ColorSpaceRestrictor
if ($this->mpdf->PDFA && !$this->mpdf->PDFAauto) {
$PDFAXwarnings[] = "Spot color specified '" . $this->mpdf->spotColorIDs[$c[1]] . "' (converted to process color)";
}
- if ($this->mode != 3) {
+ if ($this->mpdf->restrictColorSpace != 3) {
$sp = $this->mpdf->spotColors[$this->mpdf->spotColorIDs[$c[1]]];
$c = $this->colorModeConverter->cmyk2rgb([4, $sp['c'], $sp['m'], $sp['y'], $sp['k']]);
}
- } elseif ($this->mode == 1) {
+ } elseif ($this->mpdf->restrictColorSpace == 1) {
$sp = $this->mpdf->spotColors[$this->mpdf->spotColorIDs[$c[1]]];
$c = $this->colorModeConverter->cmyk2gray([4, $sp['c'], $sp['m'], $sp['y'], $sp['k']]);
}
@@ -114,14 +113,14 @@ class ColorSpaceRestrictor
*/
private function restrictRgbColorSpace($c, $color, &$PDFAXwarnings = [])
{
- if ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mode == 3)) {
+ if ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace == 3)) {
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) {
$PDFAXwarnings[] = "RGB color specified '" . $color . "' (converted to CMYK)";
}
$c = $this->colorModeConverter->rgb2cmyk($c);
- } elseif ($this->mode == 1) {
+ } elseif ($this->mpdf->restrictColorSpace == 1) {
$c = $this->colorModeConverter->rgb2gray($c);
- } elseif ($this->mode == 3) {
+ } elseif ($this->mpdf->restrictColorSpace == 3) {
$c = $this->colorModeConverter->rgb2cmyk($c);
}
@@ -137,14 +136,14 @@ class ColorSpaceRestrictor
*/
private function restrictCmykColorSpace($c, $color, &$PDFAXwarnings = [])
{
- if ($this->mpdf->PDFA && $this->mode != 3) {
+ if ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace != 3) {
if ($this->mpdf->PDFA && !$this->mpdf->PDFAauto) {
$PDFAXwarnings[] = "CMYK color specified '" . $color . "' (converted to RGB)";
}
$c = $this->colorModeConverter->cmyk2rgb($c);
- } elseif ($this->mode == 1) {
+ } elseif ($this->mpdf->restrictColorSpace == 1) {
$c = $this->colorModeConverter->cmyk2gray($c);
- } elseif ($this->mode == 2) {
+ } elseif ($this->mpdf->restrictColorSpace == 2) {
$c = $this->colorModeConverter->cmyk2rgb($c);
}
@@ -160,21 +159,21 @@ class ColorSpaceRestrictor
*/
private function restrictRgbaColorSpace($c, $color, &$PDFAXwarnings = [])
{
- if ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mode == 3)) {
+ if ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace == 3)) {
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) {
$PDFAXwarnings[] = "RGB color with transparency specified '" . $color . "' (converted to CMYK without transparency)";
}
$c = $this->colorModeConverter->rgb2cmyk($c);
$c = [4, $c[1], $c[2], $c[3], $c[4]];
- } elseif ($this->mpdf->PDFA && $this->mode != 3) {
+ } elseif ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace != 3) {
if (!$this->mpdf->PDFAauto) {
$PDFAXwarnings[] = "RGB color with transparency specified '" . $color . "' (converted to RGB without transparency)";
}
$c = $this->colorModeConverter->rgb2cmyk($c);
$c = [4, $c[1], $c[2], $c[3], $c[4]];
- } elseif ($this->mode == 1) {
+ } elseif ($this->mpdf->restrictColorSpace == 1) {
$c = $this->colorModeConverter->rgb2gray($c);
- } elseif ($this->mode == 3) {
+ } elseif ($this->mpdf->restrictColorSpace == 3) {
$c = $this->colorModeConverter->rgb2cmyk($c);
}
@@ -190,21 +189,21 @@ class ColorSpaceRestrictor
*/
private function restrictCmykaColorSpace($c, $color, &$PDFAXwarnings = [])
{
- if ($this->mpdf->PDFA && $this->mode != 3) {
+ if ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace != 3) {
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) {
$PDFAXwarnings[] = "CMYK color with transparency specified '" . $color . "' (converted to RGB without transparency)";
}
$c = $this->colorModeConverter->cmyk2rgb($c);
$c = [3, $c[1], $c[2], $c[3]];
- } elseif ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mode == 3)) {
+ } elseif ($this->mpdf->PDFX || ($this->mpdf->PDFA && $this->mpdf->restrictColorSpace == 3)) {
if (($this->mpdf->PDFA && !$this->mpdf->PDFAauto) || ($this->mpdf->PDFX && !$this->mpdf->PDFXauto)) {
$PDFAXwarnings[] = "CMYK color with transparency specified '" . $color . "' (converted to CMYK without transparency)";
}
$c = $this->colorModeConverter->cmyk2rgb($c);
$c = [3, $c[1], $c[2], $c[3]];
- } elseif ($this->mode == 1) {
+ } elseif ($this->mpdf->restrictColorSpace == 1) {
$c = $this->colorModeConverter->cmyk2gray($c);
- } elseif ($this->mode == 2) {
+ } elseif ($this->mpdf->restrictColorSpace == 2) {
$c = $this->colorModeConverter->cmyk2rgb($c);
}
diff --git a/pandora_console/vendor/mpdf/mpdf/src/Config/ConfigVariables.php b/pandora_console/vendor/mpdf/mpdf/src/Config/ConfigVariables.php
index 8eef5a803b..383eb111da 100644
--- a/pandora_console/vendor/mpdf/mpdf/src/Config/ConfigVariables.php
+++ b/pandora_console/vendor/mpdf/mpdf/src/Config/ConfigVariables.php
@@ -515,7 +515,7 @@ class ConfigVariables
'curlExecutionTimeout' => null,
'curlProxy' => null,
'curlProxyAuth' => null,
- 'curlUserAgent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:13.0) Gecko/20100101 Firefox/13.0.1',
+ 'curlUserAgent' => 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:108.0) Gecko/20100101 Firefox/108.0',
'exposeVersion' => true,
];
diff --git a/pandora_console/vendor/mpdf/mpdf/src/Config/FontVariables.php b/pandora_console/vendor/mpdf/mpdf/src/Config/FontVariables.php
index b450044beb..777ebf8a74 100644
--- a/pandora_console/vendor/mpdf/mpdf/src/Config/FontVariables.php
+++ b/pandora_console/vendor/mpdf/mpdf/src/Config/FontVariables.php
@@ -286,9 +286,6 @@ class FontVariables
"unbatang" => [/* Korean */
'R' => "UnBatang_0613.ttf",
],
- "lato" => [/* lato */
- 'R' => 'Lato-Regular.ttf',
- ],
],
// Add fonts to this array if they contain characters in the SIP or SMP Unicode planes
@@ -299,7 +296,6 @@ class FontVariables
"dejavuserifcondensed",
"dejavuserif",
"dejavusansmono",
- "lato",
],
// These next 3 arrays do two things:
@@ -325,8 +321,6 @@ class FontVariables
'mono_fonts' => ['dejavusansmono', 'mono', 'monospace', 'freemono', 'liberationmono', 'courier', 'ocrb', 'ocr-b', 'lucidaconsole',
'couriernew', 'monotypecorsiva'
],
-
- 'lato' => ['lato'],
];
}
diff --git a/pandora_console/vendor/mpdf/mpdf/src/Container/ContainerInterface.php b/pandora_console/vendor/mpdf/mpdf/src/Container/ContainerInterface.php
new file mode 100644
index 0000000000..e0fb0d5c7d
--- /dev/null
+++ b/pandora_console/vendor/mpdf/mpdf/src/Container/ContainerInterface.php
@@ -0,0 +1,12 @@
+services = $services;
+ }
+
+ public function get($id)
+ {
+ if (!$this->has($id)) {
+ throw new \Mpdf\Container\NotFoundException(sprintf('Unable to find service of key "%s"', $id));
+ }
+
+ return $this->services[$id];
+ }
+
+ public function has($id)
+ {
+ return isset($this->services[$id]);
+ }
+
+ public function getServices()
+ {
+ return $this->services;
+ }
+
+}
diff --git a/pandora_console/vendor/mpdf/mpdf/src/CssManager.php b/pandora_console/vendor/mpdf/mpdf/src/CssManager.php
index 1ab5c14be7..8e16dad232 100644
--- a/pandora_console/vendor/mpdf/mpdf/src/CssManager.php
+++ b/pandora_console/vendor/mpdf/mpdf/src/CssManager.php
@@ -5,6 +5,8 @@ namespace Mpdf;
use Mpdf\Color\ColorConverter;
use Mpdf\Css\TextVars;
use Mpdf\File\StreamWrapperChecker;
+use Mpdf\Http\ClientInterface;
+use Mpdf\Http\Request;
use Mpdf\Utils\Arrays;
use Mpdf\Utils\UtfString;
@@ -31,6 +33,11 @@ class CssManager
*/
private $colorConverter;
+ /**
+ * @var \Mpdf\AssetFetcher
+ */
+ private $assetFetcher;
+
var $tablecascadeCSS;
var $cascadeCSS;
@@ -47,26 +54,21 @@ class CssManager
var $cell_border_dominance_T;
- /**
- * @var \Mpdf\RemoteContentFetcher
- */
- private $remoteContentFetcher;
-
- public function __construct(Mpdf $mpdf, Cache $cache, SizeConverter $sizeConverter, ColorConverter $colorConverter, RemoteContentFetcher $remoteContentFetcher)
+ public function __construct(Mpdf $mpdf, Cache $cache, SizeConverter $sizeConverter, ColorConverter $colorConverter, AssetFetcher $assetFetcher)
{
$this->mpdf = $mpdf;
$this->cache = $cache;
$this->sizeConverter = $sizeConverter;
+ $this->assetFetcher = $assetFetcher;
$this->tablecascadeCSS = [];
$this->CSS = [];
$this->cascadeCSS = [];
$this->tbCSSlvl = 0;
$this->colorConverter = $colorConverter;
- $this->remoteContentFetcher = $remoteContentFetcher;
}
- function ReadCSS($html)
+ public function ReadCSS($html)
{
preg_match_all('/';
+ }
+ const bodyId = getBodyId(editor);
+ const bodyClass = getBodyClass(editor);
+ const isMetaKeyPressed = global$1.os.isMacOS() || global$1.os.isiOS() ? 'e.metaKey' : 'e.ctrlKey && !e.altKey';
+ const preventClicksOnLinksScript = ' ';
+ const directionality = editor.getBody().dir;
+ const dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : '';
+ const previewHtml = '' + '' + '' + headHtml + '' + '' + editor.getContent() + preventClicksOnLinksScript + '' + '';
+ return previewHtml;
+ };
+
+ const open = editor => {
+ const content = getPreviewHtml(editor);
+ const dataApi = editor.windowManager.open({
+ title: 'Preview',
+ size: 'large',
+ body: {
+ type: 'panel',
+ items: [{
+ name: 'preview',
+ type: 'iframe',
+ sandboxed: true,
+ transparent: false
+ }]
+ },
+ buttons: [{
+ type: 'cancel',
+ name: 'close',
+ text: 'Close',
+ primary: true
+ }],
+ initialData: { preview: content }
+ });
+ dataApi.focus('close');
+ };
+
+ const register$1 = editor => {
+ editor.addCommand('mcePreview', () => {
+ open(editor);
+ });
+ };
+
+ const register = editor => {
+ const onAction = () => editor.execCommand('mcePreview');
+ editor.ui.registry.addButton('preview', {
+ icon: 'preview',
+ tooltip: 'Preview',
+ onAction
+ });
+ editor.ui.registry.addMenuItem('preview', {
+ icon: 'preview',
+ text: 'Preview',
+ onAction
+ });
+ };
+
+ var Plugin = () => {
+ global$2.add('preview', editor => {
+ register$1(editor);
+ register(editor);
+ });
+ };
+
+ Plugin();
+
+})();
diff --git a/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js b/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js
new file mode 100644
index 0000000000..81d853d70f
--- /dev/null
+++ b/pandora_console/vendor/tinymce/tinymce/plugins/preview/plugin.min.js
@@ -0,0 +1,4 @@
+/**
+ * TinyMCE version 6.4.1 (2023-03-29)
+ */
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=e=>t=>t.options.get(e),i=n("content_style"),s=n("content_css_cors"),c=n("body_class"),r=n("body_id");e.add("preview",(e=>{(e=>{e.addCommand("mcePreview",(()=>{(e=>{const n=(e=>{var n;let l="";const a=e.dom.encode,d=null!==(n=i(e))&&void 0!==n?n:"";l+='';const m=s(e)?' crossorigin="anonymous"':"";o.each(e.contentCSS,(t=>{l+='"})),d&&(l+='");const y=r(e),u=c(e),v=' ';
+ const directionality = editor.getBody().dir;
+ const dirAttr = directionality ? ' dir="' + encode(directionality) + '"' : '';
+ html = '' + '' + '' + '' + contentCssEntries + preventClicksOnLinksScript + '' + '' + parseAndSerialize(editor, html) + '' + '';
+ }
+ return replaceTemplateValues(html, getPreviewReplaceValues(editor));
+ };
+ const open = (editor, templateList) => {
+ const createTemplates = () => {
+ if (!templateList || templateList.length === 0) {
+ const message = editor.translate('No templates defined.');
+ editor.notificationManager.open({
+ text: message,
+ type: 'info'
+ });
+ return Optional.none();
+ }
+ return Optional.from(global$2.map(templateList, (template, index) => {
+ const isUrlTemplate = t => t.url !== undefined;
+ return {
+ selected: index === 0,
+ text: template.title,
+ value: {
+ url: isUrlTemplate(template) ? Optional.from(template.url) : Optional.none(),
+ content: !isUrlTemplate(template) ? Optional.from(template.content) : Optional.none(),
+ description: template.description
+ }
+ };
+ }));
+ };
+ const createSelectBoxItems = templates => map(templates, t => ({
+ text: t.text,
+ value: t.text
+ }));
+ const findTemplate = (templates, templateTitle) => find(templates, t => t.text === templateTitle);
+ const loadFailedAlert = api => {
+ editor.windowManager.alert('Could not load the specified template.', () => api.focus('template'));
+ };
+ const getTemplateContent = t => t.value.url.fold(() => Promise.resolve(t.value.content.getOr('')), url => fetch(url).then(res => res.ok ? res.text() : Promise.reject()));
+ const onChange = (templates, updateDialog) => (api, change) => {
+ if (change.name === 'template') {
+ const newTemplateTitle = api.getData().template;
+ findTemplate(templates, newTemplateTitle).each(t => {
+ api.block('Loading...');
+ getTemplateContent(t).then(previewHtml => {
+ updateDialog(api, t, previewHtml);
+ }).catch(() => {
+ updateDialog(api, t, '');
+ api.setEnabled('save', false);
+ loadFailedAlert(api);
+ });
+ });
+ }
+ };
+ const onSubmit = templates => api => {
+ const data = api.getData();
+ findTemplate(templates, data.template).each(t => {
+ getTemplateContent(t).then(previewHtml => {
+ editor.execCommand('mceInsertTemplate', false, previewHtml);
+ api.close();
+ }).catch(() => {
+ api.setEnabled('save', false);
+ loadFailedAlert(api);
+ });
+ });
+ };
+ const openDialog = templates => {
+ const selectBoxItems = createSelectBoxItems(templates);
+ const buildDialogSpec = (bodyItems, initialData) => ({
+ title: 'Insert Template',
+ size: 'large',
+ body: {
+ type: 'panel',
+ items: bodyItems
+ },
+ initialData,
+ buttons: [
+ {
+ type: 'cancel',
+ name: 'cancel',
+ text: 'Cancel'
+ },
+ {
+ type: 'submit',
+ name: 'save',
+ text: 'Save',
+ primary: true
+ }
+ ],
+ onSubmit: onSubmit(templates),
+ onChange: onChange(templates, updateDialog)
+ });
+ const updateDialog = (dialogApi, template, previewHtml) => {
+ const content = getPreviewContent(editor, previewHtml);
+ const bodyItems = [
+ {
+ type: 'selectbox',
+ name: 'template',
+ label: 'Templates',
+ items: selectBoxItems
+ },
+ {
+ type: 'htmlpanel',
+ html: `${ htmlEscape(template.value.description) }
`
+ },
+ {
+ label: 'Preview',
+ type: 'iframe',
+ name: 'preview',
+ sandboxed: false,
+ transparent: false
+ }
+ ];
+ const initialData = {
+ template: template.text,
+ preview: content
+ };
+ dialogApi.unblock();
+ dialogApi.redial(buildDialogSpec(bodyItems, initialData));
+ dialogApi.focus('template');
+ };
+ const dialogApi = editor.windowManager.open(buildDialogSpec([], {
+ template: '',
+ preview: ''
+ }));
+ dialogApi.block('Loading...');
+ getTemplateContent(templates[0]).then(previewHtml => {
+ updateDialog(dialogApi, templates[0], previewHtml);
+ }).catch(() => {
+ updateDialog(dialogApi, templates[0], '');
+ dialogApi.setEnabled('save', false);
+ loadFailedAlert(dialogApi);
+ });
+ };
+ const optTemplates = createTemplates();
+ optTemplates.each(openDialog);
+ };
+
+ const showDialog = editor => templates => {
+ open(editor, templates);
+ };
+ const register$1 = editor => {
+ editor.addCommand('mceInsertTemplate', curry(insertTemplate, editor));
+ editor.addCommand('mceTemplate', createTemplateList(editor, showDialog(editor)));
+ };
+
+ const setup = editor => {
+ editor.on('PreProcess', o => {
+ const dom = editor.dom, dateFormat = getMdateFormat(editor);
+ global$2.each(dom.select('div', o.node), e => {
+ if (dom.hasClass(e, 'mceTmpl')) {
+ global$2.each(dom.select('*', e), e => {
+ if (hasAnyClasses(dom, e, getModificationDateClasses(editor))) {
+ e.innerHTML = getDateTime(editor, dateFormat);
+ }
+ });
+ replaceVals(editor, e);
+ }
+ });
+ });
+ };
+
+ const register = editor => {
+ const onAction = () => editor.execCommand('mceTemplate');
+ editor.ui.registry.addButton('template', {
+ icon: 'template',
+ tooltip: 'Insert template',
+ onAction
+ });
+ editor.ui.registry.addMenuItem('template', {
+ icon: 'template',
+ text: 'Insert template...',
+ onAction
+ });
+ };
+
+ var Plugin = () => {
+ global$3.add('template', editor => {
+ register$2(editor);
+ register(editor);
+ register$1(editor);
+ setup(editor);
+ });
+ };
+
+ Plugin();
+
+})();
diff --git a/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js b/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js
new file mode 100644
index 0000000000..b97aaf72cc
--- /dev/null
+++ b/pandora_console/vendor/tinymce/tinymce/plugins/template/plugin.min.js
@@ -0,0 +1,4 @@
+/**
+ * TinyMCE version 6.4.1 (2023-03-29)
+ */
+!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(a=n=e,(r=String).prototype.isPrototypeOf(a)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var a,n,r,s})(t)===e,a=t("string"),n=t("object"),r=t("array"),s=("function",e=>"function"==typeof e);const l=(!1,()=>false);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");const c=e=>t=>t.options.get(e),i=c("template_cdate_classes"),u=c("template_mdate_classes"),m=c("template_selected_content_classes"),p=c("template_preview_replace_values"),d=c("template_replace_values"),h=c("templates"),g=c("template_cdate_format"),v=c("template_mdate_format"),y=c("content_style"),f=c("content_css_cors"),_=c("body_class"),b=(e,t)=>{if((e=""+e).length{const n="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),r="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),s="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),l="January February March April May June July August September October November December".split(" ");return(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",b(a.getMonth()+1,2))).replace("%d",b(a.getDate(),2))).replace("%H",""+b(a.getHours(),2))).replace("%M",""+b(a.getMinutes(),2))).replace("%S",""+b(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(l[a.getMonth()]))).replace("%b",""+e.translate(s[a.getMonth()]))).replace("%A",""+e.translate(r[a.getDay()]))).replace("%a",""+e.translate(n[a.getDay()]))).replace("%%","%")};class T{constructor(e,t){this.tag=e,this.value=t}static some(e){return new T(!0,e)}static none(){return T.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?T.some(e(this.value)):T.none()}bind(e){return this.tag?e(this.value):T.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:T.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?T.none():T.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}T.singletonNone=new T(!1);const x=Object.hasOwnProperty;var S=tinymce.util.Tools.resolve("tinymce.html.Serializer");const w={'"':""","<":"<",">":">","&":"&","'":"'"},C=e=>e.replace(/["'<>&]/g,(e=>{return(t=w,a=e,((e,t)=>x.call(e,t))(t,a)?T.from(t[a]):T.none()).getOr(e);var t,a})),O=(e,t,a)=>((a,n)=>{for(let n=0,s=a.length;nS({validate:!0},e.schema).serialize(e.parser.parse(t,{insert:!0})),D=(e,t)=>(o.each(t,((t,a)=>{s(t)&&(t=t(a)),e=e.replace(new RegExp("\\{\\$"+a.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")+"\\}","g"),t)})),e),I=(e,t)=>{const a=e.dom,n=d(e);o.each(a.select("*",t),(e=>{o.each(n,((t,n)=>{a.hasClass(e,n)&&s(t)&&t(e)}))}))},N=(e,t,a)=>{const n=e.dom,r=e.selection.getContent();a=D(a,d(e));let s=n.create("div",{},A(e,a));const l=n.select(".mceTmpl",s);l&&l.length>0&&(s=n.create("div"),s.appendChild(l[0].cloneNode(!0))),o.each(n.select("*",s),(t=>{O(n,t,i(e))&&(t.innerHTML=M(e,g(e))),O(n,t,u(e))&&(t.innerHTML=M(e,v(e))),O(n,t,m(e))&&(t.innerHTML=r)})),I(e,s),e.execCommand("mceInsertContent",!1,s.innerHTML),e.addVisual()};var k=tinymce.util.Tools.resolve("tinymce.Env");const P=(e,t)=>{const a=(e,t)=>((e,t,a)=>{for(let n=0,r=e.length;ne.text===t),l),n=t=>{e.windowManager.alert("Could not load the specified template.",(()=>t.focus("template")))},r=e=>e.value.url.fold((()=>Promise.resolve(e.value.content.getOr(""))),(e=>fetch(e).then((e=>e.ok?e.text():Promise.reject())))),s=(e,t)=>(s,l)=>{if("template"===l.name){const l=s.getData().template;a(e,l).each((e=>{s.block("Loading..."),r(e).then((a=>{t(s,e,a)})).catch((()=>{t(s,e,""),s.setEnabled("save",!1),n(s)}))}))}},c=t=>s=>{const l=s.getData();a(t,l.template).each((t=>{r(t).then((t=>{e.execCommand("mceInsertTemplate",!1,t),s.close()})).catch((()=>{s.setEnabled("save",!1),n(s)}))}))};(()=>{if(!t||0===t.length){const t=e.translate("No templates defined.");return e.notificationManager.open({text:t,type:"info"}),T.none()}return T.from(o.map(t,((e,t)=>{const a=e=>void 0!==e.url;return{selected:0===t,text:e.title,value:{url:a(e)?T.from(e.url):T.none(),content:a(e)?T.none():T.from(e.content),description:e.description}}})))})().each((t=>{const a=(e=>((e,t)=>{const a=e.length,n=new Array(a);for(let t=0;t({title:"Insert Template",size:"large",body:{type:"panel",items:e},initialData:a,buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:c(t),onChange:s(t,i)}),i=(t,n,r)=>{const s=((e,t)=>{var a;if(-1===t.indexOf("")){let n="";const r=null!==(a=y(e))&&void 0!==a?a:"",s=f(e)?' crossorigin="anonymous"':"";o.each(e.contentCSS,(t=>{n+='"})),r&&(n+='");const l=_(e),c=e.dom.encode,i='