Advertisement
Guest User

ecureuil-php 2

a guest
Feb 1st, 2020
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 29.74 KB | None | 0 0
  1. <?php
  2.  
  3. /*
  4.  Programme récupéré de https://sourceforge.net/projects/csv2vcf-php/
  5.  test possible ici https://dwaves.org/2016/06/30/csv2vcf-online-converter/
  6.  
  7. J'ai changé beaucoup de choses par rapport au départ.
  8. Le fichier csv provient d'un programme trouvé ici
  9. https://github.com/thomascube/vcfconvert
  10. Ce programme transforme les vcf en csv.
  11.  
  12. J'ai donc changé le nom des champs pour l'adapter au csv que j'avais.
  13. Le client envoie un fichier CSV pour le transformer en fichier VCF (vcard)
  14. Il faut connaitre le séparateur du fichier csv.
  15. Comme séparateur possible ',' ';' ou tab  (<p>You can put as separator: ',' ';' or tab </p> )
  16. Vous pouvez récupérer le fichier vcf produit mais dès que le vous revenez au début pour en transformer un autre, le fichier est détruit
  17.  
  18. La permière ligne du fichier csv doit contenir
  19. First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Home Fax;Business Fax;Pager;Mobile Phone;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories
  20.  
  21. Le programme se base sur cela pour traiter les données du fichier csv
  22.  
  23. Merci à tous ceux qui m'ont aidé pour finaliser le php
  24. surtout Edgar, Marc et Jérôme de la guilde de Grenoble
  25.  
  26. La Guilde des utilisateurs d’informatique libre du Dauphiné (GUILDE) est une association loi 1901 ayant pour objectif de promouvoir les logiciels libres, et particulièrement le système GNU/Linux, auprès des particuliers et des professionnels et de rassembler les utilisateurs de la région du Dauphiné.
  27.  
  28. */
  29.  
  30. /* === examples for different vCard Versions according to Wikpedia ===
  31. vCard 2.1
  32.  
  33. BEGIN:VCARD
  34. VERSION:2.1
  35. N:Gump;Forrest;;Mr.
  36. FN:Forrest Gump
  37. ORG:Bubba Gump Shrimp Co.
  38. TITLE:Shrimp Man
  39. PHOTO;GIF:http://www.example.com/dir_photos/my_photo.gif
  40. TEL;WORK;VOICE:(111) 555-1212
  41. TEL;HOME;VOICE:(404) 555-1212
  42. ADR;WORK;PREF:;;100 Waters Edge;Baytown;LA;30314;United States of America
  43. LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:100 Waters Edge=0D=
  44.  =0ABaytown\, LA 30314=0D=0AUnited States of America
  45. ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
  46. LABEL;HOME;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:42 Plantation St.=0D=0A=
  47.  Baytown, LA 30314=0D=0AUnited States of America
  48. REV:20080424T195243Z
  49. END:VCARD
  50.  
  51. vCard 3.0
  52.  
  53. BEGIN:VCARD
  54. VERSION:3.0
  55. N:Gump;Forrest;;Mr.
  56. FN:Forrest Gump
  57. ORG:Bubba Gump Shrimp Co.
  58. TITLE:Shrimp Man
  59. PHOTO;VALUE=URI;TYPE=GIF:http://www.example.com/dir_photos/my_photo.gif
  60. TEL;TYPE=WORK,VOICE:(111) 555-1212
  61. TEL;TYPE=HOME,VOICE:(404) 555-1212
  62. ADR;TYPE=WORK,PREF:;;100 Waters Edge;Baytown;LA;30314;United States of Amer
  63.  ica
  64. LABEL;TYPE=WORK,PREF:100 Waters Edge\nBaytown\, LA 30314\nUnited States of
  65.  America
  66. ADR;TYPE=HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
  67. LABEL;TYPE=HOME:42 Plantation St.\nBaytown\, LA 30314\nUnited States of Ame
  68.  rica
  69. REV:2008-04-24T19:52:43Z
  70. END:VCARD
  71.  
  72. vCard 4.0
  73.  
  74. BEGIN:VCARD
  75. VERSION:4.0
  76. N:Forrest;Gump;;Mr.;
  77. FN:Forrest Gump
  78. ORG:Bubba Gump Shrimp Co.
  79. TITLE:Shrimp Man
  80. PHOTO;MEDIATYPE=image/gif:http://www.example.com/dir_photos/my_photo.gif
  81. TEL;TYPE=work,voice;VALUE=uri:tel:+1-111-555-1212
  82. TEL;TYPE=home,voice;VALUE=uri:tel:+1-404-555-1212
  83. ADR;TYPE=work;LABEL="100 Waters Edge\nBaytown, LA 30314\nUnited States of A
  84.  merica";PREF=1:;;100 Waters Edge;Baytown;LA;30314;United States of America
  85. ADR;TYPE=home;LABEL="42 Plantation St.\nBaytown, LA 30314\nUnited States of
  86.  America":;;42 Plantation St.;Baytown;LA;30314;United States of America
  87. REV:20080424T195243Z
  88. END:VCARD
  89.  */
  90.  
  91. error_reporting(E_ALL & ~E_NOTICE); // report all errors except notices
  92.  
  93. // fonction pour l'affichage de la page avec header
  94. function print_html_header()
  95. {
  96. echo '<!DOCTYPE html>
  97.     <html lang="en">
  98.     <head>
  99.     <meta charset="utf-8">
  100.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
  101.     <meta name="viewport" content="width=device-width, initial-scale=1">
  102.     <meta name="description" content="convert csv2vcf" />
  103.     <meta name="keywords" content="csv2vcf" />
  104.     <title>convert csv2vcf</title>
  105.     <!-- external styles -->
  106.     <link href="css/style.css" type="text/css" rel="stylesheet"/>
  107.     </head>
  108.         <body>     
  109.             <div class="boxShadows" id="headline">
  110.                 <h1>csv2vcf: convert *.csv to *.vcf</h1>';
  111. }
  112.  
  113. $comma = ',';
  114. $semicolon = ';';
  115. // $tab = ' ';
  116. $tab = 'tab';
  117. $oui='oui';
  118. $non='non';
  119.  
  120. // if(isset($_REQUEST["convert"])) // detect upload of file
  121. // if ( isset($_REQUEST["convert"]) || isset($_REQUEST["verif"])  || isset($_REQUEST["retour"]) ) // detect upload of file
  122. if ( isset($_REQUEST["convert"]) || isset($_REQUEST["verif"]) ) // detect upload of file
  123. {
  124. //1
  125.     $allowedExts = array('csv','txt'); // MMM
  126.     $maximumFileSizeInKBytes = 4096;
  127.  
  128.     $allowedExts_string = "";
  129.     for($i=0;$i<count($allowedExts);$i++) {
  130.         $allowedExts_string .= "*.".$allowedExts[$i].", ";
  131.     }
  132.    
  133.     $maximumFileSizeInBytes = $maximumFileSizeInKBytes * 1024;
  134.     $delimiter = $_POST['$_delimiter'] == 'tab' ? "\t" : $_POST['$_delimiter'];
  135. //  $delimiter = $_POST['$_delimiter'];
  136.     $telfixe = $_POST['$_telfixe'];
  137.     $categorie = $_POST['$_categorie'];
  138. //  $_FILES = $_POST['$file1'];
  139.  
  140.    
  141.     if($_FILES)
  142.     {
  143. // 2
  144.         if(checkExtension($allowedExts)) // MMM
  145.         {
  146. // 3
  147.             if(($_FILES["file"]["size"] < $maximumFileSizeInBytes))
  148.             {
  149. // 4
  150.                 if ($_FILES["file"]["error"] > 0)
  151.                 {
  152. // 5
  153.                     print_html_header();
  154.                     echo "Name: ".$_FILES["file"]["name"]."<br>";
  155.                     echo "field selector:  '".$delimiter."'<br>";
  156.                     echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  157.                     echo "Tel fixe :  '".$telfixe."'<br>";
  158.                     echo "Return Code: ".$_FILES["file"]["error"]."<br>";
  159.                     erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  160.  
  161.                 }
  162.                 else
  163.                 if ($delimiter == "")
  164.                 {
  165. // 5
  166.                     print_html_header();
  167.                     echo "Name: ".$_FILES["file"]["name"]."<br>";
  168.                     echo "field selector:  '".$delimiter."'<br>";
  169.                     echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  170.                     echo "Tel fixe :  '".$telfixe."'<br>";
  171.                     echo "field selector not selected";
  172.                     erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  173.                 }
  174.                 else
  175.                 if (  $telfixe  !== "oui"  && $telfixe  !== "non" )
  176.                 {
  177. // 5
  178.                     print_html_header();
  179.                     echo "Name: ".$_FILES["file"]["name"]."<br>";
  180.                     echo "field selector:  '".$delimiter."'<br>";
  181.                     echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  182.                     echo "Tel fixe :  '".$telfixe."'<br>";
  183.                     echo "Vous devez sélectionner oui ou non pour  Tel fixe (oui) ou nextcloud/tel mobile (non)";
  184.                     erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  185.                 }
  186.                 else
  187.                 if ( isset($_REQUEST["convert"]))
  188.                 {
  189. // 5
  190. //                      print_html_header();
  191.                         $filename_vcf = $_FILES["file"]["name"].".vcf";
  192.                         header('Content-Type: text/vcard');
  193.                         header(sprintf('Content-Disposition: attachment; filename="%s"', $filename_vcf));
  194.  
  195. /*                      echo "Name: ".$_FILES["file"]["name"]."<br>";
  196.                         echo "field selector:  '".$delimiter."'<br>";
  197.                         echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  198.                         echo "Tel fixe :  '".$telfixe."'<br>";
  199.                         echo "Nombre de lignes : ".$length1."<br>";
  200.                         erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  201. */
  202.                         convert1($_FILES["file"]["tmp_name"],$delimiter,$telfixe,$catégorie);
  203.                         exit;
  204.                 }
  205.                 else
  206.                 if ( isset($_REQUEST["verif"]))
  207.                 {
  208. // 5
  209.                         print_html_header();
  210.                         $nomFich = file($_FILES["file"]["tmp_name"]);
  211.                         $length1 = count($nomFich);
  212.  
  213.                         echo "Fichier Vérifié <br>";
  214.                         echo "Name: ".$_FILES["file"]["name"]."<br>";
  215.                         echo "field selector:  '".$delimiter."'<br>";
  216.                         echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  217.                         echo "Tel fixe :  '".$telfixe."'<br>";
  218.                         echo "Nombre de lignes : ".$length1."<br>";
  219.                         echo "Name 1: ".$_FILES["file"]["tmp_name"]."<br>";
  220.  
  221.                         $fich_tmp = $_FILES["file"]["tmp_name"];
  222.  
  223. # récupération des différentes catégories du fichier
  224.                         $categorie = checkCategorie($fich_tmp,$delimiter);
  225.  
  226.                         echo '<form method="post" enctype="multipart/form-data">
  227.                             <input type="hidden" name="$_FILES["file"]["name"]" value="'.$nomFich.'" >
  228.                             <input type="hidden" name="$_delimiter" value="'.$delimiter.'" >
  229.                             <input type="hidden" name="$_telfixe" value="'.$telfixe.'" >
  230.                             Catégorie :
  231.                             <select name = "$_categorie[]" multiple size = 6> ';
  232.                             foreach($categorie  as $select_cat){
  233.                                 echo '<option value = "'.$select_cat.'" > '.$select_cat.' </option>';
  234.                             }
  235.                         echo '</select>
  236.                    
  237.                             <input type="submit" name="convert" value="convert" style="width: 100%;">
  238.                             <input type="submit" name="retour" value="retour" style="width: 100%;">                        
  239.                             </form>';
  240.                         finentete();
  241.                 }
  242.             }
  243.             else
  244.             {
  245. // 4
  246.                 print_html_header();
  247.                 echo "Name: ".$_FILES["file"]["name"]."<br>";
  248.                 echo "field selector:  '".$delimiter."'<br>";
  249.                 echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  250.                 echo "Tel fixe :  '".$telfixe."'<br>";
  251.                 echo "File exceeds filezie limit of ".$maximumFileSizeInBytes."kByte.";
  252.                 erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  253.             }
  254.         }
  255.         else
  256.         {
  257. // 3
  258.             print_html_header();
  259.             echo "Name: ".$_FILES["file"]["name"]."<br>";
  260.             echo "field selector:  '".$delimiter."'<br>";
  261.             echo "Size: ".($_FILES["file"]["size"] / 1024)." kB<br>";
  262.             echo "Tel fixe :  '".$telfixe."'<br>";
  263.             echo "File was not a allowed filetypes: ".$allowedExts_string."<br>";
  264.             erreurs($_FILES["file"]["tmp_name"],$delimiter,$telfixe);
  265.         }
  266.     }
  267. }
  268. else
  269. {
  270. // 1
  271.     print_html_header();
  272.  
  273.     if ( isset($_REQUEST["retour"]) )
  274.     {
  275. // 2
  276.         $delimiter = $_POST['$_delimiter'] == 'tab' ? "\t" : $_POST['$_delimiter'];
  277.         $telfixe = $_POST['$_telfixe'];
  278.  
  279. // ajouté pour test si cela passe bien ici
  280.         echo '<label for="file">Please select your File.csv then hit convert:</label>';
  281.  
  282.     }
  283.  
  284.      echo '<form method="post" enctype="multipart/form-data">
  285.                 <label for="file">Please select your File.csv then hit convert:</label>
  286.                 <input type="file" name="file" id="file" style="width: 100%;">
  287.                 <br />
  288.  
  289.                 field selector :
  290.                 <select name="$_delimiter" value="'.$delimiter.'" >
  291.                     <option value=""></option>
  292.                     <option value="'.$comma.'">Comma</option>
  293.                     <option value="'.$semicolon.'" selected >Semicolon</option>
  294.                     <option value="'.$tab.'">Tab</option>
  295.                 </select><br />
  296.  
  297.                 téléphone fixe :
  298.                 <select name="$_telfixe" value="'.$telfixe.'" >
  299.                     <option value=""></option>
  300.                     <option value="'.$oui.'" selected >Oui</option>
  301.                     <option value="'.$non.'">Non</option>
  302.                 </select><br />
  303.  
  304.                 <input type="submit" name="verif" value="selectionner la catégorie que vous voulez" style="width: 100%;">
  305.                 <input type="submit" name="convert" value="convert" style="width: 100%;">
  306.             </form>';
  307.  
  308. //              <input type="submit" name="convert" value="convert" style="width: 100%;">
  309.  
  310.     finentete();
  311. }
  312.  
  313.  
  314. // MMM verifie que le fichier envoye a l'une des extensions de $allowedExts
  315. function checkExtension(array $allowedExts)
  316. {
  317.     $upload_filename = $_FILES["file"]["name"];
  318.     $upload_filename_array = explode(".", $upload_filename);
  319.     $extension = strtolower(end($upload_filename_array));
  320.  
  321.     $key = array_search($extension, $allowedExts);
  322.     return $key !== false;
  323. }
  324.  
  325.  
  326. // Récupère les différentes catégories dans un tableau
  327. function checkCategorie($filename_csv, $delimiter1)
  328. {
  329.  
  330.     $lines_csv = file($filename_csv);
  331.  
  332.     $length = count($lines_csv);
  333.  
  334. # récupération de la catégorie de chaque ligne
  335.     for($i = 0;$i < $length;$i++)
  336.     {
  337.         if($i == 0)
  338.         {
  339.             $keys_csv = $lines_csv[$i];
  340.             $keys_csv = explode($delimiter1,$keys_csv);
  341.             $keys_csv[36] = rtrim($keys_csv[36]);  // on enlève les blancs en fin du dernier poste de chaque ligne
  342.         }
  343.         else
  344.         {
  345.  
  346.             $values_csv = $lines_csv[$i];
  347.             $values_csv = explode($delimiter1,$values_csv);
  348.             $values_csv[36] = rtrim($values_csv[36]);  // on enlève les blancs en fin du dernier poste de chaque ligne
  349.  
  350.             // Categories
  351.             $position = findPos("Categories", $keys_csv);
  352.             $categ = $values_csv[$position];
  353.  
  354.             $line[] = $values_csv[$position];
  355.         }
  356.     }
  357.  
  358. # récupération des différentes catégories qui se trouve dans le fichier
  359.     $cat = array_unique($line);
  360.  
  361.     return $cat;
  362. }
  363.  
  364.  
  365. // Conversion du fichier csv en vcf
  366. // J'ai changé la plupart des noms pour l'adapter au pgm qui fait vcf => csv qui vient de thomascube/vcfconvert
  367.  
  368. // First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Home Fax;Business Fax;Pager;Mobile Phone;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories
  369.  
  370. // Si il n'y a pas de données dans les champs ci-dessus, rien n'est écrit dans le fichier de destination sauf
  371. // BEGIN:VCARD - VERSION:2.1 -  END:VCARD
  372. // Donc si mauvais séparateur de champs donné votre fichier de sortie n'aura que des lignes avec
  373. // BEGIN:VCARD - VERSION:2.1 -  END:VCARD
  374.  
  375. function convert1($filename_csv, $delimiter1, $telfixe1, $categorie1)
  376. {
  377.     // $filename_csv = "export2016.06.24.csv";
  378.  
  379.     $categorie1 = array('My Contacts','My Contacts1','Friends','Family');
  380.  
  381.  
  382. // gestion des fins de lignes selon si le vcf sert pour les téléphones fixes ou non
  383.     if ( ( $telfixe1 ) !== "oui")
  384.     {
  385.         $fin_ligne = "\n";
  386.     }
  387.     else
  388.     {
  389.         $fin_ligne = "\r\n";
  390.     }
  391.    
  392.     $lines_csv = file($filename_csv);
  393.  
  394.     $length = count($lines_csv);
  395.     for($i = 0;$i < $length;$i++)
  396.     {
  397.         if($i == 0)
  398.         {
  399.             $keys_csv1 = $lines_csv[$i];
  400.             $keys_csv = explode($delimiter1,$keys_csv1);
  401.             $keys_csv[36] = rtrim($keys_csv[36]);   // on enlève les blancs en fin du dernier poste de chaque ligne
  402.  
  403.         }
  404.         else
  405.         {
  406.  
  407.         $values_csv = $lines_csv[$i];
  408.         $values_csv = explode($delimiter1,$values_csv);
  409.         $values_csv[36] = rtrim($values_csv[36]);    // on enlève les blancs en fin du dernier poste de chaque ligne
  410.  
  411.         // recheche si Catégories existe dans les catégories sélectionnées
  412.         $position = findPos("Categories", $keys_csv);
  413.         $categ = $values_csv[$position];
  414.  
  415.         if (in_array($categ, $categorie1))
  416.         {
  417.    
  418.             print "BEGIN:VCARD".$fin_ligne; // what Version does this file have
  419.             print "VERSION:2.1".$fin_ligne; // what Version does this file have
  420.    
  421. //          print "BEGIN:VCARD\n"; // what Version does this file have
  422. //          print "VERSION:2.1\n".$fin_ligne; // what Version does this file have
  423.    
  424.             $position1 = findPos("First Name", $keys_csv);
  425.             $position2 = findPos("Last Name", $keys_csv);
  426.             $position = $values_csv[$position1] . ";" . $values_csv[$position2];
  427.             if ( ( $position ) !== ";")
  428.             {
  429.                 print "N:".$position.$fin_ligne; // N:Gump;Forrest;;Mr.
  430.             }          
  431.  
  432.             if ( ( $telfixe1 ) !== "oui")
  433.             {
  434.             $position3 = findPos("Display Name", $keys_csv);
  435.             $position = $values_csv[$position3];
  436.             if ( !empty( $position ) )
  437.             {
  438.                 print "FN:".$position.$fin_ligne; // FN:Forrest Gump
  439.             }          
  440.             }
  441.                
  442.             // ORG:Bubba Gump Shrimp Co.
  443.             // TITLE:Shrimp Man
  444.             // PHOTO;GIF:http://www.example.com/dir_photos/my_photo.gif
  445.            
  446.             $position = findPos("Home Phone", $keys_csv);
  447.             $phone0 = $values_csv[$position];
  448.             if ( !empty( $phone0 ) )
  449.             {
  450.                 print "TEL;HOME:".$phone0.$fin_ligne; // phone0
  451.             }          
  452.  
  453.             $position = findPos("Business Phone", $keys_csv);
  454.             $phone1 = $values_csv[$position];
  455.             if ( !empty( $phone1 ) )
  456.             {
  457.                 print "TEL;WORK:".$phone1.$fin_ligne; // phone1
  458.             }
  459.  
  460.             $position = findPos("Mobile Phone", $keys_csv);
  461.             $phone4 = $values_csv[$position];
  462.             if ( !empty( $phone4 ) )
  463.             {
  464.                 print "TEL;CELL:".$phone4.$fin_ligne; // phone3
  465.             }
  466.  
  467.             if ( ( $telfixe1 ) !== "oui")
  468.             {
  469.             $position = findPos("Home Fax", $keys_csv);
  470.             $phone2 = $values_csv[$position];
  471.             if ( !empty( $phone2 ) )
  472.             {
  473.                 print 'TEL;TYPE="fax,home":'.$phone2.$fin_ligne; // phone2
  474.             }
  475.  
  476.             $position = findPos("Business Fax", $keys_csv);
  477.             $phone3 = $values_csv[$position];
  478.             if ( !empty( $phone3 ) )
  479.             {
  480.                 print 'TEL;TYPE="fax,work":'.$phone3.$fin_ligne; // phone2
  481.             }
  482.             }
  483.  
  484.             if ( ( $telfixe1 ) !== "oui")
  485.             {
  486.             $position3 = findPos("E-mail Address", $keys_csv);
  487.             $position = $values_csv[$position3];
  488.             if ( !empty( $position ) )
  489.             {
  490.                 print "EMAIL:".$position.$fin_ligne;
  491.             }
  492.             }#          else
  493.             {
  494.             $position3 = findPos("E-mail Address", $keys_csv);
  495.             $position = $values_csv[$position3];
  496.             if ( !empty( $position ) )
  497.             {
  498.                 print "EMAIL;TYPE=home:".$position.$fin_ligne;
  499.             }
  500.  
  501.             $position3 = findPos("E-mail 2 Address", $keys_csv);
  502.             $position = $values_csv[$position3];
  503.             if ( !empty( $position ) )
  504.             {
  505.                 print "EMAIL;TYPE=work:".$position.$fin_ligne;
  506.             }
  507.  
  508.             $position3 = findPos("E-mail 3 Address", $keys_csv);
  509.             $position = $values_csv[$position3];
  510.             if ( !empty( $position ) )
  511.             {
  512.                 print "EMAIL;TYPE=OTHER:".$position.$fin_ligne;
  513.             }
  514.  
  515.             // ADR;HOME;PREF:;;100 Waters Edge;Baytown;LA;30314;United States of America
  516.             $street0 = $values_csv[findPos("Home Street", $keys_csv)];
  517.             $street1 = $values_csv[findPos("Home Address 2", $keys_csv)];
  518.             $city0 = $values_csv[findPos("Home City", $keys_csv)];
  519.             $region0 = $values_csv[findPos("Home State", $keys_csv)];
  520.             $postcode0 = $values_csv[findPos("Home Postal Code", $keys_csv)];
  521.             $country0 = $values_csv[findPos("Home Country", $keys_csv)];
  522.            
  523.             if ( ( !empty( $street0 ) ) || ( !empty( $street1 ) ) || ( !empty( $city0 ) ) || ( !empty( $region0 ) ) || ( !empty( $postcode0 ) ) || ( !empty( $country0 ) ) )
  524.             {          
  525.                 print "ADR;TYPE=home:".$street0.";".$street1.";".$city0.";".$region0.";".$postcode0.";".$country0.$fin_ligne;
  526.             }
  527.    
  528.             // ADR;WORK;PREF:;;100 Waters Edge;Baytown;LA;30314;United States of America
  529.             $street0 = $values_csv[findPos("Business Address", $keys_csv)];
  530.             $street1 = $values_csv[findPos("Business Address 2", $keys_csv)];
  531.             $city0 = $values_csv[findPos("Business City", $keys_csv)];
  532.             $region0 = $values_csv[findPos("Business State", $keys_csv)];
  533.             $postcode0 = $values_csv[findPos("Business Postal Code", $keys_csv)];
  534.             $country0 = $values_csv[findPos("Business Country", $keys_csv)];
  535.  
  536.             if ( ( !empty( $street0 ) ) || ( !empty( $street1 ) ) || ( !empty( $city0 ) ) || ( !empty( $region0 ) ) || ( !empty( $postcode0 ) ) || ( !empty( $country0 ) ) )
  537.             {              
  538.                 print "ADR;TYPE=work:".$street0.";".$street1.";".$city0.";".$region0.";".$postcode0.";".$country0.$fin_ligne;
  539.             }
  540.  
  541.             // LABEL;WORK;PREF;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:100 Waters Edge=0D==0 ABaytown\, LA 30314=0D=0AUnited States of America
  542.             // ADR;HOME:;;42 Plantation St.;Baytown;LA;30314;United States of America
  543.             // LABEL;HOME;ENCODING=QUOTED-PRINTABLE;CHARSET=UTF-8:42 Plantation St.=0D=0A=
  544.             // Baytown, LA 30314=0D=0AUnited States of America
  545.  
  546.             // Web page
  547.             $position = findPos("Web Page", $keys_csv);
  548.             if ( !empty( $values_csv[$position] ) )
  549.             {
  550.                 print "URL;VALUE=URI:".$values_csv[$position].$fin_ligne; // email0 // EMAIL:
  551.             }
  552.  
  553.             // Web page
  554.             $position = findPos("Web Page 2", $keys_csv);
  555.             if ( !empty( $values_csv[$position] ) )
  556.             {
  557.                 print "URL;VALUE=URI:".$values_csv[$position].$fin_ligne; // email1 // EMAIL:
  558.             }
  559.            
  560.             // NOTE
  561.             $position = findPos("Notes", $keys_csv);
  562.             if ( !empty( $values_csv[$position] ) )
  563.             {
  564.                 print "NOTE:".$values_csv[$position].$fin_ligne;
  565.             }
  566.             }
  567.  
  568.             // Birthday
  569.             $position = findPos("Birthday", $keys_csv);
  570.             if ( !empty( $values_csv[$position] ) )
  571.             {
  572.                 print "BDAY:".$values_csv[$position].$fin_ligne;
  573.             }
  574.  
  575.             if ( ( $telfixe1 ) !== "oui")
  576.             {
  577.             // Categories
  578.             $position = findPos("Categories", $keys_csv);
  579.             if ( !empty( $values_csv[$position] ) )
  580.             {
  581.                 print "CATEGORIES :".$values_csv[$position].$fin_ligne; // email0 // EMAIL:
  582.             }
  583.             }
  584.  
  585.             print "END:VCARD".$fin_ligne; // END:VCARD
  586.         }
  587.         }
  588.     }
  589. }
  590.  
  591. /* determine position of a value in an number-indexed array */
  592. function findPos($value,$array)
  593. {
  594.     $result = null;
  595.     $length = count($array);
  596.     for($i=0;$i<$length;$i++)
  597.     {
  598.         if($array[$i] == $value)
  599.         {
  600.             $result = $i;
  601.             break;
  602.         }
  603.     }
  604.    
  605.     return $result;
  606. }
  607.  
  608. function erreurs($filename_csv, $delimiter1, $telfixe1)
  609. {
  610.     echo '<form method="post" enctype="multipart/form-data">
  611.         <input type="hidden" name="_nomFich" value="'.$filename_csv.'" >
  612.         <input type="hidden" name="$_delimiter" value="'.$delimiter1.'" >  
  613.         <input type="hidden" name="$_telfixe" value="'.$telfixe1.'" >                      
  614.         <input type="submit" name="retour" value="retour" style="width: 100%;">                        
  615.         </form>';
  616.         finentete();
  617. }
  618.  
  619. function finentete()
  620. {
  621.  
  622. echo       '<p>the following fields in the *.csv will be converted:</p>
  623.             <div style="overflow:auto;white-space:nowrap;width:100%;" class="codecolorer-container bash default">
  624.                 <pre>
  625. First Name
  626. Last Name
  627. Display Name
  628. Nicknam
  629. E-mail Address
  630. E-mail 2 Address
  631. E-mail 3 Address
  632. Home Phone
  633. Business Phone
  634. Home Fax
  635. Business Fax
  636. Pager
  637. Mobile Phone
  638. Home Street
  639. Home Address 2
  640. Home City
  641. Home State
  642. Home Postal Code
  643. Home Country
  644. Business Address
  645. Business Address 2
  646. Business City
  647. Business State
  648. Business Postal Code
  649. Business Country
  650. Country Code
  651. Related name
  652. Job Title
  653. Department
  654. Organization
  655. Notes
  656. Birthday
  657. Anniversary
  658. Gender
  659. Web Page
  660. Web Page 2
  661. Categories
  662.             </pre>
  663.             </div>
  664.         </div>';
  665. }
  666.  
  667.  
  668.  
  669. //      </div>
  670.  
  671. echo '
  672.         <div class="boxShadows" id="headline">';
  673.        
  674. // if ($_POST['_delimiter'] == ';')
  675. if ($delimiter == ';')
  676. {
  677.     echo '
  678.         <p>EXAMPLE INPUT with ";" : this goes in:</p>
  679.             <div style="overflow:auto;white-space:nowrap;width:100%;" class="codecolorer-container bash default">
  680.                 <pre>
  681. First Name;Last Name;Display Name;Nickname;E-mail Address;E-mail 2 Address;E-mail 3 Address;Home Phone;Business Phone;Home Fax;Business Fax;Pager;Mobile Phone;Home Street;Home Address 2;Home City;Home State;Home Postal Code;Home Country;Business Address;Business Address 2;Business City;Business State;Business Postal Code;Business Country;Country Code;Related name;Job Title;Department;Organization;Notes;Birthday;Anniversary;Gender;Web Page;Web Page 2;Categories
  682. Aprenom1 Anom1;;Aprenom1 Anom1;;[email protected];[email protected];;+33 1 23 45 67 89;+33 2 87 65 43 21;+33 9 12 34 56 78;+33 9 87 65 43 21;;+33 6 12 34 56 78;rue1;rue2;meylan;rhone alpes;38240;france;rue1T;rue2T;Grenoble;isere;38000;france;;;;;;notes;1604-12-08 00:00:00;;;;;test
  683. Aprenom2;Anom2;Aprenom2 Anom2;;[email protected];[email protected];;+33 1 23 45 67 89;+33 9 12 34 76 78;;;;+33 6 56 78 12 34;rue D;rue D étendue;ville D;paca D;12345;france;rue T;rue T étendue;ville T;paca T;23456;france;;;;;;note lig 1 note lig 2 note lig 3;2020-01-05 00:00:00;;;www.xxx.com;;test
  684. Aprenom3;Anom3;Aprenom3 Anom3;;;;;;;;;;+33 6 12 34 56 78;;;;;;;;;;;;;;;;;;;;;;;;test
  685. Aprenom5;Anom5;Aprenom5 Anom5;;;;;;+33 9 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;;;;;test
  686. Aprenom4;Anom4;Aprenom4 Anom4;;;;;+33 1 23 45 67 89;+33 9 12 34 56 78;;;;+33 6 87 65 43 21;;;;;;;;;;;;;;;;;;;;;;;;test
  687. Aprenom7;Anom7;Aprenom7 Anom7;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test
  688. ;Aprenom Anom;Aprenom Anom;;[email protected];[email protected];[email protected];+33 9 12 34 56 78;+33 9 87 65 43 21;+33 8 12 34 56 78;+33 8 87 65 43 21;;+33 6 12 56 34 78;rueD;;VILLED;;01234;;rueT;;VilleT;;34567;;;;;;;notes en tout genre AAAAAA aaaaaa;2019-12-18 00:00:00;;;;;test
  689. ;;Aprenom6 Anom6;;;;;+33 1 23 45 67 89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;test
  690.                 </pre>
  691.             </div>';
  692. }
  693. else  
  694. //  if ($_POST['_delimiter'] == '   ')
  695.     if ($delimiter == ' ')
  696.     {
  697.     echo '
  698.         <p>EXAMPLE INPUT with " " : this goes in:</p>
  699.             <div style="overflow:auto;white-space:nowrap;width:100%;" class="codecolorer-container bash default">      
  700. First Name  Last Name   Display Name    Nickname    E-mail Address  E-mail 2 Address    E-mail 3 Address    Home Phone  Business Phone  Home Fax    Business Fax    Pager   Mobile Phone    Home Street Home Address 2  Home City   Home State  Home Postal Code    Home Country    Business Address    Business Address 2  Business City   Business State  Business Postal Code    Business Country    Country Code    Related name    Job Title   Department  Organization    Notes   Birthday    Anniversary Gender  Web Page    Web Page 2  Categories
  701. Aprenom1 Anom1      Aprenom1 Anom1      [email protected]  [email protected]       +33 1 23 45 67 89   +33 2 87 65 43 21   +33 9 12 34 56 78   +33 9 87 65 43 21       +33 6 12 34 56 78   rue1    rue2    meylan  rhone alpes 38240   france  rue1T   rue2T   Grenoble    isere   38000   france                      notes   1604-12-08 00:00:00                 test
  702. Aprenom2    Anom2   Aprenom2 Anom2      [email protected]  [email protected]     +33 1 23 45 67 89   +33 9 12 34 76 78               +33 6 56 78 12 34   rue D   rue D étendue  ville D paca D  12345   france  rue T   rue T étendue  ville T paca T  23456   france                      note lig 1 note lig 2 note lig 3    2020-01-05 00:00:00         www.xxx.com     test
  703. Aprenom3    Anom3   Aprenom3 Anom3                                      +33 6 12 34 56 78                                                                                               test
  704. Aprenom5    Anom5   Aprenom5 Anom5                      +33 9 87 65 43 21                                                                                                               test
  705. Aprenom4    Anom4   Aprenom4 Anom4                  +33 1 23 45 67 89   +33 9 12 34 56 78               +33 6 87 65 43 21                                                                                               test
  706. Aprenom7    Anom7   Aprenom7 Anom7                  +33 1 23 45 67 89                                                                                                                   test
  707.     Aprenom Anom    Aprenom Anom        [email protected]  [email protected]  [email protected]  +33 9 12 34 56 78   +33 9 87 65 43 21   +33 8 12 34 56 78   +33 8 87 65 43 21       +33 6 12 56 34 78   rueD        VILLED      01234       rueT        VilleT      34567                           notes en tout genre AAAAAA aaaaaa   2019-12-18 00:00:00                 test
  708.         Aprenom6 Anom6                  +33 1 23 45 67 89                                                                                                                   test
  709.                 </pre>
  710.             </div>';
  711.     }
  712.     else
  713.     {
  714.     echo '
  715.         <p>EXAMPLE INPUT with "," : this goes in:</p>
  716.             <div style="overflow:auto;white-space:nowrap;width:100%;" class="codecolorer-container bash default">
  717.                 <pre>
  718. First Name,Last Name,Display Name,Nickname,E-mail Address,E-mail 2 Address,E-mail 3 Address,Home Phone,Business Phone,Home Fax,Business Fax,Pager,Mobile Phone,Home Street,Home Address 2,Home City,Home State,Home Postal Code,Home Country,Business Address,Business Address 2,Business City,Business State,Business Postal Code,Business Country,Country Code,Related name,Job Title,Department,Organization,Notes,Birthday,Anniversary,Gender,Web Page,Web Page 2,Categories
  719. Aprenom1 Anom1,,Aprenom1 Anom1,,[email protected],[email protected],,+33 1 23 45 67 89,+33 2 87 65 43 21,+33 9 12 34 56 78,+33 9 87 65 43 21,,+33 6 12 34 56 78,rue1,rue2,meylan,rhone alpes,38240,france,rue1T,rue2T,Grenoble,isere,38000,france,,,,,,notes,1604-12-08 00:00:00,,,,,test
  720. Aprenom2,Anom2,Aprenom2 Anom2,,[email protected],[email protected],,+33 1 23 45 67 89,+33 9 12 34 76 78,,,,+33 6 56 78 12 34,rue D,rue D étendue,ville D,paca D,12345,france,rue T,rue T étendue,ville T,paca T,23456,france,,,,,,note lig 1 note lig 2 note lig 3,2020-01-05 00:00:00,,,www.xxx.com,,test
  721. Aprenom3,Anom3,Aprenom3 Anom3,,,,,,,,,,+33 6 12 34 56 78,,,,,,,,,,,,,,,,,,,,,,,,test
  722. Aprenom5,Anom5,Aprenom5 Anom5,,,,,,+33 9 87 65 43 21,,,,,,,,,,,,,,,,,,,,,,,,,,,,test
  723. Aprenom4,Anom4,Aprenom4 Anom4,,,,,+33 1 23 45 67 89,+33 9 12 34 56 78,,,,+33 6 87 65 43 21,,,,,,,,,,,,,,,,,,,,,,,,test
  724. Aprenom7,Anom7,Aprenom7 Anom7,,,,,+33 1 23 45 67 89,,,,,,,,,,,,,,,,,,,,,,,,,,,,,test
  725. ,Aprenom Anom,Aprenom Anom,,[email protected],[email protected],[email protected],+33 9 12 34 56 78,+33 9 87 65 43 21,+33 8 12 34 56 78,+33 8 87 65 43 21,,+33 6 12 56 34 78,rueD,,VILLED,,01234,,rueT,,VilleT,,34567,,,,,,,notes en tout genre AAAAAA aaaaaa,2019-12-18 00:00:00,,,,,test
  726. ,,Aprenom6 Anom6,,,,,+33 1 23 45 67 89,,,,,,,,,,,,,,,,,,,,,,,,,,,,,test
  727.                 </pre>
  728.             </div>';
  729.     }
  730.  
  731. echo '
  732.         </div>
  733.         <div class="boxShadows" id="headline">
  734.         <p>this comes out: (This comes from the nextcloud address book)</p>
  735.             <div style="overflow:auto;white-space:nowrap;width:100%;" class="codecolorer-container bash default">
  736.                 <pre>
  737. BEGIN:VCARD
  738. VERSION:2.1
  739. N:Aprenom1 Anom1;;;
  740. FN:Aprenom1 Anom1
  741. EMAIL;TYPE=home:[email protected]
  742. EMAIL;TYPE=work:[email protected]
  743. TEL;TYPE=home:+33 1 23 45 67 89
  744. TEL;TYPE=work:+33 2 87 65 43 21
  745. TEL;TYPE="fax,home":+33 9 12 34 56 78
  746. TEL;TYPE="fax,work":+33 9 87 65 43 21
  747. TEL;TYPE=cell:+33 6 12 34 56 78
  748. ADR;TYPE=home:rue1;rue2;meylan;rhone alpes;38240;france
  749. ADR;TYPE=work:rue1T;rue2T;Grenoble;isere;38000;france
  750. NOTE:notes
  751. BDAY:1604-12-08 00:00:00
  752. END:VCARD
  753. BEGIN:VCARD
  754. VERSION:2.1
  755. N:Aprenom2;Anom2;;
  756. FN:Aprenom2 Anom2
  757. EMAIL;TYPE=home:[email protected]
  758. EMAIL;TYPE=work:[email protected]
  759. TEL;TYPE=home:+33 1 23 45 67 89
  760. TEL;TYPE=work:+33 9 12 34 76 78
  761. TEL;TYPE=cell:+33 6 56 78 12 34
  762. ADR;TYPE=home:rue D;rue D étendue;ville D;paca D;12345;france
  763. ADR;TYPE=work:rue T;rue T étendue;ville T;paca T;23456;france
  764. URL;VALUE=URI:www.xxx.com
  765. NOTE:note lig 1 note lig 2 note lig 3
  766. BDAY:2020-01-05 00:00:00
  767. END:VCARD
  768. BEGIN:VCARD
  769. VERSION:2.1
  770. N:Aprenom3;Anom3;;
  771. FN:Aprenom3 Anom3
  772. TEL;TYPE=cell:+33 6 12 34 56 78
  773. END:VCARD
  774. BEGIN:VCARD
  775. VERSION:2.1
  776. N:Aprenom5;Anom5;;
  777. FN:Aprenom5 Anom5
  778. TEL;TYPE=work:+33 9 87 65 43 21
  779. END:VCARD
  780. BEGIN:VCARD
  781. VERSION:2.1
  782. N:Aprenom4;Anom4;;
  783. FN:Aprenom4 Anom4
  784. TEL;TYPE=home:+33 1 23 45 67 89
  785. TEL;TYPE=work:+33 9 12 34 56 78
  786. TEL;TYPE=cell:+33 6 87 65 43 21
  787. END:VCARD
  788. BEGIN:VCARD
  789. VERSION:2.1
  790. N:Aprenom7;Anom7;;
  791. FN:Aprenom7 Anom7
  792. TEL;TYPE=home:+33 1 23 45 67 89
  793. END:VCARD
  794. BEGIN:VCARD
  795. VERSION:2.1
  796. N:;Aprenom Anom;;
  797. FN:Aprenom Anom
  798. EMAIL;TYPE=home:[email protected]
  799. EMAIL;TYPE=work:[email protected]
  800. EMAIL;TYPE=OTHER:[email protected]
  801. TEL;TYPE=home:+33 9 12 34 56 78
  802. TEL;TYPE=work:+33 9 87 65 43 21
  803. TEL;TYPE="fax,home":+33 8 12 34 56 78
  804. TEL;TYPE="fax,work":+33 8 87 65 43 21
  805. TEL;TYPE=cell:+33 6 12 56 34 78
  806. ADR;TYPE=home:rueD;;VILLED;;01234;
  807. ADR;TYPE=work:rueT;;VilleT;;34567;
  808. NOTE:notes en tout genre AAAAAA aaaaaa
  809. BDAY:2019-12-18 00:00:00
  810. END:VCARD
  811. BEGIN:VCARD
  812. VERSION:2.1
  813. FN:Aprenom6 Anom6
  814. TEL;TYPE=home:+33 1 23 45 67 89
  815. END:VCARD
  816.                 </pre>
  817.             </div>
  818.         </div>
  819.     </body>
  820. </html>
  821. ';
  822. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement