-
Notifications
You must be signed in to change notification settings - Fork 0
/
Link.php
163 lines (150 loc) · 3.66 KB
/
Link.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
<?php
require_once(dirname(__FILE__) . '/LinkPeer.php');
/**
* Link the class that defines a link
*
* @author Paul Matthews <pmatthews@ibuildings.com>
*/
class Link {
/**
* url of the link
*
* @var string
* @access private
*/
private $url;
/**
* tags describing the link
*
* @var array
* @access private
*/
private $tags = array();
/**
* A standard constructor that does nothing
*
* @return mixed
*/
public function __construct()
{
// Not required to do anything at this time.
}
/**
* getUrl - retrieve the url of the link
*
* @access public
* @return string the url
*/
public function getUrl()
{
return $this->url;
}
/**
* getTags the array of tags describing the link
*
* @access public
* @return array of tags
*/
public function getTags()
{
return $this->tags;
}
/**
* setUrl to set the url of the link
*
* @param string $url
* @access public
* @return void
*/
public function setUrl($url)
{
$this->url = (string) $url;
}
/**
* addTag - add a tag to describe the link
*
* @param string $tag
* @access public
* @return void
*/
public function addTag($tag)
{
$this->tags[] = (string) $tag;
}
/**
* removeTag - remove every instance of a tag from the tags list
*
* @param mixed $tag
* @access public
* @return boolean true if the tag was found and removed false if
* the tag didn't exist
*/
public function removeTag($tag)
{
$success = false;
// look through the current tags for the specified tag
foreach ($this->tags as $key => $tagName) {
if ($tagName == $tag) {
// remove the tag from the list
unset($this->tags[$key]);
$success = true;
}
}
return $success;
}
/**
* __toString to make a sensible string out of the link object
*
* @access public
* @return string the string description of the link
*/
public function __toString()
{
// example: http://www.google.com/ [usa, search]
return sprintf('%s [%s]', $this->url, implode(', ', $this->tags));
}
/**
* toArray convert a link object to an array representation
*
* @access public
* @return array the link representation
*/
public function toArray()
{
return array(
// _id is the name of the url in this case as it makes it easier
// for interoperability with the Database
'url' => $this->url,
'tags' => $this->tags,
);
}
/**
* fromArray read the properties of the link from an array
*
* Caution: overwrites existing data
*
* @param array $link the properties as produced from the toArray() method
* @access public
* @throws Exception
* @return this object
*/
public function fromArray($link)
{
// Ensure the url is set
if (empty($link['url']) || !is_string($link['url'])) {
throw new Exception('Incorrect data supplied');
}
$this->url = $link['url'];
// Only set tags if they conform to our structure
$tags = array();
if (!empty($link['tags']) && is_array($link['tags'])) {
foreach ($link['tags'] as $tag) {
if (is_string($tag)) {
$tags[] = $tag;
}
}
}
$this->tags = $tags;
return $this;
}
}