Completed
Pull Request — master (#10059)
by Georg
16:31
created
apps/dav/lib/Upload/FutureFile.php 1 patch
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -37,87 +37,87 @@
 block discarded – undo
37 37
  */
38 38
 class FutureFile implements \Sabre\DAV\IFile {
39 39
 
40
-	/** @var Directory */
41
-	private $root;
42
-	/** @var string */
43
-	private $name;
40
+    /** @var Directory */
41
+    private $root;
42
+    /** @var string */
43
+    private $name;
44 44
 
45
-	/**
46
-	 * @param Directory $root
47
-	 * @param string $name
48
-	 */
49
-	function __construct(Directory $root, $name) {
50
-		$this->root = $root;
51
-		$this->name = $name;
52
-	}
45
+    /**
46
+     * @param Directory $root
47
+     * @param string $name
48
+     */
49
+    function __construct(Directory $root, $name) {
50
+        $this->root = $root;
51
+        $this->name = $name;
52
+    }
53 53
 
54
-	/**
55
-	 * @inheritdoc
56
-	 */
57
-	function put($data) {
58
-		throw new Forbidden('Permission denied to put into this file');
59
-	}
54
+    /**
55
+     * @inheritdoc
56
+     */
57
+    function put($data) {
58
+        throw new Forbidden('Permission denied to put into this file');
59
+    }
60 60
 
61
-	/**
62
-	 * @inheritdoc
63
-	 */
64
-	function get() {
65
-		$nodes = $this->root->getChildren();
66
-		return AssemblyStream::wrap($nodes);
67
-	}
61
+    /**
62
+     * @inheritdoc
63
+     */
64
+    function get() {
65
+        $nodes = $this->root->getChildren();
66
+        return AssemblyStream::wrap($nodes);
67
+    }
68 68
 
69
-	/**
70
-	 * @inheritdoc
71
-	 */
72
-	function getContentType() {
73
-		return 'application/octet-stream';
74
-	}
69
+    /**
70
+     * @inheritdoc
71
+     */
72
+    function getContentType() {
73
+        return 'application/octet-stream';
74
+    }
75 75
 
76
-	/**
77
-	 * @inheritdoc
78
-	 */
79
-	function getETag() {
80
-		return $this->root->getETag();
81
-	}
76
+    /**
77
+     * @inheritdoc
78
+     */
79
+    function getETag() {
80
+        return $this->root->getETag();
81
+    }
82 82
 
83
-	/**
84
-	 * @inheritdoc
85
-	 */
86
-	function getSize() {
87
-		$children = $this->root->getChildren();
88
-		$sizes = array_map(function($node) {
89
-			/** @var IFile $node */
90
-			return $node->getSize();
91
-		}, $children);
83
+    /**
84
+     * @inheritdoc
85
+     */
86
+    function getSize() {
87
+        $children = $this->root->getChildren();
88
+        $sizes = array_map(function($node) {
89
+            /** @var IFile $node */
90
+            return $node->getSize();
91
+        }, $children);
92 92
 
93
-		return array_sum($sizes);
94
-	}
93
+        return array_sum($sizes);
94
+    }
95 95
 
96
-	/**
97
-	 * @inheritdoc
98
-	 */
99
-	function delete() {
100
-		$this->root->delete();
101
-	}
96
+    /**
97
+     * @inheritdoc
98
+     */
99
+    function delete() {
100
+        $this->root->delete();
101
+    }
102 102
 
103
-	/**
104
-	 * @inheritdoc
105
-	 */
106
-	function getName() {
107
-		return $this->name;
108
-	}
103
+    /**
104
+     * @inheritdoc
105
+     */
106
+    function getName() {
107
+        return $this->name;
108
+    }
109 109
 
110
-	/**
111
-	 * @inheritdoc
112
-	 */
113
-	function setName($name) {
114
-		throw new Forbidden('Permission denied to rename this file');
115
-	}
110
+    /**
111
+     * @inheritdoc
112
+     */
113
+    function setName($name) {
114
+        throw new Forbidden('Permission denied to rename this file');
115
+    }
116 116
 
117
-	/**
118
-	 * @inheritdoc
119
-	 */
120
-	function getLastModified() {
121
-		return $this->root->getLastModified();
122
-	}
117
+    /**
118
+     * @inheritdoc
119
+     */
120
+    function getLastModified() {
121
+        return $this->root->getLastModified();
122
+    }
123 123
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Provider/Base.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -49,7 +49,7 @@
 block discarded – undo
49 49
 	protected function setSubjects(IEvent $event, $subject, array $parameters) {
50 50
 		$placeholders = $replacements = [];
51 51
 		foreach ($parameters as $placeholder => $parameter) {
52
-			$placeholders[] = '{' . $placeholder . '}';
52
+			$placeholders[] = '{'.$placeholder.'}';
53 53
 			$replacements[] = $parameter['name'];
54 54
 		}
55 55
 
Please login to merge, or discard this patch.
Indentation   +143 added lines, -143 removed lines patch added patch discarded remove patch
@@ -34,147 +34,147 @@
 block discarded – undo
34 34
 
35 35
 abstract class Base implements IProvider {
36 36
 
37
-	/** @var IUserManager */
38
-	protected $userManager;
39
-
40
-	/** @var string[]  */
41
-	protected $userDisplayNames = [];
42
-
43
-	/** @var IGroupManager */
44
-	protected $groupManager;
45
-
46
-	/** @var string[] */
47
-	protected $groupDisplayNames = [];
48
-
49
-	/**
50
-	 * @param IUserManager $userManager
51
-	 * @param IGroupManager $groupManager
52
-	 */
53
-	public function __construct(IUserManager $userManager, IGroupManager $groupManager) {
54
-		$this->userManager = $userManager;
55
-		$this->groupManager = $groupManager;
56
-	}
57
-
58
-	/**
59
-	 * @param IEvent $event
60
-	 * @param string $subject
61
-	 * @param array $parameters
62
-	 */
63
-	protected function setSubjects(IEvent $event, $subject, array $parameters) {
64
-		$placeholders = $replacements = [];
65
-		foreach ($parameters as $placeholder => $parameter) {
66
-			$placeholders[] = '{' . $placeholder . '}';
67
-			$replacements[] = $parameter['name'];
68
-		}
69
-
70
-		$event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
71
-			->setRichSubject($subject, $parameters);
72
-	}
73
-
74
-	/**
75
-	 * @param array $eventData
76
-	 * @return array
77
-	 */
78
-	protected function generateObjectParameter($eventData) {
79
-		if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
80
-			throw new \InvalidArgumentException();
81
-		}
82
-
83
-		return [
84
-			'type' => 'calendar-event',
85
-			'id' => $eventData['id'],
86
-			'name' => $eventData['name'],
87
-		];
88
-	}
89
-
90
-	/**
91
-	 * @param array $data
92
-	 * @param IL10N $l
93
-	 * @return array
94
-	 */
95
-	protected function generateCalendarParameter($data, IL10N $l) {
96
-		if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
97
-			$data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
98
-			return [
99
-				'type' => 'calendar',
100
-				'id' => $data['id'],
101
-				'name' => $l->t('Personal'),
102
-			];
103
-		}
104
-
105
-		return [
106
-			'type' => 'calendar',
107
-			'id' => $data['id'],
108
-			'name' => $data['name'],
109
-		];
110
-	}
111
-
112
-	/**
113
-	 * @param int $id
114
-	 * @param string $name
115
-	 * @return array
116
-	 */
117
-	protected function generateLegacyCalendarParameter($id, $name) {
118
-		return [
119
-			'type' => 'calendar',
120
-			'id' => $id,
121
-			'name' => $name,
122
-		];
123
-	}
124
-
125
-	/**
126
-	 * @param string $uid
127
-	 * @return array
128
-	 */
129
-	protected function generateUserParameter($uid) {
130
-		if (!isset($this->userDisplayNames[$uid])) {
131
-			$this->userDisplayNames[$uid] = $this->getUserDisplayName($uid);
132
-		}
133
-
134
-		return [
135
-			'type' => 'user',
136
-			'id' => $uid,
137
-			'name' => $this->userDisplayNames[$uid],
138
-		];
139
-	}
140
-
141
-	/**
142
-	 * @param string $uid
143
-	 * @return string
144
-	 */
145
-	protected function getUserDisplayName($uid) {
146
-		$user = $this->userManager->get($uid);
147
-		if ($user instanceof IUser) {
148
-			return $user->getDisplayName();
149
-		}
150
-		return $uid;
151
-	}
152
-
153
-	/**
154
-	 * @param string $gid
155
-	 * @return array
156
-	 */
157
-	protected function generateGroupParameter($gid) {
158
-		if (!isset($this->groupDisplayNames[$gid])) {
159
-			$this->groupDisplayNames[$gid] = $this->getGroupDisplayName($gid);
160
-		}
161
-
162
-		return [
163
-			'type' => 'group',
164
-			'id' => $gid,
165
-			'name' => $this->groupDisplayNames[$gid],
166
-		];
167
-	}
168
-
169
-	/**
170
-	 * @param string $gid
171
-	 * @return string
172
-	 */
173
-	protected function getGroupDisplayName($gid) {
174
-		$group = $this->groupManager->get($gid);
175
-		if ($group instanceof IGroup) {
176
-			return $group->getDisplayName();
177
-		}
178
-		return $gid;
179
-	}
37
+    /** @var IUserManager */
38
+    protected $userManager;
39
+
40
+    /** @var string[]  */
41
+    protected $userDisplayNames = [];
42
+
43
+    /** @var IGroupManager */
44
+    protected $groupManager;
45
+
46
+    /** @var string[] */
47
+    protected $groupDisplayNames = [];
48
+
49
+    /**
50
+     * @param IUserManager $userManager
51
+     * @param IGroupManager $groupManager
52
+     */
53
+    public function __construct(IUserManager $userManager, IGroupManager $groupManager) {
54
+        $this->userManager = $userManager;
55
+        $this->groupManager = $groupManager;
56
+    }
57
+
58
+    /**
59
+     * @param IEvent $event
60
+     * @param string $subject
61
+     * @param array $parameters
62
+     */
63
+    protected function setSubjects(IEvent $event, $subject, array $parameters) {
64
+        $placeholders = $replacements = [];
65
+        foreach ($parameters as $placeholder => $parameter) {
66
+            $placeholders[] = '{' . $placeholder . '}';
67
+            $replacements[] = $parameter['name'];
68
+        }
69
+
70
+        $event->setParsedSubject(str_replace($placeholders, $replacements, $subject))
71
+            ->setRichSubject($subject, $parameters);
72
+    }
73
+
74
+    /**
75
+     * @param array $eventData
76
+     * @return array
77
+     */
78
+    protected function generateObjectParameter($eventData) {
79
+        if (!is_array($eventData) || !isset($eventData['id']) || !isset($eventData['name'])) {
80
+            throw new \InvalidArgumentException();
81
+        }
82
+
83
+        return [
84
+            'type' => 'calendar-event',
85
+            'id' => $eventData['id'],
86
+            'name' => $eventData['name'],
87
+        ];
88
+    }
89
+
90
+    /**
91
+     * @param array $data
92
+     * @param IL10N $l
93
+     * @return array
94
+     */
95
+    protected function generateCalendarParameter($data, IL10N $l) {
96
+        if ($data['uri'] === CalDavBackend::PERSONAL_CALENDAR_URI &&
97
+            $data['name'] === CalDavBackend::PERSONAL_CALENDAR_NAME) {
98
+            return [
99
+                'type' => 'calendar',
100
+                'id' => $data['id'],
101
+                'name' => $l->t('Personal'),
102
+            ];
103
+        }
104
+
105
+        return [
106
+            'type' => 'calendar',
107
+            'id' => $data['id'],
108
+            'name' => $data['name'],
109
+        ];
110
+    }
111
+
112
+    /**
113
+     * @param int $id
114
+     * @param string $name
115
+     * @return array
116
+     */
117
+    protected function generateLegacyCalendarParameter($id, $name) {
118
+        return [
119
+            'type' => 'calendar',
120
+            'id' => $id,
121
+            'name' => $name,
122
+        ];
123
+    }
124
+
125
+    /**
126
+     * @param string $uid
127
+     * @return array
128
+     */
129
+    protected function generateUserParameter($uid) {
130
+        if (!isset($this->userDisplayNames[$uid])) {
131
+            $this->userDisplayNames[$uid] = $this->getUserDisplayName($uid);
132
+        }
133
+
134
+        return [
135
+            'type' => 'user',
136
+            'id' => $uid,
137
+            'name' => $this->userDisplayNames[$uid],
138
+        ];
139
+    }
140
+
141
+    /**
142
+     * @param string $uid
143
+     * @return string
144
+     */
145
+    protected function getUserDisplayName($uid) {
146
+        $user = $this->userManager->get($uid);
147
+        if ($user instanceof IUser) {
148
+            return $user->getDisplayName();
149
+        }
150
+        return $uid;
151
+    }
152
+
153
+    /**
154
+     * @param string $gid
155
+     * @return array
156
+     */
157
+    protected function generateGroupParameter($gid) {
158
+        if (!isset($this->groupDisplayNames[$gid])) {
159
+            $this->groupDisplayNames[$gid] = $this->getGroupDisplayName($gid);
160
+        }
161
+
162
+        return [
163
+            'type' => 'group',
164
+            'id' => $gid,
165
+            'name' => $this->groupDisplayNames[$gid],
166
+        ];
167
+    }
168
+
169
+    /**
170
+     * @param string $gid
171
+     * @return string
172
+     */
173
+    protected function getGroupDisplayName($gid) {
174
+        $group = $this->groupManager->get($gid);
175
+        if ($group instanceof IGroup) {
176
+            return $group->getDisplayName();
177
+        }
178
+        return $gid;
179
+    }
180 180
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Filter/Calendar.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -28,65 +28,65 @@
 block discarded – undo
28 28
 
29 29
 class Calendar implements IFilter {
30 30
 
31
-	/** @var IL10N */
32
-	protected $l;
31
+    /** @var IL10N */
32
+    protected $l;
33 33
 
34
-	/** @var IURLGenerator */
35
-	protected $url;
34
+    /** @var IURLGenerator */
35
+    protected $url;
36 36
 
37
-	public function __construct(IL10N $l, IURLGenerator $url) {
38
-		$this->l = $l;
39
-		$this->url = $url;
40
-	}
37
+    public function __construct(IL10N $l, IURLGenerator $url) {
38
+        $this->l = $l;
39
+        $this->url = $url;
40
+    }
41 41
 
42
-	/**
43
-	 * @return string Lowercase a-z and underscore only identifier
44
-	 * @since 11.0.0
45
-	 */
46
-	public function getIdentifier() {
47
-		return 'calendar';
48
-	}
42
+    /**
43
+     * @return string Lowercase a-z and underscore only identifier
44
+     * @since 11.0.0
45
+     */
46
+    public function getIdentifier() {
47
+        return 'calendar';
48
+    }
49 49
 
50
-	/**
51
-	 * @return string A translated string
52
-	 * @since 11.0.0
53
-	 */
54
-	public function getName() {
55
-		return $this->l->t('Calendar');
56
-	}
50
+    /**
51
+     * @return string A translated string
52
+     * @since 11.0.0
53
+     */
54
+    public function getName() {
55
+        return $this->l->t('Calendar');
56
+    }
57 57
 
58
-	/**
59
-	 * @return int whether the filter should be rather on the top or bottom of
60
-	 * the admin section. The filters are arranged in ascending order of the
61
-	 * priority values. It is required to return a value between 0 and 100.
62
-	 * @since 11.0.0
63
-	 */
64
-	public function getPriority() {
65
-		return 40;
66
-	}
58
+    /**
59
+     * @return int whether the filter should be rather on the top or bottom of
60
+     * the admin section. The filters are arranged in ascending order of the
61
+     * priority values. It is required to return a value between 0 and 100.
62
+     * @since 11.0.0
63
+     */
64
+    public function getPriority() {
65
+        return 40;
66
+    }
67 67
 
68
-	/**
69
-	 * @return string Full URL to an icon, empty string when none is given
70
-	 * @since 11.0.0
71
-	 */
72
-	public function getIcon() {
73
-		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg'));
74
-	}
68
+    /**
69
+     * @return string Full URL to an icon, empty string when none is given
70
+     * @since 11.0.0
71
+     */
72
+    public function getIcon() {
73
+        return $this->url->getAbsoluteURL($this->url->imagePath('core', 'places/calendar-dark.svg'));
74
+    }
75 75
 
76
-	/**
77
-	 * @param string[] $types
78
-	 * @return string[] An array of allowed apps from which activities should be displayed
79
-	 * @since 11.0.0
80
-	 */
81
-	public function filterTypes(array $types) {
82
-		return array_intersect(['calendar', 'calendar_event'], $types);
83
-	}
76
+    /**
77
+     * @param string[] $types
78
+     * @return string[] An array of allowed apps from which activities should be displayed
79
+     * @since 11.0.0
80
+     */
81
+    public function filterTypes(array $types) {
82
+        return array_intersect(['calendar', 'calendar_event'], $types);
83
+    }
84 84
 
85
-	/**
86
-	 * @return string[] An array of allowed apps from which activities should be displayed
87
-	 * @since 11.0.0
88
-	 */
89
-	public function allowedApps() {
90
-		return [];
91
-	}
85
+    /**
86
+     * @return string[] An array of allowed apps from which activities should be displayed
87
+     * @since 11.0.0
88
+     */
89
+    public function allowedApps() {
90
+        return [];
91
+    }
92 92
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Filter/Todo.php 1 patch
Indentation   +53 added lines, -53 removed lines patch added patch discarded remove patch
@@ -28,65 +28,65 @@
 block discarded – undo
28 28
 
29 29
 class Todo implements IFilter {
30 30
 
31
-	/** @var IL10N */
32
-	protected $l;
31
+    /** @var IL10N */
32
+    protected $l;
33 33
 
34
-	/** @var IURLGenerator */
35
-	protected $url;
34
+    /** @var IURLGenerator */
35
+    protected $url;
36 36
 
37
-	public function __construct(IL10N $l, IURLGenerator $url) {
38
-		$this->l = $l;
39
-		$this->url = $url;
40
-	}
37
+    public function __construct(IL10N $l, IURLGenerator $url) {
38
+        $this->l = $l;
39
+        $this->url = $url;
40
+    }
41 41
 
42
-	/**
43
-	 * @return string Lowercase a-z and underscore only identifier
44
-	 * @since 11.0.0
45
-	 */
46
-	public function getIdentifier() {
47
-		return 'calendar_todo';
48
-	}
42
+    /**
43
+     * @return string Lowercase a-z and underscore only identifier
44
+     * @since 11.0.0
45
+     */
46
+    public function getIdentifier() {
47
+        return 'calendar_todo';
48
+    }
49 49
 
50
-	/**
51
-	 * @return string A translated string
52
-	 * @since 11.0.0
53
-	 */
54
-	public function getName() {
55
-		return $this->l->t('Todos');
56
-	}
50
+    /**
51
+     * @return string A translated string
52
+     * @since 11.0.0
53
+     */
54
+    public function getName() {
55
+        return $this->l->t('Todos');
56
+    }
57 57
 
58
-	/**
59
-	 * @return int whether the filter should be rather on the top or bottom of
60
-	 * the admin section. The filters are arranged in ascending order of the
61
-	 * priority values. It is required to return a value between 0 and 100.
62
-	 * @since 11.0.0
63
-	 */
64
-	public function getPriority() {
65
-		return 40;
66
-	}
58
+    /**
59
+     * @return int whether the filter should be rather on the top or bottom of
60
+     * the admin section. The filters are arranged in ascending order of the
61
+     * priority values. It is required to return a value between 0 and 100.
62
+     * @since 11.0.0
63
+     */
64
+    public function getPriority() {
65
+        return 40;
66
+    }
67 67
 
68
-	/**
69
-	 * @return string Full URL to an icon, empty string when none is given
70
-	 * @since 11.0.0
71
-	 */
72
-	public function getIcon() {
73
-		return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.svg'));
74
-	}
68
+    /**
69
+     * @return string Full URL to an icon, empty string when none is given
70
+     * @since 11.0.0
71
+     */
72
+    public function getIcon() {
73
+        return $this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/checkmark.svg'));
74
+    }
75 75
 
76
-	/**
77
-	 * @param string[] $types
78
-	 * @return string[] An array of allowed apps from which activities should be displayed
79
-	 * @since 11.0.0
80
-	 */
81
-	public function filterTypes(array $types) {
82
-		return array_intersect(['calendar_todo'], $types);
83
-	}
76
+    /**
77
+     * @param string[] $types
78
+     * @return string[] An array of allowed apps from which activities should be displayed
79
+     * @since 11.0.0
80
+     */
81
+    public function filterTypes(array $types) {
82
+        return array_intersect(['calendar_todo'], $types);
83
+    }
84 84
 
85
-	/**
86
-	 * @return string[] An array of allowed apps from which activities should be displayed
87
-	 * @since 11.0.0
88
-	 */
89
-	public function allowedApps() {
90
-		return [];
91
-	}
85
+    /**
86
+     * @return string[] An array of allowed apps from which activities should be displayed
87
+     * @since 11.0.0
88
+     */
89
+    public function allowedApps() {
90
+        return [];
91
+    }
92 92
 }
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Setting/Calendar.php 1 patch
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -27,72 +27,72 @@
 block discarded – undo
27 27
 
28 28
 class Calendar implements ISetting {
29 29
 
30
-	/** @var IL10N */
31
-	protected $l;
30
+    /** @var IL10N */
31
+    protected $l;
32 32
 
33
-	/**
34
-	 * @param IL10N $l
35
-	 */
36
-	public function __construct(IL10N $l) {
37
-		$this->l = $l;
38
-	}
33
+    /**
34
+     * @param IL10N $l
35
+     */
36
+    public function __construct(IL10N $l) {
37
+        $this->l = $l;
38
+    }
39 39
 
40
-	/**
41
-	 * @return string Lowercase a-z and underscore only identifier
42
-	 * @since 11.0.0
43
-	 */
44
-	public function getIdentifier() {
45
-		return 'calendar';
46
-	}
40
+    /**
41
+     * @return string Lowercase a-z and underscore only identifier
42
+     * @since 11.0.0
43
+     */
44
+    public function getIdentifier() {
45
+        return 'calendar';
46
+    }
47 47
 
48
-	/**
49
-	 * @return string A translated string
50
-	 * @since 11.0.0
51
-	 */
52
-	public function getName() {
53
-		return $this->l->t('A <strong>calendar</strong> was modified');
54
-	}
48
+    /**
49
+     * @return string A translated string
50
+     * @since 11.0.0
51
+     */
52
+    public function getName() {
53
+        return $this->l->t('A <strong>calendar</strong> was modified');
54
+    }
55 55
 
56
-	/**
57
-	 * @return int whether the filter should be rather on the top or bottom of
58
-	 * the admin section. The filters are arranged in ascending order of the
59
-	 * priority values. It is required to return a value between 0 and 100.
60
-	 * @since 11.0.0
61
-	 */
62
-	public function getPriority() {
63
-		return 50;
64
-	}
56
+    /**
57
+     * @return int whether the filter should be rather on the top or bottom of
58
+     * the admin section. The filters are arranged in ascending order of the
59
+     * priority values. It is required to return a value between 0 and 100.
60
+     * @since 11.0.0
61
+     */
62
+    public function getPriority() {
63
+        return 50;
64
+    }
65 65
 
66
-	/**
67
-	 * @return bool True when the option can be changed for the stream
68
-	 * @since 11.0.0
69
-	 */
70
-	public function canChangeStream() {
71
-		return true;
72
-	}
66
+    /**
67
+     * @return bool True when the option can be changed for the stream
68
+     * @since 11.0.0
69
+     */
70
+    public function canChangeStream() {
71
+        return true;
72
+    }
73 73
 
74
-	/**
75
-	 * @return bool True when the option can be changed for the stream
76
-	 * @since 11.0.0
77
-	 */
78
-	public function isDefaultEnabledStream() {
79
-		return true;
80
-	}
74
+    /**
75
+     * @return bool True when the option can be changed for the stream
76
+     * @since 11.0.0
77
+     */
78
+    public function isDefaultEnabledStream() {
79
+        return true;
80
+    }
81 81
 
82
-	/**
83
-	 * @return bool True when the option can be changed for the mail
84
-	 * @since 11.0.0
85
-	 */
86
-	public function canChangeMail() {
87
-		return true;
88
-	}
82
+    /**
83
+     * @return bool True when the option can be changed for the mail
84
+     * @since 11.0.0
85
+     */
86
+    public function canChangeMail() {
87
+        return true;
88
+    }
89 89
 
90
-	/**
91
-	 * @return bool True when the option can be changed for the stream
92
-	 * @since 11.0.0
93
-	 */
94
-	public function isDefaultEnabledMail() {
95
-		return false;
96
-	}
90
+    /**
91
+     * @return bool True when the option can be changed for the stream
92
+     * @since 11.0.0
93
+     */
94
+    public function isDefaultEnabledMail() {
95
+        return false;
96
+    }
97 97
 }
98 98
 
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Setting/Event.php 1 patch
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -27,72 +27,72 @@
 block discarded – undo
27 27
 
28 28
 class Event implements ISetting {
29 29
 
30
-	/** @var IL10N */
31
-	protected $l;
30
+    /** @var IL10N */
31
+    protected $l;
32 32
 
33
-	/**
34
-	 * @param IL10N $l
35
-	 */
36
-	public function __construct(IL10N $l) {
37
-		$this->l = $l;
38
-	}
33
+    /**
34
+     * @param IL10N $l
35
+     */
36
+    public function __construct(IL10N $l) {
37
+        $this->l = $l;
38
+    }
39 39
 
40
-	/**
41
-	 * @return string Lowercase a-z and underscore only identifier
42
-	 * @since 11.0.0
43
-	 */
44
-	public function getIdentifier() {
45
-		return 'calendar_event';
46
-	}
40
+    /**
41
+     * @return string Lowercase a-z and underscore only identifier
42
+     * @since 11.0.0
43
+     */
44
+    public function getIdentifier() {
45
+        return 'calendar_event';
46
+    }
47 47
 
48
-	/**
49
-	 * @return string A translated string
50
-	 * @since 11.0.0
51
-	 */
52
-	public function getName() {
53
-		return $this->l->t('A calendar <strong>event</strong> was modified');
54
-	}
48
+    /**
49
+     * @return string A translated string
50
+     * @since 11.0.0
51
+     */
52
+    public function getName() {
53
+        return $this->l->t('A calendar <strong>event</strong> was modified');
54
+    }
55 55
 
56
-	/**
57
-	 * @return int whether the filter should be rather on the top or bottom of
58
-	 * the admin section. The filters are arranged in ascending order of the
59
-	 * priority values. It is required to return a value between 0 and 100.
60
-	 * @since 11.0.0
61
-	 */
62
-	public function getPriority() {
63
-		return 50;
64
-	}
56
+    /**
57
+     * @return int whether the filter should be rather on the top or bottom of
58
+     * the admin section. The filters are arranged in ascending order of the
59
+     * priority values. It is required to return a value between 0 and 100.
60
+     * @since 11.0.0
61
+     */
62
+    public function getPriority() {
63
+        return 50;
64
+    }
65 65
 
66
-	/**
67
-	 * @return bool True when the option can be changed for the stream
68
-	 * @since 11.0.0
69
-	 */
70
-	public function canChangeStream() {
71
-		return true;
72
-	}
66
+    /**
67
+     * @return bool True when the option can be changed for the stream
68
+     * @since 11.0.0
69
+     */
70
+    public function canChangeStream() {
71
+        return true;
72
+    }
73 73
 
74
-	/**
75
-	 * @return bool True when the option can be changed for the stream
76
-	 * @since 11.0.0
77
-	 */
78
-	public function isDefaultEnabledStream() {
79
-		return true;
80
-	}
74
+    /**
75
+     * @return bool True when the option can be changed for the stream
76
+     * @since 11.0.0
77
+     */
78
+    public function isDefaultEnabledStream() {
79
+        return true;
80
+    }
81 81
 
82
-	/**
83
-	 * @return bool True when the option can be changed for the mail
84
-	 * @since 11.0.0
85
-	 */
86
-	public function canChangeMail() {
87
-		return true;
88
-	}
82
+    /**
83
+     * @return bool True when the option can be changed for the mail
84
+     * @since 11.0.0
85
+     */
86
+    public function canChangeMail() {
87
+        return true;
88
+    }
89 89
 
90
-	/**
91
-	 * @return bool True when the option can be changed for the stream
92
-	 * @since 11.0.0
93
-	 */
94
-	public function isDefaultEnabledMail() {
95
-		return false;
96
-	}
90
+    /**
91
+     * @return bool True when the option can be changed for the stream
92
+     * @since 11.0.0
93
+     */
94
+    public function isDefaultEnabledMail() {
95
+        return false;
96
+    }
97 97
 }
98 98
 
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Activity/Setting/Todo.php 1 patch
Indentation   +59 added lines, -59 removed lines patch added patch discarded remove patch
@@ -27,72 +27,72 @@
 block discarded – undo
27 27
 
28 28
 class Todo implements ISetting {
29 29
 
30
-	/** @var IL10N */
31
-	protected $l;
30
+    /** @var IL10N */
31
+    protected $l;
32 32
 
33
-	/**
34
-	 * @param IL10N $l
35
-	 */
36
-	public function __construct(IL10N $l) {
37
-		$this->l = $l;
38
-	}
33
+    /**
34
+     * @param IL10N $l
35
+     */
36
+    public function __construct(IL10N $l) {
37
+        $this->l = $l;
38
+    }
39 39
 
40
-	/**
41
-	 * @return string Lowercase a-z and underscore only identifier
42
-	 * @since 11.0.0
43
-	 */
44
-	public function getIdentifier() {
45
-		return 'calendar_todo';
46
-	}
40
+    /**
41
+     * @return string Lowercase a-z and underscore only identifier
42
+     * @since 11.0.0
43
+     */
44
+    public function getIdentifier() {
45
+        return 'calendar_todo';
46
+    }
47 47
 
48
-	/**
49
-	 * @return string A translated string
50
-	 * @since 11.0.0
51
-	 */
52
-	public function getName() {
53
-		return $this->l->t('A calendar <strong>todo</strong> was modified');
54
-	}
48
+    /**
49
+     * @return string A translated string
50
+     * @since 11.0.0
51
+     */
52
+    public function getName() {
53
+        return $this->l->t('A calendar <strong>todo</strong> was modified');
54
+    }
55 55
 
56
-	/**
57
-	 * @return int whether the filter should be rather on the top or bottom of
58
-	 * the admin section. The filters are arranged in ascending order of the
59
-	 * priority values. It is required to return a value between 0 and 100.
60
-	 * @since 11.0.0
61
-	 */
62
-	public function getPriority() {
63
-		return 50;
64
-	}
56
+    /**
57
+     * @return int whether the filter should be rather on the top or bottom of
58
+     * the admin section. The filters are arranged in ascending order of the
59
+     * priority values. It is required to return a value between 0 and 100.
60
+     * @since 11.0.0
61
+     */
62
+    public function getPriority() {
63
+        return 50;
64
+    }
65 65
 
66
-	/**
67
-	 * @return bool True when the option can be changed for the stream
68
-	 * @since 11.0.0
69
-	 */
70
-	public function canChangeStream() {
71
-		return true;
72
-	}
66
+    /**
67
+     * @return bool True when the option can be changed for the stream
68
+     * @since 11.0.0
69
+     */
70
+    public function canChangeStream() {
71
+        return true;
72
+    }
73 73
 
74
-	/**
75
-	 * @return bool True when the option can be changed for the stream
76
-	 * @since 11.0.0
77
-	 */
78
-	public function isDefaultEnabledStream() {
79
-		return true;
80
-	}
74
+    /**
75
+     * @return bool True when the option can be changed for the stream
76
+     * @since 11.0.0
77
+     */
78
+    public function isDefaultEnabledStream() {
79
+        return true;
80
+    }
81 81
 
82
-	/**
83
-	 * @return bool True when the option can be changed for the mail
84
-	 * @since 11.0.0
85
-	 */
86
-	public function canChangeMail() {
87
-		return true;
88
-	}
82
+    /**
83
+     * @return bool True when the option can be changed for the mail
84
+     * @since 11.0.0
85
+     */
86
+    public function canChangeMail() {
87
+        return true;
88
+    }
89 89
 
90
-	/**
91
-	 * @return bool True when the option can be changed for the stream
92
-	 * @since 11.0.0
93
-	 */
94
-	public function isDefaultEnabledMail() {
95
-		return false;
96
-	}
90
+    /**
91
+     * @return bool True when the option can be changed for the stream
92
+     * @since 11.0.0
93
+     */
94
+    public function isDefaultEnabledMail() {
95
+        return false;
96
+    }
97 97
 }
98 98
 
Please login to merge, or discard this patch.
apps/dav/lib/CalDAV/Publishing/Xml/Publisher.php 1 patch
Indentation   +50 added lines, -50 removed lines patch added patch discarded remove patch
@@ -26,58 +26,58 @@
 block discarded – undo
26 26
 
27 27
 class Publisher implements XmlSerializable {
28 28
 
29
-	/**
30
-	 * @var string $publishUrl
31
-	 */
32
-	protected $publishUrl;
29
+    /**
30
+     * @var string $publishUrl
31
+     */
32
+    protected $publishUrl;
33 33
 
34
-	/**
35
-	 * @var boolean $isPublished
36
-	 */
37
-	protected $isPublished;
34
+    /**
35
+     * @var boolean $isPublished
36
+     */
37
+    protected $isPublished;
38 38
 
39
-	/**
40
-	 * @param string $publishUrl
41
-	 * @param boolean $isPublished
42
-	 */
43
-	function __construct($publishUrl, $isPublished) {
44
-		$this->publishUrl = $publishUrl;
45
-		$this->isPublished = $isPublished;
46
-	}
39
+    /**
40
+     * @param string $publishUrl
41
+     * @param boolean $isPublished
42
+     */
43
+    function __construct($publishUrl, $isPublished) {
44
+        $this->publishUrl = $publishUrl;
45
+        $this->isPublished = $isPublished;
46
+    }
47 47
 
48
-	/**
49
-	 * @return string
50
-	 */
51
-	function getValue() {
52
-		return $this->publishUrl;
53
-	}
48
+    /**
49
+     * @return string
50
+     */
51
+    function getValue() {
52
+        return $this->publishUrl;
53
+    }
54 54
 
55
-	/**
56
-	 * The xmlSerialize metod is called during xml writing.
57
-	 *
58
-	 * Use the $writer argument to write its own xml serialization.
59
-	 *
60
-	 * An important note: do _not_ create a parent element. Any element
61
-	 * implementing XmlSerializble should only ever write what's considered
62
-	 * its 'inner xml'.
63
-	 *
64
-	 * The parent of the current element is responsible for writing a
65
-	 * containing element.
66
-	 *
67
-	 * This allows serializers to be re-used for different element names.
68
-	 *
69
-	 * If you are opening new elements, you must also close them again.
70
-	 *
71
-	 * @param Writer $writer
72
-	 * @return void
73
-	 */
74
-	function xmlSerialize(Writer $writer) {
75
-		if (!$this->isPublished) {
76
-			// for pre-publish-url
77
-			$writer->write($this->publishUrl);
78
-		} else {
79
-			// for publish-url
80
-			$writer->writeElement('{DAV:}href', $this->publishUrl);
81
-		}
82
-	}
55
+    /**
56
+     * The xmlSerialize metod is called during xml writing.
57
+     *
58
+     * Use the $writer argument to write its own xml serialization.
59
+     *
60
+     * An important note: do _not_ create a parent element. Any element
61
+     * implementing XmlSerializble should only ever write what's considered
62
+     * its 'inner xml'.
63
+     *
64
+     * The parent of the current element is responsible for writing a
65
+     * containing element.
66
+     *
67
+     * This allows serializers to be re-used for different element names.
68
+     *
69
+     * If you are opening new elements, you must also close them again.
70
+     *
71
+     * @param Writer $writer
72
+     * @return void
73
+     */
74
+    function xmlSerialize(Writer $writer) {
75
+        if (!$this->isPublished) {
76
+            // for pre-publish-url
77
+            $writer->write($this->publishUrl);
78
+        } else {
79
+            // for publish-url
80
+            $writer->writeElement('{DAV:}href', $this->publishUrl);
81
+        }
82
+    }
83 83
 }
Please login to merge, or discard this patch.
apps/dav/lib/CardDAV/AddressBookImpl.php 2 patches
Indentation   +251 added lines, -251 removed lines patch added patch discarded remove patch
@@ -34,255 +34,255 @@
 block discarded – undo
34 34
 
35 35
 class AddressBookImpl implements IAddressBook {
36 36
 
37
-	/** @var CardDavBackend */
38
-	private $backend;
39
-
40
-	/** @var array */
41
-	private $addressBookInfo;
42
-
43
-	/** @var AddressBook */
44
-	private $addressBook;
45
-
46
-	/** @var IURLGenerator */
47
-	private $urlGenerator;
48
-
49
-	/**
50
-	 * AddressBookImpl constructor.
51
-	 *
52
-	 * @param AddressBook $addressBook
53
-	 * @param array $addressBookInfo
54
-	 * @param CardDavBackend $backend
55
-	 * @param IUrlGenerator $urlGenerator
56
-	 */
57
-	public function __construct(
58
-			AddressBook $addressBook,
59
-			array $addressBookInfo,
60
-			CardDavBackend $backend,
61
-			IURLGenerator $urlGenerator) {
62
-
63
-		$this->addressBook = $addressBook;
64
-		$this->addressBookInfo = $addressBookInfo;
65
-		$this->backend = $backend;
66
-		$this->urlGenerator = $urlGenerator;
67
-	}
68
-
69
-	/**
70
-	 * @return string defining the technical unique key
71
-	 * @since 5.0.0
72
-	 */
73
-	public function getKey() {
74
-		return $this->addressBookInfo['id'];
75
-	}
76
-
77
-	/**
78
-	 * In comparison to getKey() this function returns a human readable (maybe translated) name
79
-	 *
80
-	 * @return mixed
81
-	 * @since 5.0.0
82
-	 */
83
-	public function getDisplayName() {
84
-		return $this->addressBookInfo['{DAV:}displayname'];
85
-	}
86
-
87
-	/**
88
-	 * @param string $pattern which should match within the $searchProperties
89
-	 * @param array $searchProperties defines the properties within the query pattern should match
90
-	 * @param array $options - for future use. One should always have options!
91
-	 * @return array an array of contacts which are arrays of key-value-pairs
92
-	 * @since 5.0.0
93
-	 */
94
-	public function search($pattern, $searchProperties, $options) {
95
-		$results = $this->backend->search($this->getKey(), $pattern, $searchProperties);
96
-
97
-		$vCards = [];
98
-		foreach ($results as $result) {
99
-			$vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata']));
100
-		}
101
-
102
-		return $vCards;
103
-	}
104
-
105
-	/**
106
-	 * @param array $properties this array if key-value-pairs defines a contact
107
-	 * @return array an array representing the contact just created or updated
108
-	 * @since 5.0.0
109
-	 */
110
-	public function createOrUpdate($properties) {
111
-		$update = false;
112
-		if (!isset($properties['URI'])) { // create a new contact
113
-			$uid = $this->createUid();
114
-			$uri = $uid . '.vcf';
115
-			$vCard = $this->createEmptyVCard($uid);
116
-		} else { // update existing contact
117
-			$uri = $properties['URI'];
118
-			$vCardData = $this->backend->getCard($this->getKey(), $uri);
119
-			$vCard = $this->readCard($vCardData['carddata']);
120
-			$update = true;
121
-		}
122
-
123
-		foreach ($properties as $key => $value) {
124
-			$vCard->$key = $vCard->createProperty($key, $value);
125
-		}
126
-
127
-		if ($update) {
128
-			$this->backend->updateCard($this->getKey(), $uri, $vCard->serialize());
129
-		} else {
130
-			$this->backend->createCard($this->getKey(), $uri, $vCard->serialize());
131
-		}
132
-
133
-		return $this->vCard2Array($uri, $vCard);
134
-
135
-	}
136
-
137
-	/**
138
-	 * @return mixed
139
-	 * @since 5.0.0
140
-	 */
141
-	public function getPermissions() {
142
-		$permissions = $this->addressBook->getACL();
143
-		$result = 0;
144
-		foreach ($permissions as $permission) {
145
-			switch($permission['privilege']) {
146
-				case '{DAV:}read':
147
-					$result |= Constants::PERMISSION_READ;
148
-					break;
149
-				case '{DAV:}write':
150
-					$result |= Constants::PERMISSION_CREATE;
151
-					$result |= Constants::PERMISSION_UPDATE;
152
-					break;
153
-				case '{DAV:}all':
154
-					$result |= Constants::PERMISSION_ALL;
155
-					break;
156
-			}
157
-		}
158
-
159
-		return $result;
160
-	}
161
-
162
-	/**
163
-	 * @param object $id the unique identifier to a contact
164
-	 * @return bool successful or not
165
-	 * @since 5.0.0
166
-	 */
167
-	public function delete($id) {
168
-		$uri = $this->backend->getCardUri($id);
169
-		return $this->backend->deleteCard($this->addressBookInfo['id'], $uri);
170
-	}
171
-
172
-	/**
173
-	 * read vCard data into a vCard object
174
-	 *
175
-	 * @param string $cardData
176
-	 * @return VCard
177
-	 */
178
-	protected function readCard($cardData) {
179
-		return  Reader::read($cardData);
180
-	}
181
-
182
-	/**
183
-	 * create UID for contact
184
-	 *
185
-	 * @return string
186
-	 */
187
-	protected function createUid() {
188
-		do {
189
-			$uid = $this->getUid();
190
-			$contact = $this->backend->getContact($this->getKey(), $uid . '.vcf');
191
-		} while (!empty($contact));
192
-
193
-		return $uid;
194
-	}
195
-
196
-	/**
197
-	 * getUid is only there for testing, use createUid instead
198
-	 */
199
-	protected function getUid() {
200
-		return UUIDUtil::getUUID();
201
-	}
202
-
203
-	/**
204
-	 * create empty vcard
205
-	 *
206
-	 * @param string $uid
207
-	 * @return VCard
208
-	 */
209
-	protected function createEmptyVCard($uid) {
210
-		$vCard = new VCard();
211
-		$vCard->UID = $uid;
212
-		return $vCard;
213
-	}
214
-
215
-	/**
216
-	 * create array with all vCard properties
217
-	 *
218
-	 * @param string $uri
219
-	 * @param VCard $vCard
220
-	 * @return array
221
-	 */
222
-	protected function vCard2Array($uri, VCard $vCard) {
223
-		$result = [
224
-			'URI' => $uri,
225
-		];
226
-
227
-		foreach ($vCard->children() as $property) {
228
-			if ($property->name === 'PHOTO' && $property->getValueType() === 'BINARY') {
229
-				$url = $this->urlGenerator->getAbsoluteURL(
230
-					$this->urlGenerator->linkTo('', 'remote.php') . '/dav/');
231
-				$url .= implode('/', [
232
-					'addressbooks',
233
-					substr($this->addressBookInfo['principaluri'], 11), //cut off 'principals/'
234
-					$this->addressBookInfo['uri'],
235
-					$uri
236
-				]) . '?photo';
237
-
238
-				$result['PHOTO'] = 'VALUE=uri:' . $url;
239
-
240
-			} else if ($property->name === 'X-SOCIALPROFILE') {
241
-				$type = $this->getTypeFromProperty($property);
242
-
243
-				// Type is the social network, when it's empty we don't need this.
244
-				if ($type !== null) {
245
-					if (!isset($result[$property->name])) {
246
-						$result[$property->name] = [];
247
-					}
248
-					$result[$property->name][$type] = $property->getValue();
249
-				}
250
-
251
-			// The following properties can be set multiple times
252
-			} else if (in_array($property->name, ['CLOUD', 'EMAIL', 'IMPP', 'TEL', 'URL'])) {
253
-				if (!isset($result[$property->name])) {
254
-					$result[$property->name] = [];
255
-				}
256
-
257
-				$result[$property->name][] = $property->getValue();
258
-
259
-			} else {
260
-				$result[$property->name] = $property->getValue();
261
-			}
262
-		}
263
-
264
-		if ($this->addressBookInfo['principaluri'] === 'principals/system/system' &&
265
-			$this->addressBookInfo['uri'] === 'system') {
266
-			$result['isLocalSystemBook'] = true;
267
-		}
268
-		return $result;
269
-	}
270
-
271
-	/**
272
-	 * Get the type of the current property
273
-	 *
274
-	 * @param Property $property
275
-	 * @return null|string
276
-	 */
277
-	protected function getTypeFromProperty(Property $property) {
278
-		$parameters = $property->parameters();
279
-		// Type is the social network, when it's empty we don't need this.
280
-		if (isset($parameters['TYPE'])) {
281
-			/** @var \Sabre\VObject\Parameter $type */
282
-			$type = $parameters['TYPE'];
283
-			return $type->getValue();
284
-		}
285
-
286
-		return null;
287
-	}
37
+    /** @var CardDavBackend */
38
+    private $backend;
39
+
40
+    /** @var array */
41
+    private $addressBookInfo;
42
+
43
+    /** @var AddressBook */
44
+    private $addressBook;
45
+
46
+    /** @var IURLGenerator */
47
+    private $urlGenerator;
48
+
49
+    /**
50
+     * AddressBookImpl constructor.
51
+     *
52
+     * @param AddressBook $addressBook
53
+     * @param array $addressBookInfo
54
+     * @param CardDavBackend $backend
55
+     * @param IUrlGenerator $urlGenerator
56
+     */
57
+    public function __construct(
58
+            AddressBook $addressBook,
59
+            array $addressBookInfo,
60
+            CardDavBackend $backend,
61
+            IURLGenerator $urlGenerator) {
62
+
63
+        $this->addressBook = $addressBook;
64
+        $this->addressBookInfo = $addressBookInfo;
65
+        $this->backend = $backend;
66
+        $this->urlGenerator = $urlGenerator;
67
+    }
68
+
69
+    /**
70
+     * @return string defining the technical unique key
71
+     * @since 5.0.0
72
+     */
73
+    public function getKey() {
74
+        return $this->addressBookInfo['id'];
75
+    }
76
+
77
+    /**
78
+     * In comparison to getKey() this function returns a human readable (maybe translated) name
79
+     *
80
+     * @return mixed
81
+     * @since 5.0.0
82
+     */
83
+    public function getDisplayName() {
84
+        return $this->addressBookInfo['{DAV:}displayname'];
85
+    }
86
+
87
+    /**
88
+     * @param string $pattern which should match within the $searchProperties
89
+     * @param array $searchProperties defines the properties within the query pattern should match
90
+     * @param array $options - for future use. One should always have options!
91
+     * @return array an array of contacts which are arrays of key-value-pairs
92
+     * @since 5.0.0
93
+     */
94
+    public function search($pattern, $searchProperties, $options) {
95
+        $results = $this->backend->search($this->getKey(), $pattern, $searchProperties);
96
+
97
+        $vCards = [];
98
+        foreach ($results as $result) {
99
+            $vCards[] = $this->vCard2Array($result['uri'], $this->readCard($result['carddata']));
100
+        }
101
+
102
+        return $vCards;
103
+    }
104
+
105
+    /**
106
+     * @param array $properties this array if key-value-pairs defines a contact
107
+     * @return array an array representing the contact just created or updated
108
+     * @since 5.0.0
109
+     */
110
+    public function createOrUpdate($properties) {
111
+        $update = false;
112
+        if (!isset($properties['URI'])) { // create a new contact
113
+            $uid = $this->createUid();
114
+            $uri = $uid . '.vcf';
115
+            $vCard = $this->createEmptyVCard($uid);
116
+        } else { // update existing contact
117
+            $uri = $properties['URI'];
118
+            $vCardData = $this->backend->getCard($this->getKey(), $uri);
119
+            $vCard = $this->readCard($vCardData['carddata']);
120
+            $update = true;
121
+        }
122
+
123
+        foreach ($properties as $key => $value) {
124
+            $vCard->$key = $vCard->createProperty($key, $value);
125
+        }
126
+
127
+        if ($update) {
128
+            $this->backend->updateCard($this->getKey(), $uri, $vCard->serialize());
129
+        } else {
130
+            $this->backend->createCard($this->getKey(), $uri, $vCard->serialize());
131
+        }
132
+
133
+        return $this->vCard2Array($uri, $vCard);
134
+
135
+    }
136
+
137
+    /**
138
+     * @return mixed
139
+     * @since 5.0.0
140
+     */
141
+    public function getPermissions() {
142
+        $permissions = $this->addressBook->getACL();
143
+        $result = 0;
144
+        foreach ($permissions as $permission) {
145
+            switch($permission['privilege']) {
146
+                case '{DAV:}read':
147
+                    $result |= Constants::PERMISSION_READ;
148
+                    break;
149
+                case '{DAV:}write':
150
+                    $result |= Constants::PERMISSION_CREATE;
151
+                    $result |= Constants::PERMISSION_UPDATE;
152
+                    break;
153
+                case '{DAV:}all':
154
+                    $result |= Constants::PERMISSION_ALL;
155
+                    break;
156
+            }
157
+        }
158
+
159
+        return $result;
160
+    }
161
+
162
+    /**
163
+     * @param object $id the unique identifier to a contact
164
+     * @return bool successful or not
165
+     * @since 5.0.0
166
+     */
167
+    public function delete($id) {
168
+        $uri = $this->backend->getCardUri($id);
169
+        return $this->backend->deleteCard($this->addressBookInfo['id'], $uri);
170
+    }
171
+
172
+    /**
173
+     * read vCard data into a vCard object
174
+     *
175
+     * @param string $cardData
176
+     * @return VCard
177
+     */
178
+    protected function readCard($cardData) {
179
+        return  Reader::read($cardData);
180
+    }
181
+
182
+    /**
183
+     * create UID for contact
184
+     *
185
+     * @return string
186
+     */
187
+    protected function createUid() {
188
+        do {
189
+            $uid = $this->getUid();
190
+            $contact = $this->backend->getContact($this->getKey(), $uid . '.vcf');
191
+        } while (!empty($contact));
192
+
193
+        return $uid;
194
+    }
195
+
196
+    /**
197
+     * getUid is only there for testing, use createUid instead
198
+     */
199
+    protected function getUid() {
200
+        return UUIDUtil::getUUID();
201
+    }
202
+
203
+    /**
204
+     * create empty vcard
205
+     *
206
+     * @param string $uid
207
+     * @return VCard
208
+     */
209
+    protected function createEmptyVCard($uid) {
210
+        $vCard = new VCard();
211
+        $vCard->UID = $uid;
212
+        return $vCard;
213
+    }
214
+
215
+    /**
216
+     * create array with all vCard properties
217
+     *
218
+     * @param string $uri
219
+     * @param VCard $vCard
220
+     * @return array
221
+     */
222
+    protected function vCard2Array($uri, VCard $vCard) {
223
+        $result = [
224
+            'URI' => $uri,
225
+        ];
226
+
227
+        foreach ($vCard->children() as $property) {
228
+            if ($property->name === 'PHOTO' && $property->getValueType() === 'BINARY') {
229
+                $url = $this->urlGenerator->getAbsoluteURL(
230
+                    $this->urlGenerator->linkTo('', 'remote.php') . '/dav/');
231
+                $url .= implode('/', [
232
+                    'addressbooks',
233
+                    substr($this->addressBookInfo['principaluri'], 11), //cut off 'principals/'
234
+                    $this->addressBookInfo['uri'],
235
+                    $uri
236
+                ]) . '?photo';
237
+
238
+                $result['PHOTO'] = 'VALUE=uri:' . $url;
239
+
240
+            } else if ($property->name === 'X-SOCIALPROFILE') {
241
+                $type = $this->getTypeFromProperty($property);
242
+
243
+                // Type is the social network, when it's empty we don't need this.
244
+                if ($type !== null) {
245
+                    if (!isset($result[$property->name])) {
246
+                        $result[$property->name] = [];
247
+                    }
248
+                    $result[$property->name][$type] = $property->getValue();
249
+                }
250
+
251
+            // The following properties can be set multiple times
252
+            } else if (in_array($property->name, ['CLOUD', 'EMAIL', 'IMPP', 'TEL', 'URL'])) {
253
+                if (!isset($result[$property->name])) {
254
+                    $result[$property->name] = [];
255
+                }
256
+
257
+                $result[$property->name][] = $property->getValue();
258
+
259
+            } else {
260
+                $result[$property->name] = $property->getValue();
261
+            }
262
+        }
263
+
264
+        if ($this->addressBookInfo['principaluri'] === 'principals/system/system' &&
265
+            $this->addressBookInfo['uri'] === 'system') {
266
+            $result['isLocalSystemBook'] = true;
267
+        }
268
+        return $result;
269
+    }
270
+
271
+    /**
272
+     * Get the type of the current property
273
+     *
274
+     * @param Property $property
275
+     * @return null|string
276
+     */
277
+    protected function getTypeFromProperty(Property $property) {
278
+        $parameters = $property->parameters();
279
+        // Type is the social network, when it's empty we don't need this.
280
+        if (isset($parameters['TYPE'])) {
281
+            /** @var \Sabre\VObject\Parameter $type */
282
+            $type = $parameters['TYPE'];
283
+            return $type->getValue();
284
+        }
285
+
286
+        return null;
287
+    }
288 288
 }
Please login to merge, or discard this patch.
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -111,7 +111,7 @@  discard block
 block discarded – undo
111 111
 		$update = false;
112 112
 		if (!isset($properties['URI'])) { // create a new contact
113 113
 			$uid = $this->createUid();
114
-			$uri = $uid . '.vcf';
114
+			$uri = $uid.'.vcf';
115 115
 			$vCard = $this->createEmptyVCard($uid);
116 116
 		} else { // update existing contact
117 117
 			$uri = $properties['URI'];
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 		$permissions = $this->addressBook->getACL();
143 143
 		$result = 0;
144 144
 		foreach ($permissions as $permission) {
145
-			switch($permission['privilege']) {
145
+			switch ($permission['privilege']) {
146 146
 				case '{DAV:}read':
147 147
 					$result |= Constants::PERMISSION_READ;
148 148
 					break;
@@ -187,7 +187,7 @@  discard block
 block discarded – undo
187 187
 	protected function createUid() {
188 188
 		do {
189 189
 			$uid = $this->getUid();
190
-			$contact = $this->backend->getContact($this->getKey(), $uid . '.vcf');
190
+			$contact = $this->backend->getContact($this->getKey(), $uid.'.vcf');
191 191
 		} while (!empty($contact));
192 192
 
193 193
 		return $uid;
@@ -227,15 +227,15 @@  discard block
 block discarded – undo
227 227
 		foreach ($vCard->children() as $property) {
228 228
 			if ($property->name === 'PHOTO' && $property->getValueType() === 'BINARY') {
229 229
 				$url = $this->urlGenerator->getAbsoluteURL(
230
-					$this->urlGenerator->linkTo('', 'remote.php') . '/dav/');
230
+					$this->urlGenerator->linkTo('', 'remote.php').'/dav/');
231 231
 				$url .= implode('/', [
232 232
 					'addressbooks',
233 233
 					substr($this->addressBookInfo['principaluri'], 11), //cut off 'principals/'
234 234
 					$this->addressBookInfo['uri'],
235 235
 					$uri
236
-				]) . '?photo';
236
+				]).'?photo';
237 237
 
238
-				$result['PHOTO'] = 'VALUE=uri:' . $url;
238
+				$result['PHOTO'] = 'VALUE=uri:'.$url;
239 239
 
240 240
 			} else if ($property->name === 'X-SOCIALPROFILE') {
241 241
 				$type = $this->getTypeFromProperty($property);
Please login to merge, or discard this patch.