From c78c06776bc6fd7eaba56d3c8bb39c972ff01f70 Mon Sep 17 00:00:00 2001 From: Laurent Destailleur Date: Sun, 5 Nov 2017 03:39:27 +0100 Subject: [PATCH] Fix bug reported by scrutinizer --- htdocs/core/class/commonobject.class.php | 18 ++-- htdocs/core/class/extrafields.class.php | 12 ++- htdocs/core/lib/website.lib.php | 121 ---------------------- htdocs/cron/class/cronjob.class.php | 1 - htdocs/website/class/website.class.php | 126 +++++++++++++++++++++++ htdocs/website/index.php | 2 +- 6 files changed, 146 insertions(+), 134 deletions(-) diff --git a/htdocs/core/class/commonobject.class.php b/htdocs/core/class/commonobject.class.php index 47b27641436..7f73630f7f6 100644 --- a/htdocs/core/class/commonobject.class.php +++ b/htdocs/core/class/commonobject.class.php @@ -5340,8 +5340,9 @@ abstract class CommonObject } } - if ($key == 'ref') $value=$this->getNomUrl(1, '', 0, '', 1); - elseif ($key == 'status') $value=$this->getLibStatut(3); + // Format output value differently according to properties of field + if ($key == 'ref' && method_exists($this, 'getNomUrl')) $value=$this->getNomUrl(1, '', 0, '', 1); + elseif ($key == 'status' && method_exists($this, 'getLibStatut')) $value=$this->getLibStatut(3); elseif ($type == 'date') { $value=dol_print_date($value,'day'); @@ -5382,11 +5383,11 @@ abstract class CommonObject } elseif ($type == 'select') { - $value=$params['options'][$value]; + $value=$param['options'][$value]; } elseif ($type == 'sellist') { - $param_list=array_keys($params['options']); + $param_list=array_keys($param['options']); $InfoFieldList = explode(":", $param_list[0]); $selectkey="rowid"; @@ -5463,7 +5464,7 @@ abstract class CommonObject } elseif ($type == 'radio') { - $value=$params['options'][$value]; + $value=$param['options'][$value]; } elseif ($type == 'checkbox') { @@ -5472,7 +5473,7 @@ abstract class CommonObject if (is_array($value_arr)) { foreach ($value_arr as $keyval=>$valueval) { - $toprint[]='
  • '.$params['options'][$valueval].'
  • '; + $toprint[]='
  • '.$param['options'][$valueval].'
  • '; } } $value='
    '; @@ -5481,7 +5482,7 @@ abstract class CommonObject { $value_arr = explode(',', $value); - $param_list = array_keys($params['options']); + $param_list = array_keys($param['options']); $InfoFieldList = explode(":", $param_list[0]); $selectkey = "rowid"; @@ -6262,8 +6263,11 @@ abstract class CommonObject unset($fieldvalues['rowid']); // The field 'rowid' is reserved field name for autoincrement field so we don't need it into update. $keys=array(); + $values = array(); foreach ($fieldvalues as $k => $v) { $keys[$k] = $k; + $value = $this->fields[$k]; + $values[$k] = $this->quote($v, $value); $tmp[] = $k.'='.$this->quote($v, $this->fields[$k]); } diff --git a/htdocs/core/class/extrafields.class.php b/htdocs/core/class/extrafields.class.php index ca7bed7ff4e..ae704edc2bd 100644 --- a/htdocs/core/class/extrafields.class.php +++ b/htdocs/core/class/extrafields.class.php @@ -975,6 +975,7 @@ class ExtraFields $param_list=array_keys($param['options']); $InfoFieldList = explode(":", $param_list[0]); $parentName=''; + $parentField=''; // 0 : tableName // 1 : label field name // 2 : key fields name (if differ of rowid) @@ -1106,7 +1107,7 @@ class ExtraFields $out.=''; } - if (!empty($InfoFieldList[3])) + if (!empty($InfoFieldList[3]) && $parentField) { $parent = $parentName.':'.$obj->{$parentField}; } @@ -1156,6 +1157,8 @@ class ExtraFields if (is_array($param['options'])) { $param_list = array_keys($param['options']); $InfoFieldList = explode(":", $param_list[0]); + $parentName=''; + $parentField=''; // 0 : tableName // 1 : label field name // 2 : key fields name (if differ of rowid) @@ -1229,6 +1232,7 @@ class ExtraFields $labeltoshow = ''; $obj = $this->db->fetch_object($resql); + $notrans = false; // Several field into label (eq table:code|libelle:rowid) $fields_label = explode('|', $InfoFieldList[1]); if (is_array($fields_label)) { @@ -1269,7 +1273,7 @@ class ExtraFields $data[$obj->rowid]=$labeltoshow; } - if (! empty($InfoFieldList[3])) { + if (! empty($InfoFieldList[3]) && $parentField) { $parent = $parentName . ':' . $obj->{$parentField}; } @@ -1286,12 +1290,11 @@ class ExtraFields print 'Error in request ' . $sql . ' ' . $this->db->lasterror() . '. Check setup of extra parameters.
    '; } } - $out .= ''; } elseif ($type == 'link') { $param_list=array_keys($param['options']); // $param_list='ObjectName:classPath' - $showempty=(($val['notnull'] == 1 && $val['default'] != '')?0:1); + $showempty=(($required && $default != '')?0:1); $out=$form->selectForForms($param_list[0], $keyprefix.$key.$keysuffix, $value, $showempty); } elseif ($type == 'password') @@ -1480,6 +1483,7 @@ class ExtraFields { $value_arr=explode(',',$value); $value=''; + $toprint=array(); if (is_array($value_arr)) { foreach ($value_arr as $keyval=>$valueval) { diff --git a/htdocs/core/lib/website.lib.php b/htdocs/core/lib/website.lib.php index 1810e32868f..d32c6025e94 100644 --- a/htdocs/core/lib/website.lib.php +++ b/htdocs/core/lib/website.lib.php @@ -192,127 +192,6 @@ function dolIncludeHtmlContent($contentfile) $includehtmlcontentopened--; } -/** - * Generate a zip with all data of web site. - * - * @param Website $website Object website - * @return string Path to file with zip - */ -function exportWebSite($website) -{ - global $db, $conf; - - dol_mkdir($conf->website->dir_temp); - $srcdir = $conf->website->dir_output.'/'.$website->ref; - $destdir = $conf->website->dir_temp.'/'.$website->ref; - - $arrayreplacement=array(); - - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); - - $srcdir = DOL_DATA_ROOT.'/medias/images/'.$website->ref; - $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/images/'.$website->ref; - - dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); - - // Build sql file - dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/export'); - - $filesql = $conf->website->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->website->dir_temp.'/'.$website->ref; - $fileglob = $conf->website->dir_temp.'/'.$website->ref.'/export/website_'.$website->ref.'-*.zip'; - $filename = $conf->website->dir_temp.'/'.$website->ref.'/export/website_'.$website->ref.'-'.dol_print_date(dol_now(),'dayhourlog').'.zip'; - - dol_delete_file($fileglob, 0); - dol_compress_file($filedir, $filename, 'zip'); - - return $filename; -} - - -/** - * Open a zip with all data of web site and load it into database. - * - * @param string $pathtofile Path of zip file - * @return int <0 if KO, >0 if OK - */ -function importWebSite($pathtofile) -{ - global $db; - - $result = 0; - - $filename = basename($pathtofile); - if (! preg_match('/^website_(.*)-(.*)$/', $filename, $reg)) - { - $this->errors[]='Bad format for filename '.$filename.'. Must be website_XXX-VERSION.'; - return -1; - } - - $websitecode = $reg[1]; - - $sql = "INSERT INTO ".MAIN_DB_PREFIX."website(ref, entity, description, status) values('".$websitecode."', ".$conf->entity.", 'Portal to sell your SaaS. Do not remove this entry.', 1)"; - $resql = $db->query($sql); - - - return $result; -} /** diff --git a/htdocs/cron/class/cronjob.class.php b/htdocs/cron/class/cronjob.class.php index 3ebf3f22d02..c9d195214db 100644 --- a/htdocs/cron/class/cronjob.class.php +++ b/htdocs/cron/class/cronjob.class.php @@ -1118,7 +1118,6 @@ class Cronjob extends CommonObject $this->lastoutput = ''; // Will be filled later from $output_arr $this->lastresult = $retval; $retval = $this->lastresult; - $error++; } } if ($execmethod == 2) // With this method, there is no way to get the return code, only output diff --git a/htdocs/website/class/website.class.php b/htdocs/website/class/website.class.php index c63aee5b9b2..70162c4c863 100644 --- a/htdocs/website/class/website.class.php +++ b/htdocs/website/class/website.class.php @@ -758,5 +758,131 @@ class Website extends CommonObject } + + /** + * Generate a zip with all data of web site. + * + * @return string Path to file with zip + */ + function exportWebSite() + { + global $conf; + + $website = $this; + + dol_mkdir($conf->website->dir_temp); + $srcdir = $conf->website->dir_output.'/'.$website->ref; + $destdir = $conf->website->dir_temp.'/'.$website->ref; + + $arrayreplacement=array(); + + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + + $srcdir = DOL_DATA_ROOT.'/medias/images/'.$website->ref; + $destdir = $conf->website->dir_temp.'/'.$website->ref.'/medias/images/'.$website->ref; + + dolCopyDir($srcdir, $destdir, 0, 1, $arrayreplacement); + + // Build sql file + dol_mkdir($conf->website->dir_temp.'/'.$website->ref.'/export'); + + $filesql = $conf->website->dir_temp.'/'.$website->ref.'/export/pages.sql'; + $fp = fopen($filesql,"w"); + + $objectpages = new WebsitePage($this->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 ? $this->db->escape($objectpageold->newfk_page)."+__MAXROWID__" : "null").", "; + $line.= "__WEBSITE_ID__, "; + $line.= "'".$this->db->escape($objectpageold->pageurl)."', "; + $line.= "'".$this->db->escape($objectpageold->title)."', "; + $line.= "'".$this->db->escape($objectpageold->description)."', "; + $line.= "'".$this->db->escape($objectpageold->keyword)."', "; + $line.= "'".$this->db->escape($objectpageold->status)."', "; + $line.= "'".$this->db->idate($objectpageold->date_creation)."', "; + $line.= "'".$this->db->idate($objectpageold->date_modification)."', "; + $line.= "'".$this->db->escape($objectpageold->lang)."', "; + $line.= ($objectpageold->import_key ? "'".$this->db->escape($objectpageold->import_key)."'" : "null").", "; + $line.= "'".$this->db->escape($objectpageold->grabbed_from)."', "; + $line.= "'".$this->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->website->dir_temp.'/'.$website->ref; + $fileglob = $conf->website->dir_temp.'/'.$website->ref.'/export/website_'.$website->ref.'-*.zip'; + $filename = $conf->website->dir_temp.'/'.$website->ref.'/export/website_'.$website->ref.'-'.dol_print_date(dol_now(),'dayhourlog').'.zip'; + + dol_delete_file($fileglob, 0); + dol_compress_file($filedir, $filename, 'zip'); + + return $filename; + } + + + /** + * Open a zip with all data of web site and load it into database. + * + * @param string $pathtofile Path of zip file + * @return int <0 if KO, Id of new website if OK + */ + function importWebSite($pathtofile) + { + global $conf; + + $result = 0; + + $object = new Website($this->db); + + $filename = basename($pathtofile); + if (! preg_match('/^website_(.*)-(.*)$/', $filename, $reg)) + { + $this->errors[]='Bad format for filename '.$filename.'. Must be website_XXX-VERSION.'; + return -1; + } + + $websitecode = $reg[1]; + + $sql = "INSERT INTO ".MAIN_DB_PREFIX."website(ref, entity, description, status) values('".$websitecode."', ".$conf->entity.", 'Portal to sell your SaaS. Do not remove this entry.', 1)"; + $resql = $this->db->query($sql); + + + return $result; + } + } diff --git a/htdocs/website/index.php b/htdocs/website/index.php index 45867093722..79eca309e59 100644 --- a/htdocs/website/index.php +++ b/htdocs/website/index.php @@ -1062,7 +1062,7 @@ if (($action == 'updatesource' || $action == 'updatecontent' || $action == 'conf // Export site if (GETPOST('exportsite')) { - $fileofzip = exportWebSite($object); + $fileofzip = $object->exportWebSite(); $file_name = basename($fileofzip);