diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 4396b5a862c..122c3a6aa7d 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -184,3 +184,96 @@ function dolIncludeHtmlContent($contentfile) $includehtmlcontentopened--; } +/** + * Generate a zip with all data of web site. + * + * @param Website $website Object website + * @return void + */ +function exportWebSite($website) +{ + global $db, $conf; + + dol_mkdir($conf->websites->dir_temp); + $srcdir = $conf->websites->dir_output.'/'.$website->ref; + $destdir = $conf->websites->dir_temp.'/'.$website->ref; + + $arrayreplacement=array(); + + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + + $srcdir = DOL_DATA_ROOT.'/medias/images/'.$website->ref; + $destdir = $conf->websites->dir_temp.'/'.$website->ref.'/medias/images/'.$website->ref; + + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + + // Build sql file + dol_mkdir($conf->websites->dir_temp.'/'.$website->ref.'/export'); + + $filesql = $conf->websites->dir_temp.'/'.$website->ref.'/export/pages.sql'; + $fp = fopen($filesql,"w"); + + $objectpages = new WebsitePage($db); + $listofpages = $objectpages->fetchAll($website->id); + + // Assign ->newid and ->newfk_page + $i=1; + foreach($listofpages as $pageid => $objectpageold) + { + $objectpageold->newid=$i; + $i++; + } + $i=1; + foreach($listofpages as $pageid => $objectpageold) + { + // Search newid + $newfk_page=0; + foreach($listofpages as $pageid2 => $objectpageold2) + { + if ($pageid2 == $objectpageold->fk_page) + { + $newfk_page = $objectpageold2->newid; + break; + } + } + $objectpageold->newfk_page=$newfk_page; + $i++; + } + foreach($listofpages as $pageid => $objectpageold) + { + $line = 'INSERT INTO llx_website_page(rowid, fk_page, fk_website, pageurl, title, description, keyword, status, date_creation, tms, lang, import_key, grabbed_from, content)'; + $line.= " VALUES("; + $line.= $objectpageold->newid."+__MAXROWID__, "; + $line.= ($objectpageold->newfk_page ? $db->escape($objectpageold->newfk_page)."+__MAXROWID__" : "null").", "; + $line.= "__WEBSITE_ID__, "; + $line.= "'".$db->escape($objectpageold->pageurl)."', "; + $line.= "'".$db->escape($objectpageold->title)."', "; + $line.= "'".$db->escape($objectpageold->description)."', "; + $line.= "'".$db->escape($objectpageold->keyword)."', "; + $line.= "'".$db->escape($objectpageold->status)."', "; + $line.= "'".$db->idate($objectpageold->date_creation)."', "; + $line.= "'".$db->idate($objectpageold->date_modification)."', "; + $line.= "'".$db->escape($objectpageold->lang)."', "; + $line.= ($objectpageold->import_key ? "'".$db->escape($objectpageold->import_key)."'" : "null").", "; + $line.= "'".$db->escape($objectpageold->grabbed_from)."', "; + $line.= "'".$db->escape($objectpageold->content)."'"; + $line.= ");"; + $line.= "\n"; + fputs($fp, $line); + } + + fclose($fp); + if (! empty($conf->global->MAIN_UMASK)) + @chmod($filesql, octdec($conf->global->MAIN_UMASK)); + + // Build zip file + $filedir = $conf->websites->dir_temp.'/'.$website->ref; + $fileglob = $conf->websites->dir_temp.'/'.$website->ref.'/export/'.$website->ref.'_export_*.zip'; + $filename = $conf->websites->dir_temp.'/'.$website->ref.'/export/'.$website->ref.'_export_'.dol_print_date(dol_now(),'dayhourlog').'.zip'; + + dol_delete_file($fileglob, 0); + dol_compress_file($filedir, $filename, 'zip'); + + return $filename; +} + diff --git a/htdocs/websites/class/website.class.php b/htdocs/websites/class/website.class.php index 28e54fad1af..2fd86208934 100644 --- a/htdocs/websites/class/website.class.php +++ b/htdocs/websites/class/website.class.php @@ -480,7 +480,8 @@ class Website extends CommonObject } /** - * Load an object from its id and create a new one in database + * Load an object from its id and create a new one in database. + * This copy website directories, regenerate all the pages + alias pages and recreate the medias link. * * @param User $user User making the clone * @param int $fromid Id of object to clone diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php index 1d0bda1ec04..85752a3158f 100644 --- a/htdocs/websites/index.php +++ b/htdocs/websites/index.php @@ -783,6 +783,21 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf } } +// Export site +if (GETPOST('exportsite')) +{ + $fileofzip = exportWebSite($object); + + $file_name = basename($yourfile); + + header("Content-Type: application/zip"); + header("Content-Disposition: attachment; filename=".$file_name); + header("Content-Length: " . filesize($yourfile)); + + readfile($fileofzip); + exit; +} + /* @@ -894,6 +909,7 @@ if (count($object->records) > 0) print ''; print ''; print ''; + print ''; print '   ';