25if (!defined(
'NOSESSION')) {
26 define(
'NOSESSION',
'1');
29$sapi_type = php_sapi_name();
30$script_file = basename(__FILE__);
34if (substr($sapi_type, 0, 3) ==
'cgi') {
35 echo
"Error: You are using PHP for CGI. To execute ".$script_file.
" from command line, you must use PHP for CLI mode.\n";
40define(
'EVEN_IF_ONLY_LOGIN_ALLOWED', 1);
44$mode = empty($argv[1]) ?
'' : $argv[1];
45$websiteref = empty($argv[2]) ?
'' : $argv[2];
46$joomlaserverinfo = empty($argv[3]) ?
'' : $argv[3];
47$image =
'image/__WEBSITE_KEY__/images/stories/dolibarr.png';
49$max = (!isset($argv[4]) || (empty($argv[4]) && $argv[4] !==
'0')) ?
'10' : $argv[4];
50$excludeid = (empty($argv[5]) ?
'' : $argv[5]);
51$forcelang = (empty($argv[6]) ?
'' : $argv[6]);
53if (empty($argv[3]) || !in_array($argv[1], array(
'test',
'confirm')) || empty($websiteref)) {
54 print
'***** '.$script_file.
' *****'.
"\n";
55 print
"Usage: $script_file (test|confirm) website login:pass@serverjoomla/tableprefix/databasejoomla [nbmaxrecord]\n";
57 print
"Load joomla news and create them into Dolibarr database (if they don't already exist).\n";
61require $path.
"../../htdocs/master.inc.php";
62include_once DOL_DOCUMENT_ROOT.
'/website/class/website.class.php';
63include_once DOL_DOCUMENT_ROOT.
'/website/class/websitepage.class.php';
64include_once DOL_DOCUMENT_ROOT.
'/core/lib/website2.lib.php';
66$hookmanager->initHooks(array(
'cli'));
75if (!empty($dolibarr_main_db_readonly)) {
76 print
"Error: instance in read-onyl mode\n";
80$joomlaserverinfoarray = preg_split(
'/(:|@|\/)/', $joomlaserverinfo);
81$joomlalogin = $joomlaserverinfoarray[0];
82$joomlapass = $joomlaserverinfoarray[1];
83$joomlahost = $joomlaserverinfoarray[2];
84$joomlaprefix = $joomlaserverinfoarray[3];
85$joomladatabase = $joomlaserverinfoarray[4];
90$result = $website->fetch(0, $websiteref);
92 print
'Error, web site '.$websiteref.
' not found'.
"\n";
95$websiteid = $website->id;
98$dbjoomla =
getDoliDBInstance(
'mysqli', $joomlahost, $joomlalogin, $joomlapass, $joomladatabase, $joomlaport);
99if ($dbjoomla->error) {
100 dol_print_error($dbjoomla,
"host=".$joomlahost.
", port=".$joomlaport.
", user=".$joomlalogin.
", databasename=".$joomladatabase.
", ".$dbjoomla->error);
104$sql =
'SELECT c.id, c.title, c.alias, c.created, c.introtext, `fulltext`, c.metadesc, c.metakey, c.language, c.created, c.publish_up, u.username FROM '.$joomlaprefix.
'_content as c';
105$sql .=
' LEFT JOIN '.$joomlaprefix.
'_users as u ON u.id = c.created_by';
106$sql .=
' WHERE featured = 1';
107$sql .=
' AND c.id NOT IN ('.$excludeid.
')';
108$sql .=
' ORDER BY publish_up ASC';
109$resql = $dbjoomla->query($sql);
116$blogpostheader = file_get_contents($path.
'blogpost-header.txt');
117if ($blogpostheader ===
false) {
118 print
"Error: Failed to load file content of 'blogpost-header.txt'\n";
121$blogpostfooter = file_get_contents($path.
'blogpost-footer.txt');
122if ($blogpostfooter ===
false) {
123 print
"Error: Failed to load file content of 'blogpost-footer.txt'\n";
134while ($obj = $dbjoomla->fetch_object($resql)) {
138 $alias = $obj->alias;
139 $title = $obj->title;
142 if (empty($description)) {
147 if ($blogpostheader) {
148 $htmltext .= $blogpostheader.
"\n";
150 $htmltext .=
'<section id="mysectionnewsintro" contenteditable="true">'.
"\n";
151 $htmltext .= $obj->introtext;
152 $htmltext .=
'</section>'.
"\n";
153 if ($obj->fulltext) {
154 $htmltext .=
'<section id="mysectionnewscontent" contenteditable="true">'.
"\n";
155 $htmltext .=
'<br>'.
"\n".
'<hr>'.
"\n".
'<br>'.
"\n";
156 $htmltext .= $obj->fulltext;
157 $htmltext .=
"</section>";
159 if ($blogpostfooter) {
160 $htmltext .=
"\n".$blogpostfooter;
163 $language = ($forcelang ? $forcelang : ($obj->language && $obj->language !=
'*' ? $obj->language :
'en'));
164 $keywords = $obj->metakey;
165 $author_alias = $obj->username;
167 $date_creation = $dbjoomla->jdate($obj->publish_up);
169 print
'#'.$i.
' id='.$id.
' '.$title.
' lang='.$language.
' keywords='.$keywords.
' importid='.$importid.
"\n";
171 $sqlinsert =
'INSERT INTO '.MAIN_DB_PREFIX.
'website_page(fk_website, pageurl, aliasalt, title, description, keywords, content, status, type_container, lang, import_key, image, date_creation, author_alias)';
172 $sqlinsert .=
" VALUES(".$websiteid.
", '".$db->escape($alias).
"', '', '".$db->escape($title).
"', '".$db->escape($description).
"', '".$db->escape($keywords).
"', ";
173 $sqlinsert .=
" '".$db->escape($htmltext).
"', '1', 'blogpost', '".$db->escape($language).
"', '".$db->escape($importid).
"', '".$db->escape($image).
"', '".$db->idate($date_creation).
"', '".$db->escape($author_alias).
"')";
174 print $sqlinsert.
"\n";
176 $result = $db->query($sqlinsert);
178 print
'ERROR: '.$db->lasterrno.
": ".$sqlinsert.
"\n";
179 if ($db->lasterrno !=
'DB_ERROR_RECORD_ALREADY_EXISTS') {
185 $pageid = $db->last_insert_id(MAIN_DB_PREFIX.
'website_page');
188 global $dolibarr_main_data_root;
189 $pathofwebsite = $dolibarr_main_data_root.
'/website/'.$websiteref;
190 $filetpl = $pathofwebsite.
'/page'.$pageid.
'.tpl.php';
192 $websitepage->fetch($pageid);
196 print
"Insert done - pageid = ".$pageid.
"\n";
200 if ($max && $i >= $max) {
201 print
'Nb max of record ('.$max.
') reached. We stop now.'.
"\n";
207if ($mode ==
'confirm' && !$error) {
209 print $nbalreadyexists.
" page(s) already exists.\n";
210 print $nbimported.
" page(s) imported with importid=".$importid.
"\n";
213 print
"Rollback (mode=test)\n";
dol_string_nohtmltag($stringtoclean, $removelinefeed=1, $pagecodeto='UTF-8', $strip_tags=0, $removedoublespaces=1)
Clean a string from all HTML tags and entities.
dol_now($mode='auto')
Return date for now.
dol_print_date($time, $format='', $tzoutput='auto', $outputlangs=null, $encodetooutput=false)
Output date in a string format according to outputlangs (or langs if not defined).
dol_print_error($db=null, $error='', $errors=null)
Displays error message system with all the information to facilitate the diagnosis and the escalation...
dol_trunc($string, $size=40, $trunc='right', $stringencoding='UTF-8', $nodot=0, $display=0)
Truncate a string to a particular length adding '…' if string larger than length.
getDoliDBInstance($type, $host, $user, $pass, $name, $port)
Return a DoliDB instance (database handler).
dolSavePageContent($filetpl, Website $object, WebsitePage $objectpage, $backupold=0)
Save content of a page on disk (page name is generally ID_of_page.php).