//var_dump($sqltree); $adirwascreated = 1; } else { dol_syslog("Failed to create directory " . $ecmdirtmp->label, LOG_ERR); } } else { $txt = "Parent of " . $dirdesc['fullname'] . " not found"; dol_syslog($txt); //print $txt."<br>\n"; } } } // Loop now on each sql tree to check if dir exists foreach ($sqltree as $dirdesc) { $dirtotest = $conf->ecm->dir_output . '/' . $dirdesc['fullrelativename']; if (!dol_is_dir($dirtotest)) { $ecmdirtmp->id = $dirdesc['id']; $ecmdirtmp->delete($user, 'databaseonly'); //exit; } } $sql = "UPDATE " . MAIN_DB_PREFIX . "ecm_directories set cachenbofdoc = -1 WHERE cachenbofdoc < 0"; // If pb into cahce counting, we set to value -1 = "unknown" dol_syslog("sql = " . $sql); $db->query($sql); // If a directory was added, the fulltree array is not correctly completed and sorted, so we clean // it to be sure that fulltree array is not used without reloading it. if ($adirwascreated) { $sqltree = null; } }
/* * Action */ // None /* * View */ if (!isset($mode) || $mode != 'noajax') { // Ajout directives pour resoudre bug IE header('Cache-Control: Public, must-revalidate'); header('Pragma: public'); top_httphead(); } $type = 'directory'; // This test if file exists should be useless. We keep it to find bug more easily if (!dol_is_dir($upload_dir)) { // dol_mkdir($upload_dir); /* $langs->load("install"); dol_print_error(0,$langs->trans("ErrorDirDoesNotExists",$upload_dir)); exit;*/ } print '<!-- TYPE=' . $type . ' -->' . "\n"; print '<!-- Page called with mode=' . $mode . ' url=' . $_SERVER["PHP_SELF"] . '?' . $_SERVER["QUERY_STRING"] . ' -->' . "\n"; $param = ''; $param .= ($sortfield ? '&sortfield=' . $sortfield : '') . ($sortorder ? '&sortorder=' . $sortorder : ''); $url = DOL_URL_ROOT . '/ecm/index.php'; // Dir scan if ($type == 'directory') { $formfile = new FormFile($db); $maxlengthname = 40; // Right area. If module is defined, we are in automatic ecm.
/** * Migrate file from old path to new one for product $product * * @param Product $product Object product * @return void */ function migrate_product_photospath($product) { global $conf; $dir = $conf->product->multidir_output[$product->entity]; $origin = $dir . '/' . get_exdir($product->id, 2) . $product->id . "/photos"; $destin = $dir . '/' . dol_sanitizeFileName($product->ref); $error = 0; $origin_osencoded = dol_osencode($origin); $destin_osencoded = dol_osencode($destin); dol_mkdir($destin); if (dol_is_dir($origin)) { $handle = opendir($origin_osencoded); if (is_resource($handle)) { while (($file = readdir($handle)) != false) { if ($file != '.' && $file != '..' && is_dir($origin_osencoded . '/' . $file)) { $thumbs = opendir($origin_osencoded . '/' . $file); if (is_resource($thumbs)) { dol_mkdir($destin . '/' . $file); while (($thumb = readdir($thumbs)) != false) { dol_move($origin . '/' . $file . '/' . $thumb, $destin . '/' . $file . '/' . $thumb); } // dol_delete_dir($origin.'/'.$file); } } else { if (dol_is_file($origin . '/' . $file)) { dol_move($origin . '/' . $file, $destin . '/' . $file); } } } } } }
} else { $error++; } } if (!$error) { setEventMessage($langs->trans("SetupIsReadyForUse")); } } /* * View */ // Set dir where external modules are installed if (!dol_is_dir($dirins)) { dol_mkdir($dirins); } $dirins_ok = dol_is_dir($dirins); $wikihelp = 'EN:Installation_-_Upgrade|FR:Installation_-_Mise_à_jour|ES:Instalación_-_Actualización'; llxHeader('', $langs->trans("Upgrade"), $wikihelp); print_fiche_titre($langs->trans("Upgrade"), '', 'title_setup'); print $langs->trans("CurrentVersion") . ' : <b>' . DOL_VERSION . '</b><br>'; $result = getURLContent('http://sourceforge.net/projects/dolibarr/rss'); //var_dump($result['content']); $sfurl = simplexml_load_string($result['content']); if ($sfurl) { $title = $sfurl->channel[0]->item[0]->title; function word_limiter($text, $limit = 30, $chars = '0123456789.') { if (strlen($text) > $limit) { $words = str_word_count($text, 2, $chars); $words = array_reverse($words, TRUE); foreach ($words as $length => $word) {
/** * Parse rss URL * * @param string $urlRSS Url to parse * @param int $maxNb Max nb of records to get (0 for no limit) * @param int $cachedelay 0=No cache, nb of seconds we accept cache files (cachedir must also be defined) * @param string $cachedir Directory where to save cache file * @return int <0 if KO, >0 if OK */ public function parser($urlRSS, $maxNb = 0, $cachedelay = 60, $cachedir = '') { global $conf; include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; $rss = ''; $str = ''; // This will contain content of feed // Check parameters if (!dol_is_url($urlRSS)) { $this->error = "ErrorBadUrl"; return -1; } $this->_urlRSS = $urlRSS; $newpathofdestfile = $cachedir . '/' . dol_hash($this->_urlRSS, 3); // Force md5 hash (does not contains special chars) $newmask = '0644'; //dol_syslog("RssPArser::parser parse url=".$urlRSS." => cache file=".$newpathofdestfile); $nowgmt = dol_now(); // Search into cache $foundintocache = 0; if ($cachedelay > 0 && $cachedir) { $filedate = dol_filemtime($newpathofdestfile); if ($filedate >= $nowgmt - $cachedelay) { //dol_syslog("RssParser::parser cache file ".$newpathofdestfile." is not older than now - cachedelay (".$nowgmt." - ".$cachedelay.") so we use it."); $foundintocache = 1; $this->_lastfetchdate = $filedate; } else { dol_syslog(get_class($this) . "::parser cache file " . $newpathofdestfile . " is not found or older than now - cachedelay (" . $nowgmt . " - " . $cachedelay . ") so we can't use it."); } } // Load file into $str if ($foundintocache) { $str = file_get_contents($newpathofdestfile); } else { try { ini_set("user_agent", "Dolibarr ERP-CRM RSS reader"); ini_set("max_execution_time", $conf->global->MAIN_USE_RESPONSE_TIMEOUT); ini_set("default_socket_timeout", $conf->global->MAIN_USE_RESPONSE_TIMEOUT); $opts = array('http' => array('method' => "GET")); if (!empty($conf->global->MAIN_USE_CONNECT_TIMEOUT)) { $opts['http']['timeout'] = $conf->global->MAIN_USE_CONNECT_TIMEOUT; } if (!empty($conf->global->MAIN_PROXY_USE)) { $opts['http']['proxy'] = 'tcp://' . $conf->global->MAIN_PROXY_HOST . ':' . $conf->global->MAIN_PROXY_PORT; } //var_dump($opts);exit; $context = stream_context_create($opts); $str = file_get_contents($this->_urlRSS, false, $context); } catch (Exception $e) { print 'Error retrieving URL ' . $this->urlRSS . ' - ' . $e->getMessage(); } } if ($str !== false) { // Convert $str into xml if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { //print 'xx'.LIBXML_NOCDATA; libxml_use_internal_errors(false); $rss = simplexml_load_string($str, "SimpleXMLElement", LIBXML_NOCDATA); } else { $xmlparser = xml_parser_create(''); if (!is_resource($xmlparser)) { $this->error = "ErrorFailedToCreateParser"; return -1; } xml_set_object($xmlparser, $this); xml_set_element_handler($xmlparser, 'feed_start_element', 'feed_end_element'); xml_set_character_data_handler($xmlparser, 'feed_cdata'); $status = xml_parse($xmlparser, $str); xml_parser_free($xmlparser); $rss = $this; //var_dump($rss->_format);exit; } } // If $rss loaded if ($rss) { // Save file into cache if (empty($foundintocache) && $cachedir) { dol_syslog(get_class($this) . "::parser cache file " . $newpathofdestfile . " is saved onto disk."); if (!dol_is_dir($cachedir)) { dol_mkdir($cachedir); } $fp = fopen($newpathofdestfile, 'w'); fwrite($fp, $str); fclose($fp); if (!empty($conf->global->MAIN_UMASK)) { $newmask = $conf->global->MAIN_UMASK; } @chmod($newpathofdestfile, octdec($newmask)); $this->_lastfetchdate = $nowgmt; } unset($str); // Free memory if (empty($rss->_format)) { $rss->_format = 'rss'; if (empty($rss->channel)) { $rss->_format = 'atom'; } } $items = array(); // Save description entries if ($rss->_format == 'rss') { //var_dump($rss); if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { if (!empty($rss->channel->language)) { $this->_language = (string) $rss->channel->language; } if (!empty($rss->channel->generator)) { $this->_generator = (string) $rss->channel->generator; } if (!empty($rss->channel->copyright)) { $this->_copyright = (string) $rss->channel->copyright; } if (!empty($rss->channel->lastbuilddate)) { $this->_lastbuilddate = (string) $rss->channel->lastbuilddate; } if (!empty($rss->channel->image->url[0])) { $this->_imageurl = (string) $rss->channel->image->url[0]; } if (!empty($rss->channel->link)) { $this->_link = (string) $rss->channel->link; } if (!empty($rss->channel->title)) { $this->_title = (string) $rss->channel->title; } if (!empty($rss->channel->description)) { $this->_description = (string) $rss->channel->description; } } else { //var_dump($rss->channel); if (!empty($rss->channel['language'])) { $this->_language = (string) $rss->channel['language']; } if (!empty($rss->channel['generator'])) { $this->_generator = (string) $rss->channel['generator']; } if (!empty($rss->channel['copyright'])) { $this->_copyright = (string) $rss->channel['copyright']; } if (!empty($rss->channel['lastbuilddate'])) { $this->_lastbuilddate = (string) $rss->channel['lastbuilddate']; } if (!empty($rss->image['url'])) { $this->_imageurl = (string) $rss->image['url']; } if (!empty($rss->channel['link'])) { $this->_link = (string) $rss->channel['link']; } if (!empty($rss->channel['title'])) { $this->_title = (string) $rss->channel['title']; } if (!empty($rss->channel['description'])) { $this->_description = (string) $rss->channel['description']; } } if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { $items = $rss->channel->item; } else { $items = $rss->items; } // With xmlparse //var_dump($items);exit; } else { if ($rss->_format == 'atom') { //var_dump($rss); if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { if (!empty($rss->generator)) { $this->_generator = (string) $rss->generator; } if (!empty($rss->lastbuilddate)) { $this->_lastbuilddate = (string) $rss->modified; } if (!empty($rss->link->href)) { $this->_link = (string) $rss->link->href; } if (!empty($rss->title)) { $this->_title = (string) $rss->title; } if (!empty($rss->description)) { $this->_description = (string) $rss->description; } } else { //if (!empty($rss->channel['rss_language'])) $this->_language = (string) $rss->channel['rss_language']; if (!empty($rss->channel['generator'])) { $this->_generator = (string) $rss->channel['generator']; } //if (!empty($rss->channel['rss_copyright'])) $this->_copyright = (string) $rss->channel['rss_copyright']; if (!empty($rss->channel['modified'])) { $this->_lastbuilddate = (string) $rss->channel['modified']; } //if (!empty($rss->image['rss_url'])) $this->_imageurl = (string) $rss->image['rss_url']; if (!empty($rss->channel['link'])) { $this->_link = (string) $rss->channel['link']; } if (!empty($rss->channel['title'])) { $this->_title = (string) $rss->channel['title']; } //if (!empty($rss->channel['rss_description'])) $this->_description = (string) $rss->channel['rss_description']; } if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { $tmprss = xml2php($rss); $items = $tmprss['entry']; } else { $items = $rss->items; } // With xmlparse //var_dump($items);exit; } } $i = 0; // Loop on each record if (is_array($items)) { foreach ($items as $item) { //var_dump($item);exit; if ($rss->_format == 'rss') { if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { $itemLink = (string) $item->link; $itemTitle = (string) $item->title; $itemDescription = (string) $item->description; $itemPubDate = (string) $item->pubDate; $itemId = ''; $itemAuthor = ''; } else { $itemLink = (string) $item['link']; $itemTitle = (string) $item['title']; $itemDescription = (string) $item['description']; $itemPubDate = (string) $item['pubdate']; $itemId = (string) $item['guid']; $itemAuthor = (string) $item['author']; } // Loop on each category $itemCategory = array(); if (is_array($item->category)) { foreach ($item->category as $cat) { $itemCategory[] = (string) $cat; } } } else { if ($rss->_format == 'atom') { if (!empty($conf->global->EXTERNALRSS_USE_SIMPLEXML)) { $itemLink = isset($item['link']['href']) ? (string) $item['link']['href'] : ''; $itemTitle = (string) $item['title']; $itemDescription = (string) $item['summary']; $itemPubDate = (string) $item['created']; $itemId = (string) $item['id']; $itemAuthor = (string) ($item['author'] ? $item['author'] : $item['author_name']); } else { $itemLink = isset($item['link']['href']) ? (string) $item['link']['href'] : ''; $itemTitle = (string) $item['title']; $itemDescription = (string) $item['summary']; $itemPubDate = (string) $item['created']; $itemId = (string) $item['id']; $itemAuthor = (string) ($item['author'] ? $item['author'] : $item['author_name']); } } else { print 'ErrorBadFeedFormat'; } } // Add record to result array $this->_rssarray[$i] = array('link' => $itemLink, 'title' => $itemTitle, 'description' => $itemDescription, 'pubDate' => $itemPubDate, 'category' => $itemCategory, 'id' => $itemId, 'author' => $itemAuthor); //var_dump($this->_rssarray); $i++; if ($i > $maxNb) { break; } // We get all records we want } } return 1; } else { $this->error = 'ErrorFailedToLoadRSSFile'; return -1; } }
$resarray = tree_showpad($sqltree, $key, 1); // Refresh cache for this subdir if (isset($val['cachenbofdoc']) && $val['cachenbofdoc'] < 0) { $result = $ecmdirstatic->fetch($val['id']); $ecmdirstatic->ref = $ecmdirstatic->label; $result = $ecmdirstatic->refreshcachenboffile(0); $val['cachenbofdoc'] = $result; } $a = $resarray[0]; $nbofsubdir = $resarray[1]; $nboffilesinsubdir = $resarray[2]; break; } } //print 'modulepart='.$modulepart.' fullpathselecteddir='.$fullpathselecteddir.' - val[fullrelativename] (in database)='.$val['fullrelativename'].' - val[id]='.$val['id'].' - is_dir='.dol_is_dir($fullpathselecteddir . $file).' - file='.$file."\n"; if ($file != '.' && $file != '..' && (!empty($val['fullrelativename']) && $val['id'] >= 0 || dol_is_dir($fullpathselecteddir . (preg_match('/\\/$/', $fullpathselecteddir) ? '' : '/') . $file))) { if (empty($val['fullrelativename'])) { $val['fullrelativename'] = $file; $val['id'] = 0; $val['label'] = $file; $val['description'] = ''; $nboffilesinsubdir = $langs->trans("Unknown"); } print '<li class="directory collapsed">'; print "<a class=\"fmdirlia jqft ecmjqft\" href=\"#\" rel=\"" . dol_escape_htmltag($val['fullrelativename'] . '/') . "\" id=\"fmdirlia_id_" . $val['id'] . "\""; print " onClick=\"loadandshowpreview('" . dol_escape_js($val['fullrelativename']) . "'," . $val['id'] . ")\">"; print dol_escape_htmltag($file); print "</a>"; print '<div class="ecmjqft">'; print '<table class="nobordernopadding"><tr>'; /*print '<td align="left">';
/** * Return amount of elements by month for several years * * @param int $endyear End year * @param int $startyear Start year * @param int $cachedelay accept for cache file (0=No read, no save of cache, -1=No read but save) * @return array of values */ function getTransformRateByMonthWithPrevYear($endyear, $startyear, $cachedelay = 0) { global $conf, $user, $langs; if ($startyear > $endyear) return - 1; $datay = array(); // Search into cache if (! empty($cachedelay)) { include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; include_once DOL_DOCUMENT_ROOT . '/core/lib/json.lib.php'; } $newpathofdestfile = $conf->user->dir_temp . '/' . get_class($this) . '_' . __FUNCTION__ . '_' . (empty($this->cachefilesuffix) ? '' : $this->cachefilesuffix . '_') . $langs->defaultlang . '_user' . $user->id . '.cache'; $newmask = '0644'; $nowgmt = dol_now(); $foundintocache = 0; if ($cachedelay > 0) { $filedate = dol_filemtime($newpathofdestfile); if ($filedate >= ($nowgmt - $cachedelay)) { $foundintocache = 1; $this->_lastfetchdate[get_class($this) . '_' . __FUNCTION__] = $filedate; } else { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " cache file " . $newpathofdestfile . " is not found or older than now - cachedelay (" . $nowgmt . " - " . $cachedelay . ") so we can't use it."); } } // Load file into $data if ($foundintocache) // Cache file found and is not too old { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " read data from cache file " . $newpathofdestfile . " " . $filedate . "."); $data = json_decode(file_get_contents($newpathofdestfile), true); } else { $year = $startyear; while ( $year <= $endyear ) { $datay[$year] = $this->getTransformRateByMonth($year); $year ++; } $data = array (); // $data = array('xval'=>array(0=>xlabel,1=>yval1,2=>yval2...),...) for($i = 0; $i < 12; $i ++) { $data[$i][] = $datay[$endyear][$i][0]; // set label $year = $startyear; while ( $year <= $endyear ) { $data[$i][] = $datay[$year][$i][1]; // set yval for x=i $year ++; } } } // Save cache file if (empty($foundintocache) && ($cachedelay > 0 || $cachedelay == - 1)) { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " save cache file " . $newpathofdestfile . " onto disk."); if (! dol_is_dir($conf->user->dir_temp)) dol_mkdir($conf->user->dir_temp); $fp = fopen($newpathofdestfile, 'w'); fwrite($fp, json_encode($data)); fclose($fp); if (! empty($conf->global->MAIN_UMASK)) $newmask = $conf->global->MAIN_UMASK; @chmod($newpathofdestfile, octdec($newmask)); $this->_lastfetchdate[get_class($this) . '_' . __FUNCTION__] = $nowgmt; } return $data; }
/** * Store object in file * * @param string $directory Directory of cache * @param string $filename Name of filecache * @param mixed $object Object to store in cachefile * @return void */ function dol_filecache($directory, $filename, $object) { if (!dol_is_dir($directory)) { dol_mkdir($directory); } $cachefile = $directory . $filename; file_put_contents($cachefile, serialize($object), LOCK_EX); @chmod($cachefile, 0644); }
/** * Delete a third party from database and all its dependencies (contacts, rib...) * * @param int $id Id of third party to delete * @param User $fuser User who ask to delete thirparty * @param int $call_trigger 0=No, 1=yes * @return int <0 if KO, 0 if nothing done, >0 if OK */ function delete($id, User $fuser=null, $call_trigger=1) { global $langs, $conf, $user; if (empty($fuser)) $fuser=$user; require_once DOL_DOCUMENT_ROOT.'/core/lib/files.lib.php'; $entity=isset($this->entity)?$this->entity:$conf->entity; dol_syslog(get_class($this)."::delete", LOG_DEBUG); $error = 0; // Test if child exists $objectisused = $this->isObjectUsed($id); if (empty($objectisused)) { $this->db->begin(); // User is mandatory for trigger call if ($call_trigger) { // Call trigger $result=$this->call_trigger('COMPANY_DELETE',$fuser); if ($result < 0) $error++; // End call triggers } if (! $error) { require_once DOL_DOCUMENT_ROOT.'/categories/class/categorie.class.php'; $static_cat = new Categorie($this->db); $toute_categs = array(); // Fill $toute_categs array with an array of (type => array of ("Categorie" instance)) if ($this->client || $this->prospect) { $toute_categs ['societe'] = $static_cat->containing($this->id,Categorie::TYPE_CUSTOMER); } if ($this->fournisseur) { $toute_categs ['fournisseur'] = $static_cat->containing($this->id,Categorie::TYPE_SUPPLIER); } // Remove each "Categorie" foreach ($toute_categs as $type => $categs_type) { foreach ($categs_type as $cat) { $cat->del_type($this, $type); } } } // Remove contacts if (! $error) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."socpeople"; $sql.= " WHERE fk_soc = " . $id; if (! $this->db->query($sql)) { $error++; $this->error .= $this->db->lasterror(); } } // Update link in member table if (! $error) { $sql = "UPDATE ".MAIN_DB_PREFIX."adherent"; $sql.= " SET fk_soc = NULL WHERE fk_soc = " . $id; if (! $this->db->query($sql)) { $error++; $this->error .= $this->db->lasterror(); dol_syslog(get_class($this)."::delete erreur -1 ".$this->error, LOG_ERR); } } // Remove ban if (! $error) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_rib"; $sql.= " WHERE fk_soc = " . $id; if (! $this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); } } // Remove societe_remise_except if (! $error) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_remise_except"; $sql.= " WHERE fk_soc = " . $id; if (! $this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); } } // Remove associated users if (! $error) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe_commerciaux"; $sql.= " WHERE fk_soc = " . $id; if (! $this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); } } // Removed extrafields if ((! $error) && (empty($conf->global->MAIN_EXTRAFIELDS_DISABLED))) // For avoid conflicts if trigger used { $result=$this->deleteExtraFields(); if ($result < 0) { $error++; dol_syslog(get_class($this)."::delete error -3 ".$this->error, LOG_ERR); } } // Remove third party if (! $error) { $sql = "DELETE FROM ".MAIN_DB_PREFIX."societe"; $sql.= " WHERE rowid = " . $id; dol_syslog(get_class($this)."::delete", LOG_DEBUG); if (! $this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); } } if (! $error) { $this->db->commit(); // Delete directory if (! empty($conf->societe->multidir_output[$entity])) { $docdir = $conf->societe->multidir_output[$entity] . "/" . $id; if (dol_is_dir($docdir)) { dol_delete_dir_recursive($docdir); } } return 1; } else { dol_syslog($this->error, LOG_ERR); $this->db->rollback(); return -1; } } else dol_syslog("Can't remove thirdparty with id ".$id.". There is ".$objectisused." childs", LOG_WARNING); return 0; }
/** * Complete the $substitutionarray with more entries * * @param array $substitutionarray Array substitution old value => new value value * @param Translate $outputlangs If we want substitution from special constants, we provide a language * @param object $object If we want substitution from special constants, we provide data in a source object * @param Mixed $parameters Add more parameters (useful to pass product lines) * @param string $callfunc What is the name of the custom function that will be called? (default: completesubstitutionarray) * @return void * @see make_substitutions */ function complete_substitutions_array(&$substitutionarray, $outputlangs, $object = '', $parameters = null, $callfunc = "completesubstitutionarray") { global $conf, $user; require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; // Check if there is external substitution to do asked by plugins $dirsubstitutions = array_merge(array(), (array) $conf->modules_parts['substitutions']); foreach ($dirsubstitutions as $reldir) { $dir = dol_buildpath($reldir, 0); // Check if directory exists if (!dol_is_dir($dir)) { continue; } $substitfiles = dol_dir_list($dir, 'files', 0, 'functions_'); foreach ($substitfiles as $substitfile) { if (preg_match('/functions_(.*)\\.lib\\.php/i', $substitfile['name'], $reg)) { $module = $reg[1]; dol_syslog("Library functions_" . $substitfile['name'] . " found into " . $dir); // Include the user's functions file require_once $dir . $substitfile['name']; // Call the user's function, and only if it is defined $function_name = $module . "_" . $callfunc; if (function_exists($function_name)) { $function_name($substitutionarray, $outputlangs, $object, $parameters); } } } } }
/** * Remove a directory $dir and its subdirectories * @param dir Dir to delete * @param count Counter to count nb of deleted elements * @param nophperrors Disable all PHP output errors * @return int Number of files and directory removed */ function dol_delete_dir_recursive($dir,$count=0,$nophperrors=0) { dol_syslog("functions.lib:dol_delete_dir_recursive ".$dir,LOG_DEBUG); if (dol_is_dir($dir)) { $dir_osencoded=dol_osencode($dir); if ($handle = opendir("$dir_osencoded")) { while (false !== ($item = readdir($handle))) { if (! utf8_check($item)) $item=utf8_encode($item); // should be useless if ($item != "." && $item != "..") { if (is_dir(dol_osencode("$dir/$item"))) { $count=dol_delete_dir_recursive("$dir/$item",$count,$nophperrors); } else { dol_delete_file("$dir/$item",1,$nophperrors); $count++; //echo " removing $dir/$item<br>\n"; } } } closedir($handle); dol_delete_dir($dir,$nophperrors); $count++; //echo "removing $dir<br>\n"; } } //echo "return=".$count; return $count; }
$nboffilesinsubdir = 0; // Try to find key into $sqltree $val = array(); foreach ($sqltree as $key => $tmpval) { //print "-- ".$val['fullrelativename']." vs ".(($selecteddir != '/'?$selecteddir.'/':'').$file).'<br>'; if ($tmpval['fullrelativename'] == ($selecteddir != '/' ? $selecteddir . '/' : '') . $file) { $val = $tmpval; $resarray = tree_showpad($sqltree, $key, 1); $a = $resarray[0]; $nbofsubdir = $resarray[1]; $nboffilesinsubdir = $resarray[2]; break; } } //if (file_exists($fullpathselecteddir . $file) && $file != '.' && $file != '..' && is_dir($fullpathselecteddir . $file)) if ($file != '.' && $file != '..' && (!empty($val['fullrelativename']) && $val['id'] >= 0 || dol_is_dir($fullpathselecteddir . $file))) { print '<li class="directory collapsed">'; print "<a class=\"fmdirlia jqft ecmjqft\" href=\"#\" rel=\"" . dol_escape_htmltag($val['fullrelativename'] . '/') . "\" id=\"fmdirlia_id_" . $val['id'] . "\""; print " onClick=\"loadandshowpreview('" . dol_escape_js($val['fullrelativename']) . "'," . $val['id'] . ")\">"; print dol_escape_htmltag($file); print "</a>"; print '<div class="ecmjqft">'; print '<table class="nobordernopadding"><tr>'; /*print '<td align="left">'; print dol_escape_htmltag($file); print '</td>';*/ // Nb of docs print '<td align="right">'; print isset($val['cachenbofdoc']) ? $val['cachenbofdoc'] : ' '; print '</td>'; print '<td align="left">';
/** * Return count, and sum of products * * @param int $year Year * @param int $cachedelay Delay we accept for cache file (0=No read, no save of cache, -1=No read but save) * @return array Array of values */ function getAllByProductEntry($year, $cachedelay = 0) { global $conf, $user, $langs; $datay = array(); // Search into cache if (!empty($cachedelay)) { include_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; include_once DOL_DOCUMENT_ROOT . '/core/lib/json.lib.php'; } $newpathofdestfile = $conf->user->dir_temp . '/' . get_class($this) . '_' . __FUNCTION__ . '_' . (empty($this->cachefilesuffix) ? '' : $this->cachefilesuffix . '_') . $langs->defaultlang . '_user' . $user->id . '.cache'; $newmask = '0644'; $nowgmt = dol_now(); $foundintocache = 0; if ($cachedelay > 0) { $filedate = dol_filemtime($newpathofdestfile); if ($filedate >= $nowgmt - $cachedelay) { $foundintocache = 1; $this->_lastfetchdate[get_class($this) . '_' . __FUNCTION__] = $filedate; } else { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " cache file " . $newpathofdestfile . " is not found or older than now - cachedelay (" . $nowgmt . " - " . $cachedelay . ") so we can't use it."); } } // Load file into $data if ($foundintocache) { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " read data from cache file " . $newpathofdestfile . " " . $filedate . "."); $data = json_decode(file_get_contents($newpathofdestfile), true); } else { $data = $this->getAllByProduct($year); // $data[$i][]=$datay[$year][$i][1]; // set yval for x=i } // Save cache file if (empty($foundintocache) && ($cachedelay > 0 || $cachedelay == -1)) { dol_syslog(get_class($this) . '::' . __FUNCTION__ . " save cache file " . $newpathofdestfile . " onto disk."); if (!dol_is_dir($conf->user->dir_temp)) { dol_mkdir($conf->user->dir_temp); } $fp = fopen($newpathofdestfile, 'w'); if ($fp) { fwrite($fp, json_encode($data)); fclose($fp); if (!empty($conf->global->MAIN_UMASK)) { $newmask = $conf->global->MAIN_UMASK; } @chmod($newpathofdestfile, octdec($newmask)); } $this->_lastfetchdate[get_class($this) . '_' . __FUNCTION__] = $nowgmt; } return $data; }
/** * Return full text translated to language label for a key. Store key-label in a cache. * This function need module "numberwords" to be installed. If not it will return * same number (this module is not provided by default as it use non GPL source code). * * @param int $number Number to encode in full text * @param int $isamount 1=It's an amount, 0=it's just a number * @return string Label translated in UTF8 (but without entities) * 10 if setDefaultLang was en_US => ten * 123 if setDefaultLang was fr_FR => cent vingt trois */ function getLabelFromNumber($number, $isamount = 0) { global $conf; $newnumber = $number; $dirsubstitutions = array_merge(array(), $conf->modules_parts['substitutions']); foreach ($dirsubstitutions as $reldir) { $dir = dol_buildpath($reldir, 0); $newdir = dol_osencode($dir); // Check if directory exists if (!dol_is_dir($dir)) { continue; } $fonc = 'numberwords'; if (file_exists($newdir . '/functions_' . $fonc . '.lib.php')) { include_once $newdir . '/functions_' . $fonc . '.lib.php'; $newnumber = numberwords_getLabelFromNumber($this, $number, $isamount); break; } } return $newnumber; }
/** * Delete a third party from database and all its dependencies (contacts, rib...) * * @param int $id Id of third party to delete * @return int <0 if KO, 0 if nothing done, >0 if OK */ function delete($id) { global $user, $langs, $conf; require_once DOL_DOCUMENT_ROOT . '/core/lib/files.lib.php'; $entity = isset($this->entity) ? $this->entity : $conf->entity; dol_syslog(get_class($this) . "::delete", LOG_DEBUG); $error = 0; // Test if child exists $objectisused = $this->isObjectUsed($id); if (empty($objectisused)) { $this->db->begin(); if (!$error) { // Appel des triggers include_once DOL_DOCUMENT_ROOT . '/core/class/interfaces.class.php'; $interface = new Interfaces($this->db); $result = $interface->run_triggers('COMPANY_DELETE', $this, $user, $langs, $conf); if ($result < 0) { $error++; $this->errors = $interface->errors; } // Fin appel triggers } if (!$error) { require_once DOL_DOCUMENT_ROOT . '/categories/class/categorie.class.php'; $static_cat = new Categorie($this->db); $toute_categs = array(); // Fill $toute_categs array with an array of (type => array of ("Categorie" instance)) if ($this->client || $this->prospect) { $toute_categs['societe'] = $static_cat->containing($this->id, 2); } if ($this->fournisseur) { $toute_categs['fournisseur'] = $static_cat->containing($this->id, 1); } // Remove each "Categorie" foreach ($toute_categs as $type => $categs_type) { foreach ($categs_type as $cat) { $cat->del_type($this, $type); } } } // Remove contacts if (!$error) { $sql = "DELETE FROM " . MAIN_DB_PREFIX . "socpeople"; $sql .= " WHERE fk_soc = " . $id; dol_syslog(get_class($this) . "::delete sql=" . $sql, LOG_DEBUG); if (!$this->db->query($sql)) { $error++; $this->error .= $this->db->lasterror(); dol_syslog(get_class($this) . "::delete erreur -1 " . $this->error, LOG_ERR); } } // Update link in member table if (!$error) { $sql = "UPDATE " . MAIN_DB_PREFIX . "adherent"; $sql .= " SET fk_soc = NULL WHERE fk_soc = " . $id; dol_syslog(get_class($this) . "::delete sql=" . $sql, LOG_DEBUG); if (!$this->db->query($sql)) { $error++; $this->error .= $this->db->lasterror(); dol_syslog(get_class($this) . "::delete erreur -1 " . $this->error, LOG_ERR); } } // Remove ban if (!$error) { $sql = "DELETE FROM " . MAIN_DB_PREFIX . "societe_rib"; $sql .= " WHERE fk_soc = " . $id; dol_syslog(get_class($this) . "::Delete sql=" . $sql, LOG_DEBUG); if (!$this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); dol_syslog(get_class($this) . "::delete erreur -2 " . $this->error, LOG_ERR); } } // Removed extrafields if (!$error && empty($conf->global->MAIN_EXTRAFIELDS_DISABLED)) { $result = $this->deleteExtraFields(); if ($result < 0) { $error++; dol_syslog(get_class($this) . "::delete error -3 " . $this->error, LOG_ERR); } } // Remove third party if (!$error) { $sql = "DELETE FROM " . MAIN_DB_PREFIX . "societe"; $sql .= " WHERE rowid = " . $id; dol_syslog(get_class($this) . "::delete sql=" . $sql, LOG_DEBUG); if (!$this->db->query($sql)) { $error++; $this->error = $this->db->lasterror(); dol_syslog(get_class($this) . "::delete error -4 " . $this->error, LOG_ERR); } } if (!$error) { $this->db->commit(); // Delete directory if (!empty($conf->societe->multidir_output[$entity])) { $docdir = $conf->societe->multidir_output[$entity] . "/" . $id; if (dol_is_dir($docdir)) { dol_delete_dir_recursive($docdir); } } return 1; } else { $this->db->rollback(); return -1; } } else { dol_syslog("Can't remove thirdparty with id " . $id . ". There is " . $objectisused . " childs", LOG_WARNING); } return 0; }
/** * testDolIsFileDir * * @return int */ public function testDolIsFileDir() { global $conf,$user,$langs,$db; $conf=$this->savconf; $user=$this->savuser; $langs=$this->savlangs; $db=$this->savdb; $file=dirname(__FILE__).'/Example_import_company_1.csv'; $result=dol_is_file($file); print __METHOD__." result=".$result."\n"; $this->assertTrue($result); $result=dol_is_dir($file); print __METHOD__." result=".$result."\n"; $this->assertFalse($result); return $result; }