mirror of
https://github.com/pluginsGLPI/example.git
synced 2025-08-23 22:35:48 +02:00
phpstan
This commit is contained in:
@@ -5,8 +5,11 @@
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.75",
|
||||
"friendsoftwig/twigcs": "^6.1",
|
||||
"glpi-project/phpstan-glpi": "^1.0",
|
||||
"glpi-project/tools": "^0.7.5",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.4"
|
||||
"php-parallel-lint/php-parallel-lint": "^1.4",
|
||||
"phpstan/phpstan": "^2.1",
|
||||
"phpstan/phpstan-deprecation-rules": "^2.0"
|
||||
},
|
||||
"config": {
|
||||
"optimize-autoloader": true,
|
||||
|
155
composer.lock
generated
155
composer.lock
generated
@@ -4,7 +4,7 @@
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "981190cd221bfc071af80a355f4b0b57",
|
||||
"content-hash": "0b8145569965029789c21a725b504a22",
|
||||
"packages": [],
|
||||
"packages-dev": [
|
||||
{
|
||||
@@ -565,6 +565,54 @@
|
||||
},
|
||||
"time": "2024-11-27T21:59:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/phpstan-glpi",
|
||||
"version": "1.0.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/glpi-project/phpstan-glpi.git",
|
||||
"reference": "432f7a10d221f60abdbd4ab4676dbd846a485df1"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/glpi-project/phpstan-glpi/zipball/432f7a10d221f60abdbd4ab4676dbd846a485df1",
|
||||
"reference": "432f7a10d221f60abdbd4ab4676dbd846a485df1",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.4",
|
||||
"phpstan/phpstan": "^2.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"friendsofphp/php-cs-fixer": "^3.75",
|
||||
"php-parallel-lint/php-parallel-lint": "^1.4",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"phpunit/phpunit": "^9.6"
|
||||
},
|
||||
"type": "phpstan-extension",
|
||||
"extra": {
|
||||
"phpstan": {
|
||||
"includes": [
|
||||
"rules.neon"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PHPStanGlpi\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan rules for GLPI.",
|
||||
"support": {
|
||||
"issues": "https://github.com/glpi-project/phpstan-glpi/issues",
|
||||
"source": "https://github.com/glpi-project/phpstan-glpi/tree/1.0.0"
|
||||
},
|
||||
"time": "2025-06-24T11:45:31+00:00"
|
||||
},
|
||||
{
|
||||
"name": "glpi-project/tools",
|
||||
"version": "0.7.5",
|
||||
@@ -682,6 +730,111 @@
|
||||
},
|
||||
"time": "2024-03-27T12:14:49+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "2.1.17",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||
"reference": "89b5ef665716fa2a52ecd2633f21007a6a349053",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.4|^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpstan/phpstan-shim": "*"
|
||||
},
|
||||
"bin": [
|
||||
"phpstan",
|
||||
"phpstan.phar"
|
||||
],
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan - PHP Static Analysis Tool",
|
||||
"keywords": [
|
||||
"dev",
|
||||
"static analysis"
|
||||
],
|
||||
"support": {
|
||||
"docs": "https://phpstan.org/user-guide/getting-started",
|
||||
"forum": "https://github.com/phpstan/phpstan/discussions",
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"security": "https://github.com/phpstan/phpstan/security/policy",
|
||||
"source": "https://github.com/phpstan/phpstan-src"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/ondrejmirtes",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2025-05-21T20:55:28+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpstan/phpstan-deprecation-rules",
|
||||
"version": "2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan-deprecation-rules.git",
|
||||
"reference": "468e02c9176891cc901143da118f09dc9505fc2f"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan-deprecation-rules/zipball/468e02c9176891cc901143da118f09dc9505fc2f",
|
||||
"reference": "468e02c9176891cc901143da118f09dc9505fc2f",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.4 || ^8.0",
|
||||
"phpstan/phpstan": "^2.1.15"
|
||||
},
|
||||
"require-dev": {
|
||||
"php-parallel-lint/php-parallel-lint": "^1.2",
|
||||
"phpstan/phpstan-phpunit": "^2.0",
|
||||
"phpunit/phpunit": "^9.6"
|
||||
},
|
||||
"type": "phpstan-extension",
|
||||
"extra": {
|
||||
"phpstan": {
|
||||
"includes": [
|
||||
"rules.neon"
|
||||
]
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"PHPStan\\": "src/"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan rules for detecting usage of deprecated classes, methods, properties, constants and traits.",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan-deprecation-rules/issues",
|
||||
"source": "https://github.com/phpstan/phpstan-deprecation-rules/tree/2.0.3"
|
||||
},
|
||||
"time": "2025-05-14T10:56:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "psr/container",
|
||||
"version": "2.0.2",
|
||||
|
@@ -47,11 +47,6 @@ if (isset($_SESSION['glpipopup']['name'])) {
|
||||
Html::popHeader(__('Test rules engine'), $_SERVER['PHP_SELF']);
|
||||
include '../../../front/rulesengine.test.php';
|
||||
break;
|
||||
|
||||
case 'show_cache':
|
||||
Html::popHeader(__('Cache information'), $_SERVER['PHP_SELF']);
|
||||
include '../../../front/rule.cache.php';
|
||||
break;
|
||||
}
|
||||
echo "<div class='center'><br><a href='javascript:window.close()'>" . __('Back') . '</a>';
|
||||
echo '</div>';
|
||||
|
3
hook.php
3
hook.php
@@ -350,7 +350,7 @@ function plugin_example_searchOptionsValues($options = [])
|
||||
switch ($table . '.' . $field) {
|
||||
case 'glpi_plugin_example_examples.serial':
|
||||
echo __('Not really specific - Use your own dropdown - Just for example', 'example');
|
||||
GlpiDropdown::show(
|
||||
Dropdown::show(
|
||||
getItemTypeForTable($options['searchoption']['table']),
|
||||
['value' => $options['value'],
|
||||
'name' => $options['name'],
|
||||
@@ -729,6 +729,7 @@ function plugin_example_Status($param)
|
||||
// Do checks (no check for example)
|
||||
$ok = true;
|
||||
echo 'example plugin: example';
|
||||
|
||||
if ($ok) {
|
||||
echo '_OK';
|
||||
} else {
|
||||
|
18
phpstan.neon
Normal file
18
phpstan.neon
Normal file
@@ -0,0 +1,18 @@
|
||||
parameters:
|
||||
parallel:
|
||||
maximumNumberOfProcesses: 2
|
||||
level: 5
|
||||
paths:
|
||||
- front
|
||||
- src
|
||||
- hook.php
|
||||
- setup.php
|
||||
- report.php
|
||||
scanDirectories:
|
||||
- ../../inc
|
||||
- ../../src
|
||||
- ../../front
|
||||
bootstrapFiles:
|
||||
- ../../stubs/glpi_constants.php
|
||||
- ../../vendor/autoload.php
|
||||
|
17
setup.php
17
setup.php
@@ -250,9 +250,6 @@ function plugin_init_example()
|
||||
|
||||
$PLUGIN_HOOKS['status']['example'] = 'plugin_example_Status';
|
||||
|
||||
// CSRF compliance : All actions must be done via POST and forms closed by Html::closeForm();
|
||||
$PLUGIN_HOOKS[Hooks::CSRF_COMPLIANT]['example'] = true;
|
||||
|
||||
$PLUGIN_HOOKS[Hooks::DISPLAY_CENTRAL]['example'] = 'plugin_example_display_central';
|
||||
$PLUGIN_HOOKS[Hooks::DISPLAY_LOGIN]['example'] = 'plugin_example_display_login';
|
||||
$PLUGIN_HOOKS[Hooks::INFOCOM]['example'] = 'plugin_example_infocom_hook';
|
||||
@@ -267,11 +264,8 @@ function plugin_init_example()
|
||||
$PLUGIN_HOOKS[Hooks::PRE_ITEM_FORM]['example'] = [ItemForm::class, 'preItemForm'];
|
||||
$PLUGIN_HOOKS[Hooks::POST_ITEM_FORM]['example'] = [ItemForm::class, 'postItemForm'];
|
||||
|
||||
//TODO: remove check when GLPI 11.0.0 is released
|
||||
if (version_compare(GLPI_VERSION, '11.0.0', 'ge')) {
|
||||
$PLUGIN_HOOKS[Hooks::PRE_ITIL_INFO_SECTION]['example'] = [ItemForm::class, 'preSection'];
|
||||
$PLUGIN_HOOKS[Hooks::POST_ITIL_INFO_SECTION]['example'] = [ItemForm::class, 'postSection'];
|
||||
}
|
||||
$PLUGIN_HOOKS[Hooks::PRE_ITIL_INFO_SECTION]['example'] = [ItemForm::class, 'preSection'];
|
||||
$PLUGIN_HOOKS[Hooks::POST_ITIL_INFO_SECTION]['example'] = [ItemForm::class, 'postSection'];
|
||||
|
||||
// Add new actions to timeline
|
||||
$PLUGIN_HOOKS[Hooks::TIMELINE_ACTIONS]['example'] = [
|
||||
@@ -297,11 +291,8 @@ function plugin_init_example()
|
||||
ComputerModelFilter::class,
|
||||
];
|
||||
|
||||
//TODO: remove check when GLPI 11.0.0 is released
|
||||
if (version_compare(GLPI_VERSION, '11.0.0', 'ge')) {
|
||||
// Icon in the impact analysis
|
||||
$PLUGIN_HOOKS[Hooks::SET_ITEM_IMPACT_ICON]['example'] = 'plugin_example_set_impact_icon';
|
||||
}
|
||||
// Icon in the impact analysis
|
||||
$PLUGIN_HOOKS[Hooks::SET_ITEM_IMPACT_ICON]['example'] = 'plugin_example_set_impact_icon';
|
||||
}
|
||||
|
||||
|
||||
|
@@ -96,5 +96,6 @@ class Config extends CommonDBTM
|
||||
$config = new self();
|
||||
$config->showFormExample();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
126
src/Example.php
126
src/Example.php
@@ -35,14 +35,20 @@
|
||||
|
||||
namespace GlpiPlugin\Example;
|
||||
|
||||
use Central;
|
||||
use CommonDBTM;
|
||||
use CommonGLPI;
|
||||
use Computer;
|
||||
use DBmysql;
|
||||
use Html;
|
||||
use Item_Disk;
|
||||
use Log;
|
||||
use MassiveAction;
|
||||
use Notification;
|
||||
use Phone;
|
||||
use Preference;
|
||||
use Session;
|
||||
use Supplier;
|
||||
|
||||
// Class of the defined type
|
||||
class Example extends CommonDBTM
|
||||
@@ -168,7 +174,7 @@ class Example extends CommonDBTM
|
||||
*
|
||||
* @param $task Object of CronTask class for log / stat
|
||||
*
|
||||
* @return interger
|
||||
* @return int
|
||||
* >0 : done
|
||||
* <0 : to be run again (not finished)
|
||||
* 0 : nothing to do
|
||||
@@ -212,33 +218,34 @@ class Example extends CommonDBTM
|
||||
public function getTabNameForItem(CommonGLPI $item, $withtemplate = 0)
|
||||
{
|
||||
if (!$withtemplate) {
|
||||
switch ($item->getType()) {
|
||||
case 'Profile':
|
||||
if ($item->getField('central')) {
|
||||
return __('Example', 'example');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Phone':
|
||||
if ($_SESSION['glpishow_count_on_tabs']) {
|
||||
return self::createTabEntry(
|
||||
__('Example', 'example'),
|
||||
countElementsInTable($this->getTable()),
|
||||
);
|
||||
}
|
||||
|
||||
if ($item instanceof Profile) {
|
||||
if ($item->getField('central')) {
|
||||
return __('Example', 'example');
|
||||
}
|
||||
|
||||
case 'ComputerDisk':
|
||||
case 'Supplier':
|
||||
return [1 => __('Test Plugin', 'example'),
|
||||
2 => __('Test Plugin 2', 'example')];
|
||||
} elseif ($item instanceof Phone) {
|
||||
if ($_SESSION['glpishow_count_on_tabs']) {
|
||||
return self::createTabEntry(
|
||||
__('Example', 'example'),
|
||||
countElementsInTable($this->getTable()),
|
||||
);
|
||||
}
|
||||
|
||||
case 'Computer':
|
||||
case 'Central':
|
||||
case 'Preference':
|
||||
case 'Notification':
|
||||
return [1 => __('Test Plugin', 'example')];
|
||||
return __('Example', 'example');
|
||||
|
||||
} elseif ($item instanceof Item_Disk || $item instanceof Supplier) {
|
||||
return [
|
||||
1 => __('Test Plugin', 'example'),
|
||||
2 => __('Test Plugin 2', 'example'),
|
||||
];
|
||||
|
||||
} elseif ($item instanceof Computer
|
||||
|| $item instanceof Central
|
||||
|| $item instanceof Preference
|
||||
|| $item instanceof Notification) {
|
||||
return [
|
||||
1 => __('Test Plugin', 'example'),
|
||||
];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -247,53 +254,46 @@ class Example extends CommonDBTM
|
||||
|
||||
public static function displayTabContentForItem(CommonGLPI $item, $tabnum = 1, $withtemplate = 0)
|
||||
{
|
||||
switch ($item->getType()) {
|
||||
case 'Phone':
|
||||
echo __('Plugin Example on Phone', 'example');
|
||||
break;
|
||||
if ($item instanceof Phone) {
|
||||
echo __('Plugin Example on Phone', 'example');
|
||||
|
||||
case 'Central':
|
||||
echo __('Plugin central action', 'example');
|
||||
break;
|
||||
} elseif ($item instanceof Central) {
|
||||
echo __('Plugin central action', 'example');
|
||||
|
||||
case 'Preference':
|
||||
// Complete form display
|
||||
$data = plugin_version_example();
|
||||
} elseif ($item instanceof Preference) {
|
||||
// Complete form display
|
||||
$data = plugin_version_example();
|
||||
|
||||
echo "<form action='Where to post form'>";
|
||||
echo "<table class='tab_cadre_fixe'>";
|
||||
echo "<tr><th colspan='3'>" . $data['name'] . ' - ' . $data['version'];
|
||||
echo '</th></tr>';
|
||||
echo "<form action='Where to post form'>";
|
||||
echo "<table class='tab_cadre_fixe'>";
|
||||
echo "<tr><th colspan='3'>" . $data['name'] . ' - ' . $data['version'];
|
||||
echo '</th></tr>';
|
||||
|
||||
echo "<tr class='tab_bg_1'><td>Name of the pref</td>";
|
||||
echo '<td>Input to set the pref</td>';
|
||||
echo "<tr class='tab_bg_1'><td>Name of the pref</td>";
|
||||
echo '<td>Input to set the pref</td>';
|
||||
|
||||
echo "<td><input class='submit' type='submit' name='submit' value='submit'></td>";
|
||||
echo '</tr>';
|
||||
echo "<td><input class='submit' type='submit' name='submit' value='submit'></td>";
|
||||
echo '</tr>';
|
||||
|
||||
echo '</table>';
|
||||
echo '</form>';
|
||||
break;
|
||||
echo '</table>';
|
||||
echo '</form>';
|
||||
|
||||
case 'Notification':
|
||||
echo __('Plugin mailing action', 'example');
|
||||
break;
|
||||
} elseif ($item instanceof Notification) {
|
||||
echo __('Plugin mailing action', 'example');
|
||||
|
||||
case 'ComputerDisk':
|
||||
case 'Supplier':
|
||||
if ($tabnum == 1) {
|
||||
echo __('First tab of Plugin example', 'example');
|
||||
} else {
|
||||
echo __('Second tab of Plugin example', 'example');
|
||||
}
|
||||
break;
|
||||
} elseif ($item instanceof Item_Disk || $item instanceof Supplier) {
|
||||
if ($tabnum == 1) {
|
||||
echo __('First tab of Plugin example', 'example');
|
||||
} else {
|
||||
echo __('Second tab of Plugin example', 'example');
|
||||
}
|
||||
|
||||
default:
|
||||
//TRANS: %1$s is a class name, %2$d is an item ID
|
||||
printf(__('Plugin example CLASS=%1$s id=%2$d', 'example'), $item->getType(), $item->getField('id'));
|
||||
break;
|
||||
} else {
|
||||
//TRANS: %1$s is a class name, %2$d is an item ID
|
||||
printf(__('Plugin example CLASS=%1$s', 'example'), get_class($item));
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ class Example extends CommonDBTM
|
||||
* @param $type position of the item in the time block (in, through, begin or end)
|
||||
* @param $complete complete display (more details)
|
||||
*
|
||||
* @return Nothing (display function)
|
||||
* @return void (display function)
|
||||
**/
|
||||
public static function displayPlanningItem(array $val, $who, $type = '', $complete = 0)
|
||||
{
|
||||
@@ -491,7 +491,7 @@ class Example extends CommonDBTM
|
||||
public static function generateLinkContents($link, CommonDBTM $item, bool $safe_url = true)
|
||||
{
|
||||
if (strstr($link, '[EXAMPLE_ID]')) {
|
||||
$link = str_replace('[EXAMPLE_ID]', $item->getID(), $link);
|
||||
$link = str_replace('[EXAMPLE_ID]', (string) $item->getID(), $link);
|
||||
|
||||
return [$link];
|
||||
}
|
||||
|
Reference in New Issue
Block a user