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,1421 @@
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
+ if ( ! function_exists('xml_parser_create'))
17
+ {
18
+ show_error('Your PHP installation does not support XML');
19
+ }
20
+
21
+
22
+ // ------------------------------------------------------------------------
23
+
24
+ /**
25
+ * XML-RPC request handler class
26
+ *
27
+ * @package CodeIgniter
28
+ * @subpackage Libraries
29
+ * @category XML-RPC
30
+ * @author ExpressionEngine Dev Team
31
+ * @link http://codeigniter.com/user_guide/libraries/xmlrpc.html
32
+ */
33
+ class CI_Xmlrpc {
34
+
35
+ var $debug = FALSE; // Debugging on or off
36
+ var $xmlrpcI4 = 'i4';
37
+ var $xmlrpcInt = 'int';
38
+ var $xmlrpcBoolean = 'boolean';
39
+ var $xmlrpcDouble = 'double';
40
+ var $xmlrpcString = 'string';
41
+ var $xmlrpcDateTime = 'dateTime.iso8601';
42
+ var $xmlrpcBase64 = 'base64';
43
+ var $xmlrpcArray = 'array';
44
+ var $xmlrpcStruct = 'struct';
45
+
46
+ var $xmlrpcTypes = array();
47
+ var $valid_parents = array();
48
+ var $xmlrpcerr = array(); // Response numbers
49
+ var $xmlrpcstr = array(); // Response strings
50
+
51
+ var $xmlrpc_defencoding = 'UTF-8';
52
+ var $xmlrpcName = 'XML-RPC for CodeIgniter';
53
+ var $xmlrpcVersion = '1.1';
54
+ var $xmlrpcerruser = 800; // Start of user errors
55
+ var $xmlrpcerrxml = 100; // Start of XML Parse errors
56
+ var $xmlrpc_backslash = ''; // formulate backslashes for escaping regexp
57
+
58
+ var $client;
59
+ var $method;
60
+ var $data;
61
+ var $message = '';
62
+ var $error = ''; // Error string for request
63
+ var $result;
64
+ var $response = array(); // Response from remote server
65
+
66
+
67
+ //-------------------------------------
68
+ // VALUES THAT MULTIPLE CLASSES NEED
69
+ //-------------------------------------
70
+
71
+ function CI_Xmlrpc ($config = array())
72
+ {
73
+ $this->xmlrpcName = $this->xmlrpcName;
74
+ $this->xmlrpc_backslash = chr(92).chr(92);
75
+
76
+ // Types for info sent back and forth
77
+ $this->xmlrpcTypes = array(
78
+ $this->xmlrpcI4 => '1',
79
+ $this->xmlrpcInt => '1',
80
+ $this->xmlrpcBoolean => '1',
81
+ $this->xmlrpcString => '1',
82
+ $this->xmlrpcDouble => '1',
83
+ $this->xmlrpcDateTime => '1',
84
+ $this->xmlrpcBase64 => '1',
85
+ $this->xmlrpcArray => '2',
86
+ $this->xmlrpcStruct => '3'
87
+ );
88
+
89
+ // Array of Valid Parents for Various XML-RPC elements
90
+ $this->valid_parents = array('BOOLEAN' => array('VALUE'),
91
+ 'I4' => array('VALUE'),
92
+ 'INT' => array('VALUE'),
93
+ 'STRING' => array('VALUE'),
94
+ 'DOUBLE' => array('VALUE'),
95
+ 'DATETIME.ISO8601' => array('VALUE'),
96
+ 'BASE64' => array('VALUE'),
97
+ 'ARRAY' => array('VALUE'),
98
+ 'STRUCT' => array('VALUE'),
99
+ 'PARAM' => array('PARAMS'),
100
+ 'METHODNAME' => array('METHODCALL'),
101
+ 'PARAMS' => array('METHODCALL', 'METHODRESPONSE'),
102
+ 'MEMBER' => array('STRUCT'),
103
+ 'NAME' => array('MEMBER'),
104
+ 'DATA' => array('ARRAY'),
105
+ 'FAULT' => array('METHODRESPONSE'),
106
+ 'VALUE' => array('MEMBER', 'DATA', 'PARAM', 'FAULT')
107
+ );
108
+
109
+
110
+ // XML-RPC Responses
111
+ $this->xmlrpcerr['unknown_method'] = '1';
112
+ $this->xmlrpcstr['unknown_method'] = 'This is not a known method for this XML-RPC Server';
113
+ $this->xmlrpcerr['invalid_return'] = '2';
114
+ $this->xmlrpcstr['invalid_return'] = 'The XML data receieved was either invalid or not in the correct form for XML-RPC. Turn on debugging to examine the XML data further.';
115
+ $this->xmlrpcerr['incorrect_params'] = '3';
116
+ $this->xmlrpcstr['incorrect_params'] = 'Incorrect parameters were passed to method';
117
+ $this->xmlrpcerr['introspect_unknown'] = '4';
118
+ $this->xmlrpcstr['introspect_unknown'] = "Cannot inspect signature for request: method unknown";
119
+ $this->xmlrpcerr['http_error'] = '5';
120
+ $this->xmlrpcstr['http_error'] = "Did not receive a '200 OK' response from remote server.";
121
+ $this->xmlrpcerr['no_data'] = '6';
122
+ $this->xmlrpcstr['no_data'] ='No data received from server.';
123
+
124
+ $this->initialize($config);
125
+
126
+ log_message('debug', "XML-RPC Class Initialized");
127
+ }
128
+
129
+
130
+ //-------------------------------------
131
+ // Initialize Prefs
132
+ //-------------------------------------
133
+
134
+ function initialize($config = array())
135
+ {
136
+ if (count($config) > 0)
137
+ {
138
+ foreach ($config as $key => $val)
139
+ {
140
+ if (isset($this->$key))
141
+ {
142
+ $this->$key = $val;
143
+ }
144
+ }
145
+ }
146
+ }
147
+ // END
148
+
149
+ //-------------------------------------
150
+ // Take URL and parse it
151
+ //-------------------------------------
152
+
153
+ function server($url, $port=80)
154
+ {
155
+ if (substr($url, 0, 4) != "http")
156
+ {
157
+ $url = "http://".$url;
158
+ }
159
+
160
+ $parts = parse_url($url);
161
+
162
+ $path = ( ! isset($parts['path'])) ? '/' : $parts['path'];
163
+
164
+ if (isset($parts['query']) && $parts['query'] != '')
165
+ {
166
+ $path .= '?'.$parts['query'];
167
+ }
168
+
169
+ $this->client = new XML_RPC_Client($path, $parts['host'], $port);
170
+ }
171
+ // END
172
+
173
+ //-------------------------------------
174
+ // Set Timeout
175
+ //-------------------------------------
176
+
177
+ function timeout($seconds=5)
178
+ {
179
+ if ( ! is_null($this->client) && is_int($seconds))
180
+ {
181
+ $this->client->timeout = $seconds;
182
+ }
183
+ }
184
+ // END
185
+
186
+ //-------------------------------------
187
+ // Set Methods
188
+ //-------------------------------------
189
+
190
+ function method($function)
191
+ {
192
+ $this->method = $function;
193
+ }
194
+ // END
195
+
196
+ //-------------------------------------
197
+ // Take Array of Data and Create Objects
198
+ //-------------------------------------
199
+
200
+ function request($incoming)
201
+ {
202
+ if ( ! is_array($incoming))
203
+ {
204
+ // Send Error
205
+ }
206
+
207
+ $this->data = array();
208
+
209
+ foreach($incoming as $key => $value)
210
+ {
211
+ $this->data[$key] = $this->values_parsing($value);
212
+ }
213
+ }
214
+ // END
215
+
216
+
217
+ //-------------------------------------
218
+ // Set Debug
219
+ //-------------------------------------
220
+
221
+ function set_debug($flag = TRUE)
222
+ {
223
+ $this->debug = ($flag == TRUE) ? TRUE : FALSE;
224
+ }
225
+
226
+ //-------------------------------------
227
+ // Values Parsing
228
+ //-------------------------------------
229
+
230
+ function values_parsing($value, $return = FALSE)
231
+ {
232
+ if (is_array($value) && isset($value['0']))
233
+ {
234
+ if ( ! isset($value['1']) OR (! isset($this->xmlrpcTypes[$value['1']])))
235
+ {
236
+ if (is_array($value[0]))
237
+ {
238
+ $temp = new XML_RPC_Values($value['0'], 'array');
239
+ }
240
+ else
241
+ {
242
+ $temp = new XML_RPC_Values($value['0'], 'string');
243
+ }
244
+ }
245
+ elseif(is_array($value['0']) && ($value['1'] == 'struct' OR $value['1'] == 'array'))
246
+ {
247
+ while (list($k) = each($value['0']))
248
+ {
249
+ $value['0'][$k] = $this->values_parsing($value['0'][$k], TRUE);
250
+ }
251
+
252
+ $temp = new XML_RPC_Values($value['0'], $value['1']);
253
+ }
254
+ else
255
+ {
256
+ $temp = new XML_RPC_Values($value['0'], $value['1']);
257
+ }
258
+ }
259
+ else
260
+ {
261
+ $temp = new XML_RPC_Values($value, 'string');
262
+ }
263
+
264
+ return $temp;
265
+ }
266
+ // END
267
+
268
+
269
+ //-------------------------------------
270
+ // Sends XML-RPC Request
271
+ //-------------------------------------
272
+
273
+ function send_request()
274
+ {
275
+ $this->message = new XML_RPC_Message($this->method,$this->data);
276
+ $this->message->debug = $this->debug;
277
+
278
+ if ( ! $this->result = $this->client->send($this->message))
279
+ {
280
+ $this->error = $this->result->errstr;
281
+ return FALSE;
282
+ }
283
+ elseif( ! is_object($this->result->val))
284
+ {
285
+ $this->error = $this->result->errstr;
286
+ return FALSE;
287
+ }
288
+
289
+ $this->response = $this->result->decode();
290
+
291
+ return TRUE;
292
+ }
293
+ // END
294
+
295
+ //-------------------------------------
296
+ // Returns Error
297
+ //-------------------------------------
298
+
299
+ function display_error()
300
+ {
301
+ return $this->error;
302
+ }
303
+ // END
304
+
305
+ //-------------------------------------
306
+ // Returns Remote Server Response
307
+ //-------------------------------------
308
+
309
+ function display_response()
310
+ {
311
+ return $this->response;
312
+ }
313
+ // END
314
+
315
+ //-------------------------------------
316
+ // Sends an Error Message for Server Request
317
+ //-------------------------------------
318
+
319
+ function send_error_message($number, $message)
320
+ {
321
+ return new XML_RPC_Response('0',$number, $message);
322
+ }
323
+ // END
324
+
325
+
326
+ //-------------------------------------
327
+ // Send Response for Server Request
328
+ //-------------------------------------
329
+
330
+ function send_response($response)
331
+ {
332
+ // $response should be array of values, which will be parsed
333
+ // based on their data and type into a valid group of XML-RPC values
334
+
335
+ $response = $this->values_parsing($response);
336
+
337
+ return new XML_RPC_Response($response);
338
+ }
339
+ // END
340
+
341
+ } // END XML_RPC Class
342
+
343
+
344
+
345
+ /**
346
+ * XML-RPC Client class
347
+ *
348
+ * @category XML-RPC
349
+ * @author ExpressionEngine Dev Team
350
+ * @link http://codeigniter.com/user_guide/libraries/xmlrpc.html
351
+ */
352
+ class XML_RPC_Client extends CI_Xmlrpc
353
+ {
354
+ var $path = '';
355
+ var $server = '';
356
+ var $port = 80;
357
+ var $errno = '';
358
+ var $errstring = '';
359
+ var $timeout = 5;
360
+ var $no_multicall = false;
361
+
362
+ function XML_RPC_Client($path, $server, $port=80)
363
+ {
364
+ parent::CI_Xmlrpc();
365
+
366
+ $this->port = $port;
367
+ $this->server = $server;
368
+ $this->path = $path;
369
+ }
370
+
371
+ function send($msg)
372
+ {
373
+ if (is_array($msg))
374
+ {
375
+ // Multi-call disabled
376
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['multicall_recursion'],$this->xmlrpcstr['multicall_recursion']);
377
+ return $r;
378
+ }
379
+
380
+ return $this->sendPayload($msg);
381
+ }
382
+
383
+ function sendPayload($msg)
384
+ {
385
+ $fp = @fsockopen($this->server, $this->port,$this->errno, $this->errstr, $this->timeout);
386
+
387
+ if ( ! is_resource($fp))
388
+ {
389
+ error_log($this->xmlrpcstr['http_error']);
390
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['http_error'],$this->xmlrpcstr['http_error']);
391
+ return $r;
392
+ }
393
+
394
+ if(empty($msg->payload))
395
+ {
396
+ // $msg = XML_RPC_Messages
397
+ $msg->createPayload();
398
+ }
399
+
400
+ $r = "\r\n";
401
+ $op = "POST {$this->path} HTTP/1.0$r";
402
+ $op .= "Host: {$this->server}$r";
403
+ $op .= "Content-Type: text/xml$r";
404
+ $op .= "User-Agent: {$this->xmlrpcName}$r";
405
+ $op .= "Content-Length: ".strlen($msg->payload). "$r$r";
406
+ $op .= $msg->payload;
407
+
408
+
409
+ if ( ! fputs($fp, $op, strlen($op)))
410
+ {
411
+ error_log($this->xmlrpcstr['http_error']);
412
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['http_error'], $this->xmlrpcstr['http_error']);
413
+ return $r;
414
+ }
415
+ $resp = $msg->parseResponse($fp);
416
+ fclose($fp);
417
+ return $resp;
418
+ }
419
+
420
+ } // end class XML_RPC_Client
421
+
422
+
423
+ /**
424
+ * XML-RPC Response class
425
+ *
426
+ * @category XML-RPC
427
+ * @author ExpressionEngine Dev Team
428
+ * @link http://codeigniter.com/user_guide/libraries/xmlrpc.html
429
+ */
430
+ class XML_RPC_Response
431
+ {
432
+ var $val = 0;
433
+ var $errno = 0;
434
+ var $errstr = '';
435
+ var $headers = array();
436
+
437
+ function XML_RPC_Response($val, $code = 0, $fstr = '')
438
+ {
439
+ if ($code != 0)
440
+ {
441
+ // error
442
+ $this->errno = $code;
443
+ $this->errstr = htmlentities($fstr);
444
+ }
445
+ else if ( ! is_object($val))
446
+ {
447
+ // programmer error, not an object
448
+ error_log("Invalid type '" . gettype($val) . "' (value: $val) passed to XML_RPC_Response. Defaulting to empty value.");
449
+ $this->val = new XML_RPC_Values();
450
+ }
451
+ else
452
+ {
453
+ $this->val = $val;
454
+ }
455
+ }
456
+
457
+ function faultCode()
458
+ {
459
+ return $this->errno;
460
+ }
461
+
462
+ function faultString()
463
+ {
464
+ return $this->errstr;
465
+ }
466
+
467
+ function value()
468
+ {
469
+ return $this->val;
470
+ }
471
+
472
+ function prepare_response()
473
+ {
474
+ $result = "<methodResponse>\n";
475
+ if ($this->errno)
476
+ {
477
+ $result .= '<fault>
478
+ <value>
479
+ <struct>
480
+ <member>
481
+ <name>faultCode</name>
482
+ <value><int>' . $this->errno . '</int></value>
483
+ </member>
484
+ <member>
485
+ <name>faultString</name>
486
+ <value><string>' . $this->errstr . '</string></value>
487
+ </member>
488
+ </struct>
489
+ </value>
490
+ </fault>';
491
+ }
492
+ else
493
+ {
494
+ $result .= "<params>\n<param>\n" .
495
+ $this->val->serialize_class() .
496
+ "</param>\n</params>";
497
+ }
498
+ $result .= "\n</methodResponse>";
499
+ return $result;
500
+ }
501
+
502
+ function decode($array=FALSE)
503
+ {
504
+ $CI =& get_instance();
505
+
506
+ if ($array !== FALSE && is_array($array))
507
+ {
508
+ while (list($key) = each($array))
509
+ {
510
+ if (is_array($array[$key]))
511
+ {
512
+ $array[$key] = $this->decode($array[$key]);
513
+ }
514
+ else
515
+ {
516
+ $array[$key] = $CI->input->xss_clean($array[$key]);
517
+ }
518
+ }
519
+
520
+ $result = $array;
521
+ }
522
+ else
523
+ {
524
+ $result = $this->xmlrpc_decoder($this->val);
525
+
526
+ if (is_array($result))
527
+ {
528
+ $result = $this->decode($result);
529
+ }
530
+ else
531
+ {
532
+ $result = $CI->input->xss_clean($result);
533
+ }
534
+ }
535
+
536
+ return $result;
537
+ }
538
+
539
+
540
+
541
+ //-------------------------------------
542
+ // XML-RPC Object to PHP Types
543
+ //-------------------------------------
544
+
545
+ function xmlrpc_decoder($xmlrpc_val)
546
+ {
547
+ $kind = $xmlrpc_val->kindOf();
548
+
549
+ if($kind == 'scalar')
550
+ {
551
+ return $xmlrpc_val->scalarval();
552
+ }
553
+ elseif($kind == 'array')
554
+ {
555
+ reset($xmlrpc_val->me);
556
+ list($a,$b) = each($xmlrpc_val->me);
557
+ $size = count($b);
558
+
559
+ $arr = array();
560
+
561
+ for($i = 0; $i < $size; $i++)
562
+ {
563
+ $arr[] = $this->xmlrpc_decoder($xmlrpc_val->me['array'][$i]);
564
+ }
565
+ return $arr;
566
+ }
567
+ elseif($kind == 'struct')
568
+ {
569
+ reset($xmlrpc_val->me['struct']);
570
+ $arr = array();
571
+
572
+ while(list($key,$value) = each($xmlrpc_val->me['struct']))
573
+ {
574
+ $arr[$key] = $this->xmlrpc_decoder($value);
575
+ }
576
+ return $arr;
577
+ }
578
+ }
579
+
580
+
581
+ //-------------------------------------
582
+ // ISO-8601 time to server or UTC time
583
+ //-------------------------------------
584
+
585
+ function iso8601_decode($time, $utc=0)
586
+ {
587
+ // return a timet in the localtime, or UTC
588
+ $t = 0;
589
+ if (preg_match('/([0-9]{4})([0-9]{2})([0-9]{2})T([0-9]{2}):([0-9]{2}):([0-9]{2})/', $time, $regs))
590
+ {
591
+ if ($utc == 1)
592
+ $t = gmmktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
593
+ else
594
+ $t = mktime($regs[4], $regs[5], $regs[6], $regs[2], $regs[3], $regs[1]);
595
+ }
596
+ return $t;
597
+ }
598
+
599
+ } // End Response Class
600
+
601
+
602
+
603
+ /**
604
+ * XML-RPC Message class
605
+ *
606
+ * @category XML-RPC
607
+ * @author ExpressionEngine Dev Team
608
+ * @link http://codeigniter.com/user_guide/libraries/xmlrpc.html
609
+ */
610
+ class XML_RPC_Message extends CI_Xmlrpc
611
+ {
612
+ var $payload;
613
+ var $method_name;
614
+ var $params = array();
615
+ var $xh = array();
616
+
617
+ function XML_RPC_Message($method, $pars=0)
618
+ {
619
+ parent::CI_Xmlrpc();
620
+
621
+ $this->method_name = $method;
622
+ if (is_array($pars) && count($pars) > 0)
623
+ {
624
+ for($i=0; $i<count($pars); $i++)
625
+ {
626
+ // $pars[$i] = XML_RPC_Values
627
+ $this->params[] = $pars[$i];
628
+ }
629
+ }
630
+ }
631
+
632
+ //-------------------------------------
633
+ // Create Payload to Send
634
+ //-------------------------------------
635
+
636
+ function createPayload()
637
+ {
638
+ $this->payload = "<?xml version=\"1.0\"?".">\r\n<methodCall>\r\n";
639
+ $this->payload .= '<methodName>' . $this->method_name . "</methodName>\r\n";
640
+ $this->payload .= "<params>\r\n";
641
+
642
+ for($i=0; $i<count($this->params); $i++)
643
+ {
644
+ // $p = XML_RPC_Values
645
+ $p = $this->params[$i];
646
+ $this->payload .= "<param>\r\n".$p->serialize_class()."</param>\r\n";
647
+ }
648
+
649
+ $this->payload .= "</params>\r\n</methodCall>\r\n";
650
+ }
651
+
652
+ //-------------------------------------
653
+ // Parse External XML-RPC Server's Response
654
+ //-------------------------------------
655
+
656
+ function parseResponse($fp)
657
+ {
658
+ $data = '';
659
+
660
+ while($datum = fread($fp, 4096))
661
+ {
662
+ $data .= $datum;
663
+ }
664
+
665
+ //-------------------------------------
666
+ // DISPLAY HTTP CONTENT for DEBUGGING
667
+ //-------------------------------------
668
+
669
+ if ($this->debug === TRUE)
670
+ {
671
+ echo "<pre>";
672
+ echo "---DATA---\n" . htmlspecialchars($data) . "\n---END DATA---\n\n";
673
+ echo "</pre>";
674
+ }
675
+
676
+ //-------------------------------------
677
+ // Check for data
678
+ //-------------------------------------
679
+
680
+ if($data == "")
681
+ {
682
+ error_log($this->xmlrpcstr['no_data']);
683
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['no_data'], $this->xmlrpcstr['no_data']);
684
+ return $r;
685
+ }
686
+
687
+
688
+ //-------------------------------------
689
+ // Check for HTTP 200 Response
690
+ //-------------------------------------
691
+
692
+ if (strncmp($data, 'HTTP', 4) == 0 && ! preg_match('/^HTTP\/[0-9\.]+ 200 /', $data))
693
+ {
694
+ $errstr= substr($data, 0, strpos($data, "\n")-1);
695
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['http_error'], $this->xmlrpcstr['http_error']. ' (' . $errstr . ')');
696
+ return $r;
697
+ }
698
+
699
+ //-------------------------------------
700
+ // Create and Set Up XML Parser
701
+ //-------------------------------------
702
+
703
+ $parser = xml_parser_create($this->xmlrpc_defencoding);
704
+
705
+ $this->xh[$parser] = array();
706
+ $this->xh[$parser]['isf'] = 0;
707
+ $this->xh[$parser]['ac'] = '';
708
+ $this->xh[$parser]['headers'] = array();
709
+ $this->xh[$parser]['stack'] = array();
710
+ $this->xh[$parser]['valuestack'] = array();
711
+ $this->xh[$parser]['isf_reason'] = 0;
712
+
713
+ xml_set_object($parser, $this);
714
+ xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, true);
715
+ xml_set_element_handler($parser, 'open_tag', 'closing_tag');
716
+ xml_set_character_data_handler($parser, 'character_data');
717
+ //xml_set_default_handler($parser, 'default_handler');
718
+
719
+
720
+ //-------------------------------------
721
+ // GET HEADERS
722
+ //-------------------------------------
723
+
724
+ $lines = explode("\r\n", $data);
725
+ while (($line = array_shift($lines)))
726
+ {
727
+ if (strlen($line) < 1)
728
+ {
729
+ break;
730
+ }
731
+ $this->xh[$parser]['headers'][] = $line;
732
+ }
733
+ $data = implode("\r\n", $lines);
734
+
735
+
736
+ //-------------------------------------
737
+ // PARSE XML DATA
738
+ //-------------------------------------
739
+
740
+ if ( ! xml_parse($parser, $data, count($data)))
741
+ {
742
+ $errstr = sprintf('XML error: %s at line %d',
743
+ xml_error_string(xml_get_error_code($parser)),
744
+ xml_get_current_line_number($parser));
745
+ //error_log($errstr);
746
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return']);
747
+ xml_parser_free($parser);
748
+ return $r;
749
+ }
750
+ xml_parser_free($parser);
751
+
752
+ // ---------------------------------------
753
+ // Got Ourselves Some Badness, It Seems
754
+ // ---------------------------------------
755
+
756
+ if ($this->xh[$parser]['isf'] > 1)
757
+ {
758
+ if ($this->debug === TRUE)
759
+ {
760
+ echo "---Invalid Return---\n";
761
+ echo $this->xh[$parser]['isf_reason'];
762
+ echo "---Invalid Return---\n\n";
763
+ }
764
+
765
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'],$this->xmlrpcstr['invalid_return'].' '.$this->xh[$parser]['isf_reason']);
766
+ return $r;
767
+ }
768
+ elseif ( ! is_object($this->xh[$parser]['value']))
769
+ {
770
+ $r = new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'],$this->xmlrpcstr['invalid_return'].' '.$this->xh[$parser]['isf_reason']);
771
+ return $r;
772
+ }
773
+
774
+ //-------------------------------------
775
+ // DISPLAY XML CONTENT for DEBUGGING
776
+ //-------------------------------------
777
+
778
+ if ($this->debug === TRUE)
779
+ {
780
+ echo "<pre>";
781
+
782
+ if (count($this->xh[$parser]['headers'] > 0))
783
+ {
784
+ echo "---HEADERS---\n";
785
+ foreach ($this->xh[$parser]['headers'] as $header)
786
+ {
787
+ echo "$header\n";
788
+ }
789
+ echo "---END HEADERS---\n\n";
790
+ }
791
+
792
+ echo "---DATA---\n" . htmlspecialchars($data) . "\n---END DATA---\n\n";
793
+
794
+ echo "---PARSED---\n" ;
795
+ var_dump($this->xh[$parser]['value']);
796
+ echo "\n---END PARSED---</pre>";
797
+ }
798
+
799
+ //-------------------------------------
800
+ // SEND RESPONSE
801
+ //-------------------------------------
802
+
803
+ $v = $this->xh[$parser]['value'];
804
+
805
+ if ($this->xh[$parser]['isf'])
806
+ {
807
+ $errno_v = $v->me['struct']['faultCode'];
808
+ $errstr_v = $v->me['struct']['faultString'];
809
+ $errno = $errno_v->scalarval();
810
+
811
+ if ($errno == 0)
812
+ {
813
+ // FAULT returned, errno needs to reflect that
814
+ $errno = -1;
815
+ }
816
+
817
+ $r = new XML_RPC_Response($v, $errno, $errstr_v->scalarval());
818
+ }
819
+ else
820
+ {
821
+ $r = new XML_RPC_Response($v);
822
+ }
823
+
824
+ $r->headers = $this->xh[$parser]['headers'];
825
+ return $r;
826
+ }
827
+
828
+ // ------------------------------------
829
+ // Begin Return Message Parsing section
830
+ // ------------------------------------
831
+
832
+ // quick explanation of components:
833
+ // ac - used to accumulate values
834
+ // isf - used to indicate a fault
835
+ // lv - used to indicate "looking for a value": implements
836
+ // the logic to allow values with no types to be strings
837
+ // params - used to store parameters in method calls
838
+ // method - used to store method name
839
+ // stack - array with parent tree of the xml element,
840
+ // used to validate the nesting of elements
841
+
842
+ //-------------------------------------
843
+ // Start Element Handler
844
+ //-------------------------------------
845
+
846
+ function open_tag($the_parser, $name, $attrs)
847
+ {
848
+ // If invalid nesting, then return
849
+ if ($this->xh[$the_parser]['isf'] > 1) return;
850
+
851
+ // Evaluate and check for correct nesting of XML elements
852
+
853
+ if (count($this->xh[$the_parser]['stack']) == 0)
854
+ {
855
+ if ($name != 'METHODRESPONSE' && $name != 'METHODCALL')
856
+ {
857
+ $this->xh[$the_parser]['isf'] = 2;
858
+ $this->xh[$the_parser]['isf_reason'] = 'Top level XML-RPC element is missing';
859
+ return;
860
+ }
861
+ }
862
+ else
863
+ {
864
+ // not top level element: see if parent is OK
865
+ if ( ! in_array($this->xh[$the_parser]['stack'][0], $this->valid_parents[$name], TRUE))
866
+ {
867
+ $this->xh[$the_parser]['isf'] = 2;
868
+ $this->xh[$the_parser]['isf_reason'] = "XML-RPC element $name cannot be child of ".$this->xh[$the_parser]['stack'][0];
869
+ return;
870
+ }
871
+ }
872
+
873
+ switch($name)
874
+ {
875
+ case 'STRUCT':
876
+ case 'ARRAY':
877
+ // Creates array for child elements
878
+
879
+ $cur_val = array('value' => array(),
880
+ 'type' => $name);
881
+
882
+ array_unshift($this->xh[$the_parser]['valuestack'], $cur_val);
883
+ break;
884
+ case 'METHODNAME':
885
+ case 'NAME':
886
+ $this->xh[$the_parser]['ac'] = '';
887
+ break;
888
+ case 'FAULT':
889
+ $this->xh[$the_parser]['isf'] = 1;
890
+ break;
891
+ case 'PARAM':
892
+ $this->xh[$the_parser]['value'] = null;
893
+ break;
894
+ case 'VALUE':
895
+ $this->xh[$the_parser]['vt'] = 'value';
896
+ $this->xh[$the_parser]['ac'] = '';
897
+ $this->xh[$the_parser]['lv'] = 1;
898
+ break;
899
+ case 'I4':
900
+ case 'INT':
901
+ case 'STRING':
902
+ case 'BOOLEAN':
903
+ case 'DOUBLE':
904
+ case 'DATETIME.ISO8601':
905
+ case 'BASE64':
906
+ if ($this->xh[$the_parser]['vt'] != 'value')
907
+ {
908
+ //two data elements inside a value: an error occurred!
909
+ $this->xh[$the_parser]['isf'] = 2;
910
+ $this->xh[$the_parser]['isf_reason'] = "'Twas a $name element following a ".$this->xh[$the_parser]['vt']." element inside a single value";
911
+ return;
912
+ }
913
+
914
+ $this->xh[$the_parser]['ac'] = '';
915
+ break;
916
+ case 'MEMBER':
917
+ // Set name of <member> to nothing to prevent errors later if no <name> is found
918
+ $this->xh[$the_parser]['valuestack'][0]['name'] = '';
919
+
920
+ // Set NULL value to check to see if value passed for this param/member
921
+ $this->xh[$the_parser]['value'] = null;
922
+ break;
923
+ case 'DATA':
924
+ case 'METHODCALL':
925
+ case 'METHODRESPONSE':
926
+ case 'PARAMS':
927
+ // valid elements that add little to processing
928
+ break;
929
+ default:
930
+ /// An Invalid Element is Found, so we have trouble
931
+ $this->xh[$the_parser]['isf'] = 2;
932
+ $this->xh[$the_parser]['isf_reason'] = "Invalid XML-RPC element found: $name";
933
+ break;
934
+ }
935
+
936
+ // Add current element name to stack, to allow validation of nesting
937
+ array_unshift($this->xh[$the_parser]['stack'], $name);
938
+
939
+ if ($name != 'VALUE') $this->xh[$the_parser]['lv'] = 0;
940
+ }
941
+ // END
942
+
943
+
944
+ //-------------------------------------
945
+ // End Element Handler
946
+ //-------------------------------------
947
+
948
+ function closing_tag($the_parser, $name)
949
+ {
950
+ if ($this->xh[$the_parser]['isf'] > 1) return;
951
+
952
+ // Remove current element from stack and set variable
953
+ // NOTE: If the XML validates, then we do not have to worry about
954
+ // the opening and closing of elements. Nesting is checked on the opening
955
+ // tag so we be safe there as well.
956
+
957
+ $curr_elem = array_shift($this->xh[$the_parser]['stack']);
958
+
959
+ switch($name)
960
+ {
961
+ case 'STRUCT':
962
+ case 'ARRAY':
963
+ $cur_val = array_shift($this->xh[$the_parser]['valuestack']);
964
+ $this->xh[$the_parser]['value'] = ( ! isset($cur_val['values'])) ? array() : $cur_val['values'];
965
+ $this->xh[$the_parser]['vt'] = strtolower($name);
966
+ break;
967
+ case 'NAME':
968
+ $this->xh[$the_parser]['valuestack'][0]['name'] = $this->xh[$the_parser]['ac'];
969
+ break;
970
+ case 'BOOLEAN':
971
+ case 'I4':
972
+ case 'INT':
973
+ case 'STRING':
974
+ case 'DOUBLE':
975
+ case 'DATETIME.ISO8601':
976
+ case 'BASE64':
977
+ $this->xh[$the_parser]['vt'] = strtolower($name);
978
+
979
+ if ($name == 'STRING')
980
+ {
981
+ $this->xh[$the_parser]['value'] = $this->xh[$the_parser]['ac'];
982
+ }
983
+ elseif ($name=='DATETIME.ISO8601')
984
+ {
985
+ $this->xh[$the_parser]['vt'] = $this->xmlrpcDateTime;
986
+ $this->xh[$the_parser]['value'] = $this->xh[$the_parser]['ac'];
987
+ }
988
+ elseif ($name=='BASE64')
989
+ {
990
+ $this->xh[$the_parser]['value'] = base64_decode($this->xh[$the_parser]['ac']);
991
+ }
992
+ elseif ($name=='BOOLEAN')
993
+ {
994
+ // Translated BOOLEAN values to TRUE AND FALSE
995
+ if ($this->xh[$the_parser]['ac'] == '1')
996
+ {
997
+ $this->xh[$the_parser]['value'] = TRUE;
998
+ }
999
+ else
1000
+ {
1001
+ $this->xh[$the_parser]['value'] = FALSE;
1002
+ }
1003
+ }
1004
+ elseif ($name=='DOUBLE')
1005
+ {
1006
+ // we have a DOUBLE
1007
+ // we must check that only 0123456789-.<space> are characters here
1008
+ if ( ! preg_match('/^[+-]?[eE0-9\t \.]+$/', $this->xh[$the_parser]['ac']))
1009
+ {
1010
+ $this->xh[$the_parser]['value'] = 'ERROR_NON_NUMERIC_FOUND';
1011
+ }
1012
+ else
1013
+ {
1014
+ $this->xh[$the_parser]['value'] = (double)$this->xh[$the_parser]['ac'];
1015
+ }
1016
+ }
1017
+ else
1018
+ {
1019
+ // we have an I4/INT
1020
+ // we must check that only 0123456789-<space> are characters here
1021
+ if ( ! preg_match('/^[+-]?[0-9\t ]+$/', $this->xh[$the_parser]['ac']))
1022
+ {
1023
+ $this->xh[$the_parser]['value'] = 'ERROR_NON_NUMERIC_FOUND';
1024
+ }
1025
+ else
1026
+ {
1027
+ $this->xh[$the_parser]['value'] = (int)$this->xh[$the_parser]['ac'];
1028
+ }
1029
+ }
1030
+ $this->xh[$the_parser]['ac'] = '';
1031
+ $this->xh[$the_parser]['lv'] = 3; // indicate we've found a value
1032
+ break;
1033
+ case 'VALUE':
1034
+ // This if() detects if no scalar was inside <VALUE></VALUE>
1035
+ if ($this->xh[$the_parser]['vt']=='value')
1036
+ {
1037
+ $this->xh[$the_parser]['value'] = $this->xh[$the_parser]['ac'];
1038
+ $this->xh[$the_parser]['vt'] = $this->xmlrpcString;
1039
+ }
1040
+
1041
+ // build the XML-RPC value out of the data received, and substitute it
1042
+ $temp = new XML_RPC_Values($this->xh[$the_parser]['value'], $this->xh[$the_parser]['vt']);
1043
+
1044
+ if (count($this->xh[$the_parser]['valuestack']) && $this->xh[$the_parser]['valuestack'][0]['type'] == 'ARRAY')
1045
+ {
1046
+ // Array
1047
+ $this->xh[$the_parser]['valuestack'][0]['values'][] = $temp;
1048
+ }
1049
+ else
1050
+ {
1051
+ // Struct
1052
+ $this->xh[$the_parser]['value'] = $temp;
1053
+ }
1054
+ break;
1055
+ case 'MEMBER':
1056
+ $this->xh[$the_parser]['ac']='';
1057
+
1058
+ // If value add to array in the stack for the last element built
1059
+ if ($this->xh[$the_parser]['value'])
1060
+ {
1061
+ $this->xh[$the_parser]['valuestack'][0]['values'][$this->xh[$the_parser]['valuestack'][0]['name']] = $this->xh[$the_parser]['value'];
1062
+ }
1063
+ break;
1064
+ case 'DATA':
1065
+ $this->xh[$the_parser]['ac']='';
1066
+ break;
1067
+ case 'PARAM':
1068
+ if ($this->xh[$the_parser]['value'])
1069
+ {
1070
+ $this->xh[$the_parser]['params'][] = $this->xh[$the_parser]['value'];
1071
+ }
1072
+ break;
1073
+ case 'METHODNAME':
1074
+ $this->xh[$the_parser]['method'] = ltrim($this->xh[$the_parser]['ac']);
1075
+ break;
1076
+ case 'PARAMS':
1077
+ case 'FAULT':
1078
+ case 'METHODCALL':
1079
+ case 'METHORESPONSE':
1080
+ // We're all good kids with nuthin' to do
1081
+ break;
1082
+ default:
1083
+ // End of an Invalid Element. Taken care of during the opening tag though
1084
+ break;
1085
+ }
1086
+ }
1087
+
1088
+ //-------------------------------------
1089
+ // Parses Character Data
1090
+ //-------------------------------------
1091
+
1092
+ function character_data($the_parser, $data)
1093
+ {
1094
+ if ($this->xh[$the_parser]['isf'] > 1) return; // XML Fault found already
1095
+
1096
+ // If a value has not been found
1097
+ if ($this->xh[$the_parser]['lv'] != 3)
1098
+ {
1099
+ if ($this->xh[$the_parser]['lv'] == 1)
1100
+ {
1101
+ $this->xh[$the_parser]['lv'] = 2; // Found a value
1102
+ }
1103
+
1104
+ if( ! @isset($this->xh[$the_parser]['ac']))
1105
+ {
1106
+ $this->xh[$the_parser]['ac'] = '';
1107
+ }
1108
+
1109
+ $this->xh[$the_parser]['ac'] .= $data;
1110
+ }
1111
+ }
1112
+
1113
+
1114
+ function addParam($par) { $this->params[]=$par; }
1115
+
1116
+ function output_parameters($array=FALSE)
1117
+ {
1118
+ $CI =& get_instance();
1119
+
1120
+ if ($array !== FALSE && is_array($array))
1121
+ {
1122
+ while (list($key) = each($array))
1123
+ {
1124
+ if (is_array($array[$key]))
1125
+ {
1126
+ $array[$key] = $this->output_parameters($array[$key]);
1127
+ }
1128
+ else
1129
+ {
1130
+ $array[$key] = $CI->input->xss_clean($array[$key]);
1131
+ }
1132
+ }
1133
+
1134
+ $parameters = $array;
1135
+ }
1136
+ else
1137
+ {
1138
+ $parameters = array();
1139
+
1140
+ for ($i = 0; $i < count($this->params); $i++)
1141
+ {
1142
+ $a_param = $this->decode_message($this->params[$i]);
1143
+
1144
+ if (is_array($a_param))
1145
+ {
1146
+ $parameters[] = $this->output_parameters($a_param);
1147
+ }
1148
+ else
1149
+ {
1150
+ $parameters[] = $CI->input->xss_clean($a_param);
1151
+ }
1152
+ }
1153
+ }
1154
+
1155
+ return $parameters;
1156
+ }
1157
+
1158
+
1159
+ function decode_message($param)
1160
+ {
1161
+ $kind = $param->kindOf();
1162
+
1163
+ if($kind == 'scalar')
1164
+ {
1165
+ return $param->scalarval();
1166
+ }
1167
+ elseif($kind == 'array')
1168
+ {
1169
+ reset($param->me);
1170
+ list($a,$b) = each($param->me);
1171
+
1172
+ $arr = array();
1173
+
1174
+ for($i = 0; $i < count($b); $i++)
1175
+ {
1176
+ $arr[] = $this->decode_message($param->me['array'][$i]);
1177
+ }
1178
+
1179
+ return $arr;
1180
+ }
1181
+ elseif($kind == 'struct')
1182
+ {
1183
+ reset($param->me['struct']);
1184
+
1185
+ $arr = array();
1186
+
1187
+ while(list($key,$value) = each($param->me['struct']))
1188
+ {
1189
+ $arr[$key] = $this->decode_message($value);
1190
+ }
1191
+
1192
+ return $arr;
1193
+ }
1194
+ }
1195
+
1196
+ } // End XML_RPC_Messages class
1197
+
1198
+
1199
+
1200
+ /**
1201
+ * XML-RPC Values class
1202
+ *
1203
+ * @category XML-RPC
1204
+ * @author ExpressionEngine Dev Team
1205
+ * @link http://codeigniter.com/user_guide/libraries/xmlrpc.html
1206
+ */
1207
+ class XML_RPC_Values extends CI_Xmlrpc
1208
+ {
1209
+ var $me = array();
1210
+ var $mytype = 0;
1211
+
1212
+ function XML_RPC_Values($val=-1, $type='')
1213
+ {
1214
+ parent::CI_Xmlrpc();
1215
+
1216
+ if ($val != -1 OR $type != '')
1217
+ {
1218
+ $type = $type == '' ? 'string' : $type;
1219
+
1220
+ if ($this->xmlrpcTypes[$type] == 1)
1221
+ {
1222
+ $this->addScalar($val,$type);
1223
+ }
1224
+ elseif ($this->xmlrpcTypes[$type] == 2)
1225
+ {
1226
+ $this->addArray($val);
1227
+ }
1228
+ elseif ($this->xmlrpcTypes[$type] == 3)
1229
+ {
1230
+ $this->addStruct($val);
1231
+ }
1232
+ }
1233
+ }
1234
+
1235
+ function addScalar($val, $type='string')
1236
+ {
1237
+ $typeof = $this->xmlrpcTypes[$type];
1238
+
1239
+ if ($this->mytype==1)
1240
+ {
1241
+ echo '<strong>XML_RPC_Values</strong>: scalar can have only one value<br />';
1242
+ return 0;
1243
+ }
1244
+
1245
+ if ($typeof != 1)
1246
+ {
1247
+ echo '<strong>XML_RPC_Values</strong>: not a scalar type (${typeof})<br />';
1248
+ return 0;
1249
+ }
1250
+
1251
+ if ($type == $this->xmlrpcBoolean)
1252
+ {
1253
+ if (strcasecmp($val,'true')==0 OR $val==1 OR ($val==true && strcasecmp($val,'false')))
1254
+ {
1255
+ $val = 1;
1256
+ }
1257
+ else
1258
+ {
1259
+ $val=0;
1260
+ }
1261
+ }
1262
+
1263
+ if ($this->mytype == 2)
1264
+ {
1265
+ // adding to an array here
1266
+ $ar = $this->me['array'];
1267
+ $ar[] = new XML_RPC_Values($val, $type);
1268
+ $this->me['array'] = $ar;
1269
+ }
1270
+ else
1271
+ {
1272
+ // a scalar, so set the value and remember we're scalar
1273
+ $this->me[$type] = $val;
1274
+ $this->mytype = $typeof;
1275
+ }
1276
+ return 1;
1277
+ }
1278
+
1279
+ function addArray($vals)
1280
+ {
1281
+ if ($this->mytype != 0)
1282
+ {
1283
+ echo '<strong>XML_RPC_Values</strong>: already initialized as a [' . $this->kindOf() . ']<br />';
1284
+ return 0;
1285
+ }
1286
+
1287
+ $this->mytype = $this->xmlrpcTypes['array'];
1288
+ $this->me['array'] = $vals;
1289
+ return 1;
1290
+ }
1291
+
1292
+ function addStruct($vals)
1293
+ {
1294
+ if ($this->mytype != 0)
1295
+ {
1296
+ echo '<strong>XML_RPC_Values</strong>: already initialized as a [' . $this->kindOf() . ']<br />';
1297
+ return 0;
1298
+ }
1299
+ $this->mytype = $this->xmlrpcTypes['struct'];
1300
+ $this->me['struct'] = $vals;
1301
+ return 1;
1302
+ }
1303
+
1304
+ function kindOf()
1305
+ {
1306
+ switch($this->mytype)
1307
+ {
1308
+ case 3:
1309
+ return 'struct';
1310
+ break;
1311
+ case 2:
1312
+ return 'array';
1313
+ break;
1314
+ case 1:
1315
+ return 'scalar';
1316
+ break;
1317
+ default:
1318
+ return 'undef';
1319
+ }
1320
+ }
1321
+
1322
+ function serializedata($typ, $val)
1323
+ {
1324
+ $rs = '';
1325
+
1326
+ switch($this->xmlrpcTypes[$typ])
1327
+ {
1328
+ case 3:
1329
+ // struct
1330
+ $rs .= "<struct>\n";
1331
+ reset($val);
1332
+ while(list($key2, $val2) = each($val))
1333
+ {
1334
+ $rs .= "<member>\n<name>{$key2}</name>\n";
1335
+ $rs .= $this->serializeval($val2);
1336
+ $rs .= "</member>\n";
1337
+ }
1338
+ $rs .= '</struct>';
1339
+ break;
1340
+ case 2:
1341
+ // array
1342
+ $rs .= "<array>\n<data>\n";
1343
+ for($i=0; $i < count($val); $i++)
1344
+ {
1345
+ $rs .= $this->serializeval($val[$i]);
1346
+ }
1347
+ $rs.="</data>\n</array>\n";
1348
+ break;
1349
+ case 1:
1350
+ // others
1351
+ switch ($typ)
1352
+ {
1353
+ case $this->xmlrpcBase64:
1354
+ $rs .= "<{$typ}>" . base64_encode((string)$val) . "</{$typ}>\n";
1355
+ break;
1356
+ case $this->xmlrpcBoolean:
1357
+ $rs .= "<{$typ}>" . ((bool)$val ? '1' : '0') . "</{$typ}>\n";
1358
+ break;
1359
+ case $this->xmlrpcString:
1360
+ $rs .= "<{$typ}>" . htmlspecialchars((string)$val). "</{$typ}>\n";
1361
+ break;
1362
+ default:
1363
+ $rs .= "<{$typ}>{$val}</{$typ}>\n";
1364
+ break;
1365
+ }
1366
+ default:
1367
+ break;
1368
+ }
1369
+ return $rs;
1370
+ }
1371
+
1372
+ function serialize_class()
1373
+ {
1374
+ return $this->serializeval($this);
1375
+ }
1376
+
1377
+ function serializeval($o)
1378
+ {
1379
+ $ar = $o->me;
1380
+ reset($ar);
1381
+
1382
+ list($typ, $val) = each($ar);
1383
+ $rs = "<value>\n".$this->serializedata($typ, $val)."</value>\n";
1384
+ return $rs;
1385
+ }
1386
+
1387
+ function scalarval()
1388
+ {
1389
+ reset($this->me);
1390
+ list($a,$b) = each($this->me);
1391
+ return $b;
1392
+ }
1393
+
1394
+
1395
+ //-------------------------------------
1396
+ // Encode time in ISO-8601 form.
1397
+ //-------------------------------------
1398
+
1399
+ // Useful for sending time in XML-RPC
1400
+
1401
+ function iso8601_encode($time, $utc=0)
1402
+ {
1403
+ if ($utc == 1)
1404
+ {
1405
+ $t = strftime("%Y%m%dT%H:%M:%S", $time);
1406
+ }
1407
+ else
1408
+ {
1409
+ if (function_exists('gmstrftime'))
1410
+ $t = gmstrftime("%Y%m%dT%H:%M:%S", $time);
1411
+ else
1412
+ $t = strftime("%Y%m%dT%H:%M:%S", $time - date('Z'));
1413
+ }
1414
+ return $t;
1415
+ }
1416
+
1417
+ }
1418
+ // END XML_RPC_Values Class
1419
+
1420
+ /* End of file Xmlrpc.php */
1421
+ /* Location: ./system/libraries/Xmlrpc.php */