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,1366 @@
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
+ * Database Driver Class
20
+ *
21
+ * This is the platform-independent base DB implementation class.
22
+ * This class will not be called directly. Rather, the adapter
23
+ * class for the specific database will extend and instantiate it.
24
+ *
25
+ * @package CodeIgniter
26
+ * @subpackage Drivers
27
+ * @category Database
28
+ * @author ExpressionEngine Dev Team
29
+ * @link http://codeigniter.com/user_guide/database/
30
+ */
31
+ class CI_DB_driver {
32
+
33
+ var $username;
34
+ var $password;
35
+ var $hostname;
36
+ var $database;
37
+ var $dbdriver = 'mysql';
38
+ var $dbprefix = '';
39
+ var $char_set = 'utf8';
40
+ var $dbcollat = 'utf8_general_ci';
41
+ var $autoinit = TRUE; // Whether to automatically initialize the DB
42
+ var $swap_pre = '';
43
+ var $port = '';
44
+ var $pconnect = FALSE;
45
+ var $conn_id = FALSE;
46
+ var $result_id = FALSE;
47
+ var $db_debug = FALSE;
48
+ var $benchmark = 0;
49
+ var $query_count = 0;
50
+ var $bind_marker = '?';
51
+ var $save_queries = TRUE;
52
+ var $queries = array();
53
+ var $query_times = array();
54
+ var $data_cache = array();
55
+ var $trans_enabled = TRUE;
56
+ var $trans_strict = TRUE;
57
+ var $_trans_depth = 0;
58
+ var $_trans_status = TRUE; // Used with transactions to determine if a rollback should occur
59
+ var $cache_on = FALSE;
60
+ var $cachedir = '';
61
+ var $cache_autodel = FALSE;
62
+ var $CACHE; // The cache class object
63
+
64
+ // Private variables
65
+ var $_protect_identifiers = TRUE;
66
+ var $_reserved_identifiers = array('*'); // Identifiers that should NOT be escaped
67
+
68
+ // These are use with Oracle
69
+ var $stmt_id;
70
+ var $curs_id;
71
+ var $limit_used;
72
+
73
+
74
+
75
+ /**
76
+ * Constructor. Accepts one parameter containing the database
77
+ * connection settings.
78
+ *
79
+ * @param array
80
+ */
81
+ function CI_DB_driver($params)
82
+ {
83
+ if (is_array($params))
84
+ {
85
+ foreach ($params as $key => $val)
86
+ {
87
+ $this->$key = $val;
88
+ }
89
+ }
90
+
91
+ log_message('debug', 'Database Driver Class Initialized');
92
+ }
93
+
94
+ // --------------------------------------------------------------------
95
+
96
+ /**
97
+ * Initialize Database Settings
98
+ *
99
+ * @access private Called by the constructor
100
+ * @param mixed
101
+ * @return void
102
+ */
103
+ function initialize()
104
+ {
105
+ // If an existing connection resource is available
106
+ // there is no need to connect and select the database
107
+ if (is_resource($this->conn_id) OR is_object($this->conn_id))
108
+ {
109
+ return TRUE;
110
+ }
111
+
112
+ // ----------------------------------------------------------------
113
+
114
+ // Connect to the database and set the connection ID
115
+ $this->conn_id = ($this->pconnect == FALSE) ? $this->db_connect() : $this->db_pconnect();
116
+
117
+ // No connection resource? Throw an error
118
+ if ( ! $this->conn_id)
119
+ {
120
+ log_message('error', 'Unable to connect to the database');
121
+
122
+ if ($this->db_debug)
123
+ {
124
+ $this->display_error('db_unable_to_connect');
125
+ }
126
+ return FALSE;
127
+ }
128
+
129
+ // ----------------------------------------------------------------
130
+
131
+ // Select the DB... assuming a database name is specified in the config file
132
+ if ($this->database != '')
133
+ {
134
+ if ( ! $this->db_select())
135
+ {
136
+ log_message('error', 'Unable to select database: '.$this->database);
137
+
138
+ if ($this->db_debug)
139
+ {
140
+ $this->display_error('db_unable_to_select', $this->database);
141
+ }
142
+ return FALSE;
143
+ }
144
+ else
145
+ {
146
+ // We've selected the DB. Now we set the character set
147
+ if ( ! $this->db_set_charset($this->char_set, $this->dbcollat))
148
+ {
149
+ return FALSE;
150
+ }
151
+
152
+ return TRUE;
153
+ }
154
+ }
155
+
156
+ return TRUE;
157
+ }
158
+
159
+ // --------------------------------------------------------------------
160
+
161
+ /**
162
+ * Set client character set
163
+ *
164
+ * @access public
165
+ * @param string
166
+ * @param string
167
+ * @return resource
168
+ */
169
+ function db_set_charset($charset, $collation)
170
+ {
171
+ if ( ! $this->_db_set_charset($this->char_set, $this->dbcollat))
172
+ {
173
+ log_message('error', 'Unable to set database connection charset: '.$this->char_set);
174
+
175
+ if ($this->db_debug)
176
+ {
177
+ $this->display_error('db_unable_to_set_charset', $this->char_set);
178
+ }
179
+
180
+ return FALSE;
181
+ }
182
+
183
+ return TRUE;
184
+ }
185
+
186
+ // --------------------------------------------------------------------
187
+
188
+ /**
189
+ * The name of the platform in use (mysql, mssql, etc...)
190
+ *
191
+ * @access public
192
+ * @return string
193
+ */
194
+ function platform()
195
+ {
196
+ return $this->dbdriver;
197
+ }
198
+
199
+ // --------------------------------------------------------------------
200
+
201
+ /**
202
+ * Database Version Number. Returns a string containing the
203
+ * version of the database being used
204
+ *
205
+ * @access public
206
+ * @return string
207
+ */
208
+ function version()
209
+ {
210
+ if (FALSE === ($sql = $this->_version()))
211
+ {
212
+ if ($this->db_debug)
213
+ {
214
+ return $this->display_error('db_unsupported_function');
215
+ }
216
+ return FALSE;
217
+ }
218
+
219
+ if ($this->dbdriver == 'oci8')
220
+ {
221
+ return $sql;
222
+ }
223
+
224
+ $query = $this->query($sql);
225
+ return $query->row('ver');
226
+ }
227
+
228
+ // --------------------------------------------------------------------
229
+
230
+ /**
231
+ * Execute the query
232
+ *
233
+ * Accepts an SQL string as input and returns a result object upon
234
+ * successful execution of a "read" type query. Returns boolean TRUE
235
+ * upon successful execution of a "write" type query. Returns boolean
236
+ * FALSE upon failure, and if the $db_debug variable is set to TRUE
237
+ * will raise an error.
238
+ *
239
+ * @access public
240
+ * @param string An SQL query string
241
+ * @param array An array of binding data
242
+ * @return mixed
243
+ */
244
+ function query($sql, $binds = FALSE, $return_object = TRUE)
245
+ {
246
+ if ($sql == '')
247
+ {
248
+ if ($this->db_debug)
249
+ {
250
+ log_message('error', 'Invalid query: '.$sql);
251
+ return $this->display_error('db_invalid_query');
252
+ }
253
+ return FALSE;
254
+ }
255
+
256
+ // Verify table prefix and replace if necessary
257
+ if ( ($this->dbprefix != '' AND $this->swap_pre != '') AND ($this->dbprefix != $this->swap_pre) )
258
+ {
259
+ $sql = preg_replace("/(\W)".$this->swap_pre."(\S+?)/", "\\1".$this->dbprefix."\\2", $sql);
260
+ }
261
+
262
+ // Is query caching enabled? If the query is a "read type"
263
+ // we will load the caching class and return the previously
264
+ // cached query if it exists
265
+ if ($this->cache_on == TRUE AND stristr($sql, 'SELECT'))
266
+ {
267
+ if ($this->_cache_init())
268
+ {
269
+ $this->load_rdriver();
270
+ if (FALSE !== ($cache = $this->CACHE->read($sql)))
271
+ {
272
+ return $cache;
273
+ }
274
+ }
275
+ }
276
+
277
+ // Compile binds if needed
278
+ if ($binds !== FALSE)
279
+ {
280
+ $sql = $this->compile_binds($sql, $binds);
281
+ }
282
+
283
+ // Save the query for debugging
284
+ if ($this->save_queries == TRUE)
285
+ {
286
+ $this->queries[] = $sql;
287
+ }
288
+
289
+ // Start the Query Timer
290
+ $time_start = list($sm, $ss) = explode(' ', microtime());
291
+
292
+ // Run the Query
293
+ if (FALSE === ($this->result_id = $this->simple_query($sql)))
294
+ {
295
+ if ($this->save_queries == TRUE)
296
+ {
297
+ $this->query_times[] = 0;
298
+ }
299
+
300
+ // This will trigger a rollback if transactions are being used
301
+ $this->_trans_status = FALSE;
302
+
303
+ if ($this->db_debug)
304
+ {
305
+ // grab the error number and message now, as we might run some
306
+ // additional queries before displaying the error
307
+ $error_no = $this->_error_number();
308
+ $error_msg = $this->_error_message();
309
+
310
+ // We call this function in order to roll-back queries
311
+ // if transactions are enabled. If we don't call this here
312
+ // the error message will trigger an exit, causing the
313
+ // transactions to remain in limbo.
314
+ $this->trans_complete();
315
+
316
+ // Log and display errors
317
+ log_message('error', 'Query error: '.$error_msg);
318
+ return $this->display_error(
319
+ array(
320
+ 'Error Number: '.$error_no,
321
+ $error_msg,
322
+ $sql
323
+ )
324
+ );
325
+ }
326
+
327
+ return FALSE;
328
+ }
329
+
330
+ // Stop and aggregate the query time results
331
+ $time_end = list($em, $es) = explode(' ', microtime());
332
+ $this->benchmark += ($em + $es) - ($sm + $ss);
333
+
334
+ if ($this->save_queries == TRUE)
335
+ {
336
+ $this->query_times[] = ($em + $es) - ($sm + $ss);
337
+ }
338
+
339
+ // Increment the query counter
340
+ $this->query_count++;
341
+
342
+ // Was the query a "write" type?
343
+ // If so we'll simply return true
344
+ if ($this->is_write_type($sql) === TRUE)
345
+ {
346
+ // If caching is enabled we'll auto-cleanup any
347
+ // existing files related to this particular URI
348
+ if ($this->cache_on == TRUE AND $this->cache_autodel == TRUE AND $this->_cache_init())
349
+ {
350
+ $this->CACHE->delete();
351
+ }
352
+
353
+ return TRUE;
354
+ }
355
+
356
+ // Return TRUE if we don't need to create a result object
357
+ // Currently only the Oracle driver uses this when stored
358
+ // procedures are used
359
+ if ($return_object !== TRUE)
360
+ {
361
+ return TRUE;
362
+ }
363
+
364
+ // Load and instantiate the result driver
365
+
366
+ $driver = $this->load_rdriver();
367
+ $RES = new $driver();
368
+ $RES->conn_id = $this->conn_id;
369
+ $RES->result_id = $this->result_id;
370
+
371
+ if ($this->dbdriver == 'oci8')
372
+ {
373
+ $RES->stmt_id = $this->stmt_id;
374
+ $RES->curs_id = NULL;
375
+ $RES->limit_used = $this->limit_used;
376
+ $this->stmt_id = FALSE;
377
+ }
378
+
379
+ // oci8 vars must be set before calling this
380
+ $RES->num_rows = $RES->num_rows();
381
+
382
+ // Is query caching enabled? If so, we'll serialize the
383
+ // result object and save it to a cache file.
384
+ if ($this->cache_on == TRUE AND $this->_cache_init())
385
+ {
386
+ // We'll create a new instance of the result object
387
+ // only without the platform specific driver since
388
+ // we can't use it with cached data (the query result
389
+ // resource ID won't be any good once we've cached the
390
+ // result object, so we'll have to compile the data
391
+ // and save it)
392
+ $CR = new CI_DB_result();
393
+ $CR->num_rows = $RES->num_rows();
394
+ $CR->result_object = $RES->result_object();
395
+ $CR->result_array = $RES->result_array();
396
+
397
+ // Reset these since cached objects can not utilize resource IDs.
398
+ $CR->conn_id = NULL;
399
+ $CR->result_id = NULL;
400
+
401
+ $this->CACHE->write($sql, $CR);
402
+ }
403
+
404
+ return $RES;
405
+ }
406
+
407
+ // --------------------------------------------------------------------
408
+
409
+ /**
410
+ * Load the result drivers
411
+ *
412
+ * @access public
413
+ * @return string the name of the result class
414
+ */
415
+ function load_rdriver()
416
+ {
417
+ $driver = 'CI_DB_'.$this->dbdriver.'_result';
418
+
419
+ if ( ! class_exists($driver))
420
+ {
421
+ include_once(BASEPATH.'database/DB_result'.EXT);
422
+ include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);
423
+ }
424
+
425
+ return $driver;
426
+ }
427
+
428
+ // --------------------------------------------------------------------
429
+
430
+ /**
431
+ * Simple Query
432
+ * This is a simplified version of the query() function. Internally
433
+ * we only use it when running transaction commands since they do
434
+ * not require all the features of the main query() function.
435
+ *
436
+ * @access public
437
+ * @param string the sql query
438
+ * @return mixed
439
+ */
440
+ function simple_query($sql)
441
+ {
442
+ if ( ! $this->conn_id)
443
+ {
444
+ $this->initialize();
445
+ }
446
+
447
+ return $this->_execute($sql);
448
+ }
449
+
450
+ // --------------------------------------------------------------------
451
+
452
+ /**
453
+ * Disable Transactions
454
+ * This permits transactions to be disabled at run-time.
455
+ *
456
+ * @access public
457
+ * @return void
458
+ */
459
+ function trans_off()
460
+ {
461
+ $this->trans_enabled = FALSE;
462
+ }
463
+
464
+ // --------------------------------------------------------------------
465
+
466
+ /**
467
+ * Enable/disable Transaction Strict Mode
468
+ * When strict mode is enabled, if you are running multiple groups of
469
+ * transactions, if one group fails all groups will be rolled back.
470
+ * If strict mode is disabled, each group is treated autonomously, meaning
471
+ * a failure of one group will not affect any others
472
+ *
473
+ * @access public
474
+ * @return void
475
+ */
476
+ function trans_strict($mode = TRUE)
477
+ {
478
+ $this->trans_strict = is_bool($mode) ? $mode : TRUE;
479
+ }
480
+
481
+ // --------------------------------------------------------------------
482
+
483
+ /**
484
+ * Start Transaction
485
+ *
486
+ * @access public
487
+ * @return void
488
+ */
489
+ function trans_start($test_mode = FALSE)
490
+ {
491
+ if ( ! $this->trans_enabled)
492
+ {
493
+ return FALSE;
494
+ }
495
+
496
+ // When transactions are nested we only begin/commit/rollback the outermost ones
497
+ if ($this->_trans_depth > 0)
498
+ {
499
+ $this->_trans_depth += 1;
500
+ return;
501
+ }
502
+
503
+ $this->trans_begin($test_mode);
504
+ }
505
+
506
+ // --------------------------------------------------------------------
507
+
508
+ /**
509
+ * Complete Transaction
510
+ *
511
+ * @access public
512
+ * @return bool
513
+ */
514
+ function trans_complete()
515
+ {
516
+ if ( ! $this->trans_enabled)
517
+ {
518
+ return FALSE;
519
+ }
520
+
521
+ // When transactions are nested we only begin/commit/rollback the outermost ones
522
+ if ($this->_trans_depth > 1)
523
+ {
524
+ $this->_trans_depth -= 1;
525
+ return TRUE;
526
+ }
527
+
528
+ // The query() function will set this flag to FALSE in the event that a query failed
529
+ if ($this->_trans_status === FALSE)
530
+ {
531
+ $this->trans_rollback();
532
+
533
+ // If we are NOT running in strict mode, we will reset
534
+ // the _trans_status flag so that subsequent groups of transactions
535
+ // will be permitted.
536
+ if ($this->trans_strict === FALSE)
537
+ {
538
+ $this->_trans_status = TRUE;
539
+ }
540
+
541
+ log_message('debug', 'DB Transaction Failure');
542
+ return FALSE;
543
+ }
544
+
545
+ $this->trans_commit();
546
+ return TRUE;
547
+ }
548
+
549
+ // --------------------------------------------------------------------
550
+
551
+ /**
552
+ * Lets you retrieve the transaction flag to determine if it has failed
553
+ *
554
+ * @access public
555
+ * @return bool
556
+ */
557
+ function trans_status()
558
+ {
559
+ return $this->_trans_status;
560
+ }
561
+
562
+ // --------------------------------------------------------------------
563
+
564
+ /**
565
+ * Compile Bindings
566
+ *
567
+ * @access public
568
+ * @param string the sql statement
569
+ * @param array an array of bind data
570
+ * @return string
571
+ */
572
+ function compile_binds($sql, $binds)
573
+ {
574
+ if (strpos($sql, $this->bind_marker) === FALSE)
575
+ {
576
+ return $sql;
577
+ }
578
+
579
+ if ( ! is_array($binds))
580
+ {
581
+ $binds = array($binds);
582
+ }
583
+
584
+ // Get the sql segments around the bind markers
585
+ $segments = explode($this->bind_marker, $sql);
586
+
587
+ // The count of bind should be 1 less then the count of segments
588
+ // If there are more bind arguments trim it down
589
+ if (count($binds) >= count($segments)) {
590
+ $binds = array_slice($binds, 0, count($segments)-1);
591
+ }
592
+
593
+ // Construct the binded query
594
+ $result = $segments[0];
595
+ $i = 0;
596
+ foreach ($binds as $bind)
597
+ {
598
+ $result .= $this->escape($bind);
599
+ $result .= $segments[++$i];
600
+ }
601
+
602
+ return $result;
603
+ }
604
+
605
+ // --------------------------------------------------------------------
606
+
607
+ /**
608
+ * Determines if a query is a "write" type.
609
+ *
610
+ * @access public
611
+ * @param string An SQL query string
612
+ * @return boolean
613
+ */
614
+ function is_write_type($sql)
615
+ {
616
+ if ( ! preg_match('/^\s*"?(SET|INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|TRUNCATE|LOAD DATA|COPY|ALTER|GRANT|REVOKE|LOCK|UNLOCK)\s+/i', $sql))
617
+ {
618
+ return FALSE;
619
+ }
620
+ return TRUE;
621
+ }
622
+
623
+ // --------------------------------------------------------------------
624
+
625
+ /**
626
+ * Calculate the aggregate query elapsed time
627
+ *
628
+ * @access public
629
+ * @param integer The number of decimal places
630
+ * @return integer
631
+ */
632
+ function elapsed_time($decimals = 6)
633
+ {
634
+ return number_format($this->benchmark, $decimals);
635
+ }
636
+
637
+ // --------------------------------------------------------------------
638
+
639
+ /**
640
+ * Returns the total number of queries
641
+ *
642
+ * @access public
643
+ * @return integer
644
+ */
645
+ function total_queries()
646
+ {
647
+ return $this->query_count;
648
+ }
649
+
650
+ // --------------------------------------------------------------------
651
+
652
+ /**
653
+ * Returns the last query that was executed
654
+ *
655
+ * @access public
656
+ * @return void
657
+ */
658
+ function last_query()
659
+ {
660
+ return end($this->queries);
661
+ }
662
+
663
+ // --------------------------------------------------------------------
664
+
665
+ /**
666
+ * "Smart" Escape String
667
+ *
668
+ * Escapes data based on type
669
+ * Sets boolean and null types
670
+ *
671
+ * @access public
672
+ * @param string
673
+ * @return mixed
674
+ */
675
+ function escape($str)
676
+ {
677
+ if (is_string($str))
678
+ {
679
+ $str = "'".$this->escape_str($str)."'";
680
+ }
681
+ elseif (is_bool($str))
682
+ {
683
+ $str = ($str === FALSE) ? 0 : 1;
684
+ }
685
+ elseif (is_null($str))
686
+ {
687
+ $str = 'NULL';
688
+ }
689
+
690
+ return $str;
691
+ }
692
+
693
+ // --------------------------------------------------------------------
694
+
695
+ /**
696
+ * Escape LIKE String
697
+ *
698
+ * Calls the individual driver for platform
699
+ * specific escaping for LIKE conditions
700
+ *
701
+ * @access public
702
+ * @param string
703
+ * @return mixed
704
+ */
705
+ function escape_like_str($str)
706
+ {
707
+ return $this->escape_str($str, TRUE);
708
+ }
709
+
710
+ // --------------------------------------------------------------------
711
+
712
+ /**
713
+ * Primary
714
+ *
715
+ * Retrieves the primary key. It assumes that the row in the first
716
+ * position is the primary key
717
+ *
718
+ * @access public
719
+ * @param string the table name
720
+ * @return string
721
+ */
722
+ function primary($table = '')
723
+ {
724
+ $fields = $this->list_fields($table);
725
+
726
+ if ( ! is_array($fields))
727
+ {
728
+ return FALSE;
729
+ }
730
+
731
+ return current($fields);
732
+ }
733
+
734
+ // --------------------------------------------------------------------
735
+
736
+ /**
737
+ * Returns an array of table names
738
+ *
739
+ * @access public
740
+ * @return array
741
+ */
742
+ function list_tables($constrain_by_prefix = FALSE)
743
+ {
744
+ // Is there a cached result?
745
+ if (isset($this->data_cache['table_names']))
746
+ {
747
+ return $this->data_cache['table_names'];
748
+ }
749
+
750
+ if (FALSE === ($sql = $this->_list_tables($constrain_by_prefix)))
751
+ {
752
+ if ($this->db_debug)
753
+ {
754
+ return $this->display_error('db_unsupported_function');
755
+ }
756
+ return FALSE;
757
+ }
758
+
759
+ $retval = array();
760
+ $query = $this->query($sql);
761
+
762
+ if ($query->num_rows() > 0)
763
+ {
764
+ foreach($query->result_array() as $row)
765
+ {
766
+ if (isset($row['TABLE_NAME']))
767
+ {
768
+ $retval[] = $row['TABLE_NAME'];
769
+ }
770
+ else
771
+ {
772
+ $retval[] = array_shift($row);
773
+ }
774
+ }
775
+ }
776
+
777
+ $this->data_cache['table_names'] = $retval;
778
+ return $this->data_cache['table_names'];
779
+ }
780
+
781
+ // --------------------------------------------------------------------
782
+
783
+ /**
784
+ * Determine if a particular table exists
785
+ * @access public
786
+ * @return boolean
787
+ */
788
+ function table_exists($table_name)
789
+ {
790
+ return ( ! in_array($this->_protect_identifiers($table_name, TRUE, FALSE, FALSE), $this->list_tables())) ? FALSE : TRUE;
791
+ }
792
+
793
+ // --------------------------------------------------------------------
794
+
795
+ /**
796
+ * Fetch MySQL Field Names
797
+ *
798
+ * @access public
799
+ * @param string the table name
800
+ * @return array
801
+ */
802
+ function list_fields($table = '')
803
+ {
804
+ // Is there a cached result?
805
+ if (isset($this->data_cache['field_names'][$table]))
806
+ {
807
+ return $this->data_cache['field_names'][$table];
808
+ }
809
+
810
+ if ($table == '')
811
+ {
812
+ if ($this->db_debug)
813
+ {
814
+ return $this->display_error('db_field_param_missing');
815
+ }
816
+ return FALSE;
817
+ }
818
+
819
+ if (FALSE === ($sql = $this->_list_columns($this->_protect_identifiers($table, TRUE, NULL, FALSE))))
820
+ {
821
+ if ($this->db_debug)
822
+ {
823
+ return $this->display_error('db_unsupported_function');
824
+ }
825
+ return FALSE;
826
+ }
827
+
828
+ $query = $this->query($sql);
829
+
830
+ $retval = array();
831
+ foreach($query->result_array() as $row)
832
+ {
833
+ if (isset($row['COLUMN_NAME']))
834
+ {
835
+ $retval[] = $row['COLUMN_NAME'];
836
+ }
837
+ else
838
+ {
839
+ $retval[] = current($row);
840
+ }
841
+ }
842
+
843
+ $this->data_cache['field_names'][$table] = $retval;
844
+ return $this->data_cache['field_names'][$table];
845
+ }
846
+
847
+ // --------------------------------------------------------------------
848
+
849
+ /**
850
+ * Determine if a particular field exists
851
+ * @access public
852
+ * @param string
853
+ * @param string
854
+ * @return boolean
855
+ */
856
+ function field_exists($field_name, $table_name)
857
+ {
858
+ return ( ! in_array($field_name, $this->list_fields($table_name))) ? FALSE : TRUE;
859
+ }
860
+
861
+ // --------------------------------------------------------------------
862
+
863
+ /**
864
+ * Returns an object with field data
865
+ *
866
+ * @access public
867
+ * @param string the table name
868
+ * @return object
869
+ */
870
+ function field_data($table = '')
871
+ {
872
+ if ($table == '')
873
+ {
874
+ if ($this->db_debug)
875
+ {
876
+ return $this->display_error('db_field_param_missing');
877
+ }
878
+ return FALSE;
879
+ }
880
+
881
+ $query = $this->query($this->_field_data($this->_protect_identifiers($table, TRUE, NULL, FALSE)));
882
+
883
+ return $query->field_data();
884
+ }
885
+
886
+ // --------------------------------------------------------------------
887
+
888
+ /**
889
+ * Generate an insert string
890
+ *
891
+ * @access public
892
+ * @param string the table upon which the query will be performed
893
+ * @param array an associative array data of key/values
894
+ * @return string
895
+ */
896
+ function insert_string($table, $data)
897
+ {
898
+ $fields = array();
899
+ $values = array();
900
+
901
+ foreach($data as $key => $val)
902
+ {
903
+ $fields[] = $this->_escape_identifiers($key);
904
+ $values[] = $this->escape($val);
905
+ }
906
+
907
+ return $this->_insert($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $values);
908
+ }
909
+
910
+ // --------------------------------------------------------------------
911
+
912
+ /**
913
+ * Generate an update string
914
+ *
915
+ * @access public
916
+ * @param string the table upon which the query will be performed
917
+ * @param array an associative array data of key/values
918
+ * @param mixed the "where" statement
919
+ * @return string
920
+ */
921
+ function update_string($table, $data, $where)
922
+ {
923
+ if ($where == '')
924
+ {
925
+ return false;
926
+ }
927
+
928
+ $fields = array();
929
+ foreach($data as $key => $val)
930
+ {
931
+ $fields[$this->_protect_identifiers($key)] = $this->escape($val);
932
+ }
933
+
934
+ if ( ! is_array($where))
935
+ {
936
+ $dest = array($where);
937
+ }
938
+ else
939
+ {
940
+ $dest = array();
941
+ foreach ($where as $key => $val)
942
+ {
943
+ $prefix = (count($dest) == 0) ? '' : ' AND ';
944
+
945
+ if ($val !== '')
946
+ {
947
+ if ( ! $this->_has_operator($key))
948
+ {
949
+ $key .= ' =';
950
+ }
951
+
952
+ $val = ' '.$this->escape($val);
953
+ }
954
+
955
+ $dest[] = $prefix.$key.$val;
956
+ }
957
+ }
958
+
959
+ return $this->_update($this->_protect_identifiers($table, TRUE, NULL, FALSE), $fields, $dest);
960
+ }
961
+
962
+ // --------------------------------------------------------------------
963
+
964
+ /**
965
+ * Tests whether the string has an SQL operator
966
+ *
967
+ * @access private
968
+ * @param string
969
+ * @return bool
970
+ */
971
+ function _has_operator($str)
972
+ {
973
+ $str = trim($str);
974
+ if ( ! preg_match("/(\s|<|>|!|=|is null|is not null)/i", $str))
975
+ {
976
+ return FALSE;
977
+ }
978
+
979
+ return TRUE;
980
+ }
981
+
982
+ // --------------------------------------------------------------------
983
+
984
+ /**
985
+ * Enables a native PHP function to be run, using a platform agnostic wrapper.
986
+ *
987
+ * @access public
988
+ * @param string the function name
989
+ * @param mixed any parameters needed by the function
990
+ * @return mixed
991
+ */
992
+ function call_function($function)
993
+ {
994
+ $driver = ($this->dbdriver == 'postgre') ? 'pg_' : $this->dbdriver.'_';
995
+
996
+ if (FALSE === strpos($driver, $function))
997
+ {
998
+ $function = $driver.$function;
999
+ }
1000
+
1001
+ if ( ! function_exists($function))
1002
+ {
1003
+ if ($this->db_debug)
1004
+ {
1005
+ return $this->display_error('db_unsupported_function');
1006
+ }
1007
+ return FALSE;
1008
+ }
1009
+ else
1010
+ {
1011
+ $args = (func_num_args() > 1) ? array_splice(func_get_args(), 1) : null;
1012
+
1013
+ return call_user_func_array($function, $args);
1014
+ }
1015
+ }
1016
+
1017
+ // --------------------------------------------------------------------
1018
+
1019
+ /**
1020
+ * Set Cache Directory Path
1021
+ *
1022
+ * @access public
1023
+ * @param string the path to the cache directory
1024
+ * @return void
1025
+ */
1026
+ function cache_set_path($path = '')
1027
+ {
1028
+ $this->cachedir = $path;
1029
+ }
1030
+
1031
+ // --------------------------------------------------------------------
1032
+
1033
+ /**
1034
+ * Enable Query Caching
1035
+ *
1036
+ * @access public
1037
+ * @return void
1038
+ */
1039
+ function cache_on()
1040
+ {
1041
+ $this->cache_on = TRUE;
1042
+ return TRUE;
1043
+ }
1044
+
1045
+ // --------------------------------------------------------------------
1046
+
1047
+ /**
1048
+ * Disable Query Caching
1049
+ *
1050
+ * @access public
1051
+ * @return void
1052
+ */
1053
+ function cache_off()
1054
+ {
1055
+ $this->cache_on = FALSE;
1056
+ return FALSE;
1057
+ }
1058
+
1059
+
1060
+ // --------------------------------------------------------------------
1061
+
1062
+ /**
1063
+ * Delete the cache files associated with a particular URI
1064
+ *
1065
+ * @access public
1066
+ * @return void
1067
+ */
1068
+ function cache_delete($segment_one = '', $segment_two = '')
1069
+ {
1070
+ if ( ! $this->_cache_init())
1071
+ {
1072
+ return FALSE;
1073
+ }
1074
+ return $this->CACHE->delete($segment_one, $segment_two);
1075
+ }
1076
+
1077
+ // --------------------------------------------------------------------
1078
+
1079
+ /**
1080
+ * Delete All cache files
1081
+ *
1082
+ * @access public
1083
+ * @return void
1084
+ */
1085
+ function cache_delete_all()
1086
+ {
1087
+ if ( ! $this->_cache_init())
1088
+ {
1089
+ return FALSE;
1090
+ }
1091
+
1092
+ return $this->CACHE->delete_all();
1093
+ }
1094
+
1095
+ // --------------------------------------------------------------------
1096
+
1097
+ /**
1098
+ * Initialize the Cache Class
1099
+ *
1100
+ * @access private
1101
+ * @return void
1102
+ */
1103
+ function _cache_init()
1104
+ {
1105
+ if (is_object($this->CACHE) AND class_exists('CI_DB_Cache'))
1106
+ {
1107
+ return TRUE;
1108
+ }
1109
+
1110
+ if ( ! class_exists('CI_DB_Cache'))
1111
+ {
1112
+ if ( ! @include(BASEPATH.'database/DB_cache'.EXT))
1113
+ {
1114
+ return $this->cache_off();
1115
+ }
1116
+ }
1117
+
1118
+ $this->CACHE = new CI_DB_Cache($this); // pass db object to support multiple db connections and returned db objects
1119
+ return TRUE;
1120
+ }
1121
+
1122
+ // --------------------------------------------------------------------
1123
+
1124
+ /**
1125
+ * Close DB Connection
1126
+ *
1127
+ * @access public
1128
+ * @return void
1129
+ */
1130
+ function close()
1131
+ {
1132
+ if (is_resource($this->conn_id) OR is_object($this->conn_id))
1133
+ {
1134
+ $this->_close($this->conn_id);
1135
+ }
1136
+ $this->conn_id = FALSE;
1137
+ }
1138
+
1139
+ // --------------------------------------------------------------------
1140
+
1141
+ /**
1142
+ * Display an error message
1143
+ *
1144
+ * @access public
1145
+ * @param string the error message
1146
+ * @param string any "swap" values
1147
+ * @param boolean whether to localize the message
1148
+ * @return string sends the application/error_db.php template
1149
+ */
1150
+ function display_error($error = '', $swap = '', $native = FALSE)
1151
+ {
1152
+ $LANG =& load_class('Language');
1153
+ $LANG->load('db');
1154
+
1155
+ $heading = $LANG->line('db_error_heading');
1156
+
1157
+ if ($native == TRUE)
1158
+ {
1159
+ $message = $error;
1160
+ }
1161
+ else
1162
+ {
1163
+ $message = ( ! is_array($error)) ? array(str_replace('%s', $swap, $LANG->line($error))) : $error;
1164
+ }
1165
+
1166
+ $error =& load_class('Exceptions');
1167
+ echo $error->show_error($heading, $message, 'error_db');
1168
+ exit;
1169
+ }
1170
+
1171
+ // --------------------------------------------------------------------
1172
+
1173
+ /**
1174
+ * Protect Identifiers
1175
+ *
1176
+ * This function adds backticks if appropriate based on db type
1177
+ *
1178
+ * @access private
1179
+ * @param mixed the item to escape
1180
+ * @return mixed the item with backticks
1181
+ */
1182
+ function protect_identifiers($item, $prefix_single = FALSE)
1183
+ {
1184
+ return $this->_protect_identifiers($item, $prefix_single);
1185
+ }
1186
+
1187
+ // --------------------------------------------------------------------
1188
+
1189
+ /**
1190
+ * Protect Identifiers
1191
+ *
1192
+ * This function is used extensively by the Active Record class, and by
1193
+ * a couple functions in this class.
1194
+ * It takes a column or table name (optionally with an alias) and inserts
1195
+ * the table prefix onto it. Some logic is necessary in order to deal with
1196
+ * column names that include the path. Consider a query like this:
1197
+ *
1198
+ * SELECT * FROM hostname.database.table.column AS c FROM hostname.database.table
1199
+ *
1200
+ * Or a query with aliasing:
1201
+ *
1202
+ * SELECT m.member_id, m.member_name FROM members AS m
1203
+ *
1204
+ * Since the column name can include up to four segments (host, DB, table, column)
1205
+ * or also have an alias prefix, we need to do a bit of work to figure this out and
1206
+ * insert the table prefix (if it exists) in the proper position, and escape only
1207
+ * the correct identifiers.
1208
+ *
1209
+ * @access private
1210
+ * @param string
1211
+ * @param bool
1212
+ * @param mixed
1213
+ * @param bool
1214
+ * @return string
1215
+ */
1216
+ function _protect_identifiers($item, $prefix_single = FALSE, $protect_identifiers = NULL, $field_exists = TRUE)
1217
+ {
1218
+ if ( ! is_bool($protect_identifiers))
1219
+ {
1220
+ $protect_identifiers = $this->_protect_identifiers;
1221
+ }
1222
+
1223
+ if (is_array($item))
1224
+ {
1225
+ $escaped_array = array();
1226
+
1227
+ foreach($item as $k => $v)
1228
+ {
1229
+ $escaped_array[$this->_protect_identifiers($k)] = $this->_protect_identifiers($v);
1230
+ }
1231
+
1232
+ return $escaped_array;
1233
+ }
1234
+
1235
+ // Convert tabs or multiple spaces into single spaces
1236
+ $item = preg_replace('/[\t ]+/', ' ', $item);
1237
+
1238
+ // If the item has an alias declaration we remove it and set it aside.
1239
+ // Basically we remove everything to the right of the first space
1240
+ $alias = '';
1241
+ if (strpos($item, ' ') !== FALSE)
1242
+ {
1243
+ $alias = strstr($item, " ");
1244
+ $item = substr($item, 0, - strlen($alias));
1245
+ }
1246
+
1247
+ // This is basically a bug fix for queries that use MAX, MIN, etc.
1248
+ // If a parenthesis is found we know that we do not need to
1249
+ // escape the data or add a prefix. There's probably a more graceful
1250
+ // way to deal with this, but I'm not thinking of it -- Rick
1251
+ if (strpos($item, '(') !== FALSE)
1252
+ {
1253
+ return $item.$alias;
1254
+ }
1255
+
1256
+ // Break the string apart if it contains periods, then insert the table prefix
1257
+ // in the correct location, assuming the period doesn't indicate that we're dealing
1258
+ // with an alias. While we're at it, we will escape the components
1259
+ if (strpos($item, '.') !== FALSE)
1260
+ {
1261
+ $parts = explode('.', $item);
1262
+
1263
+ // Does the first segment of the exploded item match
1264
+ // one of the aliases previously identified? If so,
1265
+ // we have nothing more to do other than escape the item
1266
+ if (in_array($parts[0], $this->ar_aliased_tables))
1267
+ {
1268
+ if ($protect_identifiers === TRUE)
1269
+ {
1270
+ foreach ($parts as $key => $val)
1271
+ {
1272
+ if ( ! in_array($val, $this->_reserved_identifiers))
1273
+ {
1274
+ $parts[$key] = $this->_escape_identifiers($val);
1275
+ }
1276
+ }
1277
+
1278
+ $item = implode('.', $parts);
1279
+ }
1280
+ return $item.$alias;
1281
+ }
1282
+
1283
+ // Is there a table prefix defined in the config file? If not, no need to do anything
1284
+ if ($this->dbprefix != '')
1285
+ {
1286
+ // We now add the table prefix based on some logic.
1287
+ // Do we have 4 segments (hostname.database.table.column)?
1288
+ // If so, we add the table prefix to the column name in the 3rd segment.
1289
+ if (isset($parts[3]))
1290
+ {
1291
+ $i = 2;
1292
+ }
1293
+ // Do we have 3 segments (database.table.column)?
1294
+ // If so, we add the table prefix to the column name in 2nd position
1295
+ elseif (isset($parts[2]))
1296
+ {
1297
+ $i = 1;
1298
+ }
1299
+ // Do we have 2 segments (table.column)?
1300
+ // If so, we add the table prefix to the column name in 1st segment
1301
+ else
1302
+ {
1303
+ $i = 0;
1304
+ }
1305
+
1306
+ // This flag is set when the supplied $item does not contain a field name.
1307
+ // This can happen when this function is being called from a JOIN.
1308
+ if ($field_exists == FALSE)
1309
+ {
1310
+ $i++;
1311
+ }
1312
+
1313
+ // Verify table prefix and replace if necessary
1314
+ if ($this->swap_pre != '' && strncmp($parts[$i], $this->swap_pre, strlen($this->swap_pre)) === 0)
1315
+ {
1316
+ $parts[$i] = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $parts[$i]);
1317
+ }
1318
+
1319
+ // We only add the table prefix if it does not already exist
1320
+ if (substr($parts[$i], 0, strlen($this->dbprefix)) != $this->dbprefix)
1321
+ {
1322
+ $parts[$i] = $this->dbprefix.$parts[$i];
1323
+ }
1324
+
1325
+ // Put the parts back together
1326
+ $item = implode('.', $parts);
1327
+ }
1328
+
1329
+ if ($protect_identifiers === TRUE)
1330
+ {
1331
+ $item = $this->_escape_identifiers($item);
1332
+ }
1333
+
1334
+ return $item.$alias;
1335
+ }
1336
+
1337
+ // Is there a table prefix? If not, no need to insert it
1338
+ if ($this->dbprefix != '')
1339
+ {
1340
+ // Verify table prefix and replace if necessary
1341
+ if ($this->swap_pre != '' && strncmp($item, $this->swap_pre, strlen($this->swap_pre)) === 0)
1342
+ {
1343
+ $item = preg_replace("/^".$this->swap_pre."(\S+?)/", $this->dbprefix."\\1", $item);
1344
+ }
1345
+
1346
+ // Do we prefix an item with no segments?
1347
+ if ($prefix_single == TRUE AND substr($item, 0, strlen($this->dbprefix)) != $this->dbprefix)
1348
+ {
1349
+ $item = $this->dbprefix.$item;
1350
+ }
1351
+ }
1352
+
1353
+ if ($protect_identifiers === TRUE AND ! in_array($item, $this->_reserved_identifiers))
1354
+ {
1355
+ $item = $this->_escape_identifiers($item);
1356
+ }
1357
+
1358
+ return $item.$alias;
1359
+ }
1360
+
1361
+
1362
+ }
1363
+
1364
+
1365
+ /* End of file DB_driver.php */
1366
+ /* Location: ./system/database/DB_driver.php */