* Copyright (C) 2003,2005 Rodolphe Quiedeville * Copyright (C) 2004-2011 Laurent Destailleur * Copyright (C) 2004 Sebastien Di Cintio * Copyright (C) 2004 Benoit Mortier * Copyright (C) 2005-2011 Regis Houssin * Copyright (C) 2011 Juanjo Menent * Copyright (C) 2020 Tobias Sekan * Copyright (C) 2024 MDW * Copyright (C) 2024 Frédéric France * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ /** * \file htdocs/admin/external_rss.php * \ingroup external_rss * \brief Page to setupe module ExternalRss */ // Load Dolibarr environment require '../main.inc.php'; require_once DOL_DOCUMENT_ROOT.'/core/lib/admin.lib.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/rssparser.class.php'; require_once DOL_DOCUMENT_ROOT.'/core/class/infobox.class.php'; // Load translation files required by the page $langs->load("admin"); $lastexternalrss = 0; $action = GETPOST('action', 'aZ09'); // Security check if (!$user->admin) { accessforbidden(); } /* * Actions */ // positionne la variable pour le nombre de rss externes $sql = "SELECT ".$db->decrypt('name')." as name FROM ".MAIN_DB_PREFIX."const"; $sql .= " WHERE ".$db->decrypt('name')." LIKE 'EXTERNAL_RSS_URLRSS_%'"; //print $sql; $result = $db->query($sql); // We can't use SELECT MAX() because EXTERNAL_RSS_URLRSS_10 is lower than EXTERNAL_RSS_URLRSS_9 if ($result) { $reg = array(); while ($obj = $db->fetch_object($result)) { preg_match('/([0-9]+)$/i', $obj->name, $reg); if ($reg[1] && $reg[1] > $lastexternalrss) { $lastexternalrss = $reg[1]; } } } else { dol_print_error($db); } if ($action == 'add' || GETPOST("modify")) { $external_rss_title = "external_rss_title_".GETPOSTINT("norss"); $external_rss_urlrss = "external_rss_urlrss_".GETPOSTINT("norss"); if (GETPOST($external_rss_urlrss, 'alpha')) { $boxlabel = '(ExternalRSSInformations)'; //$external_rss_url = "external_rss_url_" . GETPOST("norss"); $db->begin(); if (GETPOST("modify")) { // Supprime boite box_external_rss de definition des boites /* $sql = "UPDATE ".MAIN_DB_PREFIX."boxes_def"; $sql.= " SET name = '".$db->escape($boxlabel)."'"; $sql.= " WHERE file ='box_external_rss.php' AND note like '".$db->escape(GETPOST("norss"))." %'"; $resql=$db->query($sql); if (! $resql) { dol_print_error($db,"sql=$sql"); exit; } */ } else { // Ajoute boite box_external_rss dans definition des boites $sql = "INSERT INTO ".MAIN_DB_PREFIX."boxes_def (file, note)"; $sql .= " VALUES ('box_external_rss.php', '".$db->escape(GETPOSTINT("norss")." (".GETPOST($external_rss_title)).")')"; if (!$db->query($sql)) { dol_print_error($db); $error++; } //print $sql;exit; } $result1 = dolibarr_set_const($db, "EXTERNAL_RSS_TITLE_".GETPOSTINT("norss"), GETPOST($external_rss_title), 'chaine', 0, '', $conf->entity); if ($result1) { $consttosave = "EXTERNAL_RSS_URLRSS_".GETPOSTINT("norss"); $urltosave = GETPOST($external_rss_urlrss, 'alpha'); $result2 = dolibarr_set_const($db, $consttosave, $urltosave, 'chaine', 0, '', $conf->entity); //var_dump($result2);exit; } if ($result1 && $result2) { $db->commit(); header("Location: ".$_SERVER["PHP_SELF"]); exit; } else { $db->rollback(); dol_print_error($db); } } } if (GETPOST("delete")) { if (GETPOSTINT("norss")) { $db->begin(); // Supprime boite box_external_rss de definition des boites $sql = "SELECT rowid FROM ".MAIN_DB_PREFIX."boxes_def"; $sql .= " WHERE file = 'box_external_rss.php' AND note LIKE '".$db->escape(GETPOSTINT("norss"))." %'"; $resql = $db->query($sql); if ($resql) { $num = $db->num_rows($resql); $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes"; $sql .= " WHERE entity = ".$conf->entity; $sql .= " AND box_id = ".((int) $obj->rowid); $resql = $db->query($sql); $sql = "DELETE FROM ".MAIN_DB_PREFIX."boxes_def"; $sql .= " WHERE rowid = ".((int) $obj->rowid); $resql = $db->query($sql); if (!$resql) { $db->rollback(); dol_print_error($db, "sql=".$sql); exit; } $i++; } $db->commit(); } else { $db->rollback(); dol_print_error($db, "sql=".$sql); exit; } $result1 = dolibarr_del_const($db, "EXTERNAL_RSS_TITLE_".GETPOSTINT("norss"), $conf->entity); if ($result1) { $result2 = dolibarr_del_const($db, "EXTERNAL_RSS_URLRSS_".GETPOSTINT("norss"), $conf->entity); } if ($result1 && $result2) { $db->commit(); header("Location: external_rss.php"); exit; } else { $db->rollback(); dol_print_error($db); } } } /* * View */ $form = new Form($db); llxHeader('', $langs->trans("ExternalRSSSetup"), '', '', 0, 0, '', '', '', 'mod-admin page-external_rss'); $linkback = ''.$langs->trans("BackToModuleList").''; print load_fiche_titre($langs->trans("ExternalRSSSetup"), $linkback, 'title_setup'); print '
'; // Formulaire ajout print '
'; print ''; print '
'; // You can use div-table-responsive-no-min if you don't need reserved height for your table print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print ''; print '
'.$langs->trans("NewRSS").''.$langs->trans("Example").'
'.$langs->trans("Title").''.$langs->trans('RSSUrlExample').'
'.$langs->trans('RSSUrl').'http://news.google.com/news?ned=us&topic=h&output=rss
http://www.dolibarr.org/rss
'; print '
'; print $form->buttonsSaveCancel("Add", ''); print ''; print ''; print '
'; print '

'; print ''.$langs->trans('RssNote').''; print ' - '; print ''.$langs->trans('JumpToBoxes').''; print '

'; $sql = "SELECT rowid, file, note FROM ".MAIN_DB_PREFIX."boxes_def"; $sql .= " WHERE file = 'box_external_rss.php'"; $sql .= " ORDER BY note"; dol_syslog("select rss boxes", LOG_DEBUG); $resql = $db->query($sql); if ($resql) { $boxlist = InfoBox::listBoxes($db, 'activated', -1, null); $num = $db->num_rows($resql); $i = 0; while ($i < $num) { $obj = $db->fetch_object($resql); preg_match('/^([0-9]+)/i', $obj->note, $reg); $idrss = $reg[1]; $keyrsstitle = "EXTERNAL_RSS_TITLE_".$idrss; $keyrssurl = "EXTERNAL_RSS_URLRSS_".$idrss; //print "x".$idrss; $rssparser = new RssParser($db); $result = $rssparser->parser(getDolGlobalString($keyrssurl), 5, 300, $conf->externalrss->dir_temp); print "
"; print '
'."\n"; print ''."\n"; print ''."\n"; print ''; print ""; print ''; print ''."\n"; print ''; print '"; print ''; print ''."\n"; print ''; print ""; print ''; print ''."\n"; print ''; print ""; print ""; print ''."\n"; // Logo if ($result > 0 && empty($rss->error)) { print ''; print ""; print ''; print ''."\n"; } // Active $active = _isInBoxList((int) $idrss, $boxlist) ? 'yes' : 'no'; print ''; print ''; print ''; print ''."\n"; print '
".$langs->trans("RSS")." ".($i + 1)."'; print ''; print ''; print ''; print '
'.$langs->trans("Title")."
".$langs->trans("URL")."
".$langs->trans("Status").""; if ($result > 0 && empty($rssparser->error)) { print ''.img_picto($langs->trans("Online"), 'tick', 'class="pictofixedwidth"').$langs->trans("Online").''; } else { print ''.$langs->trans("Offline"); $langs->load("errors"); if ($rssparser->error) { print ' - '.$langs->trans($rssparser->error); } print ''; } print "
".$langs->trans("Logo")."'; $imageurl = $rssparser->getImageUrl(); $linkrss = $rssparser->getLink(); if (!preg_match('/^http/', $imageurl)) { include_once DOL_DOCUMENT_ROOT.'/core/lib/images.lib.php'; if (image_format_supported($imageurl) >= 0) { // If we are sure imageurl is a path to an image file, and if it does not start with http, we append root url to it. $imageurl = $linkrss.$imageurl; } } if ($imageurl && preg_match('/^http/', $imageurl)) { print ''; } else { print $langs->trans("None"); } print '
'.$langs->trans('WidgetAvailable').''.yn($active); print '   -   '; print $langs->trans("JumpToBoxes"); print ''; print '
'."\n"; print "
\n"; $i++; } } else { dol_print_error($db); } // End of page llxFooter(); $db->close(); /** * Check if the given RSS feed if inside the list of boxes/widgets * * @param int $idrss The id of the RSS feed * @param array $boxlist A list with boxes/widgets * @return bool true if the rss feed is inside the box/widget list, otherwise false */ function _isInBoxList($idrss, array $boxlist) { foreach ($boxlist as $box) { if ($box->boxcode === "lastrssinfos" && strpos($box->note, (string) $idrss) !== false) { return true; } } return false; }