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
<?php
class Link extends BEAppObjectModel {
var $actsAs = array();
public $searchFields = array(
'title' => 10,
'nickname' => 8,
'description' => 5,
'url' => 8,
'note' => 2
);
protected $modelBindings = array(
'detailed' => array(
'BEObject' => array(
'ObjectType',
'LangText',
'UserCreated',
'UserModified',
'ObjectProperty',
'RelatedObject',
'Category',
'Annotation',
'Alias',
'Version' => array('User.realname', 'User.userid'),
),
),
'default' => array(
'BEObject' => array(
'LangText',
'ObjectType',
'RelatedObject',
'Category',
'Annotation'
)
),
'minimum' => array('BEObject' => array('ObjectType')),
'frontend' => array('BEObject' => array('LangText','RelatedObject','ObjectProperty')),
'api' => array('BEObject' => array('LangText','ObjectProperty'))
);
public $objectTypesGroups = array('leafs', 'related');
public function beforeSave() {
if(!empty($this->data['Link']['url'])) {
$url = $this->data['Link']['url'];
if(!$this->isHttp($url) && !$this->isHttps($url)) {
$url = 'http://' . $url;
$this->data['Link']['url'] = $url;
}
if(empty($this->data['Link']['id']) || !empty($this->data['Link']['noduplicate'])) {
$link = $this->find('all', array('conditions' => array('url' => $this->data['Link']['url'] ,'title' => $this->data['Link']['title'])));
if(!empty($link)) {
throw new BeditaException(__('Error saving link: duplicated link', true), $this->validationErrors);
return false;
}
}
$date = new DateTime();
$this->data['Link']['http_code'] = $this->responseForUrl($url);
$this->data['Link']['http_response_date'] = $date->format(DATE_RFC3339);
}
return true;
}
public function responseForUrl($url) {
$result = @get_headers($url);
return (empty($result) || !$result) ? 'Invalid url' : $result[0];
}
public function isHttp($url) {
if(strlen($url)<10) return false;
return (substr($url,0,7) == 'http://');
}
public function isHttps($url) {
if(strlen($url)<10) return false;
return (substr($url,0,8) == 'https://');
}
public function checkUrl($url) {
$u = trim($url);
if(!$this->isHttp($u) && !$this->isHttps($u)) {
$u = 'http://' . $u;
}
return $u;
}
public function readHtmlTitle($url) {
$html = @file_get_contents($url);
$title = '';
if(!empty($html)) {
preg_match("/<title>(.+)<\/title>/siU", $html, $t);
if (!empty($t[1]))
$title = $t[1];
}
return $title;
}
}