interface_all_Demo.class.php-NORUN 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526
  1. <?php
  2. /* Copyright (C) 2005-2011 Laurent Destailleur <eldy@users.sourceforge.net>
  3. * Copyright (C) 2005-2011 Regis Houssin <regis@dolibarr.fr>
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 2 of the License, or
  8. * (at your option) any later version.
  9. *
  10. * This program is distributed in the hope that it will be useful,
  11. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. * GNU General Public License for more details.
  14. *
  15. * You should have received a copy of the GNU General Public License
  16. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  17. */
  18. /**
  19. * \file htdocs/core/triggers/interface_all_Demo.class.php
  20. * \ingroup core
  21. * \brief Fichier de demo de personalisation des actions du workflow
  22. * \remarks Son propre fichier d'actions peut etre cree par recopie de celui-ci:
  23. * - Le nom du fichier doit etre: interface_modMymodule_Mytrigger.class.php
  24. * ou: interface_all_Mytrigger.class.php
  25. * - Le fichier doit rester stocke dans core/triggers
  26. * - Le nom de la classe doit etre InterfaceMytrigger
  27. * - Le nom de la methode constructeur doit etre InterfaceMytrigger
  28. * - Le nom de la propriete name doit etre Mytrigger
  29. */
  30. /**
  31. * \class InterfaceDemo
  32. * \brief Class of triggers for demo module
  33. */
  34. class InterfaceDemo
  35. {
  36. var $db;
  37. /**
  38. * Constructor.
  39. * @param DB Database handler
  40. */
  41. function InterfaceDemo($DB)
  42. {
  43. $this->db = $DB ;
  44. $this->name = preg_replace('/^Interface/i','',get_class($this));
  45. $this->family = "demo";
  46. $this->description = "Triggers of this module are empty functions. They have no effect. They are provided for tutorial purpose only.";
  47. $this->version = 'dolibarr'; // 'development', 'experimental', 'dolibarr' or version
  48. $this->picto = 'technic';
  49. }
  50. /**
  51. * Return name of trigger file
  52. * @return string Name of trigger file
  53. */
  54. function getName()
  55. {
  56. return $this->name;
  57. }
  58. /**
  59. * Return description of trigger file
  60. * @return string Description of trigger file
  61. */
  62. function getDesc()
  63. {
  64. return $this->description;
  65. }
  66. /**
  67. * Return version of trigger file
  68. * @return string Version of trigger file
  69. */
  70. function getVersion()
  71. {
  72. global $langs;
  73. $langs->load("admin");
  74. if ($this->version == 'development') return $langs->trans("Development");
  75. elseif ($this->version == 'experimental') return $langs->trans("Experimental");
  76. elseif ($this->version == 'dolibarr') return DOL_VERSION;
  77. elseif ($this->version) return $this->version;
  78. else return $langs->trans("Unknown");
  79. }
  80. /**
  81. * Function called when a Dolibarrr business event is done.
  82. * All functions "run_trigger" are triggered if file is inside directory htdocs/core/triggers
  83. * @param action Code de l'evenement
  84. * @param object Objet concerne
  85. * @param user Objet user
  86. * @param langs Objet langs
  87. * @param conf Objet conf
  88. * @return int <0 if KO, 0 if no triggered ran, >0 if OK
  89. */
  90. function run_trigger($action,$object,$user,$langs,$conf)
  91. {
  92. // Put here code you want to execute when a Dolibarr business events occurs.
  93. // Data and type of action are stored into $object and $action
  94. // Users
  95. if ($action == 'USER_LOGIN')
  96. {
  97. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  98. }
  99. elseif ($action == 'USER_UPDATE_SESSION')
  100. {
  101. // Warning: To increase performances, this action is triggered only if
  102. // constant MAIN_ACTIVATE_UPDATESESSIONTRIGGER is set to 1.
  103. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  104. }
  105. elseif ($action == 'USER_CREATE')
  106. {
  107. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  108. }
  109. elseif ($action == 'USER_CREATE_FROM_CONTACT')
  110. {
  111. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  112. }
  113. elseif ($action == 'USER_MODIFY')
  114. {
  115. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  116. }
  117. elseif ($action == 'USER_NEW_PASSWORD')
  118. {
  119. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  120. }
  121. elseif ($action == 'USER_ENABLEDISABLE')
  122. {
  123. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  124. }
  125. elseif ($action == 'USER_DELETE')
  126. {
  127. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  128. }
  129. elseif ($action == 'USER_LOGOUT')
  130. {
  131. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  132. }
  133. elseif ($action == 'USER_SETINGROUP')
  134. {
  135. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  136. }
  137. elseif ($action == 'USER_REMOVEFROMGROUP')
  138. {
  139. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  140. }
  141. // Groups
  142. elseif ($action == 'GROUP_CREATE')
  143. {
  144. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  145. }
  146. elseif ($action == 'GROUP_MODIFY')
  147. {
  148. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  149. }
  150. elseif ($action == 'GROUP_DELETE')
  151. {
  152. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  153. }
  154. // Companies
  155. elseif ($action == 'COMPANY_CREATE')
  156. {
  157. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  158. }
  159. elseif ($action == 'COMPANY_MODIFY')
  160. {
  161. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  162. }
  163. elseif ($action == 'COMPANY_DELETE')
  164. {
  165. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  166. }
  167. // Contacts
  168. elseif ($action == 'CONTACT_CREATE')
  169. {
  170. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  171. }
  172. elseif ($action == 'CONTACT_MODIFY')
  173. {
  174. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  175. }
  176. elseif ($action == 'CONTACT_DELETE')
  177. {
  178. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  179. }
  180. // Products
  181. elseif ($action == 'PRODUCT_CREATE')
  182. {
  183. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  184. }
  185. elseif ($action == 'PRODUCT_MODIFY')
  186. {
  187. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  188. }
  189. elseif ($action == 'PRODUCT_DELETE')
  190. {
  191. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  192. }
  193. // Customer orders
  194. elseif ($action == 'ORDER_CREATE')
  195. {
  196. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  197. }
  198. elseif ($action == 'ORDER_CLONE')
  199. {
  200. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  201. }
  202. elseif ($action == 'ORDER_VALIDATE')
  203. {
  204. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  205. }
  206. elseif ($action == 'ORDER_DELETE')
  207. {
  208. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  209. }
  210. elseif ($action == 'ORDER_BUILDDOC')
  211. {
  212. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  213. }
  214. elseif ($action == 'ORDER_SENTBYMAIL')
  215. {
  216. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  217. }
  218. elseif ($action == 'LINEORDER_INSERT')
  219. {
  220. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  221. }
  222. elseif ($action == 'LINEORDER_DELETE')
  223. {
  224. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  225. }
  226. // Supplier orders
  227. elseif ($action == 'ORDER_SUPPLIER_CREATE')
  228. {
  229. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  230. }
  231. elseif ($action == 'ORDER_SUPPLIER_VALIDATE')
  232. {
  233. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  234. }
  235. elseif ($action == 'ORDER_SUPPLIER_SENTBYMAIL')
  236. {
  237. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  238. }
  239. // Proposals
  240. elseif ($action == 'PROPAL_CREATE')
  241. {
  242. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  243. }
  244. elseif ($action == 'PROPAL_CLONE')
  245. {
  246. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  247. }
  248. elseif ($action == 'PROPAL_MODIFY')
  249. {
  250. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  251. }
  252. elseif ($action == 'PROPAL_VALIDATE')
  253. {
  254. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  255. }
  256. elseif ($action == 'PROPAL_BUILDDOC')
  257. {
  258. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  259. }
  260. elseif ($action == 'PROPAL_SENTBYMAIL')
  261. {
  262. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  263. }
  264. elseif ($action == 'PROPAL_CLOSE_SIGNED')
  265. {
  266. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  267. }
  268. elseif ($action == 'PROPAL_CLOSE_REFUSED')
  269. {
  270. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  271. }
  272. elseif ($action == 'PROPAL_DELETE')
  273. {
  274. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  275. }
  276. elseif ($action == 'LINEPROPAL_INSERT')
  277. {
  278. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  279. }
  280. elseif ($action == 'LINEPROPAL_MODIFY')
  281. {
  282. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  283. }
  284. elseif ($action == 'LINEPROPAL_DELETE')
  285. {
  286. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  287. }
  288. // Contracts
  289. elseif ($action == 'CONTRACT_CREATE')
  290. {
  291. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  292. }
  293. elseif ($action == 'CONTRACT_MODIFY')
  294. {
  295. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  296. }
  297. elseif ($action == 'CONTRACT_ACTIVATE')
  298. {
  299. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  300. }
  301. elseif ($action == 'CONTRACT_CANCEL')
  302. {
  303. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  304. }
  305. elseif ($action == 'CONTRACT_CLOSE')
  306. {
  307. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  308. }
  309. elseif ($action == 'CONTRACT_DELETE')
  310. {
  311. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  312. }
  313. // Bills
  314. elseif ($action == 'BILL_CREATE')
  315. {
  316. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  317. }
  318. elseif ($action == 'BILL_CLONE')
  319. {
  320. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  321. }
  322. elseif ($action == 'BILL_MODIFY')
  323. {
  324. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  325. }
  326. elseif ($action == 'BILL_VALIDATE')
  327. {
  328. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  329. }
  330. elseif ($action == 'BILL_BUILDDOC')
  331. {
  332. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  333. }
  334. elseif ($action == 'BILL_SENTBYMAIL')
  335. {
  336. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  337. }
  338. elseif ($action == 'BILL_CANCEL')
  339. {
  340. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  341. }
  342. elseif ($action == 'BILL_DELETE')
  343. {
  344. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  345. }
  346. elseif ($action == 'LINEBILL_INSERT')
  347. {
  348. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  349. }
  350. elseif ($action == 'LINEBILL_DELETE')
  351. {
  352. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  353. }
  354. // Payments
  355. elseif ($action == 'PAYMENT_CUSTOMER_CREATE')
  356. {
  357. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  358. }
  359. elseif ($action == 'PAYMENT_SUPPLIER_CREATE')
  360. {
  361. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  362. }
  363. elseif ($action == 'PAYMENT_ADD_TO_BANK')
  364. {
  365. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  366. }
  367. elseif ($action == 'PAYMENT_DELETE')
  368. {
  369. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  370. }
  371. // Interventions
  372. elseif ($action == 'FICHEINTER_VALIDATE')
  373. {
  374. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  375. }
  376. // Members
  377. elseif ($action == 'MEMBER_CREATE')
  378. {
  379. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  380. }
  381. elseif ($action == 'MEMBER_VALIDATE')
  382. {
  383. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  384. }
  385. elseif ($action == 'MEMBER_SUBSCRIPTION')
  386. {
  387. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  388. }
  389. elseif ($action == 'MEMBER_MODIFY')
  390. {
  391. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  392. }
  393. elseif ($action == 'MEMBER_NEW_PASSWORD')
  394. {
  395. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  396. }
  397. elseif ($action == 'MEMBER_RESILIATE')
  398. {
  399. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  400. }
  401. elseif ($action == 'MEMBER_DELETE')
  402. {
  403. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  404. }
  405. // Categories
  406. elseif ($action == 'CATEGORY_CREATE')
  407. {
  408. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  409. }
  410. elseif ($action == 'CATEGORY_MODIFY')
  411. {
  412. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  413. }
  414. elseif ($action == 'CATEGORY_DELETE')
  415. {
  416. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  417. }
  418. // Projects
  419. elseif ($action == 'PROJECT_CREATE')
  420. {
  421. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  422. }
  423. elseif ($action == 'PROJECT_MODIFY')
  424. {
  425. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  426. }
  427. elseif ($action == 'PROJECT_DELETE')
  428. {
  429. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  430. }
  431. // Project tasks
  432. elseif ($action == 'TASK_CREATE')
  433. {
  434. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  435. }
  436. elseif ($action == 'TASK_MODIFY')
  437. {
  438. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  439. }
  440. elseif ($action == 'TASK_DELETE')
  441. {
  442. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  443. }
  444. // Task time spent
  445. elseif ($action == 'TASK_TIMESPENT_CREATE')
  446. {
  447. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  448. }
  449. elseif ($action == 'TASK_TIMESPENT_MODIFY')
  450. {
  451. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  452. }
  453. elseif ($action == 'TASK_TIMESPENT_DELETE')
  454. {
  455. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  456. }
  457. // Shipping
  458. elseif ($action == 'SHIPPING_CREATE')
  459. {
  460. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  461. }
  462. elseif ($action == 'SHIPPING_MODIFY')
  463. {
  464. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  465. }
  466. elseif ($action == 'SHIPPING_VALIDATE')
  467. {
  468. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  469. }
  470. elseif ($action == 'SHIPPING_SENTBYMAIL')
  471. {
  472. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  473. }
  474. elseif ($action == 'SHIPPING_DELETE')
  475. {
  476. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  477. }
  478. elseif ($action == 'SHIPPING_BUILDDOC')
  479. {
  480. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  481. }
  482. // File
  483. elseif ($action == 'FILE_UPLOAD')
  484. {
  485. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  486. }
  487. elseif ($action == 'FILE_DELETE')
  488. {
  489. dol_syslog("Trigger '".$this->name."' for action '$action' launched by ".__FILE__.". id=".$object->id);
  490. }
  491. return 0;
  492. }
  493. }
  494. ?>