PluginProbe
VikBooking Hotel Booking Engine & PMS / 1.8.16
VikBooking Hotel Booking Engine & PMS v1.8.16
1.8.16 1.8.15 1.8.14 1.8.13 1.8.12 1.8.11 1.8.10 1.8.9 1.8.6 1.8.7 1.8.8 trunk 1.6.0 1.6.1 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 All 37 releases
← All changes | libraries/adapter/dashboard/admin.php +142 -0 1.6.0 → 1.8.16 View file →
@@ -1,0 +1,142 @@
1 +<?php
2 +/**
3 + * @package VikWP - Libraries
4 + * @subpackage adapter.dashboard
5 + * @author E4J s.r.l.
6 + * @copyright Copyright (C) 2023 E4J s.r.l. All Rights Reserved.
7 + * @license http://www.gnu.org/licenses/gpl-2.0.html GNU/GPL
8 + * @link https://vikwp.com
9 + */
10 +
11 +// No direct access
12 +defined('ABSPATH') or die('No script kiddies please!');
13 +
14 +JLoader::import('adapter.dashboard.widget');
15 +
16 +/**
17 + * Helper class used to manage the widgets that can be included and
18 + * configured within the admin dashboard of WordPress.
19 + *
20 + * @since 10.1.31
21 + * @link https://developer.wordpress.org/apis/handbook/dashboard-widgets/
22 + */
23 +class JDashboardAdmin
24 +{
25 + /**
26 + * Loads all the widgets under the specified folder/file.
27 + *
28 + * @param mixed $folder Either a file or a folder that contains the widgets.
29 + * @param string $prefix The prefix of the classname. If not specified
30 + * `JDashboardWidget` is assumed.
31 + *
32 + * @return void
33 + */
34 + public static function load($folder, $prefix = null)
35 + {
36 + if (is_null($prefix))
37 + {
38 + // use default prefix
39 + $prefix = 'JDashboardWidget';
40 + }
41 +
42 + // check if we have a directory or a file
43 + if (is_dir($folder))
44 + {
45 + JLoader::import('adapter.filesystem.folder');
46 +
47 + // load list of files contained within the specified folder
48 + $folder = JFolder::files($folder, '\.php$', $recursive = false, $full = true);
49 + }
50 + else
51 + {
52 + // cast file to array
53 + $folder = (array) $folder;
54 +
55 + // iterate specified files
56 + foreach ($folder as $file)
57 + {
58 + // make sure the file exists and is a PHP file
59 + if (!is_file($file) || !preg_match("/\.php$/", $file))
60 + {
61 + // file not found, raise error
62 + throw new RuntimeException(sprintf('Widget file [%s] not found', $file), 404);
63 + }
64 + }
65 + }
66 +
67 + // at this point, all the specified files exist
68 + foreach ($folder as $file)
69 + {
70 + // load the file
71 + require_once $file;
72 +
73 + // extract file name from path
74 + $filename = preg_replace("/\.php$/", '', basename($file));
75 + // remove any unexpected character and make the next character uppercase
76 + $filename = preg_replace_callback("/[^a-zA-Z0-9]+([a-zA-Z0-9])/", function($match)
77 + {
78 + return strtoupper(end($match));
79 + }, $filename);
80 +
81 + // prepare widget class name
82 + $classname = $prefix . ucfirst($filename);
83 +
84 + // make sure the class exists
85 + if (!class_exists($classname))
86 + {
87 + // missing class, raise error
88 + throw new RuntimeException(sprintf('Class [%s] not found', $classname), 404);
89 + }
90 +
91 + // instantiate class
92 + $widget = new $classname();
93 +
94 + // make sure the class is a valid instance
95 + if (!$widget instanceof JDashboardWidget)
96 + {
97 + // the widget doesn't inherit the correct class, raise error
98 + throw new RuntimeException(sprintf('Class [%s] is not a valid instance', $classname), 500);
99 + }
100 +
101 + // register class within the WordPress dashboard
102 + static::register($widget);
103 + }
104 + }
105 +
106 + /**
107 + * Registers a widget within the dashboard.
108 + *
109 + * @param JDashboardWidget $widget The instance of the widget to register.
110 + *
111 + * @return void
112 + */
113 + public static function register(JDashboardWidget $widget)
114 + {
115 + if (!$widget->canAccess())
116 + {
117 + // do not display widget in case the user is not authorized
118 + return false;
119 + }
120 +
121 + $args = array();
122 +
123 + // set widget ID as first argument
124 + $args[] = $widget->getID();
125 + // set widget name as second argument
126 + $args[] = $widget->getName();
127 + // set callback to display the widget contents
128 + $args[] = array($widget, 'getHtml');
129 +
130 + // check if the widget supports a configuration
131 + if ($widget->getForm())
132 + {
133 + // set callback to display the configuration form
134 + $args[] = array($widget, 'config');
135 + // set configuration settings as last argument
136 + $args[] = $widget->getConfig();
137 + }
138 +
139 + // call function to register the widget
140 + call_user_func_array('wp_add_dashboard_widget', $args);
141 + }
142 +}