PluginProbe
Import WP – CSV & XML Import Export for WordPress / 2.8.1
Import WP – CSV & XML Import Export for WordPress v2.8.1
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.8.1, at class/Common/Importer/Permission/Permission.php

117 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 if ('INSERT' === $method) {
22 $permission_method = 'create';
23 } elseif ('UPDATE' === $method) {
24 $permission_method = 'update';
25 } else {
26 throw new MapperException('Not enough permissions to import record.');
27 }
28
29 if (false === $this->allowed_method($permission_method)) {
30 throw new MapperException('Not enough permissions to ' . $permission_method . ' record.');
31 }
32
33 $permission_data = $this->importer_model->getPermission($permission_method);
34 $fields = $this->validate_group($fields, $group_id, $permission_data);
35
36 return $fields;
37 }
38
39 public function allowed_method($method)
40 {
41 $permission_data = $this->importer_model->getPermission($method);
42 return isset($permission_data['enabled']) && $permission_data['enabled'] !== true ? false : true;
43 }
44
45 public function validate_group($fields, $group_id, $permission_data)
46 {
47 $permission_type = isset($permission_data['type']) ? $permission_data['type'] : false;
48 if (!$permission_type) {
49 return $fields;
50 }
51
52 $permission_fields = is_array($permission_data['fields']) ? $permission_data['fields'] : explode("\n", $permission_data['fields']);
53
54 $matches = array();
55 foreach ($permission_fields as $field_search) {
56 $matches = array_merge($matches, $this->match_permissions($field_search, $fields));
57 }
58
59 if ('include' === $permission_type) {
60 return $matches;
61 } elseif ('exclude' === $permission_type) {
62 $result = array();
63 foreach ($fields as $field_id => $field_value) {
64 if (!isset($matches[$field_id])) {
65 $result[$field_id] = $field_value;
66 }
67 }
68 return $result;
69 }
70
71 return $fields;
72 }
73
74 /**
75 * Match search string against field list
76 *
77 * @param string $field_search
78 * @param array $fields List of field_id => field_value
79 *
80 * @return array
81 */
82 private function match_permissions($field_search, $fields)
83 {
84 $result = array();
85 // replaces * with the regex pattern
86 $pattern = '[a-zA-Z\d_\-\.]+';
87 if ('*' === $field_search) {
88 // *
89 return $fields;
90 } elseif (1 === preg_match("/^\*{$pattern}/i", $field_search)) {
91 $search = substr($field_search, 1);
92 $search = str_replace('.', '\.', $search);
93 // *_src
94 foreach ($fields as $field_id => $field_value) {
95 if (1 === preg_match("/^{$pattern}{$search}$/i", $field_id)) {
96 $result[$field_id] = $fields[$field_id];
97 }
98 }
99 } elseif (1 === preg_match("/{$pattern}\*$/i", $field_search)) {
100 $search = substr($field_search, 0, -1);
101 $search = str_replace('.', '\.', $search);
102 // attachment_*
103 foreach ($fields as $field_id => $field_value) {
104 if (1 === preg_match("/^{$search}{$pattern}$/i", $field_id)) {
105 $result[$field_id] = $fields[$field_id];
106 }
107 }
108 } else {
109 if (!isset($fields[$field_search])) {
110 return $result;
111 }
112 $result[$field_search] = $fields[$field_search];
113 }
114 return $result;
115 }
116 }
117