mirror of
https://github.com/Combodo/iTop.git
synced 2026-02-12 23:14:18 +01:00
Merge remote-tracking branch 'refs/remotes/origin/support/3.2' into develop
This commit is contained in:
14
composer.lock
generated
14
composer.lock
generated
@@ -4911,20 +4911,20 @@
|
||||
},
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"version": "6.6.5",
|
||||
"version": "6.7.5",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tecnickcom/TCPDF.git",
|
||||
"reference": "5fce932fcee4371865314ab7f6c0d85423c5c7ce"
|
||||
"reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/5fce932fcee4371865314ab7f6c0d85423c5c7ce",
|
||||
"reference": "5fce932fcee4371865314ab7f6c0d85423c5c7ce",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/951eabf0338ec2522bd0d5d9c79b08a3a3d36b36",
|
||||
"reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
@@ -4971,7 +4971,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/tecnickcom/TCPDF/issues",
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.6.5"
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.7.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
@@ -4979,7 +4979,7 @@
|
||||
"type": "custom"
|
||||
}
|
||||
],
|
||||
"time": "2023-09-06T15:09:26+00:00"
|
||||
"time": "2024-04-20T17:25:10+00:00"
|
||||
},
|
||||
{
|
||||
"name": "thenetworg/oauth2-azure",
|
||||
|
||||
@@ -39,6 +39,8 @@ $ibo-quick-create--compartment-title--line-spacing: $ibo-spacing-300 !default;
|
||||
|
||||
$ibo-quick-create--compartment-content--text-color: $ibo-color-grey-900 !default;
|
||||
|
||||
$ibo-quick-create--compartment-results--element--max-height: unset !default;
|
||||
|
||||
$ibo-quick-create--compartment-element--padding-x: $ibo-spacing-300 !default;
|
||||
$ibo-quick-create--compartment-element--padding-y: $ibo-spacing-200 !default;
|
||||
$ibo-quick-create--compartment-element--margin-x: -1 * $ibo-quick-create--compartment-element--padding-x !default;
|
||||
@@ -49,6 +51,7 @@ $ibo-quick-create--compartment-element-image--margin-right: $ibo-spacing-300 !de
|
||||
$ibo-quick-create--compartment-element-image--width: 20px !default;
|
||||
|
||||
$ibo-quick-create--compartment-results--container--width: 100% !important !default;
|
||||
$ibo-quick-create--compartment-results--container--background-color: transparent !default;
|
||||
|
||||
$ibo-quick-create--compartment--placeholder-image--margin-top: $ibo-spacing-600 !default;
|
||||
$ibo-quick-create--compartment--placeholder-image--margin-bottom: $ibo-spacing-500 !default;
|
||||
@@ -219,28 +222,38 @@ $ibo-quick-create--compartment--placeholder-hint--text-color: $ibo-color-grey-70
|
||||
}
|
||||
|
||||
.ibo-quick-create--compartment-results--container{
|
||||
position: static;
|
||||
width: $ibo-quick-create--compartment-results--container--width;
|
||||
background: $ibo-quick-create--compartment-results--container--background-color;
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
.ibo-quick-create--compartment-results--element > .option{
|
||||
padding: $ibo-quick-create--compartment-element--padding-y $ibo-quick-create--compartment-element--padding-x;
|
||||
margin-left: $ibo-quick-create--compartment-element--margin-x;
|
||||
margin-right: $ibo-quick-create--compartment-element--margin-x;
|
||||
color: inherit;
|
||||
.ibo-quick-create--compartment-results--element {
|
||||
overflow: unset;
|
||||
max-height: $ibo-quick-create--compartment-results--element--max-height;
|
||||
|
||||
&> .option {
|
||||
padding: $ibo-quick-create--compartment-element--padding-y $ibo-quick-create--compartment-element--padding-x;
|
||||
margin-left: $ibo-quick-create--compartment-element--margin-x;
|
||||
margin-right: $ibo-quick-create--compartment-element--margin-x;
|
||||
color: inherit;
|
||||
|
||||
@extend %ibo-text-truncated-with-ellipsis;
|
||||
@extend %ibo-text-truncated-with-ellipsis;
|
||||
|
||||
&.active{
|
||||
background-color: $ibo-quick-create--compartment-element--background-color--is-active;
|
||||
border-radius: $ibo-quick-create--compartment-element--border-radius--is-active;
|
||||
}
|
||||
&:hover{
|
||||
cursor: pointer;
|
||||
@extend a;
|
||||
}
|
||||
&.active {
|
||||
background-color: $ibo-quick-create--compartment-element--background-color--is-active;
|
||||
border-radius: $ibo-quick-create--compartment-element--border-radius--is-active;
|
||||
}
|
||||
|
||||
.highlight{
|
||||
font-weight: bold;
|
||||
}
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
@extend a;
|
||||
}
|
||||
|
||||
.highlight {
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ibo-quick-create--compartment--placeholder{
|
||||
|
||||
21
css/backoffice/vendors/_selectize.scss
vendored
21
css/backoffice/vendors/_selectize.scss
vendored
@@ -23,6 +23,17 @@ $ibo-vendors-selectize--item--ignore-partial--background-color: $ibo-color-grey-
|
||||
|
||||
$ibo-vendors-selectize--input-error--border: 1px solid $ibo-color-red-600 !default;
|
||||
|
||||
$ibo-vendors-selectize--input--border-color: $ibo-color-grey-500 !default;
|
||||
|
||||
$ibo-vendors-selectize--element--active--background: $ibo-color-white-100 !default;
|
||||
$ibo-vendors-selectize--element--active--color: $ibo-color-grey-500 !default;
|
||||
|
||||
$ibo-vendors-selectize--dropdown--background-color: $ibo-vendors-selectize-input--background-color !default;
|
||||
$ibo-vendors-selectize--dropdown--color: $ibo-vendors-selectize-input--color!default;
|
||||
|
||||
$ibo-vendors-selectize--header--padding-x: 8px !default;
|
||||
$ibo-vendors-selectize--header--padding-y: 5px !default;
|
||||
|
||||
.selectize-control.single .selectize-input {
|
||||
box-shadow: unset;
|
||||
background-color: $ibo-vendors-selectize-input--background-color;
|
||||
@@ -55,20 +66,22 @@ $ibo-vendors-selectize--input-error--border: 1px solid $ibo-color-red-600 !defau
|
||||
}
|
||||
|
||||
.selectize-control.single .selectize-input, .selectize-dropdown.single {
|
||||
border-color: $ibo-color-grey-500;
|
||||
border-color: $ibo-vendors-selectize--input--border-color;
|
||||
}
|
||||
|
||||
.selectize-dropdown {
|
||||
background-color: $ibo-vendors-selectize--dropdown--background-color;
|
||||
color: $ibo-vendors-selectize--dropdown--color;
|
||||
.selected,
|
||||
.active,
|
||||
.active:not(.selected){
|
||||
background: #f5fafd;
|
||||
color: #495c68;
|
||||
background: $ibo-vendors-selectize--element--active--background;
|
||||
color: $ibo-vendors-selectize--element--active--color;
|
||||
}
|
||||
|
||||
[data-selectable],
|
||||
.optgroup-header {
|
||||
padding: 5px 8px;
|
||||
padding: $ibo-vendors-selectize--header--padding-y $ibo-vendors-selectize--header--padding-x;
|
||||
}
|
||||
|
||||
.option {
|
||||
|
||||
@@ -176,6 +176,10 @@ $ibo-input-select--action-button--color: $ibo-input-select-wrapper--after--color
|
||||
$ibo-input-select-selectize--item--active--text-color: $ibo-color-grey-100;
|
||||
$ibo-input-select-selectize--item--active--background-color: $ibo-color-grey-500;
|
||||
$ibo-vendors-selectize-input--color: $ibo-body-text-color;
|
||||
$ibo-vendors-selectize-input--background-color: $ibo-input--background-color;
|
||||
$ibo-vendors-selectize--input--border-color: $ibo-input--border-color;
|
||||
$ibo-vendors-selectize--element--active--background: $ibo-color-grey-400;
|
||||
$ibo-vendors-selectize--element--active--color: $ibo-body-text-color;
|
||||
|
||||
$ibo-popover-menu--item-separator--background-color: $ibo-color-grey-500;
|
||||
$ibo-popover-menu--item--text-color: $ibo-color-grey-200;
|
||||
|
||||
@@ -5330,23 +5330,23 @@
|
||||
},
|
||||
{
|
||||
"name": "tecnickcom/tcpdf",
|
||||
"version": "6.6.5",
|
||||
"version_normalized": "6.6.5.0",
|
||||
"version": "6.7.5",
|
||||
"version_normalized": "6.7.5.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tecnickcom/TCPDF.git",
|
||||
"reference": "5fce932fcee4371865314ab7f6c0d85423c5c7ce"
|
||||
"reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/5fce932fcee4371865314ab7f6c0d85423c5c7ce",
|
||||
"reference": "5fce932fcee4371865314ab7f6c0d85423c5c7ce",
|
||||
"url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/951eabf0338ec2522bd0d5d9c79b08a3a3d36b36",
|
||||
"reference": "951eabf0338ec2522bd0d5d9c79b08a3a3d36b36",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"time": "2023-09-06T15:09:26+00:00",
|
||||
"time": "2024-04-20T17:25:10+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
@@ -5393,7 +5393,7 @@
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/tecnickcom/TCPDF/issues",
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.6.5"
|
||||
"source": "https://github.com/tecnickcom/TCPDF/tree/6.7.5"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
'name' => 'combodo/itop',
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '71e36d264e098583e31c752528c815d1f9e29032',
|
||||
'reference' => 'e363692822a66c4d716075b386ceca676ad0ced6',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -22,7 +22,7 @@
|
||||
'combodo/itop' => array(
|
||||
'pretty_version' => 'dev-develop',
|
||||
'version' => 'dev-develop',
|
||||
'reference' => '71e36d264e098583e31c752528c815d1f9e29032',
|
||||
'reference' => 'e363692822a66c4d716075b386ceca676ad0ced6',
|
||||
'type' => 'project',
|
||||
'install_path' => __DIR__ . '/../../',
|
||||
'aliases' => array(),
|
||||
@@ -720,9 +720,9 @@
|
||||
'dev_requirement' => false,
|
||||
),
|
||||
'tecnickcom/tcpdf' => array(
|
||||
'pretty_version' => '6.6.5',
|
||||
'version' => '6.6.5.0',
|
||||
'reference' => '5fce932fcee4371865314ab7f6c0d85423c5c7ce',
|
||||
'pretty_version' => '6.7.5',
|
||||
'version' => '6.7.5.0',
|
||||
'reference' => '951eabf0338ec2522bd0d5d9c79b08a3a3d36b36',
|
||||
'type' => 'library',
|
||||
'install_path' => __DIR__ . '/../tecnickcom/tcpdf',
|
||||
'aliases' => array(),
|
||||
|
||||
@@ -1,10 +1,18 @@
|
||||
6.6.5 (2023-09-06)
|
||||
6.7.5 (2024-04-20)
|
||||
- Update GitHub actions
|
||||
- fix: CSV-2024-22640 (#712)
|
||||
|
||||
6.7.4 (2024-03-24)
|
||||
- Upgrade tcpdf tag encryption algorithm.
|
||||
- Fix regression issue #699.
|
||||
- Fix security issue.
|
||||
- [BREAKING CHANGE] The tcpdf HTML tag syntax has changed, see example_049.php.
|
||||
- New K_ALLOWED_TCPDF_TAGS configuration constant to set the allowed methods for the tcdpf HTML tag.
|
||||
- Raised minimum PHP version to PHP 5.5.0.
|
||||
|
||||
6.6.5 (2023-09-02)
|
||||
- Fix corrupted file.
|
||||
|
||||
6.6.4 (2023-09-06)
|
||||
- Fix GitHub automation tests.
|
||||
|
||||
6.6.3 (2023-09-06)
|
||||
- Fix SPDX license ID (#591)
|
||||
- Fix warning "array offset on value of type null" (#620)
|
||||
- Improve the README about the status of this library (#589)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
published by the Free Software Foundation, either version 3 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
2002-2023 Nicola Asuni - Tecnick.com LTD
|
||||
2002-2024 Nicola Asuni - Tecnick.com LTD
|
||||
|
||||
**********************************************************************
|
||||
**********************************************************************
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
* **category** Library
|
||||
* **author** Nicola Asuni <info@tecnick.com>
|
||||
* **copyright** 2002-2023 Nicola Asuni - Tecnick.com LTD
|
||||
* **copyright** 2002-2024 Nicola Asuni - Tecnick.com LTD
|
||||
* **license** http://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE.TXT)
|
||||
* **link** http://www.tcpdf.org
|
||||
* **source** https://github.com/tecnickcom/TCPDF
|
||||
|
||||
@@ -1 +1 @@
|
||||
6.6.5
|
||||
6.7.5
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
"barcodes"
|
||||
],
|
||||
"homepage": "http://www.tcpdf.org/",
|
||||
"version": "6.6.5",
|
||||
"version": "6.7.5",
|
||||
"license": "LGPL-3.0-or-later",
|
||||
"authors": [
|
||||
{
|
||||
@@ -22,7 +22,7 @@
|
||||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.3.0"
|
||||
"php": ">=5.5.0"
|
||||
},
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
|
||||
@@ -212,6 +212,14 @@ define('K_THAI_TOPCHARS', true);
|
||||
*/
|
||||
define('K_TCPDF_CALLS_IN_HTML', false);
|
||||
|
||||
/**
|
||||
* List of TCPDF methods that are allowed to be called using HTML syntax.
|
||||
* Note: each method name must end with surrounded with | (pipe) character.
|
||||
* The constant K_TCPDF_CALLS_IN_HTML must be set to true.
|
||||
* IMPORTANT: For security reason, disable this feature if you are allowing user HTML content.
|
||||
*/
|
||||
define('K_ALLOWED_TCPDF_TAGS', '');
|
||||
|
||||
/**
|
||||
* If true and PHP version is greater than 5, then the Error() method throw new exception instead of terminating the execution.
|
||||
*/
|
||||
|
||||
@@ -275,7 +275,7 @@ class TCPDF_COLORS {
|
||||
$color = strtolower($color);
|
||||
// check for javascript color array syntax
|
||||
if (strpos($color, '[') !== false) {
|
||||
if (preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\,]?([0-9\.]*)[\]]/', $color, $m) > 0) {
|
||||
if (preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\]]/', $color, $m) > 0) {
|
||||
$returncolor = array();
|
||||
switch ($m[1]) {
|
||||
case 'cmyk': {
|
||||
|
||||
@@ -55,7 +55,7 @@ class TCPDF_STATIC {
|
||||
* Current TCPDF version.
|
||||
* @private static
|
||||
*/
|
||||
private static $tcpdf_version = '6.6.5';
|
||||
private static $tcpdf_version = '6.7.5';
|
||||
|
||||
/**
|
||||
* String alias for total number of pages.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
<?php
|
||||
//============================================================+
|
||||
// File name : tcpdf.php
|
||||
// Version : 6.6.5
|
||||
// Version : 6.7.5
|
||||
// Begin : 2002-08-03
|
||||
// Last Update : 2023-09-06
|
||||
// Last Update : 2024-03-18
|
||||
// Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
|
||||
// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
|
||||
// -------------------------------------------------------------------
|
||||
// Copyright (C) 2002-2023 Nicola Asuni - Tecnick.com LTD
|
||||
// Copyright (C) 2002-2024 Nicola Asuni - Tecnick.com LTD
|
||||
//
|
||||
// This file is part of TCPDF software library.
|
||||
//
|
||||
@@ -128,7 +128,7 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php');
|
||||
* TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
|
||||
* @package com.tecnick.tcpdf
|
||||
* @brief PHP class for generating PDF documents without requiring external extensions.
|
||||
* @version 6.6.5
|
||||
* @version 6.7.5
|
||||
* @author Nicola Asuni - info@tecnick.com
|
||||
* @IgnoreAnnotation("protected")
|
||||
* @IgnoreAnnotation("public")
|
||||
@@ -838,6 +838,13 @@ class TCPDF {
|
||||
*/
|
||||
protected $file_id;
|
||||
|
||||
/**
|
||||
* Internal secret used to encrypt data.
|
||||
* @protected
|
||||
* @since 6.7.5 (2024-03-21)
|
||||
*/
|
||||
protected $hash_key;
|
||||
|
||||
// --- bookmark ---
|
||||
|
||||
/**
|
||||
@@ -1880,10 +1887,10 @@ class TCPDF {
|
||||
// set file ID for trailer
|
||||
$serformat = (is_array($format) ? json_encode($format) : $format);
|
||||
$this->file_id = md5(TCPDF_STATIC::getRandomSeed('TCPDF'.$orientation.$unit.$serformat.$encoding));
|
||||
$this->hash_key = hash_hmac('sha256', TCPDF_STATIC::getRandomSeed($this->file_id), TCPDF_STATIC::getRandomSeed('TCPDF'), false);
|
||||
$this->font_obj_ids = array();
|
||||
$this->page_obj_id = array();
|
||||
$this->form_obj_id = array();
|
||||
|
||||
// set pdf/a mode
|
||||
if ($pdfa != false) {
|
||||
$this->pdfa_mode = true;
|
||||
@@ -4427,7 +4434,7 @@ class TCPDF {
|
||||
$this->Error('Unknow font type: '.$type.'');
|
||||
}
|
||||
// set name if unset
|
||||
if (!isset($name) OR empty($name)) {
|
||||
if (empty($name)) {
|
||||
$name = $fontkey;
|
||||
}
|
||||
// create artificial font style variations if missing (only works with non-embedded fonts)
|
||||
@@ -4470,7 +4477,7 @@ class TCPDF {
|
||||
// we are inside an XObject template
|
||||
$this->xobjects[$this->xobjid]['fonts'][$fontkey] = $this->numfonts;
|
||||
}
|
||||
if (isset($diff) AND (!empty($diff))) {
|
||||
if (!empty($diff)) {
|
||||
//Search existing encodings
|
||||
$d = 0;
|
||||
$nb = count($this->diffs);
|
||||
@@ -16389,6 +16396,53 @@ class TCPDF {
|
||||
* @since 3.2.000 (2008-06-20)
|
||||
*/
|
||||
protected function getHtmlDomArray($html) {
|
||||
// set inheritable properties fot the first void element
|
||||
// possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing
|
||||
$dom = array(
|
||||
array(
|
||||
'tag' => false,
|
||||
'block' => false,
|
||||
'value' => '',
|
||||
'parent' => 0,
|
||||
'hide' => false,
|
||||
'fontname' => $this->FontFamily,
|
||||
'fontstyle' => $this->FontStyle,
|
||||
'fontsize' => $this->FontSizePt,
|
||||
'font-stretch' => $this->font_stretching,
|
||||
'letter-spacing' => $this->font_spacing,
|
||||
'stroke' => $this->textstrokewidth,
|
||||
'fill' => (($this->textrendermode % 2) == 0),
|
||||
'clip' => ($this->textrendermode > 3),
|
||||
'line-height' => $this->cell_height_ratio,
|
||||
'bgcolor' => false,
|
||||
'fgcolor' => $this->fgcolor, // color
|
||||
'strokecolor' => $this->strokecolor,
|
||||
'align' => '',
|
||||
'listtype' => '',
|
||||
'text-indent' => 0,
|
||||
'text-transform' => '',
|
||||
'border' => array(),
|
||||
'dir' => $this->rtl?'rtl':'ltr',
|
||||
'width' => 0,
|
||||
'height' => 0,
|
||||
'x' => 0,
|
||||
'y' => 0,
|
||||
'w' => 0,
|
||||
'h' => 0,
|
||||
'l' => 0,
|
||||
't' => 0,
|
||||
'r' => 0,
|
||||
'b' => 0,
|
||||
'padding' => array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0),
|
||||
'margin' => array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0),
|
||||
'border-spacing' => array('H' => 0, 'V' => 0),
|
||||
'border-collapse' => 'separate',
|
||||
)
|
||||
);
|
||||
|
||||
if(empty($html)) {
|
||||
return $dom;
|
||||
}
|
||||
// array of CSS styles ( selector => properties).
|
||||
$css = array();
|
||||
// get CSS array defined at previous call
|
||||
@@ -16533,37 +16587,8 @@ class TCPDF {
|
||||
// count elements
|
||||
$maxel = count($a);
|
||||
$elkey = 0;
|
||||
$key = 0;
|
||||
// create an array of elements
|
||||
$dom = array();
|
||||
$dom[$key] = array();
|
||||
// set inheritable properties fot the first void element
|
||||
// possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing
|
||||
$dom[$key]['tag'] = false;
|
||||
$dom[$key]['block'] = false;
|
||||
$dom[$key]['value'] = '';
|
||||
$dom[$key]['parent'] = 0;
|
||||
$dom[$key]['hide'] = false;
|
||||
$dom[$key]['fontname'] = $this->FontFamily;
|
||||
$dom[$key]['fontstyle'] = $this->FontStyle;
|
||||
$dom[$key]['fontsize'] = $this->FontSizePt;
|
||||
$dom[$key]['font-stretch'] = $this->font_stretching;
|
||||
$dom[$key]['letter-spacing'] = $this->font_spacing;
|
||||
$dom[$key]['stroke'] = $this->textstrokewidth;
|
||||
$dom[$key]['fill'] = (($this->textrendermode % 2) == 0);
|
||||
$dom[$key]['clip'] = ($this->textrendermode > 3);
|
||||
$dom[$key]['line-height'] = $this->cell_height_ratio;
|
||||
$dom[$key]['bgcolor'] = false;
|
||||
$dom[$key]['fgcolor'] = $this->fgcolor; // color
|
||||
$dom[$key]['strokecolor'] = $this->strokecolor;
|
||||
$dom[$key]['align'] = '';
|
||||
$dom[$key]['listtype'] = '';
|
||||
$dom[$key]['text-indent'] = 0;
|
||||
$dom[$key]['text-transform'] = '';
|
||||
$dom[$key]['border'] = array();
|
||||
$dom[$key]['dir'] = $this->rtl?'rtl':'ltr';
|
||||
$thead = false; // true when we are inside the THEAD tag
|
||||
++$key;
|
||||
$key = 1;
|
||||
$level = array();
|
||||
array_push($level, 0); // root
|
||||
while ($elkey < $maxel) {
|
||||
@@ -17200,41 +17225,59 @@ class TCPDF {
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an hash code used to ensure that the serialized data has been generated by this TCPDF instance.
|
||||
* @param string $data serialized data
|
||||
* @return string
|
||||
* @public static
|
||||
* Calculates the hash value of the given data.
|
||||
*
|
||||
* @param string $data The data to be hashed.
|
||||
* @return string The hashed value of the data.
|
||||
*/
|
||||
protected function getHashForTCPDFtagParams($data) {
|
||||
return md5(strlen($data).$this->file_id.$data);
|
||||
protected function hashTCPDFtag($data) {
|
||||
return hash_hmac('sha256', $data, $this->hash_key, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialize an array of parameters to be used with TCPDF tag in HTML code.
|
||||
* @param array $data parameters array
|
||||
* @return string containing serialized data
|
||||
* Serialize data to be used with TCPDF tag in HTML code.
|
||||
* @param string $method TCPDF method name
|
||||
* @param array $params Method parameters
|
||||
* @return string Serialized data
|
||||
* @public static
|
||||
*/
|
||||
public function serializeTCPDFtagParameters($data) {
|
||||
public function serializeTCPDFtag($method, $params=array()) {
|
||||
$data = array('m' => $method, 'p' => $params);
|
||||
$encoded = urlencode(json_encode($data));
|
||||
return $this->getHashForTCPDFtagParams($encoded).$encoded;
|
||||
$hash = $this->hashTCPDFtag($encoded);
|
||||
return strlen($hash).'+'.$hash.'+'.$encoded;
|
||||
}
|
||||
|
||||
/**
|
||||
* Unserialize parameters to be used with TCPDF tag in HTML code.
|
||||
* Unserialize data to be used with TCPDF tag in HTML code.
|
||||
* @param string $data serialized data
|
||||
* @return array containing unserialized data
|
||||
* @protected static
|
||||
*/
|
||||
protected function unserializeTCPDFtagParameters($data) {
|
||||
$hash = substr($data, 0, 32);
|
||||
$encoded = substr($data, 32);
|
||||
if ($hash != $this->getHashForTCPDFtagParams($encoded)) {
|
||||
protected function unserializeTCPDFtag($data) {
|
||||
$hpos = strpos($data, '+');
|
||||
$hlen = intval(substr($data, 0, $hpos));
|
||||
$hash = substr($data, $hpos + 1, $hlen);
|
||||
$encoded = substr($data, $hpos + 2 + $hlen);
|
||||
if ($hash != $this->hashTCPDFtag($encoded)) {
|
||||
$this->Error('Invalid parameters');
|
||||
}
|
||||
return json_decode(urldecode($encoded), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a TCPDF tag is allowed
|
||||
* @param string $method TCPDF method name
|
||||
* @return boolean
|
||||
* @protected
|
||||
*/
|
||||
protected function allowedTCPDFtag($method) {
|
||||
if (defined('K_ALLOWED_TCPDF_TAGS')) {
|
||||
return (strpos(K_ALLOWED_TCPDF_TAGS, '|'.$method.'|') !== false);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints a cell (rectangular area) with optional borders, background color and html text string.
|
||||
* The upper-left corner of the cell corresponds to the current position. After the call, the current position moves to the right or to the next line.<br />
|
||||
@@ -17248,8 +17291,7 @@ class TCPDF {
|
||||
* @param float|null $y upper-left corner Y coordinate
|
||||
* @param string $html html text to print. Default value: empty string.
|
||||
* @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:<ul><li>0: no border (default)</li><li>1: frame</li></ul> or a string containing some or all of the following characters (in any order):<ul><li>L: left</li><li>T: top</li><li>R: right</li><li>B: bottom</li></ul> or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0)))
|
||||
* @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul>
|
||||
Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
|
||||
* @param int $ln Indicates where the current position should go after the call. Possible values are:<ul><li>0: to the right (or left for RTL language)</li><li>1: to the beginning of the next line</li><li>2: below</li></ul> Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value: 0.
|
||||
* @param boolean $fill Indicates if the cell background must be painted (true) or transparent (false).
|
||||
* @param boolean $reseth if true reset the last cell height (default true).
|
||||
* @param string $align Allows to center or align the text. Possible values are:<ul><li>L : left align</li><li>C : center</li><li>R : right align</li><li>'' : empty string : left for LTR or right for RTL</li></ul>
|
||||
@@ -19510,17 +19552,14 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
case 'tcpdf': {
|
||||
if (defined('K_TCPDF_CALLS_IN_HTML') AND (K_TCPDF_CALLS_IN_HTML === true)) {
|
||||
// Special tag used to call TCPDF methods
|
||||
if (isset($tag['attribute']['method'])) {
|
||||
$tcpdf_method = $tag['attribute']['method'];
|
||||
if (method_exists($this, $tcpdf_method)) {
|
||||
if (isset($tag['attribute']['params']) AND (!empty($tag['attribute']['params']))) {
|
||||
$params = $this->unserializeTCPDFtagParameters($tag['attribute']['params']);
|
||||
call_user_func_array(array($this, $tcpdf_method), $params);
|
||||
} else {
|
||||
$this->$tcpdf_method();
|
||||
}
|
||||
$this->newline = true;
|
||||
// This tag is disabled by default by the K_TCPDF_CALLS_IN_HTML constant on TCPDF configuration file.
|
||||
// Please use this feature only if you are in control of the HTML content and you are sure that it does not contain any harmful code.
|
||||
if (!empty($tag['attribute']['data'])) {
|
||||
$tcpdf_tag_data = $this->unserializeTCPDFtag($tag['attribute']['data']);
|
||||
if ($this->allowedTCPDFtag($tcpdf_tag_data['m'])) {
|
||||
call_user_func_array(array($this, $tcpdf_tag_data['m']), $tcpdf_tag_data['p']);
|
||||
}
|
||||
$this->newline = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -21867,25 +21906,23 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
|
||||
* @since 4.5.029 (2009-03-19)
|
||||
*/
|
||||
public function rollbackTransaction($self=false) {
|
||||
if (isset($this->objcopy)) {
|
||||
$objcopy = $this->objcopy;
|
||||
$this->_destroy(true, true);
|
||||
if ($self) {
|
||||
$objvars = get_object_vars($objcopy);
|
||||
foreach ($objvars as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
$objcopy->_destroy(true, true);
|
||||
/* The unique file_id should not be used during cleanup again */
|
||||
$objcopy->file_id = NULL;
|
||||
unset($objcopy);
|
||||
return $this;
|
||||
}
|
||||
/* The unique file_id should not be used during cleanup again */
|
||||
$this->file_id = NULL;
|
||||
return $objcopy;
|
||||
if (!isset($this->objcopy)) {
|
||||
return $this;
|
||||
}
|
||||
return $this;
|
||||
$file_id = $this->file_id;
|
||||
$objcopy = $this->objcopy;
|
||||
$this->_destroy(true, true);
|
||||
if ($self) {
|
||||
$objvars = get_object_vars($objcopy);
|
||||
foreach ($objvars as $key => $value) {
|
||||
$this->$key = $value;
|
||||
}
|
||||
$objcopy->_destroy(true, true);
|
||||
unset($objcopy);
|
||||
return $this;
|
||||
}
|
||||
$this->file_id = $file_id;
|
||||
return $objcopy;
|
||||
}
|
||||
|
||||
// --- MULTI COLUMNS METHODS -----------------------
|
||||
|
||||
@@ -228,6 +228,10 @@ if (!defined('K_TCPDF_CALLS_IN_HTML')) {
|
||||
define('K_TCPDF_CALLS_IN_HTML', false);
|
||||
}
|
||||
|
||||
if (!defined('K_ALLOWED_TCPDF_TAGS')) {
|
||||
define('K_ALLOWED_TCPDF_TAGS', '');
|
||||
}
|
||||
|
||||
if (!defined('K_TCPDF_THROW_EXCEPTION_ERROR')) {
|
||||
define('K_TCPDF_THROW_EXCEPTION_ERROR', false);
|
||||
}
|
||||
|
||||
@@ -247,11 +247,11 @@ JS
|
||||
$aMoreInfoBlocks = [];
|
||||
|
||||
$oDevelopedQuerySet = new FieldSet(Dict::S('UI:RunQuery:DevelopedQuery'));
|
||||
$oDevelopedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode(utils::EscapeHtml($oFilter->ToOQL())));
|
||||
$oDevelopedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($oFilter->ToOQL()));
|
||||
$aMoreInfoBlocks[] = $oDevelopedQuerySet;
|
||||
|
||||
$oSerializedQuerySet = new FieldSet(Dict::S('UI:RunQuery:SerializedFilter'));
|
||||
$oSerializedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode(utils::EscapeHtml($oFilter->serialize())));
|
||||
$oSerializedQuerySet->AddSubBlock(UIContentBlockUIBlockFactory::MakeForCode($oFilter->serialize()));
|
||||
$aMoreInfoBlocks[] = $oSerializedQuerySet;
|
||||
|
||||
|
||||
|
||||
@@ -45,33 +45,45 @@ class UIContentBlockUIBlockFactory extends AbstractUIBlockFactory
|
||||
* The \n are replaced by <br>
|
||||
*
|
||||
* @api
|
||||
* @param string $sCode
|
||||
* @param string $sCode plain text code
|
||||
* @param string|null $sId
|
||||
*
|
||||
* @return \Combodo\iTop\Application\UI\Base\Layout\UIContentBlock
|
||||
*/
|
||||
public static function MakeForCode(string $sCode, string $sId = null)
|
||||
{
|
||||
$oCode = new UIContentBlock($sId, ['ibo-is-code']);
|
||||
$sCode = str_replace("\n", '<br>', $sCode);
|
||||
$oCode->AddSubBlock(new Html($sCode));
|
||||
$sCode = str_replace("\n", '<br>', \utils::HtmlEntities($sCode));
|
||||
|
||||
return $oCode;
|
||||
return self::MakeFromHTMLCode($sId, $sCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Used to display a block of preformatted text in a <pre> tag.
|
||||
*
|
||||
* @api
|
||||
* @param string $sCode
|
||||
* @param string $sCode plain text code
|
||||
* @param string|null $sId
|
||||
*
|
||||
* @return \Combodo\iTop\Application\UI\Base\Layout\UIContentBlock
|
||||
*/
|
||||
public static function MakeForPreformatted(string $sCode, string $sId = null)
|
||||
{
|
||||
$sCode = '<pre>'.$sCode.'</pre>';
|
||||
$sCode = '<pre>'.\utils::HtmlEntities($sCode).'</pre>';
|
||||
|
||||
return static::MakeForCode($sCode, $sId);
|
||||
return self::MakeFromHTMLCode($sId, $sCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string|null $sId
|
||||
* @param string $sCode
|
||||
*
|
||||
* @return \Combodo\iTop\Application\UI\Base\Layout\UIContentBlock
|
||||
*/
|
||||
private static function MakeFromHTMLCode(?string $sId, string $sCode): UIContentBlock
|
||||
{
|
||||
$oCode = new UIContentBlock($sId, ['ibo-is-code']);
|
||||
$oCode->AddSubBlock(new Html($sCode));
|
||||
|
||||
return $oCode;
|
||||
}
|
||||
}
|
||||
@@ -41,6 +41,7 @@ use Combodo\iTop\Application\UI\Base\Component\PopoverMenu\PopoverMenu;
|
||||
use Combodo\iTop\Application\UI\Base\Component\Title\TitleUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\Object\ObjectFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\PageContent\PageContentFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockUIBlockFactory;
|
||||
use Combodo\iTop\Application\UI\Base\Layout\UIContentBlockWithJSRefreshCallback;
|
||||
use Combodo\iTop\Application\WebPage\iTopWebPage;
|
||||
use LoginWebPage;
|
||||
@@ -355,6 +356,22 @@ $oDashletFieldset2->AddSubBlock($oDashletField4);
|
||||
$oDashletFieldset2->AddSubBlock($oDashletField5);
|
||||
$oDashletFieldset2->AddSubBlock($oDashletField6);
|
||||
|
||||
/////////
|
||||
// Code
|
||||
/////////
|
||||
|
||||
$oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('Code examples (MakeForCode)', 2 ));
|
||||
$oCode1 = UIContentBlockUIBlockFactory::MakeForCode('function mean(int $a, int $b) {
|
||||
return ($a + $b)/2
|
||||
}');
|
||||
$oPage->AddUiBlock($oCode1);
|
||||
|
||||
$oPage->AddUiBlock(TitleUIBlockFactory::MakeNeutral('Code examples (MakeForPreformatted)', 2 ));
|
||||
$oCode2 = UIContentBlockUIBlockFactory::MakeForPreformatted('function mean(int $a, int $b) {
|
||||
return ($a + $b)/2
|
||||
}');
|
||||
$oPage->AddUiBlock($oCode2);
|
||||
|
||||
/////////
|
||||
// Pill
|
||||
/////////
|
||||
|
||||
@@ -127,7 +127,10 @@ abstract class ItopDataTestCase extends ItopTestCase
|
||||
}
|
||||
if (static::CREATE_TEST_ORG)
|
||||
{
|
||||
$this->GivenTestOrganization();
|
||||
// Create a specific organization for the tests
|
||||
$this->iTestOrgId = $this->GivenObjectInDB('Organization', [
|
||||
'name' => 'UnitTestOrganization',
|
||||
]);
|
||||
}
|
||||
|
||||
$oConfig = MetaModel::GetConfig();
|
||||
@@ -1175,29 +1178,6 @@ abstract class ItopDataTestCase extends ItopTestCase
|
||||
return $iKey;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create an Organization in database
|
||||
*
|
||||
* @param string $sName
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
protected function GivenOrganization($sName): string
|
||||
{
|
||||
$sId = $this->GivenObjectInDB('Organization', [
|
||||
'name' => $sName,
|
||||
]);
|
||||
$this->debug("Created Organization $sName");
|
||||
|
||||
return $sId;
|
||||
}
|
||||
|
||||
protected function GivenTestOrganization(): void
|
||||
{
|
||||
// Create a specific organization for the tests
|
||||
$this->iTestOrgId = $this->GivenOrganization('UnitTestOrganization');
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a Farm in database
|
||||
*
|
||||
|
||||
@@ -46,17 +46,21 @@ class GivenObjectInDBTest extends ItopDataTestCase
|
||||
'first_name' => 'John',
|
||||
]);
|
||||
|
||||
$iRole = $this->GivenObjectInDB('ContactType', [
|
||||
'name' => 'The Boss',
|
||||
]);
|
||||
|
||||
$iTeam = $this->GivenObjectInDB('Team', [
|
||||
'name' => 'The A Team',
|
||||
'persons_list' => [
|
||||
"person_id:$iPerson;role_id:1"
|
||||
"person_id:$iPerson;role_id:$iRole"
|
||||
],
|
||||
]);
|
||||
|
||||
$oSet = new \DBObjectSet(\DBObjectSearch::FromOQL("SELECT lnkPersonToTeam AS lnk WHERE lnk.team_id = $iTeam AND lnk.person_id = $iPerson"));
|
||||
$this->assertEquals(1, $oSet->Count(), "The link between the team and the person should be there");
|
||||
$oLnk = $oSet->Fetch();
|
||||
$this->assertEquals(1, $oLnk->Get('role_id'), "The role should be correctly set");
|
||||
$this->assertEquals($iRole, $oLnk->Get('role_id'), "The role should be correctly set");
|
||||
}
|
||||
|
||||
public function testItShouldFailExplicitlyWhenAnAttributeCodeIsUnknown()
|
||||
|
||||
Reference in New Issue
Block a user