parameters= array();
$this->parameters['nb_max_elements'] = (int) $cms_module_common_datasource_rss_limit;
$this->parameters['timeout'] = (int) $cms_module_common_datasource_rss_timeout;
return parent::save_form();
}
public function get_form(){
$form = parent::get_form();
$form.= "
";
return $form;
}
/*
* Récupération des données de la source...
*/
public function get_datas() {
//on commence par récupérer l'identifiant retourné par le sélecteur...
if ($this->parameters['selector'] != "") {
for ($i = 0; $i < count($this->selectors); $i++) {
if ($this->selectors[$i]['name'] == $this->parameters['selector']) {
$selector = new $this->parameters['selector']($this->selectors[$i]['id']);
break;
}
}
$loaded = false;
$aCurl = new Curl();
$aCurl->timeout=$this->parameters['timeout'];
$url = $selector->get_value();
if (is_array($url)) {
$url = $url[0];
}
$actual_url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
if ($actual_url != $url) {
$content = $aCurl->get($url);
$flux = $content->body;
if ($flux && $content->headers['Status-Code'] == 200) {
$rss = new domDocument();
$loaded = $rss->loadXML($flux);
}
}
if ($loaded) {
//les infos sur le flux...
//Flux RSS
if ($rss->getElementsByTagName("channel")->length > 0) {
$channel = $rss->getElementsByTagName("channel")->item(0);
$elements = array(
'title',
'description',
'generator',
'link'
);
$informations = $this->get_informations($channel,$elements,1);
//on va lire les infos des items...
$informations['items'] =array();
$items = $rss->getElementsByTagName("item");
$elements = array(
'title',
'description',
'link',
'guid',
'date',
'pubDate',
'creator',
'subject',
'format',
'language',
'source',
);
for($i=0 ; $i<$items->length ; $i++){
if($this->parameters['nb_max_elements']==0 || $i < $this->parameters['nb_max_elements']){
$informations['items'][]=$this->get_informations($items->item($i),$elements,false);
}
}
//Flux ATOM
} elseif($rss->getElementsByTagName("feed")->length > 0) {
$feed = $rss->getElementsByTagName("feed")->item(0);
$atom_elements = array(
'title',
'subtitle',
'link',
'updated',
'author',
'id',
);
$informations = $this->get_atom_informations($feed,$atom_elements,1);
//on va lire les infos des entries...
$informations['items'] =array();
$entries = $rss->getElementsByTagName("entry");
$atom_elements = array(
'title',
'link',
'id',
'author',
'issued',
'modified',
'published',
'content',
);
for($i=0 ; $i<$entries->length ; $i++){
if($this->parameters['nb_max_elements']==0 || $i < $this->parameters['nb_max_elements']){
$informations['items'][]=$this->get_atom_informations($entries->item($i),$atom_elements,false);
}
}
}
}
return $informations;
}
return false;
}
protected function get_informations($node,$elements,$first_only=false){
global $charset;
$informations = array();
foreach($elements as $element){
$items = $node->getElementsByTagName($element);
switch ($element) {
case "pubDate" :
$element = "date";
break;
}
if($items->length == 1 || $first_only){
$informations[$element] = $this->charset_normalize($items->item(0)->nodeValue,"utf-8");
}else{
for($i=0 ; $i<$items->length ; $i++){
$informations[$element][] = $this->charset_normalize($items->item($i)->nodeValue,"utf-8");
}
}
}
return $informations;
}
protected function get_atom_informations($node,$atom_elements,$first_only=false){
global $charset;
$informations = array();
foreach($atom_elements as $atom_element){
$items = $node->getElementsByTagName($atom_element);
switch ($atom_element) {
case "published" :
$element = "date";
break;
case "author" :
if($first_only) {
$element = "generator";
} else {
$element = "creator";
}
break;
case "content" :
$element = "description";
break;
default:
$element = $atom_element;
break;
}
if($items->length == 1 || $first_only){
if ($element == "link") {
$informations[$element] = $this->charset_normalize($items->item(0)->getAttribute('href'),"utf-8");
} else {
$informations[$element] = $this->charset_normalize($items->item(0)->nodeValue,"utf-8");
}
}else{
if ($element == "link") {
for($i=0 ; $i<$items->length ; $i++){
$informations[$element][] = $this->charset_normalize($items->item(0)->getAttribute('href'),"utf-8");
}
} else {
for($i=0 ; $i<$items->length ; $i++){
$informations[$element][] = $this->charset_normalize($items->item($i)->nodeValue,"utf-8");
}
}
}
}
return $informations;
}
public function get_format_data_structure(){
return array(
array(
'var' => "title",
'desc' => $this->msg['cms_module_common_datasource_rss_title_desc']
),
array(
'var' => "subtitle",
'desc' => $this->msg['cms_module_common_datasource_rss_subtitle_desc']
),
array(
'var' => "description",
'desc' => $this->msg['cms_module_common_datasource_rss_description_desc']
),
array(
'var' => "generator",
'desc' => $this->msg['cms_module_common_datasource_rss_generator_desc']
),
array(
'var' => "link",
'desc' => $this->msg['cms_module_common_datasource_rss_link_desc']
),
array(
'var' => "items",
'desc' => $this->msg['cms_module_common_datasource_rss_items_desc'],
'children' => array(
array(
'var' => "items[i].title",
"desc" => $this->msg['cms_module_common_datasource_rss_item_title_desc']
),
array(
'var' => "items[i].description",
"desc" => $this->msg['cms_module_common_datasource_rss_item_description_desc']
),
array(
'var' => "items[i].link",
"desc" => $this->msg['cms_module_common_datasource_rss_item_link_desc']
),
array(
'var' => "items[i].guid",
"desc" => $this->msg['cms_module_common_datasource_rss_item_guid_desc']
),
array(
'var' => "items[i].date",
"desc" => $this->msg['cms_module_common_datasource_rss_item_date_desc']
),
array(
'var' => "items[i].creator",
"desc" => $this->msg['cms_module_common_datasource_rss_item_creator_desc']
),
array(
'var' => "items[i].subject",
"desc" => $this->msg['cms_module_common_datasource_rss_item_subject_desc']
),
array(
'var' => "items[i].format",
"desc" => $this->msg['cms_module_common_datasource_rss_item_format_desc']
),
array(
'var' => "items[i].language",
"desc" => $this->msg['cms_module_common_datasource_rss_item_language_desc']
),
array(
'var' => "items[i].source",
"desc" => $this->msg['cms_module_common_datasource_rss_item_source_desc']
)
)
),
);
}
}