diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php
index bab4f6c5487..2c563628858 100644
--- a/htdocs/core/lib/website.lib.php
+++ b/htdocs/core/lib/website.lib.php
@@ -284,17 +284,23 @@ function exportWebSite($website)
*
* @param Website $object Object website
* @param WebsitePage $objectpage Object website page
- * @param string $urltograb URL to grab
+ * @param string $urltograb URL to grab (exemple: http://www.nltechno.com/ or http://www.nltechno.com/dir1/ or http://www.nltechno.com/dir1/mapage1)
* @param string $tmp Content to parse
* @param string $action Var $action
- * @param string $modifylinks 0=Do not modify content, 1=Replace links with a link to
+ * @param string $modifylinks 0=Do not modify content, 1=Replace links with a link to viewimage
* @return void
*/
function getAllImages($object, $objectpage, $urltograb, &$tmp, &$action, $modifylinks=0)
{
global $conf;
- preg_match_all('/"]+)"([^>]*)>/i', $objectpage->content, $regs);
+ $alreadygrabbed=array();
+
+ if (preg_match('/\/$/', $urltograb)) $urltograb.='.';
+ $urltograb = dirname($urltograb); // So urltograb is now http://www.nltechno.com or http://www.nltechno.com/dir1
+
+ preg_match_all('/
"]+)"([^>]*)>/i', $tmp, $regs);
+
foreach ($regs[0] as $key => $val)
{
$urltograbbis = $urltograb.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key];
@@ -307,29 +313,100 @@ function getAllImages($object, $objectpage, $urltograb, &$tmp, &$action, $modify
$filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
}
- $tmpgeturl = getURLContent($urltograbbis);
- if ($tmpgeturl['curl_error_no'])
- {
- $error++;
- setEventMessages($tmpgeturl['curl_error_msg'], null, 'errors');
- $action='create';
- }
- else
- {
- dol_mkdir(dirname($filetosave));
+ $filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
- $fp = fopen($filetosave, "w");
- fputs($fp, $tmpgeturl['content']);
- fclose($fp);
- if (! empty($conf->global->MAIN_UMASK))
- @chmod($file, octdec($conf->global->MAIN_UMASK));
+ // Clean the aa/bb/../cc into aa/cc
+ $filetosave = preg_replace('/\/[^\/]+\/\.\./', '', $filetosave);
+ $filename = preg_replace('/\/[^\/]+\/\.\./', '', $filename);
+
+ //var_dump($filetosave);
+ //var_dump($filename);
+ //exit;
+
+ if (empty($alreadygrabbed[$urltograbbis]))
+ {
+ $tmpgeturl = getURLContent($urltograbbis);
+ if ($tmpgeturl['curl_error_no'])
+ {
+ $error++;
+ setEventMessages($tmpgeturl['curl_error_msg'], null, 'errors');
+ $action='create';
+ }
+ else
+ {
+ $alreadygrabbed[$urltograbbis]=1; // Track that file was alreay grabbed.
+
+ dol_mkdir(dirname($filetosave));
+
+ $fp = fopen($filetosave, "w");
+ fputs($fp, $tmpgeturl['content']);
+ fclose($fp);
+ if (! empty($conf->global->MAIN_UMASK))
+ @chmod($file, octdec($conf->global->MAIN_UMASK));
+ }
}
if ($modifylinks)
{
- $filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
$tmp = preg_replace('/'.preg_quote($regs[0][$key],'/').'/i', '
', $tmp);
}
}
+
+ // Search X in "background...url(X)"
+ preg_match_all('/background([^\.\/\(;]+)url\([\"\']?([^\)\"\']*)[\"\']?\)/i', $tmp, $regs);
+
+ foreach ($regs[0] as $key => $val)
+ {
+ $urltograbbis = $urltograb.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key];
+
+ $linkwithoutdomain = $regs[2][$key];
+ $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $regs[2][$key])?'':'/').$regs[2][$key];
+
+ if (preg_match('/^http/', $regs[2][$key]))
+ {
+ $urltograbbis = $regs[2][$key];
+ $linkwithoutdomain = preg_replace('/^https?:\/\/[^\/]+\//i', '', $regs[2][$key]);
+ $filetosave = $conf->medias->multidir_output[$conf->entity].'/image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
+ }
+
+ $filename = 'image/'.$object->ref.'/'.$objectpage->pageurl.(preg_match('/^\//', $linkwithoutdomain)?'':'/').$linkwithoutdomain;
+
+ // Clean the aa/bb/../cc into aa/cc
+ $filetosave = preg_replace('/\/[^\/]+\/\.\./', '', $filetosave);
+ $filename = preg_replace('/\/[^\/]+\/\.\./', '', $filename);
+
+ //var_dump($filetosave);
+ //var_dump($filename);
+ //exit;
+
+ if (empty($alreadygrabbed[$urltograbbis]))
+ {
+ $tmpgeturl = getURLContent($urltograbbis);
+ if ($tmpgeturl['curl_error_no'])
+ {
+ $error++;
+ setEventMessages($tmpgeturl['curl_error_msg'], null, 'errors');
+ $action='create';
+ }
+ else
+ {
+ $alreadygrabbed[$urltograbbis]=1; // Track that file was alreay grabbed.
+
+ dol_mkdir(dirname($filetosave));
+
+ $fp = fopen($filetosave, "w");
+ fputs($fp, $tmpgeturl['content']);
+ fclose($fp);
+ if (! empty($conf->global->MAIN_UMASK))
+ @chmod($file, octdec($conf->global->MAIN_UMASK));
+ }
+ }
+
+ if ($modifylinks)
+ {
+ $tmp = preg_replace('/'.preg_quote($regs[0][$key],'/').'/i', 'background'.$regs[1][$key].'url("'.DOL_URL_ROOT.'/viewimage.php?modulepart=medias&file='.$filename.'")', $tmp);
+ }
+ }
+
}
diff --git a/htdocs/websites/class/website.class.php b/htdocs/websites/class/website.class.php
index 8a1b30d936d..8083407bdda 100644
--- a/htdocs/websites/class/website.class.php
+++ b/htdocs/websites/class/website.class.php
@@ -184,10 +184,9 @@ class Website extends CommonObject
/**
* Load object in memory from the database
*
- * @param int $id Id object
- * @param string $ref Ref
- *
- * @return int <0 if KO, 0 if not found, >0 if OK
+ * @param int $id Id object
+ * @param string $ref Ref
+ * @return int <0 if KO, 0 if not found, >0 if OK
*/
public function fetch($id, $ref = null)
{
@@ -236,9 +235,6 @@ class Website extends CommonObject
if ($numrows > 0) {
// Lines
$this->fetchLines();
- {
- return -3;
- }
}
if ($numrows > 0) {
diff --git a/htdocs/websites/class/websitepage.class.php b/htdocs/websites/class/websitepage.class.php
index ae10398795c..76526f29c0d 100644
--- a/htdocs/websites/class/websitepage.class.php
+++ b/htdocs/websites/class/websitepage.class.php
@@ -303,7 +303,27 @@ class WebsitePage extends CommonObject
*/
public function delete(User $user, $notrigger = false)
{
- return $this->deleteCommon($user, $trigger);
+ $result = $this->deleteCommon($user, $trigger);
+
+ if ($result > 0)
+ {
+ $websiteobj=new Website($this->db);
+ $result = $websiteobj->fetch($this->fk_website);
+
+ if ($result > 0)
+ {
+ global $dolibarr_main_data_root;
+ $pathofwebsite=$dolibarr_main_data_root.'/websites/'.$websiteobj->ref;
+
+ $filealias=$pathofwebsite.'/'.$this->pageurl.'.php';
+ $filetpl=$pathofwebsite.'/page'.$this->id.'.tpl.php';
+
+ dol_delete_file($filealias);
+ dol_delete_file($filetpl);
+ }
+ }
+
+ return $result;
}
/**
diff --git a/htdocs/websites/index.php b/htdocs/websites/index.php
index 3094ef3b5b4..18941f20823 100644
--- a/htdocs/websites/index.php
+++ b/htdocs/websites/index.php
@@ -231,6 +231,16 @@ if ($action == 'add')
if ($urltograb)
{
+ // Clean url to grab, so url can be
+ // http://www.example.com/ or http://www.example.com/dir1/ or http://www.example.com/dir1/aaa
+ $urltograbwithoutdomainandparam = preg_replace('/^https?:\/\/[^\/]+\/?/i', '', $urltograb);
+ $urltograbwithoutdomainandparam = preg_replace('/\?.*$/', '', $urltograbwithoutdomainandparam);
+ if (empty($urltograbwithoutdomainandparam) && ! preg_match('/\/$/', $urltograb))
+ {
+ $urltograb.='/';
+ }
+ $urltograbdirwithoutslash = dirname($urltograb.'.');
+
include_once DOL_DOCUMENT_ROOT.'/core/lib/geturl.lib.php';
$tmp = getURLContent($urltograb);
@@ -245,12 +255,11 @@ if ($action == 'add')
preg_match('/