From f28f61b1bd5fea1793ec4395b0da4921df3dd1b2 Mon Sep 17 00:00:00 2001 From: opensides Date: Fri, 16 Jul 2004 06:41:58 +0000 Subject: [PATCH] ajout commentaire doxygen --- .../html/CMailFile_8class_8php-source.html | 211 +- doc/dev/php/html/CMailFile_8class_8php.html | 48 +- doc/dev/php/html/annotated.html | 3 +- doc/dev/php/html/classCMailFile-members.html | 8 +- doc/dev/php/html/classCMailFile.html | 278 ++- doc/dev/php/html/classDoliDb-members.html | 2 +- doc/dev/php/html/classDoliDb.html | 2 +- doc/dev/php/html/classWebcal-members.html | 2 +- doc/dev/php/html/classWebcal.html | 2 +- .../php/html/class_8jabber_8php-source.html | 1886 +++++++++++++++++ doc/dev/php/html/class_8jabber_8php.html | 27 + doc/dev/php/html/classes.html | 9 +- doc/dev/php/html/classvCard-members.html | 25 + doc/dev/php/html/classvCard.html | 643 ++++++ doc/dev/php/html/files.html | 4 +- doc/dev/php/html/functions.html | 83 +- .../php/html/functions_8inc_8php-source.html | 2 +- doc/dev/php/html/functions_8inc_8php.html | 2 +- doc/dev/php/html/functions_func.html | 83 +- doc/dev/php/html/globals.html | 5 +- doc/dev/php/html/globals_func.html | 5 +- doc/dev/php/html/graph_legend.html | 2 +- doc/dev/php/html/index.html | 2 +- doc/dev/php/html/ldap_8lib_8php-source.html | 2 +- doc/dev/php/html/ldap_8lib_8php.html | 2 +- doc/dev/php/html/mysql_8lib_8php-source.html | 2 +- doc/dev/php/html/mysql_8lib_8php.html | 2 +- doc/dev/php/html/price_8lib_8php-source.html | 2 +- doc/dev/php/html/price_8lib_8php.html | 2 +- doc/dev/php/html/thermometer_8php-source.html | 2 +- doc/dev/php/html/thermometer_8php.html | 2 +- .../php/html/vcard_8class_8php-source.html | 167 ++ doc/dev/php/html/vcard_8class_8php.html | 31 + .../php/html/webcal_8class_8php-source.html | 2 +- doc/dev/php/html/webcal_8class_8php.html | 2 +- doc/dev/php/latex/CMailFile_8class_8php.tex | 32 +- doc/dev/php/latex/annotated.tex | 1 + doc/dev/php/latex/classCMailFile.tex | 122 +- doc/dev/php/latex/classDoliDb.aux | 114 +- doc/dev/php/latex/classWebcal.aux | 22 +- doc/dev/php/latex/class_8jabber_8php.aux | 27 + doc/dev/php/latex/class_8jabber_8php.tex | 19 + doc/dev/php/latex/classvCard.aux | 50 + doc/dev/php/latex/classvCard.tex | 259 +++ doc/dev/php/latex/doxygen.sty | 4 +- doc/dev/php/latex/files.tex | 2 + doc/dev/php/latex/functions_8inc_8php.aux | 130 +- doc/dev/php/latex/ldap_8lib_8php.aux | 36 +- doc/dev/php/latex/mysql_8lib_8php.aux | 10 +- doc/dev/php/latex/price_8lib_8php.aux | 16 +- doc/dev/php/latex/refman.aux | 28 +- doc/dev/php/latex/refman.idx | 309 +-- doc/dev/php/latex/refman.ilg | 6 +- doc/dev/php/latex/refman.ind | 332 +-- doc/dev/php/latex/refman.out | 15 +- doc/dev/php/latex/refman.pdf | Bin 142682 -> 176239 bytes doc/dev/php/latex/refman.tex | 5 +- doc/dev/php/latex/refman.toc | 207 +- doc/dev/php/latex/thermometer_8php.aux | 16 +- doc/dev/php/latex/vcard_8class_8php.aux | 27 + doc/dev/php/latex/vcard_8class_8php.tex | 24 + doc/dev/php/latex/webcal_8class_8php.aux | 10 +- doc/dolibarr-doxygen | 4 +- htdocs/lib/CMailFile.class.php | 52 +- htdocs/lib/jabber/class.jabber.php | 7 + htdocs/lib/vcard/vcard.class.php | 122 +- 66 files changed, 4808 insertions(+), 752 deletions(-) create mode 100644 doc/dev/php/html/class_8jabber_8php-source.html create mode 100644 doc/dev/php/html/class_8jabber_8php.html create mode 100644 doc/dev/php/html/classvCard-members.html create mode 100644 doc/dev/php/html/classvCard.html create mode 100644 doc/dev/php/html/vcard_8class_8php-source.html create mode 100644 doc/dev/php/html/vcard_8class_8php.html create mode 100644 doc/dev/php/latex/class_8jabber_8php.aux create mode 100644 doc/dev/php/latex/class_8jabber_8php.tex create mode 100644 doc/dev/php/latex/classvCard.aux create mode 100644 doc/dev/php/latex/classvCard.tex create mode 100644 doc/dev/php/latex/vcard_8class_8php.aux create mode 100644 doc/dev/php/latex/vcard_8class_8php.tex diff --git a/doc/dev/php/html/CMailFile_8class_8php-source.html b/doc/dev/php/html/CMailFile_8class_8php-source.html index a2d3f73a0ba..140687e8af8 100644 --- a/doc/dev/php/html/CMailFile_8class_8php-source.html +++ b/doc/dev/php/html/CMailFile_8class_8php-source.html @@ -42,115 +42,116 @@ 00065 { 00066 $this->subject = $subject; 00067 $this->addr_to = $to; -00068 $this->smtp_headers = $this->write_smtpheaders($from,$addr_cc); -00069 $this->text_body = $this->write_body($msg, $filename_list); +00068 $this->smtp_headers = $this->write_smtpheaders($from,$addr_cc); +00069 $this->text_body = $this->write_body($msg, $filename_list); 00070 if (count($filename_list)) { -00071 $this->mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list); -00072 $this->text_encoded = $this->attach_file($filename_list,$mimetype_list,$mimefilename_list); +00071 $this->mime_headers = $this->write_mimeheaders($filename_list, $mimefilename_list); +00072 $this->text_encoded = $this->attach_file($filename_list,$mimetype_list,$mimefilename_list); 00073 } 00074 } 00075 -00076 function attach_file($filename_list,$mimetype_list,$mimefilename_list) -00077 { -00078 for ($i = 0; $i < count($filename_list); $i++) { -00079 $encoded = $this->encode_file($filename_list[$i]); -00080 if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i]; -00081 $out = $out . "--" . $this->mime_boundary . "\n"; -00082 if (! $mimetype_list[$i]) { $mimetype_list[$i] = "application/octet-stream"; } -00083 $out = $out . "Content-type: " . $mimetype_list[$i] . "; name=\"$filename_list[$i]\";\n"; -00084 $out = $out . "Content-Transfer-Encoding: base64\n"; -00085 $out = $out . "Content-disposition: attachment; filename=\"$filename_list[$i]\"\n\n"; -00086 $out = $out . $encoded . "\n"; -00087 } -00088 $out = $out . "--" . $this->mime_boundary . "--" . "\n"; -00089 return $out; -00090 // added -- to notify email client attachment is done -00091 } -00092 -00093 function encode_file($sourcefile) -00094 { -00095 // print "<pre> on encode $sourcefile </pre>\n"; -00096 if (is_readable($sourcefile)) -00097 { -00098 $fd = fopen($sourcefile, "r"); -00099 $contents = fread($fd, filesize($sourcefile)); -00100 $encoded = my_chunk_split(base64_encode($contents)); -00101 fclose($fd); -00102 } -00103 return $encoded; -00104 } -00105 -00106 function sendfile() -00107 { -00108 $headers .= $this->smtp_headers . $this->mime_headers; -00109 $message = $this->text_body . $this->text_encoded; -00110 return mail($this->addr_to,$this->subject,stripslashes($message),$headers); -00111 } -00112 -00113 function write_body($msgtext, $filename_list) -00114 { -00115 if (count($filename_list)) -00116 { -00117 $out = "--" . $this->mime_boundary . "\n"; -00118 $out = $out . "Content-Type: text/plain; charset=\"iso8859-15\"\n\n"; -00119 // $out = $out . "Content-Type: text/plain; charset=\"us-ascii\"\n\n"; -00120 } -00121 $out = $out . $msgtext . "\n"; -00122 return $out; -00123 } -00124 -00125 function write_mimeheaders($filename_list, $mimefilename_list) { -00126 $out = "MIME-version: 1.0\n"; -00127 $out = $out . "Content-type: multipart/mixed; "; -00128 $out = $out . "boundary=\"$this->mime_boundary\"\n"; -00129 $out = $out . "Content-transfer-encoding: 7BIT\n"; -00130 for($i = 0; $i < count($filename_list); $i++) { -00131 if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i]; -00132 $out = $out . "X-attachments: $filename_list[$i];\n\n"; -00133 } -00134 return $out; -00135 } -00136 -00137 function write_smtpheaders($addr_from,$addr_cc) -00138 { -00139 $out = "From: $addr_from\n"; -00140 if($addr_cc != "") -00141 $out = $out . "Cc: $addr_cc\n"; -00142 $out = $out . "Reply-To: $addr_from\n"; -00143 $out = $out . "X-Mailer: Dolibarr version " . DOL_VERSION ."\n"; -00144 $out = $out . "X-Sender: $addr_from\n"; -00145 return $out; -00146 } -00147 } -00148 -00149 // usage - mimetype example "image/gif" -00150 // $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filename,$mimetype); -00151 // $mailfile->sendfile(); -00152 -00153 // Splits a string by RFC2045 semantics (76 chars per line, end with \r\n). -00154 // This is not in all PHP versions so I define one here manuall. -00155 function my_chunk_split($str) -00156 { -00157 $stmp = $str; -00158 $len = strlen($stmp); -00159 $out = ""; -00160 while ($len > 0) { -00161 if ($len >= 76) { -00162 $out = $out . substr($stmp, 0, 76) . "\r\n"; -00163 $stmp = substr($stmp, 76); -00164 $len = $len - 76; -00165 } -00166 else { -00167 $out = $out . $stmp . "\r\n"; -00168 $stmp = ""; $len = 0; -00169 } -00170 } -00171 return $out; -00172 } -00173 -00174 // end script -00175 ?> -
Généré le Fri Jul 16 00:31:06 2004 pour dolibarr par +00083 function attach_file($filename_list,$mimetype_list,$mimefilename_list) +00084 { +00085 for ($i = 0; $i < count($filename_list); $i++) { +00086 $encoded = $this->encode_file($filename_list[$i]); +00087 if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i]; +00088 $out = $out . "--" . $this->mime_boundary . "\n"; +00089 if (! $mimetype_list[$i]) { $mimetype_list[$i] = "application/octet-stream"; } +00090 $out = $out . "Content-type: " . $mimetype_list[$i] . "; name=\"$filename_list[$i]\";\n"; +00091 $out = $out . "Content-Transfer-Encoding: base64\n"; +00092 $out = $out . "Content-disposition: attachment; filename=\"$filename_list[$i]\"\n\n"; +00093 $out = $out . $encoded . "\n"; +00094 } +00095 $out = $out . "--" . $this->mime_boundary . "--" . "\n"; +00096 return $out; +00097 // added -- to notify email client attachment is done +00098 } +00099 +00105 function encode_file($sourcefile) +00106 { +00107 // print "<pre> on encode $sourcefile </pre>\n"; +00108 if (is_readable($sourcefile)) +00109 { +00110 $fd = fopen($sourcefile, "r"); +00111 $contents = fread($fd, filesize($sourcefile)); +00112 $encoded = my_chunk_split(base64_encode($contents)); +00113 fclose($fd); +00114 } +00115 return $encoded; +00116 } +00117 +00122 function sendfile() +00123 { +00124 $headers .= $this->smtp_headers . $this->mime_headers; +00125 $message = $this->text_body . $this->text_encoded; +00126 return mail($this->addr_to,$this->subject,stripslashes($message),$headers); +00127 } +00128 +00135 function write_body($msgtext, $filename_list) +00136 { +00137 if (count($filename_list)) +00138 { +00139 $out = "--" . $this->mime_boundary . "\n"; +00140 $out = $out . "Content-Type: text/plain; charset=\"iso8859-15\"\n\n"; +00141 // $out = $out . "Content-Type: text/plain; charset=\"us-ascii\"\n\n"; +00142 } +00143 $out = $out . $msgtext . "\n"; +00144 return $out; +00145 } +00146 +00153 function write_mimeheaders($filename_list, $mimefilename_list) { +00154 $out = "MIME-version: 1.0\n"; +00155 $out = $out . "Content-type: multipart/mixed; "; +00156 $out = $out . "boundary=\"$this->mime_boundary\"\n"; +00157 $out = $out . "Content-transfer-encoding: 7BIT\n"; +00158 for($i = 0; $i < count($filename_list); $i++) { +00159 if ($mimefilename_list[$i]) $filename_list[$i] = $mimefilename_list[$i]; +00160 $out = $out . "X-attachments: $filename_list[$i];\n\n"; +00161 } +00162 return $out; +00163 } +00164 +00171 function write_smtpheaders($addr_from,$addr_cc) +00172 { +00173 $out = "From: $addr_from\n"; +00174 if($addr_cc != "") +00175 $out = $out . "Cc: $addr_cc\n"; +00176 $out = $out . "Reply-To: $addr_from\n"; +00177 $out = $out . "X-Mailer: Dolibarr version " . DOL_VERSION ."\n"; +00178 $out = $out . "X-Sender: $addr_from\n"; +00179 return $out; +00180 } +00181 } +00182 +00190 // usage - mimetype example "image/gif" +00191 // $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filename,$mimetype); +00192 // $mailfile->sendfile(); +00193 +00194 // Splits a string by RFC2045 semantics (76 chars per line, end with \r\n). +00195 // This is not in all PHP versions so I define one here manuall. +00196 +00197 function my_chunk_split($str) +00198 { +00199 $stmp = $str; +00200 $len = strlen($stmp); +00201 $out = ""; +00202 while ($len > 0) { +00203 if ($len >= 76) { +00204 $out = $out . substr($stmp, 0, 76) . "\r\n"; +00205 $stmp = substr($stmp, 76); +00206 $len = $len - 76; +00207 } +00208 else { +00209 $out = $out . $stmp . "\r\n"; +00210 $stmp = ""; $len = 0; +00211 } +00212 } +00213 return $out; +00214 } +00215 +00216 // end script +00217 ?> +
Généré le Fri Jul 16 08:51:51 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/CMailFile_8class_8php.html b/doc/dev/php/html/CMailFile_8class_8php.html index a8758feef21..9cd2ca3403c 100644 --- a/doc/dev/php/html/CMailFile_8class_8php.html +++ b/doc/dev/php/html/CMailFile_8class_8php.html @@ -16,6 +16,10 @@ class  CMailFile  Classe permettant d'envoyer des attachements par mail. Plus de détails...

+

Fonctions

my_chunk_split ($str) + + permet de diviser une chaine (RFC2045)


Description détaillée

Classe permettant d'envoyer des attachements par mail. @@ -26,7 +30,49 @@ Laurent Destailleur.
Version:
1.2.

-Définition dans le fichier CMailFile.class.php.


Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +Définition dans le fichier CMailFile.class.php.

Documentation des fonctions

+

+ + + + +
+ + + + + + + + + +
my_chunk_split str  ) 
+
+ + + + + +
+   + + +

+permet de diviser une chaine (RFC2045) +

+

Paramètres:
+ + +
str 
+
+
Remarques:
function chunk_split qui remplace celle de php si nécéssaire

+76 caractères par ligne, terminé par "\r\n"

+ +

+Définition à la ligne 197 du fichier CMailFile.class.php. +

+Référencé par CMailFile::encode_file().

+


Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/annotated.html b/doc/dev/php/html/annotated.html index 69d07168164..4f075473805 100644 --- a/doc/dev/php/html/annotated.html +++ b/doc/dev/php/html/annotated.html @@ -8,9 +8,10 @@

dolibarr Liste des classes

Liste des classes, structures, unions et interfaces avec une brève description: +
CMailFileClasse permettant d'envoyer des attachements par mail
DoliDbClasse permettant de gérér la database de dolibarr
vCardClasse permettant de créer un fichier vcard
WebcalClasse permettant d'acceder a la database webcalendar
-
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classCMailFile-members.html b/doc/dev/php/html/classCMailFile-members.html index 0cd56eefad3..18cb3f517ac 100644 --- a/doc/dev/php/html/classCMailFile-members.html +++ b/doc/dev/php/html/classCMailFile-members.html @@ -6,8 +6,14 @@

CMailFile Liste des membres

Liste complète des membres de CMailFile, y compris les membres hérités:

+ -
attach_file($filename_list, $mimetype_list, $mimefilename_list)CMailFile
CMailFile($subject, $to, $from, $msg, $filename_list, $mimetype_list, $mimefilename_list, $addr_cc="")CMailFile


Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par + encode_file($sourcefile)CMailFile + sendfile()CMailFile + write_body($msgtext, $filename_list)CMailFile + write_mimeheaders($filename_list, $mimefilename_list)CMailFile + write_smtpheaders($addr_from, $addr_cc)CMailFile +
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classCMailFile.html b/doc/dev/php/html/classCMailFile.html index b9bf87a4be9..4ab2dddf6d2 100644 --- a/doc/dev/php/html/classCMailFile.html +++ b/doc/dev/php/html/classCMailFile.html @@ -14,6 +14,25 @@  CMailFile ($subject, $to, $from, $msg, $filename_list, $mimetype_list, $mimefilename_list, $addr_cc="")  CMailFile.

attach_file ($filename_list, $mimetype_list, $mimefilename_list) + + permet d'attacher un fichier

encode_file ($sourcefile) + + permet d'encoder un fichier

+sendfile () + + permet d'envoyer un fichier

write_body ($msgtext, $filename_list) + + permet d'ecrire le body d'un message

write_mimeheaders ($filename_list, $mimefilename_list) + + création des headers mime

write_smtpheaders ($addr_from, $addr_cc) + + création des headers smtp


Description détaillée

Classe permettant d'envoyer des attachements par mail. @@ -114,12 +133,267 @@ CMailFile.

-Définition à la ligne 64 du fichier CMailFile.class.php. +Définition à la ligne 64 du fichier CMailFile.class.php. +

+Références attach_file(), write_body(), write_mimeheaders(), et write_smtpheaders(). + + +


Documentation des fonctions membres

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
CMailFile::attach_file filename_list,
mimetype_list,
mimefilename_list
+
+ + + + + +
+   + + +

+permet d'attacher un fichier +

+

Paramètres:
+ + + + +
filename_list 
mimetype_list 
mimefilename_list 
+
+ +

+Définition à la ligne 83 du fichier CMailFile.class.php. +

+Références attach_file(), et encode_file(). +

+Référencé par attach_file(), et CMailFile().

+

+ + + + +
+ + + + + + + + + +
CMailFile::encode_file sourcefile  ) 
+
+ + + + + +
+   + + +

+permet d'encoder un fichier +

+

Paramètres:
+ + +
sourcefile 
+
+ +

+Définition à la ligne 105 du fichier CMailFile.class.php. +

+Références encode_file(), et my_chunk_split(). +

+Référencé par attach_file(), et encode_file().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
CMailFile::write_body msgtext,
filename_list
+
+ + + + + +
+   + + +

+permet d'ecrire le body d'un message +

+

Paramètres:
+ + + +
msgtext 
filename_list 
+
+ +

+Définition à la ligne 135 du fichier CMailFile.class.php. +

+Références write_body(). +

+Référencé par CMailFile(), et write_body().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
CMailFile::write_mimeheaders filename_list,
mimefilename_list
+
+ + + + + +
+   + + +

+création des headers mime +

+

Paramètres:
+ + + +
filename_list 
mimefilename_list 
+
+ +

+Définition à la ligne 153 du fichier CMailFile.class.php. +

+Références write_mimeheaders(). +

+Référencé par CMailFile(), et write_mimeheaders().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
CMailFile::write_smtpheaders addr_from,
addr_cc
+
+ + + +
+   + + +

+création des headers smtp +

+

Paramètres:
+ + + +
addr_from 
addr_cc 
+
+ +

+Définition à la ligne 171 du fichier CMailFile.class.php. +

+Références write_smtpheaders(). +

+Référencé par CMailFile(), et write_smtpheaders().


La documentation de cette classe a été générée à partir du fichier suivant: -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classDoliDb-members.html b/doc/dev/php/html/classDoliDb-members.html index 71ab3ceee67..19df604fea8 100644 --- a/doc/dev/php/html/classDoliDb-members.html +++ b/doc/dev/php/html/classDoliDb-members.html @@ -32,7 +32,7 @@ result($nb, $fieldname)DoliDb rollback($do=1)DoliDb select_db($database)DoliDb -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classDoliDb.html b/doc/dev/php/html/classDoliDb.html index dfa4718b3d2..7475043e140 100644 --- a/doc/dev/php/html/classDoliDb.html +++ b/doc/dev/php/html/classDoliDb.html @@ -1131,7 +1131,7 @@ R
La documentation de cette classe a été générée à partir du fichier suivant: -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classWebcal-members.html b/doc/dev/php/html/classWebcal-members.html index 1c0f1004508..7d01c1c3fb7 100644 --- a/doc/dev/php/html/classWebcal-members.html +++ b/doc/dev/php/html/classWebcal-members.html @@ -9,7 +9,7 @@ add($user, $date, $texte, $desc)Webcal get_next_id()Webcal Webcal()Webcal -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classWebcal.html b/doc/dev/php/html/classWebcal.html index cad713e7736..97b8fc592d5 100644 --- a/doc/dev/php/html/classWebcal.html +++ b/doc/dev/php/html/classWebcal.html @@ -135,7 +135,7 @@ R
La documentation de cette classe a été générée à partir du fichier suivant: -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/class_8jabber_8php-source.html b/doc/dev/php/html/class_8jabber_8php-source.html new file mode 100644 index 00000000000..280ab7af597 --- /dev/null +++ b/doc/dev/php/html/class_8jabber_8php-source.html @@ -0,0 +1,1886 @@ + + +dolibarr: htdocs/lib/jabber/class.jabber.php Source File + + + + +

htdocs/lib/jabber/class.jabber.php

Aller à la documentation de ce fichier.
00001 <?php +00002 +00003 /*************************************************************************** +00004 +00005 Class.Jabber.PHP v0.4 +00006 (c) 2002 Carlo "Gossip" Zottmann +00007 http://phpjabber.g-blog.net *** gossip@jabber.g-blog.net +00008 +00009 The FULL documentation and examples for this software can be found at +00010 http://phpjabber.g-blog.net (not many doc comments in here, sorry) +00011 +00012 last modified: 27.04.2003 13:01:53 CET +00013 +00014 ***************************************************************************/ +00015 +00016 /*************************************************************************** +00017 * +00018 +00019 * +00020 ***************************************************************************/ +00021 +00022 /* +00023 Jabber::Connect() +00024 Jabber::Disconnect() +00025 Jabber::SendAuth() +00026 Jabber::AccountRegistration($reg_email {string}, $reg_name {string}) +00027 +00028 Jabber::Listen() +00029 Jabber::SendPacket($xml {string}) +00030 +00031 Jabber::RosterUpdate() +00032 Jabber::RosterAddUser($jid {string}, $id {string}, $name {string}) +00033 Jabber::RosterRemoveUser($jid {string}, $id {string}) +00034 Jabber::RosterExistsJID($jid {string}) +00035 +00036 Jabber::Subscribe($jid {string}) +00037 Jabber::Unsubscribe($jid {string}) +00038 +00039 Jabber::CallHandler($message {array}) +00040 Jabber::CruiseControl([$seconds {number}]) +00041 +00042 Jabber::SubscriptionApproveRequest($to {string}) +00043 Jabber::SubscriptionDenyRequest($to {string}) +00044 +00045 Jabber::GetFirstFromQueue() +00046 Jabber::GetFromQueueById($packet_type {string}, $id {string}) +00047 +00048 Jabber::SendMessage($to {string}, $id {number}, $type {string}, $content {array}[, $payload {array}]) +00049 Jabber::SendIq($to {string}, $type {string}, $id {string}, $xmlns {string}[, $payload {string}]) +00050 Jabber::SendPresence($type {string}[, $to {string}[, $status {string}[, $show {string}[, $priority {number}]]]]) +00051 +00052 Jabber::SendError($to {string}, $id {string}, $error_number {number}[, $error_message {string}]) +00053 +00054 Jabber::TransportRegistrationDetails($transport {string}) +00055 Jabber::TransportRegistration($transport {string}, $details {array}) +00056 +00057 Jabber::GetvCard($jid {string}[, $id {string}]) -- EXPERIMENTAL -- +00058 +00059 Jabber::GetInfoFromMessageFrom($packet {array}) +00060 Jabber::GetInfoFromMessageType($packet {array}) +00061 Jabber::GetInfoFromMessageId($packet {array}) +00062 Jabber::GetInfoFromMessageThread($packet {array}) +00063 Jabber::GetInfoFromMessageSubject($packet {array}) +00064 Jabber::GetInfoFromMessageBody($packet {array}) +00065 Jabber::GetInfoFromMessageError($packet {array}) +00066 +00067 Jabber::GetInfoFromIqFrom($packet {array}) +00068 Jabber::GetInfoFromIqType($packet {array}) +00069 Jabber::GetInfoFromIqId($packet {array}) +00070 Jabber::GetInfoFromIqKey($packet {array}) +00071 Jabber::GetInfoFromIqError($packet {array}) +00072 +00073 Jabber::GetInfoFromPresenceFrom($packet {array}) +00074 Jabber::GetInfoFromPresenceType($packet {array}) +00075 Jabber::GetInfoFromPresenceStatus($packet {array}) +00076 Jabber::GetInfoFromPresenceShow($packet {array}) +00077 Jabber::GetInfoFromPresencePriority($packet {array}) +00078 +00079 Jabber::AddToLog($string {string}) +00080 Jabber::PrintLog() +00081 +00082 MakeXML::AddPacketDetails($string {string}[, $value {string/number}]) +00083 MakeXML::BuildPacket([$array {array}]) +00084 */ +00085 +00095 class Jabber +00096 { +00097 var $server; +00098 var $port; +00099 var $username; +00100 var $password; +00101 var $resource; +00102 var $jid; +00103 +00104 var $connection; +00105 var $delay_disconnect; +00106 +00107 var $stream_id; +00108 var $roster; +00109 +00110 var $enable_logging; +00111 var $log_array; +00112 var $log_filename; +00113 var $log_filehandler; +00114 +00115 var $iq_sleep_timer; +00116 var $last_ping_time; +00117 +00118 var $packet_queue; +00119 var $subscription_queue; +00120 +00121 var $iq_version_name; +00122 var $iq_version_os; +00123 var $iq_version_version; +00124 +00125 var $error_codes; +00126 +00127 var $connected; +00128 var $keep_alive_id; +00129 var $returned_keep_alive; +00130 var $txnid; +00131 +00132 var $CONNECTOR; +00133 +00134 +00135 +00136 function Jabber() +00137 { +00138 $this->server = "localhost"; +00139 $this->port = "5222"; +00140 +00141 $this->username = "larry"; +00142 $this->password = "curly"; +00143 $this->resource = NULL; +00144 +00145 $this->enable_logging = FALSE; +00146 $this->log_array = array(); +00147 $this->log_filename = ''; +00148 $this->log_filehandler = FALSE; +00149 +00150 $this->packet_queue = array(); +00151 $this->subscription_queue = array(); +00152 +00153 $this->iq_sleep_timer = 1; +00154 $this->delay_disconnect = 1; +00155 +00156 $this->returned_keep_alive = TRUE; +00157 $this->txnid = 0; +00158 +00159 $this->iq_version_name = "Class.Jabber.PHP -- http://phpjabber.g-blog.net -- by Carlo 'Gossip' Zottmann, gossip@jabber.g-blog.net"; +00160 $this->iq_version_version = "0.4"; +00161 $this->iq_version_os = $_SERVER['SERVER_SOFTWARE']; +00162 +00163 $this->connection_class = "CJP_StandardConnector"; +00164 +00165 $this->error_codes = array(400 => "Bad Request", +00166 401 => "Unauthorized", +00167 402 => "Payment Required", +00168 403 => "Forbidden", +00169 404 => "Not Found", +00170 405 => "Not Allowed", +00171 406 => "Not Acceptable", +00172 407 => "Registration Required", +00173 408 => "Request Timeout", +00174 409 => "Conflict", +00175 500 => "Internal Server Error", +00176 501 => "Not Implemented", +00177 502 => "Remove Server Error", +00178 503 => "Service Unavailable", +00179 504 => "Remove Server Timeout", +00180 510 => "Disconnected"); +00181 } +00182 +00183 +00184 +00185 function Connect() +00186 { +00187 $this->_create_logfile(); +00188 +00189 $this->CONNECTOR = new $this->connection_class; +00190 +00191 if ($this->CONNECTOR->OpenSocket($this->server, $this->port)) +00192 { +00193 $this->SendPacket("<?xml version='1.0' encoding='UTF-8' ?" . ">\n"); +00194 $this->SendPacket("<stream:stream to='{$this->server}' xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams'>\n"); +00195 +00196 sleep(2); +00197 +00198 if ($this->_check_connected()) +00199 { +00200 $this->connected = TRUE; // Nathan Fritz +00201 return TRUE; +00202 } +00203 else +00204 { +00205 $this->AddToLog("ERROR: Connect() #1"); +00206 return FALSE; +00207 } +00208 } +00209 else +00210 { +00211 $this->AddToLog("ERROR: Connect() #2"); +00212 return FALSE; +00213 } +00214 } +00215 +00216 +00217 +00218 function Disconnect() +00219 { +00220 if (is_int($this->delay_disconnect)) +00221 { +00222 sleep($this->delay_disconnect); +00223 } +00224 +00225 $this->SendPacket("</stream:stream>"); +00226 $this->CONNECTOR->CloseSocket(); +00227 +00228 $this->_close_logfile(); +00229 $this->PrintLog(); +00230 } +00231 +00232 +00233 +00234 function SendAuth() +00235 { +00236 $this->auth_id = "auth_" . md5(time() . $_SERVER['REMOTE_ADDR']); +00237 +00238 $this->resource = ($this->resource != NULL) ? $this->resource : ("Class.Jabber.PHP " . md5($this->auth_id)); +00239 $this->jid = "{$this->username}@{$this->server}/{$this->resource}"; +00240 +00241 // request available authentication methods +00242 $payload = "<username>{$this->username}</username>"; +00243 $packet = $this->SendIq(NULL, 'get', $this->auth_id, "jabber:iq:auth", $payload); +00244 +00245 // was a result returned? +00246 if ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id) +00247 { +00248 // yes, now check for auth method availability in descending order (best to worst) +00249 +00250 if (!function_exists(mhash)) +00251 { +00252 $this->AddToLog("ATTENTION: SendAuth() - mhash() is not available; screw 0k and digest method, we need to go with plaintext auth"); +00253 } +00254 +00255 // auth_0k +00256 if (function_exists(mhash) && isset($packet['iq']['#']['query'][0]['#']['sequence'][0]["#"]) && isset($packet['iq']['#']['query'][0]['#']['token'][0]["#"])) +00257 { +00258 return $this->_sendauth_0k($packet['iq']['#']['query'][0]['#']['token'][0]["#"], $packet['iq']['#']['query'][0]['#']['sequence'][0]["#"]); +00259 } +00260 // digest +00261 elseif (function_exists(mhash) && isset($packet['iq']['#']['query'][0]['#']['digest'])) +00262 { +00263 return $this->_sendauth_digest(); +00264 } +00265 // plain text +00266 elseif ($packet['iq']['#']['query'][0]['#']['password']) +00267 { +00268 return $this->_sendauth_plaintext(); +00269 } +00270 // dude, you're fucked +00271 { +00272 $this->AddToLog("ERROR: SendAuth() #2 - No auth method available!"); +00273 return FALSE; +00274 } +00275 } +00276 else +00277 { +00278 // no result returned +00279 $this->AddToLog("ERROR: SendAuth() #1"); +00280 return FALSE; +00281 } +00282 } +00283 +00284 +00285 +00286 function AccountRegistration($reg_email = NULL, $reg_name = NULL) +00287 { +00288 $packet = $this->SendIq($this->server, 'get', 'reg_01', 'jabber:iq:register'); +00289 +00290 if ($packet) +00291 { +00292 $key = $this->GetInfoFromIqKey($packet); // just in case a key was passed back from the server +00293 unset($packet); +00294 +00295 $payload = "<username>{$this->username}</username> +00296 <password>{$this->password}</password> +00297 <email>$reg_email</email> +00298 <name>$reg_name</name>\n"; +00299 +00300 $payload .= ($key) ? "<key>$key</key>\n" : ''; +00301 +00302 $packet = $this->SendIq($this->server, 'set', "reg_01", "jabber:iq:register", $payload); +00303 +00304 if ($this->GetInfoFromIqType($packet) == 'result') +00305 { +00306 if (isset($packet['iq']['#']['query'][0]['#']['registered'][0]['#'])) +00307 { +00308 $return_code = 1; +00309 } +00310 else +00311 { +00312 $return_code = 2; +00313 } +00314 +00315 if ($this->resource) +00316 { +00317 $this->jid = "{$this->username}@{$this->server}/{$this->resource}"; +00318 } +00319 else +00320 { +00321 $this->jid = "{$this->username}@{$this->server}"; +00322 } +00323 +00324 } +00325 elseif ($this->GetInfoFromIqType($packet) == 'error' && isset($packet['iq']['#']['error'][0]['#'])) +00326 { +00327 // "conflict" error, i.e. already registered +00328 if ($packet['iq']['#']['error'][0]['@']['code'] == '409') +00329 { +00330 $return_code = 1; +00331 } +00332 else +00333 { +00334 $return_code = "Error " . $packet['iq']['#']['error'][0]['@']['code'] . ": " . $packet['iq']['#']['error'][0]['#']; +00335 } +00336 } +00337 +00338 return $return_code; +00339 +00340 } +00341 else +00342 { +00343 return 3; +00344 } +00345 } +00346 +00347 +00348 +00349 function SendPacket($xml) +00350 { +00351 $xml = trim($xml); +00352 +00353 if ($this->CONNECTOR->WriteToSocket($xml)) +00354 { +00355 $this->AddToLog("SEND: $xml"); +00356 return TRUE; +00357 } +00358 else +00359 { +00360 $this->AddToLog('ERROR: SendPacket() #1'); +00361 return FALSE; +00362 } +00363 } +00364 +00365 +00366 +00367 function Listen() +00368 { +00369 unset($incoming); +00370 +00371 while ($line = $this->CONNECTOR->ReadFromSocket(4096)) +00372 { +00373 $incoming .= $line; +00374 } +00375 +00376 $incoming = trim($incoming); +00377 +00378 if ($incoming != "") +00379 { +00380 $this->AddToLog("RECV: $incoming"); +00381 } +00382 +00383 if ($incoming != "") +00384 { +00385 $temp = $this->_split_incoming($incoming); +00386 +00387 for ($a = 0; $a < count($temp); $a++) +00388 { +00389 $this->packet_queue[] = $this->xmlize($temp[$a]); +00390 } +00391 } +00392 +00393 return TRUE; +00394 } +00395 +00396 +00397 +00398 function StripJID($jid = NULL) +00399 { +00400 preg_match("/(.*)\/(.*)/Ui", $jid, $temp); +00401 return ($temp[1] != "") ? $temp[1] : $jid; +00402 } +00403 +00404 +00405 +00406 function SendMessage($to, $type = "normal", $id = NULL, $content = NULL, $payload = NULL) +00407 { +00408 if ($to && is_array($content)) +00409 { +00410 if (!$id) +00411 { +00412 $id = $type . "_" . time(); +00413 } +00414 +00415 $content = $this->_array_htmlspecialchars($content); +00416 +00417 $xml = "<message to='$to' type='$type' id='$id'>\n"; +00418 +00419 if ($content['subject']) +00420 { +00421 $xml .= "<subject>" . $content['subject'] . "</subject>\n"; +00422 } +00423 +00424 if ($content['thread']) +00425 { +00426 $xml .= "<thread>" . $content['thread'] . "</thread>\n"; +00427 } +00428 +00429 $xml .= "<body>" . $content['body'] . "</body>\n"; +00430 $xml .= $payload; +00431 $xml .= "</message>\n"; +00432 +00433 +00434 if ($this->SendPacket($xml)) +00435 { +00436 return TRUE; +00437 } +00438 else +00439 { +00440 $this->AddToLog("ERROR: SendMessage() #1"); +00441 return FALSE; +00442 } +00443 } +00444 else +00445 { +00446 $this->AddToLog("ERROR: SendMessage() #2"); +00447 return FALSE; +00448 } +00449 } +00450 +00451 +00452 +00453 function SendPresence($type = NULL, $to = NULL, $status = NULL, $show = NULL, $priority = NULL) +00454 { +00455 $xml = "<presence"; +00456 $xml .= ($to) ? " to='$to'" : ''; +00457 $xml .= ($type) ? " type='$type'" : ''; +00458 $xml .= ($status || $show || $priority) ? ">\n" : " />\n"; +00459 +00460 $xml .= ($status) ? " <status>$status</status>\n" : ''; +00461 $xml .= ($show) ? " <show>$show</show>\n" : ''; +00462 $xml .= ($priority) ? " <priority>$priority</priority>\n" : ''; +00463 +00464 $xml .= ($status || $show || $priority) ? "</presence>\n" : ''; +00465 +00466 if ($this->SendPacket($xml)) +00467 { +00468 return TRUE; +00469 } +00470 else +00471 { +00472 $this->AddToLog("ERROR: SendPresence() #1"); +00473 return FALSE; +00474 } +00475 } +00476 +00477 +00478 +00479 function SendError($to, $id = NULL, $error_number, $error_message = NULL) +00480 { +00481 $xml = "<iq type='error' to='$to'"; +00482 $xml .= ($id) ? " id='$id'" : ''; +00483 $xml .= ">\n"; +00484 $xml .= " <error code='$error_number'>"; +00485 $xml .= ($error_message) ? $error_message : $this->error_codes[$error_number]; +00486 $xml .= "</error>\n"; +00487 $xml .= "</iq>"; +00488 +00489 $this->SendPacket($xml); +00490 } +00491 +00492 +00493 +00494 function RosterUpdate() +00495 { +00496 $roster_request_id = "roster_" . time(); +00497 +00498 $incoming_array = $this->SendIq(NULL, 'get', $roster_request_id, "jabber:iq:roster"); +00499 +00500 if (is_array($incoming_array)) +00501 { +00502 if ($incoming_array['iq']['@']['type'] == 'result' +00503 && $incoming_array['iq']['@']['id'] == $roster_request_id +00504 && $incoming_array['iq']['#']['query']['0']['@']['xmlns'] == "jabber:iq:roster") +00505 { +00506 $number_of_contacts = count($incoming_array['iq']['#']['query'][0]['#']['item']); +00507 $this->roster = array(); +00508 +00509 for ($a = 0; $a < $number_of_contacts; $a++) +00510 { +00511 $this->roster[$a] = array( "jid" => strtolower($incoming_array['iq']['#']['query'][0]['#']['item'][$a]['@']['jid']), +00512 "name" => $incoming_array['iq']['#']['query'][0]['#']['item'][$a]['@']['name'], +00513 "subscription" => $incoming_array['iq']['#']['query'][0]['#']['item'][$a]['@']['subscription'], +00514 "group" => $incoming_array['iq']['#']['query'][0]['#']['item'][$a]['#']['group'][0]['#'] +00515 ); +00516 } +00517 +00518 return TRUE; +00519 } +00520 else +00521 { +00522 $this->AddToLog("ERROR: RosterUpdate() #1"); +00523 return FALSE; +00524 } +00525 } +00526 else +00527 { +00528 $this->AddToLog("ERROR: RosterUpdate() #2"); +00529 return FALSE; +00530 } +00531 } +00532 +00533 +00534 +00535 function RosterAddUser($jid = NULL, $id = NULL, $name = NULL) +00536 { +00537 $id = ($id) ? $id : "adduser_" . time(); +00538 +00539 if ($jid) +00540 { +00541 $payload = " <item jid='$jid'"; +00542 $payload .= ($name) ? " name='" . htmlspecialchars($name) . "'" : ''; +00543 $payload .= "/>\n"; +00544 +00545 $packet = $this->SendIq(NULL, 'set', $id, "jabber:iq:roster", $payload); +00546 +00547 if ($this->GetInfoFromIqType($packet) == 'result') +00548 { +00549 $this->RosterUpdate(); +00550 return TRUE; +00551 } +00552 else +00553 { +00554 $this->AddToLog("ERROR: RosterAddUser() #2"); +00555 return FALSE; +00556 } +00557 } +00558 else +00559 { +00560 $this->AddToLog("ERROR: RosterAddUser() #1"); +00561 return FALSE; +00562 } +00563 } +00564 +00565 +00566 +00567 function RosterRemoveUser($jid = NULL, $id = NULL) +00568 { +00569 $id = ($id) ? $id : 'deluser_' . time(); +00570 +00571 if ($jid && $id) +00572 { +00573 $packet = $this->SendIq(NULL, 'set', $id, "jabber:iq:roster", "<item jid='$jid' subscription='remove'/>"); +00574 +00575 if ($this->GetInfoFromIqType($packet) == 'result') +00576 { +00577 $this->RosterUpdate(); +00578 return TRUE; +00579 } +00580 else +00581 { +00582 $this->AddToLog("ERROR: RosterRemoveUser() #2"); +00583 return FALSE; +00584 } +00585 } +00586 else +00587 { +00588 $this->AddToLog("ERROR: RosterRemoveUser() #1"); +00589 return FALSE; +00590 } +00591 } +00592 +00593 +00594 +00595 function RosterExistsJID($jid = NULL) +00596 { +00597 if ($jid) +00598 { +00599 if ($this->roster) +00600 { +00601 for ($a = 0; $a < count($this->roster); $a++) +00602 { +00603 if ($this->roster[$a]['jid'] == strtolower($jid)) +00604 { +00605 return $a; +00606 } +00607 } +00608 } +00609 else +00610 { +00611 $this->AddToLog("ERROR: RosterExistsJID() #2"); +00612 return FALSE; +00613 } +00614 } +00615 else +00616 { +00617 $this->AddToLog("ERROR: RosterExistsJID() #1"); +00618 return FALSE; +00619 } +00620 } +00621 +00622 +00623 +00624 function GetFirstFromQueue() +00625 { +00626 return array_shift($this->packet_queue); +00627 } +00628 +00629 +00630 +00631 function GetFromQueueById($packet_type, $id) +00632 { +00633 $found_message = FALSE; +00634 +00635 foreach ($this->packet_queue as $key => $value) +00636 { +00637 if ($value[$packet_type]['@']['id'] == $id) +00638 { +00639 $found_message = $value; +00640 unset($this->packet_queue[$key]); +00641 +00642 break; +00643 } +00644 } +00645 +00646 return (is_array($found_message)) ? $found_message : FALSE; +00647 } +00648 +00649 +00650 +00651 function CallHandler($packet = NULL) +00652 { +00653 $packet_type = $this->_get_packet_type($packet); +00654 +00655 if ($packet_type == "message") +00656 { +00657 $type = $packet['message']['@']['type']; +00658 $type = ($type != "") ? $type : "normal"; +00659 $funcmeth = "Handler_message_$type"; +00660 } +00661 elseif ($packet_type == "iq") +00662 { +00663 $namespace = $packet['iq']['#']['query'][0]['@']['xmlns']; +00664 $namespace = str_replace(":", "_", $namespace); +00665 $funcmeth = "Handler_iq_$namespace"; +00666 } +00667 elseif ($packet_type == "presence") +00668 { +00669 $type = $packet['presence']['@']['type']; +00670 $type = ($type != "") ? $type : "available"; +00671 $funcmeth = "Handler_presence_$type"; +00672 } +00673 +00674 +00675 if ($funcmeth != '') +00676 { +00677 if (function_exists($funcmeth)) +00678 { +00679 call_user_func($funcmeth, $packet); +00680 } +00681 elseif (method_exists($this, $funcmeth)) +00682 { +00683 call_user_func(array(&$this, $funcmeth), $packet); +00684 } +00685 else +00686 { +00687 $this->Handler_NOT_IMPLEMENTED($packet); +00688 $this->AddToLog("ERROR: CallHandler() #1 - neither method nor function $funcmeth() available"); +00689 } +00690 } +00691 } +00692 +00693 +00694 +00695 function CruiseControl($seconds = -1) +00696 { +00697 $count = 0; +00698 +00699 while ($count != $seconds) +00700 { +00701 $this->Listen(); +00702 +00703 do { +00704 $packet = $this->GetFirstFromQueue(); +00705 +00706 if ($packet) { +00707 $this->CallHandler($packet); +00708 } +00709 +00710 } while (count($this->packet_queue) > 1); +00711 +00712 $count += 0.25; +00713 usleep(250000); +00714 +00715 if ($this->last_ping_time != date('H:i')) +00716 { +00717 // Modified by Nathan Fritz +00718 if ($this->returned_keep_alive == FALSE) +00719 { +00720 $this->connected = FALSE; +00721 $this->AddToLog('EVENT: Disconnected'); +00722 } +00723 +00724 $this->returned_keep_alive = FALSE; +00725 $this->keep_alive_id = 'keep_alive_' . time(); +00726 $this->SendPacket("<iq id='{$this->keep_alive_id}'/>", 'CruiseControl'); +00727 // ** +00728 +00729 $this->last_ping_time = date("H:i"); +00730 } +00731 } +00732 +00733 return TRUE; +00734 } +00735 +00736 +00737 +00738 function SubscriptionAcceptRequest($to = NULL) +00739 { +00740 return ($to) ? $this->SendPresence("subscribed", $to) : FALSE; +00741 } +00742 +00743 +00744 +00745 function SubscriptionDenyRequest($to = NULL) +00746 { +00747 return ($to) ? $this->SendPresence("unsubscribed", $to) : FALSE; +00748 } +00749 +00750 +00751 +00752 function Subscribe($to = NULL) +00753 { +00754 return ($to) ? $this->SendPresence("subscribe", $to) : FALSE; +00755 } +00756 +00757 +00758 +00759 function Unsubscribe($to = NULL) +00760 { +00761 return ($to) ? $this->SendPresence("unsubscribe", $to) : FALSE; +00762 } +00763 +00764 +00765 +00766 function SendIq($to = NULL, $type = 'get', $id = NULL, $xmlns = NULL, $payload = NULL, $from = NULL) +00767 { +00768 if (!preg_match("/^(get|set|result|error)$/", $type)) +00769 { +00770 unset($type); +00771 +00772 $this->AddToLog("ERROR: SendIq() #2 - type must be 'get', 'set', 'result' or 'error'"); +00773 return FALSE; +00774 } +00775 elseif ($id && $xmlns) +00776 { +00777 $xml = "<iq type='$type' id='$id'"; +00778 $xml .= ($to) ? " to='$to'" : ''; +00779 $xml .= ($from) ? " from='$from'" : ''; +00780 $xml .= "> +00781 <query xmlns='$xmlns'> +00782 $payload +00783 </query> +00784 </iq>"; +00785 +00786 $this->SendPacket($xml); +00787 sleep($this->iq_sleep_timer); +00788 $this->Listen(); +00789 +00790 return (preg_match("/^(get|set)$/", $type)) ? $this->GetFromQueueById("iq", $id) : TRUE; +00791 } +00792 else +00793 { +00794 $this->AddToLog("ERROR: SendIq() #1 - to, id and xmlns are mandatory"); +00795 return FALSE; +00796 } +00797 } +00798 +00799 +00800 +00801 // get the transport registration fields +00802 // method written by Steve Blinch, http://www.blitzaffe.com +00803 function TransportRegistrationDetails($transport) +00804 { +00805 $this->txnid++; +00806 $packet = $this->SendIq($transport, 'get', "reg_{$this->txnid}", "jabber:iq:register", NULL, $this->jid); +00807 +00808 if ($packet) +00809 { +00810 $res = array(); +00811 +00812 foreach ($packet['iq']['#']['query'][0]['#'] as $element => $data) +00813 { +00814 if ($element != 'instructions' && $element != 'key') +00815 { +00816 $res[] = $element; +00817 } +00818 } +00819 +00820 return $res; +00821 } +00822 else +00823 { +00824 return 3; +00825 } +00826 } +00827 +00828 +00829 +00830 // register with the transport +00831 // method written by Steve Blinch, http://www.blitzaffe.com +00832 function TransportRegistration($transport, $details) +00833 { +00834 $this->txnid++; +00835 $packet = $this->SendIq($transport, 'get', "reg_{$this->txnid}", "jabber:iq:register", NULL, $this->jid); +00836 +00837 if ($packet) +00838 { +00839 $key = $this->GetInfoFromIqKey($packet); // just in case a key was passed back from the server +00840 unset($packet); +00841 +00842 $payload = ($key) ? "<key>$key</key>\n" : ''; +00843 foreach ($details as $element => $value) +00844 { +00845 $payload .= "<$element>$value</$element>\n"; +00846 } +00847 +00848 $packet = $this->SendIq($transport, 'set', "reg_{$this->txnid}", "jabber:iq:register", $payload); +00849 +00850 if ($this->GetInfoFromIqType($packet) == 'result') +00851 { +00852 if (isset($packet['iq']['#']['query'][0]['#']['registered'][0]['#'])) +00853 { +00854 $return_code = 1; +00855 } +00856 else +00857 { +00858 $return_code = 2; +00859 } +00860 } +00861 elseif ($this->GetInfoFromIqType($packet) == 'error') +00862 { +00863 if (isset($packet['iq']['#']['error'][0]['#'])) +00864 { +00865 $return_code = "Error " . $packet['iq']['#']['error'][0]['@']['code'] . ": " . $packet['iq']['#']['error'][0]['#']; +00866 $this->AddToLog('ERROR: TransportRegistration()'); +00867 } +00868 } +00869 +00870 return $return_code; +00871 } +00872 else +00873 { +00874 return 3; +00875 } +00876 } +00877 +00878 +00879 +00880 function GetvCard($jid = NULL, $id = NULL) +00881 { +00882 if (!$id) +00883 { +00884 $id = "vCard_" . md5(time() . $_SERVER['REMOTE_ADDR']); +00885 } +00886 +00887 if ($jid) +00888 { +00889 $xml = "<iq type='get' to='$jid' id='$id'> +00890 <vCard xmlns='vcard-temp'/> +00891 </iq>"; +00892 +00893 $this->SendPacket($xml); +00894 sleep($this->iq_sleep_timer); +00895 $this->Listen(); +00896 +00897 return $this->GetFromQueueById("iq", $id); +00898 } +00899 else +00900 { +00901 $this->AddToLog("ERROR: GetvCard() #1 - to and id are mandatory"); +00902 return FALSE; +00903 } +00904 } +00905 +00906 +00907 +00908 function PrintLog() +00909 { +00910 if ($this->enable_logging) +00911 { +00912 if ($this->log_filehandler) +00913 { +00914 echo "<h2>Logging enabled, logged events have been written to the file {$this->log_filename}.</h2>\n"; +00915 } +00916 else +00917 { +00918 echo "<h2>Logging enabled, logged events below:</h2>\n"; +00919 echo "<pre>\n"; +00920 echo (count($this->log_array) > 0) ? implode("\n\n\n", $this->log_array) : "No logged events."; +00921 echo "</pre>\n"; +00922 } +00923 } +00924 } +00925 +00926 +00927 +00928 // ====================================================================== +00929 // private methods +00930 // ====================================================================== +00931 +00932 +00933 +00934 function _sendauth_0k($zerok_token, $zerok_sequence) +00935 { +00936 // initial hash of password +00937 $zerok_hash = mhash(MHASH_SHA1, $this->password); +00938 $zerok_hash = bin2hex($zerok_hash); +00939 +00940 // sequence 0: hash of hashed-password and token +00941 $zerok_hash = mhash(MHASH_SHA1, $zerok_hash . $zerok_token); +00942 $zerok_hash = bin2hex($zerok_hash); +00943 +00944 // repeat as often as needed +00945 for ($a = 0; $a < $zerok_sequence; $a++) +00946 { +00947 $zerok_hash = mhash(MHASH_SHA1, $zerok_hash); +00948 $zerok_hash = bin2hex($zerok_hash); +00949 } +00950 +00951 $payload = "<username>{$this->username}</username> +00952 <hash>$zerok_hash</hash> +00953 <resource>{$this->resource}</resource>"; +00954 +00955 $packet = $this->SendIq(NULL, 'set', $this->auth_id, "jabber:iq:auth", $payload); +00956 +00957 // was a result returned? +00958 if ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id) +00959 { +00960 return TRUE; +00961 } +00962 else +00963 { +00964 $this->AddToLog("ERROR: _sendauth_0k() #1"); +00965 return FALSE; +00966 } +00967 } +00968 +00969 +00970 +00971 function _sendauth_digest() +00972 { +00973 $payload = "<username>{$this->username}</username> +00974 <resource>{$this->resource}</resource> +00975 <digest>" . bin2hex(mhash(MHASH_SHA1, $this->stream_id . $this->password)) . "</digest>"; +00976 +00977 $packet = $this->SendIq(NULL, 'set', $this->auth_id, "jabber:iq:auth", $payload); +00978 +00979 // was a result returned? +00980 if ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id) +00981 { +00982 return TRUE; +00983 } +00984 else +00985 { +00986 $this->AddToLog("ERROR: _sendauth_digest() #1"); +00987 return FALSE; +00988 } +00989 } +00990 +00991 +00992 +00993 function _sendauth_plaintext() +00994 { +00995 $payload = "<username>{$this->username}</username> +00996 <password>{$this->password}</password> +00997 <resource>{$this->resource}</resource>"; +00998 +00999 $packet = $this->SendIq(NULL, 'set', $this->auth_id, "jabber:iq:auth", $payload); +01000 +01001 // was a result returned? +01002 if ($this->GetInfoFromIqType($packet) == 'result' && $this->GetInfoFromIqId($packet) == $this->auth_id) +01003 { +01004 return TRUE; +01005 } +01006 else +01007 { +01008 $this->AddToLog("ERROR: _sendauth_plaintext() #1"); +01009 return FALSE; +01010 } +01011 } +01012 +01013 +01014 +01015 function _listen_incoming() +01016 { +01017 unset($incoming); +01018 +01019 while ($line = $this->CONNECTOR->ReadFromSocket(4096)) +01020 { +01021 $incoming .= $line; +01022 } +01023 +01024 $incoming = trim($incoming); +01025 +01026 if ($incoming != "") +01027 { +01028 $this->AddToLog("RECV: $incoming"); +01029 } +01030 +01031 return $this->xmlize($incoming); +01032 } +01033 +01034 +01035 +01036 function _check_connected() +01037 { +01038 $incoming_array = $this->_listen_incoming(); +01039 +01040 if (is_array($incoming_array)) +01041 { +01042 if ($incoming_array["stream:stream"]['@']['from'] == $this->server +01043 && $incoming_array["stream:stream"]['@']['xmlns'] == "jabber:client" +01044 && $incoming_array["stream:stream"]['@']["xmlns:stream"] == "http://etherx.jabber.org/streams") +01045 { +01046 $this->stream_id = $incoming_array["stream:stream"]['@']['id']; +01047 +01048 return TRUE; +01049 } +01050 else +01051 { +01052 $this->AddToLog("ERROR: _check_connected() #1"); +01053 return FALSE; +01054 } +01055 } +01056 else +01057 { +01058 $this->AddToLog("ERROR: _check_connected() #2"); +01059 return FALSE; +01060 } +01061 } +01062 +01063 +01064 +01065 function _get_packet_type($packet = NULL) +01066 { +01067 if (is_array($packet)) +01068 { +01069 reset($packet); +01070 $packet_type = key($packet); +01071 } +01072 +01073 return ($packet_type) ? $packet_type : FALSE; +01074 } +01075 +01076 +01077 +01078 function _split_incoming($incoming) +01079 { +01080 $temp = preg_split("/<(message|iq|presence|stream)/", $incoming, -1, PREG_SPLIT_DELIM_CAPTURE); +01081 $array = array(); +01082 +01083 for ($a = 1; $a < count($temp); $a = $a + 2) +01084 { +01085 $array[] = "<" . $temp[$a] . $temp[($a + 1)]; +01086 } +01087 +01088 return $array; +01089 } +01090 +01091 +01092 +01093 function _create_logfile() +01094 { +01095 if ($this->log_filename != '' && $this->enable_logging) +01096 { +01097 $this->log_filehandler = fopen($this->log_filename, 'w'); +01098 } +01099 } +01100 +01101 +01102 +01103 function AddToLog($string) +01104 { +01105 if ($this->enable_logging) +01106 { +01107 if ($this->log_filehandler) +01108 { +01109 fwrite($this->log_filehandler, $string . "\n\n"); +01110 } +01111 else +01112 { +01113 $this->log_array[] = htmlspecialchars($string); +01114 } +01115 } +01116 } +01117 +01118 +01119 +01120 function _close_logfile() +01121 { +01122 if ($this->log_filehandler) +01123 { +01124 fclose($this->log_filehandler); +01125 } +01126 } +01127 +01128 +01129 +01130 // _array_htmlspecialchars() +01131 // applies htmlspecialchars() to all values in an array +01132 +01133 function _array_htmlspecialchars($array) +01134 { +01135 if (is_array($array)) +01136 { +01137 foreach ($array as $k => $v) +01138 { +01139 if (is_array($v)) +01140 { +01141 $v = $this->_array_htmlspecialchars($v); +01142 } +01143 else +01144 { +01145 $v = htmlspecialchars($v); +01146 } +01147 } +01148 } +01149 +01150 return $array; +01151 } +01152 +01153 +01154 +01155 // ====================================================================== +01156 // <message/> parsers +01157 // ====================================================================== +01158 +01159 +01160 +01161 function GetInfoFromMessageFrom($packet = NULL) +01162 { +01163 return (is_array($packet)) ? $packet['message']['@']['from'] : FALSE; +01164 } +01165 +01166 +01167 +01168 function GetInfoFromMessageType($packet = NULL) +01169 { +01170 return (is_array($packet)) ? $packet['message']['@']['type'] : FALSE; +01171 } +01172 +01173 +01174 +01175 function GetInfoFromMessageId($packet = NULL) +01176 { +01177 return (is_array($packet)) ? $packet['message']['@']['id'] : FALSE; +01178 } +01179 +01180 +01181 +01182 function GetInfoFromMessageThread($packet = NULL) +01183 { +01184 return (is_array($packet)) ? $packet['message']['#']['thread'][0]['#'] : FALSE; +01185 } +01186 +01187 +01188 +01189 function GetInfoFromMessageSubject($packet = NULL) +01190 { +01191 return (is_array($packet)) ? $packet['message']['#']['subject'][0]['#'] : FALSE; +01192 } +01193 +01194 +01195 +01196 function GetInfoFromMessageBody($packet = NULL) +01197 { +01198 return (is_array($packet)) ? $packet['message']['#']['body'][0]['#'] : FALSE; +01199 } +01200 +01201 +01202 +01203 function GetInfoFromMessageError($packet = NULL) +01204 { +01205 $error = preg_replace("/^\/$/", "", ($packet['message']['#']['error'][0]['@']['code'] . "/" . $packet['message']['#']['error'][0]['#'])); +01206 return (is_array($packet)) ? $error : FALSE; +01207 } +01208 +01209 +01210 +01211 // ====================================================================== +01212 // <iq/> parsers +01213 // ====================================================================== +01214 +01215 +01216 +01217 function GetInfoFromIqFrom($packet = NULL) +01218 { +01219 return (is_array($packet)) ? $packet['iq']['@']['from'] : FALSE; +01220 } +01221 +01222 +01223 +01224 function GetInfoFromIqType($packet = NULL) +01225 { +01226 return (is_array($packet)) ? $packet['iq']['@']['type'] : FALSE; +01227 } +01228 +01229 +01230 +01231 function GetInfoFromIqId($packet = NULL) +01232 { +01233 return (is_array($packet)) ? $packet['iq']['@']['id'] : FALSE; +01234 } +01235 +01236 +01237 +01238 function GetInfoFromIqKey($packet = NULL) +01239 { +01240 return (is_array($packet)) ? $packet['iq']['#']['query'][0]['#']['key'][0]['#'] : FALSE; +01241 } +01242 +01243 +01244 +01245 function GetInfoFromIqError($packet = NULL) +01246 { +01247 $error = preg_replace("/^\/$/", "", ($packet['iq']['#']['error'][0]['@']['code'] . "/" . $packet['iq']['#']['error'][0]['#'])); +01248 return (is_array($packet)) ? $error : FALSE; +01249 } +01250 +01251 +01252 +01253 // ====================================================================== +01254 // <presence/> parsers +01255 // ====================================================================== +01256 +01257 +01258 +01259 function GetInfoFromPresenceFrom($packet = NULL) +01260 { +01261 return (is_array($packet)) ? $packet['presence']['@']['from'] : FALSE; +01262 } +01263 +01264 +01265 +01266 function GetInfoFromPresenceType($packet = NULL) +01267 { +01268 return (is_array($packet)) ? $packet['presence']['@']['type'] : FALSE; +01269 } +01270 +01271 +01272 +01273 function GetInfoFromPresenceStatus($packet = NULL) +01274 { +01275 return (is_array($packet)) ? $packet['presence']['#']['status'][0]['#'] : FALSE; +01276 } +01277 +01278 +01279 +01280 function GetInfoFromPresenceShow($packet = NULL) +01281 { +01282 return (is_array($packet)) ? $packet['presence']['#']['show'][0]['#'] : FALSE; +01283 } +01284 +01285 +01286 +01287 function GetInfoFromPresencePriority($packet = NULL) +01288 { +01289 return (is_array($packet)) ? $packet['presence']['#']['priority'][0]['#'] : FALSE; +01290 } +01291 +01292 +01293 +01294 // ====================================================================== +01295 // <message/> handlers +01296 // ====================================================================== +01297 +01298 +01299 +01300 function Handler_message_normal($packet) +01301 { +01302 $from = $packet['message']['@']['from']; +01303 $this->AddToLog("EVENT: Message (type normal) from $from"); +01304 } +01305 +01306 +01307 +01308 function Handler_message_chat($packet) +01309 { +01310 $from = $packet['message']['@']['from']; +01311 $this->AddToLog("EVENT: Message (type chat) from $from"); +01312 } +01313 +01314 +01315 +01316 function Handler_message_groupchat($packet) +01317 { +01318 $from = $packet['message']['@']['from']; +01319 $this->AddToLog("EVENT: Message (type groupchat) from $from"); +01320 } +01321 +01322 +01323 +01324 function Handler_message_headline($packet) +01325 { +01326 $from = $packet['message']['@']['from']; +01327 $this->AddToLog("EVENT: Message (type headline) from $from"); +01328 } +01329 +01330 +01331 +01332 function Handler_message_error($packet) +01333 { +01334 $from = $packet['message']['@']['from']; +01335 $this->AddToLog("EVENT: Message (type error) from $from"); +01336 } +01337 +01338 +01339 +01340 // ====================================================================== +01341 // <iq/> handlers +01342 // ====================================================================== +01343 +01344 +01345 +01346 // application version updates +01347 function Handler_iq_jabber_iq_autoupdate($packet) +01348 { +01349 $from = $this->GetInfoFromIqFrom($packet); +01350 $id = $this->GetInfoFromIqId($packet); +01351 +01352 $this->SendError($from, $id, 501); +01353 $this->AddToLog("EVENT: jabber:iq:autoupdate from $from"); +01354 } +01355 +01356 +01357 +01358 // interactive server component properties +01359 function Handler_iq_jabber_iq_agent($packet) +01360 { +01361 $from = $this->GetInfoFromIqFrom($packet); +01362 $id = $this->GetInfoFromIqId($packet); +01363 +01364 $this->SendError($from, $id, 501); +01365 $this->AddToLog("EVENT: jabber:iq:agent from $from"); +01366 } +01367 +01368 +01369 +01370 // method to query interactive server components +01371 function Handler_iq_jabber_iq_agents($packet) +01372 { +01373 $from = $this->GetInfoFromIqFrom($packet); +01374 $id = $this->GetInfoFromIqId($packet); +01375 +01376 $this->SendError($from, $id, 501); +01377 $this->AddToLog("EVENT: jabber:iq:agents from $from"); +01378 } +01379 +01380 +01381 +01382 // simple client authentication +01383 function Handler_iq_jabber_iq_auth($packet) +01384 { +01385 $from = $this->GetInfoFromIqFrom($packet); +01386 $id = $this->GetInfoFromIqId($packet); +01387 +01388 $this->SendError($from, $id, 501); +01389 $this->AddToLog("EVENT: jabber:iq:auth from $from"); +01390 } +01391 +01392 +01393 +01394 // out of band data +01395 function Handler_iq_jabber_iq_oob($packet) +01396 { +01397 $from = $this->GetInfoFromIqFrom($packet); +01398 $id = $this->GetInfoFromIqId($packet); +01399 +01400 $this->SendError($from, $id, 501); +01401 $this->AddToLog("EVENT: jabber:iq:oob from $from"); +01402 } +01403 +01404 +01405 +01406 // method to store private data on the server +01407 function Handler_iq_jabber_iq_private($packet) +01408 { +01409 $from = $this->GetInfoFromIqFrom($packet); +01410 $id = $this->GetInfoFromIqId($packet); +01411 +01412 $this->SendError($from, $id, 501); +01413 $this->AddToLog("EVENT: jabber:iq:private from $from"); +01414 } +01415 +01416 +01417 +01418 // method for interactive registration +01419 function Handler_iq_jabber_iq_register($packet) +01420 { +01421 $from = $this->GetInfoFromIqFrom($packet); +01422 $id = $this->GetInfoFromIqId($packet); +01423 +01424 $this->SendError($from, $id, 501); +01425 $this->AddToLog("EVENT: jabber:iq:register from $from"); +01426 } +01427 +01428 +01429 +01430 // client roster management +01431 function Handler_iq_jabber_iq_roster($packet) +01432 { +01433 $from = $this->GetInfoFromIqFrom($packet); +01434 $id = $this->GetInfoFromIqId($packet); +01435 +01436 $this->SendError($from, $id, 501); +01437 $this->AddToLog("EVENT: jabber:iq:roster from $from"); +01438 } +01439 +01440 +01441 +01442 // method for searching a user database +01443 function Handler_iq_jabber_iq_search($packet) +01444 { +01445 $from = $this->GetInfoFromIqFrom($packet); +01446 $id = $this->GetInfoFromIqId($packet); +01447 +01448 $this->SendError($from, $id, 501); +01449 $this->AddToLog("EVENT: jabber:iq:search from $from"); +01450 } +01451 +01452 +01453 +01454 // method for requesting the current time +01455 function Handler_iq_jabber_iq_time($packet) +01456 { +01457 $type = $this->GetInfoFromIqType($packet); +01458 $from = $this->GetInfoFromIqFrom($packet); +01459 $id = $this->GetInfoFromIqId($packet); +01460 $id = ($id != "") ? $id : "time_" . time(); +01461 +01462 if ($type == 'get') +01463 { +01464 $payload = "<utc>" . gmdate("Ydm\TH:i:s") . "</utc> +01465 <tz>" . date("T") . "</tz> +01466 <display>" . date("Y/d/m h:i:s A") . "</display>"; +01467 +01468 $this->SendIq($from, 'result', $id, "jabber:iq:time", $payload); +01469 } +01470 +01471 $this->AddToLog("EVENT: jabber:iq:time (type $type) from $from"); +01472 } +01473 +01474 +01475 +01476 // method for requesting version +01477 function Handler_iq_jabber_iq_version($packet) +01478 { +01479 $type = $this->GetInfoFromIqType($packet); +01480 $from = $this->GetInfoFromIqFrom($packet); +01481 $id = $this->GetInfoFromIqId($packet); +01482 $id = ($id != "") ? $id : "version_" . time(); +01483 +01484 if ($type == 'get') +01485 { +01486 $payload = "<name>{$this->iq_version_name}</name> +01487 <os>{$this->iq_version_os}</os> +01488 <version>{$this->iq_version_version}</version>"; +01489 +01490 $this->SendIq($from, 'result', $id, "jabber:iq:version", $payload); +01491 } +01492 +01493 $this->AddToLog("EVENT: jabber:iq:version (type $type) from $from"); +01494 } +01495 +01496 +01497 +01498 // keepalive method, added by Nathan Fritz +01499 function Handler_iq_($packet) +01500 { +01501 if ($this->keep_alive_id == $this->GetInfoFromIqId($packet)) +01502 { +01503 $this->returned_keep_alive = TRUE; +01504 $this->AddToLog('EVENT: Keep-Alive returned, connection alive.'); +01505 } +01506 } +01507 +01508 +01509 +01510 // ====================================================================== +01511 // <presence/> handlers +01512 // ====================================================================== +01513 +01514 +01515 +01516 function Handler_presence_available($packet) +01517 { +01518 $from = $this->GetInfoFromPresenceFrom($packet); +01519 +01520 $show_status = $this->GetInfoFromPresenceStatus($packet) . " / " . $this->GetInfoFromPresenceShow($packet); +01521 $show_status = ($show_status != " / ") ? " ($addendum)" : ''; +01522 +01523 $this->AddToLog("EVENT: Presence (type: available) - $from is available $show_status"); +01524 } +01525 +01526 +01527 +01528 function Handler_presence_unavailable($packet) +01529 { +01530 $from = $this->GetInfoFromPresenceFrom($packet); +01531 +01532 $show_status = $this->GetInfoFromPresenceStatus($packet) . " / " . $this->GetInfoFromPresenceShow($packet); +01533 $show_status = ($show_status != " / ") ? " ($addendum)" : ''; +01534 +01535 $this->AddToLog("EVENT: Presence (type: unavailable) - $from is unavailable $show_status"); +01536 } +01537 +01538 +01539 +01540 function Handler_presence_subscribe($packet) +01541 { +01542 $from = $this->GetInfoFromPresenceFrom($packet); +01543 $this->SubscriptionAcceptRequest($from); +01544 $this->RosterUpdate(); +01545 +01546 $this->log_array[] = "<b>Presence:</b> (type: subscribe) - Subscription request from $from, was added to \$this->subscription_queue, roster updated"; +01547 } +01548 +01549 +01550 +01551 function Handler_presence_subscribed($packet) +01552 { +01553 $from = $this->GetInfoFromPresenceFrom($packet); +01554 $this->RosterUpdate(); +01555 +01556 $this->AddToLog("EVENT: Presence (type: subscribed) - Subscription allowed by $from, roster updated"); +01557 } +01558 +01559 +01560 +01561 function Handler_presence_unsubscribe($packet) +01562 { +01563 $from = $this->GetInfoFromPresenceFrom($packet); +01564 $this->SendPresence("unsubscribed", $from); +01565 $this->RosterUpdate(); +01566 +01567 $this->AddToLog("EVENT: Presence (type: unsubscribe) - Request to unsubscribe from $from, was automatically approved, roster updated"); +01568 } +01569 +01570 +01571 +01572 function Handler_presence_unsubscribed($packet) +01573 { +01574 $from = $this->GetInfoFromPresenceFrom($packet); +01575 $this->RosterUpdate(); +01576 +01577 $this->AddToLog("EVENT: Presence (type: unsubscribed) - Unsubscribed from $from's presence"); +01578 } +01579 +01580 +01581 +01582 // Added By Nathan Fritz +01583 function Handler_presence_error($packet) +01584 { +01585 $from = $this->GetInfoFromPresenceFrom($packet); +01586 $this->AddToLog("EVENT: Presence (type: error) - Error in $from's presence"); +01587 } +01588 +01589 +01590 +01591 // ====================================================================== +01592 // Generic handlers +01593 // ====================================================================== +01594 +01595 +01596 +01597 // Generic handler for unsupported requests +01598 function Handler_NOT_IMPLEMENTED($packet) +01599 { +01600 $packet_type = $this->_get_packet_type($packet); +01601 $from = call_user_func(array(&$this, "GetInfoFrom" . ucfirst($packet_type) . "From"), $packet); +01602 $id = call_user_func(array(&$this, "GetInfoFrom" . ucfirst($packet_type) . "Id"), $packet); +01603 +01604 $this->SendError($from, $id, 501); +01605 $this->AddToLog("EVENT: Unrecognized <$packet_type/> from $from"); +01606 } +01607 +01608 +01609 +01610 // ====================================================================== +01611 // Third party code +01612 // m@d pr0ps to the coders ;) +01613 // ====================================================================== +01614 +01615 +01616 +01617 // xmlize() +01618 // (c) Hans Anderson / http://www.hansanderson.com/php/xml/ +01619 +01620 function xmlize($data) +01621 { +01622 $vals = $index = $array = array(); +01623 $parser = xml_parser_create(); +01624 xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0); +01625 xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1); +01626 xml_parse_into_struct($parser, $data, $vals, $index); +01627 xml_parser_free($parser); +01628 +01629 $i = 0; +01630 +01631 $tagname = $vals[$i]['tag']; +01632 $array[$tagname]['@'] = $vals[$i]['attributes']; +01633 $array[$tagname]['#'] = $this->_xml_depth($vals, $i); +01634 +01635 return $array; +01636 } +01637 +01638 +01639 +01640 // _xml_depth() +01641 // (c) Hans Anderson / http://www.hansanderson.com/php/xml/ +01642 +01643 function _xml_depth($vals, &$i) +01644 { +01645 $children = array(); +01646 +01647 if ($vals[$i]['value']) +01648 { +01649 array_push($children, trim($vals[$i]['value'])); +01650 } +01651 +01652 while (++$i < count($vals)) +01653 { +01654 switch ($vals[$i]['type']) +01655 { +01656 case 'cdata': +01657 array_push($children, trim($vals[$i]['value'])); +01658 break; +01659 +01660 case 'complete': +01661 $tagname = $vals[$i]['tag']; +01662 $size = sizeof($children[$tagname]); +01663 $children[$tagname][$size]['#'] = trim($vals[$i]['value']); +01664 if ($vals[$i]['attributes']) +01665 { +01666 $children[$tagname][$size]['@'] = $vals[$i]['attributes']; +01667 } +01668 break; +01669 +01670 case 'open': +01671 $tagname = $vals[$i]['tag']; +01672 $size = sizeof($children[$tagname]); +01673 if ($vals[$i]['attributes']) +01674 { +01675 $children[$tagname][$size]['@'] = $vals[$i]['attributes']; +01676 $children[$tagname][$size]['#'] = $this->_xml_depth($vals, $i); +01677 } +01678 else +01679 { +01680 $children[$tagname][$size]['#'] = $this->_xml_depth($vals, $i); +01681 } +01682 break; +01683 +01684 case 'close': +01685 return $children; +01686 break; +01687 } +01688 } +01689 +01690 return $children; +01691 } +01692 +01693 +01694 +01695 // TraverseXMLize() +01696 // (c) acebone@f2s.com, a HUGE help! +01697 +01698 function TraverseXMLize($array, $arrName = "array", $level = 0) +01699 { +01700 if ($level == 0) +01701 { +01702 echo "<pre>"; +01703 } +01704 +01705 while (list($key, $val) = @each($array)) +01706 { +01707 if (is_array($val)) +01708 { +01709 $this->TraverseXMLize($val, $arrName . "[" . $key . "]", $level + 1); +01710 } +01711 else +01712 { +01713 echo '$' . $arrName . '[' . $key . '] = "' . $val . "\"\n"; +01714 } +01715 } +01716 +01717 if ($level == 0) +01718 { +01719 echo "</pre>"; +01720 } +01721 } +01722 } +01723 +01724 +01725 +01726 class MakeXML extends Jabber +01727 { +01728 var $nodes; +01729 +01730 +01731 function MakeXML() +01732 { +01733 $nodes = array(); +01734 } +01735 +01736 +01737 +01738 function AddPacketDetails($string, $value = NULL) +01739 { +01740 if (preg_match("/\(([0-9]*)\)$/i", $string)) +01741 { +01742 $string .= "/[\"#\"]"; +01743 } +01744 +01745 $temp = @explode("/", $string); +01746 +01747 for ($a = 0; $a < count($temp); $a++) +01748 { +01749 $temp[$a] = preg_replace("/^[@]{1}([a-z0-9_]*)$/i", "[\"@\"][\"\\1\"]", $temp[$a]); +01750 $temp[$a] = preg_replace("/^([a-z0-9_]*)\(([0-9]*)\)$/i", "[\"\\1\"][\\2]", $temp[$a]); +01751 $temp[$a] = preg_replace("/^([a-z0-9_]*)$/i", "[\"\\1\"]", $temp[$a]); +01752 } +01753 +01754 $node = implode("", $temp); +01755 +01756 // Yeahyeahyeah, I know it's ugly... get over it. ;) +01757 echo "\$this->nodes$node = \"" . htmlspecialchars($value) . "\";<br/>"; +01758 eval("\$this->nodes$node = \"" . htmlspecialchars($value) . "\";"); +01759 } +01760 +01761 +01762 +01763 function BuildPacket($array = NULL) +01764 { +01765 +01766 if (!$array) +01767 { +01768 $array = $this->nodes; +01769 } +01770 +01771 if (is_array($array)) +01772 { +01773 array_multisort($array, SORT_ASC, SORT_STRING); +01774 +01775 foreach ($array as $key => $value) +01776 { +01777 if (is_array($value) && $key == "@") +01778 { +01779 foreach ($value as $subkey => $subvalue) +01780 { +01781 $subvalue = htmlspecialchars($subvalue); +01782 $text .= " $subkey='$subvalue'"; +01783 } +01784 +01785 $text .= ">\n"; +01786 +01787 } +01788 elseif ($key == "#") +01789 { +01790 $text .= htmlspecialchars($value); +01791 } +01792 elseif (is_array($value)) +01793 { +01794 for ($a = 0; $a < count($value); $a++) +01795 { +01796 $text .= "<$key"; +01797 +01798 if (!$this->_preg_grep_keys("/^@/", $value[$a])) +01799 { +01800 $text .= ">"; +01801 } +01802 +01803 $text .= $this->BuildPacket($value[$a]); +01804 +01805 $text .= "</$key>\n"; +01806 } +01807 } +01808 else +01809 { +01810 $value = htmlspecialchars($value); +01811 $text .= "<$key>$value</$key>\n"; +01812 } +01813 } +01814 +01815 return $text; +01816 } +01817 } +01818 +01819 +01820 +01821 function _preg_grep_keys($pattern, $array) +01822 { +01823 while (list($key, $val) = each($array)) +01824 { +01825 if (preg_match($pattern, $key)) +01826 { +01827 $newarray[$key] = $val; +01828 } +01829 } +01830 return (is_array($newarray)) ? $newarray : FALSE; +01831 } +01832 } +01833 +01834 +01835 +01836 class CJP_StandardConnector +01837 { +01838 var $active_socket; +01839 +01840 function OpenSocket($server, $port) +01841 { +01842 if ($this->active_socket = fsockopen($server, $port)) +01843 { +01844 socket_set_blocking($this->active_socket, 0); +01845 socket_set_timeout($this->active_socket, 31536000); +01846 +01847 return TRUE; +01848 } +01849 else +01850 { +01851 return FALSE; +01852 } +01853 } +01854 +01855 +01856 +01857 function CloseSocket() +01858 { +01859 return fclose($this->active_socket); +01860 } +01861 +01862 +01863 +01864 function WriteToSocket($data) +01865 { +01866 return fwrite($this->active_socket, $data); +01867 } +01868 +01869 +01870 +01871 function ReadFromSocket($chunksize) +01872 { +01873 set_magic_quotes_runtime(0); +01874 $buffer = fread($this->active_socket, $chunksize); +01875 set_magic_quotes_runtime(get_magic_quotes_gpc()); +01876 +01877 return $buffer; +01878 } +01879 } +01880 +01881 +01882 +01883 ?> +

Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par + +doxygen 1.3.7
+ + diff --git a/doc/dev/php/html/class_8jabber_8php.html b/doc/dev/php/html/class_8jabber_8php.html new file mode 100644 index 00000000000..aa155fe6878 --- /dev/null +++ b/doc/dev/php/html/class_8jabber_8php.html @@ -0,0 +1,27 @@ + + +dolibarr: class.jabber.php File Reference + + + + +

Référence du fichier htdocs/lib/jabber/class.jabber.php

Classe permettant de se connecter à un serveur jabber. +Plus de détails... +

+ +

+Aller au code source de ce fichier. + +
+


Description détaillée

+Classe permettant de se connecter à un serveur jabber. +

+

Auteur:
Carlo "Gossip" Zottmann.
+
Version:
0.4.
+Ensemble des fonctions permettant de se connecter à un serveur jabber. +

+Définition dans le fichier class.jabber.php.


Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par + +doxygen 1.3.7
+ + diff --git a/doc/dev/php/html/classes.html b/doc/dev/php/html/classes.html index 9b03b8181a9..b1c458cb0a5 100644 --- a/doc/dev/php/html/classes.html +++ b/doc/dev/php/html/classes.html @@ -5,13 +5,14 @@ -

dolibarr Index des classes

C | D | W

+

dolibarr Index des classes

C | D | V | W

  C  
  D  
-
DoliDb   
  W  
-
Webcal   
CMailFile   

C | D | W

-


Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
  V  
+
  W  
+Webcal   CMailFile   DoliDb   vCard   

C | D | V | W

+


Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/classvCard-members.html b/doc/dev/php/html/classvCard-members.html new file mode 100644 index 00000000000..52e5d6f6de0 --- /dev/null +++ b/doc/dev/php/html/classvCard-members.html @@ -0,0 +1,25 @@ + + +dolibarr: Liste des membres + + + + +

vCard Liste des membres

Liste complète des membres de vCard, y compris les membres hérités:

+ + + + + + + + + + + + +
getFileName()vCard
getVCard()vCard
setAddress($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")vCard
setBirthday($date)vCard
setEmail($address)vCard
setFormattedName($name)vCard
setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")vCard
setName($family="", $first="", $additional="", $prefix="", $suffix="")vCard
setNote($note)vCard
setPhoneNumber($number, $type="")vCard
setPhoto($type, $photo)vCard
setURL($url, $type="")vCard


Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par + +doxygen 1.3.7
+ + diff --git a/doc/dev/php/html/classvCard.html b/doc/dev/php/html/classvCard.html new file mode 100644 index 00000000000..b38a8f398da --- /dev/null +++ b/doc/dev/php/html/classvCard.html @@ -0,0 +1,643 @@ + + +dolibarr: vCard class Reference + + + + +

Référence de la classe vCard

Classe permettant de créer un fichier vcard. +Plus de détails... +

+Liste de tous les membres + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Fonctions membres publiques

 setPhoneNumber ($number, $type="")
 mise en forme du numéro de télephone

 setPhoto ($type, $photo)
 mise en forme de la photo

 setFormattedName ($name)
 mise en forme du nom formaté

 setName ($family="", $first="", $additional="", $prefix="", $suffix="")
 mise en forme du nom complet

 setBirthday ($date)
 mise en forme de l'anniversaire

 setAddress ($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")
 mise en forme de l'adresse

 setLabel ($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL")
 mise en forme du label

 setEmail ($address)
 mise en forme de l'email

 setNote ($note)
 mise en forme de la note

 setURL ($url, $type="")
 mise en forme de l'url

getVCard ()
 permet d'obtenir une vcard

getFileName ()
 permet d'obtenir le nom de fichier

+


Description détaillée

+Classe permettant de créer un fichier vcard. +

+Ensemble des fonctions permettant de créer un fichier vcard +

+ +

+Définition à la ligne 83 du fichier vcard.class.php.


Documentation des fonctions membres

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vCard::setAddress postoffice = "",
extended = "",
street = "",
city = "",
region = "",
zip = "",
country = "",
type = "HOME;POSTAL"
+
+ + + + + +
+   + + +

+mise en forme de l'adresse +

+

Paramètres:
+ + + + + + + + + +
postoffice 
extended 
street 
city 
region 
zip 
country 
type 
+
+ +

+Définition à la ligne 158 du fichier vcard.class.php. +

+Références setAddress(). +

+Référencé par setAddress().

+

+ + + + +
+ + + + + + + + + +
vCard::setBirthday date  ) 
+
+ + + + + +
+   + + +

+mise en forme de l'anniversaire +

+

Paramètres:
+ + +
date 
+
+ +

+Définition à la ligne 142 du fichier vcard.class.php. +

+Références setBirthday(). +

+Référencé par setBirthday().

+

+ + + + +
+ + + + + + + + + +
vCard::setEmail address  ) 
+
+ + + + + +
+   + + +

+mise en forme de l'email +

+

Paramètres:
+ + +
address 
+
+ +

+Définition à la ligne 200 du fichier vcard.class.php. +

+Références setEmail(). +

+Référencé par setEmail().

+

+ + + + +
+ + + + + + + + + +
vCard::setFormattedName name  ) 
+
+ + + + + +
+   + + +

+mise en forme du nom formaté +

+

Paramètres:
+ + +
name 
+
+ +

+Définition à la ligne 118 du fichier vcard.class.php. +

+Références setFormattedName(). +

+Référencé par setFormattedName().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vCard::setLabel postoffice = "",
extended = "",
street = "",
city = "",
region = "",
zip = "",
country = "",
type = "HOME;POSTAL"
+
+ + + + + +
+   + + +

+mise en forme du label +

+

Paramètres:
+ + + + + + + + + +
postoffice 
extended 
street 
city 
region 
zip 
country 
type 
+
+ +

+Définition à la ligne 182 du fichier vcard.class.php. +

+Références setLabel(). +

+Référencé par setLabel().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
vCard::setName family = "",
first = "",
additional = "",
prefix = "",
suffix = ""
+
+ + + + + +
+   + + +

+mise en forme du nom complet +

+

Paramètres:
+ + + + + + +
family 
first 
additional 
prefix 
suffix 
+
+ +

+Définition à la ligne 131 du fichier vcard.class.php. +

+Références setName(). +

+Référencé par setName().

+

+ + + + +
+ + + + + + + + + +
vCard::setNote note  ) 
+
+ + + + + +
+   + + +

+mise en forme de la note +

+

Paramètres:
+ + +
note 
+
+ +

+Définition à la ligne 209 du fichier vcard.class.php. +

+Références setNote(). +

+Référencé par setNote().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
vCard::setPhoneNumber number,
type = ""
+
+ + + + + +
+   + + +

+mise en forme du numéro de télephone +

+

Paramètres:
+ + + +
number numéro de téléphone
type 
+
+ +

+Définition à la ligne 93 du fichier vcard.class.php. +

+Références setPhoneNumber(). +

+Référencé par setPhoneNumber().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
vCard::setPhoto type,
photo
+
+ + + + + +
+   + + +

+mise en forme de la photo +

+

Paramètres:
+ + + +
type 
photo 
+
+
Avertissement:
NON TESTE !
+ +

+Définition à la ligne 109 du fichier vcard.class.php. +

+Références setPhoto(). +

+Référencé par setPhoto().

+

+ + + + +
+ + + + + + + + + + + + + + + + + + +
vCard::setURL url,
type = ""
+
+ + + + + +
+   + + +

+mise en forme de l'url +

+

Paramètres:
+ + + +
url 
type 
+
+ +

+Définition à la ligne 219 du fichier vcard.class.php. +

+Références setURL(). +

+Référencé par setURL().

+


La documentation de cette classe a été générée à partir du fichier suivant: +
Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par + +doxygen 1.3.7
+ + diff --git a/doc/dev/php/html/files.html b/doc/dev/php/html/files.html index 37126c8ec9a..50b91bc58c3 100644 --- a/doc/dev/php/html/files.html +++ b/doc/dev/php/html/files.html @@ -13,8 +13,10 @@ htdocs/lib/price.lib.php [code]Librairie contenant les fonctions pour calculer un prix htdocs/lib/thermometer.php [code]Classe permettant d'afficher un thermometre htdocs/lib/webcal.class.php [code]Classe permettant d'acceder a la database webcalendar + htdocs/lib/jabber/class.jabber.php [code]Classe permettant de se connecter à un serveur jabber + htdocs/lib/vcard/vcard.class.php [code]Classe permettant de créer un fichier vcard -
Généré le Fri Jul 16 00:31:06 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:51 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/functions.html b/doc/dev/php/html/functions.html index 29faf039993..6354175fada 100644 --- a/doc/dev/php/html/functions.html +++ b/doc/dev/php/html/functions.html @@ -6,41 +6,90 @@ +
a | b | c | d | e | f | g | i | l | n | p | q | r | s | w

-Liste de tous les membres de classe documentés avec liens vers la documentation de classe de chaque membre:

+

- s -

+

- w -

+
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/functions_8inc_8php-source.html b/doc/dev/php/html/functions_8inc_8php-source.html index 22e4378b494..9f6159293fe 100644 --- a/doc/dev/php/html/functions_8inc_8php-source.html +++ b/doc/dev/php/html/functions_8inc_8php-source.html @@ -1034,7 +1034,7 @@ 01255 } 01256 01257 ?> -
Généré le Fri Jul 16 00:31:06 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:51 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/functions_8inc_8php.html b/doc/dev/php/html/functions_8inc_8php.html index 7289523446f..e39865459c0 100644 --- a/doc/dev/php/html/functions_8inc_8php.html +++ b/doc/dev/php/html/functions_8inc_8php.html @@ -1511,7 +1511,7 @@ D Référencé par calcul_price(). -
Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/functions_func.html b/doc/dev/php/html/functions_func.html index b6a3d9645a0..0c75e0d1cde 100644 --- a/doc/dev/php/html/functions_func.html +++ b/doc/dev/php/html/functions_func.html @@ -6,41 +6,90 @@ +
a | b | c | d | e | f | g | i | l | n | p | q | r | s | w

-

+

- s -

+

- w -

+
Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
diff --git a/doc/dev/php/html/globals.html b/doc/dev/php/html/globals.html index 7bee961ca49..2e1faf76b16 100644 --- a/doc/dev/php/html/globals.html +++ b/doc/dev/php/html/globals.html @@ -52,7 +52,8 @@ Liste de tous les membres de fichier document : functions.inc.php

- m -

+: thermometer.php
  • my_chunk_split() +: CMailFile.class.php

    - p -

    -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/globals_func.html b/doc/dev/php/html/globals_func.html index aa868cddb86..b0eb2c407a5 100644 --- a/doc/dev/php/html/globals_func.html +++ b/doc/dev/php/html/globals_func.html @@ -52,7 +52,8 @@ : functions.inc.php

    - m -

    +: thermometer.php
  • my_chunk_split() +: CMailFile.class.php

    - p -

    -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/graph_legend.html b/doc/dev/php/html/graph_legend.html index 491d07c7c62..c7fee0fdaf8 100644 --- a/doc/dev/php/html/graph_legend.html +++ b/doc/dev/php/html/graph_legend.html @@ -66,7 +66,7 @@ Une fl
  • Une flèche verte en pointillés indique une relation entre une classe instanciée et le modèle de classe utilisé. La flèche est étiquetée avec les paramètres de modèle de la classe instanciée.
  • -
    Généré le Fri Jul 16 00:31:08 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:53 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/index.html b/doc/dev/php/html/index.html index 619170f0a95..bc38a9530c2 100644 --- a/doc/dev/php/html/index.html +++ b/doc/dev/php/html/index.html @@ -7,7 +7,7 @@

    dolibarr Documentation

    -

    1.2.0


    Généré le Fri Jul 16 00:31:06 2004 pour dolibarr par +

    1.2.0


    Généré le Fri Jul 16 08:51:51 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/ldap_8lib_8php-source.html b/doc/dev/php/html/ldap_8lib_8php-source.html index 42328dbc7b9..eb7bd9b61c9 100644 --- a/doc/dev/php/html/ldap_8lib_8php-source.html +++ b/doc/dev/php/html/ldap_8lib_8php-source.html @@ -83,7 +83,7 @@ 00124 } 00125 00126 ?> -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/ldap_8lib_8php.html b/doc/dev/php/html/ldap_8lib_8php.html index ada5b430bd7..ff38aad8186 100644 --- a/doc/dev/php/html/ldap_8lib_8php.html +++ b/doc/dev/php/html/ldap_8lib_8php.html @@ -273,7 +273,7 @@ unbind du serveur ldap. Définition à la ligne 70 du fichier ldap.lib.php. -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/mysql_8lib_8php-source.html b/doc/dev/php/html/mysql_8lib_8php-source.html index f1054a463da..115b45902f0 100644 --- a/doc/dev/php/html/mysql_8lib_8php-source.html +++ b/doc/dev/php/html/mysql_8lib_8php-source.html @@ -291,7 +291,7 @@ 00453 } 00454 00455 ?> -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/mysql_8lib_8php.html b/doc/dev/php/html/mysql_8lib_8php.html index 0c148620d54..9e92e0c22de 100644 --- a/doc/dev/php/html/mysql_8lib_8php.html +++ b/doc/dev/php/html/mysql_8lib_8php.html @@ -26,7 +26,7 @@ Laurent Destailleur.
    Version:
    1.2.
    Ensemble des fonctions permettant de gérer la database de dolibarr.

    -Définition dans le fichier mysql.lib.php.


    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +Définition dans le fichier mysql.lib.php.
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/price_8lib_8php-source.html b/doc/dev/php/html/price_8lib_8php-source.html index 73eea62d9b4..f75211bb703 100644 --- a/doc/dev/php/html/price_8lib_8php-source.html +++ b/doc/dev/php/html/price_8lib_8php-source.html @@ -93,7 +93,7 @@ 00101 00102 return $result; 00103 } -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/price_8lib_8php.html b/doc/dev/php/html/price_8lib_8php.html index 4b1098a1215..f90bdbcfb06 100644 --- a/doc/dev/php/html/price_8lib_8php.html +++ b/doc/dev/php/html/price_8lib_8php.html @@ -75,7 +75,7 @@ D Références tva(). -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/thermometer_8php-source.html b/doc/dev/php/html/thermometer_8php-source.html index b1f5a20fe3b..4caf9ba99dd 100644 --- a/doc/dev/php/html/thermometer_8php-source.html +++ b/doc/dev/php/html/thermometer_8php-source.html @@ -186,7 +186,7 @@ 00197 00198 00199 -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/thermometer_8php.html b/doc/dev/php/html/thermometer_8php.html index b925d99bda0..df4f2c29a69 100644 --- a/doc/dev/php/html/thermometer_8php.html +++ b/doc/dev/php/html/thermometer_8php.html @@ -81,7 +81,7 @@ permet d'afficher un thermometre monetaire. Définition à la ligne 42 du fichier thermometer.php. -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/vcard_8class_8php-source.html b/doc/dev/php/html/vcard_8class_8php-source.html new file mode 100644 index 00000000000..c668451a4ba --- /dev/null +++ b/doc/dev/php/html/vcard_8class_8php-source.html @@ -0,0 +1,167 @@ + + +dolibarr: htdocs/lib/vcard/vcard.class.php Source File + + + + +

    htdocs/lib/vcard/vcard.class.php

    Aller à la documentation de ce fichier.
    00001 <?PHP +00002 /*************************************************************************** +00003 +00004 PHP vCard class v2.0 +00005 (c) Kai Blankenhorn +00006 www.bitfolge.de/en +00007 kaib@bitfolge.de +00008 +00009 +00010 This program is free software; you can redistribute it and/or +00011 modify it under the terms of the GNU General Public License +00012 as published by the Free Software Foundation; either version 2 +00013 of the License, or (at your option) any later version. +00014 +00015 This program is distributed in the hope that it will be useful, +00016 but WITHOUT ANY WARRANTY; without even the implied warranty of +00017 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +00018 GNU General Public License for more details. +00019 +00020 You should have received a copy of the GNU General Public License +00021 along with this program; if not, write to the Free Software +00022 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +00023 +00024 ***************************************************************************/ +00025 +00035 function encode($string) { +00036 return escape(quoted_printable_encode($string)); +00037 } +00038 +00039 function escape($string) { +00040 return str_replace(";","\;",$string); +00041 } +00042 +00043 // taken from PHP documentation comments +00044 function quoted_printable_encode($input, $line_max = 76) { +00045 $hex = array('0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'); +00046 $lines = preg_split("/(?:\r\n|\r|\n)/", $input); +00047 $eol = "\r\n"; +00048 $linebreak = "=0D=0A"; +00049 $escape = "="; +00050 $output = ""; +00051 +00052 for ($j=0;$j<count($lines);$j++) { +00053 $line = $lines[$j]; +00054 $linlen = strlen($line); +00055 $newline = ""; +00056 for($i = 0; $i < $linlen; $i++) { +00057 $c = substr($line, $i, 1); +00058 $dec = ord($c); +00059 if ( ($dec == 32) && ($i == ($linlen - 1)) ) { // convert space at eol only +00060 $c = "=20"; +00061 } elseif ( ($dec == 61) || ($dec < 32 ) || ($dec > 126) ) { // always encode "\t", which is *not* required +00062 $h2 = floor($dec/16); $h1 = floor($dec%16); +00063 $c = $escape.$hex["$h2"].$hex["$h1"]; +00064 } +00065 if ( (strlen($newline) + strlen($c)) >= $line_max ) { // CRLF is not counted +00066 $output .= $newline.$escape.$eol; // soft line break; " =\r\n" is okay +00067 $newline = " "; +00068 } +00069 $newline .= $c; +00070 } // end of for +00071 $output .= $newline; +00072 if ($j<count($lines)-1) $output .= $linebreak; +00073 } +00074 return trim($output); +00075 } +00076 +00083 class vCard { +00084 var $properties; +00085 var $filename; +00086 +00093 function setPhoneNumber($number, $type="") { +00094 // type may be PREF | WORK | HOME | VOICE | FAX | MSG | CELL | PAGER | BBS | CAR | MODEM | ISDN | VIDEO or any senseful combination, e.g. "PREF;WORK;VOICE" +00095 $key = "TEL"; +00096 if ($type!="") $key .= ";".$type; +00097 $key.= ";ENCODING=QUOTED-PRINTABLE"; +00098 $this->properties[$key] = quoted_printable_encode($number); +00099 } +00100 +00108 // UNTESTED !!! +00109 function setPhoto($type, $photo) { // $type = "GIF" | "JPEG" +00110 $this->properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo); +00111 } +00112 +00118 function setFormattedName($name) { +00119 $this->properties["FN"] = quoted_printable_encode($name); +00120 } +00121 +00131 function setName($family="", $first="", $additional="", $prefix="", $suffix="") { +00132 $this->properties["N"] = "$family;$first;$additional;$prefix;$suffix"; +00133 $this->filename = "$first%20$family.vcf"; +00134 if ($this->properties["FN"]=="") $this->setFormattedName(trim("$prefix $first $additional $family $suffix")); +00135 } +00136 +00142 function setBirthday($date) { // $date format is YYYY-MM-DD +00143 $this->properties["BDAY"] = $date; +00144 } +00145 +00158 function setAddress($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") { +00159 // $type may be DOM | INTL | POSTAL | PARCEL | HOME | WORK or any combination of these: e.g. "WORK;PARCEL;POSTAL" +00160 $key = "ADR"; +00161 if ($type!="") $key.= ";$type"; +00162 $key.= ";ENCODING=QUOTED-PRINTABLE"; +00163 $this->properties[$key] = encode($name).";".encode($extended).";".encode($street).";".encode($city).";".encode($region).";".encode($zip).";".encode($country); +00164 +00165 if ($this->properties["LABEL;$type;ENCODING=QUOTED-PRINTABLE"] == "") { +00166 //$this->setLabel($postoffice, $extended, $street, $city, $region, $zip, $country, $type); +00167 } +00168 } +00169 +00182 function setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") { +00183 $label = ""; +00184 if ($postoffice!="") $label.= "$postoffice\r\n"; +00185 if ($extended!="") $label.= "$extended\r\n"; +00186 if ($street!="") $label.= "$street\r\n"; +00187 if ($zip!="") $label.= "$zip "; +00188 if ($city!="") $label.= "$city\r\n"; +00189 if ($region!="") $label.= "$region\r\n"; +00190 if ($country!="") $country.= "$country\r\n"; +00191 +00192 $this->properties["LABEL;$type;ENCODING=QUOTED-PRINTABLE"] = quoted_printable_encode($label); +00193 } +00194 +00200 function setEmail($address) { +00201 $this->properties["EMAIL;INTERNET"] = $address; +00202 } +00203 +00209 function setNote($note) { +00210 $this->properties["NOTE;ENCODING=QUOTED-PRINTABLE"] = quoted_printable_encode($note); +00211 } +00212 +00219 function setURL($url, $type="") { +00220 // $type may be WORK | HOME +00221 $key = "URL"; +00222 if ($type!="") $key.= ";$type"; +00223 $this->properties[$key] = $url; +00224 } +00225 +00230 function getVCard() { +00231 $text = "BEGIN:VCARD\r\n"; +00232 $text.= "VERSION:2.1\r\n"; +00233 foreach($this->properties as $key => $value) { +00234 $text.= "$key:$value\r\n"; +00235 } +00236 $text.= "REV:".date("Y-m-d")."T".date("H:i:s")."Z\r\n"; +00237 $text.= "MAILER:PHP vCard class by Kai Blankenhorn\r\n"; +00238 $text.= "END:VCARD\r\n"; +00239 return $text; +00240 } +00241 +00246 function getFileName() { +00247 return $this->filename; +00248 } +00249 } +00250 ?> +

    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par + +doxygen 1.3.7
    + + diff --git a/doc/dev/php/html/vcard_8class_8php.html b/doc/dev/php/html/vcard_8class_8php.html new file mode 100644 index 00000000000..9d5a95a5f0f --- /dev/null +++ b/doc/dev/php/html/vcard_8class_8php.html @@ -0,0 +1,31 @@ + + +dolibarr: vcard.class.php File Reference + + + + +

    Référence du fichier htdocs/lib/vcard/vcard.class.php

    Classe permettant de créer un fichier vcard. +Plus de détails... +

    + +

    +Aller au code source de ce fichier. + + + + + +

    Classes

    class  vCard
     Classe permettant de créer un fichier vcard. Plus de détails...

    +


    Description détaillée

    +Classe permettant de créer un fichier vcard. +

    +

    Auteur:
    Kai Blankenhorn.
    +
    Version:
    2.0
    +Ensemble des fonctions permettant de créer un fichier vcard. +

    +Définition dans le fichier vcard.class.php.


    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par + +doxygen 1.3.7
    + + diff --git a/doc/dev/php/html/webcal_8class_8php-source.html b/doc/dev/php/html/webcal_8class_8php-source.html index ba9956b78f8..8373c47b127 100644 --- a/doc/dev/php/html/webcal_8class_8php-source.html +++ b/doc/dev/php/html/webcal_8class_8php-source.html @@ -107,7 +107,7 @@ 00132 } 00133 } 00134 ?> -
    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/html/webcal_8class_8php.html b/doc/dev/php/html/webcal_8class_8php.html index b1e7250ee38..f77d8ee6e1b 100644 --- a/doc/dev/php/html/webcal_8class_8php.html +++ b/doc/dev/php/html/webcal_8class_8php.html @@ -24,7 +24,7 @@ Classe permettant d'acceder a la database webcalendar.
    Version:
    1.2.
    Ensemble des fonctions permettant d'acceder a la database webcalendar.

    -Définition dans le fichier webcal.class.php.


    Généré le Fri Jul 16 00:31:07 2004 pour dolibarr par +Définition dans le fichier webcal.class.php.
    Généré le Fri Jul 16 08:51:52 2004 pour dolibarr par doxygen 1.3.7
    diff --git a/doc/dev/php/latex/CMailFile_8class_8php.tex b/doc/dev/php/latex/CMailFile_8class_8php.tex index 17925780e48..41980d18a89 100644 --- a/doc/dev/php/latex/CMailFile_8class_8php.tex +++ b/doc/dev/php/latex/CMailFile_8class_8php.tex @@ -10,6 +10,11 @@ Classe permettant d'envoyer des attachements par mail. \item class \hyperlink{classCMailFile}{CMail\-File} \begin{CompactList}\small\item\em Classe permettant d'envoyer des attachements par mail. \item\end{CompactList}\end{CompactItemize} +\subsection*{Fonctions} +\begin{CompactItemize} +\item +\hyperlink{CMailFile_8class_8php_a0}{my\_\-chunk\_\-split} (\$str) +\begin{CompactList}\small\item\em permet de diviser une chaine (RFC2045) \item\end{CompactList}\end{CompactItemize} \subsection{Description d\'{e}taill\'{e}e} @@ -25,4 +30,29 @@ Laurent Destailleur. \end{Desc} \item[Version:]1.2.\end{Desc} -D\'{e}finition dans le fichier \hyperlink{CMailFile_8class_8php-source}{CMail\-File.class.php}. \ No newline at end of file +D\'{e}finition dans le fichier \hyperlink{CMailFile_8class_8php-source}{CMail\-File.class.php}. + +\subsection{Documentation des fonctions} +\hypertarget{CMailFile_8class_8php_a0}{ +\index{CMailFile.class.php@{CMail\-File.class.php}!my_chunk_split@{my\_\-chunk\_\-split}} +\index{my_chunk_split@{my\_\-chunk\_\-split}!CMailFile.class.php@{CMail\-File.class.php}} +\subsubsection[my\_\-chunk\_\-split]{\setlength{\rightskip}{0pt plus 5cm}my\_\-chunk\_\-split (\$ {\em str})}} +\label{CMailFile_8class_8php_a0} + + +permet de diviser une chaine (RFC2045) + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em str}]\end{description} +\end{Desc} +\begin{Desc} +\item[Remarques:]function chunk\_\-split qui remplace celle de php si n\'{e}c\'{e}ssaire + +76 caract\`{e}res par ligne, termin\'{e} par \char`\"{}$\backslash$r$\backslash$n\char`\"{} \end{Desc} + + +D\'{e}finition \`{a} la ligne 197 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}renc\'{e} par CMail\-File::encode\_\-file(). \ No newline at end of file diff --git a/doc/dev/php/latex/annotated.tex b/doc/dev/php/latex/annotated.tex index f30bb7f9fa2..c9fe5502f2a 100644 --- a/doc/dev/php/latex/annotated.tex +++ b/doc/dev/php/latex/annotated.tex @@ -2,5 +2,6 @@ Liste des classes, structures, unions et interfaces avec une br\`{e}ve description:\begin{CompactList} \item\contentsline{section}{\hyperlink{classCMailFile}{CMail\-File} (Classe permettant d'envoyer des attachements par mail )}{\pageref{classCMailFile}}{} \item\contentsline{section}{\hyperlink{classDoliDb}{Doli\-Db} (Classe permettant de g\'{e}r\'{e}r la database de dolibarr )}{\pageref{classDoliDb}}{} +\item\contentsline{section}{\hyperlink{classvCard}{v\-Card} (Classe permettant de cr\'{e}er un fichier vcard )}{\pageref{classvCard}}{} \item\contentsline{section}{\hyperlink{classWebcal}{Webcal} (Classe permettant d'acceder a la database webcalendar )}{\pageref{classWebcal}}{} \end{CompactList} diff --git a/doc/dev/php/latex/classCMailFile.tex b/doc/dev/php/latex/classCMailFile.tex index 233432a8aa8..2b47abb28a6 100644 --- a/doc/dev/php/latex/classCMailFile.tex +++ b/doc/dev/php/latex/classCMailFile.tex @@ -9,7 +9,22 @@ Classe permettant d'envoyer des attachements par mail. \begin{CompactItemize} \item \hyperlink{classCMailFile_a0}{CMail\-File} (\$subject, \$to, \$from, \$msg, \$filename\_\-list, \$mimetype\_\-list, \$mimefilename\_\-list, \$addr\_\-cc=\char`\"{}\char`\"{}) -\begin{CompactList}\small\item\em CMail\-File. \item\end{CompactList}\end{CompactItemize} +\begin{CompactList}\small\item\em CMail\-File. \item\end{CompactList}\item +\hyperlink{classCMailFile_a1}{attach\_\-file} (\$filename\_\-list, \$mimetype\_\-list, \$mimefilename\_\-list) +\begin{CompactList}\small\item\em permet d'attacher un fichier \item\end{CompactList}\item +\hyperlink{classCMailFile_a2}{encode\_\-file} (\$sourcefile) +\begin{CompactList}\small\item\em permet d'encoder un fichier \item\end{CompactList}\item +\hypertarget{classCMailFile_a3}{ +\hyperlink{classCMailFile_a3}{sendfile} ()} +\label{classCMailFile_a3} + +\begin{CompactList}\small\item\em permet d'envoyer un fichier \item\end{CompactList}\item +\hyperlink{classCMailFile_a4}{write\_\-body} (\$msgtext, \$filename\_\-list) +\begin{CompactList}\small\item\em permet d'ecrire le body d'un message \item\end{CompactList}\item +\hyperlink{classCMailFile_a5}{write\_\-mimeheaders} (\$filename\_\-list, \$mimefilename\_\-list) +\begin{CompactList}\small\item\em cr\'{e}ation des headers mime \item\end{CompactList}\item +\hyperlink{classCMailFile_a6}{write\_\-smtpheaders} (\$addr\_\-from, \$addr\_\-cc) +\begin{CompactList}\small\item\em cr\'{e}ation des headers smtp \item\end{CompactList}\end{CompactItemize} \subsection{Description d\'{e}taill\'{e}e} @@ -50,6 +65,111 @@ CMail\-File. D\'{e}finition \`{a} la ligne 64 du fichier CMail\-File.class.php. +R\'{e}f\'{e}rences attach\_\-file(), write\_\-body(), write\_\-mimeheaders(), et write\_\-smtpheaders(). + +\subsection{Documentation des fonctions membres} +\hypertarget{classCMailFile_a1}{ +\index{CMailFile@{CMail\-File}!attach_file@{attach\_\-file}} +\index{attach_file@{attach\_\-file}!CMailFile@{CMail\-File}} +\subsubsection[attach\_\-file]{\setlength{\rightskip}{0pt plus 5cm}CMail\-File::attach\_\-file (\$ {\em filename\_\-list}, \$ {\em mimetype\_\-list}, \$ {\em mimefilename\_\-list})}} +\label{classCMailFile_a1} + + +permet d'attacher un fichier + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em filename\_\-list}]\item[{\em mimetype\_\-list}]\item[{\em mimefilename\_\-list}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 83 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}rences attach\_\-file(), et encode\_\-file(). + +R\'{e}f\'{e}renc\'{e} par attach\_\-file(), et CMail\-File().\hypertarget{classCMailFile_a2}{ +\index{CMailFile@{CMail\-File}!encode_file@{encode\_\-file}} +\index{encode_file@{encode\_\-file}!CMailFile@{CMail\-File}} +\subsubsection[encode\_\-file]{\setlength{\rightskip}{0pt plus 5cm}CMail\-File::encode\_\-file (\$ {\em sourcefile})}} +\label{classCMailFile_a2} + + +permet d'encoder un fichier + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em sourcefile}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 105 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}rences encode\_\-file(), et my\_\-chunk\_\-split(). + +R\'{e}f\'{e}renc\'{e} par attach\_\-file(), et encode\_\-file().\hypertarget{classCMailFile_a4}{ +\index{CMailFile@{CMail\-File}!write_body@{write\_\-body}} +\index{write_body@{write\_\-body}!CMailFile@{CMail\-File}} +\subsubsection[write\_\-body]{\setlength{\rightskip}{0pt plus 5cm}CMail\-File::write\_\-body (\$ {\em msgtext}, \$ {\em filename\_\-list})}} +\label{classCMailFile_a4} + + +permet d'ecrire le body d'un message + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em msgtext}]\item[{\em filename\_\-list}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 135 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}rences write\_\-body(). + +R\'{e}f\'{e}renc\'{e} par CMail\-File(), et write\_\-body().\hypertarget{classCMailFile_a5}{ +\index{CMailFile@{CMail\-File}!write_mimeheaders@{write\_\-mimeheaders}} +\index{write_mimeheaders@{write\_\-mimeheaders}!CMailFile@{CMail\-File}} +\subsubsection[write\_\-mimeheaders]{\setlength{\rightskip}{0pt plus 5cm}CMail\-File::write\_\-mimeheaders (\$ {\em filename\_\-list}, \$ {\em mimefilename\_\-list})}} +\label{classCMailFile_a5} + + +cr\'{e}ation des headers mime + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em filename\_\-list}]\item[{\em mimefilename\_\-list}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 153 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}rences write\_\-mimeheaders(). + +R\'{e}f\'{e}renc\'{e} par CMail\-File(), et write\_\-mimeheaders().\hypertarget{classCMailFile_a6}{ +\index{CMailFile@{CMail\-File}!write_smtpheaders@{write\_\-smtpheaders}} +\index{write_smtpheaders@{write\_\-smtpheaders}!CMailFile@{CMail\-File}} +\subsubsection[write\_\-smtpheaders]{\setlength{\rightskip}{0pt plus 5cm}CMail\-File::write\_\-smtpheaders (\$ {\em addr\_\-from}, \$ {\em addr\_\-cc})}} +\label{classCMailFile_a6} + + +cr\'{e}ation des headers smtp + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em addr\_\-from}]\item[{\em addr\_\-cc}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 171 du fichier CMail\-File.class.php. + +R\'{e}f\'{e}rences write\_\-smtpheaders(). + +R\'{e}f\'{e}renc\'{e} par CMail\-File(), et write\_\-smtpheaders(). + La documentation de cette classe a \'{e}t\'{e} g\'{e}n\'{e}r\'{e}e \`{a} partir du fichier suivant:\begin{CompactItemize} \item htdocs/lib/\hyperlink{CMailFile_8class_8php}{CMail\-File.class.php}\end{CompactItemize} diff --git a/doc/dev/php/latex/classDoliDb.aux b/doc/dev/php/latex/classDoliDb.aux index a51026ef12e..5f7b0f55dff 100644 --- a/doc/dev/php/latex/classDoliDb.aux +++ b/doc/dev/php/latex/classDoliDb.aux @@ -1,62 +1,62 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {3.2}R\'{e}f\'{e}rence de la classe Doli\discretionary {-}{}{}Db}{7}{section.3.2}} -\newlabel{classDoliDb}{{3.2}{7}{R\'{e}f\'{e}rence de la classe Doli\-Db\relax }{section.3.2}{}} -\newlabel{classDoliDb_a20}{{3.2}{8}{Fonctions membres publiques\relax }{section*.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Description d\'{e}taill\'{e}e}{8}{subsection.3.2.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Documentation des contructeurs et destructeur}{8}{subsection.3.2.2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2.1}DoliDb}{8}{subsubsection.3.2.2.1}} -\newlabel{classDoliDb_a0}{{3.2.2.1}{8}{DoliDb\relax }{subsubsection.3.2.2.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Documentation des fonctions membres}{9}{subsection.3.2.3}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.1}affected\_\discretionary {-}{}{}rows}{9}{subsubsection.3.2.3.1}} -\newlabel{classDoliDb_a26}{{3.2.3.1}{9}{affected\_\-rows\relax }{subsubsection.3.2.3.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.2}begin}{9}{subsubsection.3.2.3.2}} -\newlabel{classDoliDb_a7}{{3.2.3.2}{9}{begin\relax }{subsubsection.3.2.3.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.3}clone}{9}{subsubsection.3.2.3.3}} -\newlabel{classDoliDb_a4}{{3.2.3.3}{9}{clone\relax }{subsubsection.3.2.3.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.4}close}{9}{subsubsection.3.2.3.4}} -\newlabel{classDoliDb_a6}{{3.2.3.4}{9}{close\relax }{subsubsection.3.2.3.4}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.5}commit}{10}{subsubsection.3.2.3.5}} -\newlabel{classDoliDb_a8}{{3.2.3.5}{10}{commit\relax }{subsubsection.3.2.3.5}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.6}connect}{10}{subsubsection.3.2.3.6}} -\newlabel{classDoliDb_a2}{{3.2.3.6}{10}{connect\relax }{subsubsection.3.2.3.6}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.7}create\_\discretionary {-}{}{}db}{10}{subsubsection.3.2.3.7}} -\newlabel{classDoliDb_a3}{{3.2.3.7}{10}{create\_\-db\relax }{subsubsection.3.2.3.7}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.8}errno}{11}{subsubsection.3.2.3.8}} -\newlabel{classDoliDb_a24}{{3.2.3.8}{11}{errno\relax }{subsubsection.3.2.3.8}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.9}error}{11}{subsubsection.3.2.3.9}} -\newlabel{classDoliDb_a23}{{3.2.3.9}{11}{error\relax }{subsubsection.3.2.3.9}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.10}fetch\_\discretionary {-}{}{}array}{11}{subsubsection.3.2.3.10}} -\newlabel{classDoliDb_a18}{{3.2.3.10}{11}{fetch\_\-array\relax }{subsubsection.3.2.3.10}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.11}fetch\_\discretionary {-}{}{}object}{11}{subsubsection.3.2.3.11}} -\newlabel{classDoliDb_a14}{{3.2.3.11}{11}{fetch\_\-object\relax }{subsubsection.3.2.3.11}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.12}fetch\_\discretionary {-}{}{}row}{11}{subsubsection.3.2.3.12}} -\newlabel{classDoliDb_a19}{{3.2.3.12}{11}{fetch\_\-row\relax }{subsubsection.3.2.3.12}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.13}free}{12}{subsubsection.3.2.3.13}} -\newlabel{classDoliDb_a13}{{3.2.3.13}{12}{free\relax }{subsubsection.3.2.3.13}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.14}idate}{12}{subsubsection.3.2.3.14}} -\newlabel{classDoliDb_a17}{{3.2.3.14}{12}{idate\relax }{subsubsection.3.2.3.14}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.15}last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}{12}{subsubsection.3.2.3.15}} -\newlabel{classDoliDb_a25}{{3.2.3.15}{12}{last\_\-insert\_\-id\relax }{subsubsection.3.2.3.15}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.16}list\_\discretionary {-}{}{}tables}{12}{subsubsection.3.2.3.16}} -\newlabel{classDoliDb_a11}{{3.2.3.16}{12}{list\_\-tables\relax }{subsubsection.3.2.3.16}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.17}num\_\discretionary {-}{}{}fields}{13}{subsubsection.3.2.3.17}} -\newlabel{classDoliDb_a22}{{3.2.3.17}{13}{num\_\-fields\relax }{subsubsection.3.2.3.17}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.18}num\_\discretionary {-}{}{}rows}{13}{subsubsection.3.2.3.18}} -\newlabel{classDoliDb_a21}{{3.2.3.18}{13}{num\_\-rows\relax }{subsubsection.3.2.3.18}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.19}pconnect}{13}{subsubsection.3.2.3.19}} -\newlabel{classDoliDb_a5}{{3.2.3.19}{13}{pconnect\relax }{subsubsection.3.2.3.19}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.20}plimit}{13}{subsubsection.3.2.3.20}} -\newlabel{classDoliDb_a15}{{3.2.3.20}{13}{plimit\relax }{subsubsection.3.2.3.20}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.21}query}{14}{subsubsection.3.2.3.21}} -\newlabel{classDoliDb_a10}{{3.2.3.21}{14}{query\relax }{subsubsection.3.2.3.21}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.22}result}{14}{subsubsection.3.2.3.22}} -\newlabel{classDoliDb_a12}{{3.2.3.22}{14}{result\relax }{subsubsection.3.2.3.22}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.23}rollback}{14}{subsubsection.3.2.3.23}} -\newlabel{classDoliDb_a9}{{3.2.3.23}{14}{rollback\relax }{subsubsection.3.2.3.23}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.24}select\_\discretionary {-}{}{}db}{15}{subsubsection.3.2.3.24}} -\newlabel{classDoliDb_a1}{{3.2.3.24}{15}{select\_\-db\relax }{subsubsection.3.2.3.24}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.2}R\'{e}f\'{e}rence de la classe Doli\discretionary {-}{}{}Db}{9}{section.3.2}} +\newlabel{classDoliDb}{{3.2}{9}{R\'{e}f\'{e}rence de la classe Doli\-Db\relax }{section.3.2}{}} +\newlabel{classDoliDb_a20}{{3.2}{10}{Fonctions membres publiques\relax }{section*.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.1}Description d\'{e}taill\'{e}e}{10}{subsection.3.2.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.2}Documentation des contructeurs et destructeur}{10}{subsection.3.2.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.2.1}DoliDb}{10}{subsubsection.3.2.2.1}} +\newlabel{classDoliDb_a0}{{3.2.2.1}{10}{DoliDb\relax }{subsubsection.3.2.2.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.2.3}Documentation des fonctions membres}{11}{subsection.3.2.3}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.1}affected\_\discretionary {-}{}{}rows}{11}{subsubsection.3.2.3.1}} +\newlabel{classDoliDb_a26}{{3.2.3.1}{11}{affected\_\-rows\relax }{subsubsection.3.2.3.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.2}begin}{11}{subsubsection.3.2.3.2}} +\newlabel{classDoliDb_a7}{{3.2.3.2}{11}{begin\relax }{subsubsection.3.2.3.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.3}clone}{11}{subsubsection.3.2.3.3}} +\newlabel{classDoliDb_a4}{{3.2.3.3}{11}{clone\relax }{subsubsection.3.2.3.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.4}close}{11}{subsubsection.3.2.3.4}} +\newlabel{classDoliDb_a6}{{3.2.3.4}{11}{close\relax }{subsubsection.3.2.3.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.5}commit}{12}{subsubsection.3.2.3.5}} +\newlabel{classDoliDb_a8}{{3.2.3.5}{12}{commit\relax }{subsubsection.3.2.3.5}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.6}connect}{12}{subsubsection.3.2.3.6}} +\newlabel{classDoliDb_a2}{{3.2.3.6}{12}{connect\relax }{subsubsection.3.2.3.6}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.7}create\_\discretionary {-}{}{}db}{12}{subsubsection.3.2.3.7}} +\newlabel{classDoliDb_a3}{{3.2.3.7}{12}{create\_\-db\relax }{subsubsection.3.2.3.7}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.8}errno}{13}{subsubsection.3.2.3.8}} +\newlabel{classDoliDb_a24}{{3.2.3.8}{13}{errno\relax }{subsubsection.3.2.3.8}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.9}error}{13}{subsubsection.3.2.3.9}} +\newlabel{classDoliDb_a23}{{3.2.3.9}{13}{error\relax }{subsubsection.3.2.3.9}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.10}fetch\_\discretionary {-}{}{}array}{13}{subsubsection.3.2.3.10}} +\newlabel{classDoliDb_a18}{{3.2.3.10}{13}{fetch\_\-array\relax }{subsubsection.3.2.3.10}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.11}fetch\_\discretionary {-}{}{}object}{13}{subsubsection.3.2.3.11}} +\newlabel{classDoliDb_a14}{{3.2.3.11}{13}{fetch\_\-object\relax }{subsubsection.3.2.3.11}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.12}fetch\_\discretionary {-}{}{}row}{13}{subsubsection.3.2.3.12}} +\newlabel{classDoliDb_a19}{{3.2.3.12}{13}{fetch\_\-row\relax }{subsubsection.3.2.3.12}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.13}free}{14}{subsubsection.3.2.3.13}} +\newlabel{classDoliDb_a13}{{3.2.3.13}{14}{free\relax }{subsubsection.3.2.3.13}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.14}idate}{14}{subsubsection.3.2.3.14}} +\newlabel{classDoliDb_a17}{{3.2.3.14}{14}{idate\relax }{subsubsection.3.2.3.14}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.15}last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}{14}{subsubsection.3.2.3.15}} +\newlabel{classDoliDb_a25}{{3.2.3.15}{14}{last\_\-insert\_\-id\relax }{subsubsection.3.2.3.15}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.16}list\_\discretionary {-}{}{}tables}{14}{subsubsection.3.2.3.16}} +\newlabel{classDoliDb_a11}{{3.2.3.16}{14}{list\_\-tables\relax }{subsubsection.3.2.3.16}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.17}num\_\discretionary {-}{}{}fields}{15}{subsubsection.3.2.3.17}} +\newlabel{classDoliDb_a22}{{3.2.3.17}{15}{num\_\-fields\relax }{subsubsection.3.2.3.17}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.18}num\_\discretionary {-}{}{}rows}{15}{subsubsection.3.2.3.18}} +\newlabel{classDoliDb_a21}{{3.2.3.18}{15}{num\_\-rows\relax }{subsubsection.3.2.3.18}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.19}pconnect}{15}{subsubsection.3.2.3.19}} +\newlabel{classDoliDb_a5}{{3.2.3.19}{15}{pconnect\relax }{subsubsection.3.2.3.19}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.20}plimit}{15}{subsubsection.3.2.3.20}} +\newlabel{classDoliDb_a15}{{3.2.3.20}{15}{plimit\relax }{subsubsection.3.2.3.20}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.21}query}{16}{subsubsection.3.2.3.21}} +\newlabel{classDoliDb_a10}{{3.2.3.21}{16}{query\relax }{subsubsection.3.2.3.21}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.22}result}{16}{subsubsection.3.2.3.22}} +\newlabel{classDoliDb_a12}{{3.2.3.22}{16}{result\relax }{subsubsection.3.2.3.22}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.23}rollback}{16}{subsubsection.3.2.3.23}} +\newlabel{classDoliDb_a9}{{3.2.3.23}{16}{rollback\relax }{subsubsection.3.2.3.23}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.2.3.24}select\_\discretionary {-}{}{}db}{17}{subsubsection.3.2.3.24}} +\newlabel{classDoliDb_a1}{{3.2.3.24}{17}{select\_\-db\relax }{subsubsection.3.2.3.24}{}} \@setckpt{classDoliDb}{ -\setcounter{page}{16} +\setcounter{page}{18} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} diff --git a/doc/dev/php/latex/classWebcal.aux b/doc/dev/php/latex/classWebcal.aux index 59ceeceb34f..eeafa741ea3 100644 --- a/doc/dev/php/latex/classWebcal.aux +++ b/doc/dev/php/latex/classWebcal.aux @@ -1,15 +1,15 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {3.3}R\'{e}f\'{e}rence de la classe Webcal}{16}{section.3.3}} -\newlabel{classWebcal}{{3.3}{16}{R\'{e}f\'{e}rence de la classe Webcal\relax }{section.3.3}{}} -\newlabel{classWebcal_a0}{{3.3}{16}{Fonctions membres publiques\relax }{section*.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}Description d\'{e}taill\'{e}e}{16}{subsection.3.3.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}Documentation des fonctions membres}{16}{subsection.3.3.2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.1}add}{16}{subsubsection.3.3.2.1}} -\newlabel{classWebcal_a1}{{3.3.2.1}{16}{add\relax }{subsubsection.3.3.2.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.2}get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}{16}{subsubsection.3.3.2.2}} -\newlabel{classWebcal_a2}{{3.3.2.2}{16}{get\_\-next\_\-id\relax }{subsubsection.3.3.2.2}{}} +\@writefile{toc}{\contentsline {section}{\numberline {3.4}R\'{e}f\'{e}rence de la classe Webcal}{23}{section.3.4}} +\newlabel{classWebcal}{{3.4}{23}{R\'{e}f\'{e}rence de la classe Webcal\relax }{section.3.4}{}} +\newlabel{classWebcal_a0}{{3.4}{23}{Fonctions membres publiques\relax }{section*.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.1}Description d\'{e}taill\'{e}e}{23}{subsection.3.4.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.4.2}Documentation des fonctions membres}{23}{subsection.3.4.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2.1}add}{23}{subsubsection.3.4.2.1}} +\newlabel{classWebcal_a1}{{3.4.2.1}{23}{add\relax }{subsubsection.3.4.2.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.4.2.2}get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}{23}{subsubsection.3.4.2.2}} +\newlabel{classWebcal_a2}{{3.4.2.2}{23}{get\_\-next\_\-id\relax }{subsubsection.3.4.2.2}{}} \@setckpt{classWebcal}{ -\setcounter{page}{18} +\setcounter{page}{25} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} @@ -19,7 +19,7 @@ \setcounter{mpfootnote}{0} \setcounter{part}{0} \setcounter{chapter}{3} -\setcounter{section}{3} +\setcounter{section}{4} \setcounter{subsection}{2} \setcounter{subsubsection}{2} \setcounter{paragraph}{0} diff --git a/doc/dev/php/latex/class_8jabber_8php.aux b/doc/dev/php/latex/class_8jabber_8php.aux new file mode 100644 index 00000000000..79d48453003 --- /dev/null +++ b/doc/dev/php/latex/class_8jabber_8php.aux @@ -0,0 +1,27 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {4.3}R\'{e}f\'{e}rence du fichier htdocs/lib/jabber/class.jabber.php}{37}{section.4.3}} +\newlabel{class_8jabber_8php}{{4.3}{37}{R\'{e}f\'{e}rence du fichier htdocs/lib/jabber/class.jabber.php\relax }{section.4.3}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}Description d\'{e}taill\'{e}e}{37}{subsection.4.3.1}} +\@setckpt{class_8jabber_8php}{ +\setcounter{page}{38} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{part}{0} +\setcounter{chapter}{4} +\setcounter{section}{3} +\setcounter{subsection}{1} +\setcounter{subsubsection}{0} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{float@type}{4} +\setcounter{Item}{0} +\setcounter{Hfootnote}{0} +\setcounter{section@level}{2} +} diff --git a/doc/dev/php/latex/class_8jabber_8php.tex b/doc/dev/php/latex/class_8jabber_8php.tex new file mode 100644 index 00000000000..5af28da3875 --- /dev/null +++ b/doc/dev/php/latex/class_8jabber_8php.tex @@ -0,0 +1,19 @@ +\hypertarget{class_8jabber_8php}{ +\section{R\'{e}f\'{e}rence du fichier htdocs/lib/jabber/class.jabber.php} +\label{class_8jabber_8php}\index{htdocs/lib/jabber/class.jabber.php@{htdocs/lib/jabber/class.jabber.php}} +} +Classe permettant de se connecter \`{a} un serveur jabber. + + + + +\subsection{Description d\'{e}taill\'{e}e} +Classe permettant de se connecter \`{a} un serveur jabber. + +\begin{Desc} +\item[Auteur:]Carlo \char`\"{}Gossip\char`\"{} Zottmann. \end{Desc} +\begin{Desc} +\item[Version:]0.4.\end{Desc} +Ensemble des fonctions permettant de se connecter \`{a} un serveur jabber. + +D\'{e}finition dans le fichier \hyperlink{class_8jabber_8php-source}{class.jabber.php}. \ No newline at end of file diff --git a/doc/dev/php/latex/classvCard.aux b/doc/dev/php/latex/classvCard.aux new file mode 100644 index 00000000000..9fed2ebfb0d --- /dev/null +++ b/doc/dev/php/latex/classvCard.aux @@ -0,0 +1,50 @@ +\relax +\@writefile{toc}{\contentsline {section}{\numberline {3.3}R\'{e}f\'{e}rence de la classe v\discretionary {-}{}{}Card}{18}{section.3.3}} +\newlabel{classvCard}{{3.3}{18}{R\'{e}f\'{e}rence de la classe v\-Card\relax }{section.3.3}{}} +\newlabel{classvCard_a10}{{3.3}{18}{Fonctions membres publiques\relax }{section*.4}{}} +\newlabel{classvCard_a11}{{3.3}{18}{Fonctions membres publiques\relax }{section*.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.1}Description d\'{e}taill\'{e}e}{18}{subsection.3.3.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.3.2}Documentation des fonctions membres}{19}{subsection.3.3.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.1}setAddress}{19}{subsubsection.3.3.2.1}} +\newlabel{classvCard_a5}{{3.3.2.1}{19}{setAddress\relax }{subsubsection.3.3.2.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.2}setBirthday}{19}{subsubsection.3.3.2.2}} +\newlabel{classvCard_a4}{{3.3.2.2}{19}{setBirthday\relax }{subsubsection.3.3.2.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.3}setEmail}{19}{subsubsection.3.3.2.3}} +\newlabel{classvCard_a7}{{3.3.2.3}{19}{setEmail\relax }{subsubsection.3.3.2.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.4}setFormattedName}{20}{subsubsection.3.3.2.4}} +\newlabel{classvCard_a2}{{3.3.2.4}{20}{setFormattedName\relax }{subsubsection.3.3.2.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.5}setLabel}{20}{subsubsection.3.3.2.5}} +\newlabel{classvCard_a6}{{3.3.2.5}{20}{setLabel\relax }{subsubsection.3.3.2.5}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.6}setName}{20}{subsubsection.3.3.2.6}} +\newlabel{classvCard_a3}{{3.3.2.6}{20}{setName\relax }{subsubsection.3.3.2.6}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.7}setNote}{21}{subsubsection.3.3.2.7}} +\newlabel{classvCard_a8}{{3.3.2.7}{21}{setNote\relax }{subsubsection.3.3.2.7}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.8}setPhoneNumber}{21}{subsubsection.3.3.2.8}} +\newlabel{classvCard_a0}{{3.3.2.8}{21}{setPhoneNumber\relax }{subsubsection.3.3.2.8}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.9}setPhoto}{21}{subsubsection.3.3.2.9}} +\newlabel{classvCard_a1}{{3.3.2.9}{21}{setPhoto\relax }{subsubsection.3.3.2.9}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.3.2.10}setURL}{21}{subsubsection.3.3.2.10}} +\newlabel{classvCard_a9}{{3.3.2.10}{21}{setURL\relax }{subsubsection.3.3.2.10}{}} +\@setckpt{classvCard}{ +\setcounter{page}{23} +\setcounter{equation}{0} +\setcounter{enumi}{0} +\setcounter{enumii}{0} +\setcounter{enumiii}{0} +\setcounter{enumiv}{0} +\setcounter{footnote}{0} +\setcounter{mpfootnote}{0} +\setcounter{part}{0} +\setcounter{chapter}{3} +\setcounter{section}{3} +\setcounter{subsection}{2} +\setcounter{subsubsection}{10} +\setcounter{paragraph}{0} +\setcounter{subparagraph}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{float@type}{4} +\setcounter{Item}{0} +\setcounter{Hfootnote}{0} +\setcounter{section@level}{3} +} diff --git a/doc/dev/php/latex/classvCard.tex b/doc/dev/php/latex/classvCard.tex new file mode 100644 index 00000000000..f6e1cbdea35 --- /dev/null +++ b/doc/dev/php/latex/classvCard.tex @@ -0,0 +1,259 @@ +\hypertarget{classvCard}{ +\section{R\'{e}f\'{e}rence de la classe v\-Card} +\label{classvCard}\index{vCard@{vCard}} +} +Classe permettant de cr\'{e}er un fichier vcard. + + +\subsection*{Fonctions membres publiques} +\begin{CompactItemize} +\item +\hyperlink{classvCard_a0}{set\-Phone\-Number} (\$number, \$type=\char`\"{}\char`\"{}) +\begin{CompactList}\small\item\em mise en forme du num\'{e}ro de t\'{e}lephone \item\end{CompactList}\item +\hyperlink{classvCard_a1}{set\-Photo} (\$type, \$photo) +\begin{CompactList}\small\item\em mise en forme de la photo \item\end{CompactList}\item +\hyperlink{classvCard_a2}{set\-Formatted\-Name} (\$name) +\begin{CompactList}\small\item\em mise en forme du nom format\'{e} \item\end{CompactList}\item +\hyperlink{classvCard_a3}{set\-Name} (\$family=\char`\"{}\char`\"{}, \$first=\char`\"{}\char`\"{}, \$additional=\char`\"{}\char`\"{}, \$prefix=\char`\"{}\char`\"{}, \$suffix=\char`\"{}\char`\"{}) +\begin{CompactList}\small\item\em mise en forme du nom complet \item\end{CompactList}\item +\hyperlink{classvCard_a4}{set\-Birthday} (\$date) +\begin{CompactList}\small\item\em mise en forme de l'anniversaire \item\end{CompactList}\item +\hyperlink{classvCard_a5}{set\-Address} (\$postoffice=\char`\"{}\char`\"{}, \$extended=\char`\"{}\char`\"{}, \$street=\char`\"{}\char`\"{}, \$city=\char`\"{}\char`\"{}, \$region=\char`\"{}\char`\"{}, \$zip=\char`\"{}\char`\"{}, \$country=\char`\"{}\char`\"{}, \$type=\char`\"{}HOME;POSTAL\char`\"{}) +\begin{CompactList}\small\item\em mise en forme de l'adresse \item\end{CompactList}\item +\hyperlink{classvCard_a6}{set\-Label} (\$postoffice=\char`\"{}\char`\"{}, \$extended=\char`\"{}\char`\"{}, \$street=\char`\"{}\char`\"{}, \$city=\char`\"{}\char`\"{}, \$region=\char`\"{}\char`\"{}, \$zip=\char`\"{}\char`\"{}, \$country=\char`\"{}\char`\"{}, \$type=\char`\"{}HOME;POSTAL\char`\"{}) +\begin{CompactList}\small\item\em mise en forme du label \item\end{CompactList}\item +\hyperlink{classvCard_a7}{set\-Email} (\$address) +\begin{CompactList}\small\item\em mise en forme de l'email \item\end{CompactList}\item +\hyperlink{classvCard_a8}{set\-Note} (\$note) +\begin{CompactList}\small\item\em mise en forme de la note \item\end{CompactList}\item +\hyperlink{classvCard_a9}{set\-URL} (\$url, \$type=\char`\"{}\char`\"{}) +\begin{CompactList}\small\item\em mise en forme de l'url \item\end{CompactList}\item +\hypertarget{classvCard_a10}{ +\hyperlink{classvCard_a10}{get\-VCard} ()} +\label{classvCard_a10} + +\begin{CompactList}\small\item\em permet d'obtenir une vcard \item\end{CompactList}\item +\hypertarget{classvCard_a11}{ +\hyperlink{classvCard_a11}{get\-File\-Name} ()} +\label{classvCard_a11} + +\begin{CompactList}\small\item\em permet d'obtenir le nom de fichier \item\end{CompactList}\end{CompactItemize} + + +\subsection{Description d\'{e}taill\'{e}e} +Classe permettant de cr\'{e}er un fichier vcard. + +Ensemble des fonctions permettant de cr\'{e}er un fichier vcard + + + +D\'{e}finition \`{a} la ligne 83 du fichier vcard.class.php. + +\subsection{Documentation des fonctions membres} +\hypertarget{classvCard_a5}{ +\index{vCard@{v\-Card}!setAddress@{setAddress}} +\index{setAddress@{setAddress}!vCard@{v\-Card}} +\subsubsection[setAddress]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Address (\$ {\em postoffice} = {\tt \char`\"{}\char`\"{}}, \$ {\em extended} = {\tt \char`\"{}\char`\"{}}, \$ {\em street} = {\tt \char`\"{}\char`\"{}}, \$ {\em city} = {\tt \char`\"{}\char`\"{}}, \$ {\em region} = {\tt \char`\"{}\char`\"{}}, \$ {\em zip} = {\tt \char`\"{}\char`\"{}}, \$ {\em country} = {\tt \char`\"{}\char`\"{}}, \$ {\em type} = {\tt \char`\"{}HOME;POSTAL\char`\"{}})}} +\label{classvCard_a5} + + +mise en forme de l'adresse + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em postoffice}]\item[{\em extended}]\item[{\em street}]\item[{\em city}]\item[{\em region}]\item[{\em zip}]\item[{\em country}]\item[{\em type}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 158 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Address(). + +R\'{e}f\'{e}renc\'{e} par set\-Address().\hypertarget{classvCard_a4}{ +\index{vCard@{v\-Card}!setBirthday@{setBirthday}} +\index{setBirthday@{setBirthday}!vCard@{v\-Card}} +\subsubsection[setBirthday]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Birthday (\$ {\em date})}} +\label{classvCard_a4} + + +mise en forme de l'anniversaire + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em date}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 142 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Birthday(). + +R\'{e}f\'{e}renc\'{e} par set\-Birthday().\hypertarget{classvCard_a7}{ +\index{vCard@{v\-Card}!setEmail@{setEmail}} +\index{setEmail@{setEmail}!vCard@{v\-Card}} +\subsubsection[setEmail]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Email (\$ {\em address})}} +\label{classvCard_a7} + + +mise en forme de l'email + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em address}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 200 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Email(). + +R\'{e}f\'{e}renc\'{e} par set\-Email().\hypertarget{classvCard_a2}{ +\index{vCard@{v\-Card}!setFormattedName@{setFormattedName}} +\index{setFormattedName@{setFormattedName}!vCard@{v\-Card}} +\subsubsection[setFormattedName]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Formatted\-Name (\$ {\em name})}} +\label{classvCard_a2} + + +mise en forme du nom format\'{e} + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em name}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 118 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Formatted\-Name(). + +R\'{e}f\'{e}renc\'{e} par set\-Formatted\-Name().\hypertarget{classvCard_a6}{ +\index{vCard@{v\-Card}!setLabel@{setLabel}} +\index{setLabel@{setLabel}!vCard@{v\-Card}} +\subsubsection[setLabel]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Label (\$ {\em postoffice} = {\tt \char`\"{}\char`\"{}}, \$ {\em extended} = {\tt \char`\"{}\char`\"{}}, \$ {\em street} = {\tt \char`\"{}\char`\"{}}, \$ {\em city} = {\tt \char`\"{}\char`\"{}}, \$ {\em region} = {\tt \char`\"{}\char`\"{}}, \$ {\em zip} = {\tt \char`\"{}\char`\"{}}, \$ {\em country} = {\tt \char`\"{}\char`\"{}}, \$ {\em type} = {\tt \char`\"{}HOME;POSTAL\char`\"{}})}} +\label{classvCard_a6} + + +mise en forme du label + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em postoffice}]\item[{\em extended}]\item[{\em street}]\item[{\em city}]\item[{\em region}]\item[{\em zip}]\item[{\em country}]\item[{\em type}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 182 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Label(). + +R\'{e}f\'{e}renc\'{e} par set\-Label().\hypertarget{classvCard_a3}{ +\index{vCard@{v\-Card}!setName@{setName}} +\index{setName@{setName}!vCard@{v\-Card}} +\subsubsection[setName]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Name (\$ {\em family} = {\tt \char`\"{}\char`\"{}}, \$ {\em first} = {\tt \char`\"{}\char`\"{}}, \$ {\em additional} = {\tt \char`\"{}\char`\"{}}, \$ {\em prefix} = {\tt \char`\"{}\char`\"{}}, \$ {\em suffix} = {\tt \char`\"{}\char`\"{}})}} +\label{classvCard_a3} + + +mise en forme du nom complet + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em family}]\item[{\em first}]\item[{\em additional}]\item[{\em prefix}]\item[{\em suffix}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 131 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Name(). + +R\'{e}f\'{e}renc\'{e} par set\-Name().\hypertarget{classvCard_a8}{ +\index{vCard@{v\-Card}!setNote@{setNote}} +\index{setNote@{setNote}!vCard@{v\-Card}} +\subsubsection[setNote]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Note (\$ {\em note})}} +\label{classvCard_a8} + + +mise en forme de la note + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em note}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 209 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Note(). + +R\'{e}f\'{e}renc\'{e} par set\-Note().\hypertarget{classvCard_a0}{ +\index{vCard@{v\-Card}!setPhoneNumber@{setPhoneNumber}} +\index{setPhoneNumber@{setPhoneNumber}!vCard@{v\-Card}} +\subsubsection[setPhoneNumber]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Phone\-Number (\$ {\em number}, \$ {\em type} = {\tt \char`\"{}\char`\"{}})}} +\label{classvCard_a0} + + +mise en forme du num\'{e}ro de t\'{e}lephone + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em number}]num\'{e}ro de t\'{e}l\'{e}phone \item[{\em type}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 93 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Phone\-Number(). + +R\'{e}f\'{e}renc\'{e} par set\-Phone\-Number().\hypertarget{classvCard_a1}{ +\index{vCard@{v\-Card}!setPhoto@{setPhoto}} +\index{setPhoto@{setPhoto}!vCard@{v\-Card}} +\subsubsection[setPhoto]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-Photo (\$ {\em type}, \$ {\em photo})}} +\label{classvCard_a1} + + +mise en forme de la photo + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em type}]\item[{\em photo}]\end{description} +\end{Desc} +\begin{Desc} +\item[Avertissement:]NON TESTE ! \end{Desc} + + +D\'{e}finition \`{a} la ligne 109 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-Photo(). + +R\'{e}f\'{e}renc\'{e} par set\-Photo().\hypertarget{classvCard_a9}{ +\index{vCard@{v\-Card}!setURL@{setURL}} +\index{setURL@{setURL}!vCard@{v\-Card}} +\subsubsection[setURL]{\setlength{\rightskip}{0pt plus 5cm}v\-Card::set\-URL (\$ {\em url}, \$ {\em type} = {\tt \char`\"{}\char`\"{}})}} +\label{classvCard_a9} + + +mise en forme de l'url + +\begin{Desc} +\item[Param\`{e}tres:] +\begin{description} +\item[{\em url}]\item[{\em type}]\end{description} +\end{Desc} + + +D\'{e}finition \`{a} la ligne 219 du fichier vcard.class.php. + +R\'{e}f\'{e}rences set\-URL(). + +R\'{e}f\'{e}renc\'{e} par set\-URL(). + +La documentation de cette classe a \'{e}t\'{e} g\'{e}n\'{e}r\'{e}e \`{a} partir du fichier suivant:\begin{CompactItemize} +\item +htdocs/lib/vcard/\hyperlink{vcard_8class_8php}{vcard.class.php}\end{CompactItemize} diff --git a/doc/dev/php/latex/doxygen.sty b/doc/dev/php/latex/doxygen.sty index 47a43705399..0b5d2933551 100644 --- a/doc/dev/php/latex/doxygen.sty +++ b/doc/dev/php/latex/doxygen.sty @@ -10,8 +10,8 @@ {\fancyplain{}{\bfseries\rightmark}} \rhead[\fancyplain{}{\bfseries\leftmark}] {\fancyplain{}{\bfseries\thepage}} -\rfoot[\fancyplain{}{\bfseries\scriptsize G\'{e}n\'{e}r\'{e} le Fri Jul 16 00:31:08 2004 pour dolibarr par Doxygen }]{} -\lfoot[]{\fancyplain{}{\bfseries\scriptsize G\'{e}n\'{e}r\'{e} le Fri Jul 16 00:31:08 2004 pour dolibarr par Doxygen }} +\rfoot[\fancyplain{}{\bfseries\scriptsize G\'{e}n\'{e}r\'{e} le Fri Jul 16 08:51:53 2004 pour dolibarr par Doxygen }]{} +\lfoot[]{\fancyplain{}{\bfseries\scriptsize G\'{e}n\'{e}r\'{e} le Fri Jul 16 08:51:53 2004 pour dolibarr par Doxygen }} \cfoot{} \newenvironment{CompactList} {\begin{list}{}{ diff --git a/doc/dev/php/latex/files.tex b/doc/dev/php/latex/files.tex index aefab881d16..1495ec2d270 100644 --- a/doc/dev/php/latex/files.tex +++ b/doc/dev/php/latex/files.tex @@ -7,4 +7,6 @@ Liste de tous les fichiers document\'{e}s avec une br\`{e}ve description:\begin{ \item\contentsline{section}{htdocs/lib/\hyperlink{price_8lib_8php}{price.lib.php} (Librairie contenant les fonctions pour calculer un prix )}{\pageref{price_8lib_8php}}{} \item\contentsline{section}{htdocs/lib/\hyperlink{thermometer_8php}{thermometer.php} (Classe permettant d'afficher un thermometre )}{\pageref{thermometer_8php}}{} \item\contentsline{section}{htdocs/lib/\hyperlink{webcal_8class_8php}{webcal.class.php} (Classe permettant d'acceder a la database webcalendar )}{\pageref{webcal_8class_8php}}{} +\item\contentsline{section}{htdocs/lib/jabber/\hyperlink{class_8jabber_8php}{class.jabber.php} (Classe permettant de se connecter \`{a} un serveur jabber )}{\pageref{class_8jabber_8php}}{} +\item\contentsline{section}{htdocs/lib/vcard/\hyperlink{vcard_8class_8php}{vcard.class.php} (Classe permettant de cr\'{e}er un fichier vcard )}{\pageref{vcard_8class_8php}}{} \end{CompactList} diff --git a/doc/dev/php/latex/functions_8inc_8php.aux b/doc/dev/php/latex/functions_8inc_8php.aux index b6e4ed3ffb8..9f6972aa78e 100644 --- a/doc/dev/php/latex/functions_8inc_8php.aux +++ b/doc/dev/php/latex/functions_8inc_8php.aux @@ -1,70 +1,70 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {4.2}R\'{e}f\'{e}rence du fichier htdocs/lib/functions.inc.php}{20}{section.4.2}} -\newlabel{functions_8inc_8php}{{4.2}{20}{R\'{e}f\'{e}rence du fichier htdocs/lib/functions.inc.php\relax }{section.4.2}{}} -\newlabel{functions_8inc_8php_a22}{{4.2}{20}{Fonctions\relax }{section*.6}{}} -\newlabel{functions_8inc_8php_a31}{{4.2}{21}{Fonctions\relax }{section*.6}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Description d\'{e}taill\'{e}e}{21}{subsection.4.2.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}Documentation des fonctions}{22}{subsection.4.2.2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.1}creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}{22}{subsubsection.4.2.2.1}} -\newlabel{functions_8inc_8php_a45}{{4.2.2.1}{22}{creer\_\-pass\_\-aleatoire\relax }{subsubsection.4.2.2.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.2}dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}{22}{subsubsection.4.2.2.2}} -\newlabel{functions_8inc_8php_a30}{{4.2.2.2}{22}{dol\_\-delete\_\-file\relax }{subsubsection.4.2.2.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.3}dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}{22}{subsubsection.4.2.2.3}} -\newlabel{functions_8inc_8php_a4}{{4.2.2.3}{22}{dolibarr\_\-del\_\-const\relax }{subsubsection.4.2.2.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.4}dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}{22}{subsubsection.4.2.2.4}} -\newlabel{functions_8inc_8php_a2}{{4.2.2.4}{22}{dolibarr\_\-fiche\_\-head\relax }{subsubsection.4.2.2.4}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.5}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}{23}{subsubsection.4.2.2.5}} -\newlabel{functions_8inc_8php_a5}{{4.2.2.5}{23}{dolibarr\_\-print\_\-ca\relax }{subsubsection.4.2.2.5}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.6}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}{23}{subsubsection.4.2.2.6}} -\newlabel{functions_8inc_8php_a6}{{4.2.2.6}{23}{dolibarr\_\-print\_\-date\relax }{subsubsection.4.2.2.6}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.7}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}{23}{subsubsection.4.2.2.7}} -\newlabel{functions_8inc_8php_a7}{{4.2.2.7}{23}{dolibarr\_\-print\_\-object\_\-info\relax }{subsubsection.4.2.2.7}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.8}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}{23}{subsubsection.4.2.2.8}} -\newlabel{functions_8inc_8php_a8}{{4.2.2.8}{23}{dolibarr\_\-print\_\-phone\relax }{subsubsection.4.2.2.8}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.9}dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}{24}{subsubsection.4.2.2.9}} -\newlabel{functions_8inc_8php_a3}{{4.2.2.9}{24}{dolibarr\_\-set\_\-const\relax }{subsubsection.4.2.2.9}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.10}dolibarr\_\discretionary {-}{}{}syslog}{24}{subsubsection.4.2.2.10}} -\newlabel{functions_8inc_8php_a1}{{4.2.2.10}{24}{dolibarr\_\-syslog\relax }{subsubsection.4.2.2.10}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.11}doliMoveFileUpload}{24}{subsubsection.4.2.2.11}} -\newlabel{functions_8inc_8php_a23}{{4.2.2.11}{24}{doliMoveFileUpload\relax }{subsubsection.4.2.2.11}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.12}francs}{25}{subsubsection.4.2.2.12}} -\newlabel{functions_8inc_8php_a39}{{4.2.2.12}{25}{francs\relax }{subsubsection.4.2.2.12}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.13}inctva}{25}{subsubsection.4.2.2.13}} -\newlabel{functions_8inc_8php_a41}{{4.2.2.13}{25}{inctva\relax }{subsubsection.4.2.2.13}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.14}initialiser\_\discretionary {-}{}{}sel}{25}{subsubsection.4.2.2.14}} -\newlabel{functions_8inc_8php_a46}{{4.2.2.14}{25}{initialiser\_\-sel\relax }{subsubsection.4.2.2.14}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.15}logfile}{25}{subsubsection.4.2.2.15}} -\newlabel{functions_8inc_8php_a44}{{4.2.2.15}{25}{logfile\relax }{subsubsection.4.2.2.15}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.16}loginfunction}{26}{subsubsection.4.2.2.16}} -\newlabel{functions_8inc_8php_a21}{{4.2.2.16}{26}{loginfunction\relax }{subsubsection.4.2.2.16}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.17}price}{26}{subsubsection.4.2.2.17}} -\newlabel{functions_8inc_8php_a38}{{4.2.2.17}{26}{price\relax }{subsubsection.4.2.2.17}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.18}print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}{26}{subsubsection.4.2.2.18}} -\newlabel{functions_8inc_8php_a35}{{4.2.2.18}{26}{print\_\-date\_\-select\relax }{subsubsection.4.2.2.18}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.19}print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}{26}{subsubsection.4.2.2.19}} -\newlabel{functions_8inc_8php_a37}{{4.2.2.19}{26}{print\_\-duree\_\-select\relax }{subsubsection.4.2.2.19}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.20}print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}{27}{subsubsection.4.2.2.20}} -\newlabel{functions_8inc_8php_a29}{{4.2.2.20}{27}{print\_\-fiche\_\-titre\relax }{subsubsection.4.2.2.20}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.21}print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}{27}{subsubsection.4.2.2.21}} -\newlabel{functions_8inc_8php_a33}{{4.2.2.21}{27}{print\_\-fleche\_\-navigation\relax }{subsubsection.4.2.2.21}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.22}print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}{27}{subsubsection.4.2.2.22}} -\newlabel{functions_8inc_8php_a36}{{4.2.2.22}{27}{print\_\-heure\_\-select\relax }{subsubsection.4.2.2.22}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.23}print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}{27}{subsubsection.4.2.2.23}} -\newlabel{functions_8inc_8php_a26}{{4.2.2.23}{27}{print\_\-liste\_\-field\_\-titre\relax }{subsubsection.4.2.2.23}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.24}print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}{28}{subsubsection.4.2.2.24}} -\newlabel{functions_8inc_8php_a27}{{4.2.2.24}{28}{print\_\-liste\_\-field\_\-titre\_\-new\relax }{subsubsection.4.2.2.24}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.25}print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}{28}{subsubsection.4.2.2.25}} -\newlabel{functions_8inc_8php_a34}{{4.2.2.25}{28}{print\_\-oui\_\-non\relax }{subsubsection.4.2.2.25}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.26}print\_\discretionary {-}{}{}titre}{28}{subsubsection.4.2.2.26}} -\newlabel{functions_8inc_8php_a28}{{4.2.2.26}{28}{print\_\-titre\relax }{subsubsection.4.2.2.26}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.27}stat\_\discretionary {-}{}{}print}{29}{subsubsection.4.2.2.27}} -\newlabel{functions_8inc_8php_a42}{{4.2.2.27}{29}{stat\_\-print\relax }{subsubsection.4.2.2.27}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.28}transcoS2L}{29}{subsubsection.4.2.2.28}} -\newlabel{functions_8inc_8php_a25}{{4.2.2.28}{29}{transcoS2L\relax }{subsubsection.4.2.2.28}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.29}tva}{29}{subsubsection.4.2.2.29}} -\newlabel{functions_8inc_8php_a40}{{4.2.2.29}{29}{tva\relax }{subsubsection.4.2.2.29}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.2}R\'{e}f\'{e}rence du fichier htdocs/lib/functions.inc.php}{27}{section.4.2}} +\newlabel{functions_8inc_8php}{{4.2}{27}{R\'{e}f\'{e}rence du fichier htdocs/lib/functions.inc.php\relax }{section.4.2}{}} +\newlabel{functions_8inc_8php_a22}{{4.2}{27}{Fonctions\relax }{section*.8}{}} +\newlabel{functions_8inc_8php_a31}{{4.2}{28}{Fonctions\relax }{section*.8}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.1}Description d\'{e}taill\'{e}e}{28}{subsection.4.2.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.2.2}Documentation des fonctions}{29}{subsection.4.2.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.1}creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}{29}{subsubsection.4.2.2.1}} +\newlabel{functions_8inc_8php_a45}{{4.2.2.1}{29}{creer\_\-pass\_\-aleatoire\relax }{subsubsection.4.2.2.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.2}dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}{29}{subsubsection.4.2.2.2}} +\newlabel{functions_8inc_8php_a30}{{4.2.2.2}{29}{dol\_\-delete\_\-file\relax }{subsubsection.4.2.2.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.3}dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}{29}{subsubsection.4.2.2.3}} +\newlabel{functions_8inc_8php_a4}{{4.2.2.3}{29}{dolibarr\_\-del\_\-const\relax }{subsubsection.4.2.2.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.4}dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}{29}{subsubsection.4.2.2.4}} +\newlabel{functions_8inc_8php_a2}{{4.2.2.4}{29}{dolibarr\_\-fiche\_\-head\relax }{subsubsection.4.2.2.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.5}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}{30}{subsubsection.4.2.2.5}} +\newlabel{functions_8inc_8php_a5}{{4.2.2.5}{30}{dolibarr\_\-print\_\-ca\relax }{subsubsection.4.2.2.5}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.6}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}{30}{subsubsection.4.2.2.6}} +\newlabel{functions_8inc_8php_a6}{{4.2.2.6}{30}{dolibarr\_\-print\_\-date\relax }{subsubsection.4.2.2.6}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.7}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}{30}{subsubsection.4.2.2.7}} +\newlabel{functions_8inc_8php_a7}{{4.2.2.7}{30}{dolibarr\_\-print\_\-object\_\-info\relax }{subsubsection.4.2.2.7}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.8}dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}{30}{subsubsection.4.2.2.8}} +\newlabel{functions_8inc_8php_a8}{{4.2.2.8}{30}{dolibarr\_\-print\_\-phone\relax }{subsubsection.4.2.2.8}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.9}dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}{31}{subsubsection.4.2.2.9}} +\newlabel{functions_8inc_8php_a3}{{4.2.2.9}{31}{dolibarr\_\-set\_\-const\relax }{subsubsection.4.2.2.9}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.10}dolibarr\_\discretionary {-}{}{}syslog}{31}{subsubsection.4.2.2.10}} +\newlabel{functions_8inc_8php_a1}{{4.2.2.10}{31}{dolibarr\_\-syslog\relax }{subsubsection.4.2.2.10}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.11}doliMoveFileUpload}{31}{subsubsection.4.2.2.11}} +\newlabel{functions_8inc_8php_a23}{{4.2.2.11}{31}{doliMoveFileUpload\relax }{subsubsection.4.2.2.11}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.12}francs}{32}{subsubsection.4.2.2.12}} +\newlabel{functions_8inc_8php_a39}{{4.2.2.12}{32}{francs\relax }{subsubsection.4.2.2.12}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.13}inctva}{32}{subsubsection.4.2.2.13}} +\newlabel{functions_8inc_8php_a41}{{4.2.2.13}{32}{inctva\relax }{subsubsection.4.2.2.13}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.14}initialiser\_\discretionary {-}{}{}sel}{32}{subsubsection.4.2.2.14}} +\newlabel{functions_8inc_8php_a46}{{4.2.2.14}{32}{initialiser\_\-sel\relax }{subsubsection.4.2.2.14}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.15}logfile}{32}{subsubsection.4.2.2.15}} +\newlabel{functions_8inc_8php_a44}{{4.2.2.15}{32}{logfile\relax }{subsubsection.4.2.2.15}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.16}loginfunction}{33}{subsubsection.4.2.2.16}} +\newlabel{functions_8inc_8php_a21}{{4.2.2.16}{33}{loginfunction\relax }{subsubsection.4.2.2.16}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.17}price}{33}{subsubsection.4.2.2.17}} +\newlabel{functions_8inc_8php_a38}{{4.2.2.17}{33}{price\relax }{subsubsection.4.2.2.17}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.18}print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}{33}{subsubsection.4.2.2.18}} +\newlabel{functions_8inc_8php_a35}{{4.2.2.18}{33}{print\_\-date\_\-select\relax }{subsubsection.4.2.2.18}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.19}print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}{33}{subsubsection.4.2.2.19}} +\newlabel{functions_8inc_8php_a37}{{4.2.2.19}{33}{print\_\-duree\_\-select\relax }{subsubsection.4.2.2.19}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.20}print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}{34}{subsubsection.4.2.2.20}} +\newlabel{functions_8inc_8php_a29}{{4.2.2.20}{34}{print\_\-fiche\_\-titre\relax }{subsubsection.4.2.2.20}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.21}print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}{34}{subsubsection.4.2.2.21}} +\newlabel{functions_8inc_8php_a33}{{4.2.2.21}{34}{print\_\-fleche\_\-navigation\relax }{subsubsection.4.2.2.21}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.22}print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}{34}{subsubsection.4.2.2.22}} +\newlabel{functions_8inc_8php_a36}{{4.2.2.22}{34}{print\_\-heure\_\-select\relax }{subsubsection.4.2.2.22}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.23}print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}{34}{subsubsection.4.2.2.23}} +\newlabel{functions_8inc_8php_a26}{{4.2.2.23}{34}{print\_\-liste\_\-field\_\-titre\relax }{subsubsection.4.2.2.23}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.24}print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}{35}{subsubsection.4.2.2.24}} +\newlabel{functions_8inc_8php_a27}{{4.2.2.24}{35}{print\_\-liste\_\-field\_\-titre\_\-new\relax }{subsubsection.4.2.2.24}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.25}print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}{35}{subsubsection.4.2.2.25}} +\newlabel{functions_8inc_8php_a34}{{4.2.2.25}{35}{print\_\-oui\_\-non\relax }{subsubsection.4.2.2.25}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.26}print\_\discretionary {-}{}{}titre}{35}{subsubsection.4.2.2.26}} +\newlabel{functions_8inc_8php_a28}{{4.2.2.26}{35}{print\_\-titre\relax }{subsubsection.4.2.2.26}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.27}stat\_\discretionary {-}{}{}print}{36}{subsubsection.4.2.2.27}} +\newlabel{functions_8inc_8php_a42}{{4.2.2.27}{36}{stat\_\-print\relax }{subsubsection.4.2.2.27}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.28}transcoS2L}{36}{subsubsection.4.2.2.28}} +\newlabel{functions_8inc_8php_a25}{{4.2.2.28}{36}{transcoS2L\relax }{subsubsection.4.2.2.28}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.2.2.29}tva}{36}{subsubsection.4.2.2.29}} +\newlabel{functions_8inc_8php_a40}{{4.2.2.29}{36}{tva\relax }{subsubsection.4.2.2.29}{}} \@setckpt{functions_8inc_8php}{ -\setcounter{page}{30} +\setcounter{page}{37} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} diff --git a/doc/dev/php/latex/ldap_8lib_8php.aux b/doc/dev/php/latex/ldap_8lib_8php.aux index 5112e606ad5..c52387d7c50 100644 --- a/doc/dev/php/latex/ldap_8lib_8php.aux +++ b/doc/dev/php/latex/ldap_8lib_8php.aux @@ -1,22 +1,22 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {4.3}R\'{e}f\'{e}rence du fichier htdocs/lib/ldap.lib.php}{30}{section.4.3}} -\newlabel{ldap_8lib_8php}{{4.3}{30}{R\'{e}f\'{e}rence du fichier htdocs/lib/ldap.lib.php\relax }{section.4.3}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.1}Description d\'{e}taill\'{e}e}{30}{subsection.4.3.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.3.2}Documentation des fonctions}{30}{subsection.4.3.2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.1}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}{30}{subsubsection.4.3.2.1}} -\newlabel{ldap_8lib_8php_a1}{{4.3.2.1}{30}{dolibarr\_\-ldap\_\-bind\relax }{subsubsection.4.3.2.1}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.2}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}{31}{subsubsection.4.3.2.2}} -\newlabel{ldap_8lib_8php_a0}{{4.3.2.2}{31}{dolibarr\_\-ldap\_\-connect\relax }{subsubsection.4.3.2.2}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.3}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}{31}{subsubsection.4.3.2.3}} -\newlabel{ldap_8lib_8php_a3}{{4.3.2.3}{31}{dolibarr\_\-ldap\_\-getversion\relax }{subsubsection.4.3.2.3}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.4}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}{31}{subsubsection.4.3.2.4}} -\newlabel{ldap_8lib_8php_a4}{{4.3.2.4}{31}{dolibarr\_\-ldap\_\-setversion\relax }{subsubsection.4.3.2.4}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.5}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}{31}{subsubsection.4.3.2.5}} -\newlabel{ldap_8lib_8php_a5}{{4.3.2.5}{31}{dolibarr\_\-ldap\_\-unacc\relax }{subsubsection.4.3.2.5}{}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.3.2.6}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}{32}{subsubsection.4.3.2.6}} -\newlabel{ldap_8lib_8php_a2}{{4.3.2.6}{32}{dolibarr\_\-ldap\_\-unbind\relax }{subsubsection.4.3.2.6}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.4}R\'{e}f\'{e}rence du fichier htdocs/lib/ldap.lib.php}{38}{section.4.4}} +\newlabel{ldap_8lib_8php}{{4.4}{38}{R\'{e}f\'{e}rence du fichier htdocs/lib/ldap.lib.php\relax }{section.4.4}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}Description d\'{e}taill\'{e}e}{38}{subsection.4.4.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.2}Documentation des fonctions}{38}{subsection.4.4.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.1}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}{38}{subsubsection.4.4.2.1}} +\newlabel{ldap_8lib_8php_a1}{{4.4.2.1}{38}{dolibarr\_\-ldap\_\-bind\relax }{subsubsection.4.4.2.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.2}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}{39}{subsubsection.4.4.2.2}} +\newlabel{ldap_8lib_8php_a0}{{4.4.2.2}{39}{dolibarr\_\-ldap\_\-connect\relax }{subsubsection.4.4.2.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.3}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}{39}{subsubsection.4.4.2.3}} +\newlabel{ldap_8lib_8php_a3}{{4.4.2.3}{39}{dolibarr\_\-ldap\_\-getversion\relax }{subsubsection.4.4.2.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.4}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}{39}{subsubsection.4.4.2.4}} +\newlabel{ldap_8lib_8php_a4}{{4.4.2.4}{39}{dolibarr\_\-ldap\_\-setversion\relax }{subsubsection.4.4.2.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.5}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}{39}{subsubsection.4.4.2.5}} +\newlabel{ldap_8lib_8php_a5}{{4.4.2.5}{39}{dolibarr\_\-ldap\_\-unacc\relax }{subsubsection.4.4.2.5}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.4.2.6}dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}{40}{subsubsection.4.4.2.6}} +\newlabel{ldap_8lib_8php_a2}{{4.4.2.6}{40}{dolibarr\_\-ldap\_\-unbind\relax }{subsubsection.4.4.2.6}{}} \@setckpt{ldap_8lib_8php}{ -\setcounter{page}{33} +\setcounter{page}{41} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} @@ -26,7 +26,7 @@ \setcounter{mpfootnote}{0} \setcounter{part}{0} \setcounter{chapter}{4} -\setcounter{section}{3} +\setcounter{section}{4} \setcounter{subsection}{2} \setcounter{subsubsection}{6} \setcounter{paragraph}{0} diff --git a/doc/dev/php/latex/mysql_8lib_8php.aux b/doc/dev/php/latex/mysql_8lib_8php.aux index 00e60da0492..61e4a7b393a 100644 --- a/doc/dev/php/latex/mysql_8lib_8php.aux +++ b/doc/dev/php/latex/mysql_8lib_8php.aux @@ -1,9 +1,9 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {4.4}R\'{e}f\'{e}rence du fichier htdocs/lib/mysql.lib.php}{33}{section.4.4}} -\newlabel{mysql_8lib_8php}{{4.4}{33}{R\'{e}f\'{e}rence du fichier htdocs/lib/mysql.lib.php\relax }{section.4.4}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.4.1}Description d\'{e}taill\'{e}e}{33}{subsection.4.4.1}} +\@writefile{toc}{\contentsline {section}{\numberline {4.5}R\'{e}f\'{e}rence du fichier htdocs/lib/mysql.lib.php}{41}{section.4.5}} +\newlabel{mysql_8lib_8php}{{4.5}{41}{R\'{e}f\'{e}rence du fichier htdocs/lib/mysql.lib.php\relax }{section.4.5}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}Description d\'{e}taill\'{e}e}{41}{subsection.4.5.1}} \@setckpt{mysql_8lib_8php}{ -\setcounter{page}{34} +\setcounter{page}{42} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} @@ -13,7 +13,7 @@ \setcounter{mpfootnote}{0} \setcounter{part}{0} \setcounter{chapter}{4} -\setcounter{section}{4} +\setcounter{section}{5} \setcounter{subsection}{1} \setcounter{subsubsection}{0} \setcounter{paragraph}{0} diff --git a/doc/dev/php/latex/price_8lib_8php.aux b/doc/dev/php/latex/price_8lib_8php.aux index f25dee4ad58..a0161fba0fd 100644 --- a/doc/dev/php/latex/price_8lib_8php.aux +++ b/doc/dev/php/latex/price_8lib_8php.aux @@ -1,12 +1,12 @@ \relax -\@writefile{toc}{\contentsline {section}{\numberline {4.5}R\'{e}f\'{e}rence du fichier htdocs/lib/price.lib.php}{34}{section.4.5}} -\newlabel{price_8lib_8php}{{4.5}{34}{R\'{e}f\'{e}rence du fichier htdocs/lib/price.lib.php\relax }{section.4.5}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.1}Description d\'{e}taill\'{e}e}{34}{subsection.4.5.1}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.5.2}Documentation des fonctions}{34}{subsection.4.5.2}} -\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.5.2.1}calcul\_\discretionary {-}{}{}price}{34}{subsubsection.4.5.2.1}} -\newlabel{price_8lib_8php_a0}{{4.5.2.1}{34}{calcul\_\-price\relax }{subsubsection.4.5.2.1}{}} +\@writefile{toc}{\contentsline {section}{\numberline {4.6}R\'{e}f\'{e}rence du fichier htdocs/lib/price.lib.php}{42}{section.4.6}} +\newlabel{price_8lib_8php}{{4.6}{42}{R\'{e}f\'{e}rence du fichier htdocs/lib/price.lib.php\relax }{section.4.6}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.1}Description d\'{e}taill\'{e}e}{42}{subsection.4.6.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.6.2}Documentation des fonctions}{42}{subsection.4.6.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.6.2.1}calcul\_\discretionary {-}{}{}price}{42}{subsubsection.4.6.2.1}} +\newlabel{price_8lib_8php_a0}{{4.6.2.1}{42}{calcul\_\-price\relax }{subsubsection.4.6.2.1}{}} \@setckpt{price_8lib_8php}{ -\setcounter{page}{35} +\setcounter{page}{43} \setcounter{equation}{0} \setcounter{enumi}{0} \setcounter{enumii}{0} @@ -16,7 +16,7 @@ \setcounter{mpfootnote}{0} \setcounter{part}{0} \setcounter{chapter}{4} -\setcounter{section}{5} +\setcounter{section}{6} \setcounter{subsection}{2} \setcounter{subsubsection}{1} \setcounter{paragraph}{0} diff --git a/doc/dev/php/latex/refman.aux b/doc/dev/php/latex/refman.aux index d5574250fd5..4f52f3b84a9 100644 --- a/doc/dev/php/latex/refman.aux +++ b/doc/dev/php/latex/refman.aux @@ -32,21 +32,39 @@ \@writefile{lot}{\addvspace {10\p@ }} \@writefile{toc}{\contentsline {section}{\numberline {3.1}R\'{e}f\'{e}rence de la classe CMail\discretionary {-}{}{}File}{5}{section.3.1}} \newlabel{classCMailFile}{{3.1}{5}{R\'{e}f\'{e}rence de la classe CMail\-File\relax }{section.3.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Description d\'{e}taill\'{e}e}{5}{subsection.3.1.1}} +\newlabel{classCMailFile_a3}{{3.1}{5}{Fonctions membres publiques\relax }{section*.2}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.1}Description d\'{e}taill\'{e}e}{6}{subsection.3.1.1}} \@writefile{toc}{\contentsline {subsection}{\numberline {3.1.2}Documentation des contructeurs et destructeur}{6}{subsection.3.1.2}} \@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.2.1}CMailFile}{6}{subsubsection.3.1.2.1}} \newlabel{classCMailFile_a0}{{3.1.2.1}{6}{CMailFile\relax }{subsubsection.3.1.2.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {3.1.3}Documentation des fonctions membres}{6}{subsection.3.1.3}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3.1}attach\_\discretionary {-}{}{}file}{6}{subsubsection.3.1.3.1}} +\newlabel{classCMailFile_a1}{{3.1.3.1}{6}{attach\_\-file\relax }{subsubsection.3.1.3.1}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3.2}encode\_\discretionary {-}{}{}file}{7}{subsubsection.3.1.3.2}} +\newlabel{classCMailFile_a2}{{3.1.3.2}{7}{encode\_\-file\relax }{subsubsection.3.1.3.2}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3.3}write\_\discretionary {-}{}{}body}{7}{subsubsection.3.1.3.3}} +\newlabel{classCMailFile_a4}{{3.1.3.3}{7}{write\_\-body\relax }{subsubsection.3.1.3.3}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3.4}write\_\discretionary {-}{}{}mimeheaders}{7}{subsubsection.3.1.3.4}} +\newlabel{classCMailFile_a5}{{3.1.3.4}{7}{write\_\-mimeheaders\relax }{subsubsection.3.1.3.4}{}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {3.1.3.5}write\_\discretionary {-}{}{}smtpheaders}{7}{subsubsection.3.1.3.5}} +\newlabel{classCMailFile_a6}{{3.1.3.5}{7}{write\_\-smtpheaders\relax }{subsubsection.3.1.3.5}{}} \@input{classDoliDb.aux} +\@input{classvCard.aux} \@input{classWebcal.aux} -\@writefile{toc}{\contentsline {chapter}{\numberline {4}dolibarr Documentation des fichiers}{19}{chapter.4}} +\@writefile{toc}{\contentsline {chapter}{\numberline {4}dolibarr Documentation des fichiers}{25}{chapter.4}} \@writefile{lof}{\addvspace {10\p@ }} \@writefile{lot}{\addvspace {10\p@ }} -\@writefile{toc}{\contentsline {section}{\numberline {4.1}R\'{e}f\'{e}rence du fichier htdocs/lib/CMail\discretionary {-}{}{}File.class.php}{19}{section.4.1}} -\newlabel{CMailFile_8class_8php}{{4.1}{19}{R\'{e}f\'{e}rence du fichier htdocs/lib/CMail\-File.class.php\relax }{section.4.1}{}} -\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Description d\'{e}taill\'{e}e}{19}{subsection.4.1.1}} +\@writefile{toc}{\contentsline {section}{\numberline {4.1}R\'{e}f\'{e}rence du fichier htdocs/lib/CMail\discretionary {-}{}{}File.class.php}{25}{section.4.1}} +\newlabel{CMailFile_8class_8php}{{4.1}{25}{R\'{e}f\'{e}rence du fichier htdocs/lib/CMail\-File.class.php\relax }{section.4.1}{}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.1}Description d\'{e}taill\'{e}e}{25}{subsection.4.1.1}} +\@writefile{toc}{\contentsline {subsection}{\numberline {4.1.2}Documentation des fonctions}{26}{subsection.4.1.2}} +\@writefile{toc}{\contentsline {subsubsection}{\numberline {4.1.2.1}my\_\discretionary {-}{}{}chunk\_\discretionary {-}{}{}split}{26}{subsubsection.4.1.2.1}} +\newlabel{CMailFile_8class_8php_a0}{{4.1.2.1}{26}{my\_\-chunk\_\-split\relax }{subsubsection.4.1.2.1}{}} \@input{functions_8inc_8php.aux} +\@input{class_8jabber_8php.aux} \@input{ldap_8lib_8php.aux} \@input{mysql_8lib_8php.aux} \@input{price_8lib_8php.aux} \@input{thermometer_8php.aux} +\@input{vcard_8class_8php.aux} \@input{webcal_8class_8php.aux} diff --git a/doc/dev/php/latex/refman.idx b/doc/dev/php/latex/refman.idx index e9c833643ed..e54a54386d6 100644 --- a/doc/dev/php/latex/refman.idx +++ b/doc/dev/php/latex/refman.idx @@ -1,140 +1,175 @@ \indexentry{CMailFile@{CMailFile}|hyperpage}{5} \indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!CMailFile@{CMailFile}|hyperpage}{6} \indexentry{CMailFile@{CMailFile}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{6} -\indexentry{DoliDb@{DoliDb}|hyperpage}{7} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!DoliDb@{DoliDb}|hyperpage}{8} -\indexentry{DoliDb@{DoliDb}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{8} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!affected_rows@{affected\_\discretionary {-}{}{}rows}|hyperpage}{9} -\indexentry{affected_rows@{affected\_\discretionary {-}{}{}rows}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{9} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!begin@{begin}|hyperpage}{9} -\indexentry{begin@{begin}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{9} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!clone@{clone}|hyperpage}{9} -\indexentry{clone@{clone}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{9} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!close@{close}|hyperpage}{9} -\indexentry{close@{close}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{9} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!commit@{commit}|hyperpage}{9} -\indexentry{commit@{commit}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{9} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!connect@{connect}|hyperpage}{10} -\indexentry{connect@{connect}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{10} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!create_db@{create\_\discretionary {-}{}{}db}|hyperpage}{10} -\indexentry{create_db@{create\_\discretionary {-}{}{}db}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{10} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!errno@{errno}|hyperpage}{10} -\indexentry{errno@{errno}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{10} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!error@{error}|hyperpage}{11} -\indexentry{error@{error}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_array@{fetch\_\discretionary {-}{}{}array}|hyperpage}{11} -\indexentry{fetch_array@{fetch\_\discretionary {-}{}{}array}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_object@{fetch\_\discretionary {-}{}{}object}|hyperpage}{11} -\indexentry{fetch_object@{fetch\_\discretionary {-}{}{}object}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_row@{fetch\_\discretionary {-}{}{}row}|hyperpage}{11} -\indexentry{fetch_row@{fetch\_\discretionary {-}{}{}row}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!free@{free}|hyperpage}{11} -\indexentry{free@{free}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!idate@{idate}|hyperpage}{12} -\indexentry{idate@{idate}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!last_insert_id@{last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}|hyperpage}{12} -\indexentry{last_insert_id@{last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!list_tables@{list\_\discretionary {-}{}{}tables}|hyperpage}{12} -\indexentry{list_tables@{list\_\discretionary {-}{}{}tables}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!num_fields@{num\_\discretionary {-}{}{}fields}|hyperpage}{12} -\indexentry{num_fields@{num\_\discretionary {-}{}{}fields}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!num_rows@{num\_\discretionary {-}{}{}rows}|hyperpage}{13} -\indexentry{num_rows@{num\_\discretionary {-}{}{}rows}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!pconnect@{pconnect}|hyperpage}{13} -\indexentry{pconnect@{pconnect}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!plimit@{plimit}|hyperpage}{13} -\indexentry{plimit@{plimit}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!query@{query}|hyperpage}{13} -\indexentry{query@{query}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!result@{result}|hyperpage}{14} -\indexentry{result@{result}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!rollback@{rollback}|hyperpage}{14} -\indexentry{rollback@{rollback}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} -\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!select_db@{select\_\discretionary {-}{}{}db}|hyperpage}{14} -\indexentry{select_db@{select\_\discretionary {-}{}{}db}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} -\indexentry{Webcal@{Webcal}|hyperpage}{16} -\indexentry{Webcal@{Webcal}!add@{add}|hyperpage}{16} -\indexentry{add@{add}!Webcal@{Webcal}|hyperpage}{16} -\indexentry{Webcal@{Webcal}!get_next_id@{get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}|hyperpage}{16} -\indexentry{get_next_id@{get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}!Webcal@{Webcal}|hyperpage}{16} -\indexentry{htdocs/lib/CMailFile.class.php@{htdocs/lib/CMailFile.class.php}|hyperpage}{19} -\indexentry{htdocs/lib/functions.inc.php@{htdocs/lib/functions.inc.php}|hyperpage}{20} -\indexentry{functions.inc.php@{functions.inc.php}!creer_pass_aleatoire@{creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}|hyperpage}{22} -\indexentry{creer_pass_aleatoire@{creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}!functions.inc.php@{functions.inc.php}|hyperpage}{22} -\indexentry{functions.inc.php@{functions.inc.php}!dol_delete_file@{dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}|hyperpage}{22} -\indexentry{dol_delete_file@{dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}!functions.inc.php@{functions.inc.php}|hyperpage}{22} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_del_const@{dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}|hyperpage}{22} -\indexentry{dolibarr_del_const@{dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}!functions.inc.php@{functions.inc.php}|hyperpage}{22} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_fiche_head@{dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}|hyperpage}{22} -\indexentry{dolibarr_fiche_head@{dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}!functions.inc.php@{functions.inc.php}|hyperpage}{22} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_ca@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}|hyperpage}{23} -\indexentry{dolibarr_print_ca@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}!functions.inc.php@{functions.inc.php}|hyperpage}{23} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_date@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}|hyperpage}{23} -\indexentry{dolibarr_print_date@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}!functions.inc.php@{functions.inc.php}|hyperpage}{23} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_object_info@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}|hyperpage}{23} -\indexentry{dolibarr_print_object_info@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}!functions.inc.php@{functions.inc.php}|hyperpage}{23} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_phone@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}|hyperpage}{23} -\indexentry{dolibarr_print_phone@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}!functions.inc.php@{functions.inc.php}|hyperpage}{23} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_set_const@{dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}|hyperpage}{24} -\indexentry{dolibarr_set_const@{dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}!functions.inc.php@{functions.inc.php}|hyperpage}{24} -\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_syslog@{dolibarr\_\discretionary {-}{}{}syslog}|hyperpage}{24} -\indexentry{dolibarr_syslog@{dolibarr\_\discretionary {-}{}{}syslog}!functions.inc.php@{functions.inc.php}|hyperpage}{24} -\indexentry{functions.inc.php@{functions.inc.php}!doliMoveFileUpload@{doliMoveFileUpload}|hyperpage}{24} -\indexentry{doliMoveFileUpload@{doliMoveFileUpload}!functions.inc.php@{functions.inc.php}|hyperpage}{24} -\indexentry{functions.inc.php@{functions.inc.php}!francs@{francs}|hyperpage}{24} -\indexentry{francs@{francs}!functions.inc.php@{functions.inc.php}|hyperpage}{24} -\indexentry{functions.inc.php@{functions.inc.php}!inctva@{inctva}|hyperpage}{25} -\indexentry{inctva@{inctva}!functions.inc.php@{functions.inc.php}|hyperpage}{25} -\indexentry{functions.inc.php@{functions.inc.php}!initialiser_sel@{initialiser\_\discretionary {-}{}{}sel}|hyperpage}{25} -\indexentry{initialiser_sel@{initialiser\_\discretionary {-}{}{}sel}!functions.inc.php@{functions.inc.php}|hyperpage}{25} -\indexentry{functions.inc.php@{functions.inc.php}!logfile@{logfile}|hyperpage}{25} -\indexentry{logfile@{logfile}!functions.inc.php@{functions.inc.php}|hyperpage}{25} -\indexentry{functions.inc.php@{functions.inc.php}!loginfunction@{loginfunction}|hyperpage}{25} -\indexentry{loginfunction@{loginfunction}!functions.inc.php@{functions.inc.php}|hyperpage}{25} -\indexentry{functions.inc.php@{functions.inc.php}!price@{price}|hyperpage}{26} -\indexentry{price@{price}!functions.inc.php@{functions.inc.php}|hyperpage}{26} -\indexentry{functions.inc.php@{functions.inc.php}!print_date_select@{print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}|hyperpage}{26} -\indexentry{print_date_select@{print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{26} -\indexentry{functions.inc.php@{functions.inc.php}!print_duree_select@{print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}|hyperpage}{26} -\indexentry{print_duree_select@{print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{26} -\indexentry{functions.inc.php@{functions.inc.php}!print_fiche_titre@{print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}|hyperpage}{26} -\indexentry{print_fiche_titre@{print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{26} -\indexentry{functions.inc.php@{functions.inc.php}!print_fleche_navigation@{print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}|hyperpage}{27} -\indexentry{print_fleche_navigation@{print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}!functions.inc.php@{functions.inc.php}|hyperpage}{27} -\indexentry{functions.inc.php@{functions.inc.php}!print_heure_select@{print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}|hyperpage}{27} -\indexentry{print_heure_select@{print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{27} -\indexentry{functions.inc.php@{functions.inc.php}!print_liste_field_titre@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}|hyperpage}{27} -\indexentry{print_liste_field_titre@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{27} -\indexentry{functions.inc.php@{functions.inc.php}!print_liste_field_titre_new@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}|hyperpage}{28} -\indexentry{print_liste_field_titre_new@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}!functions.inc.php@{functions.inc.php}|hyperpage}{28} -\indexentry{functions.inc.php@{functions.inc.php}!print_oui_non@{print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}|hyperpage}{28} -\indexentry{print_oui_non@{print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}!functions.inc.php@{functions.inc.php}|hyperpage}{28} -\indexentry{functions.inc.php@{functions.inc.php}!print_titre@{print\_\discretionary {-}{}{}titre}|hyperpage}{28} -\indexentry{print_titre@{print\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{28} -\indexentry{functions.inc.php@{functions.inc.php}!stat_print@{stat\_\discretionary {-}{}{}print}|hyperpage}{28} -\indexentry{stat_print@{stat\_\discretionary {-}{}{}print}!functions.inc.php@{functions.inc.php}|hyperpage}{28} -\indexentry{functions.inc.php@{functions.inc.php}!transcoS2L@{transcoS2L}|hyperpage}{29} -\indexentry{transcoS2L@{transcoS2L}!functions.inc.php@{functions.inc.php}|hyperpage}{29} -\indexentry{functions.inc.php@{functions.inc.php}!tva@{tva}|hyperpage}{29} -\indexentry{tva@{tva}!functions.inc.php@{functions.inc.php}|hyperpage}{29} -\indexentry{htdocs/lib/ldap.lib.php@{htdocs/lib/ldap.lib.php}|hyperpage}{30} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_bind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}|hyperpage}{30} -\indexentry{dolibarr_ldap_bind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}!ldap.lib.php@{ldap.lib.php}|hyperpage}{30} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_connect@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}|hyperpage}{30} -\indexentry{dolibarr_ldap_connect@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}!ldap.lib.php@{ldap.lib.php}|hyperpage}{30} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_getversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}|hyperpage}{31} -\indexentry{dolibarr_ldap_getversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}!ldap.lib.php@{ldap.lib.php}|hyperpage}{31} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_setversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}|hyperpage}{31} -\indexentry{dolibarr_ldap_setversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}!ldap.lib.php@{ldap.lib.php}|hyperpage}{31} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_unacc@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}|hyperpage}{31} -\indexentry{dolibarr_ldap_unacc@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}!ldap.lib.php@{ldap.lib.php}|hyperpage}{31} -\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_unbind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}|hyperpage}{31} -\indexentry{dolibarr_ldap_unbind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}!ldap.lib.php@{ldap.lib.php}|hyperpage}{31} -\indexentry{htdocs/lib/mysql.lib.php@{htdocs/lib/mysql.lib.php}|hyperpage}{33} -\indexentry{htdocs/lib/price.lib.php@{htdocs/lib/price.lib.php}|hyperpage}{34} -\indexentry{price.lib.php@{price.lib.php}!calcul_price@{calcul\_\discretionary {-}{}{}price}|hyperpage}{34} -\indexentry{calcul_price@{calcul\_\discretionary {-}{}{}price}!price.lib.php@{price.lib.php}|hyperpage}{34} -\indexentry{htdocs/lib/thermometer.php@{htdocs/lib/thermometer.php}|hyperpage}{35} -\indexentry{thermometer.php@{thermometer.php}!moneyMeter@{moneyMeter}|hyperpage}{35} -\indexentry{moneyMeter@{moneyMeter}!thermometer.php@{thermometer.php}|hyperpage}{35} -\indexentry{htdocs/lib/webcal.class.php@{htdocs/lib/webcal.class.php}|hyperpage}{36} +\indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!attach_file@{attach\_\discretionary {-}{}{}file}|hyperpage}{6} +\indexentry{attach_file@{attach\_\discretionary {-}{}{}file}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{6} +\indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!encode_file@{encode\_\discretionary {-}{}{}file}|hyperpage}{7} +\indexentry{encode_file@{encode\_\discretionary {-}{}{}file}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{7} +\indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!write_body@{write\_\discretionary {-}{}{}body}|hyperpage}{7} +\indexentry{write_body@{write\_\discretionary {-}{}{}body}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{7} +\indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!write_mimeheaders@{write\_\discretionary {-}{}{}mimeheaders}|hyperpage}{7} +\indexentry{write_mimeheaders@{write\_\discretionary {-}{}{}mimeheaders}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{7} +\indexentry{CMailFile@{CMail\discretionary {-}{}{}File}!write_smtpheaders@{write\_\discretionary {-}{}{}smtpheaders}|hyperpage}{7} +\indexentry{write_smtpheaders@{write\_\discretionary {-}{}{}smtpheaders}!CMailFile@{CMail\discretionary {-}{}{}File}|hyperpage}{7} +\indexentry{DoliDb@{DoliDb}|hyperpage}{9} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!DoliDb@{DoliDb}|hyperpage}{10} +\indexentry{DoliDb@{DoliDb}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{10} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!affected_rows@{affected\_\discretionary {-}{}{}rows}|hyperpage}{11} +\indexentry{affected_rows@{affected\_\discretionary {-}{}{}rows}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!begin@{begin}|hyperpage}{11} +\indexentry{begin@{begin}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!clone@{clone}|hyperpage}{11} +\indexentry{clone@{clone}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!close@{close}|hyperpage}{11} +\indexentry{close@{close}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!commit@{commit}|hyperpage}{11} +\indexentry{commit@{commit}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{11} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!connect@{connect}|hyperpage}{12} +\indexentry{connect@{connect}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!create_db@{create\_\discretionary {-}{}{}db}|hyperpage}{12} +\indexentry{create_db@{create\_\discretionary {-}{}{}db}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!errno@{errno}|hyperpage}{12} +\indexentry{errno@{errno}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{12} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!error@{error}|hyperpage}{13} +\indexentry{error@{error}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_array@{fetch\_\discretionary {-}{}{}array}|hyperpage}{13} +\indexentry{fetch_array@{fetch\_\discretionary {-}{}{}array}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_object@{fetch\_\discretionary {-}{}{}object}|hyperpage}{13} +\indexentry{fetch_object@{fetch\_\discretionary {-}{}{}object}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!fetch_row@{fetch\_\discretionary {-}{}{}row}|hyperpage}{13} +\indexentry{fetch_row@{fetch\_\discretionary {-}{}{}row}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!free@{free}|hyperpage}{13} +\indexentry{free@{free}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{13} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!idate@{idate}|hyperpage}{14} +\indexentry{idate@{idate}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!last_insert_id@{last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}|hyperpage}{14} +\indexentry{last_insert_id@{last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!list_tables@{list\_\discretionary {-}{}{}tables}|hyperpage}{14} +\indexentry{list_tables@{list\_\discretionary {-}{}{}tables}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!num_fields@{num\_\discretionary {-}{}{}fields}|hyperpage}{14} +\indexentry{num_fields@{num\_\discretionary {-}{}{}fields}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{14} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!num_rows@{num\_\discretionary {-}{}{}rows}|hyperpage}{15} +\indexentry{num_rows@{num\_\discretionary {-}{}{}rows}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{15} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!pconnect@{pconnect}|hyperpage}{15} +\indexentry{pconnect@{pconnect}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{15} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!plimit@{plimit}|hyperpage}{15} +\indexentry{plimit@{plimit}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{15} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!query@{query}|hyperpage}{15} +\indexentry{query@{query}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{15} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!result@{result}|hyperpage}{16} +\indexentry{result@{result}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{16} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!rollback@{rollback}|hyperpage}{16} +\indexentry{rollback@{rollback}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{16} +\indexentry{DoliDb@{Doli\discretionary {-}{}{}Db}!select_db@{select\_\discretionary {-}{}{}db}|hyperpage}{16} +\indexentry{select_db@{select\_\discretionary {-}{}{}db}!DoliDb@{Doli\discretionary {-}{}{}Db}|hyperpage}{16} +\indexentry{vCard@{vCard}|hyperpage}{18} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setAddress@{setAddress}|hyperpage}{19} +\indexentry{setAddress@{setAddress}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{19} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setBirthday@{setBirthday}|hyperpage}{19} +\indexentry{setBirthday@{setBirthday}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{19} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setEmail@{setEmail}|hyperpage}{19} +\indexentry{setEmail@{setEmail}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{19} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setFormattedName@{setFormattedName}|hyperpage}{19} +\indexentry{setFormattedName@{setFormattedName}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{19} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setLabel@{setLabel}|hyperpage}{20} +\indexentry{setLabel@{setLabel}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{20} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setName@{setName}|hyperpage}{20} +\indexentry{setName@{setName}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{20} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setNote@{setNote}|hyperpage}{20} +\indexentry{setNote@{setNote}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{20} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setPhoneNumber@{setPhoneNumber}|hyperpage}{21} +\indexentry{setPhoneNumber@{setPhoneNumber}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{21} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setPhoto@{setPhoto}|hyperpage}{21} +\indexentry{setPhoto@{setPhoto}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{21} +\indexentry{vCard@{v\discretionary {-}{}{}Card}!setURL@{setURL}|hyperpage}{21} +\indexentry{setURL@{setURL}!vCard@{v\discretionary {-}{}{}Card}|hyperpage}{21} +\indexentry{Webcal@{Webcal}|hyperpage}{23} +\indexentry{Webcal@{Webcal}!add@{add}|hyperpage}{23} +\indexentry{add@{add}!Webcal@{Webcal}|hyperpage}{23} +\indexentry{Webcal@{Webcal}!get_next_id@{get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}|hyperpage}{23} +\indexentry{get_next_id@{get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}!Webcal@{Webcal}|hyperpage}{23} +\indexentry{htdocs/lib/CMailFile.class.php@{htdocs/lib/CMailFile.class.php}|hyperpage}{25} +\indexentry{CMailFile.class.php@{CMail\discretionary {-}{}{}File.class.php}!my_chunk_split@{my\_\discretionary {-}{}{}chunk\_\discretionary {-}{}{}split}|hyperpage}{26} +\indexentry{my_chunk_split@{my\_\discretionary {-}{}{}chunk\_\discretionary {-}{}{}split}!CMailFile.class.php@{CMail\discretionary {-}{}{}File.class.php}|hyperpage}{26} +\indexentry{htdocs/lib/functions.inc.php@{htdocs/lib/functions.inc.php}|hyperpage}{27} +\indexentry{functions.inc.php@{functions.inc.php}!creer_pass_aleatoire@{creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}|hyperpage}{29} +\indexentry{creer_pass_aleatoire@{creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}!functions.inc.php@{functions.inc.php}|hyperpage}{29} +\indexentry{functions.inc.php@{functions.inc.php}!dol_delete_file@{dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}|hyperpage}{29} +\indexentry{dol_delete_file@{dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}!functions.inc.php@{functions.inc.php}|hyperpage}{29} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_del_const@{dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}|hyperpage}{29} +\indexentry{dolibarr_del_const@{dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}!functions.inc.php@{functions.inc.php}|hyperpage}{29} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_fiche_head@{dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}|hyperpage}{29} +\indexentry{dolibarr_fiche_head@{dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}!functions.inc.php@{functions.inc.php}|hyperpage}{29} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_ca@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}|hyperpage}{30} +\indexentry{dolibarr_print_ca@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}!functions.inc.php@{functions.inc.php}|hyperpage}{30} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_date@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}|hyperpage}{30} +\indexentry{dolibarr_print_date@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}!functions.inc.php@{functions.inc.php}|hyperpage}{30} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_object_info@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}|hyperpage}{30} +\indexentry{dolibarr_print_object_info@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}!functions.inc.php@{functions.inc.php}|hyperpage}{30} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_print_phone@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}|hyperpage}{30} +\indexentry{dolibarr_print_phone@{dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}!functions.inc.php@{functions.inc.php}|hyperpage}{30} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_set_const@{dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}|hyperpage}{31} +\indexentry{dolibarr_set_const@{dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}!functions.inc.php@{functions.inc.php}|hyperpage}{31} +\indexentry{functions.inc.php@{functions.inc.php}!dolibarr_syslog@{dolibarr\_\discretionary {-}{}{}syslog}|hyperpage}{31} +\indexentry{dolibarr_syslog@{dolibarr\_\discretionary {-}{}{}syslog}!functions.inc.php@{functions.inc.php}|hyperpage}{31} +\indexentry{functions.inc.php@{functions.inc.php}!doliMoveFileUpload@{doliMoveFileUpload}|hyperpage}{31} +\indexentry{doliMoveFileUpload@{doliMoveFileUpload}!functions.inc.php@{functions.inc.php}|hyperpage}{31} +\indexentry{functions.inc.php@{functions.inc.php}!francs@{francs}|hyperpage}{31} +\indexentry{francs@{francs}!functions.inc.php@{functions.inc.php}|hyperpage}{31} +\indexentry{functions.inc.php@{functions.inc.php}!inctva@{inctva}|hyperpage}{32} +\indexentry{inctva@{inctva}!functions.inc.php@{functions.inc.php}|hyperpage}{32} +\indexentry{functions.inc.php@{functions.inc.php}!initialiser_sel@{initialiser\_\discretionary {-}{}{}sel}|hyperpage}{32} +\indexentry{initialiser_sel@{initialiser\_\discretionary {-}{}{}sel}!functions.inc.php@{functions.inc.php}|hyperpage}{32} +\indexentry{functions.inc.php@{functions.inc.php}!logfile@{logfile}|hyperpage}{32} +\indexentry{logfile@{logfile}!functions.inc.php@{functions.inc.php}|hyperpage}{32} +\indexentry{functions.inc.php@{functions.inc.php}!loginfunction@{loginfunction}|hyperpage}{32} +\indexentry{loginfunction@{loginfunction}!functions.inc.php@{functions.inc.php}|hyperpage}{32} +\indexentry{functions.inc.php@{functions.inc.php}!price@{price}|hyperpage}{33} +\indexentry{price@{price}!functions.inc.php@{functions.inc.php}|hyperpage}{33} +\indexentry{functions.inc.php@{functions.inc.php}!print_date_select@{print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}|hyperpage}{33} +\indexentry{print_date_select@{print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{33} +\indexentry{functions.inc.php@{functions.inc.php}!print_duree_select@{print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}|hyperpage}{33} +\indexentry{print_duree_select@{print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{33} +\indexentry{functions.inc.php@{functions.inc.php}!print_fiche_titre@{print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}|hyperpage}{33} +\indexentry{print_fiche_titre@{print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{33} +\indexentry{functions.inc.php@{functions.inc.php}!print_fleche_navigation@{print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}|hyperpage}{34} +\indexentry{print_fleche_navigation@{print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}!functions.inc.php@{functions.inc.php}|hyperpage}{34} +\indexentry{functions.inc.php@{functions.inc.php}!print_heure_select@{print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}|hyperpage}{34} +\indexentry{print_heure_select@{print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}!functions.inc.php@{functions.inc.php}|hyperpage}{34} +\indexentry{functions.inc.php@{functions.inc.php}!print_liste_field_titre@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}|hyperpage}{34} +\indexentry{print_liste_field_titre@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{34} +\indexentry{functions.inc.php@{functions.inc.php}!print_liste_field_titre_new@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}|hyperpage}{35} +\indexentry{print_liste_field_titre_new@{print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}!functions.inc.php@{functions.inc.php}|hyperpage}{35} +\indexentry{functions.inc.php@{functions.inc.php}!print_oui_non@{print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}|hyperpage}{35} +\indexentry{print_oui_non@{print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}!functions.inc.php@{functions.inc.php}|hyperpage}{35} +\indexentry{functions.inc.php@{functions.inc.php}!print_titre@{print\_\discretionary {-}{}{}titre}|hyperpage}{35} +\indexentry{print_titre@{print\_\discretionary {-}{}{}titre}!functions.inc.php@{functions.inc.php}|hyperpage}{35} +\indexentry{functions.inc.php@{functions.inc.php}!stat_print@{stat\_\discretionary {-}{}{}print}|hyperpage}{35} +\indexentry{stat_print@{stat\_\discretionary {-}{}{}print}!functions.inc.php@{functions.inc.php}|hyperpage}{35} +\indexentry{functions.inc.php@{functions.inc.php}!transcoS2L@{transcoS2L}|hyperpage}{36} +\indexentry{transcoS2L@{transcoS2L}!functions.inc.php@{functions.inc.php}|hyperpage}{36} +\indexentry{functions.inc.php@{functions.inc.php}!tva@{tva}|hyperpage}{36} +\indexentry{tva@{tva}!functions.inc.php@{functions.inc.php}|hyperpage}{36} +\indexentry{htdocs/lib/jabber/class.jabber.php@{htdocs/lib/jabber/class.jabber.php}|hyperpage}{37} +\indexentry{htdocs/lib/ldap.lib.php@{htdocs/lib/ldap.lib.php}|hyperpage}{38} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_bind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}|hyperpage}{38} +\indexentry{dolibarr_ldap_bind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}!ldap.lib.php@{ldap.lib.php}|hyperpage}{38} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_connect@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}|hyperpage}{38} +\indexentry{dolibarr_ldap_connect@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}!ldap.lib.php@{ldap.lib.php}|hyperpage}{38} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_getversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}|hyperpage}{39} +\indexentry{dolibarr_ldap_getversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}!ldap.lib.php@{ldap.lib.php}|hyperpage}{39} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_setversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}|hyperpage}{39} +\indexentry{dolibarr_ldap_setversion@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}!ldap.lib.php@{ldap.lib.php}|hyperpage}{39} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_unacc@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}|hyperpage}{39} +\indexentry{dolibarr_ldap_unacc@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}!ldap.lib.php@{ldap.lib.php}|hyperpage}{39} +\indexentry{ldap.lib.php@{ldap.lib.php}!dolibarr_ldap_unbind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}|hyperpage}{39} +\indexentry{dolibarr_ldap_unbind@{dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}!ldap.lib.php@{ldap.lib.php}|hyperpage}{39} +\indexentry{htdocs/lib/mysql.lib.php@{htdocs/lib/mysql.lib.php}|hyperpage}{41} +\indexentry{htdocs/lib/price.lib.php@{htdocs/lib/price.lib.php}|hyperpage}{42} +\indexentry{price.lib.php@{price.lib.php}!calcul_price@{calcul\_\discretionary {-}{}{}price}|hyperpage}{42} +\indexentry{calcul_price@{calcul\_\discretionary {-}{}{}price}!price.lib.php@{price.lib.php}|hyperpage}{42} +\indexentry{htdocs/lib/thermometer.php@{htdocs/lib/thermometer.php}|hyperpage}{43} +\indexentry{thermometer.php@{thermometer.php}!moneyMeter@{moneyMeter}|hyperpage}{43} +\indexentry{moneyMeter@{moneyMeter}!thermometer.php@{thermometer.php}|hyperpage}{43} +\indexentry{htdocs/lib/vcard/vcard.class.php@{htdocs/lib/vcard/vcard.class.php}|hyperpage}{44} +\indexentry{htdocs/lib/webcal.class.php@{htdocs/lib/webcal.class.php}|hyperpage}{45} diff --git a/doc/dev/php/latex/refman.ilg b/doc/dev/php/latex/refman.ilg index b2c076e6109..e9c5cf44f03 100644 --- a/doc/dev/php/latex/refman.ilg +++ b/doc/dev/php/latex/refman.ilg @@ -1,6 +1,6 @@ This is makeindex, version 2.13 [07-Mar-1997] (using kpathsea). -Scanning input file refman.idx....done (140 entries accepted, 0 rejected). -Sorting entries....done (1078 comparisons). -Generating output file refman.ind....done (289 lines written, 0 warnings). +Scanning input file refman.idx....done (175 entries accepted, 0 rejected). +Sorting entries....done (1448 comparisons). +Generating output file refman.ind....done (347 lines written, 0 warnings). Output written in refman.ind. Transcript written in refman.ilg. diff --git a/doc/dev/php/latex/refman.ind b/doc/dev/php/latex/refman.ind index a70c25100d4..7685f89809a 100644 --- a/doc/dev/php/latex/refman.ind +++ b/doc/dev/php/latex/refman.ind @@ -1,289 +1,347 @@ \begin{theindex} \item {add} - \subitem {Webcal}, \hyperpage{16} + \subitem {Webcal}, \hyperpage{23} \item {affected\_\discretionary {-}{}{}rows} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \item {attach\_\discretionary {-}{}{}file} + \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{6} \indexspace \item {begin} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} \indexspace \item {calcul\_\discretionary {-}{}{}price} - \subitem {price.lib.php}, \hyperpage{34} + \subitem {price.lib.php}, \hyperpage{42} \item {clone} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} \item {close} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} \item {CMailFile}, \hyperpage{5} \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{6} \item {CMail\discretionary {-}{}{}File} + \subitem {attach\_\discretionary {-}{}{}file}, \hyperpage{6} \subitem {CMailFile}, \hyperpage{6} + \subitem {encode\_\discretionary {-}{}{}file}, \hyperpage{7} + \subitem {write\_\discretionary {-}{}{}body}, \hyperpage{7} + \subitem {write\_\discretionary {-}{}{}mimeheaders}, \hyperpage{7} + \subitem {write\_\discretionary {-}{}{}smtpheaders}, \hyperpage{7} + \item {CMail\discretionary {-}{}{}File.class.php} + \subitem {my\_\discretionary {-}{}{}chunk\_\discretionary {-}{}{}split}, + \hyperpage{26} \item {commit} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} \item {connect} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{10} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} \item {create\_\discretionary {-}{}{}db} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{10} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} \item {creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire} - \subitem {functions.inc.php}, \hyperpage{22} + \subitem {functions.inc.php}, \hyperpage{29} \indexspace \item {dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file} - \subitem {functions.inc.php}, \hyperpage{22} + \subitem {functions.inc.php}, \hyperpage{29} \item {dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const} - \subitem {functions.inc.php}, \hyperpage{22} + \subitem {functions.inc.php}, \hyperpage{29} \item {dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head} - \subitem {functions.inc.php}, \hyperpage{22} + \subitem {functions.inc.php}, \hyperpage{29} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind} - \subitem {ldap.lib.php}, \hyperpage{30} + \subitem {ldap.lib.php}, \hyperpage{38} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect} - \subitem {ldap.lib.php}, \hyperpage{30} + \subitem {ldap.lib.php}, \hyperpage{38} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion} - \subitem {ldap.lib.php}, \hyperpage{31} + \subitem {ldap.lib.php}, \hyperpage{39} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion} - \subitem {ldap.lib.php}, \hyperpage{31} + \subitem {ldap.lib.php}, \hyperpage{39} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc} - \subitem {ldap.lib.php}, \hyperpage{31} + \subitem {ldap.lib.php}, \hyperpage{39} \item {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind} - \subitem {ldap.lib.php}, \hyperpage{31} + \subitem {ldap.lib.php}, \hyperpage{39} \item {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca} - \subitem {functions.inc.php}, \hyperpage{23} + \subitem {functions.inc.php}, \hyperpage{30} \item {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date} - \subitem {functions.inc.php}, \hyperpage{23} + \subitem {functions.inc.php}, \hyperpage{30} \item {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info} - \subitem {functions.inc.php}, \hyperpage{23} + \subitem {functions.inc.php}, \hyperpage{30} \item {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone} - \subitem {functions.inc.php}, \hyperpage{23} + \subitem {functions.inc.php}, \hyperpage{30} \item {dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const} - \subitem {functions.inc.php}, \hyperpage{24} + \subitem {functions.inc.php}, \hyperpage{31} \item {dolibarr\_\discretionary {-}{}{}syslog} - \subitem {functions.inc.php}, \hyperpage{24} - \item {DoliDb}, \hyperpage{7} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{8} + \subitem {functions.inc.php}, \hyperpage{31} + \item {DoliDb}, \hyperpage{9} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{10} \item {Doli\discretionary {-}{}{}Db} - \subitem {affected\_\discretionary {-}{}{}rows}, \hyperpage{9} - \subitem {begin}, \hyperpage{9} - \subitem {clone}, \hyperpage{9} - \subitem {close}, \hyperpage{9} - \subitem {commit}, \hyperpage{9} - \subitem {connect}, \hyperpage{10} - \subitem {create\_\discretionary {-}{}{}db}, \hyperpage{10} - \subitem {DoliDb}, \hyperpage{8} - \subitem {errno}, \hyperpage{10} - \subitem {error}, \hyperpage{11} - \subitem {fetch\_\discretionary {-}{}{}array}, \hyperpage{11} - \subitem {fetch\_\discretionary {-}{}{}object}, \hyperpage{11} - \subitem {fetch\_\discretionary {-}{}{}row}, \hyperpage{11} - \subitem {free}, \hyperpage{11} - \subitem {idate}, \hyperpage{12} + \subitem {affected\_\discretionary {-}{}{}rows}, \hyperpage{11} + \subitem {begin}, \hyperpage{11} + \subitem {clone}, \hyperpage{11} + \subitem {close}, \hyperpage{11} + \subitem {commit}, \hyperpage{11} + \subitem {connect}, \hyperpage{12} + \subitem {create\_\discretionary {-}{}{}db}, \hyperpage{12} + \subitem {DoliDb}, \hyperpage{10} + \subitem {errno}, \hyperpage{12} + \subitem {error}, \hyperpage{13} + \subitem {fetch\_\discretionary {-}{}{}array}, \hyperpage{13} + \subitem {fetch\_\discretionary {-}{}{}object}, \hyperpage{13} + \subitem {fetch\_\discretionary {-}{}{}row}, \hyperpage{13} + \subitem {free}, \hyperpage{13} + \subitem {idate}, \hyperpage{14} \subitem {last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id}, - \hyperpage{12} - \subitem {list\_\discretionary {-}{}{}tables}, \hyperpage{12} - \subitem {num\_\discretionary {-}{}{}fields}, \hyperpage{12} - \subitem {num\_\discretionary {-}{}{}rows}, \hyperpage{13} - \subitem {pconnect}, \hyperpage{13} - \subitem {plimit}, \hyperpage{13} - \subitem {query}, \hyperpage{13} - \subitem {result}, \hyperpage{14} - \subitem {rollback}, \hyperpage{14} - \subitem {select\_\discretionary {-}{}{}db}, \hyperpage{14} + \hyperpage{14} + \subitem {list\_\discretionary {-}{}{}tables}, \hyperpage{14} + \subitem {num\_\discretionary {-}{}{}fields}, \hyperpage{14} + \subitem {num\_\discretionary {-}{}{}rows}, \hyperpage{15} + \subitem {pconnect}, \hyperpage{15} + \subitem {plimit}, \hyperpage{15} + \subitem {query}, \hyperpage{15} + \subitem {result}, \hyperpage{16} + \subitem {rollback}, \hyperpage{16} + \subitem {select\_\discretionary {-}{}{}db}, \hyperpage{16} \item {doliMoveFileUpload} - \subitem {functions.inc.php}, \hyperpage{24} + \subitem {functions.inc.php}, \hyperpage{31} \indexspace + \item {encode\_\discretionary {-}{}{}file} + \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{7} \item {errno} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{10} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} \item {error} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} \indexspace \item {fetch\_\discretionary {-}{}{}array} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} \item {fetch\_\discretionary {-}{}{}object} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} \item {fetch\_\discretionary {-}{}{}row} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} \item {francs} - \subitem {functions.inc.php}, \hyperpage{24} + \subitem {functions.inc.php}, \hyperpage{31} \item {free} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{11} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} \item {functions.inc.php} \subitem {creer\_\discretionary {-}{}{}pass\_\discretionary {-}{}{}aleatoire}, - \hyperpage{22} + \hyperpage{29} \subitem {dol\_\discretionary {-}{}{}delete\_\discretionary {-}{}{}file}, - \hyperpage{22} + \hyperpage{29} \subitem {dolibarr\_\discretionary {-}{}{}del\_\discretionary {-}{}{}const}, - \hyperpage{22} + \hyperpage{29} \subitem {dolibarr\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}head}, - \hyperpage{22} + \hyperpage{29} \subitem {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}ca}, - \hyperpage{23} + \hyperpage{30} \subitem {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}date}, - \hyperpage{23} + \hyperpage{30} \subitem {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}object\_\discretionary {-}{}{}info}, - \hyperpage{23} + \hyperpage{30} \subitem {dolibarr\_\discretionary {-}{}{}print\_\discretionary {-}{}{}phone}, - \hyperpage{23} + \hyperpage{30} \subitem {dolibarr\_\discretionary {-}{}{}set\_\discretionary {-}{}{}const}, - \hyperpage{24} - \subitem {dolibarr\_\discretionary {-}{}{}syslog}, \hyperpage{24} - \subitem {doliMoveFileUpload}, \hyperpage{24} - \subitem {francs}, \hyperpage{24} - \subitem {inctva}, \hyperpage{25} - \subitem {initialiser\_\discretionary {-}{}{}sel}, \hyperpage{25} - \subitem {logfile}, \hyperpage{25} - \subitem {loginfunction}, \hyperpage{25} - \subitem {price}, \hyperpage{26} + \hyperpage{31} + \subitem {dolibarr\_\discretionary {-}{}{}syslog}, \hyperpage{31} + \subitem {doliMoveFileUpload}, \hyperpage{31} + \subitem {francs}, \hyperpage{31} + \subitem {inctva}, \hyperpage{32} + \subitem {initialiser\_\discretionary {-}{}{}sel}, \hyperpage{32} + \subitem {logfile}, \hyperpage{32} + \subitem {loginfunction}, \hyperpage{32} + \subitem {price}, \hyperpage{33} \subitem {print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select}, - \hyperpage{26} + \hyperpage{33} \subitem {print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select}, - \hyperpage{26} + \hyperpage{33} \subitem {print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre}, - \hyperpage{26} + \hyperpage{33} \subitem {print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation}, - \hyperpage{27} + \hyperpage{34} \subitem {print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select}, - \hyperpage{27} + \hyperpage{34} \subitem {print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre}, - \hyperpage{27} + \hyperpage{34} \subitem {print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new}, - \hyperpage{28} + \hyperpage{35} \subitem {print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non}, - \hyperpage{28} - \subitem {print\_\discretionary {-}{}{}titre}, \hyperpage{28} - \subitem {stat\_\discretionary {-}{}{}print}, \hyperpage{28} - \subitem {transcoS2L}, \hyperpage{29} - \subitem {tva}, \hyperpage{29} + \hyperpage{35} + \subitem {print\_\discretionary {-}{}{}titre}, \hyperpage{35} + \subitem {stat\_\discretionary {-}{}{}print}, \hyperpage{35} + \subitem {transcoS2L}, \hyperpage{36} + \subitem {tva}, \hyperpage{36} \indexspace \item {get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id} - \subitem {Webcal}, \hyperpage{16} + \subitem {Webcal}, \hyperpage{23} \indexspace - \item {htdocs/lib/CMailFile.class.php}, \hyperpage{19} - \item {htdocs/lib/functions.inc.php}, \hyperpage{20} - \item {htdocs/lib/ldap.lib.php}, \hyperpage{30} - \item {htdocs/lib/mysql.lib.php}, \hyperpage{33} - \item {htdocs/lib/price.lib.php}, \hyperpage{34} - \item {htdocs/lib/thermometer.php}, \hyperpage{35} - \item {htdocs/lib/webcal.class.php}, \hyperpage{36} + \item {htdocs/lib/CMailFile.class.php}, \hyperpage{25} + \item {htdocs/lib/functions.inc.php}, \hyperpage{27} + \item {htdocs/lib/jabber/class.jabber.php}, \hyperpage{37} + \item {htdocs/lib/ldap.lib.php}, \hyperpage{38} + \item {htdocs/lib/mysql.lib.php}, \hyperpage{41} + \item {htdocs/lib/price.lib.php}, \hyperpage{42} + \item {htdocs/lib/thermometer.php}, \hyperpage{43} + \item {htdocs/lib/vcard/vcard.class.php}, \hyperpage{44} + \item {htdocs/lib/webcal.class.php}, \hyperpage{45} \indexspace \item {idate} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} \item {inctva} - \subitem {functions.inc.php}, \hyperpage{25} + \subitem {functions.inc.php}, \hyperpage{32} \item {initialiser\_\discretionary {-}{}{}sel} - \subitem {functions.inc.php}, \hyperpage{25} + \subitem {functions.inc.php}, \hyperpage{32} \indexspace \item {last\_\discretionary {-}{}{}insert\_\discretionary {-}{}{}id} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} \item {ldap.lib.php} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}bind}, - \hyperpage{30} + \hyperpage{38} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}connect}, - \hyperpage{30} + \hyperpage{38} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}getversion}, - \hyperpage{31} + \hyperpage{39} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}setversion}, - \hyperpage{31} + \hyperpage{39} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unacc}, - \hyperpage{31} + \hyperpage{39} \subitem {dolibarr\_\discretionary {-}{}{}ldap\_\discretionary {-}{}{}unbind}, - \hyperpage{31} + \hyperpage{39} \item {list\_\discretionary {-}{}{}tables} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} \item {logfile} - \subitem {functions.inc.php}, \hyperpage{25} + \subitem {functions.inc.php}, \hyperpage{32} \item {loginfunction} - \subitem {functions.inc.php}, \hyperpage{25} + \subitem {functions.inc.php}, \hyperpage{32} \indexspace \item {moneyMeter} - \subitem {thermometer.php}, \hyperpage{35} + \subitem {thermometer.php}, \hyperpage{43} + \item {my\_\discretionary {-}{}{}chunk\_\discretionary {-}{}{}split} + \subitem {CMail\discretionary {-}{}{}File.class.php}, + \hyperpage{26} \indexspace \item {num\_\discretionary {-}{}{}fields} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{12} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} \item {num\_\discretionary {-}{}{}rows} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{15} \indexspace \item {pconnect} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{15} \item {plimit} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{15} \item {price} - \subitem {functions.inc.php}, \hyperpage{26} + \subitem {functions.inc.php}, \hyperpage{33} \item {price.lib.php} - \subitem {calcul\_\discretionary {-}{}{}price}, \hyperpage{34} + \subitem {calcul\_\discretionary {-}{}{}price}, \hyperpage{42} \item {print\_\discretionary {-}{}{}date\_\discretionary {-}{}{}select} - \subitem {functions.inc.php}, \hyperpage{26} + \subitem {functions.inc.php}, \hyperpage{33} \item {print\_\discretionary {-}{}{}duree\_\discretionary {-}{}{}select} - \subitem {functions.inc.php}, \hyperpage{26} + \subitem {functions.inc.php}, \hyperpage{33} \item {print\_\discretionary {-}{}{}fiche\_\discretionary {-}{}{}titre} - \subitem {functions.inc.php}, \hyperpage{26} + \subitem {functions.inc.php}, \hyperpage{33} \item {print\_\discretionary {-}{}{}fleche\_\discretionary {-}{}{}navigation} - \subitem {functions.inc.php}, \hyperpage{27} + \subitem {functions.inc.php}, \hyperpage{34} \item {print\_\discretionary {-}{}{}heure\_\discretionary {-}{}{}select} - \subitem {functions.inc.php}, \hyperpage{27} + \subitem {functions.inc.php}, \hyperpage{34} \item {print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre} - \subitem {functions.inc.php}, \hyperpage{27} + \subitem {functions.inc.php}, \hyperpage{34} \item {print\_\discretionary {-}{}{}liste\_\discretionary {-}{}{}field\_\discretionary {-}{}{}titre\_\discretionary {-}{}{}new} - \subitem {functions.inc.php}, \hyperpage{28} + \subitem {functions.inc.php}, \hyperpage{35} \item {print\_\discretionary {-}{}{}oui\_\discretionary {-}{}{}non} - \subitem {functions.inc.php}, \hyperpage{28} + \subitem {functions.inc.php}, \hyperpage{35} \item {print\_\discretionary {-}{}{}titre} - \subitem {functions.inc.php}, \hyperpage{28} + \subitem {functions.inc.php}, \hyperpage{35} \indexspace \item {query} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{13} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{15} \indexspace \item {result} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{16} \item {rollback} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{16} \indexspace \item {select\_\discretionary {-}{}{}db} - \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{14} + \subitem {Doli\discretionary {-}{}{}Db}, \hyperpage{16} + \item {setAddress} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{19} + \item {setBirthday} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{19} + \item {setEmail} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{19} + \item {setFormattedName} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{19} + \item {setLabel} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{20} + \item {setName} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{20} + \item {setNote} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{20} + \item {setPhoneNumber} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{21} + \item {setPhoto} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{21} + \item {setURL} + \subitem {v\discretionary {-}{}{}Card}, \hyperpage{21} \item {stat\_\discretionary {-}{}{}print} - \subitem {functions.inc.php}, \hyperpage{28} + \subitem {functions.inc.php}, \hyperpage{35} \indexspace \item {thermometer.php} - \subitem {moneyMeter}, \hyperpage{35} + \subitem {moneyMeter}, \hyperpage{43} \item {transcoS2L} - \subitem {functions.inc.php}, \hyperpage{29} + \subitem {functions.inc.php}, \hyperpage{36} \item {tva} - \subitem {functions.inc.php}, \hyperpage{29} + \subitem {functions.inc.php}, \hyperpage{36} \indexspace - \item {Webcal}, \hyperpage{16} - \subitem {add}, \hyperpage{16} + \item {vCard}, \hyperpage{18} + \item {v\discretionary {-}{}{}Card} + \subitem {setAddress}, \hyperpage{19} + \subitem {setBirthday}, \hyperpage{19} + \subitem {setEmail}, \hyperpage{19} + \subitem {setFormattedName}, \hyperpage{19} + \subitem {setLabel}, \hyperpage{20} + \subitem {setName}, \hyperpage{20} + \subitem {setNote}, \hyperpage{20} + \subitem {setPhoneNumber}, \hyperpage{21} + \subitem {setPhoto}, \hyperpage{21} + \subitem {setURL}, \hyperpage{21} + + \indexspace + + \item {Webcal}, \hyperpage{23} + \subitem {add}, \hyperpage{23} \subitem {get\_\discretionary {-}{}{}next\_\discretionary {-}{}{}id}, - \hyperpage{16} + \hyperpage{23} + \item {write\_\discretionary {-}{}{}body} + \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{7} + \item {write\_\discretionary {-}{}{}mimeheaders} + \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{7} + \item {write\_\discretionary {-}{}{}smtpheaders} + \subitem {CMail\discretionary {-}{}{}File}, \hyperpage{7} \end{theindex} diff --git a/doc/dev/php/latex/refman.out b/doc/dev/php/latex/refman.out index c8b7589b290..ce3f9316f4b 100644 --- a/doc/dev/php/latex/refman.out +++ b/doc/dev/php/latex/refman.out @@ -5,12 +5,15 @@ \BOOKMARK [0][-]{chapter.3}{dolibarr Documentation des classes}{} \BOOKMARK [1][-]{section.3.1}{R\351f\351rence de la classe CMailFile}{chapter.3} \BOOKMARK [1][-]{section.3.2}{R\351f\351rence de la classe DoliDb}{chapter.3} -\BOOKMARK [1][-]{section.3.3}{R\351f\351rence de la classe Webcal}{chapter.3} +\BOOKMARK [1][-]{section.3.3}{R\351f\351rence de la classe vCard}{chapter.3} +\BOOKMARK [1][-]{section.3.4}{R\351f\351rence de la classe Webcal}{chapter.3} \BOOKMARK [0][-]{chapter.4}{dolibarr Documentation des fichiers}{} \BOOKMARK [1][-]{section.4.1}{R\351f\351rence du fichier htdocs/lib/CMailFile.class.php}{chapter.4} \BOOKMARK [1][-]{section.4.2}{R\351f\351rence du fichier htdocs/lib/functions.inc.php}{chapter.4} -\BOOKMARK [1][-]{section.4.3}{R\351f\351rence du fichier htdocs/lib/ldap.lib.php}{chapter.4} -\BOOKMARK [1][-]{section.4.4}{R\351f\351rence du fichier htdocs/lib/mysql.lib.php}{chapter.4} -\BOOKMARK [1][-]{section.4.5}{R\351f\351rence du fichier htdocs/lib/price.lib.php}{chapter.4} -\BOOKMARK [1][-]{section.4.6}{R\351f\351rence du fichier htdocs/lib/thermometer.php}{chapter.4} -\BOOKMARK [1][-]{section.4.7}{R\351f\351rence du fichier htdocs/lib/webcal.class.php}{chapter.4} +\BOOKMARK [1][-]{section.4.3}{R\351f\351rence du fichier htdocs/lib/jabber/class.jabber.php}{chapter.4} +\BOOKMARK [1][-]{section.4.4}{R\351f\351rence du fichier htdocs/lib/ldap.lib.php}{chapter.4} +\BOOKMARK [1][-]{section.4.5}{R\351f\351rence du fichier htdocs/lib/mysql.lib.php}{chapter.4} +\BOOKMARK [1][-]{section.4.6}{R\351f\351rence du fichier htdocs/lib/price.lib.php}{chapter.4} +\BOOKMARK [1][-]{section.4.7}{R\351f\351rence du fichier htdocs/lib/thermometer.php}{chapter.4} +\BOOKMARK [1][-]{section.4.8}{R\351f\351rence du fichier htdocs/lib/vcard/vcard.class.php}{chapter.4} +\BOOKMARK [1][-]{section.4.9}{R\351f\351rence du fichier htdocs/lib/webcal.class.php}{chapter.4} diff --git a/doc/dev/php/latex/refman.pdf b/doc/dev/php/latex/refman.pdf index 711281f67ce5161649dc6c4d4a5f94e04bda7afc..0fd6161c44ca01cef56d97884e4b029c56ed620f 100644 GIT binary patch literal 176239 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

    ovrbr^qCZATDPiy*Y7f) zP1mxb4?g?RElB+Q;ydBs+!jUkNV4bJ)1ogX&Pk3Fs+jzvTV!2AiG<`r9-)#Yw~n91 zCTE903=y-rf{gy!}Mh>X(nYw;X6( zcJPC{k?u)@lqZkS3%%w$>1F=ffCMgTg66;bDN8LmtTpTqI)4q5a8{;^jv+ zpsta2L1dRGvxTxZB#74091Ux7C|m-_nP_OhKj@mEu_?L$kZ00yf2a(R{+^CYM3wOL z_q37lJ=zW76*+Eb98D%5WJ33a_cU4q^vbv%gHZwqn;4%nu1BlnN8e*yk5*le-ZQR8 zui%8@3x<63B2QF|LB9^I`VPKNE5<~x4EY!Zo4`WN_#WeWw8}O39{ATZIq8Kc@Sbr! zdaVk)XUIpZBtYM1$VaOUK<^pXqj$WOCNg@T5*c19wVf;7*AQ+$oWP zJ4ID?GT;(J3DKvSmj!JXQ#(lsOSeMQDJdwfzwVJPY{h+G0E{}a(5T#H&h4~d3)aR88mbtj!!GwK^BPiwmCCELrKWT_*SZeg`NyAHPvL4xB-k&2#i~dP4 z#^XeIX_OQmnlpr#2FL^(D~)Dwu=O}$lC&WPN`OEW!n&Yl5+o>pAV5SCH;$YI6OfO{ zHggtW4QO595n>uK8{r8kJ_N~su{m}zaWxlo53Jj6%|5UIl9 zS&vkWAsXAN0AisieS#1Y+F&l?VaY+eCJ+_j_*hnTNMO+fR@*jj23eWzu`P!=1`GL+>+ zRe2h4wqdo$u|JuNNSdq2mS`|LB$R*!00*rB6g)=~ID!ar0&N~xKRTF2W7j9Z0YE|< zd`kr3AkmCS&+0jVhyk%5rl*0tpHRA4^9E9a{#~uJEF0z3J^3D^d-V@K(Y=d4YFh?(GDeUK}q22KI$DTN=JHPoPQ9Oms9qOt1~-~d{P&?Nw@f{Z7G6Try>eTs|^z(lhC zJV%#Ap&}+WCk>28DC4BHT*N`F2yo_*U2$4#31?$FcsIC1cwkfX9agq!5B{KlCQjpQSa zV4eA=tqIX7ESO~ozJY^46LR0NU@@cGK|J;K{@ zRzl%N1AvJmx_AD|IzxzefR_)2;i2;?_@TschvCPNj9m?Y98AQhNQC18WvP%a3}rO5 z*f$&>EUR=T#s+#~hMlt(g{r`aMX4Y_q(S@uPBuJj2}t1p0G)Mr9mo7U+4Tkh$4W!x zgNaNl#3n$<3aTeTRDfw}kHh9>igu5{3H{4bBY>}jitHfx1&B1Lq6fDQZBNuF8;g0RniMkk>*GQ3&t>P80Hpv^1avBp zBY;VR)Bso@MC3|ov#!^fh%V@9N49nWocPEG)`T;I1hH0BNJfG%j3)B>#!>69!Q`mW zGNJ5>hIo8{LkA$Du+%^_)M^O0Z{YckW2rIO+_dB@JEEauO$)KTfck`Ugm$bU>j+?X zK(IQFV~q*T$~Hd;+Mrl)nxM%6XekZa28D!~Ciu!)xN#gEOwW^+!DeUDh9o1vob3C|PpNNbHFgExj~Y-<7t zZ)<~vMgUEq4Tl*4ogk3MCV(a&jU%SaRDcbMaCVgxL|xFf)BsI@vKP=Kp5_x1P~cC4 z^%%z(qOt1}p#7)?ykE$Cq!EHcxKs-)aSassWBue9Lo#-K0s;gM@Tl^RQQ1jAp({uM zLERQSU)GP?F+^k6DHu9Bpi?oNVqirw&JGQfawoDrYs_Z{+cY6V=dA`D{W$PC8RxBr z2J+ZhH;0(xd^GG4TSo^&M`^&(j{`M2BpD7A!g$PECQZOLNeBTvc9iIWkOJ7-1n}1p z!iyFm8VAaR*%+e1v)Gxkp>>8zvxu-sht?S$6ak4e4sV6Y;-DeM{u9wq{S#=sVbS2U z9YL#yGxsZtq1zcJK50F*Mz zRVuq(s5w}X+O`1^ow$-URV!!phrBZ`Dm8VH3$%5S;S7pfEUl2AMQwYTzG6mpqL-OX zk;%&1C9i*M=)0oz!sDCJa%B;fk7hMO`PG*B0+F?MLtmsHnHVYY;^1jZ_k@Pmo--@> zl&?H(e{j`fcW$)%21%)(UncY0DKE_bQQuw=Mp)PGaXFpud~e8yz3v`bo3Td)7F%ro zsI~(qYj)ml%S3)tgI&E(wZmd`qoRU5@Af4(apbM!AWyPa7tuA%53DoYs}v!1yHK@p z|FVf;3GqA!%M(3*7u3|}yDN3AFJAc|L-Sx-%(D9lcTc&Na~Y(+SeNH$?X-LD)~(w* z=RZt36XMDl+4DG7^I~C2wHF1q#3|#zW3OfdJC3Ud*GWW7(NkH$<>fztH^Fh8gjqPp z@p(UEcrWm`Ppl#Ad2_=nziG~l48MBEYTfItmc+jEVlKH=YdThBMjn#!k6sFm`-E!p|5SH#xOPf7lzd+X=b-t1!w4%+Y-U)}2a z@Z8Cd5A|p7ii#wy`sB?iFWQz7e>$*_z-bWjIO%ZH*ZEr1Wa0O5O)_nT_&ZBNx>rAw zZ=AUJBJV8^*H?>odn=?gH7=0IzU|-hv|7>m*5o;XirDFHmh}b1if--x zu2v3yYOc7hq`fz?dfU2G>NPQgxrOuB+vg{zMA_yxQrBeVsv{+ zw9ldAYFX1o%&Oea^T{1Qw!oTyZQuS`S&`W$cRev0bC>k=y2x)%6#TuKD_*}oFRS*# z+}IubD`azBu}k>|kG;P(+4NC;#8=&u#reUjE|fOp@b%n$vGogw++NT_ zg7X4EWL6n|QA&aK_2I_DLk zgiEAx8Nl}#Ot^^Pkp4MJjiA3HuLHfJqaD4Xa}>SOegM4EucyUe!qs9h;R2wT_Pr6v zYPK0_a8OW>Xk=kNz`}(fGt~a0g8T6ztC=H4v}qhVM*k%Oh-0wNK{^z|;V4T>rxQf* zWs)}Q9t^X7V4I?5STsa{0aqIq4WSZAY>CFMOFAqX6p!QnAYp`@AF+^k6CmotKU>1j+ z`G;r#5`(&4)*mQSMwE7N{U@^qz5?nQIXr6+c7{ka>!LB`(AcJ`8J;!p73dWs^uq(X z&_ah6wnSq$RW&3U0T>CiAZ;)-YXpeYK$QSHv&L?G5~XF4zCw8+#B@KzEsH{KT5J{D z)07}vYi&q00IDGsJuDhH(&GpkG1s!t2tzfo9gD8V0B#u!)3utNp-vP(~gp@=%?(wAGM`!owhBpC(t zWhgR3^YvKk)Jga7h6ev9ff>yqL=2w`quv#>*e~3T4}4O%4~Ptt@+JuILdboHQ`v@nPt1@BpOH8hV4OJDNV3o58 zFP+nn!|5NDxng6P3BIJ6$K=@JY8(CyGhXfcA(r2nvgO^mCv#o3)D~qn*^y4>l|ZY^ z#aa2UrKiYB2p9LPd)E@&>?$v>Tp6T0v!UHNIsM*DHEx4|eLTH88#wLP&ZTVh;=e9b zr?=JrUi&TG!*v78zJ2pfP1M>_QzUD!PU=z@zxXCQLjNw@RL&mW==_@8`|He9DHB|5 zgpxgUGWLfR#Yb%kJj|PL*mr8W$wRKaln}YAzoo0T$L$k8;43_H0^#$v>$2JH-)3B1 zk~#H0e~QJTqEp<71L}%)Qyx4e#OtgV+Z=~`FJks1_U?v-r?!&2Vl5PJ|5CCswrlCd z>TsLbi1cROTCwf!S=Gbm_gGcGCM+*f)^*{Tny$CDLP9p!%B=2u|GQ9P?t2nNDRQ^( z;QKPELGv$LwQJ|%U6j?*+>W%XP-mAlixH>TF32(#j9rpd?0$atApym0`y9Xft=Bh> z_;FCDz&PAZ8T(Ov?g~Q3%cyx5qXs*hiYu3uO_A}h3T<5{6*ZU^cRJm_(9fhZ(%!CZrk>w6 zamefMYkd56`hvOCcQcE<)#a4Lmdq&$&`d3VeX8|!$SGr|z;gHWm!)4{e`7Qa{hEIP2SU+3}X#=9_`orC0|aPtC2a^Rt&zqx-AY7&mqlEvUks<9{Wk z@@}?n`)j8%u7ZsHH(g0VxfR`stI`_y-W&Yx(EBB}Mv`g&Bn1=b7Zec&SmXbFLclnCl0)IDYw0ia|A%`AP{P9ekPzq} zt1#Z)@E^$G9RT*%@Nf+*#wU~v7Y>P_hEu}ewgD7OSTNa>f}yN|{;YxY54=1AFhLQ4 z9+c29Kc67DXg~lt6cbDdrTsi|Ap9$g9OOm+awu9=m|#Tpf*vUSU-Uo1BBzA5V}-HC*kEiib{Kn%17;a!ImQv=gmH!^K=$;fz;wcI z@_>KRMP>YT==XX0`FZ+b{_ePI6GkVQDI39KTF!*C;pAcHBSkoz0iIECOnkv zMF}K_`eVXI-G@Gu3O`cwj~}V2jdAkwgG~)T0YVag>=h!8v39+vtAjAK6^fQ!04#2d zXGADE2BI)guzWm1ss5B84_L`z6#C8_x*#m4;3&p@L%qCVRnZn1`so3bK(wV`4Fphq z{Gh`!oFqeQIF#b!hi*mj!UU2%(WdmG!0MyWmOE|hq6HlmL0jvg^o2eAj_er`4jViI z?H4j^%3xo{o)4Nw29KE9|ZbzIrRTn1p4$Rq(3}6`sjSZ=o@1UheR@_4>qO`HvVI<@$e{9 z`gcs}-!c8;JEp_mF%I{|ET!MhivD#g`q!=g__`J23&W!VBLc$xf&-#3R`fmTKp*Nr zAL{VOP>10$PV^7$eW{^A7+C*-aDI6NgkjLs!y!Yae@y;kESY{=^6(|dv}qv2;WIQ1 z@U+oj3Vkr;kHPTh=xY_@NB@o={X2})g0|WGhQC9BX$Yd z%P-Q;i-MujCn179FoHfX;*Wt5!y}^TAHo)gNr)Qy^Pk!eHwLKX|Fm#u8OcA*7JI)y zN|>4fHNcB*K>VT6p$v-dflBM>@X@R#X_{H{|1_bPZeR%70Va6Fb^nZA47;w{VCxLI zu0V1CrV9PtDBl&>q*?b}{p{@?&X|-@cxN+e!551vc3~{3cU0?Joh*vY?Cbtm?#j-*=FV@CQz*Am(gep-)A;tj@3*ZaWqz6YA9{|*Tl)$g;jwJKyzz?D6|Ylk zHp%(vCrTw;6*4H8q_SCYYVK9CNcPG29;(@7b73LH{{Gd!yZn!CZ|CDyc$Hu;e)_k! z)%CrXJe%Yt8#j@NnYTOBjY2OiRIu<@T)a~}{y^Qv`mfx4lFP;Cz7ot3n&uTcA0B4PIQL33iIVA7oB-oJmp(6kg92%rP%2w9lkp@yv!rx7+62^TF$s zZ@kixapKXuixc+OHvCe;2^$mNtTdH=ex~x9)QXGB_665M#1--rl1n}W9yc&KN_Lz! zPq}l}?xyH^rD&_bqB^1F5mM*!kE*F^Up(^jX>+DR>#g<`)GhvNUZ#b9+qCF?*^>=% zl4s{h@%~JnSg>aOeY-=dcKNC2&egVhbs3#{q?FUEr!Bdk^wQSJr7QXgSIehtv1$3l zibdb*df)Er32TlZ_mh5@y)(ITD?3MPg>HlC<427?r31pDvsLotckB~r;ac)@?a|LS ztADOM&Zn{b|7-1BpuMcB1U{qFnh8r+X*sS+@8mQAc_07#f2-I+@d*e5K0*VzaDhv} z1uhptG;@-CRQ4Ft21~IV%@@|7Bx*EhW{O6pMv;z{4?-)n#7Dm7x6k9d-`V@SH&<)! za>>2tJCA+#*=O&4_TFco>8lU;!Om-+_(=JdUCWl=*ZQk>pYz>u^ZLL4!|iv!zxMH) zp4qu((Tmp{RJ-TmVJF>t?z(-?nD)7m?SKE?ov+?{@eg0F)mI&N_7$UkdgQ+Exb@;Y ze${&K=C(aAxMa*lZH=kFS#!h3);$0AwO3EQbJvZZIQ8a@zgzX%roWtj=y@0a<@mJ| z-u2;I7VouS{Lfwo zE}76+``D>(T)FhdSGSJ8`myJ`zQ3yF#Si}FgtMQz>+!br|NK(l-k;g+w`csvPk!8c z+w|)eG^W4jcc)zT(ekE;_t|I4Em!r_eqR3dM<2g?>*6b4I_;1XUR(42Z!cfnzVz8W zc3!__cJsM^`_aB1*!ztAfA^{1jCx__;;XJ*{N#7GfAjs%UirWtla_Vv+K6B4K<%c%R zIc(ZJf4*qKrylvk%1=J9>6!aK{=Neay=_C+gD>{)bLIH6w|x53t4F?Zb7T9iOCG%Z z^lyCO`?p>@>L;K7-%(SSy!z^4V>-U`%I`<7{KoYY?mv0#S*L!xfBV_{ox0zqUvInq z$^V=`{)Uz3bierz@0_>x;h!J;V9Pa|#=ddktopij$3FA&jZa=so;UCK>cTxfIQP71 zmw$WYMO{z5E00!Ecx7i-L!HcTrK0a~d z-haCN#CL66c5~OA+mGLRZrj%9|8&ggd$wFN>Z*}Do^AZ{@~d9C?j4`m*f;H{$tUmF z?e-;S{oP#)Ht+ai`J>xEwfMeY+XZ+~gc@*8$P`qD!$I&AW!FTHu@#K%@{yZ(-2I?voN zdFi_T`i<+yJ~ZXytAB9n!QcDQjK>bywCucX?R(s`?UmopYoE7$!QA&<({|vrJ1#tA z!=pPsam1v5`S5ps^>W9pA3A9F!}t2$>F2D!e&zc3=zTll7 z*m~cRvyVEk`<)M8u>QKU`Wj!}aM0uHKlXChIgi}1@_^GWc>RUTuA2A8|NLUb;<0x= za`~2{4_x-#^snuG$_wWn{@H&&<(Cg!HfP$K|9aqS6Q{lBmi1S>en8uOZ|?EhgncH? zJN<3PpFZ_%mmmJh-djHXm9@sAA=kHc)YM;<_b&2?b9-jds9|8pEE+Y;8<|BTL{|-1 zG>$!C+?2x)$D%R**aC}2$>*U=Lxc2CPwM3yknh^!USbIQ zBpq%)=Cazb_K?%Ij&IP}^~Uzh!pIc-K*28+VgXCxwRw4tOk(v)K3i?F1O@pu-r9(z zkm6R-eYnnvKXU&P67BwVq%{d=oZGJXL4}z0rhjXLN_r{jyffsT?F@NjJ3}5=$^PrU z`zXj{P#3tE62w~^G=xTy;m383Pu>3;lKz&t=PQHqB$xb~AGGY6{w;%+Lk8Olcl@RE zO2{}|37LbrM&`?XCg1#^lKAs)LvJOd_2r_U?>wa0+59)I)zqOeL zvvIp8UGZ|u469*=)sXvGUNv*&F~_i{;{2dK9CnC7Id8@Nk`5X?xM^ns#}J*BbGt8C zio+B__F%36IEX!cL!|*-o(fn)w=fCX>PgVQw<9N1iMKPGfk+}O`2lT#3PVV6GLyuO zTF_~QQ)%QI9{C;)1zP?@>wB5dzf>$g@FORDTO4hA*~>jR51!{#l^j=dRFomM2Xhuq z0AG1D`2_rLVV1F%iP)bJ8}8eH=t{K(-;*OndAT#l?uf6XC(kE_wIAR8Nw}y7d!XA? z4*71~QcAa6jB#i$0??t#IM zdTyK%O@aiU)H^^MKp*JVeN9&heZx(iZiiSUzfWVg9`szdGEdcQwq!mnxq;TrJ3u?o zlbeg`DO)9<06ptTA{70q2_1P+6^S;&D;i^@g&<#B>p8M@Io8whe7bd6KA(_18!wLF z$ksEkd{1`8Tp)xa1fTl7xF^r-18RNF_guH`YYL#xCocecp=7#ss5JmO@KsOQB6%^F z^^~I4C(4fy1{UC%Lj>O8IRGE=T+U6y@qIOTwys`#$OaF?4G@JZNE>^`C^+CEaenKj zkcVyU5E7Tq1MUS;U~BOY&(>N?dBE+mMzR~-5>OGDw*zDVY#BU-I@@aLPRn3+a7Jtg zIQ?F8M<0B4ey#;@)*T+=aN=l1V;p|O_!&L(#qT-2f#AidS|vyUW(a&L`%>ThR>WkV-a3}k!>WO4%bd%nG|{LDJ$W|C8F;!Hn$U2wMTvc<}ypi@xbx4i;DatjmJSTu~F zAiQOv#t{@G6cATOE?{?hIj6@Vz>xHf1>?vt;bKxcjEv&%SgF2b5U=&B4>CqLXQf>U z{+%zMz2rzX0xakcT7CLKupf?U{=>=LU3mP2ULAJ`{rFNxujOPC@dJqG1=-xR;|K6w zj$|~uf1z_ivhRBq&dfG{*wqDJv#sxA{FqfiCAV4RDO*Qeg%tz{uLcd$gAfj(-$QjF zeR%y~us&Gfa(FzX7)~J@URfM!6qc431&6A^8kZx7DV{8g&2!d6^}(u>F?om@G8M0c z4l-Fu5mFBK_KGJfnH|UuG1MS3O1SekNFTz2UG(Q*OE1CW<#11MkUj*Z;Z!t84MAzR zTR2D!L1{RO4^l%=8aa94vdC2YVQdhTRzPVb^8Dg1Kxrki#NrxIX(evZ;u^qFiR`Ah z1}NnP`5_jr0!q0ZKST{#m0%|+#+Re>z$Oc!aAY1tR$&E4<$-m~pEYCA^v3+2u8gOI zt(<-sU?-8L((jJH$$bIGN%S{CepD^=H$i*2)jC{%gUThbdtsll7;zWrcCrj{cPv=Z zw|IU!!>~Z=OEyK4P5B`gxrb@clmbfp-y%X?<~cT&FJXFQ_06|oQl#C;moODcedMO% zTQLE0J?BdRTb^Ri)seN1bnRQo;zs%6OJp^@MjYXh4HXPe9zwuzLGck{Q3J|Rq`O`m z7f|_q4!O52}hf3tL zZgd9ct%h6`;iHvcLG&F9->gJl;~O!FY830fgnoENKHm?Ms3y}A&RC5qmv6-+s>vkE zOu|1@8j)IN66CqcUrQZOd^Nij~z-$W0~%P_qElAHcNVDazx1Q=ZLfP%K)`!>z7t=JGvUlD8xW#%2IO;Sh-^tvYVRA_1=KM;ThGLOwk2uq>rlMBKCs`}*q zj$k<*h1Lc{4KvPtZ`ue*f08GlwHCT~{t533s;a#@$lfzJFHt~Fiq;&&N z!7{8{F*BZq3A4zza@Z}$-I{=fm(eoXW zT9r@U64>H^ANVQ@?a4Yadg(R)9jr+E&S)*L-yL$e)iwZd+Me$sAEPc`*nx}?Rr$gS zLOgjwHA4sqMJ8F;0~)anXh5KKpvu&9FD z?Kw)-AV~Y*lPrWl7AgwJqW)!_G8t2VL|LYI94l%stCVrdg7&gV@pP-(gJIb&l6Sd~ z4CFhDSk7~Wf%yx6a_uFpZ$bO;U9_A$Cp8@aL8W-Zh8_T+l8MY@ilG8)RLOG_GX#rN zi8h-Q384p8iD$lsm<7v3md_z7hzKtx_AmqsB{^dTM-(enDW)XfgP>ukm5}XJ$;4{` zo@6_bv|w-$oXT8Gi~$6}bTKuC3WDikatjp%)5Y91R1i!TbJtKoFdfe(MT_Z_@nY^8 zdJs$(b5~zMW*KdnMI*>0qZPR5yUa0D(h3$rrWj8=MeSvVd2y@hSx6}!C5qb1{PGG# zzJ1v9m5i-SE z;TPS)s}Mo?TsoKN_ud8FcnC5JLDAJFDJ);-q7Vh;MOs z|5}ERXu(y*ZM>fD<=sp0X=bJqquP$*#!c6Zg$uiv zv<#mzm#Z@Tw`kVvDcz?W)N+zs=jvV9g0jSBZnpAZMaPWRMN6QBzNM{rSh%uRsQof#)iTaw9aX(EAB>6JwPxP038Na(TpDq)7P*O&= zA=z8`GWv7-Enmj(PUPsaY>grgNO3Bbp?p31b1%8)%lMrvP-#6WlLJ9g4^xg<8S-WH zSJgP+yL+87Ur)*m{xD$|%-2~*RNK0UI9(>k-lPo0Q22Ge4EUTYCSS(yje`Cf1^vl& zU)^7)rXeacMX8mamWcZfZuKf$5oFtx<8!_q@HyvSz6^HNA)1*ggW6PCy<8UKTD~6r zITv)kOxT~8b5)r;uO(%5l8~!<^w(j=?O-FB{Z_Jg=1q0I_sOLp@9k<>Dk8xWSlH4M zYnqhtOokla@@4ebD8QAA^vl-+2Q_hrBxMaWGgU@^Jc*#{(bm#9h9(6IETW|8Sy+kX zO}vn0+jffmGJy|HC-$4P46=&254;^8t}{{R>rqw}J8QlSSnA?6S7qeUGi6RCR`qIz zzjV}`$0MzW*V4{|+wyu0Ub~94HZTw8oK5>9Por8RD6%Q>#%VodqnR)3tN1gllic;D zZ2_*Z=$m=)CZd@K+OL5RuZ$U&j54+@sh~70)tbZ=q;n&KRK!)rU&zF0;Nt-vGX`%M z8@!Mx!M3eyUINSJy?PA`&p8-axH@2PN?KT3uV#2GDLC!^Xs}FXTzB0d#Y=-%T1~x* zkz2@BIRYkadBfM>52vfB>q$LWyIo(NxG;D|d}vroqruij zWahy$j2h462he*9P~3A&2`p@LIo76Syj835QfFIgoFWGeFGiM`{ee6(ya_7M@WCJ$ zMZv=Rmqw;QFLvGFrv|6hnjGblxsfK#&~B;RFfy-Hl_%R(+p6&@;Z4!BTB#{fb)h3b2}Q-O5$M`Rp3O z{tQi$pT(>PG45u4>pZrq#`RG6{|~@i7pJEDWV&Ms-l^x?i6U$2HR_f&>Ml+u>5q#t z5*ee)P;^uoCnh5oQ2EV1A|IMr4>+RT=S`O@JQ){#O-!dr89JspOQOeG9B__ObS2ue zgdwQ@+?#f)tf9{?v^DyvsBlJaB0y41RB3-~I86tg@JRzpwU+IfD7(>=4Xtsi5QA_! z25iXmSBJ5wdS$H929~;u97y})T{%MsJRG9;2jOkz>_SkS7>knr$~@+)$L0B*Oh3)$ zTSAKJwxkKyI7L&o^^gmCZ^5w*4v6iv_+#Pp9wZz_LS~YA5aTH~fzmP@t_5wyi>B(i zP#IO`91N<=o>BC*Wv(6rKU;l-&r08`PsQOjn0LH(z1u65Q>vt%esrVP2gh( ziuqZU@h+ArGrBT*i9P3Wf|ZE5w7*8v=+97<(S163Qq8P+Q{GEb{WV<}csfS2Z1w`` zsi7fK`ihHDwXI5^X;Q`uQu=I$U<=MQ+Dp#uWf4BudP7`a;JjXBFZi}se)8Ojx_tHAFqt}p=@ z+~Zu+^n&a$I%c`Xp+w^fuaTxJq`r~+P>YfKoZ^ixk4&+=q;73N#1fk`iKxJOuaddg zoc$;>=ZbQj38!;oUp9;l5A%Vg@uu_QrZj{~t@=YD?9g^I%B<`rAlL3ej!b55O@K~e zW>8~0WDLts3F$TGbAoscPASv4Dq+IYG9H6gN!#nF=UmGPUMd)aG|vX7hVCn3tWtBs z)otV|8i>&?klf~+jC0oPX-?Qicf?{|&|lN+Y1*2-g)}$&gD?iOk8so$)U*76?Q7SA zO|5l)>KPtOz^bMfStDb2#4=~(Ae3Qog^f(}M7F*;&tSVY{D8~c#@0t@tl9en0cg7F zfHfHzz-!yamWvtAoax{sMi;=zZ}bQ*mz(`Y{I<~(QNt{q*7?zN3cs?r!ep%LH4130 z;jX@?dj@}*Uh^8pbvn&bs`gDYwodaiafj66c6Hs?2@6%B1vOV)-= zJwt1R>KYzKIHjTSDkg5t>o5%)8Ye%2U2{2{DqIl_Z16{{rm;s5q-pj((a~l-sWZj6XHhLXqR&7gTb67tZM-pR$LQ6EdE!JXl2E!d-WB?~@!*gn==o)_v zVRT!#snI9VHjM6#nq&4BFQ6HHs73-2y%(xgyS_CJopztQD+?)}Wsx);koG~#THb5d zaskh*Jv&p+=oY|d&eObhV{lKAIp@KfjE$_y)>8W%0cB-bwPDYa)w=aF@hXL}g;z1s z8XVM{=4=mI?EYxDbKE%Q zOoHZPWFuS4j>~Obtz$yZhK5*5vzCZ+y_Ohbn}&v3`Y|hwFq>)>^)@bxtUWU|j z<79w=NR5lmV9s=yZVWxcpUpn1%fV6ihmTL;lyTiXg=D^9-tbsrD~w$L^N^uQR>ROi z9hRtN57sqvK1XFWGC*7tW*(dkY*~ld`*`;akD$!x#dtN$xrZ`yKB`wa)oGkot&adx zvt7$-r?#(&46u44qTAq#%JjvW#PVAcqgRhPk?E#2dL()tzk46Zoon!P}o z-U~2T6C1@z!`PNka@;$($$VK3L%Ue7OiTjo*~CS1!ZA8Xqtoie4Md|}U+S5?fc9d1 ze3a?4hRoNl2PO(lS41BepI3vkhJghesHQdIuMCY7nPT{E12s(Z10wyjt|BlSo`{9f z;u%xDp$#(B>HSMvbB=;L8~uQ&0%H?I%Qn8OMy+mqCxo~fTT25WW#(IVNncXB5=O50 zGvPUgCpK_1nfVsjPaD_;%($p#W-ZZ`HJ>E>#pu}$bOu|`#wlQqHRmmHiD>3LD zX!u`~0294#^k#IuCcH`OdPMXZokm>#8ZV&U=+sTrNlhDw3PZc>O1ZL};GPq)IYZ$2 zG%|%KD04n1+Sd3;ac|kVq1qb!A$|=GFe#XN81)SfV7m&>Sd180&yB;7S#$CVsJ%d2 zmsK>y3r8lyhw2^1KHfyhwDoLkKohxd=7Eei@L?x3^$@_O9sc^N!#@(GqEX@;UP@vfHLDF zrOenJDXSZOgNPWdi(;Uqsvd(QqM`%p86O5^Mn9#DD!cm|{Jyjp3u7yQ-SPf*N69Mm@0o;kegh;A~U84yBXG zLsO4|O?4G-sfU2G^^9#Dba+WRhhYm0ZuuXDVQnLa-Sj-hfEm(t)?vpYF*YWur(vkHLkEGYPrg= z2n*exwGBg7C4I)>sNqrvr8q#&Xc}jCX#Ie;E>V8c78kCO0fagmen6R_amw_0t3*17 z{P~DS$;ijKWSBfnG`Z)DZg*L*eNt~Pk0^?KlkCsOE}Y%VU+gq@Npx7B on encode $sourcefile \n"; @@ -102,14 +114,24 @@ class CMailFile } return $encoded; } - + +/*! + \brief permet d'envoyer un fichier +*/ + function sendfile() { $headers .= $this->smtp_headers . $this->mime_headers; $message = $this->text_body . $this->text_encoded; return mail($this->addr_to,$this->subject,stripslashes($message),$headers); } - + +/*! + \brief permet d'ecrire le body d'un message + \param msgtext + \param filename_list +*/ + function write_body($msgtext, $filename_list) { if (count($filename_list)) @@ -121,7 +143,13 @@ class CMailFile $out = $out . $msgtext . "\n"; return $out; } - + +/*! + \brief création des headers mime + \param filename_list + \param mimefilename_list +*/ + function write_mimeheaders($filename_list, $mimefilename_list) { $out = "MIME-version: 1.0\n"; $out = $out . "Content-type: multipart/mixed; "; @@ -133,7 +161,13 @@ class CMailFile } return $out; } - + +/*! + \brief création des headers smtp + \param addr_from + \param addr_cc +*/ + function write_smtpheaders($addr_from,$addr_cc) { $out = "From: $addr_from\n"; @@ -146,12 +180,20 @@ class CMailFile } } +/*! + \brief permet de diviser une chaine (RFC2045) + \param str + \remarks function chunk_split qui remplace celle de php si nécéssaire + \remarks 76 caractères par ligne, terminé par "\r\n" +*/ + // usage - mimetype example "image/gif" // $mailfile = new CMailFile($subject,$sendto,$replyto,$message,$filename,$mimetype); // $mailfile->sendfile(); // Splits a string by RFC2045 semantics (76 chars per line, end with \r\n). // This is not in all PHP versions so I define one here manuall. + function my_chunk_split($str) { $stmp = $str; diff --git a/htdocs/lib/jabber/class.jabber.php b/htdocs/lib/jabber/class.jabber.php index 16a776f8eae..6e57c48687d 100644 --- a/htdocs/lib/jabber/class.jabber.php +++ b/htdocs/lib/jabber/class.jabber.php @@ -83,6 +83,13 @@ MakeXML::BuildPacket([$array {array}]) */ +/*! \file class.jabber.php + \brief Classe permettant de se connecter à un serveur jabber. + \author Carlo "Gossip" Zottmann. + \version 0.4. + + Ensemble des fonctions permettant de se connecter à un serveur jabber. +*/ class Jabber diff --git a/htdocs/lib/vcard/vcard.class.php b/htdocs/lib/vcard/vcard.class.php index 5537d7365e3..f5133721ddb 100644 --- a/htdocs/lib/vcard/vcard.class.php +++ b/htdocs/lib/vcard/vcard.class.php @@ -23,6 +23,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ***************************************************************************/ +/*! \file vcard.class.php + \brief Classe permettant de créer un fichier vcard. + \author Kai Blankenhorn. + \version 2.0 + + Ensemble des fonctions permettant de créer un fichier vcard. +*/ + function encode($string) { return escape(quoted_printable_encode($string)); @@ -66,10 +74,22 @@ function quoted_printable_encode($input, $line_max = 76) { return trim($output); } +/*! \class vCard + \brief Classe permettant de créer un fichier vcard + + Ensemble des fonctions permettant de créer un fichier vcard +*/ + class vCard { var $properties; var $filename; - + +/*! + \brief mise en forme du numéro de télephone + \param number numéro de téléphone + \param type +*/ + function setPhoneNumber($number, $type="") { // type may be PREF | WORK | HOME | VOICE | FAX | MSG | CELL | PAGER | BBS | CAR | MODEM | ISDN | VIDEO or any senseful combination, e.g. "PREF;WORK;VOICE" $key = "TEL"; @@ -77,38 +97,88 @@ class vCard { $key.= ";ENCODING=QUOTED-PRINTABLE"; $this->properties[$key] = quoted_printable_encode($number); } - + +/*! + \brief mise en forme de la photo + \param type + \param photo + \warning NON TESTE ! +*/ + // UNTESTED !!! function setPhoto($type, $photo) { // $type = "GIF" | "JPEG" $this->properties["PHOTO;TYPE=$type;ENCODING=BASE64"] = base64_encode($photo); } - + +/*! + \brief mise en forme du nom formaté + \param name +*/ + function setFormattedName($name) { $this->properties["FN"] = quoted_printable_encode($name); } - + +/*! + \brief mise en forme du nom complet + \param family + \param first + \param additional + \param prefix + \param suffix +*/ + function setName($family="", $first="", $additional="", $prefix="", $suffix="") { $this->properties["N"] = "$family;$first;$additional;$prefix;$suffix"; $this->filename = "$first%20$family.vcf"; if ($this->properties["FN"]=="") $this->setFormattedName(trim("$prefix $first $additional $family $suffix")); } - + +/*! + \brief mise en forme de l'anniversaire + \param date +*/ + function setBirthday($date) { // $date format is YYYY-MM-DD $this->properties["BDAY"] = $date; } - + +/*! + \brief mise en forme de l'adresse + \param postoffice + \param extended + \param street + \param city + \param region + \param zip + \param country + \param type +*/ + function setAddress($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") { // $type may be DOM | INTL | POSTAL | PARCEL | HOME | WORK or any combination of these: e.g. "WORK;PARCEL;POSTAL" $key = "ADR"; if ($type!="") $key.= ";$type"; $key.= ";ENCODING=QUOTED-PRINTABLE"; $this->properties[$key] = encode($name).";".encode($extended).";".encode($street).";".encode($city).";".encode($region).";".encode($zip).";".encode($country); - + if ($this->properties["LABEL;$type;ENCODING=QUOTED-PRINTABLE"] == "") { //$this->setLabel($postoffice, $extended, $street, $city, $region, $zip, $country, $type); } } - + +/*! + \brief mise en forme du label + \param postoffice + \param extended + \param street + \param city + \param region + \param zip + \param country + \param type +*/ + function setLabel($postoffice="", $extended="", $street="", $city="", $region="", $zip="", $country="", $type="HOME;POSTAL") { $label = ""; if ($postoffice!="") $label.= "$postoffice\r\n"; @@ -118,25 +188,45 @@ class vCard { if ($city!="") $label.= "$city\r\n"; if ($region!="") $label.= "$region\r\n"; if ($country!="") $country.= "$country\r\n"; - + $this->properties["LABEL;$type;ENCODING=QUOTED-PRINTABLE"] = quoted_printable_encode($label); } - + +/*! + \brief mise en forme de l'email + \param address +*/ + function setEmail($address) { $this->properties["EMAIL;INTERNET"] = $address; } - + +/*! + \brief mise en forme de la note + \param note +*/ + function setNote($note) { $this->properties["NOTE;ENCODING=QUOTED-PRINTABLE"] = quoted_printable_encode($note); } - + +/*! + \brief mise en forme de l'url + \param url + \param type +*/ + function setURL($url, $type="") { // $type may be WORK | HOME $key = "URL"; if ($type!="") $key.= ";$type"; $this->properties[$key] = $url; } - + +/*! + \brief permet d'obtenir une vcard +*/ + function getVCard() { $text = "BEGIN:VCARD\r\n"; $text.= "VERSION:2.1\r\n"; @@ -148,7 +238,11 @@ class vCard { $text.= "END:VCARD\r\n"; return $text; } - + +/*! + \brief permet d'obtenir le nom de fichier +*/ + function getFileName() { return $this->filename; }