diff --git a/htdocs/ecm/docdir.php b/htdocs/ecm/docdir.php index ae104ad4b328b02fd22e3a13080d9ca3e6f27831..bbae295b3619ea2300c8dc91b872b5eea9818b7a 100644 --- a/htdocs/ecm/docdir.php +++ b/htdocs/ecm/docdir.php @@ -107,7 +107,8 @@ if ($_POST["action"] == 'add' && $user->rights->ecm->setup) } else { - $mesg='<div class="error">Error '.$langs->trans($ecmdir->error).'</div>'; + $langs->load("errors"); + $mesg='<div class="error">'.$langs->trans($ecmdir->error).'</div>'; $_GET["action"] = "create"; } } @@ -199,7 +200,6 @@ if (! $_GET["action"] || $_GET["action"] == 'delete_section') // Construit fiche rubrique -print $user->rights->ecm->setup; // Actions buttons print '<div class="tabsAction">'; if ($user->rights->ecm->setup) diff --git a/htdocs/ecm/ecmdirectory.class.php b/htdocs/ecm/ecmdirectory.class.php index f6577e13fb15acc487d0df849e812e31e9020b38..2969466264dacf32e256de9442750322142e85b5 100644 --- a/htdocs/ecm/ecmdirectory.class.php +++ b/htdocs/ecm/ecmdirectory.class.php @@ -83,50 +83,93 @@ class EcmDirectory // extends CommonObject $this->fk_user_c=$user->id; if ($this->fk_parent <= 0) $this->fk_parent=0; - // Check parameters - // Put here code to add control on parameters values - - // Insert request - $sql = "INSERT INTO ".MAIN_DB_PREFIX."ecm_directories("; - $sql.= "label,"; - $sql.= "fk_parent,"; - $sql.= "description,"; - $sql.= "cachenbofdoc,"; - $sql.= "date_c,"; - $sql.= "fk_user_c"; - $sql.= ") VALUES ("; - $sql.= " '".addslashes($this->label)."',"; - $sql.= " '".$this->fk_parent."',"; - $sql.= " '".addslashes($this->description)."',"; - $sql.= " ".($this->cachenbofdoc).","; - $sql.= " ".$this->db->idate($this->date_c).","; - $sql.= " '".$this->fk_user_c."'"; - $sql.= ")"; + // Check if same directory does not exists with this name + $relativepath=$this->label; + if ($this->fk_parent) + { + $parent = new ECMDirectory($this->db); + $parent->fetch($this->fk_parent); + $relativepath=$parent->getRelativePath().$relativepath; + } + $relativepath=eregi_replace('[\/]+','/',$relativepath); // Avoid duplicate / or \ + //print $relativepath.'<br>'; - dolibarr_syslog("EcmDirectories::create sql=".$sql, LOG_DEBUG); - $resql=$this->db->query($sql); - if ($resql) - { - $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."ecm_directories"); - - $dir=$conf->ecm->dir_output.'/'.$this->getRelativePath(); - $result=create_exdir($dir); - - // Appel des triggers - include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); - $interface=new Interfaces($this->db); - $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); - if ($result < 0) { $error++; $this->errors=$interface->errors; } - // Fin appel triggers + $cat = new ECMDirectory($this->db); + $cate_arbo = $cat->get_full_arbo(1); + $pathfound=0; + foreach ($cate_arbo as $key => $categ) + { + $path=eregi_replace('[ -><\/]+','/',$categ['fulllabel']); + //print $path.'<br>'; + if ($path == $relativepath) + { + $pathfound=1; + break; + } + } - return $this->id; - } - else - { - $this->error="Error ".$this->db->lasterror(); - dolibarr_syslog("EcmDirectories::create ".$this->error, LOG_ERR); - return -1; - } + if ($pathfound) + { + $this->error="ErrorDirAlreadyExists"; + dolibarr_syslog("EcmDirectories::create ".$this->error, LOG_WARNING); + return -1; + } + else + { + $this->db->begin(); + + // Insert request + $sql = "INSERT INTO ".MAIN_DB_PREFIX."ecm_directories("; + $sql.= "label,"; + $sql.= "fk_parent,"; + $sql.= "description,"; + $sql.= "cachenbofdoc,"; + $sql.= "date_c,"; + $sql.= "fk_user_c"; + $sql.= ") VALUES ("; + $sql.= " '".addslashes($this->label)."',"; + $sql.= " '".$this->fk_parent."',"; + $sql.= " '".addslashes($this->description)."',"; + $sql.= " ".($this->cachenbofdoc).","; + $sql.= " ".$this->db->idate($this->date_c).","; + $sql.= " '".$this->fk_user_c."'"; + $sql.= ")"; + + dolibarr_syslog("EcmDirectories::create sql=".$sql, LOG_DEBUG); + $resql=$this->db->query($sql); + if ($resql) + { + $this->id = $this->db->last_insert_id(MAIN_DB_PREFIX."ecm_directories"); + + $dir=$conf->ecm->dir_output.'/'.$this->getRelativePath(); + $result=create_exdir($dir); + + // Appel des triggers + include_once(DOL_DOCUMENT_ROOT . "/interfaces.class.php"); + $interface=new Interfaces($this->db); + $result=$interface->run_triggers('MYOBJECT_CREATE',$this,$user,$langs,$conf); + if ($result < 0) { $error++; $this->errors=$interface->errors; } + // Fin appel triggers + + if (! $error) + { + $this->db->commit(); + return $this->id; + } + else + { + $this->db->rollback(); + return -1; + } + } + else + { + $this->error="Error ".$this->db->lasterror(); + dolibarr_syslog("EcmDirectories::create ".$this->error, LOG_ERR); + $this->db->rollback(); + return -1; + } + } } /** diff --git a/htdocs/ecm/index.php b/htdocs/ecm/index.php index 923740ae7352ea8eeb5dba374dd203c317847aed..e5287b4697b0a9ec4ddf22fa240883ff433b33d0 100644 --- a/htdocs/ecm/index.php +++ b/htdocs/ecm/index.php @@ -336,6 +336,7 @@ else print '</div>'; */ +print '<br>'; // End of page $db->close(); diff --git a/htdocs/langs/en_US/errors.lang b/htdocs/langs/en_US/errors.lang index a78e5e5f59ea5e4f8bdf5d30ffac07d3e1597c10..107bb349b4331d77ad4f5400388c73f6268bc6ee 100644 --- a/htdocs/langs/en_US/errors.lang +++ b/htdocs/langs/en_US/errors.lang @@ -18,9 +18,10 @@ ErrorFailedToWriteInDir=Failed to write in directory %s UserCannotBeDelete=User can not be deleted. May be it is associated on Dolibarr entities. ErrorFieldsRequired=Some required fields were not filled. ErrorFailedToCreateDir=Failed to create a directory. Check that Web server user has permissions to write into Dolibarr documents directory. If parameter <b>safe_mode</b> is enabled on this PHP, check that Dolibarr php files owns to web server user (or group). -ErrorNoMailDefinedForThisUser=No mail defined for this user +ErrorNoMailDefinedForThisUser=No mail defined for this user ErrorFeatureNeedJavascript=This feature need javascript to be activated to work. Change this in setup - display. ErrorTopMenuMustHaveAParentWithId0=A menu of type 'Top' can't have a parent menu. Put 0 in parent menu or choose a menu of type 'Left'. ErrorLeftMenuMustHaveAParentId=A menu of type 'Left' must have a parent id. ErrorGenbarCodeNotfound=File not found (Bad path, wrong permissions or access denied by openbasedir parameter) ErrorFunctionNotAvailableInPHP=Function <b>%s</b> is required for this feature but is not available in this version/setup of PHP. +ErrorDirAlreadyExists=A directory with this name already exists. \ No newline at end of file diff --git a/htdocs/langs/fr_FR/errors.lang b/htdocs/langs/fr_FR/errors.lang index a9d2a8ac707ca207edb409bde60f52042e63e87d..f81b1bd3f1db2a4b1371666374b52df22f4077d6 100644 --- a/htdocs/langs/fr_FR/errors.lang +++ b/htdocs/langs/fr_FR/errors.lang @@ -18,9 +18,10 @@ ErrorFailedToWriteInDir=Impossible d' UserCannotBeDelete=L'utilisateur ne peut pas etre supprim�e. Peut-�tre est-il associ� � des �l�ments de Dolibarr. ErrorFieldsRequired=Des champs obligatoires n'ont pas �t� renseign�s ErrorFailedToCreateDir=Echec a la creation d'un repertoire. Verifiez que le user du serveur Web a bien les droits d'ecriture dans les repertoires documents de Dolibarr. Si le parametre <b>safe_mode</b> a �t� activ� sur ce PHP, v�rifier que les fichiers php dolibarr appartiennent � l'utilisateur du serveur Web. -ErrorNoMailDefinedForThisUser=EMail non defini pour cet utilisateur -ErrorFeatureNeedJavascript=Cette fonctionnalit� a besoin de javascript activ� pour fonctionner. Modifier dans configuration - affichage. +ErrorNoMailDefinedForThisUser=EMail non defini pour cet utilisateur +ErrorFeatureNeedJavascript=Cette fonctionnalit� a besoin de javascript activ� pour fonctionner. Modifier dans configuration - affichage. ErrorTopMenuMustHaveAParentWithId0=Un menu de type 'Top' ne peut avoir de menu p�re. Mettre 0 dans l'id p�re ou choisir un menu de type 'Left'. ErrorLeftMenuMustHaveAParentId=Un menu de type 'Left' doit avoir un id de p�re. ErrorGenbarCodeNotfound=Fichier introuvable (Mauvais chemin, permissions incorrectes ou acc�s interdit par le param�tre openbasedir) -ErrorFunctionNotAvailableInPHP=La fonction <b>%s</b> est requise pour cette fonctionnalit� mais n'est pas disponible dans cette version/installation de PHP. \ No newline at end of file +ErrorFunctionNotAvailableInPHP=La fonction <b>%s</b> est requise pour cette fonctionnalit� mais n'est pas disponible dans cette version/installation de PHP. +ErrorDirAlreadyExists=Un r�pertoire portant ce nom existe d�j�. \ No newline at end of file