Completed
Push — master ( 9b214e...1b93f9 )
by Blizzz
02:30
created

Bookmarks::addBookmark()   B

Complexity

Conditions 7
Paths 14

Size

Total Lines 56
Code Lines 41

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 22
CRAP Score 11.4651

Importance

Changes 4
Bugs 2 Features 0
Metric Value
cc 7
eloc 41
c 4
b 2
f 0
nc 14
nop 7
dl 0
loc 56
ccs 22
cts 40
cp 0.55
crap 11.4651
rs 7.7489

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/**
4
 * ownCloud - bookmarks plugin
5
 *
6
 * @author Arthur Schiwon
7
 * @copyright 2011 Arthur Schiwon [email protected]
8
 *
9
 * This library is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
11
 * License as published by the Free Software Foundation; either
12
 * version 3 of the License, or any later version.
13
 *
14
 * This library is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
18
 *
19
 * You should have received a copy of the GNU Affero General Public
20
 * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
21
 *
22
 */
23
/**
24
 * This class manages bookmarks
25
 */
26
27
namespace OCA\Bookmarks\Controller\Lib;
28
29
use \OCP\IDb;
30
31
class Bookmarks {
32
33
	/**
34
	 * @brief Finds all tags for bookmarks
35
	 * @param string $userId UserId
36
	 * @param IDb $db Database Interface
37
	 * @param filterTags array of tag to look for if empty then every tag
38
	 * @param offset integer offset
39
	 * @param limit integer of item to return
40
	 * @return Found Tags
41
	 */
42 1
	public static function findTags($userId, IDb $db, $filterTags = array(), $offset = 0, $limit = -1) {
43 1
		$params = array_merge($filterTags, $filterTags);
44 1
		array_unshift($params, $userId);
45 1
		$not_in = '';
46 1
		if (!empty($filterTags)) {
47
			$exist_clause = " AND	exists (select 1 from `*PREFIX*bookmarks_tags`
48
				`t2` where `t2`.`bookmark_id` = `t`.`bookmark_id` and `tag` = ?) ";
49
50
			$not_in = ' AND `tag` not in (' . implode(',', array_fill(0, count($filterTags), '?')) . ')' .
51
					str_repeat($exist_clause, count($filterTags));
52
		}
53
		$sql = 'SELECT tag, count(*) as nbr from *PREFIX*bookmarks_tags t ' .
54
				' WHERE EXISTS( SELECT 1 from *PREFIX*bookmarks bm where  t.bookmark_id  = bm.id and user_id = ?) ' .
55 1
				$not_in .
56 1
				' GROUP BY `tag` ORDER BY `nbr` DESC ';
57
58 1
		$query = $db->prepareQuery($sql, $limit, $offset);
59 1
		$tags = $query->execute($params)->fetchAll();
60 1
		return $tags;
61
	}
62
63
	/**
64
	 * @brief Finds Bookmark with certain ID
65
	 * @param int $id BookmarkId
66
	 * @param string $userId UserId
67
	 * @param IDb $db Database Interface
68
	 * @return array Specific Bookmark
69
	 */
70 2
	public static function findUniqueBookmark($id, $userId, IDb $db) {
71 2
		$CONFIG_DBTYPE = \OCP\Config::getSystemValue('dbtype', 'sqlite');
72 2
		if ($CONFIG_DBTYPE == 'pgsql') {
73
			$group_fct = 'array_agg(`tag`)';
74
		} else {
75 2
			$group_fct = 'GROUP_CONCAT(`tag`)';
76
		}
77 2
		$sql = "SELECT *, (select $group_fct from `*PREFIX*bookmarks_tags` where `bookmark_id` = `b`.`id`) as `tags`
78
				FROM `*PREFIX*bookmarks` `b`
79 2
				WHERE `user_id` = ? AND `id` = ?";
80 2
		$query = $db->prepareQuery($sql);
81 2
		$result = $query->execute(array($userId, $id))->fetchRow();
82 2
		$result['tags'] = explode(',', $result['tags']);
83 2
		return $result;
84
	}
85
86
	/**
87
	 * @brief Check if an URL is bookmarked
88
	 * @param $url Url of a possible bookmark
89
	 * @param $userId UserId
90
	 * @param IDb $db Database Interface
91
	 * @return boolean if the url is already bookmarked
92
	 */
93 1
	public static function bookmarkExists($url, $userId, IDb $db) {
94 1
		$enc_url = htmlspecialchars_decode($url);
95 1
		$sql = "SELECT id from `*PREFIX*bookmarks` where `url` = ? and `user_id` = ?";
96 1
		$query = $db->prepareQuery($sql);
97 1
		$result = $query->execute(array($enc_url, $userId))->fetchRow();
98 1
		if ($result) {
99 1
			return $result['id'];
100
		} else {
101 1
			return false;
102
		}
103
	}
104
105
	/**
106
	 * @brief Finds all bookmarks, matching the filter
107
	 * @param string $userid UserId
108
	 * @param IDb $db Database Interface
109
	 * @param int $offset offset
110
	 * @param string $sqlSortColumn result with this column
111
	 * @param string|array $filters filters can be: empty -> no filter, a string -> filter this, a string array -> filter for all strings
112
	 * @param bool $filterTagOnly true, filter affects only tags, else filter affects url, title and tags
113
	 * @param int $limit limit of items to return (default 10) if -1 or false then all items are returned
114
	 * @param bool $public check if only public bookmarks should be returned
115
	 * @param array $requestedAttributes select all the attributes that should be returned. default is * + tags
116
	 * @param string $tagFilterConjunction select wether the filterTagOnly should filter with an AND or an OR  conjunction
117
	 * @return Collection of specified bookmarks
118
	 */
119 3
	public static function findBookmarks(
120
	$userid, IDb $db, $offset, $sqlSortColumn, $filters, $filterTagOnly, $limit = 10, $public = false, $requestedAttributes = null, $tagFilterConjunction = "and") {
121
122 3
		$CONFIG_DBTYPE = \OCP\Config::getSystemValue('dbtype', 'sqlite');
123 3
		if (is_string($filters)) {
124
			$filters = array($filters);
125
		}
126
127 3
		$toSelect = '*';
128 3
		$tableAttributes = array('id', 'url', 'title', 'user_id', 'description',
129
			'public', 'added', 'lastmodified', 'clickcount',);
130
131 3
		$returnTags = true;
132
133 3
		if ($requestedAttributes != null) {
134
135 1
			$key = array_search('tags', $requestedAttributes);
136 1
			if ($key == false) {
137 1
				$returnTags = false;
138
			} else {
139
				unset($requestedAttributes[$key]);
140
			}
141
142 1
			$toSelect = implode(",", array_intersect($tableAttributes, $requestedAttributes));
143
		}
144
145 3
		if ($CONFIG_DBTYPE == 'pgsql') {
146
			$sql = "SELECT " . $toSelect . " FROM (SELECT *, (select array_to_string(array_agg(`tag`),',')
147
				from `*PREFIX*bookmarks_tags` where `bookmark_id` = `b2`.`id`) as `tags`
148
				FROM `*PREFIX*bookmarks` `b2`
149
				WHERE `user_id` = ? ) as `b` WHERE true ";
150
		} else {
151 3
			$sql = "SELECT " . $toSelect . ", (SELECT GROUP_CONCAT(`tag`) from `*PREFIX*bookmarks_tags`
152
				WHERE `bookmark_id` = `b`.`id`) as `tags`
153
				FROM `*PREFIX*bookmarks` `b`
154 3
				WHERE `user_id` = ? ";
155
		}
156
157 3
		$params = array($userid);
158
159 3
		if ($public) {
160 1
			$sql .= ' AND public = 1 ';
161
		}
162
163 3
		if (count($filters) > 0) {
164 2
			Bookmarks::findBookmarksBuildFilter($sql, $params, $filters, $filterTagOnly, $tagFilterConjunction, $CONFIG_DBTYPE);
165
		}
166
167 3
		if (!in_array($sqlSortColumn, $tableAttributes)) {
168 1
			$sqlSortColumn = 'lastmodified';
169
		}
170 3
		$sql .= " ORDER BY " . $sqlSortColumn . " DESC ";
171 3
		if ($limit == -1 || $limit === false) {
172 3
			$limit = null;
173 3
			$offset = null;
174
		}
175
176 3
		$query = $db->prepareQuery($sql, $limit, $offset);
177 3
		$results = $query->execute($params)->fetchAll();
178 3
		$bookmarks = array();
179 3
		foreach ($results as $result) {
180 3
			if ($returnTags) {
181 2
				$result['tags'] = explode(',', $result['tags']);
182
			} else {
183 1
				unset($result['tags']);
184
			}
185 3
			$bookmarks[] = $result;
186
		}
187 3
		return $bookmarks;
188
	}
189
190 2
	private static function findBookmarksBuildFilter(&$sql, &$params, $filters, $filterTagOnly, $tagFilterConjunction, $CONFIG_DBTYPE) {
191 2
		$tagOrSearch = false;
192 2
		$connectWord = 'AND';
193
194 2
		if ($tagFilterConjunction == 'or') {
195 1
			$tagOrSearch = true;
196 1
			$connectWord = 'OR';
197
		}
198
199 2
		if ($filterTagOnly) {
200 2
			if ($tagOrSearch) {
201 1
				$sql .= 'AND (';
202
			} else {
203 1
				$sql .= 'AND';
204
			}
205
			$exist_clause = " exists (SELECT `id` FROM  `*PREFIX*bookmarks_tags`
206 2
				`t2` WHERE `t2`.`bookmark_id` = `b`.`id` AND `tag` = ?) ";
207 2
			$sql .= str_repeat($exist_clause . $connectWord, count($filters));
208 2
			if ($tagOrSearch) {
209 1
				$sql = rtrim($sql, 'OR');
210 1
				$sql .= ')';
211
			} else {
212 1
				$sql = rtrim($sql, 'AND');
213
			}
214 2
			$params = array_merge($params, $filters);
215
		} else {
216
			if ($CONFIG_DBTYPE == 'mysql') { //Dirty hack to allow usage of alias in where
217
				$sql .= ' HAVING true ';
218
			}
219
			foreach ($filters as $filter) {
220
				if ($CONFIG_DBTYPE == 'mysql') {
221
					$sql .= ' AND lower( concat(url,title,description,IFNULL(tags,\'\') )) like ? ';
222
				} else {
223
					$sql .= ' AND lower(url || title || description || ifnull(tags,\'\') ) like ? ';
224
				}
225
				$params[] = '%' . strtolower($filter) . '%';
226
			}
227
		}
228 2
	}
229
230
	/**
231
	 * @brief Delete bookmark with specific id
232
	 * @param string $userId UserId
233
	 * @param IDb $db Database Interface
234
	 * @param int $id Bookmark ID to delete
235
	 * @return boolean Success of operation
236
	 */
237 1
	public static function deleteUrl($userId, IDb $db, $id) {
238 1
		$user = $userId;
239
240 1
		$query = $db->prepareQuery("
241
				SELECT `id` FROM `*PREFIX*bookmarks`
242
				WHERE `id` = ?
243
				AND `user_id` = ?
244 1
				");
245
246 1
		$result = $query->execute(array($id, $user));
247 1
		$id = $result->fetchOne();
248 1
		if ($id === false) {
249
			return false;
250
		}
251
252 1
		$query = $db->prepareQuery("
253
			DELETE FROM `*PREFIX*bookmarks`
254
			WHERE `id` = ?
255 1
			");
256
257 1
		$query->execute(array($id));
258
259 1
		$query = $db->prepareQuery("
260
			DELETE FROM `*PREFIX*bookmarks_tags`
261
			WHERE `bookmark_id` = ?
262 1
			");
263
264 1
		$query->execute(array($id));
265 1
		return true;
266
	}
267
268
	/**
269
	 * @brief Rename a tag
270
	 * @param $userId UserId
271
	 * @param IDb $db Database Interface
272
	 * @param string $old Old Tag Name
273
	 * @param string $new New Tag Name
274
	 * @return boolean Success of operation
275
	 */
276
	public static function renameTag($userId, IDb $db, $old, $new) {
277
		$user_id = $userId;
278
		$CONFIG_DBTYPE = \OCP\Config::getSystemValue('dbtype', 'sqlite');
279
280
281
		if ($CONFIG_DBTYPE == 'sqlite' or $CONFIG_DBTYPE == 'sqlite3') {
282
			// Update tags to the new label unless it already exists a tag like this
283
			$query = $db->prepareQuery("
284
				UPDATE OR REPLACE `*PREFIX*bookmarks_tags`
285
				SET `tag` = ?
286
				WHERE `tag` = ?
287
				AND exists( select `b`.`id` from `*PREFIX*bookmarks` `b`
288
				WHERE `b`.`user_id` = ? AND `bookmark_id` = `b`.`id`)
289
			");
290
291
			$params = array(
292
				$new,
293
				$old,
294
				$user_id,
295
			);
296
297
			$query->execute($params);
298
		} else {
299
300
			// Remove potentialy duplicated tags
301
			$query = $db->prepareQuery("
302
			DELETE FROM `*PREFIX*bookmarks_tags` as `tgs` WHERE `tgs`.`tag` = ?
303
			AND exists( SELECT `id` FROM `*PREFIX*bookmarks` WHERE `user_id` = ?
304
			AND `tgs`.`bookmark_id` = `id`)
305
			AND exists( SELECT `t`.`tag` FROM `*PREFIX*bookmarks_tags` `t` where `t`.`tag` = ?
306
			AND `tgs`.`bookmark_id` = `t`.`bookmark_id`)");
307
308
			$params = array(
309
				$new,
310
				$user_id,
311
				$new
312
			);
313
314
			$query->execute($params);
315
316
317
			// Update tags to the new label unless it already exists a tag like this
318
			$query = $db->prepareQuery("
319
			UPDATE `*PREFIX*bookmarks_tags`
320
			SET `tag` = ?
321
			WHERE `tag` = ?
322
			AND exists( SELECT `b`.`id` FROM `*PREFIX*bookmarks` `b`
323
			WHERE `b`.`user_id` = ? AND `bookmark_id` = `b`.`id`)
324
			");
325
326
			$params = array(
327
				$new,
328
				$old,
329
				$user_id
330
			);
331
332
			$query->execute($params);
333
		}
334
335
336
		return true;
337
	}
338
339
	/**
340
	 * @brief Delete a tag
341
	 * @param $userid UserId
342
	 * @param IDb $db Database Interface
343
	 * @param string $old Tag Name to delete
344
	 * @return boolean Success of operation
345
	 */
346
	public static function deleteTag($userid, IDb $db, $old) {
347
348
		// Update the record
349
		$query = $db->prepareQuery("
350
		DELETE FROM `*PREFIX*bookmarks_tags`
351
		WHERE `tag` = ?
352
		AND exists( SELECT `id` FROM `*PREFIX*bookmarks` WHERE `user_id` = ? AND `bookmark_id` = `id`)
353
		");
354
355
		$params = array(
356
			$old,
357
			$userid,
358
		);
359
360
		$result = $query->execute($params);
361
		return $result;
362
	}
363
364
	/**
365
	 * Edit a bookmark
366
	 * @param string $userid UserId
367
	 * @param IDb $db Database Interface
368
	 * @param int $id The id of the bookmark to edit
369
	 * @param string $url The url to set
370
	 * @param string $title Name of the bookmark
371
	 * @param array $tags Simple array of tags to qualify the bookmark (different tags are taken from values)
372
	 * @param string $description A longer description about the bookmark
373
	 * @param boolean $is_public True if the bookmark is publishable to not registered users
374
	 * @return null
375
	 */
376 1
	public static function editBookmark($userid, IDb $db, $id, $url, $title, $tags = array(), $description = '', $is_public = false) {
377
378 1
		$is_public = $is_public ? 1 : 0;
379 1
		$user_id = $userid;
380
381
		// Update the record
382 1
		$query = $db->prepareQuery("
383
		UPDATE `*PREFIX*bookmarks` SET
384
			`url` = ?, `title` = ?, `public` = ?, `description` = ?,
385
			`lastmodified` = UNIX_TIMESTAMP()
386
		WHERE `id` = ?
387
		AND `user_id` = ?
388 1
		");
389
390
		$params = array(
391 1
			htmlspecialchars_decode($url),
392 1
			htmlspecialchars_decode($title),
393 1
			$is_public,
394 1
			htmlspecialchars_decode($description),
395 1
			$id,
396 1
			$user_id,
397
		);
398
399 1
		$result = $query->execute($params);
400
401
		// Abort the operation if bookmark couldn't be set
402
		// (probably because the user is not allowed to edit this bookmark)
403 1
		if ($result == 0)
404
			exit();
405
406
407
		// Remove old tags
408 1
		$sql = "DELETE FROM `*PREFIX*bookmarks_tags`  WHERE `bookmark_id` = ?";
409 1
		$query = $db->prepareQuery($sql);
410 1
		$query->execute(array($id));
411
412
		// Add New Tags
413 1
		self::addTags($db, $id, $tags);
414
415 1
		return $id;
416
	}
417
418
	/**
419
	 * Add a bookmark
420
	 * @param string $userid UserId
421
	 * @param IDb $db Database Interface
422
	 * @param string $url
423
	 * @param string $title Name of the bookmark
424
	 * @param array $tags Simple array of tags to qualify the bookmark (different tags are taken from values)
425
	 * @param string $description A longer description about the bookmark
426
	 * @param boolean $public True if the bookmark is publishable to not registered users
0 ignored issues
show
Documentation introduced by
There is no parameter named $public. Did you maybe mean $is_public?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function. It has, however, found a similar but not annotated parameter which might be a good fit.

Consider the following example. The parameter $ireland is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $ireland
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was changed, but the annotation was not.

Loading history...
427
	 * @return int The id of the bookmark created
428
	 */
429 8
	public static function addBookmark($userid, IDb $db, $url, $title, $tags = array(), $description = '', $is_public = false) {
430 8
		$public = $is_public ? 1 : 0;
431 8
		$url_without_prefix = trim(substr($url, strpos($url, "://") + 3)); // Removes everything from the url before the "://" pattern (included)
432 8
		if($url_without_prefix === '') {
433
			throw new \InvalidArgumentException('Bookmark URL is missing');
434
		}
435 8
		$enc_url_noprefix = htmlspecialchars_decode($url_without_prefix);
436 8
		$enc_url = htmlspecialchars_decode($url);
437
		// Change lastmodified date if the record if already exists
438 8
		$sql = "SELECT * from  `*PREFIX*bookmarks` WHERE `url` like ? AND `user_id` = ?";
439 8
		$query = $db->prepareQuery($sql, 1);
440 8
		$result = $query->execute(array('%'.$enc_url_noprefix, $userid)); // Find url in the db independantly from its protocol
441 8
		if ($row = $result->fetchRow()) {
442
			$params = array();
443
			$title_str = '';
444
			if (trim($title) != '') { // Do we replace the old title
445
				$title_str = ' , title = ?';
446
				$params[] = $title;
447
			}
448
			$desc_str = '';
449
			if (trim($description) != '') { // Do we replace the old description
450
				$desc_str = ' , description = ?';
451
				$params[] = $description;
452
			}
453
			$sql = "UPDATE `*PREFIX*bookmarks` SET `lastmodified` = "
454
					. "UNIX_TIMESTAMP() $title_str $desc_str , `url` = ? WHERE `url` like ? and `user_id` = ?";
455
			$params[] = $enc_url;
456
			$params[] = '%'.$enc_url_noprefix;
457
			$params[] = $userid;
458
			$query = $db->prepareQuery($sql);
459
			$query->execute($params);
460
			return $row['id'];
461
		} else {
462 8
			$query = $db->prepareQuery("
463
			INSERT INTO `*PREFIX*bookmarks`
464
			(`url`, `title`, `user_id`, `public`, `added`, `lastmodified`, `description`)
465
			VALUES (?, ?, ?, ?, UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), ?)
466 8
			");
467
468
			$params = array(
469 8
				$enc_url,
470 8
				htmlspecialchars_decode($title),
471 8
				$userid,
472 8
				$public,
473 8
				$description,
474
			);
475 8
			$query->execute($params);
476
477 8
			$b_id = $db->getInsertId('*PREFIX*bookmarks');
478
479 8
			if ($b_id !== false) {
480 8
				self::addTags($db, $b_id, $tags);
481 8
				return $b_id;
482
			}
483
		}
484
	}
485
486
	/**
487
	 * @brief Add a set of tags for a bookmark
488
	 * @param IDb $db Database Interface
489
	 * @param int $bookmarkID The bookmark reference
490
	 * @param array $tags Set of tags to add to the bookmark
491
	 * @return null
492
	 * */
493 8
	private static function addTags(IDb $db, $bookmarkID, $tags) {
494 8
		$sql = 'INSERT INTO `*PREFIX*bookmarks_tags` (`bookmark_id`, `tag`) select ?, ? ';
495 8
		$dbtype = \OCP\Config::getSystemValue('dbtype', 'sqlite');
496
497 8
		if ($dbtype === 'mysql') {
498
			$sql .= 'from dual ';
499
		}
500 8
		$sql .= 'where not exists(select * from `*PREFIX*bookmarks_tags` where `bookmark_id` = ? and `tag` = ?)';
501
502 8
		$query = $db->prepareQuery($sql);
503 8
		foreach ($tags as $tag) {
504 8
			$tag = trim($tag);
505 8
			if (empty($tag)) {
506
				//avoid saving white spaces
507
				continue;
508
			}
509 8
			$params = array($bookmarkID, $tag, $bookmarkID, $tag);
510 8
			$query->execute($params);
511
		}
512 8
	}
513
514
	/**
515
	 * @brief Import Bookmarks from html formatted file
516
	 * @param string $user User imported Bookmarks should belong to
517
	 * @param IDb $db Database Interface
518
	 * @param string $file Content to import
519
	 * @return null
520
	 * */
521
	public static function importFile($user, IDb $db, $file) {
522
		libxml_use_internal_errors(true);
523
		$dom = new \domDocument();
524
525
		$dom->loadHTMLFile($file);
526
		$links = $dom->getElementsByTagName('a');
527
528
		$l = \OC::$server->getL10NFactory()->get('bookmarks');
529
		$errors = [];
530
531
		// Reintroduce transaction here!?
532
		foreach ($links as $link) {
533
			/* @var \DOMElement $link */
534
			$title = $link->nodeValue;
535
			$ref = $link->getAttribute("href");
536
			$tag_str = '';
537
			if ($link->hasAttribute("tags"))
538
				$tag_str = $link->getAttribute("tags");
539
			$tags = explode(',', $tag_str);
540
541
			$desc_str = '';
542
			if ($link->hasAttribute("description"))
543
				$desc_str = $link->getAttribute("description");
544
			try {
545
				self::addBookmark($user, $db, $ref, $title, $tags, $desc_str);
546
			} catch (\InvalidArgumentException $e) {
547
				\OC::$server->getLogger()->logException($e, ['app' => 'bookmarks']);
548
				$errors[] =  $l->t('Failed to import one bookmark, because: ') . $e->getMessage();
549
			}
550
		}
551
552
		return $errors;
553
	}
554
555
	/**
556
	 * @brief Load Url and receive Metadata (Title)
557
	 * @param string $url Url to load and analyze
558
	 * @return array Metadata for url;
559
	 * @throws \Exception
560
	 */
561 1
	public static function getURLMetadata($url) {
562
		
563 1
		$metadata = array();
564 1
		$metadata['url'] = $url;
565 1
		$page = "";
566
		
567
		try {
568 1
			$request = \OC::$server->getHTTPClientService()->newClient()->get($url);
569 1
			$page = $request->getBody();
570 1
			$contentType = $request->getHeader('Content-Type');
571
		} catch (\Exception $e) {
572
			throw $e;
573
		}
574
		
575
		//Check for encoding of site.
576
		//If not UTF-8 convert it.
577 1
		$encoding = array();
578 1
		preg_match('#.+?/.+?;\\s?charset\\s?=\\s?(.+)#i', $contentType, $encoding);
579 1
		if(empty($encoding)) {
580 1
			preg_match('/charset="?(.*?)["|;]/i', $page, $encoding);
581
		}
582
583 1
		if (isset($encoding[1])) {
584 1
			$decodeFrom = strtoupper($encoding[1]);
585
		} else {
586
			$decodeFrom = 'UTF-8';
587
		}
588
589 1
		if ($page) {
590
591 1
			if ($decodeFrom != 'UTF-8') {
592 1
				$page = iconv($decodeFrom, "UTF-8", $page);
593
			}
594
595 1
			preg_match("/<title>(.*)<\/title>/si", $page, $match);
596
			
597 1
			if (isset($match[1])) {
598 1
				$metadata['title'] = html_entity_decode($match[1]);
599
			}
600
		}
601
		
602 1
		return $metadata;
603
	}
604
605
	/**
606
	 * @brief Seperate Url String at comma charachter
607
	 * @param $line String of Tags
608
	 * @return array Array of Tags
609
	 * */
610
	public static function analyzeTagRequest($line) {
611
		$tags = explode(',', $line);
612
		$filterTag = array();
613
		foreach ($tags as $tag) {
614
			if (trim($tag) != '')
615
				$filterTag[] = trim($tag);
616
		}
617
		return $filterTag;
618
	}
619
620
}
621