Version Description
(November 2019) = - Better compatibility with the Gutenberg Block editor. - Correct URL redirected to after clearing log. Fixes #123. - Fix history log on dashboard leaving lots of white space and sometimes overlapping other dashboard widgets. Fixes https://wordpress.org/support/topic/dashboard-block-cut-off/, https://wordpress.org/support/topic/simple-history-v2-32/, and https://wordpress.org/support/topic/new-update-not-working-10/. - Fix join parameter order for PHP 7.4. - Update donate link. It's now https://www.paypal.me/eskapism. If you like the plugin please consider donate. A very small amount makes me much more happy than nothing at all! ;)
Download this release
Release Info
Developer | eskapism |
Plugin | Simple History |
Version | 2.33 |
Comparing to | |
See all releases |
Code changes from version 2.32 to 2.33
- composer.json +3 -2
- composer.lock +58 -4
- css/styles.css +1 -1
- examples/example-logger.php +1 -1
- examples/examples.php +1 -1
- inc/SimpleHistory.php +11 -4
- index.php +2 -2
- loggers/SimplePostLogger.php +21 -27
- package-lock.json +18 -0
- package.json +23 -22
- phpcs.xml.dist +3 -2
- readme.txt +13 -3
- templates/settings-statsForGeeks.php +19 -21
- templates/settings-statsLoggers.php +15 -19
- templates/template-settings-tab-debug.php +17 -23
- vendor/autoload.php +0 -7
- vendor/composer/ClassLoader.php +0 -445
- vendor/composer/LICENSE +0 -21
- vendor/composer/autoload_classmap.php +0 -9
- vendor/composer/autoload_namespaces.php +0 -9
- vendor/composer/autoload_psr4.php +0 -9
- vendor/composer/autoload_real.php +0 -52
- vendor/composer/autoload_static.php +0 -15
- vendor/composer/installed.json +0 -1
composer.json
CHANGED
@@ -10,11 +10,12 @@
|
|
10 |
"homepage": "http://simple-history.com/",
|
11 |
"minimum-stability": "dev",
|
12 |
"require-dev": {
|
|
|
13 |
},
|
14 |
"require": {
|
15 |
-
"php": ">=5.
|
16 |
},
|
17 |
-
"version": "2.
|
18 |
"authors": [
|
19 |
{
|
20 |
"name": "Pär Thernström",
|
10 |
"homepage": "http://simple-history.com/",
|
11 |
"minimum-stability": "dev",
|
12 |
"require-dev": {
|
13 |
+
"squizlabs/php_codesniffer": "3.*"
|
14 |
},
|
15 |
"require": {
|
16 |
+
"php": ">=5.2.0"
|
17 |
},
|
18 |
+
"version": "2.33",
|
19 |
"authors": [
|
20 |
{
|
21 |
"name": "Pär Thernström",
|
composer.lock
CHANGED
@@ -4,16 +4,70 @@
|
|
4 |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
5 |
"This file is @generated automatically"
|
6 |
],
|
7 |
-
"content-hash": "
|
8 |
"packages": [],
|
9 |
-
"packages-dev": [
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
10 |
"aliases": [],
|
11 |
"minimum-stability": "dev",
|
12 |
-
"stability-flags":
|
|
|
|
|
13 |
"prefer-stable": false,
|
14 |
"prefer-lowest": false,
|
15 |
"platform": {
|
16 |
-
"php": ">=5.
|
17 |
},
|
18 |
"platform-dev": []
|
19 |
}
|
4 |
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
5 |
"This file is @generated automatically"
|
6 |
],
|
7 |
+
"content-hash": "3b8dfbd08d71ac09ed083ecf8002d083",
|
8 |
"packages": [],
|
9 |
+
"packages-dev": [
|
10 |
+
{
|
11 |
+
"name": "squizlabs/php_codesniffer",
|
12 |
+
"version": "dev-master",
|
13 |
+
"source": {
|
14 |
+
"type": "git",
|
15 |
+
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
|
16 |
+
"reference": "451a256c34e46ab346ee2b3d706e42eecb03223b"
|
17 |
+
},
|
18 |
+
"dist": {
|
19 |
+
"type": "zip",
|
20 |
+
"url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/451a256c34e46ab346ee2b3d706e42eecb03223b",
|
21 |
+
"reference": "451a256c34e46ab346ee2b3d706e42eecb03223b",
|
22 |
+
"shasum": ""
|
23 |
+
},
|
24 |
+
"require": {
|
25 |
+
"ext-simplexml": "*",
|
26 |
+
"ext-tokenizer": "*",
|
27 |
+
"ext-xmlwriter": "*",
|
28 |
+
"php": ">=5.4.0"
|
29 |
+
},
|
30 |
+
"require-dev": {
|
31 |
+
"phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0"
|
32 |
+
},
|
33 |
+
"bin": [
|
34 |
+
"bin/phpcs",
|
35 |
+
"bin/phpcbf"
|
36 |
+
],
|
37 |
+
"type": "library",
|
38 |
+
"extra": {
|
39 |
+
"branch-alias": {
|
40 |
+
"dev-master": "3.x-dev"
|
41 |
+
}
|
42 |
+
},
|
43 |
+
"notification-url": "https://packagist.org/downloads/",
|
44 |
+
"license": [
|
45 |
+
"BSD-3-Clause"
|
46 |
+
],
|
47 |
+
"authors": [
|
48 |
+
{
|
49 |
+
"name": "Greg Sherwood",
|
50 |
+
"role": "lead"
|
51 |
+
}
|
52 |
+
],
|
53 |
+
"description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
|
54 |
+
"homepage": "https://github.com/squizlabs/PHP_CodeSniffer",
|
55 |
+
"keywords": [
|
56 |
+
"phpcs",
|
57 |
+
"standards"
|
58 |
+
],
|
59 |
+
"time": "2019-10-03T04:52:04+00:00"
|
60 |
+
}
|
61 |
+
],
|
62 |
"aliases": [],
|
63 |
"minimum-stability": "dev",
|
64 |
+
"stability-flags": {
|
65 |
+
"squizlabs/php_codesniffer": 20
|
66 |
+
},
|
67 |
"prefer-stable": false,
|
68 |
"prefer-lowest": false,
|
69 |
"platform": {
|
70 |
+
"php": ">=5.2.0"
|
71 |
},
|
72 |
"platform-dev": []
|
73 |
}
|
css/styles.css
CHANGED
@@ -51,7 +51,7 @@ The spinner that wp uses:;
|
|
51 |
background-color: transparent;
|
52 |
}
|
53 |
|
54 |
-
.SimpleHistoryGui {
|
55 |
width: 100%;
|
56 |
float: left;
|
57 |
}
|
51 |
background-color: transparent;
|
52 |
}
|
53 |
|
54 |
+
.SimpleHistoryGuiWrap .SimpleHistoryGui {
|
55 |
width: 100%;
|
56 |
float: left;
|
57 |
}
|
examples/example-logger.php
CHANGED
@@ -36,7 +36,7 @@ if (class_exists('SimpleLogger')) {
|
|
36 |
* Return information about this logger.
|
37 |
* Used to show info about the logger at various places.
|
38 |
*/
|
39 |
-
function getInfo()
|
40 |
{
|
41 |
|
42 |
$arr_info = array(
|
36 |
* Return information about this logger.
|
37 |
* Used to show info about the logger at various places.
|
38 |
*/
|
39 |
+
public function getInfo()
|
40 |
{
|
41 |
|
42 |
$arr_info = array(
|
examples/examples.php
CHANGED
@@ -12,7 +12,7 @@ exit;
|
|
12 |
* Misc
|
13 |
*/
|
14 |
|
15 |
-
// Add $_GET, $_POST, and more info to each logged
|
16 |
define('SIMPLE_HISTORY_LOG_DEBUG', true);
|
17 |
|
18 |
|
12 |
* Misc
|
13 |
*/
|
14 |
|
15 |
+
// Add $_GET, $_POST, and more info to each logged event.
|
16 |
define('SIMPLE_HISTORY_LOG_DEBUG', true);
|
17 |
|
18 |
|
inc/SimpleHistory.php
CHANGED
@@ -1818,7 +1818,8 @@ Because Simple History was just recently installed, this feed does not contain m
|
|
1818 |
*/
|
1819 |
public function add_settings()
|
1820 |
{
|
1821 |
-
// Clear the log if clear button was clicked in settings
|
|
|
1822 |
if (isset($_GET['simple_history_clear_log_nonce']) &&
|
1823 |
wp_verify_nonce($_GET['simple_history_clear_log_nonce'], 'simple_history_clear_log')
|
1824 |
) {
|
@@ -2068,10 +2069,16 @@ Because Simple History was just recently installed, this feed does not contain m
|
|
2068 |
*/
|
2069 |
public function settings_field_clear_log()
|
2070 |
{
|
2071 |
-
|
|
|
|
|
|
|
|
|
|
|
2072 |
$clear_link = wp_nonce_url($clear_link, 'simple_history_clear_log', 'simple_history_clear_log_nonce');
|
2073 |
-
$clear_days = $this->get_clear_history_interval();
|
2074 |
|
|
|
|
|
2075 |
echo '<p>';
|
2076 |
|
2077 |
if ($clear_days > 0) {
|
@@ -2088,7 +2095,7 @@ Because Simple History was just recently installed, this feed does not contain m
|
|
2088 |
printf(
|
2089 |
'<p><a class="button js-SimpleHistory-Settings-ClearLog" href="%2$s">%1$s</a></p>',
|
2090 |
__('Clear log now', 'simple-history'),
|
2091 |
-
$clear_link
|
2092 |
);
|
2093 |
}
|
2094 |
|
1818 |
*/
|
1819 |
public function add_settings()
|
1820 |
{
|
1821 |
+
// Clear the log if clear button was clicked in settings
|
1822 |
+
// and redirect user to show message.
|
1823 |
if (isset($_GET['simple_history_clear_log_nonce']) &&
|
1824 |
wp_verify_nonce($_GET['simple_history_clear_log_nonce'], 'simple_history_clear_log')
|
1825 |
) {
|
2069 |
*/
|
2070 |
public function settings_field_clear_log()
|
2071 |
{
|
2072 |
+
|
2073 |
+
// Get base URL to current page.
|
2074 |
+
// Will be like "/wordpress/wp-admin/options-general.php?page=simple_history_settings_menu_slug&"
|
2075 |
+
$clear_link = add_query_arg('', '');
|
2076 |
+
|
2077 |
+
// Append nonce to URL.
|
2078 |
$clear_link = wp_nonce_url($clear_link, 'simple_history_clear_log', 'simple_history_clear_log_nonce');
|
|
|
2079 |
|
2080 |
+
$clear_days = $this->get_clear_history_interval();
|
2081 |
+
|
2082 |
echo '<p>';
|
2083 |
|
2084 |
if ($clear_days > 0) {
|
2095 |
printf(
|
2096 |
'<p><a class="button js-SimpleHistory-Settings-ClearLog" href="%2$s">%1$s</a></p>',
|
2097 |
__('Clear log now', 'simple-history'),
|
2098 |
+
esc_url($clear_link)
|
2099 |
);
|
2100 |
}
|
2101 |
|
index.php
CHANGED
@@ -5,7 +5,7 @@
|
|
5 |
* Text Domain: simple-history
|
6 |
* Domain Path: /languages
|
7 |
* Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
|
8 |
-
* Version: 2.
|
9 |
* Author: Pär Thernström
|
10 |
* Author URI: http://simple-history.com/
|
11 |
* License: GPL2
|
@@ -46,7 +46,7 @@ if ($ok_php_version && $ok_wp_version) {
|
|
46 |
*/
|
47 |
|
48 |
if (!defined('SIMPLE_HISTORY_VERSION')) {
|
49 |
-
define('SIMPLE_HISTORY_VERSION', '2.
|
50 |
}
|
51 |
|
52 |
if (!defined('SIMPLE_HISTORY_PATH')) {
|
5 |
* Text Domain: simple-history
|
6 |
* Domain Path: /languages
|
7 |
* Description: Plugin that logs various things that occur in WordPress and then presents those events in a very nice GUI.
|
8 |
+
* Version: 2.33
|
9 |
* Author: Pär Thernström
|
10 |
* Author URI: http://simple-history.com/
|
11 |
* License: GPL2
|
46 |
*/
|
47 |
|
48 |
if (!defined('SIMPLE_HISTORY_VERSION')) {
|
49 |
+
define('SIMPLE_HISTORY_VERSION', '2.33');
|
50 |
}
|
51 |
|
52 |
if (!defined('SIMPLE_HISTORY_PATH')) {
|
loggers/SimplePostLogger.php
CHANGED
@@ -57,7 +57,7 @@ class SimplePostLogger extends SimpleLogger
|
|
57 |
add_action("rest_pre_insert_{$post_type->name}", array($this, 'on_rest_pre_insert'), 10, 2);
|
58 |
|
59 |
// Rest insert happens after the post has been updated: "Fires after a single post is completely created or updated via the REST API."
|
60 |
-
|
61 |
}
|
62 |
}
|
63 |
|
@@ -76,19 +76,6 @@ class SimplePostLogger extends SimpleLogger
|
|
76 |
{
|
77 |
// $prepared_post = stdClass Object with new and modified content.
|
78 |
// changes are not saved to post in db yet, so get_post( $prepared_post->ID ) will get old contents.
|
79 |
-
/*
|
80 |
-
stdClass Object
|
81 |
-
(
|
82 |
-
[ID] => 889
|
83 |
-
[post_title] => gutenberg 1
|
84 |
-
[post_content] => <!-- wp:paragraph -->
|
85 |
-
<p>hejsan</p>
|
86 |
-
<!-- /wp:paragraph -->
|
87 |
-
[post_excerpt] =>
|
88 |
-
[post_type] => post
|
89 |
-
[page_template] =>
|
90 |
-
)
|
91 |
-
*/
|
92 |
|
93 |
// $old_post = post with old content and old meta
|
94 |
$old_post = get_post($prepared_post->ID);
|
@@ -104,22 +91,22 @@ class SimplePostLogger extends SimpleLogger
|
|
104 |
/**
|
105 |
* Fires after a single post is completely created or updated via the REST API.
|
106 |
*
|
107 |
-
* Here we
|
108 |
*
|
109 |
-
* @param WP_Post $
|
110 |
* @param WP_REST_Request $request Request object.
|
111 |
* @param bool $creating True when creating a post, false when updating.
|
112 |
*/
|
113 |
-
public function on_rest_after_insert($
|
114 |
{
|
115 |
-
$
|
116 |
-
$post_meta = get_post_custom($
|
117 |
|
118 |
-
$old_post = $this->old_post_data[$
|
119 |
-
$old_post_meta = $this->old_post_data[$
|
120 |
|
121 |
$args = array(
|
122 |
-
'new_post' => $
|
123 |
'new_post_meta' => $post_meta,
|
124 |
'old_post' => $old_post,
|
125 |
'old_post_meta' => $old_post_meta,
|
@@ -629,6 +616,11 @@ class SimplePostLogger extends SimpleLogger
|
|
629 |
|
630 |
/**
|
631 |
* Fired when a post has changed status in the classical editor.
|
|
|
|
|
|
|
|
|
|
|
632 |
* Only run in certain cases,
|
633 |
* because when always enabled it catches a lots of edits made by plugins during cron jobs etc,
|
634 |
* which by definition is not wrong, but perhaps not wanted/annoying.
|
@@ -639,11 +631,13 @@ class SimplePostLogger extends SimpleLogger
|
|
639 |
*/
|
640 |
public function on_transition_post_status($new_status, $old_status, $post)
|
641 |
{
|
642 |
-
|
643 |
-
|
644 |
-
//
|
645 |
-
|
646 |
-
|
|
|
|
|
647 |
// Bail if post is not a post.
|
648 |
if (!is_a($post, 'WP_Post')) {
|
649 |
return;
|
57 |
add_action("rest_pre_insert_{$post_type->name}", array($this, 'on_rest_pre_insert'), 10, 2);
|
58 |
|
59 |
// Rest insert happens after the post has been updated: "Fires after a single post is completely created or updated via the REST API."
|
60 |
+
add_action("rest_after_insert_{$post_type->name}", array($this, 'on_rest_after_insert'), 10, 3);
|
61 |
}
|
62 |
}
|
63 |
|
76 |
{
|
77 |
// $prepared_post = stdClass Object with new and modified content.
|
78 |
// changes are not saved to post in db yet, so get_post( $prepared_post->ID ) will get old contents.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
79 |
|
80 |
// $old_post = post with old content and old meta
|
81 |
$old_post = get_post($prepared_post->ID);
|
91 |
/**
|
92 |
* Fires after a single post is completely created or updated via the REST API.
|
93 |
*
|
94 |
+
* Here we get the updated post, after it is updated in the db.
|
95 |
*
|
96 |
+
* @param WP_Post $updated_post Inserted or updated post object.
|
97 |
* @param WP_REST_Request $request Request object.
|
98 |
* @param bool $creating True when creating a post, false when updating.
|
99 |
*/
|
100 |
+
public function on_rest_after_insert($updatedPost, $request, $creating)
|
101 |
{
|
102 |
+
$updatedPost = get_post($updatedPost->ID);
|
103 |
+
$post_meta = get_post_custom($updatedPost->ID);
|
104 |
|
105 |
+
$old_post = $this->old_post_data[$updatedPost->ID]['post_data'];
|
106 |
+
$old_post_meta = $this->old_post_data[$updatedPost->ID]['post_meta'];
|
107 |
|
108 |
$args = array(
|
109 |
+
'new_post' => $updatedPost,
|
110 |
'new_post_meta' => $post_meta,
|
111 |
'old_post' => $old_post,
|
112 |
'old_post_meta' => $old_post_meta,
|
616 |
|
617 |
/**
|
618 |
* Fired when a post has changed status in the classical editor.
|
619 |
+
*
|
620 |
+
* It is also fired when saving from the Gutenberg editor,
|
621 |
+
* but it seems something is different because
|
622 |
+
* we can't get previosly custom fields here (we only get latest values instead).
|
623 |
+
*
|
624 |
* Only run in certain cases,
|
625 |
* because when always enabled it catches a lots of edits made by plugins during cron jobs etc,
|
626 |
* which by definition is not wrong, but perhaps not wanted/annoying.
|
631 |
*/
|
632 |
public function on_transition_post_status($new_status, $old_status, $post)
|
633 |
{
|
634 |
+
$isRestApiRequest = defined('REST_REQUEST') && REST_REQUEST;
|
635 |
+
|
636 |
+
// Bail if this is a rest request.
|
637 |
+
if ($isRestApiRequest) {
|
638 |
+
return;
|
639 |
+
}
|
640 |
+
|
641 |
// Bail if post is not a post.
|
642 |
if (!is_a($post, 'WP_Post')) {
|
643 |
return;
|
package-lock.json
CHANGED
@@ -523,6 +523,24 @@
|
|
523 |
"integrity": "sha1-eCFIGpkTxY11K22N9XV7ZRz6Ous=",
|
524 |
"dev": true
|
525 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
526 |
"grunt-wp-i18n": {
|
527 |
"version": "0.4.9",
|
528 |
"resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-0.4.9.tgz",
|
523 |
"integrity": "sha1-eCFIGpkTxY11K22N9XV7ZRz6Ous=",
|
524 |
"dev": true
|
525 |
},
|
526 |
+
"grunt-version": {
|
527 |
+
"version": "1.3.1",
|
528 |
+
"resolved": "https://registry.npmjs.org/grunt-version/-/grunt-version-1.3.1.tgz",
|
529 |
+
"integrity": "sha512-EIx829NfFSAG3EbBKTAH15rj5SutSnjdZwVr80qWrmuVU4vOqP1S8RB3ghzetBYSiNBozKMNS+zeA6+jhmshUw==",
|
530 |
+
"dev": true,
|
531 |
+
"requires": {
|
532 |
+
"grunt": "0.4.5 - 1",
|
533 |
+
"semver": "^6.1.1"
|
534 |
+
},
|
535 |
+
"dependencies": {
|
536 |
+
"semver": {
|
537 |
+
"version": "6.3.0",
|
538 |
+
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
539 |
+
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
540 |
+
"dev": true
|
541 |
+
}
|
542 |
+
}
|
543 |
+
},
|
544 |
"grunt-wp-i18n": {
|
545 |
"version": "0.4.9",
|
546 |
"resolved": "https://registry.npmjs.org/grunt-wp-i18n/-/grunt-wp-i18n-0.4.9.tgz",
|
package.json
CHANGED
@@ -1,25 +1,26 @@
|
|
1 |
{
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
}
|
|
|
25 |
}
|
1 |
{
|
2 |
+
"name": "simplehistory",
|
3 |
+
"version": "0.0.1",
|
4 |
+
"description": "WordPress log plugin",
|
5 |
+
"author": "Pär Thernström",
|
6 |
+
"license": "GPL",
|
7 |
+
"devDependencies": {
|
8 |
+
"grunt": "^0.4.5",
|
9 |
+
"grunt-pot": "^0.2.1",
|
10 |
+
"grunt-wp-i18n": "^0.4.9",
|
11 |
+
"load-grunt-tasks": "^1.0.0",
|
12 |
+
"time-grunt": "^1.4.0",
|
13 |
+
"grunt-version": "^1.3.1"
|
14 |
+
},
|
15 |
+
"dependencies": {
|
16 |
+
"@prettier/plugin-php": "^0.10.2",
|
17 |
+
"husky": "^2.1.0",
|
18 |
+
"prettier": "^1.17.0",
|
19 |
+
"pretty-quick": "^1.10.0"
|
20 |
+
},
|
21 |
+
"husky": {
|
22 |
+
"hooks": {
|
23 |
+
"pre-commit": "pretty-quick --staged"
|
24 |
}
|
25 |
+
}
|
26 |
}
|
phpcs.xml.dist
CHANGED
@@ -17,10 +17,11 @@
|
|
17 |
|
18 |
<config name="testVersion" value="5.3-"/>
|
19 |
|
20 |
-
<rule ref="
|
21 |
-
<exclude name="PSR1.Classes.ClassDeclaration"/>
|
22 |
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps" />
|
23 |
<exclude name="PSR1.Files.SideEffects" />
|
|
|
24 |
</rule>
|
25 |
|
26 |
<rule ref="Generic.Files.LineLength">
|
17 |
|
18 |
<config name="testVersion" value="5.3-"/>
|
19 |
|
20 |
+
<rule ref="PSR12">
|
21 |
+
<!-- <exclude name="PSR1.Classes.ClassDeclaration"/>
|
22 |
<exclude name="PSR1.Methods.CamelCapsMethodName.NotCamelCaps" />
|
23 |
<exclude name="PSR1.Files.SideEffects" />
|
24 |
+
-->
|
25 |
</rule>
|
26 |
|
27 |
<rule ref="Generic.Files.LineLength">
|
readme.txt
CHANGED
@@ -1,11 +1,11 @@
|
|
1 |
=== Simple History ===
|
2 |
Contributors: eskapism
|
3 |
-
Donate link:
|
4 |
Tags: history, log, changes, changelog, audit, audit log, event log, user tracking, trail, pages, attachments, users, dashboard, admin, syslog, feed, activity, stream, audit trail, brute-force
|
5 |
Requires at least: 5.2
|
6 |
Tested up to: 5.2
|
7 |
Requires PHP: 5.6
|
8 |
-
Stable tag: 2.
|
9 |
|
10 |
View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
|
11 |
|
@@ -80,7 +80,7 @@ The plugin [Duplicate Post](https://wordpress.org/plugins/duplicate-post/) allow
|
|
80 |
clone posts of any type.
|
81 |
Simple History will log when a clone of a post or page is done.
|
82 |
|
83 |
-
**Beaver Builder**
|
84 |
The plugin [Beaver Build](https://wordpress.org/plugins/beaver-builder-lite-version/) is a page builder for WordPress that adds a flexible drag and drop page builder to the front end of your WordPress website.
|
85 |
Simple History will log when a Beaver Builder layout or template is saved or when the settings for the plugins are saved.
|
86 |
|
@@ -191,6 +191,16 @@ Events in the log are stored for 60 days by default. Events older than this will
|
|
191 |
|
192 |
## Changelog
|
193 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
194 |
= 2.32 (August 2019) =
|
195 |
|
196 |
- Fix error in Beaver Builder logger. Fixes https://wordpress.org/support/topic/conflict-with-beaver-builder-plugin-4/.
|
1 |
=== Simple History ===
|
2 |
Contributors: eskapism
|
3 |
+
Donate link: https://www.paypal.me/eskapism
|
4 |
Tags: history, log, changes, changelog, audit, audit log, event log, user tracking, trail, pages, attachments, users, dashboard, admin, syslog, feed, activity, stream, audit trail, brute-force
|
5 |
Requires at least: 5.2
|
6 |
Tested up to: 5.2
|
7 |
Requires PHP: 5.6
|
8 |
+
Stable tag: 2.33
|
9 |
|
10 |
View changes made by users within WordPress. See who created a page, uploaded an attachment or approved an comment, and more.
|
11 |
|
80 |
clone posts of any type.
|
81 |
Simple History will log when a clone of a post or page is done.
|
82 |
|
83 |
+
**Beaver Builder**
|
84 |
The plugin [Beaver Build](https://wordpress.org/plugins/beaver-builder-lite-version/) is a page builder for WordPress that adds a flexible drag and drop page builder to the front end of your WordPress website.
|
85 |
Simple History will log when a Beaver Builder layout or template is saved or when the settings for the plugins are saved.
|
86 |
|
191 |
|
192 |
## Changelog
|
193 |
|
194 |
+
= 2.33 (November 2019) =
|
195 |
+
- Better compatibility with the Gutenberg Block editor.
|
196 |
+
- Correct URL redirected to after clearing log. Fixes #123.
|
197 |
+
- Fix history log on dashboard leaving lots of white space and sometimes overlapping other dashboard widgets.
|
198 |
+
Fixes https://wordpress.org/support/topic/dashboard-block-cut-off/, https://wordpress.org/support/topic/simple-history-v2-32/, and https://wordpress.org/support/topic/new-update-not-working-10/.
|
199 |
+
- Fix join parameter order for PHP 7.4.
|
200 |
+
- Update donate link. It's now https://www.paypal.me/eskapism.
|
201 |
+
If you like the plugin please consider donate.
|
202 |
+
A very small amount makes me much more happy than nothing at all! ;)
|
203 |
+
|
204 |
= 2.32 (August 2019) =
|
205 |
|
206 |
- Fix error in Beaver Builder logger. Fixes https://wordpress.org/support/topic/conflict-with-beaver-builder-plugin-4/.
|
templates/settings-statsForGeeks.php
CHANGED
@@ -1,11 +1,10 @@
|
|
1 |
<?php
|
2 |
-
defined('ABSPATH') or die();
|
3 |
-
?>
|
4 |
|
5 |
<script>
|
6 |
-
|
7 |
jQuery(function($) {
|
8 |
-
|
9 |
var $button = $(".js-SimpleHistoryShowsStatsForGeeks");
|
10 |
var $wrapper = $(".SimpleHistory__statsForGeeksInner");
|
11 |
|
@@ -18,21 +17,18 @@ defined('ABSPATH') or die();
|
|
18 |
|
19 |
</script>
|
20 |
<?php
|
21 |
-
|
22 |
-
defined('ABSPATH') or exit;
|
23 |
|
24 |
echo '<hr>';
|
25 |
echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsForGeeks'>Show stats for geeks</button></p>";
|
26 |
-
|
27 |
?>
|
28 |
|
29 |
<div class="SimpleHistory__statsForGeeksInner hide-if-js">
|
30 |
<?php
|
31 |
-
|
32 |
echo '<h4>Rows count</h4>';
|
33 |
$logQuery = new SimpleHistoryLogQuery();
|
34 |
$rows = $logQuery->query(array(
|
35 |
-
'posts_per_page' => 1
|
36 |
// "date_from" => strtotime("-$period_days days")
|
37 |
));
|
38 |
|
@@ -52,9 +48,9 @@ echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsF
|
|
52 |
|
53 |
$sql_table_size = sprintf(
|
54 |
'
|
55 |
-
SELECT table_name AS "table_name",
|
56 |
-
round(((data_length + index_length) / 1024 / 1024), 2) "size_in_mb"
|
57 |
-
FROM information_schema.TABLES
|
58 |
WHERE table_schema = "%1$s"
|
59 |
AND table_name IN ("%2$s", "%3$s");
|
60 |
',
|
@@ -65,7 +61,6 @@ echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsF
|
|
65 |
|
66 |
$table_size_result = $wpdb->get_results($sql_table_size);
|
67 |
|
68 |
-
|
69 |
echo '<h4>Database size</h4>';
|
70 |
|
71 |
echo "<table class='widefat'>";
|
@@ -119,13 +114,17 @@ echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsF
|
|
119 |
$arr_logger_slugs[] = $oneLogger['instance']->slug;
|
120 |
}
|
121 |
|
122 |
-
$sql_logger_counts = sprintf(
|
|
|
123 |
SELECT logger, count(id) as count
|
124 |
FROM %1$s
|
125 |
WHERE logger IN ("%2$s")
|
126 |
GROUP BY logger
|
127 |
ORDER BY count DESC
|
128 |
-
',
|
|
|
|
|
|
|
129 |
|
130 |
$logger_rows_count = $wpdb->get_results($sql_logger_counts, OBJECT_K);
|
131 |
|
@@ -134,15 +133,15 @@ echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsF
|
|
134 |
foreach ($arr_logger_slugs as $one_logger_slug) {
|
135 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_slug);
|
136 |
|
137 |
-
if (
|
138 |
continue;
|
139 |
}
|
140 |
|
141 |
-
if (isset($logger_rows_count[
|
142 |
-
$one_logger_count = $logger_rows_count[
|
143 |
} else {
|
144 |
// logger was not is sql result, so fake result
|
145 |
-
$one_logger_count = new stdclass;
|
146 |
$one_logger_count->count = 0;
|
147 |
}
|
148 |
|
@@ -180,8 +179,7 @@ echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsF
|
|
180 |
);
|
181 |
|
182 |
$loopnum++;
|
183 |
-
}// End foreach().
|
184 |
echo '</table>';
|
185 |
-
|
186 |
?>
|
187 |
</div><!-- // stats for geeks inner -->
|
1 |
<?php
|
2 |
+
defined('ABSPATH') or die(); ?>
|
|
|
3 |
|
4 |
<script>
|
5 |
+
|
6 |
jQuery(function($) {
|
7 |
+
|
8 |
var $button = $(".js-SimpleHistoryShowsStatsForGeeks");
|
9 |
var $wrapper = $(".SimpleHistory__statsForGeeksInner");
|
10 |
|
17 |
|
18 |
</script>
|
19 |
<?php
|
20 |
+
defined('ABSPATH') or exit();
|
|
|
21 |
|
22 |
echo '<hr>';
|
23 |
echo "<p class='hide-if-no-js'><button class='button js-SimpleHistoryShowsStatsForGeeks'>Show stats for geeks</button></p>";
|
|
|
24 |
?>
|
25 |
|
26 |
<div class="SimpleHistory__statsForGeeksInner hide-if-js">
|
27 |
<?php
|
|
|
28 |
echo '<h4>Rows count</h4>';
|
29 |
$logQuery = new SimpleHistoryLogQuery();
|
30 |
$rows = $logQuery->query(array(
|
31 |
+
'posts_per_page' => 1
|
32 |
// "date_from" => strtotime("-$period_days days")
|
33 |
));
|
34 |
|
48 |
|
49 |
$sql_table_size = sprintf(
|
50 |
'
|
51 |
+
SELECT table_name AS "table_name",
|
52 |
+
round(((data_length + index_length) / 1024 / 1024), 2) "size_in_mb"
|
53 |
+
FROM information_schema.TABLES
|
54 |
WHERE table_schema = "%1$s"
|
55 |
AND table_name IN ("%2$s", "%3$s");
|
56 |
',
|
61 |
|
62 |
$table_size_result = $wpdb->get_results($sql_table_size);
|
63 |
|
|
|
64 |
echo '<h4>Database size</h4>';
|
65 |
|
66 |
echo "<table class='widefat'>";
|
114 |
$arr_logger_slugs[] = $oneLogger['instance']->slug;
|
115 |
}
|
116 |
|
117 |
+
$sql_logger_counts = sprintf(
|
118 |
+
'
|
119 |
SELECT logger, count(id) as count
|
120 |
FROM %1$s
|
121 |
WHERE logger IN ("%2$s")
|
122 |
GROUP BY logger
|
123 |
ORDER BY count DESC
|
124 |
+
',
|
125 |
+
$table_name,
|
126 |
+
join('","', $arr_logger_slugs)
|
127 |
+
);
|
128 |
|
129 |
$logger_rows_count = $wpdb->get_results($sql_logger_counts, OBJECT_K);
|
130 |
|
133 |
foreach ($arr_logger_slugs as $one_logger_slug) {
|
134 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_slug);
|
135 |
|
136 |
+
if (!$logger) {
|
137 |
continue;
|
138 |
}
|
139 |
|
140 |
+
if (isset($logger_rows_count[$one_logger_slug])) {
|
141 |
+
$one_logger_count = $logger_rows_count[$one_logger_slug];
|
142 |
} else {
|
143 |
// logger was not is sql result, so fake result
|
144 |
+
$one_logger_count = new stdclass();
|
145 |
$one_logger_count->count = 0;
|
146 |
}
|
147 |
|
179 |
);
|
180 |
|
181 |
$loopnum++;
|
182 |
+
} // End foreach().
|
183 |
echo '</table>';
|
|
|
184 |
?>
|
185 |
</div><!-- // stats for geeks inner -->
|
templates/settings-statsLoggers.php
CHANGED
@@ -17,14 +17,14 @@ $sql_logger_counts = sprintf(
|
|
17 |
'
|
18 |
SELECT logger, count(id) as count
|
19 |
FROM %1$s
|
20 |
-
WHERE
|
21 |
logger IN ("%2$s")
|
22 |
AND UNIX_TIMESTAMP(date) >= %3$d
|
23 |
GROUP BY logger
|
24 |
ORDER BY count DESC
|
25 |
',
|
26 |
$table_name, // 1
|
27 |
-
join(
|
28 |
strtotime("-$period_days days")
|
29 |
);
|
30 |
|
@@ -42,7 +42,7 @@ $max_loggers_in_chart = sizeof($arr_colors);
|
|
42 |
foreach ($logger_rows_count as $one_logger_count) {
|
43 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_count->logger);
|
44 |
|
45 |
-
if (
|
46 |
continue;
|
47 |
}
|
48 |
|
@@ -61,7 +61,7 @@ foreach ($logger_rows_count as $one_logger_count) {
|
|
61 |
},',
|
62 |
$one_logger_count->count, // 1
|
63 |
$logger_info['name'], // 2
|
64 |
-
$arr_colors[
|
65 |
);
|
66 |
|
67 |
$str_js_chart_data_chartist .= sprintf(
|
@@ -69,10 +69,7 @@ foreach ($logger_rows_count as $one_logger_count) {
|
|
69 |
$one_logger_count->count // 1
|
70 |
);
|
71 |
|
72 |
-
$str_js_chart_labels .= sprintf(
|
73 |
-
'"%1$s",',
|
74 |
-
$logger_info['name']
|
75 |
-
);
|
76 |
|
77 |
$str_js_google_chart_data .= sprintf(
|
78 |
'["%1$s", %2$d], ',
|
@@ -81,40 +78,39 @@ foreach ($logger_rows_count as $one_logger_count) {
|
|
81 |
);
|
82 |
|
83 |
$i++;
|
84 |
-
}// End foreach().
|
85 |
$str_js_chart_data = rtrim($str_js_chart_data, ',');
|
86 |
$str_js_chart_data_chartist = rtrim($str_js_chart_data_chartist, ',');
|
87 |
$str_js_chart_labels = rtrim($str_js_chart_labels, ',');
|
88 |
$str_js_google_chart_data = rtrim($str_js_google_chart_data, ',');
|
89 |
-
|
90 |
?>
|
91 |
<script>
|
92 |
-
|
93 |
/**
|
94 |
* Pie chart with loggers distribution
|
95 |
*/
|
96 |
jQuery(function($) {
|
97 |
|
98 |
-
/*
|
99 |
var data = {
|
100 |
-
series: [<?php echo $str_js_chart_data_chartist ?>],
|
101 |
-
labels: [<?php echo $str_js_chart_labels ?>]
|
102 |
-
};
|
103 |
-
|
104 |
var options = {};
|
105 |
|
106 |
Chartist.Pie(".SimpleHistoryChart__loggersPie", data, options);
|
107 |
*/
|
108 |
|
109 |
var data = google.visualization.arrayToDataTable([
|
110 |
-
<?php echo $str_js_google_chart_data ?>
|
111 |
]);
|
112 |
|
113 |
var options = {
|
114 |
xtitle: 'My Daily Activities',
|
115 |
backgroundColor: "transparent",
|
116 |
is3D: true,
|
117 |
-
legend: {
|
118 |
xposition: 'top',
|
119 |
alignment: 'center'
|
120 |
}
|
@@ -123,7 +119,7 @@ $str_js_google_chart_data = rtrim($str_js_google_chart_data, ',');
|
|
123 |
|
124 |
var chart = new google.visualization.PieChart( $(".SimpleHistoryChart__loggersPieGoogleChart").get(0) );
|
125 |
chart.draw(data, options);
|
126 |
-
|
127 |
//var chart2 = new google.visualization.BarChart( $(".SimpleHistoryChart__loggersGoogleBarChart").get(0) );
|
128 |
//chart2.draw(data, options);
|
129 |
|
17 |
'
|
18 |
SELECT logger, count(id) as count
|
19 |
FROM %1$s
|
20 |
+
WHERE
|
21 |
logger IN ("%2$s")
|
22 |
AND UNIX_TIMESTAMP(date) >= %3$d
|
23 |
GROUP BY logger
|
24 |
ORDER BY count DESC
|
25 |
',
|
26 |
$table_name, // 1
|
27 |
+
join('","', $arr_logger_slugs), // 2
|
28 |
strtotime("-$period_days days")
|
29 |
);
|
30 |
|
42 |
foreach ($logger_rows_count as $one_logger_count) {
|
43 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_count->logger);
|
44 |
|
45 |
+
if (!$logger) {
|
46 |
continue;
|
47 |
}
|
48 |
|
61 |
},',
|
62 |
$one_logger_count->count, // 1
|
63 |
$logger_info['name'], // 2
|
64 |
+
$arr_colors[$i] // 3
|
65 |
);
|
66 |
|
67 |
$str_js_chart_data_chartist .= sprintf(
|
69 |
$one_logger_count->count // 1
|
70 |
);
|
71 |
|
72 |
+
$str_js_chart_labels .= sprintf('"%1$s",', $logger_info['name']);
|
|
|
|
|
|
|
73 |
|
74 |
$str_js_google_chart_data .= sprintf(
|
75 |
'["%1$s", %2$d], ',
|
78 |
);
|
79 |
|
80 |
$i++;
|
81 |
+
} // End foreach().
|
82 |
$str_js_chart_data = rtrim($str_js_chart_data, ',');
|
83 |
$str_js_chart_data_chartist = rtrim($str_js_chart_data_chartist, ',');
|
84 |
$str_js_chart_labels = rtrim($str_js_chart_labels, ',');
|
85 |
$str_js_google_chart_data = rtrim($str_js_google_chart_data, ',');
|
|
|
86 |
?>
|
87 |
<script>
|
88 |
+
|
89 |
/**
|
90 |
* Pie chart with loggers distribution
|
91 |
*/
|
92 |
jQuery(function($) {
|
93 |
|
94 |
+
/*
|
95 |
var data = {
|
96 |
+
series: [<?php echo $str_js_chart_data_chartist; ?>],
|
97 |
+
labels: [<?php echo $str_js_chart_labels; ?>]
|
98 |
+
};
|
99 |
+
|
100 |
var options = {};
|
101 |
|
102 |
Chartist.Pie(".SimpleHistoryChart__loggersPie", data, options);
|
103 |
*/
|
104 |
|
105 |
var data = google.visualization.arrayToDataTable([
|
106 |
+
<?php echo $str_js_google_chart_data; ?>
|
107 |
]);
|
108 |
|
109 |
var options = {
|
110 |
xtitle: 'My Daily Activities',
|
111 |
backgroundColor: "transparent",
|
112 |
is3D: true,
|
113 |
+
legend: {
|
114 |
xposition: 'top',
|
115 |
alignment: 'center'
|
116 |
}
|
119 |
|
120 |
var chart = new google.visualization.PieChart( $(".SimpleHistoryChart__loggersPieGoogleChart").get(0) );
|
121 |
chart.draw(data, options);
|
122 |
+
|
123 |
//var chart2 = new google.visualization.BarChart( $(".SimpleHistoryChart__loggersGoogleBarChart").get(0) );
|
124 |
//chart2.draw(data, options);
|
125 |
|
templates/template-settings-tab-debug.php
CHANGED
@@ -22,7 +22,6 @@ $period_end_date = DateTime::createFromFormat('U', time());
|
|
22 |
|
23 |
echo '<h3>' . _x('Database size', 'debug dropin', 'simple-history') . '</h3>';
|
24 |
|
25 |
-
|
26 |
// Get table sizes in mb.
|
27 |
$sql_table_size = sprintf(
|
28 |
'
|
@@ -63,15 +62,9 @@ printf(
|
|
63 |
|
64 |
$loopnum = 0;
|
65 |
foreach ($table_size_result as $one_table) {
|
66 |
-
$size = sprintf(
|
67 |
-
_x('%s MB', 'debug dropin', 'simple-history'),
|
68 |
-
$one_table->size_in_mb
|
69 |
-
);
|
70 |
|
71 |
-
$rows = sprintf(
|
72 |
-
_x('%s rows', 'debug dropin', 'simple-history'),
|
73 |
-
number_format_i18n($one_table->num_rows, 0)
|
74 |
-
);
|
75 |
|
76 |
printf(
|
77 |
'<tr class="%4$s">
|
@@ -92,7 +85,7 @@ echo '</table>';
|
|
92 |
|
93 |
$logQuery = new SimpleHistoryLogQuery();
|
94 |
$rows = $logQuery->query(array(
|
95 |
-
'posts_per_page' => 1
|
96 |
));
|
97 |
|
98 |
// This is the number of rows with occasions taken into consideration
|
@@ -105,7 +98,6 @@ printf(
|
|
105 |
);
|
106 |
echo '</p>';
|
107 |
|
108 |
-
|
109 |
// echo "<h4>Clear history interval</h4>";
|
110 |
// echo "<p>" . $this->sh->get_clear_history_interval() . "</p>";
|
111 |
/**
|
@@ -121,13 +113,17 @@ foreach ($this->sh->getInstantiatedLoggers() as $oneLogger) {
|
|
121 |
$arr_logger_slugs[] = $oneLogger['instance']->slug;
|
122 |
}
|
123 |
|
124 |
-
$sql_logger_counts = sprintf(
|
|
|
125 |
SELECT logger, count(id) as count
|
126 |
FROM %1$s
|
127 |
WHERE logger IN ("%2$s")
|
128 |
GROUP BY logger
|
129 |
ORDER BY count DESC
|
130 |
-
',
|
|
|
|
|
|
|
131 |
|
132 |
$logger_rows_count = $wpdb->get_results($sql_logger_counts, OBJECT_K);
|
133 |
|
@@ -135,9 +131,9 @@ $logger_rows_count = $wpdb->get_results($sql_logger_counts, OBJECT_K);
|
|
135 |
$missing_logger_slugs = array_diff($arr_logger_slugs, array_keys($logger_rows_count));
|
136 |
|
137 |
foreach ($missing_logger_slugs as $one_missing_logger_slug) {
|
138 |
-
$logger_rows_count[
|
139 |
'logger' => $one_missing_logger_slug,
|
140 |
-
'count' => 0
|
141 |
);
|
142 |
}
|
143 |
|
@@ -179,15 +175,15 @@ $loopnum = 0;
|
|
179 |
foreach ($logger_rows_count as $one_logger_slug => $one_logger_val) {
|
180 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_slug);
|
181 |
|
182 |
-
if (
|
183 |
continue;
|
184 |
}
|
185 |
|
186 |
-
if (isset($logger_rows_count[
|
187 |
-
$one_logger_count = $logger_rows_count[
|
188 |
} else {
|
189 |
// logger was not is sql result, so fake result
|
190 |
-
$one_logger_count = new stdclass;
|
191 |
$one_logger_count->count = 0;
|
192 |
}
|
193 |
|
@@ -253,7 +249,7 @@ foreach ($logger_rows_count as $one_logger_slug => $one_logger_val) {
|
|
253 |
);
|
254 |
|
255 |
$loopnum++;
|
256 |
-
}// End foreach().
|
257 |
|
258 |
echo '</table>';
|
259 |
|
@@ -291,9 +287,7 @@ foreach ($plugins as $pluginFilePath => $onePlugin) {
|
|
291 |
',
|
292 |
esc_html($onePlugin['Name']),
|
293 |
esc_html($pluginFilePath),
|
294 |
-
$isPluginActive ?
|
295 |
-
_x('Yes', 'debug dropin', 'simple-history') :
|
296 |
-
_x('No', 'debug dropin', 'simple-history')
|
297 |
// 3
|
298 |
);
|
299 |
}
|
22 |
|
23 |
echo '<h3>' . _x('Database size', 'debug dropin', 'simple-history') . '</h3>';
|
24 |
|
|
|
25 |
// Get table sizes in mb.
|
26 |
$sql_table_size = sprintf(
|
27 |
'
|
62 |
|
63 |
$loopnum = 0;
|
64 |
foreach ($table_size_result as $one_table) {
|
65 |
+
$size = sprintf(_x('%s MB', 'debug dropin', 'simple-history'), $one_table->size_in_mb);
|
|
|
|
|
|
|
66 |
|
67 |
+
$rows = sprintf(_x('%s rows', 'debug dropin', 'simple-history'), number_format_i18n($one_table->num_rows, 0));
|
|
|
|
|
|
|
68 |
|
69 |
printf(
|
70 |
'<tr class="%4$s">
|
85 |
|
86 |
$logQuery = new SimpleHistoryLogQuery();
|
87 |
$rows = $logQuery->query(array(
|
88 |
+
'posts_per_page' => 1
|
89 |
));
|
90 |
|
91 |
// This is the number of rows with occasions taken into consideration
|
98 |
);
|
99 |
echo '</p>';
|
100 |
|
|
|
101 |
// echo "<h4>Clear history interval</h4>";
|
102 |
// echo "<p>" . $this->sh->get_clear_history_interval() . "</p>";
|
103 |
/**
|
113 |
$arr_logger_slugs[] = $oneLogger['instance']->slug;
|
114 |
}
|
115 |
|
116 |
+
$sql_logger_counts = sprintf(
|
117 |
+
'
|
118 |
SELECT logger, count(id) as count
|
119 |
FROM %1$s
|
120 |
WHERE logger IN ("%2$s")
|
121 |
GROUP BY logger
|
122 |
ORDER BY count DESC
|
123 |
+
',
|
124 |
+
$table_name,
|
125 |
+
join('","', $arr_logger_slugs)
|
126 |
+
);
|
127 |
|
128 |
$logger_rows_count = $wpdb->get_results($sql_logger_counts, OBJECT_K);
|
129 |
|
131 |
$missing_logger_slugs = array_diff($arr_logger_slugs, array_keys($logger_rows_count));
|
132 |
|
133 |
foreach ($missing_logger_slugs as $one_missing_logger_slug) {
|
134 |
+
$logger_rows_count[$one_missing_logger_slug] = (object) array(
|
135 |
'logger' => $one_missing_logger_slug,
|
136 |
+
'count' => 0
|
137 |
);
|
138 |
}
|
139 |
|
175 |
foreach ($logger_rows_count as $one_logger_slug => $one_logger_val) {
|
176 |
$logger = $this->sh->getInstantiatedLoggerBySlug($one_logger_slug);
|
177 |
|
178 |
+
if (!$logger) {
|
179 |
continue;
|
180 |
}
|
181 |
|
182 |
+
if (isset($logger_rows_count[$one_logger_slug])) {
|
183 |
+
$one_logger_count = $logger_rows_count[$one_logger_slug];
|
184 |
} else {
|
185 |
// logger was not is sql result, so fake result
|
186 |
+
$one_logger_count = new stdclass();
|
187 |
$one_logger_count->count = 0;
|
188 |
}
|
189 |
|
249 |
);
|
250 |
|
251 |
$loopnum++;
|
252 |
+
} // End foreach().
|
253 |
|
254 |
echo '</table>';
|
255 |
|
287 |
',
|
288 |
esc_html($onePlugin['Name']),
|
289 |
esc_html($pluginFilePath),
|
290 |
+
$isPluginActive ? _x('Yes', 'debug dropin', 'simple-history') : _x('No', 'debug dropin', 'simple-history')
|
|
|
|
|
291 |
// 3
|
292 |
);
|
293 |
}
|
vendor/autoload.php
DELETED
@@ -1,7 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload.php @generated by Composer
|
4 |
-
|
5 |
-
require_once __DIR__ . '/composer/autoload_real.php';
|
6 |
-
|
7 |
-
return ComposerAutoloaderInit3f19e1fe69ca77f96f946c9d4920fd62::getLoader();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/ClassLoader.php
DELETED
@@ -1,445 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/*
|
4 |
-
* This file is part of Composer.
|
5 |
-
*
|
6 |
-
* (c) Nils Adermann <naderman@naderman.de>
|
7 |
-
* Jordi Boggiano <j.boggiano@seld.be>
|
8 |
-
*
|
9 |
-
* For the full copyright and license information, please view the LICENSE
|
10 |
-
* file that was distributed with this source code.
|
11 |
-
*/
|
12 |
-
|
13 |
-
namespace Composer\Autoload;
|
14 |
-
|
15 |
-
/**
|
16 |
-
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
17 |
-
*
|
18 |
-
* $loader = new \Composer\Autoload\ClassLoader();
|
19 |
-
*
|
20 |
-
* // register classes with namespaces
|
21 |
-
* $loader->add('Symfony\Component', __DIR__.'/component');
|
22 |
-
* $loader->add('Symfony', __DIR__.'/framework');
|
23 |
-
*
|
24 |
-
* // activate the autoloader
|
25 |
-
* $loader->register();
|
26 |
-
*
|
27 |
-
* // to enable searching the include path (eg. for PEAR packages)
|
28 |
-
* $loader->setUseIncludePath(true);
|
29 |
-
*
|
30 |
-
* In this example, if you try to use a class in the Symfony\Component
|
31 |
-
* namespace or one of its children (Symfony\Component\Console for instance),
|
32 |
-
* the autoloader will first look for the class under the component/
|
33 |
-
* directory, and it will then fallback to the framework/ directory if not
|
34 |
-
* found before giving up.
|
35 |
-
*
|
36 |
-
* This class is loosely based on the Symfony UniversalClassLoader.
|
37 |
-
*
|
38 |
-
* @author Fabien Potencier <fabien@symfony.com>
|
39 |
-
* @author Jordi Boggiano <j.boggiano@seld.be>
|
40 |
-
* @see http://www.php-fig.org/psr/psr-0/
|
41 |
-
* @see http://www.php-fig.org/psr/psr-4/
|
42 |
-
*/
|
43 |
-
class ClassLoader
|
44 |
-
{
|
45 |
-
// PSR-4
|
46 |
-
private $prefixLengthsPsr4 = array();
|
47 |
-
private $prefixDirsPsr4 = array();
|
48 |
-
private $fallbackDirsPsr4 = array();
|
49 |
-
|
50 |
-
// PSR-0
|
51 |
-
private $prefixesPsr0 = array();
|
52 |
-
private $fallbackDirsPsr0 = array();
|
53 |
-
|
54 |
-
private $useIncludePath = false;
|
55 |
-
private $classMap = array();
|
56 |
-
private $classMapAuthoritative = false;
|
57 |
-
private $missingClasses = array();
|
58 |
-
private $apcuPrefix;
|
59 |
-
|
60 |
-
public function getPrefixes()
|
61 |
-
{
|
62 |
-
if (!empty($this->prefixesPsr0)) {
|
63 |
-
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
64 |
-
}
|
65 |
-
|
66 |
-
return array();
|
67 |
-
}
|
68 |
-
|
69 |
-
public function getPrefixesPsr4()
|
70 |
-
{
|
71 |
-
return $this->prefixDirsPsr4;
|
72 |
-
}
|
73 |
-
|
74 |
-
public function getFallbackDirs()
|
75 |
-
{
|
76 |
-
return $this->fallbackDirsPsr0;
|
77 |
-
}
|
78 |
-
|
79 |
-
public function getFallbackDirsPsr4()
|
80 |
-
{
|
81 |
-
return $this->fallbackDirsPsr4;
|
82 |
-
}
|
83 |
-
|
84 |
-
public function getClassMap()
|
85 |
-
{
|
86 |
-
return $this->classMap;
|
87 |
-
}
|
88 |
-
|
89 |
-
/**
|
90 |
-
* @param array $classMap Class to filename map
|
91 |
-
*/
|
92 |
-
public function addClassMap(array $classMap)
|
93 |
-
{
|
94 |
-
if ($this->classMap) {
|
95 |
-
$this->classMap = array_merge($this->classMap, $classMap);
|
96 |
-
} else {
|
97 |
-
$this->classMap = $classMap;
|
98 |
-
}
|
99 |
-
}
|
100 |
-
|
101 |
-
/**
|
102 |
-
* Registers a set of PSR-0 directories for a given prefix, either
|
103 |
-
* appending or prepending to the ones previously set for this prefix.
|
104 |
-
*
|
105 |
-
* @param string $prefix The prefix
|
106 |
-
* @param array|string $paths The PSR-0 root directories
|
107 |
-
* @param bool $prepend Whether to prepend the directories
|
108 |
-
*/
|
109 |
-
public function add($prefix, $paths, $prepend = false)
|
110 |
-
{
|
111 |
-
if (!$prefix) {
|
112 |
-
if ($prepend) {
|
113 |
-
$this->fallbackDirsPsr0 = array_merge(
|
114 |
-
(array) $paths,
|
115 |
-
$this->fallbackDirsPsr0
|
116 |
-
);
|
117 |
-
} else {
|
118 |
-
$this->fallbackDirsPsr0 = array_merge(
|
119 |
-
$this->fallbackDirsPsr0,
|
120 |
-
(array) $paths
|
121 |
-
);
|
122 |
-
}
|
123 |
-
|
124 |
-
return;
|
125 |
-
}
|
126 |
-
|
127 |
-
$first = $prefix[0];
|
128 |
-
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
129 |
-
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
130 |
-
|
131 |
-
return;
|
132 |
-
}
|
133 |
-
if ($prepend) {
|
134 |
-
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
135 |
-
(array) $paths,
|
136 |
-
$this->prefixesPsr0[$first][$prefix]
|
137 |
-
);
|
138 |
-
} else {
|
139 |
-
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
140 |
-
$this->prefixesPsr0[$first][$prefix],
|
141 |
-
(array) $paths
|
142 |
-
);
|
143 |
-
}
|
144 |
-
}
|
145 |
-
|
146 |
-
/**
|
147 |
-
* Registers a set of PSR-4 directories for a given namespace, either
|
148 |
-
* appending or prepending to the ones previously set for this namespace.
|
149 |
-
*
|
150 |
-
* @param string $prefix The prefix/namespace, with trailing '\\'
|
151 |
-
* @param array|string $paths The PSR-4 base directories
|
152 |
-
* @param bool $prepend Whether to prepend the directories
|
153 |
-
*
|
154 |
-
* @throws \InvalidArgumentException
|
155 |
-
*/
|
156 |
-
public function addPsr4($prefix, $paths, $prepend = false)
|
157 |
-
{
|
158 |
-
if (!$prefix) {
|
159 |
-
// Register directories for the root namespace.
|
160 |
-
if ($prepend) {
|
161 |
-
$this->fallbackDirsPsr4 = array_merge(
|
162 |
-
(array) $paths,
|
163 |
-
$this->fallbackDirsPsr4
|
164 |
-
);
|
165 |
-
} else {
|
166 |
-
$this->fallbackDirsPsr4 = array_merge(
|
167 |
-
$this->fallbackDirsPsr4,
|
168 |
-
(array) $paths
|
169 |
-
);
|
170 |
-
}
|
171 |
-
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
172 |
-
// Register directories for a new namespace.
|
173 |
-
$length = strlen($prefix);
|
174 |
-
if ('\\' !== $prefix[$length - 1]) {
|
175 |
-
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
176 |
-
}
|
177 |
-
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
178 |
-
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
179 |
-
} elseif ($prepend) {
|
180 |
-
// Prepend directories for an already registered namespace.
|
181 |
-
$this->prefixDirsPsr4[$prefix] = array_merge(
|
182 |
-
(array) $paths,
|
183 |
-
$this->prefixDirsPsr4[$prefix]
|
184 |
-
);
|
185 |
-
} else {
|
186 |
-
// Append directories for an already registered namespace.
|
187 |
-
$this->prefixDirsPsr4[$prefix] = array_merge(
|
188 |
-
$this->prefixDirsPsr4[$prefix],
|
189 |
-
(array) $paths
|
190 |
-
);
|
191 |
-
}
|
192 |
-
}
|
193 |
-
|
194 |
-
/**
|
195 |
-
* Registers a set of PSR-0 directories for a given prefix,
|
196 |
-
* replacing any others previously set for this prefix.
|
197 |
-
*
|
198 |
-
* @param string $prefix The prefix
|
199 |
-
* @param array|string $paths The PSR-0 base directories
|
200 |
-
*/
|
201 |
-
public function set($prefix, $paths)
|
202 |
-
{
|
203 |
-
if (!$prefix) {
|
204 |
-
$this->fallbackDirsPsr0 = (array) $paths;
|
205 |
-
} else {
|
206 |
-
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
207 |
-
}
|
208 |
-
}
|
209 |
-
|
210 |
-
/**
|
211 |
-
* Registers a set of PSR-4 directories for a given namespace,
|
212 |
-
* replacing any others previously set for this namespace.
|
213 |
-
*
|
214 |
-
* @param string $prefix The prefix/namespace, with trailing '\\'
|
215 |
-
* @param array|string $paths The PSR-4 base directories
|
216 |
-
*
|
217 |
-
* @throws \InvalidArgumentException
|
218 |
-
*/
|
219 |
-
public function setPsr4($prefix, $paths)
|
220 |
-
{
|
221 |
-
if (!$prefix) {
|
222 |
-
$this->fallbackDirsPsr4 = (array) $paths;
|
223 |
-
} else {
|
224 |
-
$length = strlen($prefix);
|
225 |
-
if ('\\' !== $prefix[$length - 1]) {
|
226 |
-
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
227 |
-
}
|
228 |
-
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
229 |
-
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
230 |
-
}
|
231 |
-
}
|
232 |
-
|
233 |
-
/**
|
234 |
-
* Turns on searching the include path for class files.
|
235 |
-
*
|
236 |
-
* @param bool $useIncludePath
|
237 |
-
*/
|
238 |
-
public function setUseIncludePath($useIncludePath)
|
239 |
-
{
|
240 |
-
$this->useIncludePath = $useIncludePath;
|
241 |
-
}
|
242 |
-
|
243 |
-
/**
|
244 |
-
* Can be used to check if the autoloader uses the include path to check
|
245 |
-
* for classes.
|
246 |
-
*
|
247 |
-
* @return bool
|
248 |
-
*/
|
249 |
-
public function getUseIncludePath()
|
250 |
-
{
|
251 |
-
return $this->useIncludePath;
|
252 |
-
}
|
253 |
-
|
254 |
-
/**
|
255 |
-
* Turns off searching the prefix and fallback directories for classes
|
256 |
-
* that have not been registered with the class map.
|
257 |
-
*
|
258 |
-
* @param bool $classMapAuthoritative
|
259 |
-
*/
|
260 |
-
public function setClassMapAuthoritative($classMapAuthoritative)
|
261 |
-
{
|
262 |
-
$this->classMapAuthoritative = $classMapAuthoritative;
|
263 |
-
}
|
264 |
-
|
265 |
-
/**
|
266 |
-
* Should class lookup fail if not found in the current class map?
|
267 |
-
*
|
268 |
-
* @return bool
|
269 |
-
*/
|
270 |
-
public function isClassMapAuthoritative()
|
271 |
-
{
|
272 |
-
return $this->classMapAuthoritative;
|
273 |
-
}
|
274 |
-
|
275 |
-
/**
|
276 |
-
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
277 |
-
*
|
278 |
-
* @param string|null $apcuPrefix
|
279 |
-
*/
|
280 |
-
public function setApcuPrefix($apcuPrefix)
|
281 |
-
{
|
282 |
-
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
283 |
-
}
|
284 |
-
|
285 |
-
/**
|
286 |
-
* The APCu prefix in use, or null if APCu caching is not enabled.
|
287 |
-
*
|
288 |
-
* @return string|null
|
289 |
-
*/
|
290 |
-
public function getApcuPrefix()
|
291 |
-
{
|
292 |
-
return $this->apcuPrefix;
|
293 |
-
}
|
294 |
-
|
295 |
-
/**
|
296 |
-
* Registers this instance as an autoloader.
|
297 |
-
*
|
298 |
-
* @param bool $prepend Whether to prepend the autoloader or not
|
299 |
-
*/
|
300 |
-
public function register($prepend = false)
|
301 |
-
{
|
302 |
-
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
303 |
-
}
|
304 |
-
|
305 |
-
/**
|
306 |
-
* Unregisters this instance as an autoloader.
|
307 |
-
*/
|
308 |
-
public function unregister()
|
309 |
-
{
|
310 |
-
spl_autoload_unregister(array($this, 'loadClass'));
|
311 |
-
}
|
312 |
-
|
313 |
-
/**
|
314 |
-
* Loads the given class or interface.
|
315 |
-
*
|
316 |
-
* @param string $class The name of the class
|
317 |
-
* @return bool|null True if loaded, null otherwise
|
318 |
-
*/
|
319 |
-
public function loadClass($class)
|
320 |
-
{
|
321 |
-
if ($file = $this->findFile($class)) {
|
322 |
-
includeFile($file);
|
323 |
-
|
324 |
-
return true;
|
325 |
-
}
|
326 |
-
}
|
327 |
-
|
328 |
-
/**
|
329 |
-
* Finds the path to the file where the class is defined.
|
330 |
-
*
|
331 |
-
* @param string $class The name of the class
|
332 |
-
*
|
333 |
-
* @return string|false The path if found, false otherwise
|
334 |
-
*/
|
335 |
-
public function findFile($class)
|
336 |
-
{
|
337 |
-
// class map lookup
|
338 |
-
if (isset($this->classMap[$class])) {
|
339 |
-
return $this->classMap[$class];
|
340 |
-
}
|
341 |
-
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
342 |
-
return false;
|
343 |
-
}
|
344 |
-
if (null !== $this->apcuPrefix) {
|
345 |
-
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
346 |
-
if ($hit) {
|
347 |
-
return $file;
|
348 |
-
}
|
349 |
-
}
|
350 |
-
|
351 |
-
$file = $this->findFileWithExtension($class, '.php');
|
352 |
-
|
353 |
-
// Search for Hack files if we are running on HHVM
|
354 |
-
if (false === $file && defined('HHVM_VERSION')) {
|
355 |
-
$file = $this->findFileWithExtension($class, '.hh');
|
356 |
-
}
|
357 |
-
|
358 |
-
if (null !== $this->apcuPrefix) {
|
359 |
-
apcu_add($this->apcuPrefix.$class, $file);
|
360 |
-
}
|
361 |
-
|
362 |
-
if (false === $file) {
|
363 |
-
// Remember that this class does not exist.
|
364 |
-
$this->missingClasses[$class] = true;
|
365 |
-
}
|
366 |
-
|
367 |
-
return $file;
|
368 |
-
}
|
369 |
-
|
370 |
-
private function findFileWithExtension($class, $ext)
|
371 |
-
{
|
372 |
-
// PSR-4 lookup
|
373 |
-
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
374 |
-
|
375 |
-
$first = $class[0];
|
376 |
-
if (isset($this->prefixLengthsPsr4[$first])) {
|
377 |
-
$subPath = $class;
|
378 |
-
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
379 |
-
$subPath = substr($subPath, 0, $lastPos);
|
380 |
-
$search = $subPath . '\\';
|
381 |
-
if (isset($this->prefixDirsPsr4[$search])) {
|
382 |
-
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
383 |
-
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
384 |
-
if (file_exists($file = $dir . $pathEnd)) {
|
385 |
-
return $file;
|
386 |
-
}
|
387 |
-
}
|
388 |
-
}
|
389 |
-
}
|
390 |
-
}
|
391 |
-
|
392 |
-
// PSR-4 fallback dirs
|
393 |
-
foreach ($this->fallbackDirsPsr4 as $dir) {
|
394 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
395 |
-
return $file;
|
396 |
-
}
|
397 |
-
}
|
398 |
-
|
399 |
-
// PSR-0 lookup
|
400 |
-
if (false !== $pos = strrpos($class, '\\')) {
|
401 |
-
// namespaced class name
|
402 |
-
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
403 |
-
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
404 |
-
} else {
|
405 |
-
// PEAR-like class name
|
406 |
-
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
407 |
-
}
|
408 |
-
|
409 |
-
if (isset($this->prefixesPsr0[$first])) {
|
410 |
-
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
411 |
-
if (0 === strpos($class, $prefix)) {
|
412 |
-
foreach ($dirs as $dir) {
|
413 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
414 |
-
return $file;
|
415 |
-
}
|
416 |
-
}
|
417 |
-
}
|
418 |
-
}
|
419 |
-
}
|
420 |
-
|
421 |
-
// PSR-0 fallback dirs
|
422 |
-
foreach ($this->fallbackDirsPsr0 as $dir) {
|
423 |
-
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
424 |
-
return $file;
|
425 |
-
}
|
426 |
-
}
|
427 |
-
|
428 |
-
// PSR-0 include paths.
|
429 |
-
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
430 |
-
return $file;
|
431 |
-
}
|
432 |
-
|
433 |
-
return false;
|
434 |
-
}
|
435 |
-
}
|
436 |
-
|
437 |
-
/**
|
438 |
-
* Scope isolated include.
|
439 |
-
*
|
440 |
-
* Prevents access to $this/self from included files.
|
441 |
-
*/
|
442 |
-
function includeFile($file)
|
443 |
-
{
|
444 |
-
include $file;
|
445 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/LICENSE
DELETED
@@ -1,21 +0,0 @@
|
|
1 |
-
|
2 |
-
Copyright (c) Nils Adermann, Jordi Boggiano
|
3 |
-
|
4 |
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
5 |
-
of this software and associated documentation files (the "Software"), to deal
|
6 |
-
in the Software without restriction, including without limitation the rights
|
7 |
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
8 |
-
copies of the Software, and to permit persons to whom the Software is furnished
|
9 |
-
to do so, subject to the following conditions:
|
10 |
-
|
11 |
-
The above copyright notice and this permission notice shall be included in all
|
12 |
-
copies or substantial portions of the Software.
|
13 |
-
|
14 |
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
15 |
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
16 |
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
17 |
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
18 |
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
19 |
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
20 |
-
THE SOFTWARE.
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_classmap.php
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_classmap.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_namespaces.php
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_namespaces.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_psr4.php
DELETED
@@ -1,9 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_psr4.php @generated by Composer
|
4 |
-
|
5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
6 |
-
$baseDir = dirname($vendorDir);
|
7 |
-
|
8 |
-
return array(
|
9 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_real.php
DELETED
@@ -1,52 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_real.php @generated by Composer
|
4 |
-
|
5 |
-
class ComposerAutoloaderInit3f19e1fe69ca77f96f946c9d4920fd62
|
6 |
-
{
|
7 |
-
private static $loader;
|
8 |
-
|
9 |
-
public static function loadClassLoader($class)
|
10 |
-
{
|
11 |
-
if ('Composer\Autoload\ClassLoader' === $class) {
|
12 |
-
require __DIR__ . '/ClassLoader.php';
|
13 |
-
}
|
14 |
-
}
|
15 |
-
|
16 |
-
public static function getLoader()
|
17 |
-
{
|
18 |
-
if (null !== self::$loader) {
|
19 |
-
return self::$loader;
|
20 |
-
}
|
21 |
-
|
22 |
-
spl_autoload_register(array('ComposerAutoloaderInit3f19e1fe69ca77f96f946c9d4920fd62', 'loadClassLoader'), true, true);
|
23 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
24 |
-
spl_autoload_unregister(array('ComposerAutoloaderInit3f19e1fe69ca77f96f946c9d4920fd62', 'loadClassLoader'));
|
25 |
-
|
26 |
-
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
27 |
-
if ($useStaticLoader) {
|
28 |
-
require_once __DIR__ . '/autoload_static.php';
|
29 |
-
|
30 |
-
call_user_func(\Composer\Autoload\ComposerStaticInit3f19e1fe69ca77f96f946c9d4920fd62::getInitializer($loader));
|
31 |
-
} else {
|
32 |
-
$map = require __DIR__ . '/autoload_namespaces.php';
|
33 |
-
foreach ($map as $namespace => $path) {
|
34 |
-
$loader->set($namespace, $path);
|
35 |
-
}
|
36 |
-
|
37 |
-
$map = require __DIR__ . '/autoload_psr4.php';
|
38 |
-
foreach ($map as $namespace => $path) {
|
39 |
-
$loader->setPsr4($namespace, $path);
|
40 |
-
}
|
41 |
-
|
42 |
-
$classMap = require __DIR__ . '/autoload_classmap.php';
|
43 |
-
if ($classMap) {
|
44 |
-
$loader->addClassMap($classMap);
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
$loader->register(true);
|
49 |
-
|
50 |
-
return $loader;
|
51 |
-
}
|
52 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/autoload_static.php
DELETED
@@ -1,15 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
// autoload_static.php @generated by Composer
|
4 |
-
|
5 |
-
namespace Composer\Autoload;
|
6 |
-
|
7 |
-
class ComposerStaticInit3f19e1fe69ca77f96f946c9d4920fd62
|
8 |
-
{
|
9 |
-
public static function getInitializer(ClassLoader $loader)
|
10 |
-
{
|
11 |
-
return \Closure::bind(function () use ($loader) {
|
12 |
-
|
13 |
-
}, null, ClassLoader::class);
|
14 |
-
}
|
15 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vendor/composer/installed.json
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
[]
|
|