linea21-utils
[ class tree: linea21-utils ] [ index: linea21-utils ] [ all elements ]

Source for file lib_common.php

Documentation is available at lib_common.php

  1. <?php
  2. /**
  3.  * @package linea21.utils
  4.  * @subpackage lib
  5.  * @author linea21 <info@linea21.com>
  6.  * @version $id SVN
  7.  * @access public
  8.  * @license http://opensource.org/licenses/gpl-3.0.html
  9.  */
  10.  
  11.  
  12. /**
  13.  * implode_with_keys()
  14.  * implode avec clefs associées renvoyées
  15.  * sous forme de chaîne de caractères
  16.  * @param string $glue 
  17.  * @param string $array 
  18.  * @return string 
  19.  */
  20. function implode_with_keys($glue$array{
  21.   $output array();
  22.   foreach$array as $key => $item )
  23.   $output[$key "=" $item;
  24.  
  25.   return implode($glue$output);
  26. }
  27.  
  28. /**
  29.  * getHttpParameters()
  30.  * Renvoie les paramètres HTTP
  31.  * sous forme de chaîne de caractères
  32.  * @return string 
  33.  */
  34. function getHttpParameters($prefix '?'{
  35.  
  36.   return $prefix. (string) implode_with_keys('&'$_REQUEST);
  37. }
  38.  
  39. /**
  40.  * strip_input()
  41.  * Remove PHP and HTML code
  42.  * @param string $str 
  43.  * @param string $exceptions 
  44.  * @return string 
  45.  */
  46. function strip_input($str$exceptions false{
  47.  
  48.   if(defined('RICH_TEXT_EDITOR'&& RICH_TEXT_EDITOR != (string) 0{
  49.     return $str;
  50.   }
  51.   else {
  52.     if(is_string($exceptions))  {
  53.       return strip_tags($str$exceptions);
  54.     }
  55.     if($exceptions === true)  {
  56.       return strip_tags($strALLOWABLE_TAGS);
  57.     }
  58.     return strip_tags($str);
  59.   }
  60.  
  61. }
  62.  
  63. /**
  64.  * IncludeTimeline()
  65.  * Include SIMILE Timeline JS code
  66.  * if needed
  67.  * @return void 
  68.  */
  69. function IncludeTimeline({
  70.   if(defined('TIMELINE_DISPLAY'&& TIMELINE_DISPLAY == 1{
  71.     if(isset($_REQUEST['rub']&& $_REQUEST['rub']=="project" && (!isset($_REQUEST['todo']|| $_REQUEST['todo'== 'list')) {
  72.       echo '<script src="' .SITE_ROOT_URL'lib/js/timeline/timeline_ajax/simile-ajax-api.js" type="text/javascript"></script>'.END_LINE;
  73.       echo '<script type="text/javascript">
  74.              Timeline_urlPrefix=\'' .SITE_ROOT_URL'lib/js/timeline/timeline_js/\';
  75.              Timeline_parameters=\'bundle=true\';
  76.              $(function() {
  77.              $("#content").prepend(\'<div id="my-timeline" style="height: 250px; border-bottom: 1px solid #aaa"><\/div>\');
  78.              });
  79.              
  80.           </script>';
  81.       echo '<script src="' .SITE_ROOT_URL'lib/js/timeline/timeline_js/timeline-api.js" type="text/javascript"></script>'.END_LINE;
  82.       echo '<script type="text/javascript" src="../lib/js/timeline.js"></script>'END_LINE;
  83.     }
  84.   }
  85. }
  86.  
  87. /**
  88.  * IncludeTextResizerJs()
  89.  * Include jQuery text-resizer plugin
  90.  * if no js wysiwyg are enabled
  91.  * @return void 
  92.  */
  93. function IncludeTextResizerJs({
  94.  
  95.   if(!defined('RICH_TEXT_EDITOR'|| RICH_TEXT_EDITOR == (string) )
  96.   {
  97.     echo '<script type="text/javascript" src="../lib/js/jquery.textarearesizer.compressed.js"></script>';
  98.     echo '<script type="text/javascript">
  99.               $(document).ready(function() {
  100.                 $(\'textarea.largetextfield:not(.processed)\').TextAreaResizer();
  101.             })
  102.               </script>'.END_LINE;
  103.   }
  104. }
  105.  
  106. /**
  107.  * IncludePHPDebug()
  108.  * Include Js & css for PHP_DEBUG
  109.  * param : array $a
  110.  * @return void 
  111.  */
  112. function IncludeLightRte($a{
  113.  
  114.   headerAddJS('../lib/js/nicEdit/nicEdit.js');
  115.   echo "<script type=\"text/javascript\">
  116.            var nicEditorLang = '".U_L."';
  117.        </script>".END_LINE;
  118.   echo '<script type="text/javascript" src="../lib/js/nicEdit/lang.js"></script>'.END_LINE;
  119.   echo '<script type="text/javascript" src="../lib/js/nicEdit/nicEdit.js"></script>'.END_LINE;
  120.   echo "<script type=\"text/javascript\">
  121.             bkLib.onDomLoaded(function() {
  122.                 new nicEditor({iconsPath : '../lib/js/nicEdit/nicEditorIcons.gif', buttonList : ['bold','italic','underline','subscript','superscript', 'link','unlink','image','upload']}).panelInstance('".$a['id']."');
  123.        });
  124.        </script>".END_LINE;
  125. }
  126.  
  127. /**
  128.  * IncludePHPDebug()
  129.  * Include Js & css for PHP_DEBUG
  130.  * @return void 
  131.  */
  132. function IncludePHPDebug({
  133.   if(defined('MOD_DEBUG'&& MOD_DEBUG == true{
  134.     echo '<script type="text/javascript" src="../lib/vendor/PHP_Debug/js/html_div.js"></script>'.END_LINE;
  135.     echo '<link type="text/css" rel="stylesheet" href="../lib/vendor/PHP_Debug/css/html_div.css" />'.END_LINE;
  136.   }
  137. }
  138. /**
  139.  * IncludeTooltipJs()
  140.  * Include jQuery tooltip plugin
  141.  * @param string $selector 
  142.  * @return void 
  143.  */
  144. function IncludeTooltipJs($selector{
  145.   $str='';
  146.   if(is_string($selector)) {
  147.     $str .= '$("'.$selector.'").tooltip({ effect: "slide", opacity: 0.8});';
  148.   else {
  149.     foreach($selector as $sel{
  150.       $str .= '$("'.$sel.'").tooltip({ effect: "slide", opacity: 0.8});'.END_LINE;
  151.     }
  152.   }
  153.   echo '<script type="text/javascript" src="../lib/js/jquery.tools.min.js"></script>'.END_LINE;
  154.   echo '<script type="text/javascript">
  155.           $(document).ready(function() {
  156.                   '.$str.'
  157.               })
  158.               </script>'.END_LINE;
  159. }
  160.  
  161. /**
  162.  * extRegex()
  163.  * Transform a list given in the form "jpg,png,gif"
  164.  * into "(jpg)|(png)|(gif)" format
  165.  * @return string 
  166.  */
  167. function extRegex($list{
  168.   $a explode(','$list);
  169.   $b array();
  170.   foreach($a as $el{
  171.     array_push($b'('.$el.')');
  172.   }
  173.   return implode('|'$b);
  174. }
  175.  
  176. /**
  177.  * IncludeFancyUploadJs()
  178.  * Include jQuery Fancy Upload
  179.  * @return void 
  180.  */
  181. function IncludeFancyUploadJs({
  182.   $rub = isset($_REQUEST['rub']$_REQUEST['rub''';
  183.   if(ActiveItemKey($rub)) $rub ActiveItemKey($rub);
  184.  
  185.   $a $GLOBALS['fancyUpload_includes'];
  186.  
  187.   // security check here because uploadify is not able to handle cookie
  188.   if(in_array($rub$a&& isWorkgroupUser($_REQUEST['id'])) {
  189.  
  190.     $fileDesc str_replace(','', 'MEDIA_ALLOWED_EXT);
  191.     echo '<script type="text/javascript">
  192.               var rooturl = "' SITE_ROOT_URL'";
  193.               var upbutton = "' _t('divers''up').'";
  194.               var delbutton = "'_t('divers''delqueue').'";
  195.               var addfiles = "' _t('upload''addfiles').'";
  196.               var succeed = "' _t('upload''confirmed').'";
  197.               var error = "' _t('upload''error').'";
  198.               var notallowed_msg = "'.sprintf(_t('upload''wrong_ext')$fileDesc).'";
  199.               var size_msg = "'.sprintf(_t('upload','upload_size')formatBytes(MEDIA_ALLOWED_SIZE)).'";
  200.               var maxsize = "' MEDIA_ALLOWED_SIZE.'";
  201.               var regexpattern = "' extRegex(MEDIA_ALLOWED_EXT).'";
  202.               var fileReplace = "' _t('divers''replace_file').'";
  203.               var cbText = "'._t('workshop''share_files').'";
  204.           </script>
  205.            <link type="text/css" rel="stylesheet" href="../lib/js/jquery-ui/css/ui-lightness/jquery-ui-1.8.16.custom.css" id="theme" />
  206.            <link type="text/css" rel="stylesheet" href="../lib/vendor/jQuery-File-Upload/jquery.fileupload-ui-l21.css" media="screen" />
  207.            <script type="text/javascript" src="../lib/js/jquery-ui/js/jquery-ui-1.8.16.custom.min.js"></script>
  208.           <script type="text/javascript" src="../lib/vendor/jQuery-File-Upload/jquery.fileupload.js"></script>
  209.           <script type="text/javascript" src="../lib/vendor/jQuery-File-Upload/jquery.fileupload-ui.js"></script>
  210.           <script type="text/javascript" src="../lib/vendor/jQuery-File-Upload/public-settings.js"></script>'.END_LINE;
  211.   }
  212. }
  213.  
  214. /**
  215.  * dragTableSettings()
  216.  * Include jQuery DragTable plugin settings
  217.  * @return void 
  218.  */
  219. function dragTableSettings({
  220.  
  221.   $rub = isset($_REQUEST['rub']$_REQUEST['rub''';
  222.   
  223.   echo '<script type="text/javascript">
  224.           $(document).ready(function(){
  225.               $("table.sortable thead tr").prepend("<td>&nbsp;<\/td>");
  226.               $("table.sortable tfoot tr").prepend("<td>&nbsp;<\/td>");
  227.               $("table.sortable tbody tr").prepend("<td class=\"dragHandle\">&nbsp;<\/td>");
  228.               $("table.sortable").tableDnD({
  229.                   onDrop: function(table, row) {
  230.                     $.get("../admin/_ajax_sort.php?rub='.$rub.'&" + $.tableDnD.serialize(), function(data) {
  231.                             if(data.class=="succeed") {
  232.                               humane.success(data.msg);
  233.                             } else {
  234.                               humane.error(data.msg);
  235.                             }
  236.                         }, 
  237.                         "json")
  238.                     },
  239.                   dragHandle: "dragHandle"
  240.               });
  241.           });
  242.             </script>'.END_LINE;
  243. }
  244.  
  245. /**
  246.  * IncludeTreeJs()
  247.  * Include jQuery tree plugin
  248.  * @return void 
  249.  */
  250. function IncludeTreeJs({
  251.   $str '<ul id="cMenu" class="contextMenu"><li class="edit"><a href="#edit">'_t('divers','modify').'<\/a><\/li><li class="delete separator"><a href="#delete">'_t('divers','delete').'<\/a><\/li><\/ul>';
  252.   echo '<script type="text/javascript" src="../lib/js/jquery.contextMenu/jquery.contextMenu.js"></script>'.END_LINE;
  253.   echo '<link type="text/css" rel="stylesheet" href="../lib/js/jquery.contextMenu/jquery.contextMenu-l21.css" media="screen" />'.END_LINE;
  254.   echo '<script type="text/javascript" src="../lib/js/jquery.treeview/jquery.treeview.js"></script>'.END_LINE;
  255.   echo '<link type="text/css" rel="stylesheet" href="../lib/js/jquery.treeview/jquery.treeview.css" media="screen" />'.END_LINE;
  256.   echo '<script type="text/javascript">
  257.           $(document).ready(function(){
  258.               $("#tree").after(\''.$str.'\');
  259.             $("#tree").treeview({
  260.                 animated: "fast",
  261.                 collapsed: false,
  262.                 unique: false
  263.             });
  264.             
  265.             $("#tree ul li.contextual-menu").contextMenu({
  266.                     menu: "cMenu"
  267.                 }, function(action, el, pos) {
  268.                     if(action=="edit") {
  269.                         if(typeof $(el).children("a.ico_mod").attr("href") == "undefined") {
  270.                             // not used anymore bu we keep it in case of
  271.                             humane.error("'._t('msg''action_not_allowed').'");
  272.                             return 0;
  273.                         } else {
  274.                             document.location.href = $(el).children("a.ico_mod").attr("href");
  275.                         }
  276.                     }
  277.                     if(action=="delete") {
  278.                         if(typeof $(el).children("a.ico_sup").attr("href") == "undefined") {
  279.                             // used for level - which does not have delete action
  280.                             humane.error("'._t('msg''action_not_allowed').'");
  281.                             return 0;
  282.                         } else {
  283.                             document.location.href = $(el).children("a.ico_sup").attr("href");
  284.                         }
  285.                     }
  286.  
  287.                 });
  288.             $("#tree li a.ico_mod, #tree li a.ico_sup").css("display", "none");
  289.                 
  290.         });
  291.           </script>'.END_LINE;
  292. }
  293.  
  294. /**
  295.  * IncludeRichTextEditor()
  296.  * Include RichTextEditor if enabled
  297.  * @return void 
  298.  */
  299. function IncludeRichTextEditor({
  300.  
  301.   if(defined('RICH_TEXT_EDITOR'&& RICH_TEXT_EDITOR != (string) )  {
  302.     if(strtolower(RICH_TEXT_EDITOR== 'tinymce')
  303.     {
  304.       echo '<script type="text/javascript" src="'.themePath('../lib/js/tinymce/jscripts/tiny_mce/tiny_mce.js'THEME_ADMIN_PATH).'"></script>'.END_LINE;
  305.       echo '<script type="text/javascript" src="'.themePath('../lib/js/tinymce/jscripts/tiny_mce/config.js'THEME_ADMIN_PATH).'"></script>'.END_LINE;
  306.     }
  307.     if(strtolower(RICH_TEXT_EDITOR== 'cke')
  308.     {
  309.       include('../lib/js/ckeditor/ckeditor.php');
  310.       $CKEditor new CKEditor();
  311.       $CKEditor->basePath SITE_ROOT_URL.'lib/js/ckeditor/';
  312.       $CKEditor->config['customConfig''l21_config.js';
  313.  
  314.       if(CURRENT_APP == 'admin'{
  315.         if(isset($_REQUEST['rub']&& $_REQUEST['rub'== 'newsletter' && file_exists(THEME_PUBLIC_PATH'css/newsletter.css')) {
  316.           $CKEditor->config['contentsCss'THEME_PUBLIC_PATH'css/newsletter.css';
  317.         }
  318.       }
  319.  
  320.       if(defined('CKFINDER_ENABLED'&& CKFINDER_ENABLED == true{
  321.         require_once '../lib/vendor/ckfinder/ckfinder.php';
  322.         CKFinder::SetupCKEditor$CKEditor'../lib/vendor/ckfinder/' ;
  323.       else {
  324.         $CKEditor->config['filebrowserBrowseUrl''../library/access.php';
  325.         $CKEditor->config['filebrowserImageBrowseUrl''../library/access.php?type=images';
  326.         $CKEditor->config['filebrowserUploadUrl''../library/access.php';
  327.         $CKEditor->config['filebrowserImageUploadUrl''../library/access.php?type=images';
  328.         $CKEditor->config['filebrowserWindowWidth''100%';
  329.         $CKEditor->config['filebrowserWindowHeight''100%';
  330.       }
  331.  
  332.       $CKEditor->replaceAll('largetextfield');
  333.     }
  334.   }
  335.  
  336. }
  337.  
  338. /**
  339.  * IncludeColorboxJs()
  340.  * Include Colorbox jQuery plugin
  341.  * @param string £selector
  342.  * @return void 
  343.  */
  344. function IncludeColorboxJs($selector{
  345.   $str='';
  346.   if(is_string($selector)) {
  347.     $str .= '$("'.$selector.'").colorbox({transition:"fade"});'.END_LINE;
  348.   else {
  349.     foreach($selector as $sel{
  350.       $str .= '$("'.$sel.'").colorbox({transition:"fade"});'.END_LINE;
  351.     }
  352.   }
  353.   echo '<script type="text/javascript" src="../lib/js/colorbox/colorbox/jquery.colorbox-min.js"></script>'.END_LINE;
  354.   echo '<link type="text/css" rel="stylesheet" href="../lib/js/colorbox/colorbox.css" />'.END_LINE;
  355.   echo '
  356.         <script type="text/javascript">
  357.         $(document).ready(function() {
  358.                   '.$str.'
  359.           });
  360.         </script>'END_LINE;
  361.  
  362. }
  363.  
  364. /**
  365.  * IncludeLightboxJs()
  366.  * Include Lightbox jQuery plugin
  367.  * @param string £selector
  368.  * @return void 
  369.  * @todo Remove function - Already replaced by colorbox
  370.  */
  371. function IncludeLightboxJs($selector{
  372.  
  373.   echo '
  374.         <script type="text/javascript">
  375.         alert("Please, replace IncludeLightboxJs() call by IncludeColorboxJs() into your template.")
  376.         </script>'END_LINE;
  377.  
  378. }
  379.  
  380. /**
  381.  * IncludeTextBoxListJs()
  382.  * Include jQuery TextBoxList plugin
  383.  * if needed
  384.  * @return void 
  385.  */
  386. function IncludeTextBoxListJs({
  387.  
  388.   $rub = isset($_REQUEST['rub']$_REQUEST['rub''';
  389.   $todo = isset($_REQUEST['todo']$_REQUEST['todo''';
  390.  
  391.   if(ActiveItemKey($rub)) $rub ActiveItemKey($rub);
  392.   $s $rub '|' $todo;
  393.   $a $GLOBALS['textboxList_includes'];
  394.  
  395.   if(in_array($s$a)) {
  396.     echo '<link type="text/css" rel="stylesheet" href="'.THEME_ADMIN_PATH.'css/TextboxList.css" media="screen" />'.END_LINE;
  397.     echo '<link type="text/css" rel="stylesheet" href="'.THEME_ADMIN_PATH.'css/TextboxList.Autocomplete.css" media="screen" />'.END_LINE;
  398.     echo '<script type="text/javascript" src="../lib/js/jquery.textboxList/GrowingInput.js"></script>'.END_LINE;
  399.     echo '<script type="text/javascript" src="../lib/js/jquery.textboxList/TextboxList.js"></script>'.END_LINE;
  400.     echo '<script type="text/javascript" src="../lib/js/jquery.textboxList/TextboxList.Autocomplete.js"></script>'.END_LINE;
  401.   }
  402. }
  403.  
  404. /**
  405.  * IncludeMultiSelectJs()
  406.  * Include jQuery multiSelect plugin
  407.  * if needed
  408.  * @return void 
  409.  */
  410. function IncludeMultiSelectJs({
  411.  
  412.   $rub = isset($_REQUEST['rub']$_REQUEST['rub''';
  413.   $todo = isset($_REQUEST['todo']$_REQUEST['todo''';
  414.  
  415.   if(ActiveItemKey($rub)) $rub ActiveItemKey($rub);
  416.   $s $rub '|' $todo;
  417.   $a $GLOBALS['multiSelect_includes'];
  418.  
  419.   if(in_array($s$a)) {
  420.     echo '<script type="text/javascript" src="../lib/js/jquery-ui-multiselect/src/jquery.multiselect.min.js"></script>'.END_LINE;
  421.     echo '<script type="text/javascript" src="../lib/js/jquery-ui-multiselect/src/jquery.multiselect.filter.min.js"></script>'.END_LINE;
  422.     echo '<script type="text/javascript" src="../lib/js/jquery-ui-multiselect/i18n/jquery.multiselect.'.U_L.'.js"></script>'.END_LINE;
  423.     echo '<script type="text/javascript" src="../lib/js/jquery-ui-multiselect/i18n/jquery.multiselect.filter.'.U_L.'.js"></script>'.END_LINE;
  424.     echo '<link type="text/css" rel="stylesheet" href="../lib/js/jquery-ui-multiselect/jquery.multiselect.css" />'.END_LINE;
  425.     echo '<link type="text/css" rel="stylesheet" href="../lib/js/jquery-ui-multiselect/jquery.multiselect.filter.css" />'.END_LINE;
  426.   }
  427. }
  428.  
  429. /**
  430.  * IncludeMappingLibraryJs()
  431.  * Include the current mapping library
  432.  * if needed
  433.  * @todo not used - Gmaps is used instead
  434.  * @return void 
  435.  */
  436.   
  437.   // @todo remove from here and insert into /config/define.php if used
  438.   $GLOBALS['mapping_includes'array('directory-detail|');
  439.   //
  440.  
  441.   $rub = isset($_REQUEST['rub']$_REQUEST['rub''';
  442.   $todo = isset($_REQUEST['todo']$_REQUEST['todo''';
  443.  
  444.   if(ActiveItemKey($rub)) $rub ActiveItemKey($rub);
  445.   $s $rub '|' $todo;
  446.   $a $GLOBALS['mapping_includes'];
  447.  
  448.   if(in_array($s$a)) {
  449.     echo '<script type="text/javascript" src="../lib/vendor/leaflet/dist/leaflet.js" /></script>'.END_LINE;
  450.     echo '<link rel="stylesheet" type="text/css" href="../lib/vendor/leaflet/dist/leaflet.css" />'.END_LINE;
  451.     echo '<!--[if lte IE 8]><link rel="stylesheet" href="../lib/vendor/leaflet/dist/leaflet.ie.css" /><![endif]-->'.END_LINE;
  452.   }
  453. }
  454.  
  455. /**
  456.  * SureCreateDir()
  457.  * Créer un dossier s'il n'existe pas.
  458.  * @param string $pathname 
  459.  * @param integer $perms 
  460.  * @return integer $ver_num
  461.  */
  462. function SureCreateDir($pathname$perms{
  463.   if(!file_exists($pathname)) {
  464.     return mkdir ($pathname$permstrue);
  465.   else {
  466.     return true;
  467.   }
  468. }
  469.  
  470.  
  471. /**
  472.  * SureRemoveDir()
  473.  * Supprime le contenu d'un dossier et le dossier lui-même si précisé.
  474.  *
  475.  * @return integer $ver_num
  476.  */
  477. function SureRemoveDir($dir$DeleteMe{
  478.   if(!$dh @opendir($dir)) return;
  479.   while (($obj readdir($dh))) {
  480.     if($obj=='.' || $obj=='..'continue;
  481.     if (!@unlink($dir.'/'.$obj)) SureRemoveDir($dir.'/'.$objtrue);
  482.   }
  483.   if ($DeleteMe){
  484.     closedir($dh);
  485.     @rmdir($dir);
  486.   }
  487. }
  488.  
  489. /**
  490.  * num_phpversion()
  491.  * Retourne un entier comme numéro de version PHP
  492.  *
  493.  * @return integer $ver_num
  494.  */
  495. function num_phpversion({
  496.   $ver explode'.'phpversion() );
  497.   $ver_num $ver[0$ver[1$ver[2];
  498.  
  499.   return $ver_num;
  500. }
  501.  
  502. /**
  503.  * cutText()
  504.  * Découpe un texte à une longeur donnée.
  505.  *
  506.  * @param string $content 
  507.  * @param integer $length 
  508.  * @param integer $abbr 
  509.  * @param string $end 
  510.  * @return 
  511.  */
  512. function cutText($content$length$abbr 0$end '...')
  513. {
  514.   // fix bug #16
  515.   if(function_exists('mb_substr')) $substr mb_substr($content0$lengthCHARSET);
  516.   else  $substr substr($content0$length);
  517.   if (strlen($content$length{
  518.     if ($abbr == 1$content_light "<abbr title=\"" $content "\">" $substr $end "</abbr>\n";
  519.     else $content_light $substr $end;
  520.   else $content_light $content;
  521.   return $content_light;
  522. }
  523.  
  524. /**
  525.  * cutBody()
  526.  * Renvoie un texte en 2 parties dans un tableau
  527.  *
  528.  * @param string $text 
  529.  * @return array $body
  530.  */
  531. function cutBody($text)
  532. {
  533.   $middle (strlen($text2);
  534.   $end strlen($text);
  535.   $body[0substr($text0$middle);
  536.   $body[1substr($text$middle$end);
  537.   $chaine preg_split("/(\.(<br \/>| ))/"$body[1]2);
  538.  
  539.   $body[0.= $chaine[0".";
  540.   $body[1@trim($chaine[1]);
  541.  
  542.   return $body;
  543. }
  544.  
  545. /**
  546. * removeEmptyP()
  547. * Remove empty P tags
  548. *
  549. @param string $text 
  550. @return array $body
  551. */
  552. function removeEmptyP($str{
  553.   $str preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#'''$str);
  554.   
  555.   return $str;
  556. }
  557.  
  558. /**
  559.  * EnlargeImage()
  560.  * Miniatures; agrandissement onclick
  561.  *
  562.  * @param string $uri 
  563.  * @param string $style 
  564.  * @param string $alt_desc 
  565.  * @return string $img_link
  566.  * @todo in 1.6 - check if still in use
  567.  */
  568. function EnlargeImage($uri$style ''$alt_desc '')
  569. {
  570.   list($width$height$type$attrgetimagesize($uri);
  571.  
  572.   $img_link '<a href="' $uri '" title="' _t('divers','enlarge_photo''">' END_LINE;
  573.   $img_link .= '<img src="' get_min_name($uri'" alt="' _t('divers','enlarge_photo'' ' $alt_desc '"' $style ' />' END_LINE;
  574.   $img_link .= '</a>' END_LINE;
  575.  
  576.   return $img_link;
  577. }
  578.  
  579. /**
  580.  * formatNavTitle()
  581.  * Formatage des titres ( interface admin )
  582.  *
  583.  * @param string $content 
  584.  * @return string $content
  585.  */
  586. function formatNavTitle($content)
  587. {
  588.   $content formatText($content'2HTML');
  589.   $content cutText($content701);
  590.  
  591.   return $content;
  592. }
  593.  
  594. /**
  595.  * formatTextli()
  596.  * Formatage des listes ( interface admin )
  597.  *
  598.  * @param string $content 
  599.  * @return string $content
  600.  */
  601. function formatTextli($content)
  602. {
  603.   $content formatText($content'2HTML');
  604.   $content cutText($content651);
  605.   return $content;
  606. }
  607.  
  608. /**
  609.  * formatTitleh2()
  610.  * Formatage des titres h2 ( interface admin )
  611.  *
  612.  * @param string $content 
  613.  * @return string $content
  614.  */
  615. function formatTitleh2($content)
  616. {
  617.   $content formatText($content'2HTML');
  618.   return $content;
  619. }
  620.  
  621. /**
  622.  * isRawText()
  623.  * check if raw text or html text
  624.  *
  625.  * @param string $t 
  626.  * @return bool 
  627.  */
  628. function isRawText($t{
  629.   if(preg_match('/<[a-z0-9]>/i'$t== 0{
  630.     return true;
  631.   else {
  632.     return false;
  633.   }
  634. }
  635.  
  636. /**
  637.  * formatText()
  638.  * Formatage de texte pour affichage
  639.  *
  640.  * @param  $content 
  641.  * @param string $format 
  642.  * @return string $content
  643.  */
  644. function formatText($content$format = -1)
  645. {
  646.   $content stripslashes(trim($content));
  647.   switch ($format{
  648.     case '2HTML':
  649.       if(RICH_TEXT_EDITOR === || isRawText($content)) $content nl2br($content);
  650.       break;
  651.     case '2FIELD':
  652.       $content htmlentities($contentENT_QUOTES'utf-8');
  653.       break;
  654.     case '2ATT':
  655.       $content htmlentities($contentENT_QUOTES'utf-8');
  656.       break;
  657.     case '2XML':
  658.       $content strip_tags(html_entity_decode ($content));
  659.       break;
  660.     case '2FILE':
  661.       //$content = addslashes(trim($content));
  662.       $content htmlspecialchars($contentENT_QUOTES'utf-8');
  663.       break;
  664.     default:
  665.   }
  666.   return $content;
  667. }
  668.  
  669. /**
  670.  * ReplaceInvalidChars()
  671.  * Remplacement des caractères invalides  par leurs entités HTML
  672.  *
  673.  * @param string $str 
  674.  * @return string $valid_string
  675.  */
  676. function ReplaceInvalidChars($str)
  677. {
  678.   $htmlentities_chars array('å' => '&#338;''ú' => '&#339;',
  679.         'ä' => '&#352;''ö' => '&#353;',
  680.         'ü' => '&#376;''à' => '&#710;',
  681.         'ò' => '&#732;''ñ' => '&#8211;',
  682.         'ó' => '&#8212;''ë' => '&#8216;',
  683.         'í' => '&#8217;''Ç' => '&#8218;',
  684.         'ì' => '&#8220;''î' => '&#8221;',
  685.         'Ñ' => '&#8222;''Ü' => '&#8224;',
  686.         'á' => '&#8225;''Ö' => '&#8230;',
  687.         'â' => '&#8240;''É' => '&#402;',
  688.         'ã' => '&#8249;''õ' => '&#8250;',
  689.         'Ä' => '&#8364;''ô' => '&#8482;',
  690.         'ï' => '&#8226;''ò' => '&#732;',
  691.         'ô' => '&#8482;');
  692.  
  693.   //$valid_string = str_replace(array_keys($htmlentities_chars), array_values($htmlentities_chars), $str);
  694.   //return $valid_string;
  695.   return $str;
  696. }
  697.  
  698. function stripAccents($string{
  699.  
  700.   $search explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
  701.   $replace explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
  702.  
  703.   return str_replace($search$replace$string);
  704.  
  705.  
  706. }
  707.  
  708. function stripText($text{
  709.  
  710.   $text strtolower($text);
  711.  
  712.   // strip all non word chars
  713.   $text preg_replace('/\W/'' '$text);
  714.   // replace all white space sections with a dash
  715.   $text preg_replace('/\ +/''-'$text);
  716.   // trim dashes
  717.   $text preg_replace('/\-$/'''$text);
  718.   $text preg_replace('/^\-/'''$text);
  719.  
  720.   return $text;
  721. }
  722.  
  723. /**
  724.  * toStringSqlDate()
  725.  * Renvoie la date au format SQL
  726.  *
  727.  * @param string $format 
  728.  * @return string $s
  729.  */
  730. function toStringSqlDate($format 'short')
  731. {
  732.   $date_format =   array(
  733.                    'dd-mm-yyyy' => array(
  734.                           'mysql' => array('short'=> '%d-%m-%Y''long'=>
  735.   array('12' => '%d-%m-%Y  %r''24' => '%d-%m-%Y  %T')),
  736.                         'pgsql' => array('short'=> 'DD-MM-YYYY''long'=>
  737.   array('12' => 'DD-MM-YYYY HH12:MI:SS''24' => 'DD-MM-YYYY HH24:MI:SS'))),
  738.                     'yyyy-mm-dd' => array(
  739.                           'mysql' => array('short'=> '%Y-%m-%d''long'=>
  740.   array('12' => '%Y-%m-%d  %r''24' => '%Y-%m-%d  %T')),
  741.                         'pgsql' => array('short'=> 'YYYY-MM-DD''long'=>
  742.   array('12' => 'YYYY-MM-DD HH12:MI:SS''24' => 'YYYY-MM-DD HH24:MI:SS'))),
  743.  
  744.   );
  745.    
  746.   if($format == 'long'$s $date_format[DATE_FORMAT][SQL][$format][TIME_FORMAT];
  747.   else $s $date_format[DATE_FORMAT][SQL][$format];
  748.  
  749.   return $s;
  750. }
  751.  
  752.  
  753. /**
  754.  * date_compare()
  755.  * Compare 2 dates with a given operator.
  756.  * @param  $date1 
  757.  * @param  $date2 
  758.  * @param  $op 
  759.  * @return boolean 
  760.  */
  761. function date_compare($date1$date2$op{
  762.  
  763.   $date1strtotime(formatDate($date1true));
  764.   $date2strtotime(formatDate($date2true));
  765.  
  766.   switch($op{
  767.     case '>':
  768.       if($date1 $date2return true;
  769.       else return false;
  770.       break;
  771.     case '<':
  772.       if($date1 $date2return true;
  773.       else return false;
  774.     case '>=':
  775.       if($date1 >= $date2return true;
  776.       else return false;
  777.       break;
  778.     case '<=':
  779.       if($date1 <= $date2return true;
  780.       else return false;
  781.     case '==':
  782.       if($date1 == $date2return true;
  783.       else return false;
  784.     default:
  785.       return false;
  786.   }
  787. }
  788.  
  789. /**
  790.  * ln10filename()
  791.  * Build a localized filename
  792.  * according to the cuurent language
  793.  *
  794.  * @param string $file 
  795.  * @return string 
  796.  */
  797. function ln10filename($file)
  798. {
  799.  
  800.   $tmp=@explode("."$file);
  801.   $total count($tmp1;
  802.   $ext $tmp[$total];
  803.   unset($tmp[$total]);
  804.  
  805.   return @implode("."$tmp)'.' U_L'.' .$ext;
  806. }
  807.  
  808.  
  809. /**
  810.  * distInclude()
  811.  * Include the required file
  812.  * if no user file is found,
  813.  * includes the dist/ version file.
  814.  * Localized files have the priority
  815.  *
  816.  * @param string $file 
  817.  * @return void 
  818.  */
  819. function distInclude($file$default_dist)
  820. {
  821.   $l10n_file ln10filename($file);
  822.   $l10n_file_dist =  dirname($l10n_file).'/dist/'.basename($l10n_file);
  823.  
  824.   $file_dist_default =  $default_dist.'dist/'.basename($file);
  825.   $l10n_file_dist_default $default_dist.'dist/'.basename($l10n_file);
  826.  
  827.   if(file_exists($l10n_file)) {
  828.     _debug('distInclude() file Inclusion : '.$l10n_file);
  829.     include_once($l10n_file);
  830.  
  831.   elseif(file_exists($l10n_file_dist))  {
  832.     _debug('distInclude() file Inclusion : '.$l10n_file_dist);
  833.     include_once($l10n_file_dist);
  834.   }
  835.   elseif(file_exists($file)) {
  836.     _debug('distInclude() file Inclusion : '.$file);
  837.     include_once($file);
  838.   }
  839.   elseif(file_exists($l10n_file_dist_default)) {
  840.     _debug('distInclude() file Inclusion : '.$l10n_file_dist_default);
  841.     include_once($l10n_file_dist_default);
  842.   }
  843.   elseif(file_exists($file_dist_default)) {
  844.     _debug('distInclude() file Inclusion : '.$file_dist_default);
  845.     include_once($file_dist_default);
  846.   }
  847.   else {
  848.     _debug('distInclude() file Inclusion : '.dirname($file).'/dist/'.basename($file));
  849.     include_once(dirname($file).'/dist/'.basename($file));
  850.   }
  851.  
  852. }
  853.  
  854. /**
  855.  * themePath()
  856.  * check if a template file version exists or not
  857.  * if no user file is found in theme,
  858.  * return the default module version file.
  859.  *
  860.  * @param string $file 
  861.  * @param string $path 
  862.  * @return string 
  863.  */
  864. function themePath($file$path0)
  865. {
  866.   if($path == 0$path THEME_PUBLIC_PATH;
  867.   $theme_file $path.'override/'.str_replace('../'''$file);
  868.   if(file_exists($theme_file)) {
  869.     _debug('themePath() returned value : '.$theme_file);
  870.     return $theme_file;
  871.  
  872.   else {
  873.     _debug('themePath() returned value : '.$file);
  874.     return $file;
  875.   }
  876.  
  877. }
  878.  
  879. /**
  880.  * formatDate()
  881.  * Renvoie la date aux formats yyyy-mm-dd ou dd-mm-yyyy suivant le cas de départ
  882.  * Si $db == true renvoie toujours la date au format yyyy-mm-dd
  883.  *
  884.  * @param string $date 
  885.  * @param boolean $db 
  886.  * @return string $new_date
  887.  */
  888. function formatDate($date$db false)
  889. {
  890.   @list($part1$part2$part3explode('-'$date);
  891.   if(strlen($part1== 2{
  892.     $new_date $part3 '-' $part2 '-' $part1;
  893.   else {
  894.     $new_date $part1 '-' $part2 '-' $part3;
  895.   }
  896.   if($db == true{
  897.     // always return yyyy-mm-dd format
  898.     if(strlen($part1== 2{
  899.       $new_date $part3 '-' $part2 '-' $part1;
  900.     else {
  901.       $new_date $part1 '-' $part2 '-' $part3;
  902.     }
  903.   }
  904.  
  905.   return $new_date;
  906. }
  907.  
  908.  
  909. /**
  910.  * date_rfc2822()
  911.  * Format date to RFC 2822 date format
  912.  * @param string $date 
  913.  * @return string (exemple : Thu, 21 Dec 2000 16:01:07 +0200)
  914.  */
  915. function date_rfc2822($date{
  916.   if(!isNullDate($date)) {
  917.     $tmp_date formatDate($datetrue);
  918.     @list($y$m$dexplode('-'$tmp_date);
  919.     return date("r"mktime(300$m$d$y));
  920.   else {
  921.     return false;
  922.   }
  923. }
  924.  
  925.  
  926. function isNullDate($date)
  927. {
  928.   if($date == '0001-01-01' || $date == '01-01-0001'{
  929.     return true;
  930.   else return false;
  931.  
  932. }
  933.  
  934. /**
  935.  * empty_nc()
  936.  * retourne le contenu ou N.C
  937.  *
  938.  * @param string $content 
  939.  * @return string $content
  940.  */
  941. function empty_nc($content)
  942. {
  943.   $content trim($content);
  944.   if (empty($content|| isNullDate($content)) $content _t('divers','nc');
  945.  
  946.   return $content;
  947. }
  948.  
  949. /**
  950.  * empty_none()
  951.  * retourne le contenu ou 'aucun'
  952.  *
  953.  * @param string $content 
  954.  * @return string $content
  955.  */
  956. function empty_none($content)
  957. {
  958.   $content trim($content);
  959.   if (empty($content)) $content _t('divers','none');
  960.  
  961.   return $content;
  962. }
  963.  
  964. /**
  965.  * empty_none()
  966.  * retourne le contenu ou 0
  967.  *
  968.  * @param string $content 
  969.  * @return string $content
  970.  */
  971. function empty_numeric($content)
  972. {
  973.   $content trim($content);
  974.   if (empty($content)) $content 0;
  975.  
  976.   return $content;
  977. }
  978.  
  979. /**
  980.  * checkdate_validity()
  981.  * Vérifie la validité d'une date
  982.  *
  983.  * @param string $date 
  984.  * @param string $msg (optionnal)
  985.  * @return boolean true or error message (string)
  986.  */
  987. function checkdate_validity($date$msg'')
  988. {
  989.  
  990.   $date=formatDate($datetrue);
  991.   @list($year$month$dayexplode('-'$date);
  992.  
  993.   if(!preg_match('/^\d{4}-\d\d-\d\d$/'$date)) {
  994.     $msg .= _t('date','not_valid');
  995.     return $msg;
  996.   }
  997.  
  998.   if (!@checkdate($month $day $year)) return $msg _t('date','date_do_not_exist');
  999.   return true;
  1000. }
  1001.  
  1002. /**
  1003.  * sortItems()
  1004.  * Return an array with key and value
  1005.  * with ID as key and RANGE as value
  1006.  * @return array 
  1007.  */
  1008. function sortItems($rub$data{
  1009.  
  1010.   $a array();
  1011.  
  1012.   for($i=0$i<count($data)$i++{
  1013.     $v $data[$i];
  1014.     $a[$v]$i+1;
  1015.   }
  1016.  
  1017.   return $a;
  1018.  
  1019. }
  1020.  
  1021. /**
  1022.  * display_errors()
  1023.  * Affichage d'un message d'erreur utilisateur
  1024.  *
  1025.  * @param string $msg 
  1026.  * @return void (echo)
  1027.  */
  1028. function display_errors($msg)
  1029. {
  1030.   $display_it "<div class=\"error\">\n";
  1031.   $display_it .= $msg;
  1032.   $display_it .= "</div>\n";
  1033.   echo $display_it;
  1034. }
  1035.  
  1036. /**
  1037.  * system_error()
  1038.  * Affichage d'un message d'erreur syst�me
  1039.  *
  1040.  * @param string $msg 
  1041.  * @return void (echo)
  1042.  */
  1043. function system_error($msg ERROR_SYSTEM)
  1044. {
  1045.   $display_it "<div class=\"systemerror\">\n";
  1046.   $display_it .= $msg;
  1047.   $display_it .= "</div>\n";
  1048.   echo $display_it;
  1049.   exit;
  1050. }
  1051.  
  1052. /**
  1053.  * get_temp_name()
  1054.  * obtenir le nom temporaire d'un fichier
  1055.  *
  1056.  * @param string $path 
  1057.  * @return string $temp_path
  1058.  * @todo not used anymore (verify) - can be removed
  1059.  */
  1060. function get_temp_name($path)
  1061. {
  1062.   $short_path dirname($path);
  1063.   $filename basename($path);
  1064.   $temp_path $short_path "/temp_" $filename;
  1065.   return $temp_path;
  1066. }
  1067.  
  1068. /**
  1069.  * get_min_name()
  1070.  * obtenir le nom de la miniature d'un fichier
  1071.  *
  1072.  * @param string $path 
  1073.  * @return string $min_path
  1074.  * @todo not used anymore (verify) - can be removed
  1075.  */
  1076. function get_min_name($path)
  1077. {
  1078.   $short_path dirname($path);
  1079.   $filename basename($path);
  1080.   $min_path $short_path "/min_" $filename;
  1081.   return $min_path;
  1082. }
  1083.  
  1084. /**
  1085.  * ExcedMaxSize()
  1086.  * Teste si une image dépasse ou non la taille autorisée (en pixels)
  1087.  *
  1088.  * @param string $path 
  1089.  * @param integer $width_max 
  1090.  * @return boolean 
  1091.  */
  1092. function ExcedMaxSize($path$width_max)
  1093. {
  1094.   list($width$height$type$attrgetimagesize($path);
  1095.   if ($width $width_max || $height $width_maxreturn true;
  1096.   else return false;
  1097. }
  1098.  
  1099. /**
  1100.  * GetAllPhotoUri()
  1101.  * renvoie les paths des photos dans un tableau
  1102.  *
  1103.  * @param string $path 
  1104.  * @param string $opt 
  1105.  * @return array $tab
  1106.  * @todo - Remove in 1.6 if not use anymore
  1107.  */
  1108. function GetAllPhotoUri($path$opt = -1)
  1109. {
  1110.   if (empty($path)) return false;
  1111.   else {
  1112.     $tab explode('|'$path);
  1113.     if ($opt == 'min'array_walk($tab'get_min_name');
  1114.     return $tab;
  1115.   }
  1116. }
  1117.  
  1118. /**
  1119.  * cancel_button()
  1120.  * génére un bouton de retour
  1121.  *
  1122.  * @param  $back_uri 
  1123.  * @return string 
  1124.  */
  1125. function cancel_button($back_uri)
  1126. {
  1127.   return '<input name="annuler" type="button" value="' _t('btn','annul''" class="button" id="annuler" onclick="window.location=\'' $back_uri '\';" />';
  1128. }
  1129.  
  1130. /**
  1131.  * GetDisplayUserRight()
  1132.  * renvoie les droits d'un utilisateur
  1133.  *
  1134.  * @param string $indice 
  1135.  * @param string $module 
  1136.  * @return string 
  1137.  */
  1138. function GetDisplayUserRight($indice$module = -1)
  1139. {
  1140.   $indice strtoupper($indice);
  1141.   if ($indice == 'U'return _t('user','norights');
  1142.   if ($indice == 'A'return _t('user','adminrights');
  1143.   if ($indice == 'O' && $module == 'dashboard'return _t('user','managerrights');
  1144.   if ($indice == 'O' && $module == 'workshop'return _t('user','animatorrights');
  1145.   if ($indice == 'O' && ($module != 'workshop' && $module != 'dashboard')) return _t('user','redactorrights');
  1146. }
  1147.  
  1148. /**
  1149.  * Display_linkin_page()
  1150.  *
  1151.  * @param array $table_link 
  1152.  * @param integer $total 
  1153.  * @param integer $debut 
  1154.  * @param integer $pas 
  1155.  * @return void 
  1156.  ***/
  1157. function Display_linkin_page($table_link$total$debut$pas SELECT_LIMIT)
  1158. {
  1159.   $result ceil($total $pas);
  1160.   if ($result <= 1return '&nbsp;';
  1161.   else {
  1162.     $link '<div class="pagination">'.END_LINE;
  1163.     $link .= '« ';
  1164.     $sep='';
  1165.     for($i 0$i $result$i++{
  1166.       $current_pos ($pas $i);
  1167.       if ($debut == $current_pos$link .= $sep."<span>" ($i 1"</span> \n";
  1168.       else {
  1169.         $array_pos array ('debut' => $current_pos);
  1170.         $new_table_link array_merge ($table_link$array_pos);
  1171.         $link .= $sep.'<a href="'HrefMaker($new_table_link'">' ($i 1'</a>'.END_LINE;
  1172.       }
  1173.       $sep=' | ';
  1174.     }
  1175.     $link .= ' »';
  1176.     $link .= '</div>'.END_LINE;
  1177.     echo $link;
  1178.   }
  1179. }
  1180.  
  1181. /**
  1182.  * linkin_page()
  1183.  * création d'un navigateur de pages numérotées
  1184.  *
  1185.  * @param string $string_uri 
  1186.  * @param integer $total 
  1187.  * @param integer $debut 
  1188.  * @param integer $pas 
  1189.  * @return string $link
  1190.  */
  1191. function linkin_page($string_uri$total$debut$pas SELECT_LIMIT)
  1192. {
  1193.   $result ceil($total $pas);
  1194.   if ($result <= 1return '&nbsp;';
  1195.   else {
  1196.     if (strpos($string_uri'?'=== false$string_uri .= '?';
  1197.     else $string_uri .= '&amp;';
  1198.     $link '<div class="pagination">';
  1199.     for($i 0$i $result$i++{
  1200.       $current_pos ($pas $i);
  1201.       if ($debut == $current_pos$link .= "<span>" ($i 1"</span> \n";
  1202.       else $link .= "<a href=\"" $string_uri "debut=" $current_pos "\">" ($i 1"</a> \n";
  1203.     }
  1204.     $link .= '</div>';
  1205.     return $link;
  1206.   }
  1207. }
  1208.  
  1209. /**
  1210.  * display_statut()
  1211.  * renvoie le statut en pleines lettres
  1212.  *
  1213.  * @param string $statut 
  1214.  * @return string $result
  1215.  */
  1216. function display_statut($statut)
  1217. {
  1218.   switch ($statut{
  1219.     case 'P':
  1220.       $result _t('statut','public');
  1221.       break;
  1222.     case 'D':
  1223.       $result _t('statut','draft');
  1224.       break;
  1225.     case 'E':
  1226.       $result _t('statut','E');
  1227.       break;
  1228.     case 'AA':
  1229.       $result _t('statut','AA');
  1230.       break;
  1231.     case 'PA':
  1232.       $result _t('statut','PA');
  1233.       break;
  1234.     case 'C':
  1235.       $result _t('statut','C');
  1236.       break;
  1237.     case 'U':
  1238.       $result _t('statut','U');
  1239.       break;
  1240.     case 'O':
  1241.       $result _t('statut','O');
  1242.       break;
  1243.     case 'A':
  1244.       $result _t('statut','A');
  1245.       break;
  1246.     case 'W':
  1247.       $result _t('statut','W');
  1248.       break;
  1249.     default:
  1250.       $result _t('statut','public');
  1251.   }
  1252.   return $result;
  1253. }
  1254.  
  1255. /**
  1256.  * linkin_content()
  1257.  * Cherche les liens et emails dans du contenu -> linkage
  1258.  *
  1259.  * @param string $content 
  1260.  * @param string $option 
  1261.  * @return string $content
  1262.  */
  1263. function linkin_content($content$option 'ALL')
  1264. {
  1265.   if(defined('AUTO_LINK'&& AUTO_LINK == 1)
  1266.   {
  1267.     if(defined('RICH_TEXT_EDITOR'&& RICH_TEXT_EDITOR == (string) 0{
  1268.       if ($option == 'ALL' || $option == 'MAIL'{
  1269.         $content eregi_replace("( |<br />)+([_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+)"'\\1<a href="mailto:\\2">\\2</a>'$content);
  1270.       }
  1271.       if ($option == 'ALL' || $option == 'LINK'{
  1272.         $content eregi_replace("(http|https|ftp|ftps)://([-a-z0-9#?/&=:,_;@%.{}]*)([a-z0-9=]{2,4})"'<a href="\\1://\\2\\3" class="out">\\1://\\2\\3</a>'$content);
  1273.       }
  1274.     }
  1275.   }
  1276.  
  1277.   return $content;
  1278. }
  1279.  
  1280. /**
  1281.  * QuickBoxNow()
  1282.  * Génération de la quickbox
  1283.  *
  1284.  * @param string $module 
  1285.  * @param string $h1 
  1286.  * @param string $liste 
  1287.  * @param string $suffixclass 
  1288.  * @return string $quickbox
  1289.  */
  1290. function QuickBoxNow($module$h1$liste$suffixclass '')
  1291. {
  1292.   $quickbox "<div class=\"entete\">\n<div class=\"qb_ico\" id=\"qbico" $suffixclass "\" title=\"" $module "\"></div>\n";
  1293.   $quickbox .= "<div class=\"quickbox\" id=\"qbbg" $suffixclass "\">\n";
  1294.   $quickbox .= "<h1>" $h1 "</h1>\n";
  1295.   $quickbox .= "<ul>";
  1296.   $quickbox .= $liste;
  1297.   $quickbox .= "</ul>";
  1298.   $quickbox .= "</div>";
  1299.   $quickbox .= "</div>";
  1300.  
  1301.   return $quickbox;
  1302. }
  1303.  
  1304. /**
  1305.  * ReloadIndex()
  1306.  * Chargement de l'index après destruction de sessions
  1307.  *
  1308.  * @param string $item 
  1309.  * @return void 
  1310.  */
  1311. function ReloadIndex($item)
  1312. {
  1313.   switch ($item{
  1314.     case 'public':
  1315.       return header("Location: ../public/index.php");
  1316.       break;
  1317.     case 'admin':
  1318.       return header("Location: ../admin/logout.php");
  1319.       break;
  1320.   }
  1321. }
  1322.  
  1323. /**
  1324.  * getmicrotime()
  1325.  * renvoie le temps en microsecondes
  1326.  *
  1327.  * @return float 
  1328.  */
  1329. function getmicrotime()
  1330. {
  1331.   list($usec$secexplode(" "microtime());
  1332.   return ((float)$usec + (float)$sec);
  1333. }
  1334.  
  1335.  
  1336. /**
  1337.  * availablePlugins()
  1338.  * Return available plugins
  1339.  * @return array 
  1340.  ***/
  1341. function availablePlugins({
  1342.   $a array();
  1343.   if ($handle opendir('../plugins/')) {
  1344.     while (false !== ($file readdir($handle))) {
  1345.       if (substr($file04== 'l21_' {
  1346.         array_push($a$file);
  1347.       }
  1348.     }
  1349.     closedir($handle);
  1350.   }
  1351.  
  1352.   return $a;
  1353. }
  1354.  
  1355.  
  1356.  
  1357. /**
  1358.  * sql_dump2array()
  1359.  * @param $url 
  1360.  * @param $a 
  1361.  * @return array 
  1362.  * @link http://fr2.php.net/manual/fr/function.mysql-query.php
  1363.  */
  1364. function sql_dump2array($url$a = -1{
  1365.    
  1366.   $handle @fopen($url"r");
  1367.   $query "";
  1368.   if($a == -1$a array();
  1369.  
  1370.   while(!feof($handle)) {
  1371.     $sql_line fgets($handle);
  1372.     if (trim($sql_line!= "" && strpos($sql_line"--"=== false && strpos($sql_line"#"=== false{
  1373.       array_push($a$sql_line);
  1374.     }
  1375.   }
  1376.   return $a;
  1377. }
  1378.  
  1379. /**
  1380.  * getProgressbar()
  1381.  * Return a graphic progress bar
  1382.  * @param $value integer
  1383.  * @param $max integer
  1384.  * @param $unit string
  1385.  * @return string 
  1386.  */
  1387. function getProgressbar($value$max$unit{
  1388.  
  1389.   $step $max PROJECT_STEP;
  1390.   $threshold $value PROJECT_STEP;
  1391.  
  1392.   $str   =     '<div class="progressbar" title="'.$value.' '.$unit.'">'.END_LINE;
  1393.  
  1394.   for($i=1$i<=$step$i++{
  1395.     ($i <= $threshold$class 'class="completed"' $class '';
  1396.     $str .='<span '.$class.'>&nbsp;</span>';
  1397.   }
  1398.   $str  .=    '</div>'.END_LINE;
  1399.  
  1400.   return $str;
  1401. }
  1402.  
  1403. /**
  1404.  * geocode()
  1405.  * get Long/Latitude coordinates
  1406.  * @param $address string
  1407.  * @return object 
  1408.  */
  1409. function geocode($address{
  1410.  
  1411.   $o->{'status''geocoder_disabled';
  1412.  
  1413.   if(!defined('GEOCODER_ENABLED'|| GEOCODER_ENABLED == 0)
  1414.   return $o->{'status'};
  1415.  
  1416.   $address=str_replace(" ","+",$address);
  1417.   if ($address{
  1418.     $json file_get_contents(GEOCODER_URL.'address='.$address.'&sensor=false');
  1419.  
  1420.     $o json_decode($json);
  1421.   }
  1422.  
  1423.   return $o;
  1424. }
  1425.  
  1426. /**
  1427.  * placeholderReplace()
  1428.  * format '{$key}'
  1429.  * @param $array 
  1430.  * @param $input 
  1431.  * @return array 
  1432.  */
  1433. function placeholderReplace($array$input{
  1434.   foreach ($input as $key => $value)
  1435.   {
  1436.     $array preg_replace("/{{$key}}/i"$value$array);
  1437.   }
  1438.   return $array;
  1439. }
  1440.  
  1441. /**
  1442.  * GenerateXhtmlPage()
  1443.  *
  1444.  * @param $string 
  1445.  * @param integer $time 
  1446.  * @param unknown $redirect 
  1447.  * @return 
  1448.  ***/
  1449. function GenerateXhtmlPage($string$time 2$redirect CURRENT_APP_URL)
  1450. {
  1451.  
  1452.  
  1453.   $page  '<?xml version="1.0" encoding="' CHARSET '" xml:lang="' U_L '"?>' END_LINE;
  1454.   $page .= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">' END_LINE;
  1455.   $page .= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="' U_L '">' END_LINE;
  1456.   $page .= '<head>' END_LINE;
  1457.   $page .= '<meta http-equiv="content-type" content="text/html;charset=' CHARSET '" />' END_LINE;
  1458.   $page .= '<meta http-equiv="content-langage" content="' CHARSET '" />' END_LINE;
  1459.   $page .= '<meta http-equiv="refresh" content="' $time ';url=' $redirect '">' END_LINE;
  1460.   $page .= '<link rel="icon" type="image/gif" href="' .THEME_ADMIN_PATH'images/favicon.gif" />' END_LINE;
  1461.   $page .= '<title>'.SITE_NAME.'</title>' END_LINE;
  1462.   $page .= '</head>' END_LINE;
  1463.   $page .= '<body>' END_LINE;
  1464.   $page .= '<div class="info" style="margin-top:10em">'.$string.END_LINE;
  1465.   $page .= '<br />';
  1466.   $page .= sprintf_t('divers','redirect_string')$redirect$time);
  1467.   $page .= '</div>'END_LINE;
  1468.   $page .= '</body>' END_LINE;
  1469.   $page .= '</html>' END_LINE;
  1470.  
  1471.   return $page;
  1472. }
  1473.  
  1474. /**
  1475.  * _debug()
  1476.  * Display a debug message
  1477.  * @param string 
  1478.  * @return void 
  1479.  ***/
  1480. function _debug($string)
  1481. {
  1482.   if(isset($GLOBALS['Dbg']))
  1483.   {
  1484.     global $Dbg;
  1485.  
  1486.     $Dbg->add($string);
  1487.     $Dbg->stopTimer();
  1488.   }
  1489. }
  1490.  
  1491. /**
  1492.  * headerAddCSS()
  1493.  * Add CSS into header
  1494.  * @param string 
  1495.  * @param string 
  1496.  * @return boolean 
  1497.  ***/
  1498. function headerAddCSS($path$pos 'default')
  1499. {
  1500.   if(!fopen($path'r')) {
  1501.     _debug('<b>Problem loading CSS file</b> : '.$path ' (position : '.$pos.')');
  1502.     return false;
  1503.   }
  1504.  
  1505.   $str '<link type="text/css" rel="stylesheet" href="'.$path.'" />'.END_LINE;
  1506.  
  1507.   if(isset($GLOBALS['CSSheader']))
  1508.   {
  1509.     if($pos == 'first'{
  1510.       $GLOBALS['CSSheader'$str $GLOBALS['CSSheader'];
  1511.     else {
  1512.       $GLOBALS['CSSheader'.= $str END_LINE ;
  1513.     }
  1514.   else {
  1515.     $GLOBALS['CSSheader'$str;
  1516.   }
  1517.   _debug('Loading <b>CSS file</b> : '.$path ' (position : '.$pos.')');
  1518.  
  1519.   return true;
  1520. }
  1521.  
  1522. /**
  1523.  * headerAddJS()
  1524.  * Add JS into header
  1525.  * @param string 
  1526.  * @param string 
  1527.  * @return boolean 
  1528.  ***/
  1529. function headerAddJS($path$pos 'default')
  1530. {
  1531.   if(!fopen($path'r')) {
  1532.     _debug('<b>Problem loading JS file</b> : '.$path ' (position : '.$pos.')');
  1533.     return false;
  1534.   }
  1535.  
  1536.   $str'<script type="text/javascript" src="'.$path .'"></script>'.END_LINE;
  1537.  
  1538.   if(isset($GLOBALS['JSheader']))
  1539.   {
  1540.     if($pos == 'first'{
  1541.       $GLOBALS['JSheader'$str $GLOBALS['JSheader'];
  1542.     }
  1543.     else {
  1544.       $GLOBALS['JSheader'.= $str END_LINE ;
  1545.     }
  1546.   else {
  1547.     $GLOBALS['JSheader'$str;
  1548.   }
  1549.   _debug('Loading <b>JS file</b> : '.$path ' (position : '.$pos.')');
  1550.  
  1551.   return true;
  1552. }
  1553.  
  1554. /**
  1555. * footerAddInlineJS()
  1556. * Add inline JS into footer
  1557. * the resulting js is wrapped with <script> tags and jQuery .ready() function
  1558. @param string 
  1559. @param string 
  1560. @return boolean 
  1561. ***/
  1562. function footerAddInlineJS($str$pos 'default')
  1563. {
  1564.  
  1565.     if(isset($GLOBALS['JSInlinefooter']))
  1566.     {
  1567.         if($pos == 'first'{
  1568.             $GLOBALS['JSInlinefooter'$str END_LINE$GLOBALS['JSInlinefooter'];
  1569.         }
  1570.         else {
  1571.             $GLOBALS['JSInlinefooter'.= $str END_LINE ;
  1572.         }
  1573.     else {
  1574.         $GLOBALS['JSInlinefooter'$strEND_LINE;
  1575.     }
  1576.     _debug('Loading <b>inline JS</b> : '.cutText($str90' (position : '.$pos.')');
  1577.  
  1578.     return true;
  1579. }
  1580.  
  1581. /**
  1582.  * footerAddJS()
  1583.  * Add JS into footer
  1584.  * @param string 
  1585.  * @param string 
  1586.  * @return boolean 
  1587.  ***/
  1588. function footerAddJS($path$pos 'default')
  1589. {
  1590.   if(!fopen($path'r')) {
  1591.     _debug('<b>Problem loading JS file</b> : '.$path ' (position : '.$pos.')');
  1592.     return false;
  1593.   }
  1594.  
  1595.   $str'<script type="text/javascript" src="'.$path .'"></script>'.END_LINE;
  1596.  
  1597.   if(isset($GLOBALS['JSfooter']))
  1598.   {
  1599.     if($pos == 'first'{
  1600.       $GLOBALS['JSfooter'$str $GLOBALS['JSheader'];
  1601.     }
  1602.     else {
  1603.       $GLOBALS['JSfooter'.= $str END_LINE ;
  1604.     }
  1605.   else {
  1606.     $GLOBALS['JSfooter'$str END_LINE ;
  1607.   }
  1608.   _debug('Loading <b>JS file</b> : '.$path ' (position : '.$pos.')');
  1609.  
  1610.   return true;
  1611. }
  1612.  
  1613. /**
  1614.  * AddDynamicHeader()
  1615.  * Display JS and CSS header
  1616.  * @return void 
  1617.  ***/
  1618. function AddDynamicHeader({
  1619.   if(isset($GLOBALS['JSheader'])) echo $GLOBALS['JSheader'];
  1620.   if(isset($GLOBALS['CSSheader']))  echo $GLOBALS['CSSheader'];
  1621. }
  1622.  
  1623. /**
  1624.  * AddDynamicFooter()
  1625.  * Display JS footer
  1626.  * @return void 
  1627.  ***/
  1628. function AddDynamicFooter({
  1629.   if(isset($GLOBALS['JSfooter'])) echo $GLOBALS['JSfooter'];
  1630.   if(isset($GLOBALS['JSInlinefooter'])) {
  1631.     echo '<script type="text/javascript">'.END_LINE;
  1632.     echo '    $(document).ready(function() {'.END_LINE;
  1633.     echo $GLOBALS['JSInlinefooter'];
  1634.     echo '  });'.END_LINE;
  1635.     echo '</script>'.END_LINE;
  1636.   }
  1637. }
  1638.  
  1639. /**
  1640.  * check4newVersion()
  1641.  * Display a link to download new version if available
  1642.  * @return string 
  1643.  ***/
  1644. function check4newVersion({
  1645.   try{
  1646.     if(!@$rss=simplexml_load_file(SITE_LINEA_URL.'/linea_version.xml')){
  1647.       throw new Exception('Version : xml file was not found');
  1648.     }
  1649.     $current_version preg_replace("/([^0-9])/",''LINEA_VERSION)// remove letter (if dev version)
  1650.     _debug('current ver : '.$current_version);
  1651.     $latest_version str_pad(str_replace('.'''$rss->num)4'0');
  1652.     $current_version str_pad(str_replace('.'''$current_version)4'0');
  1653.  
  1654.     if((integer)$latest_version > (integer)$current_version{
  1655.       $update '<div id="version-check">'._t('check_update','search').' : <a href="'.(string)$rss->link.'">'.sprintf(_t('check_update','dl')$rss->num).'</a></div>';
  1656.     else {
  1657.       $update '<div id="version-check">'._t('check_update','search').' : '._t('check_update','ok').'</div>';
  1658.     }
  1659.   }
  1660.   catch(Exception $e){
  1661.     $update $e->getMessage();
  1662.   }
  1663.  
  1664.   return $update;
  1665. }
  1666.  
  1667. /**
  1668.  * loadThemeInfo()
  1669.  * Load theme info
  1670.  * @param string 
  1671.  * @param string 
  1672.  * @return string 
  1673.  ***/
  1674. function loadThemeInfo($type$name{
  1675.   $a array();
  1676.   try{
  1677.     if(!@$flow=simplexml_load_file(SITE_PATH.'templates/'.$type.'/'.$name.'/theme.xml')){
  1678.       throw new Exception($name.' plugin : xml file was not found');
  1679.     }
  1680.     $a['name'$flow->themename;
  1681.     $a['description'$flow->description;
  1682.     $a['version'$flow->version;
  1683.     $a['date'$flow->date;
  1684.     $a['compatibility'$flow->compatibility;
  1685.     $a['author'$flow->author;
  1686.     $a['homepage'$flow->homepage;
  1687.  
  1688.     return $a;
  1689.   }
  1690.   catch(Exception $e){
  1691.     return $e->getMessage();
  1692.   }
  1693. }
  1694. /**
  1695.  * For compatibility with PHP < 5.2
  1696.  * json_decode
  1697.  */
  1698. if !function_exists('json_decode') ){
  1699.   function json_decode($content$assoc=false){
  1700.     require_once __DIR__ .'/vendor/JSON/JSON.php';
  1701.     if $assoc ){
  1702.       $json new Services_JSON(SERVICES_JSON_LOOSE_TYPE);
  1703.     else {
  1704.       $json new Services_JSON;
  1705.     }
  1706.     return $json->decode($content);
  1707.   }
  1708. }
  1709.  
  1710. /**
  1711.  * For compatibility with PHP < 5.2
  1712.  * json_encode
  1713.  */
  1714. if !function_exists('json_encode') ){
  1715.   function json_encode($content){
  1716.     require_once __DIR__ .'/vendor/JSON/JSON.php';
  1717.     $json new Services_JSON;
  1718.      
  1719.     return $json->encode($content);
  1720.   }
  1721. }
  1722.  
  1723. /**
  1724.  Validate an email address.
  1725.  Provide email address (raw input)
  1726.  Returns true if the email address has the email
  1727.  address format and the domain exists.
  1728.  @link http://www.linuxjournal.com/article/9585
  1729.  */
  1730. function validEmail($email)
  1731. {
  1732.   $isValid true;
  1733.   $atIndex strrpos($email"@");
  1734.   if (is_bool($atIndex&& !$atIndex)
  1735.   {
  1736.     $isValid false;
  1737.   }
  1738.   else
  1739.   {
  1740.     $domain substr($email$atIndex+1);
  1741.     $local substr($email0$atIndex);
  1742.     $localLen strlen($local);
  1743.     $domainLen strlen($domain);
  1744.     if ($localLen || $localLen 64)
  1745.     {
  1746.       // local part length exceeded
  1747.       $isValid false;
  1748.     }
  1749.     else if ($domainLen || $domainLen 255)
  1750.     {
  1751.       // domain part length exceeded
  1752.       $isValid false;
  1753.     }
  1754.     else if ($local[0== '.' || $local[$localLen-1== '.')
  1755.     {
  1756.       // local part starts or ends with '.'
  1757.       $isValid false;
  1758.     }
  1759.     else if (preg_match('/\\.\\./'$local))
  1760.     {
  1761.       // local part has two consecutive dots
  1762.       $isValid false;
  1763.     }
  1764.     else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/'$domain))
  1765.     {
  1766.       // character not valid in domain part
  1767.       $isValid false;
  1768.     }
  1769.     else if (preg_match('/\\.\\./'$domain))
  1770.     {
  1771.       // domain part has two consecutive dots
  1772.       $isValid false;
  1773.     }
  1774.     else if
  1775.     (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
  1776.     str_replace("\\\\","",$local)))
  1777.     {
  1778.       // character not valid in local part unless
  1779.       // local part is quoted
  1780.       if (!preg_match('/^"(\\\\"|[^"])+"$/',
  1781.       str_replace("\\\\","",$local)))
  1782.       {
  1783.         $isValid false;
  1784.       }
  1785.     }
  1786.     if(CHECK_LINK == 1{
  1787.       if ($isValid && !(checkdnsrr($domain,"MX"|| checkdnsrr($domain,"A")))
  1788.       {
  1789.         // domain not found in DNS
  1790.         $isValid false;
  1791.       }
  1792.     }
  1793.   }
  1794.   return $isValid;
  1795. }
  1796.  
  1797. /**
  1798.  * commentEnabled($m)
  1799.  * Check if comment is enabled on
  1800.  * given module
  1801.  * @param string 
  1802.  * @return boolean 
  1803.  ***/
  1804. function commentEnabled($m)
  1805. {
  1806.   if(!defined('MOD_COMMENT'|| MOD_COMMENT == 0{
  1807.     return false;
  1808.   else {
  1809.     if(is_numeric(strpos(COMMENT_MODULES$m))) return true;
  1810.     else return false;
  1811.   }
  1812. }
  1813.  
  1814. /**
  1815.  * setBreadcrumb()
  1816.  * Set breadcrumb content
  1817.  * @param array 
  1818.  * @return void 
  1819.  ***/
  1820. function setBreadcrumb($array)
  1821. {
  1822.   if(!isset($GLOBALS['breadcrumb'])) $GLOBALS['breadcrumb']array();
  1823.   $GLOBALS['breadcrumb'array_merge($GLOBALS['breadcrumb']$array);
  1824. }
  1825.  
  1826. /**
  1827.  * getBreadcrumb()
  1828.  * get the Breadcrumb for displaying
  1829.  * @param string (optional)
  1830.  * @return string 
  1831.  ***/
  1832. function getBreadcrumb($sep '»')
  1833. {
  1834.   $str '<div id="breadcrumb">'.END_LINE;
  1835.   $str.= '<ul>'.END_LINE;
  1836.   $str.= '<li>'.$sep.' <a href="'.SITE_ROOT_URL.'public/">'._t('way''home').'</a></li>'.END_LINE;
  1837.   foreach($GLOBALS['breadcrumb'as $key => $value{
  1838.  
  1839.     if($value!=false$str.= '<li>'.$sep.' <a href="'.$value.'">'.$key.'</a></li>'.END_LINE;
  1840.     else $str.= '<li>'.$sep.' '.$key.'</li>'.END_LINE;
  1841.   }
  1842.   $str.= '</ul>'.END_LINE;
  1843.   $str.= '</div>'.END_LINE;
  1844.  
  1845.   return $str;
  1846. }
  1847.  
  1848. /**
  1849. * GetAllFiles()
  1850. * Return an arry of filenames
  1851. @param string 
  1852. @param array 
  1853. @param boolean 
  1854. @return array 
  1855. ***/
  1856. function GetAllFiles($folder,$ext=array('txt'),$recursif=true{
  1857.  
  1858.     $files array();
  1859.     $dir=opendir($folder);
  1860.     while ($file readdir($dir)) {
  1861.         if ($file == '.' || $file == '..'continue;
  1862.         if (is_dir($folder.'/'.$file)) {
  1863.             if ($recursif==true)
  1864.             $files=array_merge($filesGetAllFiles($folder.'/'.$file$ext));
  1865.         else {
  1866.             foreach ($ext as $v{
  1867.                 if (strtolower($v)==strtolower(substr($file,-strlen($v)))) {
  1868.                     $files[$folder.'/'.$file;
  1869.                     break;
  1870.                 }
  1871.             }
  1872.         }
  1873.     }
  1874.     closedir($dir);
  1875.     return $files;
  1876. }
  1877.  
  1878.  
  1879. /**
  1880.  * ListDir()
  1881.  * Return an HTML list for a given folder
  1882.  * @param int 
  1883.  * @param string 
  1884.  * @param string 
  1885.  * @param boolean 
  1886.  * @return string 
  1887.  ***/
  1888. function ListDir($dir_handle,$path$url{
  1889.  
  1890.   $i0;
  1891.   $dirFiles array();
  1892.  
  1893.   // we prepare files
  1894.   while (false !== ($file readdir($dir_handle))) {
  1895.     $dir $path $file;
  1896.     if(is_dir($dir&& $file != '.' && $file !='..' {
  1897.       $handle @opendir($diror die("Unable to open file $file");
  1898.       ListDir($handle$dir.'/'$url);
  1899.     elseif($file != '.' && $file !='..' && $file !='.htaccess'{
  1900.       array_push($dirFiles$dir);
  1901.     }
  1902.   }
  1903.   closedir($dir_handle);
  1904.  
  1905.   // sort by name
  1906.   sort($dirFiles);
  1907.  
  1908.   // uncomment to reverse array
  1909.   // $dirFiles= array_reverse($dirFiles);
  1910.  
  1911.   // uncomment to sort on latest modification
  1912.   //    array_multisort(
  1913.   //      array_map( 'filemtime', $dirFiles ),
  1914.   //      SORT_NUMERIC,
  1915.   //      SORT_DESC,
  1916.   //      $dirFiles
  1917.   //    );
  1918.  
  1919.   echo "<ul>";
  1920.   foreach($dirFiles as $dir)
  1921.   {
  1922.     $sizeformatBytes(filesize($dir)2);
  1923.     $class ($i++ 1'' 'class="odd"';
  1924.     $dir str_replace('../'''$dir);
  1925.     $dir str_replace('//''/'$dir);
  1926.     $dir dirname($dir).'/'rawurlencode(basename($dir));
  1927.     $file basename(rawurldecode($dir));
  1928.  
  1929.     if(MOD_COMMENT == && commentEnabled('files')) {
  1930.       $id str_replace('library/userfiles/'''$dir);
  1931.       $nb getFileComments($id);
  1932.       $comment_actions  '<span class="comment_actions">';
  1933.       $comment_actions .= '<a class="comment_see" href="../comment/_ajax_view.php?id='.$id.'&amp;module=files&amp;order_by=ASC" title="' $file ' - ' _t('comment','go_to'' / ' _t('comment','add'.'"><span class="cc">' $nb '</span><span class="textcc"> ' _t('comment','comments').' - ' _t('comment','add'.'</span></a>';
  1934.       $comment_actions .= '</span>';
  1935.     }
  1936.  
  1937.     echo '<li '.$class.'><a href="'$url $dir .'">'.$file.'</a> <em>('.$size.')</em> '.$comment_actions.'<a  class="dlfile" href="'$url .'library/dl.php?file='$dir .'" title="'._t('divers','dl')' ' $file.'"><span>' ._t('divers','dl')'</span></a></li>';
  1938.   }
  1939.    
  1940.  
  1941.   if($i==0echo '<li>'._t('divers','no_files').'</li>';
  1942.   echo "</ul>";
  1943. }
  1944.  
  1945. /**
  1946.  * formatBytes()
  1947.  * Make File size readable
  1948.  * @param int 
  1949.  * @param int (optional)
  1950.  * @return string 
  1951.  ***/
  1952. function formatBytes($bytes$precision 2{
  1953.   $units array('o''Ko''Mo''Go''To');
  1954.  
  1955.   $bytes max($bytes0);
  1956.   $pow floor(($bytes log($bytes0log(1024));
  1957.   $pow min($powcount($units1);
  1958.  
  1959.   $bytes /= pow(1024$pow);
  1960.  
  1961.   return round($bytes$precision' ' $units[$pow];
  1962. }
  1963.  
  1964. /**
  1965.  * logfile()
  1966.  * Log into file
  1967.  * @param string 
  1968.  * @param array 
  1969.  * @return void 
  1970.  ***/
  1971. function logfile($src$a{
  1972.  
  1973.   $sep '##';
  1974.   $fp @fopen($src'a');
  1975.  
  1976.   foreach($a as $value{
  1977.     @fwrite($fp$value $sep);
  1978.   }
  1979.  
  1980.   @fwrite($fpdate('[d-m-y H:i:s]' $sepEND_LINE));
  1981.   @fclose($fp);
  1982.  
  1983.   return true;
  1984. }
  1985.  
  1986. /**
  1987.  * getThemes()
  1988.  * Return installed themes
  1989.  * into an array
  1990.  * @param string 
  1991.  * @return array 
  1992.  ***/
  1993. function getThemes($f{
  1994.  
  1995.   $a array();
  1996.  
  1997.   if ($handle opendir('../templates/'.$f)) {
  1998.     $sep='';
  1999.     while (false !== ($file readdir($handle))) {
  2000.       if ($file != "." && $file != ".." && $file != ".svn"{
  2001.         array_push($a$file);
  2002.       }
  2003.     }
  2004.     closedir($handle);
  2005.   }
  2006.  
  2007.   return $a;
  2008. }
  2009.  
  2010. /**
  2011.  * cleanString()
  2012.  * Remove exotic characters form string
  2013.  * same as used in filemanager
  2014.  * @param string 
  2015.  * @param array 
  2016.  * @return string 
  2017.  ***/
  2018. function cleanString($string$allowed array()) {
  2019.   $allow null;
  2020.  
  2021.   if (!empty($allowed)) {
  2022.     foreach ($allowed as $value{
  2023.       $allow .= "\\$value";
  2024.     }
  2025.   }
  2026.  
  2027.   $mapping array(
  2028.         'Š'=>'S''š'=>'s''Đ'=>'Dj''đ'=>'dj''Ž'=>'Z''ž'=>'z''Č'=>'C''č'=>'c''Ć'=>'C''ć'=>'c',
  2029.         'À'=>'A''Á'=>'A''Â'=>'A''Ã'=>'A''Ä'=>'A''Å'=>'A''Æ'=>'A''Ç'=>'C''È'=>'E''É'=>'E',
  2030.         'Ê'=>'E''Ë'=>'E''Ì'=>'I''Í'=>'I''Î'=>'I''Ï'=>'I''Ñ'=>'N''Ò'=>'O''Ó'=>'O''Ô'=>'O',
  2031.         'Õ'=>'O''Ö'=>'O''Ő'=>'O''Ø'=>'O''Ù'=>'U''Ú'=>'U''Û'=>'U''Ü'=>'U''Ű'=>'U''Ý'=>'Y',
  2032.         'Þ'=>'B''ß'=>'Ss','à'=>'a''á'=>'a''â'=>'a''ã'=>'a''ä'=>'a''å'=>'a''æ'=>'a''ç'=>'c',
  2033.         'è'=>'e''é'=>'e''ê'=>'e''ë'=>'e''ì'=>'i''í'=>'i''î'=>'i''ï'=>'i''ð'=>'o''ñ'=>'n',
  2034.         'ò'=>'o''ó'=>'o''ô'=>'o''õ'=>'o''ö'=>'o''ő'=>'o''ø'=>'o''ù'=>'u''ú'=>'u''ű'=>'u',
  2035.         'û'=>'u''ý'=>'y''ý'=>'y''þ'=>'b''ÿ'=>'y''Ŕ'=>'R''ŕ'=>'r'' '=>'_'"'"=>'_''/'=>''
  2036.   );
  2037.  
  2038.   if (is_array($string)) {
  2039.  
  2040.     $cleaned array();
  2041.  
  2042.     foreach ($string as $key => $clean{
  2043.       $clean strtr($clean$mapping);
  2044.       $clean preg_replace("/[^{$allow}_a-zA-Z0-9]/"''$clean);
  2045.       $cleaned[$keypreg_replace('/[_]+/''_'$clean)// remove double underscore
  2046.     }
  2047.   else {
  2048.     $string strtr($string$mapping);
  2049.     $string preg_replace("/[^{$allow}_a-zA-Z0-9]/"''$string);
  2050.     $cleaned preg_replace('/[_]+/''_'$string)// remove double underscore
  2051.   }
  2052.   return $cleaned;
  2053. }
  2054.  
  2055. /**
  2056.  * securityCheck()
  2057.  * Test and sanitize user input
  2058.  * from request
  2059.  * @return boolean 
  2060.  ***/
  2061. function securityCheck({
  2062.  
  2063.   $passed true;
  2064.  
  2065.   // we first sanitize vars
  2066.   if(isset($_REQUEST['rub']))
  2067.   $_REQUEST['rub']strip_tags($_REQUEST['rub']);
  2068.   if(isset($_REQUEST['name']))
  2069.   $_REQUEST['name']strip_tags($_REQUEST['name']);
  2070.   if(isset($_REQUEST['email']))
  2071.   $_REQUEST['email']strip_tags($_REQUEST['email']);
  2072.   // then do tests
  2073.   if(isset($_REQUEST['id']&& preg_match('/[^0-9A-Za-z]/',$_REQUEST['id']))
  2074.   $passedfalse;
  2075.   if(isset($_REQUEST['parentid']&& !is_numeric($_REQUEST['parentid']))
  2076.   $passedfalse;
  2077.   if(isset($_REQUEST['parentparentid']&& !is_numeric($_REQUEST['parentparentid']))
  2078.   $passedfalse;
  2079.   if(isset($_REQUEST['debut']&& !is_numeric($_REQUEST['debut']))
  2080.   $passedfalse;
  2081.  
  2082.   if($passed == falsedie('no way!');
  2083.   else return true;
  2084. }
  2085. ?>

Documentation generated on Thu, 03 May 2012 15:05:50 +0200 by phpDocumentor 1.4.1