codeigniter_vender 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (350) hide show
  1. data/.gitignore +2 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README +40 -0
  4. data/Rakefile +18 -0
  5. data/VERSION +1 -0
  6. data/codeigniter_vender.gemspec +389 -0
  7. data/generators/ci_app/USAGE +8 -0
  8. data/generators/ci_app/ci_app_generator.rb +12 -0
  9. data/generators/ci_app/templates/CodeIgniter_1.7.2/index.php +118 -0
  10. data/generators/ci_app/templates/CodeIgniter_1.7.2/license.txt +52 -0
  11. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/autoload.php +116 -0
  12. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/config.php +329 -0
  13. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/constants.php +41 -0
  14. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/database.php +55 -0
  15. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/doctypes.php +15 -0
  16. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/hooks.php +16 -0
  17. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/index.html +10 -0
  18. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/mimes.php +105 -0
  19. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/routes.php +48 -0
  20. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/smileys.php +66 -0
  21. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/config/user_agents.php +175 -0
  22. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/controllers/index.html +10 -0
  23. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/controllers/welcome.php +17 -0
  24. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/errors/error_404.php +34 -0
  25. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/errors/error_db.php +34 -0
  26. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/errors/error_general.php +34 -0
  27. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/errors/error_php.php +10 -0
  28. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/errors/index.html +10 -0
  29. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/helpers/index.html +10 -0
  30. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/hooks/index.html +10 -0
  31. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/index.html +10 -0
  32. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/language/english/index.html +10 -0
  33. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/libraries/index.html +10 -0
  34. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/models/index.html +10 -0
  35. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/views/index.html +10 -0
  36. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/application/views/welcome_message.php +62 -0
  37. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/cache/index.html +10 -0
  38. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/Base4.php +69 -0
  39. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/Base5.php +56 -0
  40. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/CodeIgniter.php +280 -0
  41. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/Common.php +421 -0
  42. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/Compat.php +93 -0
  43. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/codeigniter/index.html +10 -0
  44. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB.php +146 -0
  45. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_active_rec.php +1820 -0
  46. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_cache.php +195 -0
  47. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_driver.php +1366 -0
  48. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_forge.php +375 -0
  49. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_result.php +342 -0
  50. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/DB_utility.php +389 -0
  51. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/index.html +10 -0
  52. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mssql/index.html +10 -0
  53. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mssql/mssql_driver.php +667 -0
  54. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mssql/mssql_forge.php +248 -0
  55. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mssql/mssql_result.php +169 -0
  56. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mssql/mssql_utility.php +123 -0
  57. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysql/index.html +10 -0
  58. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysql/mysql_driver.php +670 -0
  59. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysql/mysql_forge.php +254 -0
  60. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysql/mysql_result.php +169 -0
  61. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysql/mysql_utility.php +245 -0
  62. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysqli/index.html +10 -0
  63. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysqli/mysqli_driver.php +671 -0
  64. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysqli/mysqli_forge.php +254 -0
  65. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysqli/mysqli_result.php +169 -0
  66. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/mysqli/mysqli_utility.php +123 -0
  67. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/oci8/index.html +10 -0
  68. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/oci8/oci8_driver.php +780 -0
  69. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/oci8/oci8_forge.php +248 -0
  70. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/oci8/oci8_result.php +249 -0
  71. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/oci8/oci8_utility.php +122 -0
  72. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/odbc/index.html +10 -0
  73. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/odbc/odbc_driver.php +639 -0
  74. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/odbc/odbc_forge.php +266 -0
  75. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/odbc/odbc_result.php +228 -0
  76. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/odbc/odbc_utility.php +148 -0
  77. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/postgre/index.html +10 -0
  78. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/postgre/postgre_driver.php +684 -0
  79. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/postgre/postgre_forge.php +248 -0
  80. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/postgre/postgre_result.php +169 -0
  81. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/postgre/postgre_utility.php +124 -0
  82. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/sqlite/index.html +10 -0
  83. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/sqlite/sqlite_driver.php +657 -0
  84. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/sqlite/sqlite_forge.php +265 -0
  85. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/sqlite/sqlite_result.php +179 -0
  86. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/drivers/sqlite/sqlite_utility.php +141 -0
  87. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/database/index.html +10 -0
  88. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/fonts/index.html +10 -0
  89. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/fonts/texb.ttf +0 -0
  90. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/array_helper.php +78 -0
  91. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/compatibility_helper.php +498 -0
  92. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/cookie_helper.php +144 -0
  93. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/date_helper.php +611 -0
  94. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/directory_helper.php +84 -0
  95. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/download_helper.php +100 -0
  96. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/email_helper.php +62 -0
  97. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/file_helper.php +464 -0
  98. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/form_helper.php +1025 -0
  99. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/html_helper.php +416 -0
  100. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/index.html +10 -0
  101. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/inflector_helper.php +171 -0
  102. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/language_helper.php +58 -0
  103. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/number_helper.php +75 -0
  104. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/path_helper.php +72 -0
  105. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/security_helper.php +126 -0
  106. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/smiley_helper.php +273 -0
  107. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/string_helper.php +273 -0
  108. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/text_helper.php +462 -0
  109. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/typography_helper.php +71 -0
  110. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/url_helper.php +593 -0
  111. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/helpers/xml_helper.php +62 -0
  112. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/index.html +10 -0
  113. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/calendar_lang.php +51 -0
  114. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/date_lang.php +60 -0
  115. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/db_lang.php +28 -0
  116. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/email_lang.php +24 -0
  117. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/form_validation_lang.php +24 -0
  118. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/ftp_lang.php +17 -0
  119. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/imglib_lang.php +24 -0
  120. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/index.html +10 -0
  121. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/number_lang.php +10 -0
  122. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/profiler_lang.php +19 -0
  123. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/scaffolding_lang.php +17 -0
  124. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/unit_test_lang.php +24 -0
  125. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/upload_lang.php +22 -0
  126. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/english/validation_lang.php +24 -0
  127. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/language/index.html +10 -0
  128. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Benchmark.php +113 -0
  129. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Calendar.php +477 -0
  130. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Cart.php +550 -0
  131. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Config.php +244 -0
  132. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Controller.php +127 -0
  133. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Email.php +2041 -0
  134. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Encrypt.php +484 -0
  135. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Exceptions.php +174 -0
  136. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Form_validation.php +1278 -0
  137. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Ftp.php +618 -0
  138. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Hooks.php +226 -0
  139. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Image_lib.php +1544 -0
  140. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Input.php +1067 -0
  141. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Language.php +123 -0
  142. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Loader.php +1085 -0
  143. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Log.php +117 -0
  144. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Model.php +83 -0
  145. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Output.php +409 -0
  146. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Pagination.php +244 -0
  147. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Parser.php +173 -0
  148. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Profiler.php +392 -0
  149. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Router.php +389 -0
  150. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Session.php +758 -0
  151. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Sha1.php +251 -0
  152. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Table.php +440 -0
  153. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Trackback.php +547 -0
  154. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Typography.php +406 -0
  155. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/URI.php +586 -0
  156. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Unit_test.php +347 -0
  157. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Upload.php +970 -0
  158. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/User_agent.php +502 -0
  159. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Validation.php +875 -0
  160. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Xmlrpc.php +1421 -0
  161. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Xmlrpcs.php +536 -0
  162. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/Zip.php +359 -0
  163. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/libraries/index.html +10 -0
  164. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/logs/index.html +10 -0
  165. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/plugins/captcha_pi.php +356 -0
  166. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/plugins/index.html +10 -0
  167. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/plugins/js_calendar_pi.php +629 -0
  168. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/Scaffolding.php +291 -0
  169. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/images/background.jpg +0 -0
  170. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/images/index.html +10 -0
  171. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/images/logo.jpg +0 -0
  172. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/index.html +10 -0
  173. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/add.php +32 -0
  174. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/delete.php +9 -0
  175. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/edit.php +33 -0
  176. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/footer.php +10 -0
  177. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/header.php +29 -0
  178. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/index.html +10 -0
  179. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/no_data.php +8 -0
  180. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/stylesheet.css +143 -0
  181. data/generators/ci_app/templates/CodeIgniter_1.7.2/system/scaffolding/views/view.php +27 -0
  182. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/changelog.html +1080 -0
  183. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/active_record.html +757 -0
  184. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/caching.html +220 -0
  185. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/call_function.html +118 -0
  186. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/configuration.html +157 -0
  187. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/connecting.html +186 -0
  188. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/examples.html +217 -0
  189. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/fields.html +163 -0
  190. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/forge.html +234 -0
  191. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/helpers.html +151 -0
  192. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/index.html +99 -0
  193. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/queries.html +153 -0
  194. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/results.html +238 -0
  195. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/table_data.html +113 -0
  196. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/transactions.html +200 -0
  197. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/database/utilities.html +295 -0
  198. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/doc_style/index.html +86 -0
  199. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/doc_style/template.html +128 -0
  200. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/alternative_php.html +147 -0
  201. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/ancillary_classes.html +117 -0
  202. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/autoloader.html +101 -0
  203. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/caching.html +115 -0
  204. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/common_functions.html +119 -0
  205. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/controllers.html +385 -0
  206. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/core_classes.html +185 -0
  207. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/creating_libraries.html +298 -0
  208. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/credits.html +86 -0
  209. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/errors.html +138 -0
  210. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/helpers.html +185 -0
  211. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/hooks.html +167 -0
  212. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/libraries.html +94 -0
  213. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/managing_apps.html +133 -0
  214. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/models.html +251 -0
  215. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/plugins.html +127 -0
  216. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/profiling.html +104 -0
  217. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/quick_reference.html +77 -0
  218. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/requirements.html +82 -0
  219. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/reserved_names.html +156 -0
  220. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/routing.html +176 -0
  221. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/scaffolding.html +147 -0
  222. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/security.html +153 -0
  223. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/styleguide.html +687 -0
  224. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/urls.html +151 -0
  225. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/general/views.html +274 -0
  226. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/array_helper.html +119 -0
  227. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/compatibility_helper.html +118 -0
  228. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/cookie_helper.html +147 -0
  229. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/date_helper.html +408 -0
  230. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/directory_helper.html +143 -0
  231. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/download_helper.html +112 -0
  232. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/email_helper.html +102 -0
  233. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/file_helper.html +178 -0
  234. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/form_helper.html +484 -0
  235. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/html_helper.html +385 -0
  236. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/inflector_helper.html +151 -0
  237. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/language_helper.html +98 -0
  238. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/number_helper.html +107 -0
  239. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/path_helper.html +106 -0
  240. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/security_helper.html +125 -0
  241. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/smiley_helper.html +215 -0
  242. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/string_helper.html +176 -0
  243. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/text_helper.html +192 -0
  244. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/typography_helper.html +112 -0
  245. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/url_helper.html +289 -0
  246. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/helpers/xml_helper.html +105 -0
  247. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/appflowchart.gif +0 -0
  248. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/arrow.gif +0 -0
  249. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/ci_logo.jpg +0 -0
  250. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/ci_logo_flame.jpg +0 -0
  251. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/ci_quick_ref.png +0 -0
  252. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/codeigniter_1.7.1_helper_reference.pdf +0 -0
  253. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/codeigniter_1.7.1_helper_reference.png +0 -0
  254. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/codeigniter_1.7.1_library_reference.pdf +0 -0
  255. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/codeigniter_1.7.1_library_reference.png +0 -0
  256. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/file.gif +0 -0
  257. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/folder.gif +0 -0
  258. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/nav_bg_darker.jpg +0 -0
  259. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/nav_separator_darker.jpg +0 -0
  260. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/nav_toggle_darker.jpg +0 -0
  261. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/smile.gif +0 -0
  262. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/images/transparent.gif +0 -0
  263. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/index.html +99 -0
  264. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/downloads.html +105 -0
  265. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/index.html +97 -0
  266. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/troubleshooting.html +90 -0
  267. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_120.html +92 -0
  268. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_130.html +203 -0
  269. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_131.html +102 -0
  270. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_132.html +100 -0
  271. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_133.html +112 -0
  272. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_140.html +145 -0
  273. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_141.html +148 -0
  274. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_150.html +178 -0
  275. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_152.html +111 -0
  276. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_153.html +100 -0
  277. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_154.html +116 -0
  278. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_160.html +125 -0
  279. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_161.html +98 -0
  280. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_162.html +106 -0
  281. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_163.html +99 -0
  282. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_170.html +121 -0
  283. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_171.html +98 -0
  284. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_172.html +105 -0
  285. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrade_b11.html +144 -0
  286. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/installation/upgrading.html +101 -0
  287. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/benchmark.html +198 -0
  288. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/calendar.html +249 -0
  289. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/cart.html +346 -0
  290. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/config.html +181 -0
  291. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/email.html +307 -0
  292. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/encryption.html +182 -0
  293. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/file_uploading.html +451 -0
  294. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/form_validation.html +1221 -0
  295. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/ftp.html +303 -0
  296. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/image_lib.html +666 -0
  297. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/input.html +231 -0
  298. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/language.html +137 -0
  299. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/loader.html +214 -0
  300. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/output.html +145 -0
  301. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/pagination.html +218 -0
  302. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/parser.html +208 -0
  303. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/sessions.html +311 -0
  304. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/table.html +292 -0
  305. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/trackback.html +246 -0
  306. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/typography.html +160 -0
  307. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/unit_testing.html +205 -0
  308. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/uri.html +252 -0
  309. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/user_agent.html +201 -0
  310. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/validation.html +740 -0
  311. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/xmlrpc.html +517 -0
  312. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/libraries/zip.html +278 -0
  313. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/license.html +107 -0
  314. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/hacks.txt +9 -0
  315. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/moo.fx.js +119 -0
  316. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/moo.fx.pack.js +241 -0
  317. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/nav.js +139 -0
  318. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/prototype.lite.js +127 -0
  319. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/nav/user_guide_menu.js +4 -0
  320. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/appflow.html +95 -0
  321. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/at_a_glance.html +172 -0
  322. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/cheatsheets.html +83 -0
  323. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/features.html +120 -0
  324. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/getting_started.html +92 -0
  325. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/goals.html +98 -0
  326. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/index.html +84 -0
  327. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/overview/mvc.html +100 -0
  328. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/toc.html +209 -0
  329. data/generators/ci_app/templates/CodeIgniter_1.7.2/user_guide/userguide.css +406 -0
  330. data/generators/ci_app/templates/README +1 -0
  331. data/generators/ci_controller/USAGE +2 -0
  332. data/generators/ci_controller/ci_controller_generator.rb +11 -0
  333. data/generators/ci_controller/templates/ci_controller.php.erb +15 -0
  334. data/generators/ci_controller/templates/ci_view.php.erb +8 -0
  335. data/generators/ci_layout/USAGE +2 -0
  336. data/generators/ci_layout/ci_layout_generator.rb +24 -0
  337. data/generators/ci_layout/templates/application_layout.php.erb +19 -0
  338. data/generators/ci_model/USAGE +2 -0
  339. data/generators/ci_model/ci_model_generator.rb +42 -0
  340. data/generators/ci_model/templates/ci_model.php.erb +15 -0
  341. data/generators/ci_model/templates/model.rb +5 -0
  342. data/generators/ci_model/templates/model_migration.rb.erb +16 -0
  343. data/init.rb +1 -0
  344. data/install.rb +1 -0
  345. data/lib/codeigniter_vender.rb +1 -0
  346. data/lib/tasks/app.rake +8 -0
  347. data/test/codeigniter_vender_test.rb +8 -0
  348. data/test/test_helper.rb +3 -0
  349. data/uninstall.rb +1 -0
  350. metadata +411 -0
@@ -0,0 +1,2041 @@
1
+ <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
2
+ /**
3
+ * CodeIgniter
4
+ *
5
+ * An open source application development framework for PHP 4.3.2 or newer
6
+ *
7
+ * @package CodeIgniter
8
+ * @author ExpressionEngine Dev Team
9
+ * @copyright Copyright (c) 2008 - 2010, EllisLab, Inc.
10
+ * @license http://codeigniter.com/user_guide/license.html
11
+ * @link http://codeigniter.com
12
+ * @since Version 1.0
13
+ * @filesource
14
+ */
15
+
16
+ // ------------------------------------------------------------------------
17
+
18
+ /**
19
+ * CodeIgniter Email Class
20
+ *
21
+ * Permits email to be sent using Mail, Sendmail, or SMTP.
22
+ *
23
+ * @package CodeIgniter
24
+ * @subpackage Libraries
25
+ * @category Libraries
26
+ * @author ExpressionEngine Dev Team
27
+ * @link http://codeigniter.com/user_guide/libraries/email.html
28
+ */
29
+ class CI_Email {
30
+
31
+ var $useragent = "CodeIgniter";
32
+ var $mailpath = "/usr/sbin/sendmail"; // Sendmail path
33
+ var $protocol = "mail"; // mail/sendmail/smtp
34
+ var $smtp_host = ""; // SMTP Server. Example: mail.earthlink.net
35
+ var $smtp_user = ""; // SMTP Username
36
+ var $smtp_pass = ""; // SMTP Password
37
+ var $smtp_port = "25"; // SMTP Port
38
+ var $smtp_timeout = 5; // SMTP Timeout in seconds
39
+ var $wordwrap = TRUE; // TRUE/FALSE Turns word-wrap on/off
40
+ var $wrapchars = "76"; // Number of characters to wrap at.
41
+ var $mailtype = "text"; // text/html Defines email formatting
42
+ var $charset = "utf-8"; // Default char set: iso-8859-1 or us-ascii
43
+ var $multipart = "mixed"; // "mixed" (in the body) or "related" (separate)
44
+ var $alt_message = ''; // Alternative message for HTML emails
45
+ var $validate = FALSE; // TRUE/FALSE. Enables email validation
46
+ var $priority = "3"; // Default priority (1 - 5)
47
+ var $newline = "\n"; // Default newline. "\r\n" or "\n" (Use "\r\n" to comply with RFC 822)
48
+ var $crlf = "\n"; // The RFC 2045 compliant CRLF for quoted-printable is "\r\n". Apparently some servers,
49
+ // even on the receiving end think they need to muck with CRLFs, so using "\n", while
50
+ // distasteful, is the only thing that seems to work for all environments.
51
+ var $send_multipart = TRUE; // TRUE/FALSE - Yahoo does not like multipart alternative, so this is an override. Set to FALSE for Yahoo.
52
+ var $bcc_batch_mode = FALSE; // TRUE/FALSE Turns on/off Bcc batch feature
53
+ var $bcc_batch_size = 200; // If bcc_batch_mode = TRUE, sets max number of Bccs in each batch
54
+ var $_safe_mode = FALSE;
55
+ var $_subject = "";
56
+ var $_body = "";
57
+ var $_finalbody = "";
58
+ var $_alt_boundary = "";
59
+ var $_atc_boundary = "";
60
+ var $_header_str = "";
61
+ var $_smtp_connect = "";
62
+ var $_encoding = "8bit";
63
+ var $_IP = FALSE;
64
+ var $_smtp_auth = FALSE;
65
+ var $_replyto_flag = FALSE;
66
+ var $_debug_msg = array();
67
+ var $_recipients = array();
68
+ var $_cc_array = array();
69
+ var $_bcc_array = array();
70
+ var $_headers = array();
71
+ var $_attach_name = array();
72
+ var $_attach_type = array();
73
+ var $_attach_disp = array();
74
+ var $_protocols = array('mail', 'sendmail', 'smtp');
75
+ var $_base_charsets = array('us-ascii', 'iso-2022-'); // 7-bit charsets (excluding language suffix)
76
+ var $_bit_depths = array('7bit', '8bit');
77
+ var $_priorities = array('1 (Highest)', '2 (High)', '3 (Normal)', '4 (Low)', '5 (Lowest)');
78
+
79
+
80
+ /**
81
+ * Constructor - Sets Email Preferences
82
+ *
83
+ * The constructor can be passed an array of config values
84
+ */
85
+ function CI_Email($config = array())
86
+ {
87
+ if (count($config) > 0)
88
+ {
89
+ $this->initialize($config);
90
+ }
91
+ else
92
+ {
93
+ $this->_smtp_auth = ($this->smtp_user == '' AND $this->smtp_pass == '') ? FALSE : TRUE;
94
+ $this->_safe_mode = ((boolean)@ini_get("safe_mode") === FALSE) ? FALSE : TRUE;
95
+ }
96
+
97
+ log_message('debug', "Email Class Initialized");
98
+ }
99
+
100
+ // --------------------------------------------------------------------
101
+
102
+ /**
103
+ * Initialize preferences
104
+ *
105
+ * @access public
106
+ * @param array
107
+ * @return void
108
+ */
109
+ function initialize($config = array())
110
+ {
111
+ $this->clear();
112
+ foreach ($config as $key => $val)
113
+ {
114
+ if (isset($this->$key))
115
+ {
116
+ $method = 'set_'.$key;
117
+
118
+ if (method_exists($this, $method))
119
+ {
120
+ $this->$method($val);
121
+ }
122
+ else
123
+ {
124
+ $this->$key = $val;
125
+ }
126
+ }
127
+ }
128
+
129
+ $this->_smtp_auth = ($this->smtp_user == '' AND $this->smtp_pass == '') ? FALSE : TRUE;
130
+ $this->_safe_mode = ((boolean)@ini_get("safe_mode") === FALSE) ? FALSE : TRUE;
131
+ }
132
+
133
+ // --------------------------------------------------------------------
134
+
135
+ /**
136
+ * Initialize the Email Data
137
+ *
138
+ * @access public
139
+ * @return void
140
+ */
141
+ function clear($clear_attachments = FALSE)
142
+ {
143
+ $this->_subject = "";
144
+ $this->_body = "";
145
+ $this->_finalbody = "";
146
+ $this->_header_str = "";
147
+ $this->_replyto_flag = FALSE;
148
+ $this->_recipients = array();
149
+ $this->_headers = array();
150
+ $this->_debug_msg = array();
151
+
152
+ $this->_set_header('User-Agent', $this->useragent);
153
+ $this->_set_header('Date', $this->_set_date());
154
+
155
+ if ($clear_attachments !== FALSE)
156
+ {
157
+ $this->_attach_name = array();
158
+ $this->_attach_type = array();
159
+ $this->_attach_disp = array();
160
+ }
161
+ }
162
+
163
+ // --------------------------------------------------------------------
164
+
165
+ /**
166
+ * Set FROM
167
+ *
168
+ * @access public
169
+ * @param string
170
+ * @param string
171
+ * @return void
172
+ */
173
+ function from($from, $name = '')
174
+ {
175
+ if (preg_match( '/\<(.*)\>/', $from, $match))
176
+ {
177
+ $from = $match['1'];
178
+ }
179
+
180
+ if ($this->validate)
181
+ {
182
+ $this->validate_email($this->_str_to_array($from));
183
+ }
184
+
185
+ // prepare the display name
186
+ if ($name != '')
187
+ {
188
+ // only use Q encoding if there are characters that would require it
189
+ if ( ! preg_match('/[\200-\377]/', $name))
190
+ {
191
+ // add slashes for non-printing characters, slashes, and double quotes, and surround it in double quotes
192
+ $name = '"'.addcslashes($name, "\0..\37\177'\"\\").'"';
193
+ }
194
+ else
195
+ {
196
+ $name = $this->_prep_q_encoding($name, TRUE);
197
+ }
198
+ }
199
+
200
+ $this->_set_header('From', $name.' <'.$from.'>');
201
+ $this->_set_header('Return-Path', '<'.$from.'>');
202
+ }
203
+
204
+ // --------------------------------------------------------------------
205
+
206
+ /**
207
+ * Set Reply-to
208
+ *
209
+ * @access public
210
+ * @param string
211
+ * @param string
212
+ * @return void
213
+ */
214
+ function reply_to($replyto, $name = '')
215
+ {
216
+ if (preg_match( '/\<(.*)\>/', $replyto, $match))
217
+ {
218
+ $replyto = $match['1'];
219
+ }
220
+
221
+ if ($this->validate)
222
+ {
223
+ $this->validate_email($this->_str_to_array($replyto));
224
+ }
225
+
226
+ if ($name == '')
227
+ {
228
+ $name = $replyto;
229
+ }
230
+
231
+ if (strncmp($name, '"', 1) != 0)
232
+ {
233
+ $name = '"'.$name.'"';
234
+ }
235
+
236
+ $this->_set_header('Reply-To', $name.' <'.$replyto.'>');
237
+ $this->_replyto_flag = TRUE;
238
+ }
239
+
240
+ // --------------------------------------------------------------------
241
+
242
+ /**
243
+ * Set Recipients
244
+ *
245
+ * @access public
246
+ * @param string
247
+ * @return void
248
+ */
249
+ function to($to)
250
+ {
251
+ $to = $this->_str_to_array($to);
252
+ $to = $this->clean_email($to);
253
+
254
+ if ($this->validate)
255
+ {
256
+ $this->validate_email($to);
257
+ }
258
+
259
+ if ($this->_get_protocol() != 'mail')
260
+ {
261
+ $this->_set_header('To', implode(", ", $to));
262
+ }
263
+
264
+ switch ($this->_get_protocol())
265
+ {
266
+ case 'smtp' : $this->_recipients = $to;
267
+ break;
268
+ case 'sendmail' : $this->_recipients = implode(", ", $to);
269
+ break;
270
+ case 'mail' : $this->_recipients = implode(", ", $to);
271
+ break;
272
+ }
273
+ }
274
+
275
+ // --------------------------------------------------------------------
276
+
277
+ /**
278
+ * Set CC
279
+ *
280
+ * @access public
281
+ * @param string
282
+ * @return void
283
+ */
284
+ function cc($cc)
285
+ {
286
+ $cc = $this->_str_to_array($cc);
287
+ $cc = $this->clean_email($cc);
288
+
289
+ if ($this->validate)
290
+ {
291
+ $this->validate_email($cc);
292
+ }
293
+
294
+ $this->_set_header('Cc', implode(", ", $cc));
295
+
296
+ if ($this->_get_protocol() == "smtp")
297
+ {
298
+ $this->_cc_array = $cc;
299
+ }
300
+ }
301
+
302
+ // --------------------------------------------------------------------
303
+
304
+ /**
305
+ * Set BCC
306
+ *
307
+ * @access public
308
+ * @param string
309
+ * @param string
310
+ * @return void
311
+ */
312
+ function bcc($bcc, $limit = '')
313
+ {
314
+ if ($limit != '' && is_numeric($limit))
315
+ {
316
+ $this->bcc_batch_mode = TRUE;
317
+ $this->bcc_batch_size = $limit;
318
+ }
319
+
320
+ $bcc = $this->_str_to_array($bcc);
321
+ $bcc = $this->clean_email($bcc);
322
+
323
+ if ($this->validate)
324
+ {
325
+ $this->validate_email($bcc);
326
+ }
327
+
328
+ if (($this->_get_protocol() == "smtp") OR ($this->bcc_batch_mode && count($bcc) > $this->bcc_batch_size))
329
+ {
330
+ $this->_bcc_array = $bcc;
331
+ }
332
+ else
333
+ {
334
+ $this->_set_header('Bcc', implode(", ", $bcc));
335
+ }
336
+ }
337
+
338
+ // --------------------------------------------------------------------
339
+
340
+ /**
341
+ * Set Email Subject
342
+ *
343
+ * @access public
344
+ * @param string
345
+ * @return void
346
+ */
347
+ function subject($subject)
348
+ {
349
+ $subject = $this->_prep_q_encoding($subject);
350
+ $this->_set_header('Subject', $subject);
351
+ }
352
+
353
+ // --------------------------------------------------------------------
354
+
355
+ /**
356
+ * Set Body
357
+ *
358
+ * @access public
359
+ * @param string
360
+ * @return void
361
+ */
362
+ function message($body)
363
+ {
364
+ $this->_body = stripslashes(rtrim(str_replace("\r", "", $body)));
365
+ }
366
+
367
+ // --------------------------------------------------------------------
368
+
369
+ /**
370
+ * Assign file attachments
371
+ *
372
+ * @access public
373
+ * @param string
374
+ * @return void
375
+ */
376
+ function attach($filename, $disposition = 'attachment')
377
+ {
378
+ $this->_attach_name[] = $filename;
379
+ $this->_attach_type[] = $this->_mime_types(next(explode('.', basename($filename))));
380
+ $this->_attach_disp[] = $disposition; // Can also be 'inline' Not sure if it matters
381
+ }
382
+
383
+ // --------------------------------------------------------------------
384
+
385
+ /**
386
+ * Add a Header Item
387
+ *
388
+ * @access private
389
+ * @param string
390
+ * @param string
391
+ * @return void
392
+ */
393
+ function _set_header($header, $value)
394
+ {
395
+ $this->_headers[$header] = $value;
396
+ }
397
+
398
+ // --------------------------------------------------------------------
399
+
400
+ /**
401
+ * Convert a String to an Array
402
+ *
403
+ * @access private
404
+ * @param string
405
+ * @return array
406
+ */
407
+ function _str_to_array($email)
408
+ {
409
+ if ( ! is_array($email))
410
+ {
411
+ if (strpos($email, ',') !== FALSE)
412
+ {
413
+ $email = preg_split('/[\s,]/', $email, -1, PREG_SPLIT_NO_EMPTY);
414
+ }
415
+ else
416
+ {
417
+ $email = trim($email);
418
+ settype($email, "array");
419
+ }
420
+ }
421
+ return $email;
422
+ }
423
+
424
+ // --------------------------------------------------------------------
425
+
426
+ /**
427
+ * Set Multipart Value
428
+ *
429
+ * @access public
430
+ * @param string
431
+ * @return void
432
+ */
433
+ function set_alt_message($str = '')
434
+ {
435
+ $this->alt_message = ($str == '') ? '' : $str;
436
+ }
437
+
438
+ // --------------------------------------------------------------------
439
+
440
+ /**
441
+ * Set Mailtype
442
+ *
443
+ * @access public
444
+ * @param string
445
+ * @return void
446
+ */
447
+ function set_mailtype($type = 'text')
448
+ {
449
+ $this->mailtype = ($type == 'html') ? 'html' : 'text';
450
+ }
451
+
452
+ // --------------------------------------------------------------------
453
+
454
+ /**
455
+ * Set Wordwrap
456
+ *
457
+ * @access public
458
+ * @param string
459
+ * @return void
460
+ */
461
+ function set_wordwrap($wordwrap = TRUE)
462
+ {
463
+ $this->wordwrap = ($wordwrap === FALSE) ? FALSE : TRUE;
464
+ }
465
+
466
+ // --------------------------------------------------------------------
467
+
468
+ /**
469
+ * Set Protocol
470
+ *
471
+ * @access public
472
+ * @param string
473
+ * @return void
474
+ */
475
+ function set_protocol($protocol = 'mail')
476
+ {
477
+ $this->protocol = ( ! in_array($protocol, $this->_protocols, TRUE)) ? 'mail' : strtolower($protocol);
478
+ }
479
+
480
+ // --------------------------------------------------------------------
481
+
482
+ /**
483
+ * Set Priority
484
+ *
485
+ * @access public
486
+ * @param integer
487
+ * @return void
488
+ */
489
+ function set_priority($n = 3)
490
+ {
491
+ if ( ! is_numeric($n))
492
+ {
493
+ $this->priority = 3;
494
+ return;
495
+ }
496
+
497
+ if ($n < 1 OR $n > 5)
498
+ {
499
+ $this->priority = 3;
500
+ return;
501
+ }
502
+
503
+ $this->priority = $n;
504
+ }
505
+
506
+ // --------------------------------------------------------------------
507
+
508
+ /**
509
+ * Set Newline Character
510
+ *
511
+ * @access public
512
+ * @param string
513
+ * @return void
514
+ */
515
+ function set_newline($newline = "\n")
516
+ {
517
+ if ($newline != "\n" AND $newline != "\r\n" AND $newline != "\r")
518
+ {
519
+ $this->newline = "\n";
520
+ return;
521
+ }
522
+
523
+ $this->newline = $newline;
524
+ }
525
+
526
+ // --------------------------------------------------------------------
527
+
528
+ /**
529
+ * Set CRLF
530
+ *
531
+ * @access public
532
+ * @param string
533
+ * @return void
534
+ */
535
+ function set_crlf($crlf = "\n")
536
+ {
537
+ if ($crlf != "\n" AND $crlf != "\r\n" AND $crlf != "\r")
538
+ {
539
+ $this->crlf = "\n";
540
+ return;
541
+ }
542
+
543
+ $this->crlf = $crlf;
544
+ }
545
+
546
+ // --------------------------------------------------------------------
547
+
548
+ /**
549
+ * Set Message Boundary
550
+ *
551
+ * @access private
552
+ * @return void
553
+ */
554
+ function _set_boundaries()
555
+ {
556
+ $this->_alt_boundary = "B_ALT_".uniqid(''); // multipart/alternative
557
+ $this->_atc_boundary = "B_ATC_".uniqid(''); // attachment boundary
558
+ }
559
+
560
+ // --------------------------------------------------------------------
561
+
562
+ /**
563
+ * Get the Message ID
564
+ *
565
+ * @access private
566
+ * @return string
567
+ */
568
+ function _get_message_id()
569
+ {
570
+ $from = $this->_headers['Return-Path'];
571
+ $from = str_replace(">", "", $from);
572
+ $from = str_replace("<", "", $from);
573
+
574
+ return "<".uniqid('').strstr($from, '@').">";
575
+ }
576
+
577
+ // --------------------------------------------------------------------
578
+
579
+ /**
580
+ * Get Mail Protocol
581
+ *
582
+ * @access private
583
+ * @param bool
584
+ * @return string
585
+ */
586
+ function _get_protocol($return = TRUE)
587
+ {
588
+ $this->protocol = strtolower($this->protocol);
589
+ $this->protocol = ( ! in_array($this->protocol, $this->_protocols, TRUE)) ? 'mail' : $this->protocol;
590
+
591
+ if ($return == TRUE)
592
+ {
593
+ return $this->protocol;
594
+ }
595
+ }
596
+
597
+ // --------------------------------------------------------------------
598
+
599
+ /**
600
+ * Get Mail Encoding
601
+ *
602
+ * @access private
603
+ * @param bool
604
+ * @return string
605
+ */
606
+ function _get_encoding($return = TRUE)
607
+ {
608
+ $this->_encoding = ( ! in_array($this->_encoding, $this->_bit_depths)) ? '8bit' : $this->_encoding;
609
+
610
+ foreach ($this->_base_charsets as $charset)
611
+ {
612
+ if (strncmp($charset, $this->charset, strlen($charset)) == 0)
613
+ {
614
+ $this->_encoding = '7bit';
615
+ }
616
+ }
617
+
618
+ if ($return == TRUE)
619
+ {
620
+ return $this->_encoding;
621
+ }
622
+ }
623
+
624
+ // --------------------------------------------------------------------
625
+
626
+ /**
627
+ * Get content type (text/html/attachment)
628
+ *
629
+ * @access private
630
+ * @return string
631
+ */
632
+ function _get_content_type()
633
+ {
634
+ if ($this->mailtype == 'html' && count($this->_attach_name) == 0)
635
+ {
636
+ return 'html';
637
+ }
638
+ elseif ($this->mailtype == 'html' && count($this->_attach_name) > 0)
639
+ {
640
+ return 'html-attach';
641
+ }
642
+ elseif ($this->mailtype == 'text' && count($this->_attach_name) > 0)
643
+ {
644
+ return 'plain-attach';
645
+ }
646
+ else
647
+ {
648
+ return 'plain';
649
+ }
650
+ }
651
+
652
+ // --------------------------------------------------------------------
653
+
654
+ /**
655
+ * Set RFC 822 Date
656
+ *
657
+ * @access private
658
+ * @return string
659
+ */
660
+ function _set_date()
661
+ {
662
+ $timezone = date("Z");
663
+ $operator = (strncmp($timezone, '-', 1) == 0) ? '-' : '+';
664
+ $timezone = abs($timezone);
665
+ $timezone = floor($timezone/3600) * 100 + ($timezone % 3600 ) / 60;
666
+
667
+ return sprintf("%s %s%04d", date("D, j M Y H:i:s"), $operator, $timezone);
668
+ }
669
+
670
+ // --------------------------------------------------------------------
671
+
672
+ /**
673
+ * Mime message
674
+ *
675
+ * @access private
676
+ * @return string
677
+ */
678
+ function _get_mime_message()
679
+ {
680
+ return "This is a multi-part message in MIME format.".$this->newline."Your email application may not support this format.";
681
+ }
682
+
683
+ // --------------------------------------------------------------------
684
+
685
+ /**
686
+ * Validate Email Address
687
+ *
688
+ * @access public
689
+ * @param string
690
+ * @return bool
691
+ */
692
+ function validate_email($email)
693
+ {
694
+ if ( ! is_array($email))
695
+ {
696
+ $this->_set_error_message('email_must_be_array');
697
+ return FALSE;
698
+ }
699
+
700
+ foreach ($email as $val)
701
+ {
702
+ if ( ! $this->valid_email($val))
703
+ {
704
+ $this->_set_error_message('email_invalid_address', $val);
705
+ return FALSE;
706
+ }
707
+ }
708
+
709
+ return TRUE;
710
+ }
711
+
712
+ // --------------------------------------------------------------------
713
+
714
+ /**
715
+ * Email Validation
716
+ *
717
+ * @access public
718
+ * @param string
719
+ * @return bool
720
+ */
721
+ function valid_email($address)
722
+ {
723
+ return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $address)) ? FALSE : TRUE;
724
+ }
725
+
726
+ // --------------------------------------------------------------------
727
+
728
+ /**
729
+ * Clean Extended Email Address: Joe Smith <joe@smith.com>
730
+ *
731
+ * @access public
732
+ * @param string
733
+ * @return string
734
+ */
735
+ function clean_email($email)
736
+ {
737
+ if ( ! is_array($email))
738
+ {
739
+ if (preg_match('/\<(.*)\>/', $email, $match))
740
+ {
741
+ return $match['1'];
742
+ }
743
+ else
744
+ {
745
+ return $email;
746
+ }
747
+ }
748
+
749
+ $clean_email = array();
750
+
751
+ foreach ($email as $addy)
752
+ {
753
+ if (preg_match( '/\<(.*)\>/', $addy, $match))
754
+ {
755
+ $clean_email[] = $match['1'];
756
+ }
757
+ else
758
+ {
759
+ $clean_email[] = $addy;
760
+ }
761
+ }
762
+
763
+ return $clean_email;
764
+ }
765
+
766
+ // --------------------------------------------------------------------
767
+
768
+ /**
769
+ * Build alternative plain text message
770
+ *
771
+ * This function provides the raw message for use
772
+ * in plain-text headers of HTML-formatted emails.
773
+ * If the user hasn't specified his own alternative message
774
+ * it creates one by stripping the HTML
775
+ *
776
+ * @access private
777
+ * @return string
778
+ */
779
+ function _get_alt_message()
780
+ {
781
+ if ($this->alt_message != "")
782
+ {
783
+ return $this->word_wrap($this->alt_message, '76');
784
+ }
785
+
786
+ if (preg_match('/\<body.*?\>(.*)\<\/body\>/si', $this->_body, $match))
787
+ {
788
+ $body = $match['1'];
789
+ }
790
+ else
791
+ {
792
+ $body = $this->_body;
793
+ }
794
+
795
+ $body = trim(strip_tags($body));
796
+ $body = preg_replace( '#<!--(.*)--\>#', "", $body);
797
+ $body = str_replace("\t", "", $body);
798
+
799
+ for ($i = 20; $i >= 3; $i--)
800
+ {
801
+ $n = "";
802
+
803
+ for ($x = 1; $x <= $i; $x ++)
804
+ {
805
+ $n .= "\n";
806
+ }
807
+
808
+ $body = str_replace($n, "\n\n", $body);
809
+ }
810
+
811
+ return $this->word_wrap($body, '76');
812
+ }
813
+
814
+ // --------------------------------------------------------------------
815
+
816
+ /**
817
+ * Word Wrap
818
+ *
819
+ * @access public
820
+ * @param string
821
+ * @param integer
822
+ * @return string
823
+ */
824
+ function word_wrap($str, $charlim = '')
825
+ {
826
+ // Se the character limit
827
+ if ($charlim == '')
828
+ {
829
+ $charlim = ($this->wrapchars == "") ? "76" : $this->wrapchars;
830
+ }
831
+
832
+ // Reduce multiple spaces
833
+ $str = preg_replace("| +|", " ", $str);
834
+
835
+ // Standardize newlines
836
+ if (strpos($str, "\r") !== FALSE)
837
+ {
838
+ $str = str_replace(array("\r\n", "\r"), "\n", $str);
839
+ }
840
+
841
+ // If the current word is surrounded by {unwrap} tags we'll
842
+ // strip the entire chunk and replace it with a marker.
843
+ $unwrap = array();
844
+ if (preg_match_all("|(\{unwrap\}.+?\{/unwrap\})|s", $str, $matches))
845
+ {
846
+ for ($i = 0; $i < count($matches['0']); $i++)
847
+ {
848
+ $unwrap[] = $matches['1'][$i];
849
+ $str = str_replace($matches['1'][$i], "{{unwrapped".$i."}}", $str);
850
+ }
851
+ }
852
+
853
+ // Use PHP's native function to do the initial wordwrap.
854
+ // We set the cut flag to FALSE so that any individual words that are
855
+ // too long get left alone. In the next step we'll deal with them.
856
+ $str = wordwrap($str, $charlim, "\n", FALSE);
857
+
858
+ // Split the string into individual lines of text and cycle through them
859
+ $output = "";
860
+ foreach (explode("\n", $str) as $line)
861
+ {
862
+ // Is the line within the allowed character count?
863
+ // If so we'll join it to the output and continue
864
+ if (strlen($line) <= $charlim)
865
+ {
866
+ $output .= $line.$this->newline;
867
+ continue;
868
+ }
869
+
870
+ $temp = '';
871
+ while((strlen($line)) > $charlim)
872
+ {
873
+ // If the over-length word is a URL we won't wrap it
874
+ if (preg_match("!\[url.+\]|://|wwww.!", $line))
875
+ {
876
+ break;
877
+ }
878
+
879
+ // Trim the word down
880
+ $temp .= substr($line, 0, $charlim-1);
881
+ $line = substr($line, $charlim-1);
882
+ }
883
+
884
+ // If $temp contains data it means we had to split up an over-length
885
+ // word into smaller chunks so we'll add it back to our current line
886
+ if ($temp != '')
887
+ {
888
+ $output .= $temp.$this->newline.$line;
889
+ }
890
+ else
891
+ {
892
+ $output .= $line;
893
+ }
894
+
895
+ $output .= $this->newline;
896
+ }
897
+
898
+ // Put our markers back
899
+ if (count($unwrap) > 0)
900
+ {
901
+ foreach ($unwrap as $key => $val)
902
+ {
903
+ $output = str_replace("{{unwrapped".$key."}}", $val, $output);
904
+ }
905
+ }
906
+
907
+ return $output;
908
+ }
909
+
910
+ // --------------------------------------------------------------------
911
+
912
+ /**
913
+ * Build final headers
914
+ *
915
+ * @access private
916
+ * @param string
917
+ * @return string
918
+ */
919
+ function _build_headers()
920
+ {
921
+ $this->_set_header('X-Sender', $this->clean_email($this->_headers['From']));
922
+ $this->_set_header('X-Mailer', $this->useragent);
923
+ $this->_set_header('X-Priority', $this->_priorities[$this->priority - 1]);
924
+ $this->_set_header('Message-ID', $this->_get_message_id());
925
+ $this->_set_header('Mime-Version', '1.0');
926
+ }
927
+
928
+ // --------------------------------------------------------------------
929
+
930
+ /**
931
+ * Write Headers as a string
932
+ *
933
+ * @access private
934
+ * @return void
935
+ */
936
+ function _write_headers()
937
+ {
938
+ if ($this->protocol == 'mail')
939
+ {
940
+ $this->_subject = $this->_headers['Subject'];
941
+ unset($this->_headers['Subject']);
942
+ }
943
+
944
+ reset($this->_headers);
945
+ $this->_header_str = "";
946
+
947
+ foreach($this->_headers as $key => $val)
948
+ {
949
+ $val = trim($val);
950
+
951
+ if ($val != "")
952
+ {
953
+ $this->_header_str .= $key.": ".$val.$this->newline;
954
+ }
955
+ }
956
+
957
+ if ($this->_get_protocol() == 'mail')
958
+ {
959
+ $this->_header_str = rtrim($this->_header_str);
960
+ }
961
+ }
962
+
963
+ // --------------------------------------------------------------------
964
+
965
+ /**
966
+ * Build Final Body and attachments
967
+ *
968
+ * @access private
969
+ * @return void
970
+ */
971
+ function _build_message()
972
+ {
973
+ if ($this->wordwrap === TRUE AND $this->mailtype != 'html')
974
+ {
975
+ $this->_body = $this->word_wrap($this->_body);
976
+ }
977
+
978
+ $this->_set_boundaries();
979
+ $this->_write_headers();
980
+
981
+ $hdr = ($this->_get_protocol() == 'mail') ? $this->newline : '';
982
+
983
+ switch ($this->_get_content_type())
984
+ {
985
+ case 'plain' :
986
+
987
+ $hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
988
+ $hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding();
989
+
990
+ if ($this->_get_protocol() == 'mail')
991
+ {
992
+ $this->_header_str .= $hdr;
993
+ $this->_finalbody = $this->_body;
994
+
995
+ return;
996
+ }
997
+
998
+ $hdr .= $this->newline . $this->newline . $this->_body;
999
+
1000
+ $this->_finalbody = $hdr;
1001
+ return;
1002
+
1003
+ break;
1004
+ case 'html' :
1005
+
1006
+ if ($this->send_multipart === FALSE)
1007
+ {
1008
+ $hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
1009
+ $hdr .= "Content-Transfer-Encoding: quoted-printable";
1010
+ }
1011
+ else
1012
+ {
1013
+ $hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline . $this->newline;
1014
+ $hdr .= $this->_get_mime_message() . $this->newline . $this->newline;
1015
+ $hdr .= "--" . $this->_alt_boundary . $this->newline;
1016
+
1017
+ $hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
1018
+ $hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
1019
+ $hdr .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;
1020
+
1021
+ $hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
1022
+ $hdr .= "Content-Transfer-Encoding: quoted-printable";
1023
+ }
1024
+
1025
+ $this->_body = $this->_prep_quoted_printable($this->_body);
1026
+
1027
+ if ($this->_get_protocol() == 'mail')
1028
+ {
1029
+ $this->_header_str .= $hdr;
1030
+ $this->_finalbody = $this->_body . $this->newline . $this->newline;
1031
+
1032
+ if ($this->send_multipart !== FALSE)
1033
+ {
1034
+ $this->_finalbody .= "--" . $this->_alt_boundary . "--";
1035
+ }
1036
+
1037
+ return;
1038
+ }
1039
+
1040
+ $hdr .= $this->newline . $this->newline;
1041
+ $hdr .= $this->_body . $this->newline . $this->newline;
1042
+
1043
+ if ($this->send_multipart !== FALSE)
1044
+ {
1045
+ $hdr .= "--" . $this->_alt_boundary . "--";
1046
+ }
1047
+
1048
+ $this->_finalbody = $hdr;
1049
+ return;
1050
+
1051
+ break;
1052
+ case 'plain-attach' :
1053
+
1054
+ $hdr .= "Content-Type: multipart/".$this->multipart."; boundary=\"" . $this->_atc_boundary."\"" . $this->newline . $this->newline;
1055
+ $hdr .= $this->_get_mime_message() . $this->newline . $this->newline;
1056
+ $hdr .= "--" . $this->_atc_boundary . $this->newline;
1057
+
1058
+ $hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
1059
+ $hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding();
1060
+
1061
+ if ($this->_get_protocol() == 'mail')
1062
+ {
1063
+ $this->_header_str .= $hdr;
1064
+
1065
+ $body = $this->_body . $this->newline . $this->newline;
1066
+ }
1067
+
1068
+ $hdr .= $this->newline . $this->newline;
1069
+ $hdr .= $this->_body . $this->newline . $this->newline;
1070
+
1071
+ break;
1072
+ case 'html-attach' :
1073
+
1074
+ $hdr .= "Content-Type: multipart/".$this->multipart."; boundary=\"" . $this->_atc_boundary."\"" . $this->newline . $this->newline;
1075
+ $hdr .= $this->_get_mime_message() . $this->newline . $this->newline;
1076
+ $hdr .= "--" . $this->_atc_boundary . $this->newline;
1077
+
1078
+ $hdr .= "Content-Type: multipart/alternative; boundary=\"" . $this->_alt_boundary . "\"" . $this->newline .$this->newline;
1079
+ $hdr .= "--" . $this->_alt_boundary . $this->newline;
1080
+
1081
+ $hdr .= "Content-Type: text/plain; charset=" . $this->charset . $this->newline;
1082
+ $hdr .= "Content-Transfer-Encoding: " . $this->_get_encoding() . $this->newline . $this->newline;
1083
+ $hdr .= $this->_get_alt_message() . $this->newline . $this->newline . "--" . $this->_alt_boundary . $this->newline;
1084
+
1085
+ $hdr .= "Content-Type: text/html; charset=" . $this->charset . $this->newline;
1086
+ $hdr .= "Content-Transfer-Encoding: quoted-printable";
1087
+
1088
+ $this->_body = $this->_prep_quoted_printable($this->_body);
1089
+
1090
+ if ($this->_get_protocol() == 'mail')
1091
+ {
1092
+ $this->_header_str .= $hdr;
1093
+
1094
+ $body = $this->_body . $this->newline . $this->newline;
1095
+ $body .= "--" . $this->_alt_boundary . "--" . $this->newline . $this->newline;
1096
+ }
1097
+
1098
+ $hdr .= $this->newline . $this->newline;
1099
+ $hdr .= $this->_body . $this->newline . $this->newline;
1100
+ $hdr .= "--" . $this->_alt_boundary . "--" . $this->newline . $this->newline;
1101
+
1102
+ break;
1103
+ }
1104
+
1105
+ $attachment = array();
1106
+
1107
+ $z = 0;
1108
+
1109
+ for ($i=0; $i < count($this->_attach_name); $i++)
1110
+ {
1111
+ $filename = $this->_attach_name[$i];
1112
+ $basename = basename($filename);
1113
+ $ctype = $this->_attach_type[$i];
1114
+
1115
+ if ( ! file_exists($filename))
1116
+ {
1117
+ $this->_set_error_message('email_attachment_missing', $filename);
1118
+ return FALSE;
1119
+ }
1120
+
1121
+ $h = "--".$this->_atc_boundary.$this->newline;
1122
+ $h .= "Content-type: ".$ctype."; ";
1123
+ $h .= "name=\"".$basename."\"".$this->newline;
1124
+ $h .= "Content-Disposition: ".$this->_attach_disp[$i].";".$this->newline;
1125
+ $h .= "Content-Transfer-Encoding: base64".$this->newline;
1126
+
1127
+ $attachment[$z++] = $h;
1128
+ $file = filesize($filename) +1;
1129
+
1130
+ if ( ! $fp = fopen($filename, FOPEN_READ))
1131
+ {
1132
+ $this->_set_error_message('email_attachment_unreadable', $filename);
1133
+ return FALSE;
1134
+ }
1135
+
1136
+ $attachment[$z++] = chunk_split(base64_encode(fread($fp, $file)));
1137
+ fclose($fp);
1138
+ }
1139
+
1140
+ if ($this->_get_protocol() == 'mail')
1141
+ {
1142
+ $this->_finalbody = $body . implode($this->newline, $attachment).$this->newline."--".$this->_atc_boundary."--";
1143
+
1144
+ return;
1145
+ }
1146
+
1147
+ $this->_finalbody = $hdr.implode($this->newline, $attachment).$this->newline."--".$this->_atc_boundary."--";
1148
+
1149
+ return;
1150
+ }
1151
+
1152
+ // --------------------------------------------------------------------
1153
+
1154
+ /**
1155
+ * Prep Quoted Printable
1156
+ *
1157
+ * Prepares string for Quoted-Printable Content-Transfer-Encoding
1158
+ * Refer to RFC 2045 http://www.ietf.org/rfc/rfc2045.txt
1159
+ *
1160
+ * @access private
1161
+ * @param string
1162
+ * @param integer
1163
+ * @return string
1164
+ */
1165
+ function _prep_quoted_printable($str, $charlim = '')
1166
+ {
1167
+ // Set the character limit
1168
+ // Don't allow over 76, as that will make servers and MUAs barf
1169
+ // all over quoted-printable data
1170
+ if ($charlim == '' OR $charlim > '76')
1171
+ {
1172
+ $charlim = '76';
1173
+ }
1174
+
1175
+ // Reduce multiple spaces
1176
+ $str = preg_replace("| +|", " ", $str);
1177
+
1178
+ // kill nulls
1179
+ $str = preg_replace('/\x00+/', '', $str);
1180
+
1181
+ // Standardize newlines
1182
+ if (strpos($str, "\r") !== FALSE)
1183
+ {
1184
+ $str = str_replace(array("\r\n", "\r"), "\n", $str);
1185
+ }
1186
+
1187
+ // We are intentionally wrapping so mail servers will encode characters
1188
+ // properly and MUAs will behave, so {unwrap} must go!
1189
+ $str = str_replace(array('{unwrap}', '{/unwrap}'), '', $str);
1190
+
1191
+ // Break into an array of lines
1192
+ $lines = explode("\n", $str);
1193
+
1194
+ $escape = '=';
1195
+ $output = '';
1196
+
1197
+ foreach ($lines as $line)
1198
+ {
1199
+ $length = strlen($line);
1200
+ $temp = '';
1201
+
1202
+ // Loop through each character in the line to add soft-wrap
1203
+ // characters at the end of a line " =\r\n" and add the newly
1204
+ // processed line(s) to the output (see comment on $crlf class property)
1205
+ for ($i = 0; $i < $length; $i++)
1206
+ {
1207
+ // Grab the next character
1208
+ $char = substr($line, $i, 1);
1209
+ $ascii = ord($char);
1210
+
1211
+ // Convert spaces and tabs but only if it's the end of the line
1212
+ if ($i == ($length - 1))
1213
+ {
1214
+ $char = ($ascii == '32' OR $ascii == '9') ? $escape.sprintf('%02s', dechex($ascii)) : $char;
1215
+ }
1216
+
1217
+ // encode = signs
1218
+ if ($ascii == '61')
1219
+ {
1220
+ $char = $escape.strtoupper(sprintf('%02s', dechex($ascii))); // =3D
1221
+ }
1222
+
1223
+ // If we're at the character limit, add the line to the output,
1224
+ // reset our temp variable, and keep on chuggin'
1225
+ if ((strlen($temp) + strlen($char)) >= $charlim)
1226
+ {
1227
+ $output .= $temp.$escape.$this->crlf;
1228
+ $temp = '';
1229
+ }
1230
+
1231
+ // Add the character to our temporary line
1232
+ $temp .= $char;
1233
+ }
1234
+
1235
+ // Add our completed line to the output
1236
+ $output .= $temp.$this->crlf;
1237
+ }
1238
+
1239
+ // get rid of extra CRLF tacked onto the end
1240
+ $output = substr($output, 0, strlen($this->crlf) * -1);
1241
+
1242
+ return $output;
1243
+ }
1244
+
1245
+ // --------------------------------------------------------------------
1246
+
1247
+ /**
1248
+ * Prep Q Encoding
1249
+ *
1250
+ * Performs "Q Encoding" on a string for use in email headers. It's related
1251
+ * but not identical to quoted-printable, so it has its own method
1252
+ *
1253
+ * @access public
1254
+ * @param str
1255
+ * @param bool // set to TRUE for processing From: headers
1256
+ * @return str
1257
+ */
1258
+ function _prep_q_encoding($str, $from = FALSE)
1259
+ {
1260
+ $str = str_replace(array("\r", "\n"), array('', ''), $str);
1261
+
1262
+ // Line length must not exceed 76 characters, so we adjust for
1263
+ // a space, 7 extra characters =??Q??=, and the charset that we will add to each line
1264
+ $limit = 75 - 7 - strlen($this->charset);
1265
+
1266
+ // these special characters must be converted too
1267
+ $convert = array('_', '=', '?');
1268
+
1269
+ if ($from === TRUE)
1270
+ {
1271
+ $convert[] = ',';
1272
+ $convert[] = ';';
1273
+ }
1274
+
1275
+ $output = '';
1276
+ $temp = '';
1277
+
1278
+ for ($i = 0, $length = strlen($str); $i < $length; $i++)
1279
+ {
1280
+ // Grab the next character
1281
+ $char = substr($str, $i, 1);
1282
+ $ascii = ord($char);
1283
+
1284
+ // convert ALL non-printable ASCII characters and our specials
1285
+ if ($ascii < 32 OR $ascii > 126 OR in_array($char, $convert))
1286
+ {
1287
+ $char = '='.dechex($ascii);
1288
+ }
1289
+
1290
+ // handle regular spaces a bit more compactly than =20
1291
+ if ($ascii == 32)
1292
+ {
1293
+ $char = '_';
1294
+ }
1295
+
1296
+ // If we're at the character limit, add the line to the output,
1297
+ // reset our temp variable, and keep on chuggin'
1298
+ if ((strlen($temp) + strlen($char)) >= $limit)
1299
+ {
1300
+ $output .= $temp.$this->crlf;
1301
+ $temp = '';
1302
+ }
1303
+
1304
+ // Add the character to our temporary line
1305
+ $temp .= $char;
1306
+ }
1307
+
1308
+ $str = $output.$temp;
1309
+
1310
+ // wrap each line with the shebang, charset, and transfer encoding
1311
+ // the preceding space on successive lines is required for header "folding"
1312
+ $str = trim(preg_replace('/^(.*)$/m', ' =?'.$this->charset.'?Q?$1?=', $str));
1313
+
1314
+ return $str;
1315
+ }
1316
+
1317
+ // --------------------------------------------------------------------
1318
+
1319
+ /**
1320
+ * Send Email
1321
+ *
1322
+ * @access public
1323
+ * @return bool
1324
+ */
1325
+ function send()
1326
+ {
1327
+ if ($this->_replyto_flag == FALSE)
1328
+ {
1329
+ $this->reply_to($this->_headers['From']);
1330
+ }
1331
+
1332
+ if (( ! isset($this->_recipients) AND ! isset($this->_headers['To'])) AND
1333
+ ( ! isset($this->_bcc_array) AND ! isset($this->_headers['Bcc'])) AND
1334
+ ( ! isset($this->_headers['Cc'])))
1335
+ {
1336
+ $this->_set_error_message('email_no_recipients');
1337
+ return FALSE;
1338
+ }
1339
+
1340
+ $this->_build_headers();
1341
+
1342
+ if ($this->bcc_batch_mode AND count($this->_bcc_array) > 0)
1343
+ {
1344
+ if (count($this->_bcc_array) > $this->bcc_batch_size)
1345
+ return $this->batch_bcc_send();
1346
+ }
1347
+
1348
+ $this->_build_message();
1349
+
1350
+ if ( ! $this->_spool_email())
1351
+ {
1352
+ return FALSE;
1353
+ }
1354
+ else
1355
+ {
1356
+ return TRUE;
1357
+ }
1358
+ }
1359
+
1360
+ // --------------------------------------------------------------------
1361
+
1362
+ /**
1363
+ * Batch Bcc Send. Sends groups of BCCs in batches
1364
+ *
1365
+ * @access public
1366
+ * @return bool
1367
+ */
1368
+ function batch_bcc_send()
1369
+ {
1370
+ $float = $this->bcc_batch_size -1;
1371
+
1372
+ $set = "";
1373
+
1374
+ $chunk = array();
1375
+
1376
+ for ($i = 0; $i < count($this->_bcc_array); $i++)
1377
+ {
1378
+ if (isset($this->_bcc_array[$i]))
1379
+ {
1380
+ $set .= ", ".$this->_bcc_array[$i];
1381
+ }
1382
+
1383
+ if ($i == $float)
1384
+ {
1385
+ $chunk[] = substr($set, 1);
1386
+ $float = $float + $this->bcc_batch_size;
1387
+ $set = "";
1388
+ }
1389
+
1390
+ if ($i == count($this->_bcc_array)-1)
1391
+ {
1392
+ $chunk[] = substr($set, 1);
1393
+ }
1394
+ }
1395
+
1396
+ for ($i = 0; $i < count($chunk); $i++)
1397
+ {
1398
+ unset($this->_headers['Bcc']);
1399
+ unset($bcc);
1400
+
1401
+ $bcc = $this->_str_to_array($chunk[$i]);
1402
+ $bcc = $this->clean_email($bcc);
1403
+
1404
+ if ($this->protocol != 'smtp')
1405
+ {
1406
+ $this->_set_header('Bcc', implode(", ", $bcc));
1407
+ }
1408
+ else
1409
+ {
1410
+ $this->_bcc_array = $bcc;
1411
+ }
1412
+
1413
+ $this->_build_message();
1414
+ $this->_spool_email();
1415
+ }
1416
+ }
1417
+
1418
+ // --------------------------------------------------------------------
1419
+
1420
+ /**
1421
+ * Unwrap special elements
1422
+ *
1423
+ * @access private
1424
+ * @return void
1425
+ */
1426
+ function _unwrap_specials()
1427
+ {
1428
+ $this->_finalbody = preg_replace_callback("/\{unwrap\}(.*?)\{\/unwrap\}/si", array($this, '_remove_nl_callback'), $this->_finalbody);
1429
+ }
1430
+
1431
+ // --------------------------------------------------------------------
1432
+
1433
+ /**
1434
+ * Strip line-breaks via callback
1435
+ *
1436
+ * @access private
1437
+ * @return string
1438
+ */
1439
+ function _remove_nl_callback($matches)
1440
+ {
1441
+ if (strpos($matches[1], "\r") !== FALSE OR strpos($matches[1], "\n") !== FALSE)
1442
+ {
1443
+ $matches[1] = str_replace(array("\r\n", "\r", "\n"), '', $matches[1]);
1444
+ }
1445
+
1446
+ return $matches[1];
1447
+ }
1448
+
1449
+ // --------------------------------------------------------------------
1450
+
1451
+ /**
1452
+ * Spool mail to the mail server
1453
+ *
1454
+ * @access private
1455
+ * @return bool
1456
+ */
1457
+ function _spool_email()
1458
+ {
1459
+ $this->_unwrap_specials();
1460
+
1461
+ switch ($this->_get_protocol())
1462
+ {
1463
+ case 'mail' :
1464
+
1465
+ if ( ! $this->_send_with_mail())
1466
+ {
1467
+ $this->_set_error_message('email_send_failure_phpmail');
1468
+ return FALSE;
1469
+ }
1470
+ break;
1471
+ case 'sendmail' :
1472
+
1473
+ if ( ! $this->_send_with_sendmail())
1474
+ {
1475
+ $this->_set_error_message('email_send_failure_sendmail');
1476
+ return FALSE;
1477
+ }
1478
+ break;
1479
+ case 'smtp' :
1480
+
1481
+ if ( ! $this->_send_with_smtp())
1482
+ {
1483
+ $this->_set_error_message('email_send_failure_smtp');
1484
+ return FALSE;
1485
+ }
1486
+ break;
1487
+
1488
+ }
1489
+
1490
+ $this->_set_error_message('email_sent', $this->_get_protocol());
1491
+ return TRUE;
1492
+ }
1493
+
1494
+ // --------------------------------------------------------------------
1495
+
1496
+ /**
1497
+ * Send using mail()
1498
+ *
1499
+ * @access private
1500
+ * @return bool
1501
+ */
1502
+ function _send_with_mail()
1503
+ {
1504
+ if ($this->_safe_mode == TRUE)
1505
+ {
1506
+ if ( ! mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str))
1507
+ {
1508
+ return FALSE;
1509
+ }
1510
+ else
1511
+ {
1512
+ return TRUE;
1513
+ }
1514
+ }
1515
+ else
1516
+ {
1517
+ // most documentation of sendmail using the "-f" flag lacks a space after it, however
1518
+ // we've encountered servers that seem to require it to be in place.
1519
+ if ( ! mail($this->_recipients, $this->_subject, $this->_finalbody, $this->_header_str, "-f ".$this->clean_email($this->_headers['From'])))
1520
+ {
1521
+ return FALSE;
1522
+ }
1523
+ else
1524
+ {
1525
+ return TRUE;
1526
+ }
1527
+ }
1528
+ }
1529
+
1530
+ // --------------------------------------------------------------------
1531
+
1532
+ /**
1533
+ * Send using Sendmail
1534
+ *
1535
+ * @access private
1536
+ * @return bool
1537
+ */
1538
+ function _send_with_sendmail()
1539
+ {
1540
+ $fp = @popen($this->mailpath . " -oi -f ".$this->clean_email($this->_headers['From'])." -t", 'w');
1541
+
1542
+ if ($fp === FALSE OR $fp === NULL)
1543
+ {
1544
+ // server probably has popen disabled, so nothing we can do to get a verbose error.
1545
+ return FALSE;
1546
+ }
1547
+
1548
+ fputs($fp, $this->_header_str);
1549
+ fputs($fp, $this->_finalbody);
1550
+
1551
+ $status = pclose($fp);
1552
+
1553
+ if (version_compare(PHP_VERSION, '4.2.3') == -1)
1554
+ {
1555
+ $status = $status >> 8 & 0xFF;
1556
+ }
1557
+
1558
+ if ($status != 0)
1559
+ {
1560
+ $this->_set_error_message('email_exit_status', $status);
1561
+ $this->_set_error_message('email_no_socket');
1562
+ return FALSE;
1563
+ }
1564
+
1565
+ return TRUE;
1566
+ }
1567
+
1568
+ // --------------------------------------------------------------------
1569
+
1570
+ /**
1571
+ * Send using SMTP
1572
+ *
1573
+ * @access private
1574
+ * @return bool
1575
+ */
1576
+ function _send_with_smtp()
1577
+ {
1578
+ if ($this->smtp_host == '')
1579
+ {
1580
+ $this->_set_error_message('email_no_hostname');
1581
+ return FALSE;
1582
+ }
1583
+
1584
+ $this->_smtp_connect();
1585
+ $this->_smtp_authenticate();
1586
+
1587
+ $this->_send_command('from', $this->clean_email($this->_headers['From']));
1588
+
1589
+ foreach($this->_recipients as $val)
1590
+ {
1591
+ $this->_send_command('to', $val);
1592
+ }
1593
+
1594
+ if (count($this->_cc_array) > 0)
1595
+ {
1596
+ foreach($this->_cc_array as $val)
1597
+ {
1598
+ if ($val != "")
1599
+ {
1600
+ $this->_send_command('to', $val);
1601
+ }
1602
+ }
1603
+ }
1604
+
1605
+ if (count($this->_bcc_array) > 0)
1606
+ {
1607
+ foreach($this->_bcc_array as $val)
1608
+ {
1609
+ if ($val != "")
1610
+ {
1611
+ $this->_send_command('to', $val);
1612
+ }
1613
+ }
1614
+ }
1615
+
1616
+ $this->_send_command('data');
1617
+
1618
+ // perform dot transformation on any lines that begin with a dot
1619
+ $this->_send_data($this->_header_str . preg_replace('/^\./m', '..$1', $this->_finalbody));
1620
+
1621
+ $this->_send_data('.');
1622
+
1623
+ $reply = $this->_get_smtp_data();
1624
+
1625
+ $this->_set_error_message($reply);
1626
+
1627
+ if (strncmp($reply, '250', 3) != 0)
1628
+ {
1629
+ $this->_set_error_message('email_smtp_error', $reply);
1630
+ return FALSE;
1631
+ }
1632
+
1633
+ $this->_send_command('quit');
1634
+ return TRUE;
1635
+ }
1636
+
1637
+ // --------------------------------------------------------------------
1638
+
1639
+ /**
1640
+ * SMTP Connect
1641
+ *
1642
+ * @access private
1643
+ * @param string
1644
+ * @return string
1645
+ */
1646
+ function _smtp_connect()
1647
+ {
1648
+ $this->_smtp_connect = fsockopen($this->smtp_host,
1649
+ $this->smtp_port,
1650
+ $errno,
1651
+ $errstr,
1652
+ $this->smtp_timeout);
1653
+
1654
+ if( ! is_resource($this->_smtp_connect))
1655
+ {
1656
+ $this->_set_error_message('email_smtp_error', $errno." ".$errstr);
1657
+ return FALSE;
1658
+ }
1659
+
1660
+ $this->_set_error_message($this->_get_smtp_data());
1661
+ return $this->_send_command('hello');
1662
+ }
1663
+
1664
+ // --------------------------------------------------------------------
1665
+
1666
+ /**
1667
+ * Send SMTP command
1668
+ *
1669
+ * @access private
1670
+ * @param string
1671
+ * @param string
1672
+ * @return string
1673
+ */
1674
+ function _send_command($cmd, $data = '')
1675
+ {
1676
+ switch ($cmd)
1677
+ {
1678
+ case 'hello' :
1679
+
1680
+ if ($this->_smtp_auth OR $this->_get_encoding() == '8bit')
1681
+ $this->_send_data('EHLO '.$this->_get_hostname());
1682
+ else
1683
+ $this->_send_data('HELO '.$this->_get_hostname());
1684
+
1685
+ $resp = 250;
1686
+ break;
1687
+ case 'from' :
1688
+
1689
+ $this->_send_data('MAIL FROM:<'.$data.'>');
1690
+
1691
+ $resp = 250;
1692
+ break;
1693
+ case 'to' :
1694
+
1695
+ $this->_send_data('RCPT TO:<'.$data.'>');
1696
+
1697
+ $resp = 250;
1698
+ break;
1699
+ case 'data' :
1700
+
1701
+ $this->_send_data('DATA');
1702
+
1703
+ $resp = 354;
1704
+ break;
1705
+ case 'quit' :
1706
+
1707
+ $this->_send_data('QUIT');
1708
+
1709
+ $resp = 221;
1710
+ break;
1711
+ }
1712
+
1713
+ $reply = $this->_get_smtp_data();
1714
+
1715
+ $this->_debug_msg[] = "<pre>".$cmd.": ".$reply."</pre>";
1716
+
1717
+ if (substr($reply, 0, 3) != $resp)
1718
+ {
1719
+ $this->_set_error_message('email_smtp_error', $reply);
1720
+ return FALSE;
1721
+ }
1722
+
1723
+ if ($cmd == 'quit')
1724
+ {
1725
+ fclose($this->_smtp_connect);
1726
+ }
1727
+
1728
+ return TRUE;
1729
+ }
1730
+
1731
+ // --------------------------------------------------------------------
1732
+
1733
+ /**
1734
+ * SMTP Authenticate
1735
+ *
1736
+ * @access private
1737
+ * @return bool
1738
+ */
1739
+ function _smtp_authenticate()
1740
+ {
1741
+ if ( ! $this->_smtp_auth)
1742
+ {
1743
+ return TRUE;
1744
+ }
1745
+
1746
+ if ($this->smtp_user == "" AND $this->smtp_pass == "")
1747
+ {
1748
+ $this->_set_error_message('email_no_smtp_unpw');
1749
+ return FALSE;
1750
+ }
1751
+
1752
+ $this->_send_data('AUTH LOGIN');
1753
+
1754
+ $reply = $this->_get_smtp_data();
1755
+
1756
+ if (strncmp($reply, '334', 3) != 0)
1757
+ {
1758
+ $this->_set_error_message('email_failed_smtp_login', $reply);
1759
+ return FALSE;
1760
+ }
1761
+
1762
+ $this->_send_data(base64_encode($this->smtp_user));
1763
+
1764
+ $reply = $this->_get_smtp_data();
1765
+
1766
+ if (strncmp($reply, '334', 3) != 0)
1767
+ {
1768
+ $this->_set_error_message('email_smtp_auth_un', $reply);
1769
+ return FALSE;
1770
+ }
1771
+
1772
+ $this->_send_data(base64_encode($this->smtp_pass));
1773
+
1774
+ $reply = $this->_get_smtp_data();
1775
+
1776
+ if (strncmp($reply, '235', 3) != 0)
1777
+ {
1778
+ $this->_set_error_message('email_smtp_auth_pw', $reply);
1779
+ return FALSE;
1780
+ }
1781
+
1782
+ return TRUE;
1783
+ }
1784
+
1785
+ // --------------------------------------------------------------------
1786
+
1787
+ /**
1788
+ * Send SMTP data
1789
+ *
1790
+ * @access private
1791
+ * @return bool
1792
+ */
1793
+ function _send_data($data)
1794
+ {
1795
+ if ( ! fwrite($this->_smtp_connect, $data . $this->newline))
1796
+ {
1797
+ $this->_set_error_message('email_smtp_data_failure', $data);
1798
+ return FALSE;
1799
+ }
1800
+ else
1801
+ {
1802
+ return TRUE;
1803
+ }
1804
+ }
1805
+
1806
+ // --------------------------------------------------------------------
1807
+
1808
+ /**
1809
+ * Get SMTP data
1810
+ *
1811
+ * @access private
1812
+ * @return string
1813
+ */
1814
+ function _get_smtp_data()
1815
+ {
1816
+ $data = "";
1817
+
1818
+ while ($str = fgets($this->_smtp_connect, 512))
1819
+ {
1820
+ $data .= $str;
1821
+
1822
+ if (substr($str, 3, 1) == " ")
1823
+ {
1824
+ break;
1825
+ }
1826
+ }
1827
+
1828
+ return $data;
1829
+ }
1830
+
1831
+ // --------------------------------------------------------------------
1832
+
1833
+ /**
1834
+ * Get Hostname
1835
+ *
1836
+ * @access private
1837
+ * @return string
1838
+ */
1839
+ function _get_hostname()
1840
+ {
1841
+ return (isset($_SERVER['SERVER_NAME'])) ? $_SERVER['SERVER_NAME'] : 'localhost.localdomain';
1842
+ }
1843
+
1844
+ // --------------------------------------------------------------------
1845
+
1846
+ /**
1847
+ * Get IP
1848
+ *
1849
+ * @access private
1850
+ * @return string
1851
+ */
1852
+ function _get_ip()
1853
+ {
1854
+ if ($this->_IP !== FALSE)
1855
+ {
1856
+ return $this->_IP;
1857
+ }
1858
+
1859
+ $cip = (isset($_SERVER['HTTP_CLIENT_IP']) AND $_SERVER['HTTP_CLIENT_IP'] != "") ? $_SERVER['HTTP_CLIENT_IP'] : FALSE;
1860
+ $rip = (isset($_SERVER['REMOTE_ADDR']) AND $_SERVER['REMOTE_ADDR'] != "") ? $_SERVER['REMOTE_ADDR'] : FALSE;
1861
+ $fip = (isset($_SERVER['HTTP_X_FORWARDED_FOR']) AND $_SERVER['HTTP_X_FORWARDED_FOR'] != "") ? $_SERVER['HTTP_X_FORWARDED_FOR'] : FALSE;
1862
+
1863
+ if ($cip && $rip) $this->_IP = $cip;
1864
+ elseif ($rip) $this->_IP = $rip;
1865
+ elseif ($cip) $this->_IP = $cip;
1866
+ elseif ($fip) $this->_IP = $fip;
1867
+
1868
+ if (strstr($this->_IP, ','))
1869
+ {
1870
+ $x = explode(',', $this->_IP);
1871
+ $this->_IP = end($x);
1872
+ }
1873
+
1874
+ if ( ! preg_match( "/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/", $this->_IP))
1875
+ {
1876
+ $this->_IP = '0.0.0.0';
1877
+ }
1878
+
1879
+ unset($cip);
1880
+ unset($rip);
1881
+ unset($fip);
1882
+
1883
+ return $this->_IP;
1884
+ }
1885
+
1886
+ // --------------------------------------------------------------------
1887
+
1888
+ /**
1889
+ * Get Debug Message
1890
+ *
1891
+ * @access public
1892
+ * @return string
1893
+ */
1894
+ function print_debugger()
1895
+ {
1896
+ $msg = '';
1897
+
1898
+ if (count($this->_debug_msg) > 0)
1899
+ {
1900
+ foreach ($this->_debug_msg as $val)
1901
+ {
1902
+ $msg .= $val;
1903
+ }
1904
+ }
1905
+
1906
+ $msg .= "<pre>".$this->_header_str."\n".htmlspecialchars($this->_subject)."\n".htmlspecialchars($this->_finalbody).'</pre>';
1907
+ return $msg;
1908
+ }
1909
+
1910
+ // --------------------------------------------------------------------
1911
+
1912
+ /**
1913
+ * Set Message
1914
+ *
1915
+ * @access private
1916
+ * @param string
1917
+ * @return string
1918
+ */
1919
+ function _set_error_message($msg, $val = '')
1920
+ {
1921
+ $CI =& get_instance();
1922
+ $CI->lang->load('email');
1923
+
1924
+ if (FALSE === ($line = $CI->lang->line($msg)))
1925
+ {
1926
+ $this->_debug_msg[] = str_replace('%s', $val, $msg)."<br />";
1927
+ }
1928
+ else
1929
+ {
1930
+ $this->_debug_msg[] = str_replace('%s', $val, $line)."<br />";
1931
+ }
1932
+ }
1933
+
1934
+ // --------------------------------------------------------------------
1935
+
1936
+ /**
1937
+ * Mime Types
1938
+ *
1939
+ * @access private
1940
+ * @param string
1941
+ * @return string
1942
+ */
1943
+ function _mime_types($ext = "")
1944
+ {
1945
+ $mimes = array( 'hqx' => 'application/mac-binhex40',
1946
+ 'cpt' => 'application/mac-compactpro',
1947
+ 'doc' => 'application/msword',
1948
+ 'bin' => 'application/macbinary',
1949
+ 'dms' => 'application/octet-stream',
1950
+ 'lha' => 'application/octet-stream',
1951
+ 'lzh' => 'application/octet-stream',
1952
+ 'exe' => 'application/octet-stream',
1953
+ 'class' => 'application/octet-stream',
1954
+ 'psd' => 'application/octet-stream',
1955
+ 'so' => 'application/octet-stream',
1956
+ 'sea' => 'application/octet-stream',
1957
+ 'dll' => 'application/octet-stream',
1958
+ 'oda' => 'application/oda',
1959
+ 'pdf' => 'application/pdf',
1960
+ 'ai' => 'application/postscript',
1961
+ 'eps' => 'application/postscript',
1962
+ 'ps' => 'application/postscript',
1963
+ 'smi' => 'application/smil',
1964
+ 'smil' => 'application/smil',
1965
+ 'mif' => 'application/vnd.mif',
1966
+ 'xls' => 'application/vnd.ms-excel',
1967
+ 'ppt' => 'application/vnd.ms-powerpoint',
1968
+ 'wbxml' => 'application/vnd.wap.wbxml',
1969
+ 'wmlc' => 'application/vnd.wap.wmlc',
1970
+ 'dcr' => 'application/x-director',
1971
+ 'dir' => 'application/x-director',
1972
+ 'dxr' => 'application/x-director',
1973
+ 'dvi' => 'application/x-dvi',
1974
+ 'gtar' => 'application/x-gtar',
1975
+ 'php' => 'application/x-httpd-php',
1976
+ 'php4' => 'application/x-httpd-php',
1977
+ 'php3' => 'application/x-httpd-php',
1978
+ 'phtml' => 'application/x-httpd-php',
1979
+ 'phps' => 'application/x-httpd-php-source',
1980
+ 'js' => 'application/x-javascript',
1981
+ 'swf' => 'application/x-shockwave-flash',
1982
+ 'sit' => 'application/x-stuffit',
1983
+ 'tar' => 'application/x-tar',
1984
+ 'tgz' => 'application/x-tar',
1985
+ 'xhtml' => 'application/xhtml+xml',
1986
+ 'xht' => 'application/xhtml+xml',
1987
+ 'zip' => 'application/zip',
1988
+ 'mid' => 'audio/midi',
1989
+ 'midi' => 'audio/midi',
1990
+ 'mpga' => 'audio/mpeg',
1991
+ 'mp2' => 'audio/mpeg',
1992
+ 'mp3' => 'audio/mpeg',
1993
+ 'aif' => 'audio/x-aiff',
1994
+ 'aiff' => 'audio/x-aiff',
1995
+ 'aifc' => 'audio/x-aiff',
1996
+ 'ram' => 'audio/x-pn-realaudio',
1997
+ 'rm' => 'audio/x-pn-realaudio',
1998
+ 'rpm' => 'audio/x-pn-realaudio-plugin',
1999
+ 'ra' => 'audio/x-realaudio',
2000
+ 'rv' => 'video/vnd.rn-realvideo',
2001
+ 'wav' => 'audio/x-wav',
2002
+ 'bmp' => 'image/bmp',
2003
+ 'gif' => 'image/gif',
2004
+ 'jpeg' => 'image/jpeg',
2005
+ 'jpg' => 'image/jpeg',
2006
+ 'jpe' => 'image/jpeg',
2007
+ 'png' => 'image/png',
2008
+ 'tiff' => 'image/tiff',
2009
+ 'tif' => 'image/tiff',
2010
+ 'css' => 'text/css',
2011
+ 'html' => 'text/html',
2012
+ 'htm' => 'text/html',
2013
+ 'shtml' => 'text/html',
2014
+ 'txt' => 'text/plain',
2015
+ 'text' => 'text/plain',
2016
+ 'log' => 'text/plain',
2017
+ 'rtx' => 'text/richtext',
2018
+ 'rtf' => 'text/rtf',
2019
+ 'xml' => 'text/xml',
2020
+ 'xsl' => 'text/xml',
2021
+ 'mpeg' => 'video/mpeg',
2022
+ 'mpg' => 'video/mpeg',
2023
+ 'mpe' => 'video/mpeg',
2024
+ 'qt' => 'video/quicktime',
2025
+ 'mov' => 'video/quicktime',
2026
+ 'avi' => 'video/x-msvideo',
2027
+ 'movie' => 'video/x-sgi-movie',
2028
+ 'doc' => 'application/msword',
2029
+ 'word' => 'application/msword',
2030
+ 'xl' => 'application/excel',
2031
+ 'eml' => 'message/rfc822'
2032
+ );
2033
+
2034
+ return ( ! isset($mimes[strtolower($ext)])) ? "application/x-unknown-content-type" : $mimes[strtolower($ext)];
2035
+ }
2036
+
2037
+ }
2038
+ // END CI_Email class
2039
+
2040
+ /* End of file Email.php */
2041
+ /* Location: ./system/libraries/Email.php */