dolibarr  16.0.1
external_rss.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) 2003 Eric Seigne <erics@rycks.com>
3  * Copyright (C) 2003,2005 Rodolphe Quiedeville <rodolphe@quiedeville.org>
4  * Copyright (C) 2004-2011 Laurent Destailleur <eldy@users.sourceforge.net>
5  * Copyright (C) 2004 Sebastien Di Cintio <sdicintio@ressource-toi.org>
6  * Copyright (C) 2004 Benoit Mortier <benoit.mortier@opensides.be>
7  * Copyright (C) 2005-2011 Regis Houssin <regis.houssin@inodbox.com>
8  * Copyright (C) 2011 Juanjo Menent <jmenent@2byte.es>
9  * Copyright (C) 2020 Tobias Sekan <tobias.sekan@startmail.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License as published by
13  * the Free Software Foundation; either version 3 of the License, or
14  * (at your option) any later version.
15  *
16  * This program is distributed in the hope that it will be useful,
17  * but WITHOUT ANY WARRANTY; without even the implied warranty of
18  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19  * GNU General Public License for more details.
20  *
21  * You should have received a copy of the GNU General Public License
22  * along with this program. If not, see <https://www.gnu.org/licenses/>.
23  */
24 
31 require '../main.inc.php';
32 require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php';
33 require_once DOL_DOCUMENT_ROOT.'/core/class/rssparser.class.php';
34 require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php';
35 
36 // Load translation files required by the page
37 $langs->load("admin");
38 
39 // Security check
40 if (!$user->admin) {
42 }
43 
44 $lastexternalrss = 0;
45 $action = GETPOST('action', 'aZ09');
46 
47 
48 /*
49  * Actions
50  */
51 
52 // positionne la variable pour le nombre de rss externes
53 $sql = "SELECT ".$db->decrypt('name')." as name FROM ".MAIN_DB_PREFIX."const";
54 $sql .= " WHERE ".$db->decrypt('name')." LIKE 'EXTERNAL_RSS_URLRSS_%'";
55 //print $sql;
56 $result = $db->query($sql); // We can't use SELECT MAX() because EXTERNAL_RSS_URLRSS_10 is lower than EXTERNAL_RSS_URLRSS_9
57 if ($result) {
58  $reg = array();
59  while ($obj = $db->fetch_object($result)) {
60  preg_match('/([0-9]+)$/i', $obj->name, $reg);
61  if ($reg[1] && $reg[1] > $lastexternalrss) {
62  $lastexternalrss = $reg[1];
63  }
64  }
65 } else {
66  dol_print_error($db);
67 }
68 
69 if ($action == 'add' || GETPOST("modify")) {
70  $external_rss_title = "external_rss_title_".GETPOST("norss", 'int');
71  $external_rss_urlrss = "external_rss_urlrss_".GETPOST("norss", 'int');
72 
73  if (GETPOST($external_rss_urlrss, 'alpha')) {
74  $boxlabel = '(ExternalRSSInformations)';
75  //$external_rss_url = "external_rss_url_" . GETPOST("norss");
76 
77  $db->begin();
78 
79  if (GETPOST("modify")) {
80  // Supprime boite box_external_rss de definition des boites
81  /* $sql = "UPDATE ".MAIN_DB_PREFIX."boxes_def";
82  $sql.= " SET name = '".$db->escape($boxlabel)."'";
83  $sql.= " WHERE file ='box_external_rss.php' AND note like '".$db->escape(GETPOST("norss"))." %'";
84 
85  $resql=$db->query($sql);
86  if (! $resql)
87  {
88  dol_print_error($db,"sql=$sql");
89  exit;
90  }
91  */
92  } else {
93  // Ajoute boite box_external_rss dans definition des boites
94  $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, note)";
95  $sql .= " VALUES ('box_external_rss.php','".$db->escape(GETPOST("norss", 'int').' ('.GETPOST($external_rss_title, 'alpha')).")')";
96  if (!$db->query($sql)) {
97  dol_print_error($db);
98  $error++;
99  }
100  //print $sql;exit;
101  }
102 
103  $result1 = dolibarr_set_const($db, "EXTERNAL_RSS_TITLE_".GETPOST("norss", 'int'), GETPOST($external_rss_title, 'alpha'), 'chaine', 0, '', $conf->entity);
104  if ($result1) {
105  $consttosave = "EXTERNAL_RSS_URLRSS_".GETPOST("norss", 'int');
106  $urltosave = GETPOST($external_rss_urlrss, 'alpha');
107  $result2 = dolibarr_set_const($db, $consttosave, $urltosave, 'chaine', 0, '', $conf->entity);
108  //var_dump($result2);exit;
109  }
110 
111  if ($result1 && $result2) {
112  $db->commit();
113  header("Location: ".$_SERVER["PHP_SELF"]);
114  exit;
115  } else {
116  $db->rollback();
117  dol_print_error($db);
118  }
119  }
120 }
121 
122 if (GETPOST("delete")) {
123  if (GETPOST("norss", 'int')) {
124  $db->begin();
125 
126  // Supprime boite box_external_rss de definition des boites
127  $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."boxes_def";
128  $sql .= " WHERE file = 'box_external_rss.php' AND note LIKE '".$db->escape(GETPOST("norss", 'int'))." %'";
129 
130  $resql = $db->query($sql);
131  if ($resql) {
132  $num = $db->num_rows($resql);
133  $i = 0;
134  while ($i < $num) {
135  $obj = $db->fetch_object($resql);
136 
137  $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes";
138  $sql .= " WHERE entity = ".$conf->entity;
139  $sql .= " AND box_id = ".((int) $obj->rowid);
140  $resql = $db->query($sql);
141 
142  $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def";
143  $sql .= " WHERE rowid = ".((int) $obj->rowid);
144  $resql = $db->query($sql);
145 
146  if (!$resql) {
147  $db->rollback();
148  dol_print_error($db, "sql=".$sql);
149  exit;
150  }
151 
152  $i++;
153  }
154 
155  $db->commit();
156  } else {
157  $db->rollback();
158  dol_print_error($db, "sql=".$sql);
159  exit;
160  }
161 
162 
163  $result1 = dolibarr_del_const($db, "EXTERNAL_RSS_TITLE_".GETPOST("norss", 'int'), $conf->entity);
164  if ($result1) {
165  $result2 = dolibarr_del_const($db, "EXTERNAL_RSS_URLRSS_".GETPOST("norss", 'int'), $conf->entity);
166  }
167 
168  if ($result1 && $result2) {
169  $db->commit();
170  header("Location: external_rss.php");
171  exit;
172  } else {
173  $db->rollback();
174  dol_print_error($db);
175  }
176  }
177 }
178 
179 
180 /*
181  * View
182  */
183 $form = new Form($db);
184 
185 llxHeader('', $langs->trans("ExternalRSSSetup"));
186 
187 $linkback = '<a href="'.DOL_URL_ROOT.'/admin/modules.php?restore_lastsearch_values=1">'.$langs->trans("BackToModuleList").'</a>';
188 print load_fiche_titre($langs->trans("ExternalRSSSetup"), $linkback, 'title_setup');
189 print '<br>';
190 
191 // Formulaire ajout
192 print '<form name="externalrssconfig" action="'.$_SERVER["PHP_SELF"].'" method="post">';
193 print '<input type="hidden" name="token" value="'.newToken().'">';
194 
195 print '<table class="noborder centpercent">';
196 print '<tr class="liste_titre">';
197 print '<td colspan="2">'.$langs->trans("NewRSS").'</td>';
198 print '<td>'.$langs->trans("Example").'</td>';
199 print '</tr>';
200 print '<tr class="impair">';
201 print '<td width="100">'.$langs->trans("Title").'</td>';
202 print '<td><input type="text" class="flat minwidth300" name="external_rss_title_'.($lastexternalrss + 1).'" value=""></td>';
203 print '<td>'.$langs->trans('RSSUrlExample').'</td>';
204 print '</tr>';
205 
206 print '<tr class="pair">';
207 print '<td>'.$langs->trans('RSSUrl').'</td>';
208 print '<td><input type="text" class="flat minwidth300" name="external_rss_urlrss_'.($lastexternalrss + 1).'" value=""></td>';
209 print '<td>http://news.google.com/news?ned=us&topic=h&output=rss<br>http://www.dolibarr.org/rss</td>';
210 print '</tr>';
211 print '</table>';
212 
213 print $form->buttonsSaveCancel("Add", '');
214 print '<input type="hidden" name="action" value="add">';
215 print '<input type="hidden" name="norss" value="'.($lastexternalrss + 1).'">';
216 
217 print '</form>';
218 
219 print '<br><br>';
220 print '<span class="opacitymedium">'.$langs->trans('RssNote').'</span> - <a href="'.DOL_MAIN_URL_ROOT.'/admin/boxes.php">'.$langs->trans('JumpToBoxes').'</a>';
221 print '<br><br>';
222 
223 $sql = "SELECT rowid, file, note FROM ".MAIN_DB_PREFIX."boxes_def";
224 $sql .= " WHERE file = 'box_external_rss.php'";
225 $sql .= " ORDER BY note";
226 
227 dol_syslog("select rss boxes", LOG_DEBUG);
228 $resql = $db->query($sql);
229 if ($resql) {
230  $boxlist = InfoBox::listBoxes($db, 'activated', -1, null);
231  $num = $db->num_rows($resql);
232  $i = 0;
233 
234  while ($i < $num) {
235  $obj = $db->fetch_object($resql);
236 
237  preg_match('/^([0-9]+)/i', $obj->note, $reg);
238  $idrss = $reg[1];
239  $keyrsstitle = "EXTERNAL_RSS_TITLE_".$idrss;
240  $keyrssurl = "EXTERNAL_RSS_URLRSS_".$idrss;
241  //print "x".$idrss;
242 
243  $rssparser = new RssParser($db);
244  $result = $rssparser->parser($conf->global->$keyrssurl, 5, 300, $conf->externalrss->dir_temp);
245 
246  print "<br>";
247  print '<form name="externalrssconfig" action="'.$_SERVER["PHP_SELF"].'" method="post">'."\n";
248 
249  print '<table class="noborder centpercent">'."\n";
250  print '<input type="hidden" name="token" value="'.newToken().'">'."\n";
251 
252  print '<tr class="liste_titre">';
253  print "<td>".$langs->trans("RSS")." ".($i + 1)."</td>";
254  print '<td class="right">';
255  print '<input type="submit" class="button buttongen button-save" name="modify" value="'.$langs->trans("Modify").'">';
256  print '<input type="submit" class="button buttongen button-cancel" name="delete" value="'.$langs->trans("Delete").'">';
257  print '<input type="hidden" name="norss" value="'.$idrss.'">';
258  print '</td>';
259  print '</tr>'."\n";
260 
261 
262  print '<tr class="oddeven">';
263  print '<td class="titlefield">'.$langs->trans("Title")."</td>";
264  print '<td><input type="text" class="flat minwidth300" name="external_rss_title_'.$idrss.'" value="'.dol_escape_htmltag($conf->global->$keyrsstitle).'"></td>';
265  print '</tr>'."\n";
266 
267 
268  print '<tr class="oddeven">';
269  print "<td>".$langs->trans("URL")."</td>";
270  print '<td><input type="text" class="flat minwidth300" name="external_rss_urlrss_'.$idrss.'" value="'.dol_escape_htmltag($conf->global->$keyrssurl).'"></td>';
271  print '</tr>'."\n";
272 
273 
274  print '<tr class="oddeven">';
275  print "<td>".$langs->trans("Status")."</td>";
276  print "<td>";
277  if ($result > 0 && empty($rss->error)) {
278  print '<span class="ok">'.$langs->trans("Online").'</div>';
279  } else {
280  print '<span class="error">'.$langs->trans("Offline");
281  $langs->load("errors");
282  if ($rssparser->error) {
283  print ' - '.$langs->trans($rssparser->error);
284  }
285  print '</div>';
286  }
287  print "</td>";
288  print '</tr>'."\n";
289 
290  // Logo
291  if ($result > 0 && empty($rss->error)) {
292  print '<tr class="oddeven">';
293  print "<td>".$langs->trans("Logo")."</td>";
294  print '<td>';
295  $imageurl = $rssparser->getImageUrl();
296  $linkrss = $rssparser->getLink();
297  if (!preg_match('/^http/', $imageurl)) {
298  $imageurl = $linkrss.$imageurl;
299  }
300  if ($imageurl) {
301  print '<img height="32" src="'.$imageurl.'">';
302  } else {
303  print $langs->trans("None");
304  }
305  print '</td>';
306  print '</tr>'."\n";
307  }
308 
309  // Active
310  $active = _isInBoxList($idrss, $boxlist) ? 'yes' : 'no';
311  print '<tr class="oddeven">';
312  print '<td>'.$langs->trans('WidgetAvailable').'</td>';
313  print '<td>'.yn($active).'</td>';
314  print '</tr>'."\n";
315 
316  print '</table>'."\n";
317 
318  print "</form>\n";
319 
320  $i++;
321  }
322 } else {
323  dol_print_error($db);
324 }
325 
326 // End of page
327 llxFooter();
328 $db->close();
329 
337 function _isInBoxList($idrss, array $boxlist)
338 {
339  foreach ($boxlist as $box) {
340  if ($box->boxcode === "lastrssinfos" && strpos($box->note, $idrss) !== false) {
341  return true;
342  }
343  }
344 
345  return false;
346 }
GETPOST($paramname, $check= 'alphanohtml', $method=0, $filter=null, $options=null, $noreplace=0)
Return value of a param into GET or POST supervariable.
if($cancel &&!$id) if($action== 'add'&&!$cancel) if($action== 'delete') if($id) $form
Actions.
Definition: card.php:142
dolibarr_set_const($db, $name, $value, $type= 'chaine', $visible=0, $note= '', $entity=1)
Insert a parameter (key,value) into database (delete old key then insert it again).
Definition: admin.lib.php:627
if(!defined('NOREQUIRESOC')) if(!defined('NOREQUIRETRAN')) if(!defined('NOCSRFCHECK')) if(!defined('NOTOKENRENEWAL')) if(!defined('NOREQUIREMENU')) if(!defined('NOREQUIREHTML')) if(!defined('NOREQUIREAJAX')) llxHeader()
Empty header.
Definition: wrapper.php:59
static listBoxes($dbs, $mode, $zone, $user=null, $excludelist=array(), $includehidden=1)
Return array of boxes qualified for area and user.
dol_escape_htmltag($stringtoescape, $keepb=0, $keepn=0, $noescapetags= '', $escapeonlyhtmltags=0)
Returns text escaped for inclusion in HTML alt or title tags, or into values of HTML input fields...
Class to manage generation of HTML components Only common components must be here.
load_fiche_titre($titre, $morehtmlright= '', $picto= 'generic', $pictoisfullpath=0, $id= '', $morecssontable= '', $morehtmlcenter= '')
Load a title with picto.
dolibarr_del_const($db, $name, $entity=1)
Delete a constant.
Definition: admin.lib.php:552
dol_syslog($message, $level=LOG_INFO, $ident=0, $suffixinfilename= '', $restricttologhandler= '', $logcontext=null)
Write log message into outputs.
accessforbidden($message= '', $printheader=1, $printfooter=1, $showonlymessage=0, $params=null)
Show a message to say access is forbidden and stop program Calling this function terminate execution ...
if(isModEnabled('facture')&&!empty($user->rights->facture->lire)) if((isModEnabled('fournisseur')&&empty($conf->global->MAIN_USE_NEW_SUPPLIERMOD)&&$user->rights->fournisseur->facture->lire)||(isModEnabled('supplier_invoice')&&$user->rights->supplier_invoice->lire)) if(isModEnabled('don')&&!empty($user->rights->don->lire)) if(isModEnabled('tax')&&!empty($user->rights->tax->charges->lire)) if(isModEnabled('facture')&&isModEnabled('commande')&&$user->rights->commande->lire &&empty($conf->global->WORKFLOW_DISABLE_CREATE_INVOICE_FROM_ORDER)) $resql
Social contributions to pay.
Definition: index.php:742
dol_print_error($db= '', $error= '', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
llxFooter()
Empty footer.
Definition: wrapper.php:73
Class to parse RSS files.