PluginProbe
Import WP – CSV & XML Import Export for WordPress / 2.14.24
Import WP – CSV & XML Import Export for WordPress v2.14.24
2.15.1 2.15.0 2.14.24 2.14.23 2.7.0 2.7.1 2.7.10 2.7.11 2.7.12 2.7.13 2.7.14 2.7.2 2.7.3 2.7.4 2.7.5 2.7.6 2.7.7 2.7.8 2.7.9 2.8.0 2.8.1 2.8.2 2.8.3 2.9.0 2.9.1 All 144 releases
jc-importer / class / Common / Importer / Permission / Permission.php

Permission.php in Import WP – CSV & XML Import Export for WordPress 2.14.24, at class/Common/Importer/Permission/Permission.php

118 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ImportWP\Common\Importer\Permission;
4
5 use ImportWP\Common\Importer\Exception\MapperException;
6 use ImportWP\Common\Importer\PermissionInterface;
7 use ImportWP\Common\Model\ImporterModel;
8
9 class Permission implements PermissionInterface
10 {
11 private $importer_model;
12
13 public function __construct(ImporterModel $importer_model)
14 {
15 $this->importer_model = $importer_model;
16 }
17
18 public function validate($fields, $method, $group_id)
19 {
20 $permission_method = false;
21
22 if ('INSERT' === $method) {
23 $permission_method = 'create';
24 } elseif ('UPDATE' === $method) {
25 $permission_method = 'update';
26 } else {
27 throw new MapperException(sprintf(__('Not enough permissions to %s record.', 'jc-importer'), 'import'));
28 }
29
30 if (false === $this->allowed_method($permission_method)) {
31 throw new MapperException(sprintf(__('Not enough permissions to %s record.', 'jc-importer'), $permission_method));
32 }
33
34 $permission_data = $this->importer_model->getPermission($permission_method);
35 $fields = $this->validate_group($fields, $group_id, $permission_data);
36
37 return $fields;
38 }
39
40 public function allowed_method($method)
41 {
42 $permission_data = $this->importer_model->getPermission($method);
43 return isset($permission_data['enabled']) && $permission_data['enabled'] !== true ? false : true;
44 }
45
46 public function validate_group($fields, $group_id, $permission_data)
47 {
48 $permission_type = isset($permission_data['type']) ? $permission_data['type'] : false;
49 if (!$permission_type) {
50 return $fields;
51 }
52
53 $permission_fields = is_array($permission_data['fields']) ? $permission_data['fields'] : explode("\n", $permission_data['fields']);
54
55 $matches = array();
56 foreach ($permission_fields as $field_search) {
57 $matches = array_merge($matches, $this->match_permissions($field_search, $fields));
58 }
59
60 if ('include' === $permission_type) {
61 return $matches;
62 } elseif ('exclude' === $permission_type) {
63 $result = array();
64 foreach ($fields as $field_id => $field_value) {
65 if (!isset($matches[$field_id])) {
66 $result[$field_id] = $field_value;
67 }
68 }
69 return $result;
70 }
71
72 return $fields;
73 }
74
75 /**
76 * Match search string against field list
77 *
78 * @param string $field_search
79 * @param array $fields List of field_id => field_value
80 *
81 * @return array
82 */
83 private function match_permissions($field_search, $fields)
84 {
85 $result = array();
86 // replaces * with the regex pattern
87 $pattern = '[a-zA-Z\d_\-\.]+';
88 if ('*' === $field_search) {
89 // *
90 return $fields;
91 } elseif (1 === preg_match("/^\*{$pattern}/i", $field_search)) {
92 $search = substr($field_search, 1);
93 $search = str_replace('.', '\.', $search);
94 // *_src
95 foreach ($fields as $field_id => $field_value) {
96 if (1 === preg_match("/^{$pattern}{$search}$/i", $field_id)) {
97 $result[$field_id] = $fields[$field_id];
98 }
99 }
100 } elseif (1 === preg_match("/{$pattern}\*$/i", $field_search)) {
101 $search = substr($field_search, 0, -1);
102 $search = str_replace('.', '\.', $search);
103 // attachment_*
104 foreach ($fields as $field_id => $field_value) {
105 if (1 === preg_match("/^{$search}{$pattern}$/i", $field_id)) {
106 $result[$field_id] = $fields[$field_id];
107 }
108 }
109 } else {
110 if (!isset($fields[$field_search])) {
111 return $result;
112 }
113 $result[$field_search] = $fields[$field_search];
114 }
115 return $result;
116 }
117 }
118