diff options
| author | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
|---|---|---|
| committer | Philipp Schüttlöffel <schuettloeffel@zqs.uni-hannover.de> | 2024-09-24 10:53:31 +0200 |
| commit | 4459dd7917f4d1c34f40bb68f0e991e9c3d53e4c (patch) | |
| tree | 5c07151ae61276d334e88f6309c30d439a85c12e /lib/classes/UpdateInformation.php | |
| parent | da0022e5c1abbf9825ae76debaabdff7e8623bb4 (diff) | |
| parent | 97a188592c679890a25c37ab78463add76a52ff7 (diff) | |
Merge branch 'main' into issue-3911issue-3911
Diffstat (limited to 'lib/classes/UpdateInformation.php')
| -rw-r--r-- | lib/classes/UpdateInformation.php | 118 |
1 files changed, 118 insertions, 0 deletions
diff --git a/lib/classes/UpdateInformation.php b/lib/classes/UpdateInformation.php new file mode 100644 index 0000000..959ef72 --- /dev/null +++ b/lib/classes/UpdateInformation.php @@ -0,0 +1,118 @@ +<?php +/* + * Copyright (c) 2011 Rasmus Fuhse + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + */ + +/** + * Class to set information that should be given to javascript. + * + * For a plugin to hand the information "test" to the javascript-function + * STUDIP.myplugin.myfunction just put the line: + * if (UpdateInformation::isCollecting()) { + * UpdateInformation::setInformation("myplugin.myfunction", "test"); + * } + * + * @author Rasmus Fuhse + */ +class UpdateInformation +{ + protected static $infos = []; + protected static $collecting = null; + protected static $request = null; + + /** + * Returns the timestamp of the beginning of the run before. + * Use this to only partially update new stuff. + * + * @return int Timestamp of the last run + */ + public static function getTimestamp() + { + return Request::get('server_timestamp'); + } + + /** + * Extracts updater data from request + * + * @return Array Request data (may be empty if no data is present) + */ + protected static function getRequest() + { + if (self::$request === null) { + self::$request = Request::getArray('page_info'); + } + return self::$request ?: []; + } + + /** + * Checks whether the request has data for the given index. + * + * @return bool indicating whether there is data present for the given index + */ + public static function hasData($index) + { + $request = self::getRequest(); + return isset($request[$index]); + } + + /** + * Returns request data for the given index. + * + * @param String $index Index to get the request data for + * @return mixed Array with request data or null if index is invalid + */ + public static function getData($index) + { + $request = self::getRequest(); + return $request[$index] ?: null; + } + + /** + * Gives information to the buffer for the javascript. The first parameter is + * the name of the corresponding javascript-function minus the "STUDIP" + * and the second parameter is the value handed to that function. + * @param string $js_function : "test.testfunction" to get the JS-function "STUDIP.test.testfunction(information);" + * @param mixed $information : anything that could be translated into a json-object + */ + public static function setInformation($js_function, $information) + { + self::$infos[$js_function] = $information; + } + + /** + * returns the information to give it to javascript + * @return array + */ + public static function getInformation() + { + return self::$infos; + } + + /** + * returns if this request is a request, that wants to collect information + * to hand it to javascript. Ask for this in your SystemPlugin-constructor. + * @return: boolean + */ + public static function isCollecting() + { + if (self::$collecting === null) { + $page = $_SERVER['REQUEST_URI']; + if (mb_strpos($page, "?") !== false) { + $page = mb_substr($page, 0, mb_strpos($page, "?")); + } + self::$collecting = (mb_stripos($page, "dispatch.php/jsupdater/get") !== false); + + // If we are collecting, store the current timestamp + if (self::$collecting) { + self::$infos['server_timestamp'] = time(); + } + } + return self::$collecting; + } +} + |
