codeigniter_vender 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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,1544 @@
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
+ * Image Manipulation class
20
+ *
21
+ * @package CodeIgniter
22
+ * @subpackage Libraries
23
+ * @category Image_lib
24
+ * @author ExpressionEngine Dev Team
25
+ * @link http://codeigniter.com/user_guide/libraries/image_lib.html
26
+ */
27
+ class CI_Image_lib {
28
+
29
+ var $image_library = 'gd2'; // Can be: imagemagick, netpbm, gd, gd2
30
+ var $library_path = '';
31
+ var $dynamic_output = FALSE; // Whether to send to browser or write to disk
32
+ var $source_image = '';
33
+ var $new_image = '';
34
+ var $width = '';
35
+ var $height = '';
36
+ var $quality = '90';
37
+ var $create_thumb = FALSE;
38
+ var $thumb_marker = '_thumb';
39
+ var $maintain_ratio = TRUE; // Whether to maintain aspect ratio when resizing or use hard values
40
+ var $master_dim = 'auto'; // auto, height, or width. Determines what to use as the master dimension
41
+ var $rotation_angle = '';
42
+ var $x_axis = '';
43
+ var $y_axis = '';
44
+
45
+ // Watermark Vars
46
+ var $wm_text = ''; // Watermark text if graphic is not used
47
+ var $wm_type = 'text'; // Type of watermarking. Options: text/overlay
48
+ var $wm_x_transp = 4;
49
+ var $wm_y_transp = 4;
50
+ var $wm_overlay_path = ''; // Watermark image path
51
+ var $wm_font_path = ''; // TT font
52
+ var $wm_font_size = 17; // Font size (different versions of GD will either use points or pixels)
53
+ var $wm_vrt_alignment = 'B'; // Vertical alignment: T M B
54
+ var $wm_hor_alignment = 'C'; // Horizontal alignment: L R C
55
+ var $wm_padding = 0; // Padding around text
56
+ var $wm_hor_offset = 0; // Lets you push text to the right
57
+ var $wm_vrt_offset = 0; // Lets you push text down
58
+ var $wm_font_color = '#ffffff'; // Text color
59
+ var $wm_shadow_color = ''; // Dropshadow color
60
+ var $wm_shadow_distance = 2; // Dropshadow distance
61
+ var $wm_opacity = 50; // Image opacity: 1 - 100 Only works with image
62
+
63
+ // Private Vars
64
+ var $source_folder = '';
65
+ var $dest_folder = '';
66
+ var $mime_type = '';
67
+ var $orig_width = '';
68
+ var $orig_height = '';
69
+ var $image_type = '';
70
+ var $size_str = '';
71
+ var $full_src_path = '';
72
+ var $full_dst_path = '';
73
+ var $create_fnc = 'imagecreatetruecolor';
74
+ var $copy_fnc = 'imagecopyresampled';
75
+ var $error_msg = array();
76
+ var $wm_use_drop_shadow = FALSE;
77
+ var $wm_use_truetype = FALSE;
78
+
79
+ /**
80
+ * Constructor
81
+ *
82
+ * @access public
83
+ * @param string
84
+ * @return void
85
+ */
86
+ function CI_Image_lib($props = array())
87
+ {
88
+ if (count($props) > 0)
89
+ {
90
+ $this->initialize($props);
91
+ }
92
+
93
+ log_message('debug', "Image Lib Class Initialized");
94
+ }
95
+
96
+ // --------------------------------------------------------------------
97
+
98
+ /**
99
+ * Initialize image properties
100
+ *
101
+ * Resets values in case this class is used in a loop
102
+ *
103
+ * @access public
104
+ * @return void
105
+ */
106
+ function clear()
107
+ {
108
+ $props = array('source_folder', 'dest_folder', 'source_image', 'full_src_path', 'full_dst_path', 'new_image', 'image_type', 'size_str', 'quality', 'orig_width', 'orig_height', 'rotation_angle', 'x_axis', 'y_axis', 'create_fnc', 'copy_fnc', 'wm_overlay_path', 'wm_use_truetype', 'dynamic_output', 'wm_font_size', 'wm_text', 'wm_vrt_alignment', 'wm_hor_alignment', 'wm_padding', 'wm_hor_offset', 'wm_vrt_offset', 'wm_font_color', 'wm_use_drop_shadow', 'wm_shadow_color', 'wm_shadow_distance', 'wm_opacity');
109
+
110
+ foreach ($props as $val)
111
+ {
112
+ $this->$val = '';
113
+ }
114
+
115
+ // special consideration for master_dim
116
+ $this->master_dim = 'auto';
117
+ }
118
+
119
+ // --------------------------------------------------------------------
120
+
121
+ /**
122
+ * initialize image preferences
123
+ *
124
+ * @access public
125
+ * @param array
126
+ * @return bool
127
+ */
128
+ function initialize($props = array())
129
+ {
130
+ /*
131
+ * Convert array elements into class variables
132
+ */
133
+ if (count($props) > 0)
134
+ {
135
+ foreach ($props as $key => $val)
136
+ {
137
+ $this->$key = $val;
138
+ }
139
+ }
140
+
141
+ /*
142
+ * Is there a source image?
143
+ *
144
+ * If not, there's no reason to continue
145
+ *
146
+ */
147
+ if ($this->source_image == '')
148
+ {
149
+ $this->set_error('imglib_source_image_required');
150
+ return FALSE;
151
+ }
152
+
153
+ /*
154
+ * Is getimagesize() Available?
155
+ *
156
+ * We use it to determine the image properties (width/height).
157
+ * Note: We need to figure out how to determine image
158
+ * properties using ImageMagick and NetPBM
159
+ *
160
+ */
161
+ if ( ! function_exists('getimagesize'))
162
+ {
163
+ $this->set_error('imglib_gd_required_for_props');
164
+ return FALSE;
165
+ }
166
+
167
+ $this->image_library = strtolower($this->image_library);
168
+
169
+ /*
170
+ * Set the full server path
171
+ *
172
+ * The source image may or may not contain a path.
173
+ * Either way, we'll try use realpath to generate the
174
+ * full server path in order to more reliably read it.
175
+ *
176
+ */
177
+ if (function_exists('realpath') AND @realpath($this->source_image) !== FALSE)
178
+ {
179
+ $full_source_path = str_replace("\\", "/", realpath($this->source_image));
180
+ }
181
+ else
182
+ {
183
+ $full_source_path = $this->source_image;
184
+ }
185
+
186
+ $x = explode('/', $full_source_path);
187
+ $this->source_image = end($x);
188
+ $this->source_folder = str_replace($this->source_image, '', $full_source_path);
189
+
190
+ // Set the Image Properties
191
+ if ( ! $this->get_image_properties($this->source_folder.$this->source_image))
192
+ {
193
+ return FALSE;
194
+ }
195
+
196
+ /*
197
+ * Assign the "new" image name/path
198
+ *
199
+ * If the user has set a "new_image" name it means
200
+ * we are making a copy of the source image. If not
201
+ * it means we are altering the original. We'll
202
+ * set the destination filename and path accordingly.
203
+ *
204
+ */
205
+ if ($this->new_image == '')
206
+ {
207
+ $this->dest_image = $this->source_image;
208
+ $this->dest_folder = $this->source_folder;
209
+ }
210
+ else
211
+ {
212
+ if (strpos($this->new_image, '/') === FALSE)
213
+ {
214
+ $this->dest_folder = $this->source_folder;
215
+ $this->dest_image = $this->new_image;
216
+ }
217
+ else
218
+ {
219
+ if (function_exists('realpath') AND @realpath($this->new_image) !== FALSE)
220
+ {
221
+ $full_dest_path = str_replace("\\", "/", realpath($this->new_image));
222
+ }
223
+ else
224
+ {
225
+ $full_dest_path = $this->new_image;
226
+ }
227
+
228
+ // Is there a file name?
229
+ if ( ! preg_match("#\.(jpg|jpeg|gif|png)$#i", $full_dest_path))
230
+ {
231
+ $this->dest_folder = $full_dest_path.'/';
232
+ $this->dest_image = $this->source_image;
233
+ }
234
+ else
235
+ {
236
+ $x = explode('/', $full_dest_path);
237
+ $this->dest_image = end($x);
238
+ $this->dest_folder = str_replace($this->dest_image, '', $full_dest_path);
239
+ }
240
+ }
241
+ }
242
+
243
+ /*
244
+ * Compile the finalized filenames/paths
245
+ *
246
+ * We'll create two master strings containing the
247
+ * full server path to the source image and the
248
+ * full server path to the destination image.
249
+ * We'll also split the destination image name
250
+ * so we can insert the thumbnail marker if needed.
251
+ *
252
+ */
253
+ if ($this->create_thumb === FALSE OR $this->thumb_marker == '')
254
+ {
255
+ $this->thumb_marker = '';
256
+ }
257
+
258
+ $xp = $this->explode_name($this->dest_image);
259
+
260
+ $filename = $xp['name'];
261
+ $file_ext = $xp['ext'];
262
+
263
+ $this->full_src_path = $this->source_folder.$this->source_image;
264
+ $this->full_dst_path = $this->dest_folder.$filename.$this->thumb_marker.$file_ext;
265
+
266
+ /*
267
+ * Should we maintain image proportions?
268
+ *
269
+ * When creating thumbs or copies, the target width/height
270
+ * might not be in correct proportion with the source
271
+ * image's width/height. We'll recalculate it here.
272
+ *
273
+ */
274
+ if ($this->maintain_ratio === TRUE && ($this->width != '' AND $this->height != ''))
275
+ {
276
+ $this->image_reproportion();
277
+ }
278
+
279
+ /*
280
+ * Was a width and height specified?
281
+ *
282
+ * If the destination width/height was
283
+ * not submitted we will use the values
284
+ * from the actual file
285
+ *
286
+ */
287
+ if ($this->width == '')
288
+ $this->width = $this->orig_width;
289
+
290
+ if ($this->height == '')
291
+ $this->height = $this->orig_height;
292
+
293
+ // Set the quality
294
+ $this->quality = trim(str_replace("%", "", $this->quality));
295
+
296
+ if ($this->quality == '' OR $this->quality == 0 OR ! is_numeric($this->quality))
297
+ $this->quality = 90;
298
+
299
+ // Set the x/y coordinates
300
+ $this->x_axis = ($this->x_axis == '' OR ! is_numeric($this->x_axis)) ? 0 : $this->x_axis;
301
+ $this->y_axis = ($this->y_axis == '' OR ! is_numeric($this->y_axis)) ? 0 : $this->y_axis;
302
+
303
+ // Watermark-related Stuff...
304
+ if ($this->wm_font_color != '')
305
+ {
306
+ if (strlen($this->wm_font_color) == 6)
307
+ {
308
+ $this->wm_font_color = '#'.$this->wm_font_color;
309
+ }
310
+ }
311
+
312
+ if ($this->wm_shadow_color != '')
313
+ {
314
+ if (strlen($this->wm_shadow_color) == 6)
315
+ {
316
+ $this->wm_shadow_color = '#'.$this->wm_shadow_color;
317
+ }
318
+ }
319
+
320
+ if ($this->wm_overlay_path != '')
321
+ {
322
+ $this->wm_overlay_path = str_replace("\\", "/", realpath($this->wm_overlay_path));
323
+ }
324
+
325
+ if ($this->wm_shadow_color != '')
326
+ {
327
+ $this->wm_use_drop_shadow = TRUE;
328
+ }
329
+
330
+ if ($this->wm_font_path != '')
331
+ {
332
+ $this->wm_use_truetype = TRUE;
333
+ }
334
+
335
+ return TRUE;
336
+ }
337
+
338
+ // --------------------------------------------------------------------
339
+
340
+ /**
341
+ * Image Resize
342
+ *
343
+ * This is a wrapper function that chooses the proper
344
+ * resize function based on the protocol specified
345
+ *
346
+ * @access public
347
+ * @return bool
348
+ */
349
+ function resize()
350
+ {
351
+ $protocol = 'image_process_'.$this->image_library;
352
+
353
+ if (preg_match('/gd2$/i', $protocol))
354
+ {
355
+ $protocol = 'image_process_gd';
356
+ }
357
+
358
+ return $this->$protocol('resize');
359
+ }
360
+
361
+ // --------------------------------------------------------------------
362
+
363
+ /**
364
+ * Image Crop
365
+ *
366
+ * This is a wrapper function that chooses the proper
367
+ * cropping function based on the protocol specified
368
+ *
369
+ * @access public
370
+ * @return bool
371
+ */
372
+ function crop()
373
+ {
374
+ $protocol = 'image_process_'.$this->image_library;
375
+
376
+ if (preg_match('/gd2$/i', $protocol))
377
+ {
378
+ $protocol = 'image_process_gd';
379
+ }
380
+
381
+ return $this->$protocol('crop');
382
+ }
383
+
384
+ // --------------------------------------------------------------------
385
+
386
+ /**
387
+ * Image Rotate
388
+ *
389
+ * This is a wrapper function that chooses the proper
390
+ * rotation function based on the protocol specified
391
+ *
392
+ * @access public
393
+ * @return bool
394
+ */
395
+ function rotate()
396
+ {
397
+ // Allowed rotation values
398
+ $degs = array(90, 180, 270, 'vrt', 'hor');
399
+
400
+ if ($this->rotation_angle == '' OR ! in_array($this->rotation_angle, $degs))
401
+ {
402
+ $this->set_error('imglib_rotation_angle_required');
403
+ return FALSE;
404
+ }
405
+
406
+ // Reassign the width and height
407
+ if ($this->rotation_angle == 90 OR $this->rotation_angle == 270)
408
+ {
409
+ $this->width = $this->orig_height;
410
+ $this->height = $this->orig_width;
411
+ }
412
+ else
413
+ {
414
+ $this->width = $this->orig_width;
415
+ $this->height = $this->orig_height;
416
+ }
417
+
418
+
419
+ // Choose resizing function
420
+ if ($this->image_library == 'imagemagick' OR $this->image_library == 'netpbm')
421
+ {
422
+ $protocol = 'image_process_'.$this->image_library;
423
+
424
+ return $this->$protocol('rotate');
425
+ }
426
+
427
+ if ($this->rotation_angle == 'hor' OR $this->rotation_angle == 'vrt')
428
+ {
429
+ return $this->image_mirror_gd();
430
+ }
431
+ else
432
+ {
433
+ return $this->image_rotate_gd();
434
+ }
435
+ }
436
+
437
+ // --------------------------------------------------------------------
438
+
439
+ /**
440
+ * Image Process Using GD/GD2
441
+ *
442
+ * This function will resize or crop
443
+ *
444
+ * @access public
445
+ * @param string
446
+ * @return bool
447
+ */
448
+ function image_process_gd($action = 'resize')
449
+ {
450
+ $v2_override = FALSE;
451
+
452
+ // If the target width/height match the source, AND if the new file name is not equal to the old file name
453
+ // we'll simply make a copy of the original with the new name... assuming dynamic rendering is off.
454
+ if ($this->dynamic_output === FALSE)
455
+ {
456
+ if ($this->orig_width == $this->width AND $this->orig_height == $this->height)
457
+ {
458
+ if ($this->source_image != $this->new_image)
459
+ {
460
+ if (@copy($this->full_src_path, $this->full_dst_path))
461
+ {
462
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
463
+ }
464
+ }
465
+
466
+ return TRUE;
467
+ }
468
+ }
469
+
470
+ // Let's set up our values based on the action
471
+ if ($action == 'crop')
472
+ {
473
+ // Reassign the source width/height if cropping
474
+ $this->orig_width = $this->width;
475
+ $this->orig_height = $this->height;
476
+
477
+ // GD 2.0 has a cropping bug so we'll test for it
478
+ if ($this->gd_version() !== FALSE)
479
+ {
480
+ $gd_version = str_replace('0', '', $this->gd_version());
481
+ $v2_override = ($gd_version == 2) ? TRUE : FALSE;
482
+ }
483
+ }
484
+ else
485
+ {
486
+ // If resizing the x/y axis must be zero
487
+ $this->x_axis = 0;
488
+ $this->y_axis = 0;
489
+ }
490
+
491
+ // Create the image handle
492
+ if ( ! ($src_img = $this->image_create_gd()))
493
+ {
494
+ return FALSE;
495
+ }
496
+
497
+ // Create The Image
498
+ //
499
+ // old conditional which users report cause problems with shared GD libs who report themselves as "2.0 or greater"
500
+ // it appears that this is no longer the issue that it was in 2004, so we've removed it, retaining it in the comment
501
+ // below should that ever prove inaccurate.
502
+ //
503
+ // if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor') AND $v2_override == FALSE)
504
+ if ($this->image_library == 'gd2' AND function_exists('imagecreatetruecolor'))
505
+ {
506
+ $create = 'imagecreatetruecolor';
507
+ $copy = 'imagecopyresampled';
508
+ }
509
+ else
510
+ {
511
+ $create = 'imagecreate';
512
+ $copy = 'imagecopyresized';
513
+ }
514
+
515
+ $dst_img = $create($this->width, $this->height);
516
+ $copy($dst_img, $src_img, 0, 0, $this->x_axis, $this->y_axis, $this->width, $this->height, $this->orig_width, $this->orig_height);
517
+
518
+ // Show the image
519
+ if ($this->dynamic_output == TRUE)
520
+ {
521
+ $this->image_display_gd($dst_img);
522
+ }
523
+ else
524
+ {
525
+ // Or save it
526
+ if ( ! $this->image_save_gd($dst_img))
527
+ {
528
+ return FALSE;
529
+ }
530
+ }
531
+
532
+ // Kill the file handles
533
+ imagedestroy($dst_img);
534
+ imagedestroy($src_img);
535
+
536
+ // Set the file to 777
537
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
538
+
539
+ return TRUE;
540
+ }
541
+
542
+ // --------------------------------------------------------------------
543
+
544
+ /**
545
+ * Image Process Using ImageMagick
546
+ *
547
+ * This function will resize, crop or rotate
548
+ *
549
+ * @access public
550
+ * @param string
551
+ * @return bool
552
+ */
553
+ function image_process_imagemagick($action = 'resize')
554
+ {
555
+ // Do we have a vaild library path?
556
+ if ($this->library_path == '')
557
+ {
558
+ $this->set_error('imglib_libpath_invalid');
559
+ return FALSE;
560
+ }
561
+
562
+ if ( ! preg_match("/convert$/i", $this->library_path))
563
+ {
564
+ $this->library_path = rtrim($this->library_path, '/').'/';
565
+
566
+ $this->library_path .= 'convert';
567
+ }
568
+
569
+ // Execute the command
570
+ $cmd = $this->library_path." -quality ".$this->quality;
571
+
572
+ if ($action == 'crop')
573
+ {
574
+ $cmd .= " -crop ".$this->width."x".$this->height."+".$this->x_axis."+".$this->y_axis." \"$this->full_src_path\" \"$this->full_dst_path\" 2>&1";
575
+ }
576
+ elseif ($action == 'rotate')
577
+ {
578
+ switch ($this->rotation_angle)
579
+ {
580
+ case 'hor' : $angle = '-flop';
581
+ break;
582
+ case 'vrt' : $angle = '-flip';
583
+ break;
584
+ default : $angle = '-rotate '.$this->rotation_angle;
585
+ break;
586
+ }
587
+
588
+ $cmd .= " ".$angle." \"$this->full_src_path\" \"$this->full_dst_path\" 2>&1";
589
+ }
590
+ else // Resize
591
+ {
592
+ $cmd .= " -resize ".$this->width."x".$this->height." \"$this->full_src_path\" \"$this->full_dst_path\" 2>&1";
593
+ }
594
+
595
+ $retval = 1;
596
+
597
+ @exec($cmd, $output, $retval);
598
+
599
+ // Did it work?
600
+ if ($retval > 0)
601
+ {
602
+ $this->set_error('imglib_image_process_failed');
603
+ return FALSE;
604
+ }
605
+
606
+ // Set the file to 777
607
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
608
+
609
+ return TRUE;
610
+ }
611
+
612
+ // --------------------------------------------------------------------
613
+
614
+ /**
615
+ * Image Process Using NetPBM
616
+ *
617
+ * This function will resize, crop or rotate
618
+ *
619
+ * @access public
620
+ * @param string
621
+ * @return bool
622
+ */
623
+ function image_process_netpbm($action = 'resize')
624
+ {
625
+ if ($this->library_path == '')
626
+ {
627
+ $this->set_error('imglib_libpath_invalid');
628
+ return FALSE;
629
+ }
630
+
631
+ // Build the resizing command
632
+ switch ($this->image_type)
633
+ {
634
+ case 1 :
635
+ $cmd_in = 'giftopnm';
636
+ $cmd_out = 'ppmtogif';
637
+ break;
638
+ case 2 :
639
+ $cmd_in = 'jpegtopnm';
640
+ $cmd_out = 'ppmtojpeg';
641
+ break;
642
+ case 3 :
643
+ $cmd_in = 'pngtopnm';
644
+ $cmd_out = 'ppmtopng';
645
+ break;
646
+ }
647
+
648
+ if ($action == 'crop')
649
+ {
650
+ $cmd_inner = 'pnmcut -left '.$this->x_axis.' -top '.$this->y_axis.' -width '.$this->width.' -height '.$this->height;
651
+ }
652
+ elseif ($action == 'rotate')
653
+ {
654
+ switch ($this->rotation_angle)
655
+ {
656
+ case 90 : $angle = 'r270';
657
+ break;
658
+ case 180 : $angle = 'r180';
659
+ break;
660
+ case 270 : $angle = 'r90';
661
+ break;
662
+ case 'vrt' : $angle = 'tb';
663
+ break;
664
+ case 'hor' : $angle = 'lr';
665
+ break;
666
+ }
667
+
668
+ $cmd_inner = 'pnmflip -'.$angle.' ';
669
+ }
670
+ else // Resize
671
+ {
672
+ $cmd_inner = 'pnmscale -xysize '.$this->width.' '.$this->height;
673
+ }
674
+
675
+ $cmd = $this->library_path.$cmd_in.' '.$this->full_src_path.' | '.$cmd_inner.' | '.$cmd_out.' > '.$this->dest_folder.'netpbm.tmp';
676
+
677
+ $retval = 1;
678
+
679
+ @exec($cmd, $output, $retval);
680
+
681
+ // Did it work?
682
+ if ($retval > 0)
683
+ {
684
+ $this->set_error('imglib_image_process_failed');
685
+ return FALSE;
686
+ }
687
+
688
+ // With NetPBM we have to create a temporary image.
689
+ // If you try manipulating the original it fails so
690
+ // we have to rename the temp file.
691
+ copy ($this->dest_folder.'netpbm.tmp', $this->full_dst_path);
692
+ unlink ($this->dest_folder.'netpbm.tmp');
693
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
694
+
695
+ return TRUE;
696
+ }
697
+
698
+ // --------------------------------------------------------------------
699
+
700
+ /**
701
+ * Image Rotate Using GD
702
+ *
703
+ * @access public
704
+ * @return bool
705
+ */
706
+ function image_rotate_gd()
707
+ {
708
+ // Is Image Rotation Supported?
709
+ // this function is only supported as of PHP 4.3
710
+ if ( ! function_exists('imagerotate'))
711
+ {
712
+ $this->set_error('imglib_rotate_unsupported');
713
+ return FALSE;
714
+ }
715
+
716
+ // Create the image handle
717
+ if ( ! ($src_img = $this->image_create_gd()))
718
+ {
719
+ return FALSE;
720
+ }
721
+
722
+ // Set the background color
723
+ // This won't work with transparent PNG files so we are
724
+ // going to have to figure out how to determine the color
725
+ // of the alpha channel in a future release.
726
+
727
+ $white = imagecolorallocate($src_img, 255, 255, 255);
728
+
729
+ // Rotate it!
730
+ $dst_img = imagerotate($src_img, $this->rotation_angle, $white);
731
+
732
+ // Save the Image
733
+ if ($this->dynamic_output == TRUE)
734
+ {
735
+ $this->image_display_gd($dst_img);
736
+ }
737
+ else
738
+ {
739
+ // Or save it
740
+ if ( ! $this->image_save_gd($dst_img))
741
+ {
742
+ return FALSE;
743
+ }
744
+ }
745
+
746
+ // Kill the file handles
747
+ imagedestroy($dst_img);
748
+ imagedestroy($src_img);
749
+
750
+ // Set the file to 777
751
+
752
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
753
+
754
+ return true;
755
+ }
756
+
757
+ // --------------------------------------------------------------------
758
+
759
+ /**
760
+ * Create Mirror Image using GD
761
+ *
762
+ * This function will flip horizontal or vertical
763
+ *
764
+ * @access public
765
+ * @return bool
766
+ */
767
+ function image_mirror_gd()
768
+ {
769
+ if ( ! $src_img = $this->image_create_gd())
770
+ {
771
+ return FALSE;
772
+ }
773
+
774
+ $width = $this->orig_width;
775
+ $height = $this->orig_height;
776
+
777
+ if ($this->rotation_angle == 'hor')
778
+ {
779
+ for ($i = 0; $i < $height; $i++)
780
+ {
781
+ $left = 0;
782
+ $right = $width-1;
783
+
784
+ while ($left < $right)
785
+ {
786
+ $cl = imagecolorat($src_img, $left, $i);
787
+ $cr = imagecolorat($src_img, $right, $i);
788
+
789
+ imagesetpixel($src_img, $left, $i, $cr);
790
+ imagesetpixel($src_img, $right, $i, $cl);
791
+
792
+ $left++;
793
+ $right--;
794
+ }
795
+ }
796
+ }
797
+ else
798
+ {
799
+ for ($i = 0; $i < $width; $i++)
800
+ {
801
+ $top = 0;
802
+ $bot = $height-1;
803
+
804
+ while ($top < $bot)
805
+ {
806
+ $ct = imagecolorat($src_img, $i, $top);
807
+ $cb = imagecolorat($src_img, $i, $bot);
808
+
809
+ imagesetpixel($src_img, $i, $top, $cb);
810
+ imagesetpixel($src_img, $i, $bot, $ct);
811
+
812
+ $top++;
813
+ $bot--;
814
+ }
815
+ }
816
+ }
817
+
818
+ // Show the image
819
+ if ($this->dynamic_output == TRUE)
820
+ {
821
+ $this->image_display_gd($src_img);
822
+ }
823
+ else
824
+ {
825
+ // Or save it
826
+ if ( ! $this->image_save_gd($src_img))
827
+ {
828
+ return FALSE;
829
+ }
830
+ }
831
+
832
+ // Kill the file handles
833
+ imagedestroy($src_img);
834
+
835
+ // Set the file to 777
836
+ @chmod($this->full_dst_path, DIR_WRITE_MODE);
837
+
838
+ return TRUE;
839
+ }
840
+
841
+ // --------------------------------------------------------------------
842
+
843
+ /**
844
+ * Image Watermark
845
+ *
846
+ * This is a wrapper function that chooses the type
847
+ * of watermarking based on the specified preference.
848
+ *
849
+ * @access public
850
+ * @param string
851
+ * @return bool
852
+ */
853
+ function watermark()
854
+ {
855
+ if ($this->wm_type == 'overlay')
856
+ {
857
+ return $this->overlay_watermark();
858
+ }
859
+ else
860
+ {
861
+ return $this->text_watermark();
862
+ }
863
+ }
864
+
865
+ // --------------------------------------------------------------------
866
+
867
+ /**
868
+ * Watermark - Graphic Version
869
+ *
870
+ * @access public
871
+ * @return bool
872
+ */
873
+ function overlay_watermark()
874
+ {
875
+ if ( ! function_exists('imagecolortransparent'))
876
+ {
877
+ $this->set_error('imglib_gd_required');
878
+ return FALSE;
879
+ }
880
+
881
+ // Fetch source image properties
882
+ $this->get_image_properties();
883
+
884
+ // Fetch watermark image properties
885
+ $props = $this->get_image_properties($this->wm_overlay_path, TRUE);
886
+ $wm_img_type = $props['image_type'];
887
+ $wm_width = $props['width'];
888
+ $wm_height = $props['height'];
889
+
890
+ // Create two image resources
891
+ $wm_img = $this->image_create_gd($this->wm_overlay_path, $wm_img_type);
892
+ $src_img = $this->image_create_gd($this->full_src_path);
893
+
894
+ // Reverse the offset if necessary
895
+ // When the image is positioned at the bottom
896
+ // we don't want the vertical offset to push it
897
+ // further down. We want the reverse, so we'll
898
+ // invert the offset. Same with the horizontal
899
+ // offset when the image is at the right
900
+
901
+ $this->wm_vrt_alignment = strtoupper(substr($this->wm_vrt_alignment, 0, 1));
902
+ $this->wm_hor_alignment = strtoupper(substr($this->wm_hor_alignment, 0, 1));
903
+
904
+ if ($this->wm_vrt_alignment == 'B')
905
+ $this->wm_vrt_offset = $this->wm_vrt_offset * -1;
906
+
907
+ if ($this->wm_hor_alignment == 'R')
908
+ $this->wm_hor_offset = $this->wm_hor_offset * -1;
909
+
910
+ // Set the base x and y axis values
911
+ $x_axis = $this->wm_hor_offset + $this->wm_padding;
912
+ $y_axis = $this->wm_vrt_offset + $this->wm_padding;
913
+
914
+ // Set the vertical position
915
+ switch ($this->wm_vrt_alignment)
916
+ {
917
+ case 'T':
918
+ break;
919
+ case 'M': $y_axis += ($this->orig_height / 2) - ($wm_height / 2);
920
+ break;
921
+ case 'B': $y_axis += $this->orig_height - $wm_height;
922
+ break;
923
+ }
924
+
925
+ // Set the horizontal position
926
+ switch ($this->wm_hor_alignment)
927
+ {
928
+ case 'L':
929
+ break;
930
+ case 'C': $x_axis += ($this->orig_width / 2) - ($wm_width / 2);
931
+ break;
932
+ case 'R': $x_axis += $this->orig_width - $wm_width;
933
+ break;
934
+ }
935
+
936
+ // Build the finalized image
937
+ if ($wm_img_type == 3 AND function_exists('imagealphablending'))
938
+ {
939
+ @imagealphablending($src_img, TRUE);
940
+ }
941
+
942
+ // Set RGB values for text and shadow
943
+ $rgba = imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp);
944
+ $alpha = ($rgba & 0x7F000000) >> 24;
945
+
946
+ // make a best guess as to whether we're dealing with an image with alpha transparency or no/binary transparency
947
+ if ($alpha > 0)
948
+ {
949
+ // copy the image directly, the image's alpha transparency being the sole determinant of blending
950
+ imagecopy($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height);
951
+ }
952
+ else
953
+ {
954
+ // set our RGB value from above to be transparent and merge the images with the specified opacity
955
+ imagecolortransparent($wm_img, imagecolorat($wm_img, $this->wm_x_transp, $this->wm_y_transp));
956
+ imagecopymerge($src_img, $wm_img, $x_axis, $y_axis, 0, 0, $wm_width, $wm_height, $this->wm_opacity);
957
+ }
958
+
959
+ // Output the image
960
+ if ($this->dynamic_output == TRUE)
961
+ {
962
+ $this->image_display_gd($src_img);
963
+ }
964
+ else
965
+ {
966
+ if ( ! $this->image_save_gd($src_img))
967
+ {
968
+ return FALSE;
969
+ }
970
+ }
971
+
972
+ imagedestroy($src_img);
973
+ imagedestroy($wm_img);
974
+
975
+ return TRUE;
976
+ }
977
+
978
+ // --------------------------------------------------------------------
979
+
980
+ /**
981
+ * Watermark - Text Version
982
+ *
983
+ * @access public
984
+ * @return bool
985
+ */
986
+ function text_watermark()
987
+ {
988
+ if ( ! ($src_img = $this->image_create_gd()))
989
+ {
990
+ return FALSE;
991
+ }
992
+
993
+ if ($this->wm_use_truetype == TRUE AND ! file_exists($this->wm_font_path))
994
+ {
995
+ $this->set_error('imglib_missing_font');
996
+ return FALSE;
997
+ }
998
+
999
+ // Fetch source image properties
1000
+ $this->get_image_properties();
1001
+
1002
+ // Set RGB values for text and shadow
1003
+ $this->wm_font_color = str_replace('#', '', $this->wm_font_color);
1004
+ $this->wm_shadow_color = str_replace('#', '', $this->wm_shadow_color);
1005
+
1006
+ $R1 = hexdec(substr($this->wm_font_color, 0, 2));
1007
+ $G1 = hexdec(substr($this->wm_font_color, 2, 2));
1008
+ $B1 = hexdec(substr($this->wm_font_color, 4, 2));
1009
+
1010
+ $R2 = hexdec(substr($this->wm_shadow_color, 0, 2));
1011
+ $G2 = hexdec(substr($this->wm_shadow_color, 2, 2));
1012
+ $B2 = hexdec(substr($this->wm_shadow_color, 4, 2));
1013
+
1014
+ $txt_color = imagecolorclosest($src_img, $R1, $G1, $B1);
1015
+ $drp_color = imagecolorclosest($src_img, $R2, $G2, $B2);
1016
+
1017
+ // Reverse the vertical offset
1018
+ // When the image is positioned at the bottom
1019
+ // we don't want the vertical offset to push it
1020
+ // further down. We want the reverse, so we'll
1021
+ // invert the offset. Note: The horizontal
1022
+ // offset flips itself automatically
1023
+
1024
+ if ($this->wm_vrt_alignment == 'B')
1025
+ $this->wm_vrt_offset = $this->wm_vrt_offset * -1;
1026
+
1027
+ if ($this->wm_hor_alignment == 'R')
1028
+ $this->wm_hor_offset = $this->wm_hor_offset * -1;
1029
+
1030
+ // Set font width and height
1031
+ // These are calculated differently depending on
1032
+ // whether we are using the true type font or not
1033
+ if ($this->wm_use_truetype == TRUE)
1034
+ {
1035
+ if ($this->wm_font_size == '')
1036
+ $this->wm_font_size = '17';
1037
+
1038
+ $fontwidth = $this->wm_font_size-($this->wm_font_size/4);
1039
+ $fontheight = $this->wm_font_size;
1040
+ $this->wm_vrt_offset += $this->wm_font_size;
1041
+ }
1042
+ else
1043
+ {
1044
+ $fontwidth = imagefontwidth($this->wm_font_size);
1045
+ $fontheight = imagefontheight($this->wm_font_size);
1046
+ }
1047
+
1048
+ // Set base X and Y axis values
1049
+ $x_axis = $this->wm_hor_offset + $this->wm_padding;
1050
+ $y_axis = $this->wm_vrt_offset + $this->wm_padding;
1051
+
1052
+ // Set verticle alignment
1053
+ if ($this->wm_use_drop_shadow == FALSE)
1054
+ $this->wm_shadow_distance = 0;
1055
+
1056
+ $this->wm_vrt_alignment = strtoupper(substr($this->wm_vrt_alignment, 0, 1));
1057
+ $this->wm_hor_alignment = strtoupper(substr($this->wm_hor_alignment, 0, 1));
1058
+
1059
+ switch ($this->wm_vrt_alignment)
1060
+ {
1061
+ case "T" :
1062
+ break;
1063
+ case "M": $y_axis += ($this->orig_height/2)+($fontheight/2);
1064
+ break;
1065
+ case "B": $y_axis += ($this->orig_height - $fontheight - $this->wm_shadow_distance - ($fontheight/2));
1066
+ break;
1067
+ }
1068
+
1069
+ $x_shad = $x_axis + $this->wm_shadow_distance;
1070
+ $y_shad = $y_axis + $this->wm_shadow_distance;
1071
+
1072
+ // Set horizontal alignment
1073
+ switch ($this->wm_hor_alignment)
1074
+ {
1075
+ case "L":
1076
+ break;
1077
+ case "R":
1078
+ if ($this->wm_use_drop_shadow)
1079
+ $x_shad += ($this->orig_width - $fontwidth*strlen($this->wm_text));
1080
+ $x_axis += ($this->orig_width - $fontwidth*strlen($this->wm_text));
1081
+ break;
1082
+ case "C":
1083
+ if ($this->wm_use_drop_shadow)
1084
+ $x_shad += floor(($this->orig_width - $fontwidth*strlen($this->wm_text))/2);
1085
+ $x_axis += floor(($this->orig_width -$fontwidth*strlen($this->wm_text))/2);
1086
+ break;
1087
+ }
1088
+
1089
+ // Add the text to the source image
1090
+ if ($this->wm_use_truetype)
1091
+ {
1092
+ if ($this->wm_use_drop_shadow)
1093
+ imagettftext($src_img, $this->wm_font_size, 0, $x_shad, $y_shad, $drp_color, $this->wm_font_path, $this->wm_text);
1094
+ imagettftext($src_img, $this->wm_font_size, 0, $x_axis, $y_axis, $txt_color, $this->wm_font_path, $this->wm_text);
1095
+ }
1096
+ else
1097
+ {
1098
+ if ($this->wm_use_drop_shadow)
1099
+ imagestring($src_img, $this->wm_font_size, $x_shad, $y_shad, $this->wm_text, $drp_color);
1100
+ imagestring($src_img, $this->wm_font_size, $x_axis, $y_axis, $this->wm_text, $txt_color);
1101
+ }
1102
+
1103
+ // Output the final image
1104
+ if ($this->dynamic_output == TRUE)
1105
+ {
1106
+ $this->image_display_gd($src_img);
1107
+ }
1108
+ else
1109
+ {
1110
+ $this->image_save_gd($src_img);
1111
+ }
1112
+
1113
+ imagedestroy($src_img);
1114
+
1115
+ return TRUE;
1116
+ }
1117
+
1118
+ // --------------------------------------------------------------------
1119
+
1120
+ /**
1121
+ * Create Image - GD
1122
+ *
1123
+ * This simply creates an image resource handle
1124
+ * based on the type of image being processed
1125
+ *
1126
+ * @access public
1127
+ * @param string
1128
+ * @return resource
1129
+ */
1130
+ function image_create_gd($path = '', $image_type = '')
1131
+ {
1132
+ if ($path == '')
1133
+ $path = $this->full_src_path;
1134
+
1135
+ if ($image_type == '')
1136
+ $image_type = $this->image_type;
1137
+
1138
+
1139
+ switch ($image_type)
1140
+ {
1141
+ case 1 :
1142
+ if ( ! function_exists('imagecreatefromgif'))
1143
+ {
1144
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_gif_not_supported'));
1145
+ return FALSE;
1146
+ }
1147
+
1148
+ return imagecreatefromgif($path);
1149
+ break;
1150
+ case 2 :
1151
+ if ( ! function_exists('imagecreatefromjpeg'))
1152
+ {
1153
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_jpg_not_supported'));
1154
+ return FALSE;
1155
+ }
1156
+
1157
+ return imagecreatefromjpeg($path);
1158
+ break;
1159
+ case 3 :
1160
+ if ( ! function_exists('imagecreatefrompng'))
1161
+ {
1162
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
1163
+ return FALSE;
1164
+ }
1165
+
1166
+ return imagecreatefrompng($path);
1167
+ break;
1168
+
1169
+ }
1170
+
1171
+ $this->set_error(array('imglib_unsupported_imagecreate'));
1172
+ return FALSE;
1173
+ }
1174
+
1175
+ // --------------------------------------------------------------------
1176
+
1177
+ /**
1178
+ * Write image file to disk - GD
1179
+ *
1180
+ * Takes an image resource as input and writes the file
1181
+ * to the specified destination
1182
+ *
1183
+ * @access public
1184
+ * @param resource
1185
+ * @return bool
1186
+ */
1187
+ function image_save_gd($resource)
1188
+ {
1189
+ switch ($this->image_type)
1190
+ {
1191
+ case 1 :
1192
+ if ( ! function_exists('imagegif'))
1193
+ {
1194
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_gif_not_supported'));
1195
+ return FALSE;
1196
+ }
1197
+
1198
+ if ( ! @imagegif($resource, $this->full_dst_path))
1199
+ {
1200
+ $this->set_error('imglib_save_failed');
1201
+ return FALSE;
1202
+ }
1203
+ break;
1204
+ case 2 :
1205
+ if ( ! function_exists('imagejpeg'))
1206
+ {
1207
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_jpg_not_supported'));
1208
+ return FALSE;
1209
+ }
1210
+
1211
+ if (phpversion() == '4.4.1')
1212
+ {
1213
+ @touch($this->full_dst_path); // PHP 4.4.1 bug #35060 - workaround
1214
+ }
1215
+
1216
+ if ( ! @imagejpeg($resource, $this->full_dst_path, $this->quality))
1217
+ {
1218
+ $this->set_error('imglib_save_failed');
1219
+ return FALSE;
1220
+ }
1221
+ break;
1222
+ case 3 :
1223
+ if ( ! function_exists('imagepng'))
1224
+ {
1225
+ $this->set_error(array('imglib_unsupported_imagecreate', 'imglib_png_not_supported'));
1226
+ return FALSE;
1227
+ }
1228
+
1229
+ if ( ! @imagepng($resource, $this->full_dst_path))
1230
+ {
1231
+ $this->set_error('imglib_save_failed');
1232
+ return FALSE;
1233
+ }
1234
+ break;
1235
+ default :
1236
+ $this->set_error(array('imglib_unsupported_imagecreate'));
1237
+ return FALSE;
1238
+ break;
1239
+ }
1240
+
1241
+ return TRUE;
1242
+ }
1243
+
1244
+ // --------------------------------------------------------------------
1245
+
1246
+ /**
1247
+ * Dynamically outputs an image
1248
+ *
1249
+ * @access public
1250
+ * @param resource
1251
+ * @return void
1252
+ */
1253
+ function image_display_gd($resource)
1254
+ {
1255
+ header("Content-Disposition: filename={$this->source_image};");
1256
+ header("Content-Type: {$this->mime_type}");
1257
+ header('Content-Transfer-Encoding: binary');
1258
+ header('Last-Modified: '.gmdate('D, d M Y H:i:s', time()).' GMT');
1259
+
1260
+ switch ($this->image_type)
1261
+ {
1262
+ case 1 : imagegif($resource);
1263
+ break;
1264
+ case 2 : imagejpeg($resource, '', $this->quality);
1265
+ break;
1266
+ case 3 : imagepng($resource);
1267
+ break;
1268
+ default : echo 'Unable to display the image';
1269
+ break;
1270
+ }
1271
+ }
1272
+
1273
+ // --------------------------------------------------------------------
1274
+
1275
+ /**
1276
+ * Re-proportion Image Width/Height
1277
+ *
1278
+ * When creating thumbs, the desired width/height
1279
+ * can end up warping the image due to an incorrect
1280
+ * ratio between the full-sized image and the thumb.
1281
+ *
1282
+ * This function lets us re-proportion the width/height
1283
+ * if users choose to maintain the aspect ratio when resizing.
1284
+ *
1285
+ * @access public
1286
+ * @return void
1287
+ */
1288
+ function image_reproportion()
1289
+ {
1290
+ if ( ! is_numeric($this->width) OR ! is_numeric($this->height) OR $this->width == 0 OR $this->height == 0)
1291
+ return;
1292
+
1293
+ if ( ! is_numeric($this->orig_width) OR ! is_numeric($this->orig_height) OR $this->orig_width == 0 OR $this->orig_height == 0)
1294
+ return;
1295
+
1296
+ $new_width = ceil($this->orig_width*$this->height/$this->orig_height);
1297
+ $new_height = ceil($this->width*$this->orig_height/$this->orig_width);
1298
+
1299
+ $ratio = (($this->orig_height/$this->orig_width) - ($this->height/$this->width));
1300
+
1301
+ if ($this->master_dim != 'width' AND $this->master_dim != 'height')
1302
+ {
1303
+ $this->master_dim = ($ratio < 0) ? 'width' : 'height';
1304
+ }
1305
+
1306
+ if (($this->width != $new_width) AND ($this->height != $new_height))
1307
+ {
1308
+ if ($this->master_dim == 'height')
1309
+ {
1310
+ $this->width = $new_width;
1311
+ }
1312
+ else
1313
+ {
1314
+ $this->height = $new_height;
1315
+ }
1316
+ }
1317
+ }
1318
+
1319
+ // --------------------------------------------------------------------
1320
+
1321
+ /**
1322
+ * Get image properties
1323
+ *
1324
+ * A helper function that gets info about the file
1325
+ *
1326
+ * @access public
1327
+ * @param string
1328
+ * @return mixed
1329
+ */
1330
+ function get_image_properties($path = '', $return = FALSE)
1331
+ {
1332
+ // For now we require GD but we should
1333
+ // find a way to determine this using IM or NetPBM
1334
+
1335
+ if ($path == '')
1336
+ $path = $this->full_src_path;
1337
+
1338
+ if ( ! file_exists($path))
1339
+ {
1340
+ $this->set_error('imglib_invalid_path');
1341
+ return FALSE;
1342
+ }
1343
+
1344
+ $vals = @getimagesize($path);
1345
+
1346
+ $types = array(1 => 'gif', 2 => 'jpeg', 3 => 'png');
1347
+
1348
+ $mime = (isset($types[$vals['2']])) ? 'image/'.$types[$vals['2']] : 'image/jpg';
1349
+
1350
+ if ($return == TRUE)
1351
+ {
1352
+ $v['width'] = $vals['0'];
1353
+ $v['height'] = $vals['1'];
1354
+ $v['image_type'] = $vals['2'];
1355
+ $v['size_str'] = $vals['3'];
1356
+ $v['mime_type'] = $mime;
1357
+
1358
+ return $v;
1359
+ }
1360
+
1361
+ $this->orig_width = $vals['0'];
1362
+ $this->orig_height = $vals['1'];
1363
+ $this->image_type = $vals['2'];
1364
+ $this->size_str = $vals['3'];
1365
+ $this->mime_type = $mime;
1366
+
1367
+ return TRUE;
1368
+ }
1369
+
1370
+ // --------------------------------------------------------------------
1371
+
1372
+ /**
1373
+ * Size calculator
1374
+ *
1375
+ * This function takes a known width x height and
1376
+ * recalculates it to a new size. Only one
1377
+ * new variable needs to be known
1378
+ *
1379
+ * $props = array(
1380
+ * 'width' => $width,
1381
+ * 'height' => $height,
1382
+ * 'new_width' => 40,
1383
+ * 'new_height' => ''
1384
+ * );
1385
+ *
1386
+ * @access public
1387
+ * @param array
1388
+ * @return array
1389
+ */
1390
+ function size_calculator($vals)
1391
+ {
1392
+ if ( ! is_array($vals))
1393
+ {
1394
+ return;
1395
+ }
1396
+
1397
+ $allowed = array('new_width', 'new_height', 'width', 'height');
1398
+
1399
+ foreach ($allowed as $item)
1400
+ {
1401
+ if ( ! isset($vals[$item]) OR $vals[$item] == '')
1402
+ $vals[$item] = 0;
1403
+ }
1404
+
1405
+ if ($vals['width'] == 0 OR $vals['height'] == 0)
1406
+ {
1407
+ return $vals;
1408
+ }
1409
+
1410
+ if ($vals['new_width'] == 0)
1411
+ {
1412
+ $vals['new_width'] = ceil($vals['width']*$vals['new_height']/$vals['height']);
1413
+ }
1414
+ elseif ($vals['new_height'] == 0)
1415
+ {
1416
+ $vals['new_height'] = ceil($vals['new_width']*$vals['height']/$vals['width']);
1417
+ }
1418
+
1419
+ return $vals;
1420
+ }
1421
+
1422
+ // --------------------------------------------------------------------
1423
+
1424
+ /**
1425
+ * Explode source_image
1426
+ *
1427
+ * This is a helper function that extracts the extension
1428
+ * from the source_image. This function lets us deal with
1429
+ * source_images with multiple periods, like: my.cool.jpg
1430
+ * It returns an associative array with two elements:
1431
+ * $array['ext'] = '.jpg';
1432
+ * $array['name'] = 'my.cool';
1433
+ *
1434
+ * @access public
1435
+ * @param array
1436
+ * @return array
1437
+ */
1438
+ function explode_name($source_image)
1439
+ {
1440
+ $ext = strrchr($source_image, '.');
1441
+ $name = ($ext === FALSE) ? $source_image : substr($source_image, 0, -strlen($ext));
1442
+
1443
+ return array('ext' => $ext, 'name' => $name);
1444
+ }
1445
+
1446
+ // --------------------------------------------------------------------
1447
+
1448
+ /**
1449
+ * Is GD Installed?
1450
+ *
1451
+ * @access public
1452
+ * @return bool
1453
+ */
1454
+ function gd_loaded()
1455
+ {
1456
+ if ( ! extension_loaded('gd'))
1457
+ {
1458
+ if ( ! dl('gd.so'))
1459
+ {
1460
+ return FALSE;
1461
+ }
1462
+ }
1463
+
1464
+ return TRUE;
1465
+ }
1466
+
1467
+ // --------------------------------------------------------------------
1468
+
1469
+ /**
1470
+ * Get GD version
1471
+ *
1472
+ * @access public
1473
+ * @return mixed
1474
+ */
1475
+ function gd_version()
1476
+ {
1477
+ if (function_exists('gd_info'))
1478
+ {
1479
+ $gd_version = @gd_info();
1480
+ $gd_version = preg_replace("/\D/", "", $gd_version['GD Version']);
1481
+
1482
+ return $gd_version;
1483
+ }
1484
+
1485
+ return FALSE;
1486
+ }
1487
+
1488
+ // --------------------------------------------------------------------
1489
+
1490
+ /**
1491
+ * Set error message
1492
+ *
1493
+ * @access public
1494
+ * @param string
1495
+ * @return void
1496
+ */
1497
+ function set_error($msg)
1498
+ {
1499
+ $CI =& get_instance();
1500
+ $CI->lang->load('imglib');
1501
+
1502
+ if (is_array($msg))
1503
+ {
1504
+ foreach ($msg as $val)
1505
+ {
1506
+
1507
+ $msg = ($CI->lang->line($val) == FALSE) ? $val : $CI->lang->line($val);
1508
+ $this->error_msg[] = $msg;
1509
+ log_message('error', $msg);
1510
+ }
1511
+ }
1512
+ else
1513
+ {
1514
+ $msg = ($CI->lang->line($msg) == FALSE) ? $msg : $CI->lang->line($msg);
1515
+ $this->error_msg[] = $msg;
1516
+ log_message('error', $msg);
1517
+ }
1518
+ }
1519
+
1520
+ // --------------------------------------------------------------------
1521
+
1522
+ /**
1523
+ * Show error messages
1524
+ *
1525
+ * @access public
1526
+ * @param string
1527
+ * @return string
1528
+ */
1529
+ function display_errors($open = '<p>', $close = '</p>')
1530
+ {
1531
+ $str = '';
1532
+ foreach ($this->error_msg as $val)
1533
+ {
1534
+ $str .= $open.$val.$close;
1535
+ }
1536
+
1537
+ return $str;
1538
+ }
1539
+
1540
+ }
1541
+ // END Image_lib Class
1542
+
1543
+ /* End of file Image_lib.php */
1544
+ /* Location: ./system/libraries/Image_lib.php */