DashletRssFeedTitle::generateTitle()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12
Metric Value
cc 3
eloc 7
nc 3
nop 0
dl 0
loc 10
ccs 0
cts 10
cp 0
crap 12
rs 9.4285
1
<?php
2
/*********************************************************************************
3
 * SugarCRM Community Edition is a customer relationship management program developed by
4
 * SugarCRM, Inc. Copyright (C) 2004-2013 SugarCRM Inc.
5
6
 * SuiteCRM is an extension to SugarCRM Community Edition developed by Salesagility Ltd.
7
 * Copyright (C) 2011 - 2014 Salesagility Ltd.
8
 *
9
 * This program is free software; you can redistribute it and/or modify it under
10
 * the terms of the GNU Affero General Public License version 3 as published by the
11
 * Free Software Foundation with the addition of the following permission added
12
 * to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
13
 * IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
14
 * OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
15
 * 
16
 * This program is distributed in the hope that it will be useful, but WITHOUT
17
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18
 * FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more
19
 * details.
20
 * 
21
 * You should have received a copy of the GNU Affero General Public License along with
22
 * this program; if not, see http://www.gnu.org/licenses or write to the Free
23
 * Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
24
 * 02110-1301 USA.
25
 * 
26
 * You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
27
 * SW2-130, Cupertino, CA 95014, USA. or at email address [email protected].
28
 * 
29
 * The interactive user interfaces in modified source and object code versions
30
 * of this program must display Appropriate Legal Notices, as required under
31
 * Section 5 of the GNU Affero General Public License version 3.
32
 * 
33
 * In accordance with Section 7(b) of the GNU Affero General Public License version 3,
34
 * these Appropriate Legal Notices must retain the display of the "Powered by
35
 * SugarCRM" logo and "Supercharged by SuiteCRM" logo. If the display of the logos is not
36
 * reasonably feasible for  technical reasons, the Appropriate Legal Notices must
37
 * display the words  "Powered by SugarCRM" and "Supercharged by SuiteCRM".
38
 ********************************************************************************/
39
40
41
/**
42
 * Class for parsing title from RSS feed, and keep default encoding (UTF-8)
43
 * Created: Sep 12, 2011
44
 */
45
class DashletRssFeedTitle {
46
	public $defaultEncoding = "UTF-8";
47
	public $readBytes = 8192;
48
	public $url;
49
	public $cut = 70;
50
	public $contents = "";
51
	public $title = "";
52
	public $endWith = "...";
53
	public $xmlEncoding = false;
54
	public $fileOpen = false;
55
56
	public function __construct($url) {
57
		$this->url = $url;
58
	}
59
60
	public function generateTitle() {
61
		if ($this->readFeed()) {
62
			$this->getTitle();
63
			if (!empty($this->title)) {
64
				$this->convertEncoding();
65
				$this->cutLength();
66
			}
67
		}
68
		return $this->title;
69
	}
70
71
	/**
72
	 * @todo use curl with waiting timeout instead of fopen
73
	 */
74
	public function readFeed() {
75
		if ($this->url) {
76
                    if (!in_array(strtolower(parse_url($this->url, PHP_URL_SCHEME)), array("http", "https"), true)) {
77
                        return false;
78
                    }
79
			$fileOpen = @fopen($this->url, 'r');
80
			if ($fileOpen) {
81
				$this->fileOpen = true;
82
				$this->contents = fread($fileOpen, $this->readBytes);
83
				fclose($fileOpen);
84
				return true;
85
			}
86
		}
87
		return false;
88
	}
89
90
	/**
91
	 *
92
	 */
93
	public function getTitle() {
94
		$matches = array ();
95
		preg_match("/<title>.*?<\/title>/i", $this->contents, $matches);
96
		if (isset($matches[0])) {
97
			$this->title = str_replace(array('<![CDATA[', '<title>', '</title>', ']]>'), '', $matches[0]);
98
		}
99
	}
100
101
	public function cutLength() {
102
		if (mb_strlen(trim($this->title), $this->defaultEncoding) > $this->cut) {
103
			$this->title = mb_substr($this->title, 0, $this->cut, $this->defaultEncoding) . $this->endWith;
104
		}
105
	}
106
107
	private function _identifyXmlEncoding() {
108
		$matches = array ();
109
		preg_match('/encoding\=*\".*?\"/', $this->contents, $matches);
110
		if (isset($matches[0])) {
111
			$this->xmlEncoding = trim(str_replace('encoding="', '"', $matches[0]), '"');
0 ignored issues
show
Documentation Bug introduced by
The property $xmlEncoding was declared of type boolean, but trim(str_replace('encodi...'"', $matches[0]), '"') is of type string. Maybe add a type cast?

This check looks for assignments to scalar types that may be of the wrong type.

To ensure the code behaves as expected, it may be a good idea to add an explicit type cast.

$answer = 42;

$correct = false;

$correct = (bool) $answer;
Loading history...
112
		}
113
	}
114
115
	public function convertEncoding() {
116
		$this->_identifyXmlEncoding();
117
		if ($this->xmlEncoding && $this->xmlEncoding != $this->defaultEncoding) {
118
			$this->title = iconv($this->xmlEncoding, $this->defaultEncoding, $this->title);
119
		}
120
	}
121
}
122