PluginProbe
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce / 1.6.9
ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce v1.6.9
1.17.9 1.17.8 1.17.7 1.17.6 1.17.5 1.17.4 1.2.2 1.2.3 1.2.4 1.2.5 1.2.6 1.2.7 1.2.8 1.3.0 1.3.1 1.3.11 1.3.12 1.3.13 1.3.14 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 All 143 releases
erp / includes / framework / modules.php

modules.php in ERP: Complete HR, Accounting & CRM Suite Built for WooCommerce 1.6.9, at includes/framework/modules.php

297 lines 7.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WeDevs\ERP\Framework;
4
5 use WeDevs\ERP\Framework\Traits\Hooker;
6 use WP_Error;
7
8 /**
9 * Modules Class
10 */
11 class Modules {
12
13 /*
14 * Hooks
15 */
16 use Hooker;
17
18 /**
19 * Hold the modules
20 *
21 * @var
22 */
23 protected $modules;
24
25 /**
26 * initialize
27 */
28 public function __construct() {
29 $this->init_modules();
30
31 $this->action( 'erp_switch_redirect_to', 'module_switch_redirect', 10, 2 );
32 }
33
34 /**
35 * Initialize the modules
36 *
37 * @return void
38 */
39 public function init_modules() {
40 $this->modules = [
41 'hrm' => [
42 'title' => __( 'HR Management', 'erp' ),
43 'slug' => 'erp-hrm',
44 'description' => __( 'Human Resource Management', 'erp' ),
45 'callback' => '\WeDevs\ERP\HRM\Human_Resource',
46 'modules' => apply_filters( 'erp_hr_modules', [] ),
47 ],
48 'crm' => [
49 'title' => __( 'CR Management', 'erp' ),
50 'slug' => 'erp-crm',
51 'description' => __( 'Customer Relationship Management', 'erp' ),
52 'callback' => '\WeDevs\ERP\CRM\Customer_Relationship',
53 'modules' => apply_filters( 'erp_crm_modules', [] ),
54 ],
55 'accounting' => [
56 'title' => __( 'Accounting', 'erp' ),
57 'slug' => 'erp-accounting',
58 'description' => __( 'Accounting Management', 'erp' ),
59 'callback' => '\WeDevs\ERP\Accounting\Accounting',
60 'modules' => apply_filters( 'erp_ac_modules', [] ),
61 ],
62 ];
63 }
64
65 /**
66 * Get all the registered modules
67 *
68 * @return mixed|void
69 */
70 public function get_modules() {
71 return apply_filters( 'erp_get_modules', $this->modules );
72 }
73
74 /**
75 * Get a module
76 *
77 * @param $module
78 *
79 * @return bool
80 */
81 public function get_module( $module ) {
82 if ( array_key_exists( $module, $this->modules ) ) {
83 return $this->modules[ $module ];
84 }
85
86 return false;
87 }
88
89 /**
90 * Get the first module as default module
91 *
92 * @return mixed
93 */
94 public function get_default_module() {
95 return reset( $this->modules );
96 }
97
98 /**
99 * Get the current mode of the admin UI
100 *
101 * @return bool|mixed
102 */
103 public function get_current_module() {
104 global $current_user;
105
106 $mode = get_user_meta( $current_user->ID, '_erp_mode', true );
107
108 if ( !empty( $mode ) && $this->get_module( $mode ) ) {
109 return $this->get_module( $mode );
110 }
111
112 return $this->get_default_module();
113 }
114
115 /**
116 * Redirect to the CRM/HRM dashboard page when switching from admin menu bar
117 *
118 * @param $url
119 * @param $new_mode
120 *
121 * @return string|void
122 */
123 public function module_switch_redirect( $url, $new_mode ) {
124 if ( 'crm' == $new_mode ) {
125 return admin_url( 'admin.php?page=erp-crm' );
126 } elseif ( 'hrm' == $new_mode ) {
127 return admin_url( 'admin.php?page=erp-hrm' );
128 }
129
130 return $url;
131 }
132
133 /**
134 * Get module status
135 *
136 * @param string $module_key
137 *
138 * @since 0.1
139 *
140 * @return bool
141 */
142 public function is_module_active( $module_key ) {
143 $modules = $this->get_active_modules();
144
145 if ( array_key_exists( $module_key, $modules ) ) {
146 return true;
147 }
148
149 return false;
150 }
151
152 /**
153 * Get active modules
154 *
155 * @since 0.1
156 *
157 * @return array
158 */
159 public function get_active_modules() {
160 return get_option( 'erp_modules', [] );
161 }
162
163 /**
164 * Get inactive modules
165 *
166 * @since 0.1
167 *
168 * @return array
169 */
170 public function get_inactive_modules() {
171 $all_modules = $this->get_modules();
172 $active_modules = $this->get_active_modules();
173
174 foreach ( $active_modules as $key => $module ) {
175 unset( $all_modules[$key] );
176 }
177
178 return $all_modules;
179 }
180
181 /**
182 * Get modules by query pram
183 *
184 * @param string $tab
185 *
186 * @since 0.1
187 *
188 * @return array
189 */
190 public function get_query_modules( $tab = false ) {
191 switch ( $tab ) {
192 case 'active':
193 return $this->get_active_modules();
194 break;
195
196 case 'inactive':
197 return $this->get_inactive_modules();
198 break;
199
200 default:
201 return $this->get_modules();
202 break;
203 }
204 }
205
206 /**
207 * Check for valid ERP modules
208 *
209 * @since 1.2.2
210 *
211 * @param array $modules Name of the module or modules
212 *
213 * @return mixed WP_Error if an invalid name is given or true on success
214 */
215 public function is_valid_module( $modules ) {
216 if ( ! is_array( $modules ) ) {
217 $modules = [ $modules ];
218 }
219
220 $erp_module_names = array_keys( $this->modules );
221
222 foreach ( $modules as $module_name ) {
223 if ( ! in_array( $module_name, $erp_module_names ) ) {
224 return new WP_Error( 'invalid-module-name', sprintf( __( 'Invalid module name %s', 'erp' ), $module_name ) );
225 }
226 }
227
228 return true;
229 }
230
231 /**
232 * Activate single or multiple modules
233 *
234 * @since 1.2.2
235 *
236 * @param array $modules Name of the module or modules
237 *
238 * @return mixed WP_Error if an invalid name is given or true on success
239 */
240 public function activate_modules( $modules ) {
241 if ( ! is_array( $modules ) ) {
242 $modules = [ $modules ];
243 }
244
245 $is_valid_module = $this->is_valid_module( $modules );
246
247 if ( is_wp_error( $is_valid_module ) ) {
248 return $is_valid_module;
249 }
250
251 $active_modules = $this->get_active_modules();
252
253 foreach ( $modules as $module_name ) {
254 if ( ! in_array( $module_name, $active_modules ) ) {
255 $active_modules[ $module_name ] = $this->modules[ $module_name ];
256 }
257 }
258
259 update_option( 'erp_modules', $active_modules );
260
261 return true;
262 }
263
264 /**
265 * Deactivate single or multiple modules
266 *
267 * @since 1.2.2
268 *
269 * @param array $modules Name of the module or modules
270 *
271 * @return mixed WP_Error if an invalid name is given or true on success
272 */
273 public function deactivate_modules( $modules ) {
274 if ( ! is_array( $modules ) ) {
275 $modules = [ $modules ];
276 }
277
278 $is_valid_module = $this->is_valid_module( $modules );
279
280 if ( is_wp_error( $is_valid_module ) ) {
281 return $is_valid_module;
282 }
283
284 $active_modules = $this->get_active_modules();
285
286 foreach ( $active_modules as $module_name => $active_module ) {
287 if ( in_array( $module_name, $modules ) ) {
288 unset( $active_modules[ $module_name ] );
289 }
290 }
291
292 update_option( 'erp_modules', $active_modules );
293
294 return true;
295 }
296 }
297