Esempio n. 1
0
                    //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;
    }
}
Esempio n. 2
0
/*
 * 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.
Esempio n. 3
0
/**
 * 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);
                    }
                }
            }
        }
    }
}
Esempio n. 4
0
        } 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) {
Esempio n. 5
0
 /**
  * 	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;
	}
Esempio n. 8
0
/**
 * 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);
}
Esempio n. 9
0
    /**
     *    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;
    }
Esempio n. 10
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);
                }
            }
        }
    }
}
Esempio n. 11
0
/**
 *  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;
}
Esempio n. 12
0
 $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'] : '&nbsp;';
     print '</td>';
     print '<td align="left">';
Esempio n. 13
0
 /**
  * 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;
 }
Esempio n. 14
0
 /**
  *      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;
 }
Esempio n. 16
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;
    }