powerdlz23 1.1.7 → 1.1.9

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 (1035) hide show
  1. package/package.json +1 -1
  2. package/pto/TikTok-Downloader-Bot/Dockerfile +6 -0
  3. package/pto/TikTok-Downloader-Bot/LICENSE +21 -0
  4. package/pto/TikTok-Downloader-Bot/Procfile +1 -0
  5. package/pto/TikTok-Downloader-Bot/README.md +59 -0
  6. package/pto/TikTok-Downloader-Bot/app.json +40 -0
  7. package/pto/TikTok-Downloader-Bot/docker-compose.yml +11 -0
  8. package/pto/TikTok-Downloader-Bot/main.py +131 -0
  9. package/pto/TikTok-Downloader-Bot/progress_bar.py +63 -0
  10. package/pto/TikTok-Downloader-Bot/requirements.txt +6 -0
  11. package/pto/TikTok-Downloader-Bot/runtime.txt +1 -0
  12. package/pto/yaamp/README.md +70 -0
  13. package/pto/yaamp/blocknotify/blocknotify.cpp +90 -0
  14. package/pto/yaamp/config/blake.conf +16 -0
  15. package/pto/yaamp/config/fresh.conf +16 -0
  16. package/pto/yaamp/config/groestl.conf +16 -0
  17. package/pto/yaamp/config/keccak.conf +16 -0
  18. package/pto/yaamp/config/lyra2.conf +16 -0
  19. package/pto/yaamp/config/neo.conf +16 -0
  20. package/pto/yaamp/config/nist5.conf +16 -0
  21. package/pto/yaamp/config/quark.conf +16 -0
  22. package/pto/yaamp/config/qubit.conf +16 -0
  23. package/pto/yaamp/config/run.sh +12 -0
  24. package/pto/yaamp/config/scrypt.conf +16 -0
  25. package/pto/yaamp/config/scryptn.conf +16 -0
  26. package/pto/yaamp/config/sha.conf +17 -0
  27. package/pto/yaamp/config/skein.conf +16 -0
  28. package/pto/yaamp/config/x11.conf +16 -0
  29. package/pto/yaamp/config/x13.conf +16 -0
  30. package/pto/yaamp/config/x14.conf +16 -0
  31. package/pto/yaamp/config/x15.conf +16 -0
  32. package/pto/yaamp/rc.local +30 -0
  33. package/pto/yaamp/stratum/algos/Lyra2.c +208 -0
  34. package/pto/yaamp/stratum/algos/Lyra2.h +50 -0
  35. package/pto/yaamp/stratum/algos/Lyra2RE.c +70 -0
  36. package/pto/yaamp/stratum/algos/Lyra2RE.h +16 -0
  37. package/pto/yaamp/stratum/algos/Sponge.c +745 -0
  38. package/pto/yaamp/stratum/algos/Sponge.h +115 -0
  39. package/pto/yaamp/stratum/algos/blake.c +16 -0
  40. package/pto/yaamp/stratum/algos/blake.h +16 -0
  41. package/pto/yaamp/stratum/algos/fresh.c +44 -0
  42. package/pto/yaamp/stratum/algos/fresh.h +16 -0
  43. package/pto/yaamp/stratum/algos/groestl.c +41 -0
  44. package/pto/yaamp/stratum/algos/groestl.h +18 -0
  45. package/pto/yaamp/stratum/algos/jha.c +135 -0
  46. package/pto/yaamp/stratum/algos/jha.h +16 -0
  47. package/pto/yaamp/stratum/algos/keccak.c +32 -0
  48. package/pto/yaamp/stratum/algos/keccak.h +16 -0
  49. package/pto/yaamp/stratum/algos/makefile +32 -0
  50. package/pto/yaamp/stratum/algos/neoscrypt.c +962 -0
  51. package/pto/yaamp/stratum/algos/neoscrypt.h +33 -0
  52. package/pto/yaamp/stratum/algos/nist5.c +47 -0
  53. package/pto/yaamp/stratum/algos/nist5.h +16 -0
  54. package/pto/yaamp/stratum/algos/quark.c +210 -0
  55. package/pto/yaamp/stratum/algos/quark.h +16 -0
  56. package/pto/yaamp/stratum/algos/qubit.c +44 -0
  57. package/pto/yaamp/stratum/algos/qubit.h +17 -0
  58. package/pto/yaamp/stratum/algos/scrypt.c +681 -0
  59. package/pto/yaamp/stratum/algos/scryptn.c +257 -0
  60. package/pto/yaamp/stratum/algos/scryptn.h +16 -0
  61. package/pto/yaamp/stratum/algos/sha256.c +287 -0
  62. package/pto/yaamp/stratum/algos/sha256.h +440 -0
  63. package/pto/yaamp/stratum/algos/skein.c +27 -0
  64. package/pto/yaamp/stratum/algos/skein.h +16 -0
  65. package/pto/yaamp/stratum/algos/whirlpoolx.c +44 -0
  66. package/pto/yaamp/stratum/algos/whirlpoolx.h +16 -0
  67. package/pto/yaamp/stratum/algos/x11.c +85 -0
  68. package/pto/yaamp/stratum/algos/x11.h +16 -0
  69. package/pto/yaamp/stratum/algos/x13.c +98 -0
  70. package/pto/yaamp/stratum/algos/x13.h +16 -0
  71. package/pto/yaamp/stratum/algos/x14.c +102 -0
  72. package/pto/yaamp/stratum/algos/x14.h +16 -0
  73. package/pto/yaamp/stratum/algos/x15.c +106 -0
  74. package/pto/yaamp/stratum/algos/x15.h +16 -0
  75. package/pto/yaamp/stratum/algos/zr5.c +104 -0
  76. package/pto/yaamp/stratum/algos/zr5.h +17 -0
  77. package/pto/yaamp/stratum/base58.cpp +99 -0
  78. package/pto/yaamp/stratum/client.cpp +432 -0
  79. package/pto/yaamp/stratum/client.h +142 -0
  80. package/pto/yaamp/stratum/client_core.cpp +312 -0
  81. package/pto/yaamp/stratum/client_difficulty.cpp +105 -0
  82. package/pto/yaamp/stratum/client_submit.cpp +304 -0
  83. package/pto/yaamp/stratum/coinbase.cpp +139 -0
  84. package/pto/yaamp/stratum/coind.cpp +188 -0
  85. package/pto/yaamp/stratum/coind.h +97 -0
  86. package/pto/yaamp/stratum/coind_aux.cpp +107 -0
  87. package/pto/yaamp/stratum/coind_submit.cpp +113 -0
  88. package/pto/yaamp/stratum/coind_template.cpp +309 -0
  89. package/pto/yaamp/stratum/db.cpp +418 -0
  90. package/pto/yaamp/stratum/db.h +32 -0
  91. package/pto/yaamp/stratum/iniparser/AUTHORS +6 -0
  92. package/pto/yaamp/stratum/iniparser/INSTALL +15 -0
  93. package/pto/yaamp/stratum/iniparser/LICENSE +21 -0
  94. package/pto/yaamp/stratum/iniparser/Makefile +72 -0
  95. package/pto/yaamp/stratum/iniparser/README +12 -0
  96. package/pto/yaamp/stratum/iniparser/doc/Makefile +16 -0
  97. package/pto/yaamp/stratum/iniparser/doc/iniparser.dox +81 -0
  98. package/pto/yaamp/stratum/iniparser/doc/iniparser.main +207 -0
  99. package/pto/yaamp/stratum/iniparser/html/doxygen.css +545 -0
  100. package/pto/yaamp/stratum/iniparser/html/doxygen.png +0 -0
  101. package/pto/yaamp/stratum/iniparser/html/globals_func.html +64 -0
  102. package/pto/yaamp/stratum/iniparser/html/index.html +101 -0
  103. package/pto/yaamp/stratum/iniparser/html/iniparser_8h.html +583 -0
  104. package/pto/yaamp/stratum/iniparser/html/iniparser_8main.html +19 -0
  105. package/pto/yaamp/stratum/iniparser/html/tab_b.gif +0 -0
  106. package/pto/yaamp/stratum/iniparser/html/tab_l.gif +0 -0
  107. package/pto/yaamp/stratum/iniparser/html/tab_r.gif +0 -0
  108. package/pto/yaamp/stratum/iniparser/html/tabs.css +105 -0
  109. package/pto/yaamp/stratum/iniparser/src/dictionary.c +402 -0
  110. package/pto/yaamp/stratum/iniparser/src/dictionary.h +185 -0
  111. package/pto/yaamp/stratum/iniparser/src/iniparser.c +904 -0
  112. package/pto/yaamp/stratum/iniparser/src/iniparser.h +315 -0
  113. package/pto/yaamp/stratum/iniparser/test/Makefile +27 -0
  114. package/pto/yaamp/stratum/iniparser/test/iniexample.c +100 -0
  115. package/pto/yaamp/stratum/iniparser/test/parse.c +24 -0
  116. package/pto/yaamp/stratum/iniparser/test/twisted-errors.ini +9 -0
  117. package/pto/yaamp/stratum/iniparser/test/twisted-genhuge.py +12 -0
  118. package/pto/yaamp/stratum/iniparser/test/twisted-ofkey.ini +66 -0
  119. package/pto/yaamp/stratum/iniparser/test/twisted-ofval.ini +56 -0
  120. package/pto/yaamp/stratum/iniparser/test/twisted.ini +131 -0
  121. package/pto/yaamp/stratum/job.cpp +324 -0
  122. package/pto/yaamp/stratum/job.h +120 -0
  123. package/pto/yaamp/stratum/job_core.cpp +132 -0
  124. package/pto/yaamp/stratum/job_send.cpp +162 -0
  125. package/pto/yaamp/stratum/json.cpp +980 -0
  126. package/pto/yaamp/stratum/json.h +271 -0
  127. package/pto/yaamp/stratum/list.cpp +165 -0
  128. package/pto/yaamp/stratum/makefile +53 -0
  129. package/pto/yaamp/stratum/merkle.cpp +86 -0
  130. package/pto/yaamp/stratum/object.cpp +73 -0
  131. package/pto/yaamp/stratum/object.h +25 -0
  132. package/pto/yaamp/stratum/remote.cpp +301 -0
  133. package/pto/yaamp/stratum/remote.h +96 -0
  134. package/pto/yaamp/stratum/remote_template.cpp +138 -0
  135. package/pto/yaamp/stratum/rpc.cpp +270 -0
  136. package/pto/yaamp/stratum/rpc.h +32 -0
  137. package/pto/yaamp/stratum/sha3/aes_helper.c +392 -0
  138. package/pto/yaamp/stratum/sha3/hamsi_helper.c +39648 -0
  139. package/pto/yaamp/stratum/sha3/libhash.a +0 -0
  140. package/pto/yaamp/stratum/sha3/makefile +34 -0
  141. package/pto/yaamp/stratum/sha3/md_helper.c +347 -0
  142. package/pto/yaamp/stratum/sha3/sph_blake.c +1127 -0
  143. package/pto/yaamp/stratum/sha3/sph_blake.h +327 -0
  144. package/pto/yaamp/stratum/sha3/sph_bmw.c +965 -0
  145. package/pto/yaamp/stratum/sha3/sph_bmw.h +328 -0
  146. package/pto/yaamp/stratum/sha3/sph_cubehash.c +723 -0
  147. package/pto/yaamp/stratum/sha3/sph_cubehash.h +292 -0
  148. package/pto/yaamp/stratum/sha3/sph_echo.c +1031 -0
  149. package/pto/yaamp/stratum/sha3/sph_echo.h +320 -0
  150. package/pto/yaamp/stratum/sha3/sph_fugue.c +1208 -0
  151. package/pto/yaamp/stratum/sha3/sph_fugue.h +81 -0
  152. package/pto/yaamp/stratum/sha3/sph_groestl.c +3119 -0
  153. package/pto/yaamp/stratum/sha3/sph_groestl.h +329 -0
  154. package/pto/yaamp/stratum/sha3/sph_hamsi.c +867 -0
  155. package/pto/yaamp/stratum/sha3/sph_hamsi.h +322 -0
  156. package/pto/yaamp/stratum/sha3/sph_hefty1.c +378 -0
  157. package/pto/yaamp/stratum/sha3/sph_hefty1.h +66 -0
  158. package/pto/yaamp/stratum/sha3/sph_jh.c +1116 -0
  159. package/pto/yaamp/stratum/sha3/sph_jh.h +298 -0
  160. package/pto/yaamp/stratum/sha3/sph_keccak.c +1824 -0
  161. package/pto/yaamp/stratum/sha3/sph_keccak.h +293 -0
  162. package/pto/yaamp/stratum/sha3/sph_luffa.c +1426 -0
  163. package/pto/yaamp/stratum/sha3/sph_luffa.h +296 -0
  164. package/pto/yaamp/stratum/sha3/sph_shabal.c +806 -0
  165. package/pto/yaamp/stratum/sha3/sph_shabal.h +344 -0
  166. package/pto/yaamp/stratum/sha3/sph_shavite.c +1764 -0
  167. package/pto/yaamp/stratum/sha3/sph_shavite.h +314 -0
  168. package/pto/yaamp/stratum/sha3/sph_simd.c +1799 -0
  169. package/pto/yaamp/stratum/sha3/sph_simd.h +309 -0
  170. package/pto/yaamp/stratum/sha3/sph_skein.c +1254 -0
  171. package/pto/yaamp/stratum/sha3/sph_skein.h +298 -0
  172. package/pto/yaamp/stratum/sha3/sph_types.h +1976 -0
  173. package/pto/yaamp/stratum/sha3/sph_whirlpool.c +3480 -0
  174. package/pto/yaamp/stratum/sha3/sph_whirlpool.h +209 -0
  175. package/pto/yaamp/stratum/share.cpp +279 -0
  176. package/pto/yaamp/stratum/share.h +106 -0
  177. package/pto/yaamp/stratum/socket.cpp +159 -0
  178. package/pto/yaamp/stratum/socket.h +28 -0
  179. package/pto/yaamp/stratum/stratum.cpp +321 -0
  180. package/pto/yaamp/stratum/stratum.h +141 -0
  181. package/pto/yaamp/stratum/user.cpp +104 -0
  182. package/pto/yaamp/stratum/util.cpp +666 -0
  183. package/pto/yaamp/stratum/util.h +127 -0
  184. package/pto/yaamp/web/.project +22 -0
  185. package/pto/yaamp/web/blocks.sh +10 -0
  186. package/pto/yaamp/web/extensions/jqplot/MIT-LICENSE.txt +21 -0
  187. package/pto/yaamp/web/extensions/jqplot/README.txt +77 -0
  188. package/pto/yaamp/web/extensions/jqplot/changes.txt +458 -0
  189. package/pto/yaamp/web/extensions/jqplot/copyright.txt +56 -0
  190. package/pto/yaamp/web/extensions/jqplot/excanvas.js +1438 -0
  191. package/pto/yaamp/web/extensions/jqplot/excanvas.min.js +3 -0
  192. package/pto/yaamp/web/extensions/jqplot/gpl-2.0.txt +280 -0
  193. package/pto/yaamp/web/extensions/jqplot/jqPlotCssStyling.txt +53 -0
  194. package/pto/yaamp/web/extensions/jqplot/jqPlotOptions.txt +391 -0
  195. package/pto/yaamp/web/extensions/jqplot/jquery.jqplot.css +259 -0
  196. package/pto/yaamp/web/extensions/jqplot/jquery.jqplot.js +11411 -0
  197. package/pto/yaamp/web/extensions/jqplot/jquery.jqplot.min.css +1 -0
  198. package/pto/yaamp/web/extensions/jqplot/jquery.jqplot.min.js +3 -0
  199. package/pto/yaamp/web/extensions/jqplot/optionsTutorial.txt +243 -0
  200. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.js +314 -0
  201. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.BezierCurveRenderer.min.js +3 -0
  202. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.barRenderer.js +801 -0
  203. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.barRenderer.min.js +3 -0
  204. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.blockRenderer.js +235 -0
  205. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.blockRenderer.min.js +3 -0
  206. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.bubbleRenderer.js +759 -0
  207. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.bubbleRenderer.min.js +3 -0
  208. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasAxisLabelRenderer.js +203 -0
  209. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasAxisLabelRenderer.min.js +3 -0
  210. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasAxisTickRenderer.js +253 -0
  211. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasAxisTickRenderer.min.js +3 -0
  212. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasOverlay.js +1021 -0
  213. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasOverlay.min.js +3 -0
  214. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasTextRenderer.js +449 -0
  215. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.canvasTextRenderer.min.js +3 -0
  216. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.categoryAxisRenderer.js +679 -0
  217. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.categoryAxisRenderer.min.js +3 -0
  218. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.ciParser.js +116 -0
  219. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.ciParser.min.js +3 -0
  220. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.cursor.js +1108 -0
  221. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.cursor.min.js +3 -0
  222. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.dateAxisRenderer.js +741 -0
  223. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.dateAxisRenderer.min.js +3 -0
  224. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.donutRenderer.js +805 -0
  225. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.donutRenderer.min.js +3 -0
  226. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.dragable.js +225 -0
  227. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.dragable.min.js +3 -0
  228. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.enhancedLegendRenderer.js +305 -0
  229. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.enhancedLegendRenderer.min.js +3 -0
  230. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.funnelRenderer.js +943 -0
  231. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.funnelRenderer.min.js +3 -0
  232. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.highlighter.js +465 -0
  233. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.highlighter.min.js +3 -0
  234. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.json2.js +475 -0
  235. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.json2.min.js +3 -0
  236. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.logAxisRenderer.js +534 -0
  237. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.logAxisRenderer.min.js +3 -0
  238. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mekkoAxisRenderer.js +611 -0
  239. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mekkoAxisRenderer.min.js +3 -0
  240. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mekkoRenderer.js +437 -0
  241. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mekkoRenderer.min.js +3 -0
  242. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.meterGaugeRenderer.js +1029 -0
  243. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.meterGaugeRenderer.min.js +3 -0
  244. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mobile.js +45 -0
  245. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.mobile.min.js +3 -0
  246. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.ohlcRenderer.js +373 -0
  247. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.ohlcRenderer.min.js +3 -0
  248. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pieRenderer.js +904 -0
  249. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pieRenderer.min.js +3 -0
  250. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pointLabels.js +377 -0
  251. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pointLabels.min.js +3 -0
  252. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidAxisRenderer.js +728 -0
  253. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidAxisRenderer.min.js +3 -0
  254. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidGridRenderer.js +429 -0
  255. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidGridRenderer.min.js +3 -0
  256. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidRenderer.js +514 -0
  257. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.pyramidRenderer.min.js +3 -0
  258. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.trendline.js +223 -0
  259. package/pto/yaamp/web/extensions/jqplot/plugins/jqplot.trendline.min.js +3 -0
  260. package/pto/yaamp/web/extensions/jqplot/usage.txt +126 -0
  261. package/pto/yaamp/web/extensions/jquery/js/jquery-1.10.2.min.js +6 -0
  262. package/pto/yaamp/web/extensions/jquery/js/jquery-1.8.3-dev.js +9472 -0
  263. package/pto/yaamp/web/extensions/jquery/js/jquery-ui-1.10.3.custom.min.js +7 -0
  264. package/pto/yaamp/web/extensions/jquery/js/jquery-ui-1.9.1.custom.min.js +6 -0
  265. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/animated-overlay.gif +0 -0
  266. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  267. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  268. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  269. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  270. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  271. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  272. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  273. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  274. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  275. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  276. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  277. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  278. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  279. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  280. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery-ui.css +1178 -0
  281. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.accordion.css +38 -0
  282. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.all.css +12 -0
  283. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.autocomplete.css +16 -0
  284. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.base.css +25 -0
  285. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.button.css +114 -0
  286. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.core.css +93 -0
  287. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.datepicker.css +178 -0
  288. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.dialog.css +69 -0
  289. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.menu.css +79 -0
  290. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.progressbar.css +28 -0
  291. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.resizable.css +78 -0
  292. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.selectable.css +15 -0
  293. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.slider.css +73 -0
  294. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.spinner.css +65 -0
  295. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.tabs.css +52 -0
  296. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.theme.css +406 -0
  297. package/pto/yaamp/web/extensions/jquery/themes/ui-lightness/jquery.ui.tooltip.css +19 -0
  298. package/pto/yaamp/web/favicon.ico +0 -0
  299. package/pto/yaamp/web/framework-1.0.8/.htaccess +1 -0
  300. package/pto/yaamp/web/framework-1.0.8/YiiBase.php +684 -0
  301. package/pto/yaamp/web/framework-1.0.8/base/CApplication.php +718 -0
  302. package/pto/yaamp/web/framework-1.0.8/base/CApplicationComponent.php +56 -0
  303. package/pto/yaamp/web/framework-1.0.8/base/CBehavior.php +87 -0
  304. package/pto/yaamp/web/framework-1.0.8/base/CComponent.php +599 -0
  305. package/pto/yaamp/web/framework-1.0.8/base/CErrorEvent.php +54 -0
  306. package/pto/yaamp/web/framework-1.0.8/base/CErrorHandler.php +336 -0
  307. package/pto/yaamp/web/framework-1.0.8/base/CException.php +22 -0
  308. package/pto/yaamp/web/framework-1.0.8/base/CExceptionEvent.php +36 -0
  309. package/pto/yaamp/web/framework-1.0.8/base/CHttpException.php +40 -0
  310. package/pto/yaamp/web/framework-1.0.8/base/CModel.php +634 -0
  311. package/pto/yaamp/web/framework-1.0.8/base/CModelBehavior.php +54 -0
  312. package/pto/yaamp/web/framework-1.0.8/base/CModelEvent.php +32 -0
  313. package/pto/yaamp/web/framework-1.0.8/base/CModule.php +465 -0
  314. package/pto/yaamp/web/framework-1.0.8/base/CSecurityManager.php +245 -0
  315. package/pto/yaamp/web/framework-1.0.8/base/CStatePersister.php +102 -0
  316. package/pto/yaamp/web/framework-1.0.8/base/interfaces.php +534 -0
  317. package/pto/yaamp/web/framework-1.0.8/caching/CApcCache.php +108 -0
  318. package/pto/yaamp/web/framework-1.0.8/caching/CCache.php +312 -0
  319. package/pto/yaamp/web/framework-1.0.8/caching/CDbCache.php +250 -0
  320. package/pto/yaamp/web/framework-1.0.8/caching/CDummyCache.php +145 -0
  321. package/pto/yaamp/web/framework-1.0.8/caching/CEAcceleratorCache.php +104 -0
  322. package/pto/yaamp/web/framework-1.0.8/caching/CFileCache.php +217 -0
  323. package/pto/yaamp/web/framework-1.0.8/caching/CMemCache.php +272 -0
  324. package/pto/yaamp/web/framework-1.0.8/caching/CXCache.php +97 -0
  325. package/pto/yaamp/web/framework-1.0.8/caching/CZendDataCache.php +98 -0
  326. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CCacheDependency.php +62 -0
  327. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CChainedCacheDependency.php +68 -0
  328. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CDbCacheDependency.php +87 -0
  329. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CDirectoryCacheDependency.php +134 -0
  330. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CExpressionDependency.php +49 -0
  331. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CFileCacheDependency.php +53 -0
  332. package/pto/yaamp/web/framework-1.0.8/caching/dependencies/CGlobalStateCacheDependency.php +54 -0
  333. package/pto/yaamp/web/framework-1.0.8/collections/CAttributeCollection.php +187 -0
  334. package/pto/yaamp/web/framework-1.0.8/collections/CConfiguration.php +121 -0
  335. package/pto/yaamp/web/framework-1.0.8/collections/CList.php +341 -0
  336. package/pto/yaamp/web/framework-1.0.8/collections/CListIterator.php +94 -0
  337. package/pto/yaamp/web/framework-1.0.8/collections/CMap.php +319 -0
  338. package/pto/yaamp/web/framework-1.0.8/collections/CMapIterator.php +93 -0
  339. package/pto/yaamp/web/framework-1.0.8/collections/CQueue.php +168 -0
  340. package/pto/yaamp/web/framework-1.0.8/collections/CQueueIterator.php +94 -0
  341. package/pto/yaamp/web/framework-1.0.8/collections/CStack.php +169 -0
  342. package/pto/yaamp/web/framework-1.0.8/collections/CStackIterator.php +94 -0
  343. package/pto/yaamp/web/framework-1.0.8/collections/CTypedList.php +52 -0
  344. package/pto/yaamp/web/framework-1.0.8/db/CDbCommand.php +326 -0
  345. package/pto/yaamp/web/framework-1.0.8/db/CDbConnection.php +645 -0
  346. package/pto/yaamp/web/framework-1.0.8/db/CDbDataReader.php +221 -0
  347. package/pto/yaamp/web/framework-1.0.8/db/CDbException.php +21 -0
  348. package/pto/yaamp/web/framework-1.0.8/db/CDbTransaction.php +108 -0
  349. package/pto/yaamp/web/framework-1.0.8/db/ar/CActiveFinder.php +1359 -0
  350. package/pto/yaamp/web/framework-1.0.8/db/ar/CActiveRecord.php +2212 -0
  351. package/pto/yaamp/web/framework-1.0.8/db/ar/CActiveRecordBehavior.php +96 -0
  352. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbColumnSchema.php +143 -0
  353. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbCommandBuilder.php +664 -0
  354. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbCriteria.php +166 -0
  355. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbExpression.php +49 -0
  356. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbSchema.php +203 -0
  357. package/pto/yaamp/web/framework-1.0.8/db/schema/CDbTableSchema.php +76 -0
  358. package/pto/yaamp/web/framework-1.0.8/db/schema/mssql/CMssqlColumnSchema.php +55 -0
  359. package/pto/yaamp/web/framework-1.0.8/db/schema/mssql/CMssqlCommandBuilder.php +304 -0
  360. package/pto/yaamp/web/framework-1.0.8/db/schema/mssql/CMssqlPdoAdapter.php +74 -0
  361. package/pto/yaamp/web/framework-1.0.8/db/schema/mssql/CMssqlSchema.php +310 -0
  362. package/pto/yaamp/web/framework-1.0.8/db/schema/mssql/CMssqlTableSchema.php +33 -0
  363. package/pto/yaamp/web/framework-1.0.8/db/schema/mysql/CMysqlColumnSchema.php +46 -0
  364. package/pto/yaamp/web/framework-1.0.8/db/schema/mysql/CMysqlSchema.php +201 -0
  365. package/pto/yaamp/web/framework-1.0.8/db/schema/mysql/CMysqlTableSchema.php +26 -0
  366. package/pto/yaamp/web/framework-1.0.8/db/schema/oci/COciColumnSchema.php +54 -0
  367. package/pto/yaamp/web/framework-1.0.8/db/schema/oci/COciCommandBuilder.php +122 -0
  368. package/pto/yaamp/web/framework-1.0.8/db/schema/oci/COciSchema.php +276 -0
  369. package/pto/yaamp/web/framework-1.0.8/db/schema/oci/COciTableSchema.php +26 -0
  370. package/pto/yaamp/web/framework-1.0.8/db/schema/pgsql/CPgsqlColumnSchema.php +56 -0
  371. package/pto/yaamp/web/framework-1.0.8/db/schema/pgsql/CPgsqlSchema.php +282 -0
  372. package/pto/yaamp/web/framework-1.0.8/db/schema/pgsql/CPgsqlTableSchema.php +25 -0
  373. package/pto/yaamp/web/framework-1.0.8/db/schema/sqlite/CSqliteColumnSchema.php +33 -0
  374. package/pto/yaamp/web/framework-1.0.8/db/schema/sqlite/CSqliteCommandBuilder.php +41 -0
  375. package/pto/yaamp/web/framework-1.0.8/db/schema/sqlite/CSqliteSchema.php +129 -0
  376. package/pto/yaamp/web/framework-1.0.8/i18n/CChoiceFormat.php +77 -0
  377. package/pto/yaamp/web/framework-1.0.8/i18n/CDateFormatter.php +507 -0
  378. package/pto/yaamp/web/framework-1.0.8/i18n/CDbMessageSource.php +114 -0
  379. package/pto/yaamp/web/framework-1.0.8/i18n/CGettextMessageSource.php +111 -0
  380. package/pto/yaamp/web/framework-1.0.8/i18n/CLocale.php +243 -0
  381. package/pto/yaamp/web/framework-1.0.8/i18n/CMessageSource.php +157 -0
  382. package/pto/yaamp/web/framework-1.0.8/i18n/CNumberFormatter.php +280 -0
  383. package/pto/yaamp/web/framework-1.0.8/i18n/CPhpMessageSource.php +96 -0
  384. package/pto/yaamp/web/framework-1.0.8/i18n/gettext/CGettextFile.php +36 -0
  385. package/pto/yaamp/web/framework-1.0.8/i18n/gettext/CGettextMoFile.php +269 -0
  386. package/pto/yaamp/web/framework-1.0.8/i18n/gettext/CGettextPoFile.php +89 -0
  387. package/pto/yaamp/web/framework-1.0.8/logging/CDbLogRoute.php +168 -0
  388. package/pto/yaamp/web/framework-1.0.8/logging/CEmailLogRoute.php +122 -0
  389. package/pto/yaamp/web/framework-1.0.8/logging/CFileLogRoute.php +162 -0
  390. package/pto/yaamp/web/framework-1.0.8/logging/CLogFilter.php +103 -0
  391. package/pto/yaamp/web/framework-1.0.8/logging/CLogRoute.php +107 -0
  392. package/pto/yaamp/web/framework-1.0.8/logging/CLogRouter.php +107 -0
  393. package/pto/yaamp/web/framework-1.0.8/logging/CLogger.php +237 -0
  394. package/pto/yaamp/web/framework-1.0.8/logging/CProfileLogRoute.php +201 -0
  395. package/pto/yaamp/web/framework-1.0.8/logging/CWebLogRoute.php +57 -0
  396. package/pto/yaamp/web/framework-1.0.8/messages/bg/yii.php +213 -0
  397. package/pto/yaamp/web/framework-1.0.8/messages/config.php +19 -0
  398. package/pto/yaamp/web/framework-1.0.8/messages/de/yii.php +221 -0
  399. package/pto/yaamp/web/framework-1.0.8/messages/el/yii.php +222 -0
  400. package/pto/yaamp/web/framework-1.0.8/messages/es/yii.php +231 -0
  401. package/pto/yaamp/web/framework-1.0.8/messages/fr/yii.php +210 -0
  402. package/pto/yaamp/web/framework-1.0.8/messages/he/yii.php +206 -0
  403. package/pto/yaamp/web/framework-1.0.8/messages/hu/yii.php +213 -0
  404. package/pto/yaamp/web/framework-1.0.8/messages/id/yii.php +213 -0
  405. package/pto/yaamp/web/framework-1.0.8/messages/it/yii.php +208 -0
  406. package/pto/yaamp/web/framework-1.0.8/messages/ja/yii.php +230 -0
  407. package/pto/yaamp/web/framework-1.0.8/messages/nl/yii.php +206 -0
  408. package/pto/yaamp/web/framework-1.0.8/messages/no/yii.php +222 -0
  409. package/pto/yaamp/web/framework-1.0.8/messages/pl/yii.php +213 -0
  410. package/pto/yaamp/web/framework-1.0.8/messages/pt/yii.php +213 -0
  411. package/pto/yaamp/web/framework-1.0.8/messages/ro/yii.php +213 -0
  412. package/pto/yaamp/web/framework-1.0.8/messages/ru/yii.php +214 -0
  413. package/pto/yaamp/web/framework-1.0.8/messages/sr_sr/yii.php +205 -0
  414. package/pto/yaamp/web/framework-1.0.8/messages/sr_yu/yii.php +205 -0
  415. package/pto/yaamp/web/framework-1.0.8/messages/sv/yii.php +226 -0
  416. package/pto/yaamp/web/framework-1.0.8/messages/uk/yii.php +213 -0
  417. package/pto/yaamp/web/framework-1.0.8/messages/vi/yii.php +213 -0
  418. package/pto/yaamp/web/framework-1.0.8/messages/zh_cn/yii.php +213 -0
  419. package/pto/yaamp/web/framework-1.0.8/messages/zh_tw/yii.php +207 -0
  420. package/pto/yaamp/web/framework-1.0.8/utils/CDateTimeParser.php +230 -0
  421. package/pto/yaamp/web/framework-1.0.8/utils/CFileHelper.php +228 -0
  422. package/pto/yaamp/web/framework-1.0.8/utils/CMarkdownParser.php +179 -0
  423. package/pto/yaamp/web/framework-1.0.8/utils/CPropertyValue.php +158 -0
  424. package/pto/yaamp/web/framework-1.0.8/utils/CTimestamp.php +715 -0
  425. package/pto/yaamp/web/framework-1.0.8/utils/CVarDumper.php +142 -0
  426. package/pto/yaamp/web/framework-1.0.8/utils/mimeTypes.php +178 -0
  427. package/pto/yaamp/web/framework-1.0.8/validators/CCaptchaValidator.php +72 -0
  428. package/pto/yaamp/web/framework-1.0.8/validators/CCompareValidator.php +151 -0
  429. package/pto/yaamp/web/framework-1.0.8/validators/CDefaultValueValidator.php +51 -0
  430. package/pto/yaamp/web/framework-1.0.8/validators/CEmailValidator.php +80 -0
  431. package/pto/yaamp/web/framework-1.0.8/validators/CExistValidator.php +88 -0
  432. package/pto/yaamp/web/framework-1.0.8/validators/CFileValidator.php +159 -0
  433. package/pto/yaamp/web/framework-1.0.8/validators/CFilterValidator.php +49 -0
  434. package/pto/yaamp/web/framework-1.0.8/validators/CInlineValidator.php +41 -0
  435. package/pto/yaamp/web/framework-1.0.8/validators/CNumberValidator.php +86 -0
  436. package/pto/yaamp/web/framework-1.0.8/validators/CRangeValidator.php +53 -0
  437. package/pto/yaamp/web/framework-1.0.8/validators/CRegularExpressionValidator.php +51 -0
  438. package/pto/yaamp/web/framework-1.0.8/validators/CRequiredValidator.php +36 -0
  439. package/pto/yaamp/web/framework-1.0.8/validators/CStringValidator.php +78 -0
  440. package/pto/yaamp/web/framework-1.0.8/validators/CTypeValidator.php +99 -0
  441. package/pto/yaamp/web/framework-1.0.8/validators/CUniqueValidator.php +106 -0
  442. package/pto/yaamp/web/framework-1.0.8/validators/CUrlValidator.php +49 -0
  443. package/pto/yaamp/web/framework-1.0.8/validators/CValidator.php +194 -0
  444. package/pto/yaamp/web/framework-1.0.8/vendors/README.html +89 -0
  445. package/pto/yaamp/web/framework-1.0.8/vendors/adodb/LICENSE.txt +182 -0
  446. package/pto/yaamp/web/framework-1.0.8/vendors/cldr/LICENSE.txt +33 -0
  447. package/pto/yaamp/web/framework-1.0.8/vendors/gettext/LICENSE.txt +22 -0
  448. package/pto/yaamp/web/framework-1.0.8/vendors/json/LICENSE.txt +22 -0
  449. package/pto/yaamp/web/framework-1.0.8/vendors/markdown/LICENSE.txt +36 -0
  450. package/pto/yaamp/web/framework-1.0.8/vendors/markdown/markdown.php +2623 -0
  451. package/pto/yaamp/web/framework-1.0.8/views/de/error.php +38 -0
  452. package/pto/yaamp/web/framework-1.0.8/views/de/error400.php +34 -0
  453. package/pto/yaamp/web/framework-1.0.8/views/de/error403.php +33 -0
  454. package/pto/yaamp/web/framework-1.0.8/views/de/error404.php +34 -0
  455. package/pto/yaamp/web/framework-1.0.8/views/de/error500.php +35 -0
  456. package/pto/yaamp/web/framework-1.0.8/views/de/error503.php +31 -0
  457. package/pto/yaamp/web/framework-1.0.8/views/de/exception.php +74 -0
  458. package/pto/yaamp/web/framework-1.0.8/views/de/log-firebug.php +23 -0
  459. package/pto/yaamp/web/framework-1.0.8/views/de/log.php +32 -0
  460. package/pto/yaamp/web/framework-1.0.8/views/de/profile-callstack-firebug.php +19 -0
  461. package/pto/yaamp/web/framework-1.0.8/views/de/profile-callstack.php +30 -0
  462. package/pto/yaamp/web/framework-1.0.8/views/de/profile-summary-firebug.php +23 -0
  463. package/pto/yaamp/web/framework-1.0.8/views/de/profile-summary.php +41 -0
  464. package/pto/yaamp/web/framework-1.0.8/views/error.php +37 -0
  465. package/pto/yaamp/web/framework-1.0.8/views/error400.php +33 -0
  466. package/pto/yaamp/web/framework-1.0.8/views/error403.php +32 -0
  467. package/pto/yaamp/web/framework-1.0.8/views/error404.php +33 -0
  468. package/pto/yaamp/web/framework-1.0.8/views/error500.php +35 -0
  469. package/pto/yaamp/web/framework-1.0.8/views/error503.php +31 -0
  470. package/pto/yaamp/web/framework-1.0.8/views/es/error.php +37 -0
  471. package/pto/yaamp/web/framework-1.0.8/views/es/error400.php +33 -0
  472. package/pto/yaamp/web/framework-1.0.8/views/es/error403.php +32 -0
  473. package/pto/yaamp/web/framework-1.0.8/views/es/error404.php +33 -0
  474. package/pto/yaamp/web/framework-1.0.8/views/es/error500.php +35 -0
  475. package/pto/yaamp/web/framework-1.0.8/views/es/error503.php +31 -0
  476. package/pto/yaamp/web/framework-1.0.8/views/es/exception.php +74 -0
  477. package/pto/yaamp/web/framework-1.0.8/views/es/log-firebug.php +23 -0
  478. package/pto/yaamp/web/framework-1.0.8/views/es/log.php +32 -0
  479. package/pto/yaamp/web/framework-1.0.8/views/es/profile-callstack-firebug.php +19 -0
  480. package/pto/yaamp/web/framework-1.0.8/views/es/profile-callstack.php +30 -0
  481. package/pto/yaamp/web/framework-1.0.8/views/es/profile-summary-firebug.php +22 -0
  482. package/pto/yaamp/web/framework-1.0.8/views/es/profile-summary.php +41 -0
  483. package/pto/yaamp/web/framework-1.0.8/views/exception.php +74 -0
  484. package/pto/yaamp/web/framework-1.0.8/views/fr/error.php +37 -0
  485. package/pto/yaamp/web/framework-1.0.8/views/fr/error400.php +33 -0
  486. package/pto/yaamp/web/framework-1.0.8/views/fr/error403.php +32 -0
  487. package/pto/yaamp/web/framework-1.0.8/views/fr/error404.php +34 -0
  488. package/pto/yaamp/web/framework-1.0.8/views/fr/error500.php +35 -0
  489. package/pto/yaamp/web/framework-1.0.8/views/fr/error503.php +31 -0
  490. package/pto/yaamp/web/framework-1.0.8/views/fr/exception.php +74 -0
  491. package/pto/yaamp/web/framework-1.0.8/views/fr/log-firebug.php +23 -0
  492. package/pto/yaamp/web/framework-1.0.8/views/fr/log.php +32 -0
  493. package/pto/yaamp/web/framework-1.0.8/views/fr/profile-callstack-firebug.php +19 -0
  494. package/pto/yaamp/web/framework-1.0.8/views/fr/profile-callstack.php +30 -0
  495. package/pto/yaamp/web/framework-1.0.8/views/fr/profile-summary-firebug.php +22 -0
  496. package/pto/yaamp/web/framework-1.0.8/views/fr/profile-summary.php +41 -0
  497. package/pto/yaamp/web/framework-1.0.8/views/he/error.php +38 -0
  498. package/pto/yaamp/web/framework-1.0.8/views/he/error400.php +34 -0
  499. package/pto/yaamp/web/framework-1.0.8/views/he/error403.php +33 -0
  500. package/pto/yaamp/web/framework-1.0.8/views/he/error404.php +34 -0
  501. package/pto/yaamp/web/framework-1.0.8/views/he/error500.php +36 -0
  502. package/pto/yaamp/web/framework-1.0.8/views/he/error503.php +32 -0
  503. package/pto/yaamp/web/framework-1.0.8/views/he/exception.php +75 -0
  504. package/pto/yaamp/web/framework-1.0.8/views/he/log-firebug.php +23 -0
  505. package/pto/yaamp/web/framework-1.0.8/views/he/log.php +32 -0
  506. package/pto/yaamp/web/framework-1.0.8/views/he/profile-callstack-firebug.php +19 -0
  507. package/pto/yaamp/web/framework-1.0.8/views/he/profile-callstack.php +30 -0
  508. package/pto/yaamp/web/framework-1.0.8/views/he/profile-summary-firebug.php +22 -0
  509. package/pto/yaamp/web/framework-1.0.8/views/he/profile-summary.php +41 -0
  510. package/pto/yaamp/web/framework-1.0.8/views/id/error.php +37 -0
  511. package/pto/yaamp/web/framework-1.0.8/views/id/error400.php +33 -0
  512. package/pto/yaamp/web/framework-1.0.8/views/id/error403.php +32 -0
  513. package/pto/yaamp/web/framework-1.0.8/views/id/error404.php +33 -0
  514. package/pto/yaamp/web/framework-1.0.8/views/id/error500.php +35 -0
  515. package/pto/yaamp/web/framework-1.0.8/views/id/error503.php +31 -0
  516. package/pto/yaamp/web/framework-1.0.8/views/id/exception.php +74 -0
  517. package/pto/yaamp/web/framework-1.0.8/views/id/log-firebug.php +23 -0
  518. package/pto/yaamp/web/framework-1.0.8/views/id/log.php +32 -0
  519. package/pto/yaamp/web/framework-1.0.8/views/id/profile-callstack-firebug.php +19 -0
  520. package/pto/yaamp/web/framework-1.0.8/views/id/profile-callstack.php +30 -0
  521. package/pto/yaamp/web/framework-1.0.8/views/id/profile-summary-firebug.php +22 -0
  522. package/pto/yaamp/web/framework-1.0.8/views/id/profile-summary.php +41 -0
  523. package/pto/yaamp/web/framework-1.0.8/views/ja/error.php +37 -0
  524. package/pto/yaamp/web/framework-1.0.8/views/ja/error400.php +33 -0
  525. package/pto/yaamp/web/framework-1.0.8/views/ja/error403.php +32 -0
  526. package/pto/yaamp/web/framework-1.0.8/views/ja/error404.php +33 -0
  527. package/pto/yaamp/web/framework-1.0.8/views/ja/error500.php +35 -0
  528. package/pto/yaamp/web/framework-1.0.8/views/ja/error503.php +31 -0
  529. package/pto/yaamp/web/framework-1.0.8/views/ja/exception.php +74 -0
  530. package/pto/yaamp/web/framework-1.0.8/views/ja/log-firebug.php +23 -0
  531. package/pto/yaamp/web/framework-1.0.8/views/ja/log.php +32 -0
  532. package/pto/yaamp/web/framework-1.0.8/views/ja/profile-callstack-firebug.php +19 -0
  533. package/pto/yaamp/web/framework-1.0.8/views/ja/profile-callstack.php +30 -0
  534. package/pto/yaamp/web/framework-1.0.8/views/ja/profile-summary-firebug.php +22 -0
  535. package/pto/yaamp/web/framework-1.0.8/views/ja/profile-summary.php +41 -0
  536. package/pto/yaamp/web/framework-1.0.8/views/log-firebug.php +23 -0
  537. package/pto/yaamp/web/framework-1.0.8/views/log.php +32 -0
  538. package/pto/yaamp/web/framework-1.0.8/views/nl/error.php +25 -0
  539. package/pto/yaamp/web/framework-1.0.8/views/nl/error400.php +24 -0
  540. package/pto/yaamp/web/framework-1.0.8/views/nl/error403.php +24 -0
  541. package/pto/yaamp/web/framework-1.0.8/views/nl/error404.php +24 -0
  542. package/pto/yaamp/web/framework-1.0.8/views/nl/error500.php +24 -0
  543. package/pto/yaamp/web/framework-1.0.8/views/nl/error503.php +24 -0
  544. package/pto/yaamp/web/framework-1.0.8/views/nl/exception.php +62 -0
  545. package/pto/yaamp/web/framework-1.0.8/views/nl/log-firebug.php +22 -0
  546. package/pto/yaamp/web/framework-1.0.8/views/nl/log.php +29 -0
  547. package/pto/yaamp/web/framework-1.0.8/views/nl/profile-callstack-firebug.php +17 -0
  548. package/pto/yaamp/web/framework-1.0.8/views/nl/profile-callstack.php +29 -0
  549. package/pto/yaamp/web/framework-1.0.8/views/nl/profile-summary-firebug.php +20 -0
  550. package/pto/yaamp/web/framework-1.0.8/views/nl/profile-summary.php +41 -0
  551. package/pto/yaamp/web/framework-1.0.8/views/no/error.php +37 -0
  552. package/pto/yaamp/web/framework-1.0.8/views/no/error400.php +33 -0
  553. package/pto/yaamp/web/framework-1.0.8/views/no/error403.php +32 -0
  554. package/pto/yaamp/web/framework-1.0.8/views/no/error404.php +33 -0
  555. package/pto/yaamp/web/framework-1.0.8/views/no/error500.php +35 -0
  556. package/pto/yaamp/web/framework-1.0.8/views/no/error503.php +31 -0
  557. package/pto/yaamp/web/framework-1.0.8/views/no/exception.php +74 -0
  558. package/pto/yaamp/web/framework-1.0.8/views/no/log-firebug.php +23 -0
  559. package/pto/yaamp/web/framework-1.0.8/views/no/log.php +32 -0
  560. package/pto/yaamp/web/framework-1.0.8/views/no/profile-callstack-firebug.php +19 -0
  561. package/pto/yaamp/web/framework-1.0.8/views/no/profile-callstack.php +30 -0
  562. package/pto/yaamp/web/framework-1.0.8/views/no/profile-summary-firebug.php +22 -0
  563. package/pto/yaamp/web/framework-1.0.8/views/no/profile-summary.php +41 -0
  564. package/pto/yaamp/web/framework-1.0.8/views/profile-callstack-firebug.php +19 -0
  565. package/pto/yaamp/web/framework-1.0.8/views/profile-callstack.php +30 -0
  566. package/pto/yaamp/web/framework-1.0.8/views/profile-summary-firebug.php +22 -0
  567. package/pto/yaamp/web/framework-1.0.8/views/profile-summary.php +41 -0
  568. package/pto/yaamp/web/framework-1.0.8/views/pt/error.php +37 -0
  569. package/pto/yaamp/web/framework-1.0.8/views/pt/error400.php +33 -0
  570. package/pto/yaamp/web/framework-1.0.8/views/pt/error403.php +32 -0
  571. package/pto/yaamp/web/framework-1.0.8/views/pt/error404.php +33 -0
  572. package/pto/yaamp/web/framework-1.0.8/views/pt/error500.php +35 -0
  573. package/pto/yaamp/web/framework-1.0.8/views/pt/error503.php +31 -0
  574. package/pto/yaamp/web/framework-1.0.8/views/pt/exception.php +74 -0
  575. package/pto/yaamp/web/framework-1.0.8/views/pt/log-firebug.php +23 -0
  576. package/pto/yaamp/web/framework-1.0.8/views/pt/log.php +32 -0
  577. package/pto/yaamp/web/framework-1.0.8/views/pt/profile-callstack-firebug.php +19 -0
  578. package/pto/yaamp/web/framework-1.0.8/views/pt/profile-callstack.php +30 -0
  579. package/pto/yaamp/web/framework-1.0.8/views/pt/profile-summary-firebug.php +22 -0
  580. package/pto/yaamp/web/framework-1.0.8/views/pt/profile-summary.php +41 -0
  581. package/pto/yaamp/web/framework-1.0.8/views/ro/error.php +37 -0
  582. package/pto/yaamp/web/framework-1.0.8/views/ro/error400.php +33 -0
  583. package/pto/yaamp/web/framework-1.0.8/views/ro/error403.php +32 -0
  584. package/pto/yaamp/web/framework-1.0.8/views/ro/error404.php +33 -0
  585. package/pto/yaamp/web/framework-1.0.8/views/ro/error500.php +35 -0
  586. package/pto/yaamp/web/framework-1.0.8/views/ro/error503.php +31 -0
  587. package/pto/yaamp/web/framework-1.0.8/views/ro/exception.php +74 -0
  588. package/pto/yaamp/web/framework-1.0.8/views/ro/log-firebug.php +23 -0
  589. package/pto/yaamp/web/framework-1.0.8/views/ro/log.php +32 -0
  590. package/pto/yaamp/web/framework-1.0.8/views/ro/profile-callstack-firebug.php +19 -0
  591. package/pto/yaamp/web/framework-1.0.8/views/ro/profile-callstack.php +30 -0
  592. package/pto/yaamp/web/framework-1.0.8/views/ro/profile-summary-firebug.php +22 -0
  593. package/pto/yaamp/web/framework-1.0.8/views/ro/profile-summary.php +41 -0
  594. package/pto/yaamp/web/framework-1.0.8/views/ru/error.php +37 -0
  595. package/pto/yaamp/web/framework-1.0.8/views/ru/error400.php +33 -0
  596. package/pto/yaamp/web/framework-1.0.8/views/ru/error403.php +32 -0
  597. package/pto/yaamp/web/framework-1.0.8/views/ru/error404.php +33 -0
  598. package/pto/yaamp/web/framework-1.0.8/views/ru/error500.php +35 -0
  599. package/pto/yaamp/web/framework-1.0.8/views/ru/error503.php +31 -0
  600. package/pto/yaamp/web/framework-1.0.8/views/ru/exception.php +74 -0
  601. package/pto/yaamp/web/framework-1.0.8/views/ru/log-firebug.php +23 -0
  602. package/pto/yaamp/web/framework-1.0.8/views/ru/log.php +32 -0
  603. package/pto/yaamp/web/framework-1.0.8/views/ru/profile-callstack-firebug.php +19 -0
  604. package/pto/yaamp/web/framework-1.0.8/views/ru/profile-callstack.php +30 -0
  605. package/pto/yaamp/web/framework-1.0.8/views/ru/profile-summary-firebug.php +22 -0
  606. package/pto/yaamp/web/framework-1.0.8/views/ru/profile-summary.php +41 -0
  607. package/pto/yaamp/web/framework-1.0.8/views/sv/error.php +37 -0
  608. package/pto/yaamp/web/framework-1.0.8/views/sv/error400.php +33 -0
  609. package/pto/yaamp/web/framework-1.0.8/views/sv/error403.php +33 -0
  610. package/pto/yaamp/web/framework-1.0.8/views/sv/error404.php +33 -0
  611. package/pto/yaamp/web/framework-1.0.8/views/sv/error500.php +35 -0
  612. package/pto/yaamp/web/framework-1.0.8/views/sv/error503.php +31 -0
  613. package/pto/yaamp/web/framework-1.0.8/views/sv/exception.php +74 -0
  614. package/pto/yaamp/web/framework-1.0.8/views/sv/log-firebug.php +23 -0
  615. package/pto/yaamp/web/framework-1.0.8/views/sv/log.php +32 -0
  616. package/pto/yaamp/web/framework-1.0.8/views/sv/profile-callstack-firebug.php +19 -0
  617. package/pto/yaamp/web/framework-1.0.8/views/sv/profile-callstack.php +30 -0
  618. package/pto/yaamp/web/framework-1.0.8/views/sv/profile-summary-firebug.php +22 -0
  619. package/pto/yaamp/web/framework-1.0.8/views/sv/profile-summary.php +41 -0
  620. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error.php +37 -0
  621. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error400.php +33 -0
  622. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error403.php +32 -0
  623. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error404.php +33 -0
  624. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error500.php +35 -0
  625. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/error503.php +31 -0
  626. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/exception.php +74 -0
  627. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/log-firebug.php +23 -0
  628. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/log.php +32 -0
  629. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/profile-callstack-firebug.php +19 -0
  630. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/profile-callstack.php +28 -0
  631. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/profile-summary-firebug.php +22 -0
  632. package/pto/yaamp/web/framework-1.0.8/views/zh_cn/profile-summary.php +41 -0
  633. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error.php +37 -0
  634. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error400.php +33 -0
  635. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error403.php +32 -0
  636. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error404.php +33 -0
  637. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error500.php +35 -0
  638. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/error503.php +31 -0
  639. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/exception.php +74 -0
  640. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/log-firebug.php +23 -0
  641. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/log.php +32 -0
  642. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/profile-callstack-firebug.php +19 -0
  643. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/profile-callstack.php +30 -0
  644. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/profile-summary-firebug.php +22 -0
  645. package/pto/yaamp/web/framework-1.0.8/views/zh_tw/profile-summary.php +41 -0
  646. package/pto/yaamp/web/framework-1.0.8/web/CAssetManager.php +227 -0
  647. package/pto/yaamp/web/framework-1.0.8/web/CBaseController.php +283 -0
  648. package/pto/yaamp/web/framework-1.0.8/web/CCacheHttpSession.php +111 -0
  649. package/pto/yaamp/web/framework-1.0.8/web/CClientScript.php +562 -0
  650. package/pto/yaamp/web/framework-1.0.8/web/CController.php +1072 -0
  651. package/pto/yaamp/web/framework-1.0.8/web/CDbHttpSession.php +203 -0
  652. package/pto/yaamp/web/framework-1.0.8/web/CExtController.php +53 -0
  653. package/pto/yaamp/web/framework-1.0.8/web/CFormModel.php +113 -0
  654. package/pto/yaamp/web/framework-1.0.8/web/CHttpCookie.php +63 -0
  655. package/pto/yaamp/web/framework-1.0.8/web/CHttpRequest.php +763 -0
  656. package/pto/yaamp/web/framework-1.0.8/web/CHttpSession.php +522 -0
  657. package/pto/yaamp/web/framework-1.0.8/web/CHttpSessionIterator.php +92 -0
  658. package/pto/yaamp/web/framework-1.0.8/web/COutputEvent.php +38 -0
  659. package/pto/yaamp/web/framework-1.0.8/web/CPagination.php +161 -0
  660. package/pto/yaamp/web/framework-1.0.8/web/CSort.php +292 -0
  661. package/pto/yaamp/web/framework-1.0.8/web/CTheme.php +124 -0
  662. package/pto/yaamp/web/framework-1.0.8/web/CThemeManager.php +127 -0
  663. package/pto/yaamp/web/framework-1.0.8/web/CUploadedFile.php +210 -0
  664. package/pto/yaamp/web/framework-1.0.8/web/CUrlManager.php +613 -0
  665. package/pto/yaamp/web/framework-1.0.8/web/CWebApplication.php +608 -0
  666. package/pto/yaamp/web/framework-1.0.8/web/CWebModule.php +187 -0
  667. package/pto/yaamp/web/framework-1.0.8/web/actions/CAction.php +58 -0
  668. package/pto/yaamp/web/framework-1.0.8/web/actions/CInlineAction.php +34 -0
  669. package/pto/yaamp/web/framework-1.0.8/web/actions/CViewAction.php +165 -0
  670. package/pto/yaamp/web/framework-1.0.8/web/auth/CAccessControlFilter.php +295 -0
  671. package/pto/yaamp/web/framework-1.0.8/web/auth/CAuthAssignment.php +102 -0
  672. package/pto/yaamp/web/framework-1.0.8/web/auth/CAuthItem.php +269 -0
  673. package/pto/yaamp/web/framework-1.0.8/web/auth/CAuthManager.php +157 -0
  674. package/pto/yaamp/web/framework-1.0.8/web/auth/CBaseUserIdentity.php +116 -0
  675. package/pto/yaamp/web/framework-1.0.8/web/auth/CDbAuthManager.php +584 -0
  676. package/pto/yaamp/web/framework-1.0.8/web/auth/CPhpAuthManager.php +535 -0
  677. package/pto/yaamp/web/framework-1.0.8/web/auth/CUserIdentity.php +79 -0
  678. package/pto/yaamp/web/framework-1.0.8/web/auth/CWebUser.php +583 -0
  679. package/pto/yaamp/web/framework-1.0.8/web/auth/schema.sql +42 -0
  680. package/pto/yaamp/web/framework-1.0.8/web/filters/CFilter.php +64 -0
  681. package/pto/yaamp/web/framework-1.0.8/web/filters/CFilterChain.php +131 -0
  682. package/pto/yaamp/web/framework-1.0.8/web/filters/CInlineFilter.php +61 -0
  683. package/pto/yaamp/web/framework-1.0.8/web/helpers/CGoogleApi.php +72 -0
  684. package/pto/yaamp/web/framework-1.0.8/web/helpers/CHtml.php +1801 -0
  685. package/pto/yaamp/web/framework-1.0.8/web/helpers/CJSON.php +698 -0
  686. package/pto/yaamp/web/framework-1.0.8/web/helpers/CJavaScript.php +128 -0
  687. package/pto/yaamp/web/framework-1.0.8/web/renderers/CPradoViewRenderer.php +245 -0
  688. package/pto/yaamp/web/framework-1.0.8/web/renderers/CViewRenderer.php +93 -0
  689. package/pto/yaamp/web/framework-1.0.8/web/services/CWebService.php +271 -0
  690. package/pto/yaamp/web/framework-1.0.8/web/services/CWebServiceAction.php +130 -0
  691. package/pto/yaamp/web/framework-1.0.8/web/services/CWsdlGenerator.php +373 -0
  692. package/pto/yaamp/web/framework-1.0.8/web/widgets/CAutoComplete.php +285 -0
  693. package/pto/yaamp/web/framework-1.0.8/web/widgets/CClipWidget.php +55 -0
  694. package/pto/yaamp/web/framework-1.0.8/web/widgets/CContentDecorator.php +83 -0
  695. package/pto/yaamp/web/framework-1.0.8/web/widgets/CFilterWidget.php +74 -0
  696. package/pto/yaamp/web/framework-1.0.8/web/widgets/CFlexWidget.php +116 -0
  697. package/pto/yaamp/web/framework-1.0.8/web/widgets/CHtmlPurifier.php +64 -0
  698. package/pto/yaamp/web/framework-1.0.8/web/widgets/CInputWidget.php +80 -0
  699. package/pto/yaamp/web/framework-1.0.8/web/widgets/CMarkdown.php +119 -0
  700. package/pto/yaamp/web/framework-1.0.8/web/widgets/CMaskedTextField.php +106 -0
  701. package/pto/yaamp/web/framework-1.0.8/web/widgets/CMultiFileUpload.php +115 -0
  702. package/pto/yaamp/web/framework-1.0.8/web/widgets/COutputCache.php +336 -0
  703. package/pto/yaamp/web/framework-1.0.8/web/widgets/COutputProcessor.php +77 -0
  704. package/pto/yaamp/web/framework-1.0.8/web/widgets/CStarRating.php +207 -0
  705. package/pto/yaamp/web/framework-1.0.8/web/widgets/CTabView.php +201 -0
  706. package/pto/yaamp/web/framework-1.0.8/web/widgets/CTextHighlighter.php +127 -0
  707. package/pto/yaamp/web/framework-1.0.8/web/widgets/CTreeView.php +232 -0
  708. package/pto/yaamp/web/framework-1.0.8/web/widgets/CWidget.php +202 -0
  709. package/pto/yaamp/web/framework-1.0.8/web/widgets/captcha/CCaptcha.php +132 -0
  710. package/pto/yaamp/web/framework-1.0.8/web/widgets/captcha/CCaptchaAction.php +233 -0
  711. package/pto/yaamp/web/framework-1.0.8/web/widgets/captcha/Duality.ttf +0 -0
  712. package/pto/yaamp/web/framework-1.0.8/web/widgets/pagers/CBasePager.php +129 -0
  713. package/pto/yaamp/web/framework-1.0.8/web/widgets/pagers/CLinkPager.php +194 -0
  714. package/pto/yaamp/web/framework-1.0.8/web/widgets/pagers/CListPager.php +85 -0
  715. package/pto/yaamp/web/framework-1.0.8/web/widgets/pagers/pager.css +68 -0
  716. package/pto/yaamp/web/framework-1.0.8/web/widgets/views/flexWidget.php +98 -0
  717. package/pto/yaamp/web/framework-1.0.8/yii.php +29 -0
  718. package/pto/yaamp/web/images/41.png +0 -0
  719. package/pto/yaamp/web/images/amc.jpg +0 -0
  720. package/pto/yaamp/web/images/base/action_refresh_blue.gif +0 -0
  721. package/pto/yaamp/web/images/base/action_save.gif +0 -0
  722. package/pto/yaamp/web/images/base/delete.png +0 -0
  723. package/pto/yaamp/web/images/base/dot.png +0 -0
  724. package/pto/yaamp/web/images/base/download.png +0 -0
  725. package/pto/yaamp/web/images/base/edit.png +0 -0
  726. package/pto/yaamp/web/images/base/enroll.png +0 -0
  727. package/pto/yaamp/web/images/base/favorite.png +0 -0
  728. package/pto/yaamp/web/images/base/folder_new.png +0 -0
  729. package/pto/yaamp/web/images/base/new.png +0 -0
  730. package/pto/yaamp/web/images/base/newcomment.png +0 -0
  731. package/pto/yaamp/web/images/base/newfile.png +0 -0
  732. package/pto/yaamp/web/images/base/newfolder.png +0 -0
  733. package/pto/yaamp/web/images/base/newuser.png +0 -0
  734. package/pto/yaamp/web/images/base/pause.png +0 -0
  735. package/pto/yaamp/web/images/base/play.png +0 -0
  736. package/pto/yaamp/web/images/base/tools.png +0 -0
  737. package/pto/yaamp/web/images/base/top.png +0 -0
  738. package/pto/yaamp/web/images/base/top_header.png +0 -0
  739. package/pto/yaamp/web/images/base/top_header_selected.png +0 -0
  740. package/pto/yaamp/web/images/base/video_play.png +0 -0
  741. package/pto/yaamp/web/images/beta_corner_banner.png +0 -0
  742. package/pto/yaamp/web/images/beta_corner_banner2.png +0 -0
  743. package/pto/yaamp/web/images/btc.png +0 -0
  744. package/pto/yaamp/web/images/coin-154.png +0 -0
  745. package/pto/yaamp/web/images/coin-22.png +0 -0
  746. package/pto/yaamp/web/images/coin-251.png +0 -0
  747. package/pto/yaamp/web/images/coin-30.png +0 -0
  748. package/pto/yaamp/web/images/coin-316.png +0 -0
  749. package/pto/yaamp/web/images/coin-33.png +0 -0
  750. package/pto/yaamp/web/images/coin-6.png +0 -0
  751. package/pto/yaamp/web/images/coin-834.png +0 -0
  752. package/pto/yaamp/web/images/gears.png +0 -0
  753. package/pto/yaamp/web/images/minus2-78.png +0 -0
  754. package/pto/yaamp/web/images/next.png +0 -0
  755. package/pto/yaamp/web/images/pause.png +0 -0
  756. package/pto/yaamp/web/images/play.png +0 -0
  757. package/pto/yaamp/web/images/plus2-78.png +0 -0
  758. package/pto/yaamp/web/images/sign-in-with-twitter-gray.png +0 -0
  759. package/pto/yaamp/web/images/sign-in-with-twitter-link.png +0 -0
  760. package/pto/yaamp/web/images/start.png +0 -0
  761. package/pto/yaamp/web/images/t_mini-a.png +0 -0
  762. package/pto/yaamp/web/images/tweet.jpg +0 -0
  763. package/pto/yaamp/web/images/twitter.jpg +0 -0
  764. package/pto/yaamp/web/images/ui/16x16_2leftarrow.png +0 -0
  765. package/pto/yaamp/web/images/ui/16x16_2rightarrow.png +0 -0
  766. package/pto/yaamp/web/images/ui/16x16_bottom.png +0 -0
  767. package/pto/yaamp/web/images/ui/16x16_chat.png +0 -0
  768. package/pto/yaamp/web/images/ui/16x16_delete.png +0 -0
  769. package/pto/yaamp/web/images/ui/16x16_edit.png +0 -0
  770. package/pto/yaamp/web/images/ui/16x16_email.png +0 -0
  771. package/pto/yaamp/web/images/ui/16x16_fileclose.png +0 -0
  772. package/pto/yaamp/web/images/ui/16x16_kcontrol.png +0 -0
  773. package/pto/yaamp/web/images/ui/16x16_kuser.png +0 -0
  774. package/pto/yaamp/web/images/ui/16x16_ledgreen.png +0 -0
  775. package/pto/yaamp/web/images/ui/16x16_link.png +0 -0
  776. package/pto/yaamp/web/images/ui/16x16_misc.png +0 -0
  777. package/pto/yaamp/web/images/ui/16x16_package_edutainment.png +0 -0
  778. package/pto/yaamp/web/images/ui/16x16_window_list.png +0 -0
  779. package/pto/yaamp/web/images/ui/22x22_bottom.png +0 -0
  780. package/pto/yaamp/web/images/ui/24x24_link.png +0 -0
  781. package/pto/yaamp/web/images/ui/32x32_link.png +0 -0
  782. package/pto/yaamp/web/images/ui/48x48_link.png +0 -0
  783. package/pto/yaamp/web/images/ui/arrow-down.gif +0 -0
  784. package/pto/yaamp/web/images/ui/arrow-right.gif +0 -0
  785. package/pto/yaamp/web/images/ui/asc.gif +0 -0
  786. package/pto/yaamp/web/images/ui/away.gif +0 -0
  787. package/pto/yaamp/web/images/ui/bg.gif +0 -0
  788. package/pto/yaamp/web/images/ui/control_play_blue.png +0 -0
  789. package/pto/yaamp/web/images/ui/desc.gif +0 -0
  790. package/pto/yaamp/web/images/ui/down_arrow.png +0 -0
  791. package/pto/yaamp/web/images/ui/empty.png +0 -0
  792. package/pto/yaamp/web/images/ui/expand_down.png +0 -0
  793. package/pto/yaamp/web/images/ui/expand_up.png +0 -0
  794. package/pto/yaamp/web/images/ui/green-check.png +0 -0
  795. package/pto/yaamp/web/images/ui/icon-check.gif +0 -0
  796. package/pto/yaamp/web/images/ui/install-flash.jpg +0 -0
  797. package/pto/yaamp/web/images/ui/linkout.png +0 -0
  798. package/pto/yaamp/web/images/ui/loading.gif +0 -0
  799. package/pto/yaamp/web/images/ui/loading_white.gif +0 -0
  800. package/pto/yaamp/web/images/ui/menudot.png +0 -0
  801. package/pto/yaamp/web/images/ui/menuo_bg.gif +0 -0
  802. package/pto/yaamp/web/images/ui/offline.gif +0 -0
  803. package/pto/yaamp/web/images/ui/online.gif +0 -0
  804. package/pto/yaamp/web/images/ui/shade.gif +0 -0
  805. package/pto/yaamp/web/images/ui/shadeactive.gif +0 -0
  806. package/pto/yaamp/web/images/ui/showactivity.png +0 -0
  807. package/pto/yaamp/web/images/ui/showcourse.png +0 -0
  808. package/pto/yaamp/web/images/ui/showdetail.png +0 -0
  809. package/pto/yaamp/web/images/ui/showfile.png +0 -0
  810. package/pto/yaamp/web/images/ui/showfolder.png +0 -0
  811. package/pto/yaamp/web/images/ui/showgraph.png +0 -0
  812. package/pto/yaamp/web/images/ui/showlink.png +0 -0
  813. package/pto/yaamp/web/images/ui/showmedium.png +0 -0
  814. package/pto/yaamp/web/images/ui/showsmall.png +0 -0
  815. package/pto/yaamp/web/images/ui/tintblue.gif +0 -0
  816. package/pto/yaamp/web/images/ui/tintbluedark.gif +0 -0
  817. package/pto/yaamp/web/images/vn_embed.png +0 -0
  818. package/pto/yaamp/web/index.php +30 -0
  819. package/pto/yaamp/web/loop2.sh +9 -0
  820. package/pto/yaamp/web/main.sh +9 -0
  821. package/pto/yaamp/web/robots.txt +2 -0
  822. package/pto/yaamp/web/run.php +25 -0
  823. package/pto/yaamp/web/serverconfig.php +26 -0
  824. package/pto/yaamp/web/yaamp/components/CUFHtml.php +136 -0
  825. package/pto/yaamp/web/yaamp/components/UniForm.php +25 -0
  826. package/pto/yaamp/web/yaamp/components/UserIdentity.php +25 -0
  827. package/pto/yaamp/web/yaamp/config.php +68 -0
  828. package/pto/yaamp/web/yaamp/core/backend/backend.php +17 -0
  829. package/pto/yaamp/web/yaamp/core/backend/blocks.php +243 -0
  830. package/pto/yaamp/web/yaamp/core/backend/clear.php +47 -0
  831. package/pto/yaamp/web/yaamp/core/backend/coins.php +245 -0
  832. package/pto/yaamp/web/yaamp/core/backend/markets.php +505 -0
  833. package/pto/yaamp/web/yaamp/core/backend/payment.php +153 -0
  834. package/pto/yaamp/web/yaamp/core/backend/rawcoins.php +144 -0
  835. package/pto/yaamp/web/yaamp/core/backend/renting.php +271 -0
  836. package/pto/yaamp/web/yaamp/core/backend/sell.php +126 -0
  837. package/pto/yaamp/web/yaamp/core/backend/services.php +210 -0
  838. package/pto/yaamp/web/yaamp/core/backend/stats.php +347 -0
  839. package/pto/yaamp/web/yaamp/core/backend/system.php +253 -0
  840. package/pto/yaamp/web/yaamp/core/backend/users.php +95 -0
  841. package/pto/yaamp/web/yaamp/core/common/Shortcuts.php +77 -0
  842. package/pto/yaamp/web/yaamp/core/common/common.php +10 -0
  843. package/pto/yaamp/web/yaamp/core/common/libUtil.php +305 -0
  844. package/pto/yaamp/web/yaamp/core/common/libdbo.php +91 -0
  845. package/pto/yaamp/web/yaamp/core/common/system.php +135 -0
  846. package/pto/yaamp/web/yaamp/core/common/util.php +317 -0
  847. package/pto/yaamp/web/yaamp/core/common/utilConversion.php +296 -0
  848. package/pto/yaamp/web/yaamp/core/core.php +11 -0
  849. package/pto/yaamp/web/yaamp/core/exchange/bittrex.php +28 -0
  850. package/pto/yaamp/web/yaamp/core/exchange/bleutrade.php +28 -0
  851. package/pto/yaamp/web/yaamp/core/exchange/ccexapi.php +106 -0
  852. package/pto/yaamp/web/yaamp/core/exchange/cryptsy.php +63 -0
  853. package/pto/yaamp/web/yaamp/core/exchange/exchange.php +12 -0
  854. package/pto/yaamp/web/yaamp/core/exchange/jubi.php +20 -0
  855. package/pto/yaamp/web/yaamp/core/exchange/poloniex.php +242 -0
  856. package/pto/yaamp/web/yaamp/core/exchange/yobit.php +77 -0
  857. package/pto/yaamp/web/yaamp/core/exchange2/CExchange.php +198 -0
  858. package/pto/yaamp/web/yaamp/core/exchange2/CExchangeCoin.php +84 -0
  859. package/pto/yaamp/web/yaamp/core/exchange2/exchange.php +7 -0
  860. package/pto/yaamp/web/yaamp/core/functions/curloauth.php +50 -0
  861. package/pto/yaamp/web/yaamp/core/functions/easybitcoin.php +220 -0
  862. package/pto/yaamp/web/yaamp/core/functions/functions.php +11 -0
  863. package/pto/yaamp/web/yaamp/core/functions/memcache.php +85 -0
  864. package/pto/yaamp/web/yaamp/core/functions/url.php +79 -0
  865. package/pto/yaamp/web/yaamp/core/functions/yaamp.php +365 -0
  866. package/pto/yaamp/web/yaamp/core/trading/bittrex_trading.php +221 -0
  867. package/pto/yaamp/web/yaamp/core/trading/bleutrade_trading.php +218 -0
  868. package/pto/yaamp/web/yaamp/core/trading/c-cex_trading.php +192 -0
  869. package/pto/yaamp/web/yaamp/core/trading/cryptsy_trading.php +231 -0
  870. package/pto/yaamp/web/yaamp/core/trading/poloniex_trading.php +179 -0
  871. package/pto/yaamp/web/yaamp/core/trading/trading.php +11 -0
  872. package/pto/yaamp/web/yaamp/core/trading/yobit_trading.php +205 -0
  873. package/pto/yaamp/web/yaamp/include.php +11 -0
  874. package/pto/yaamp/web/yaamp/models/db_accountsModel.php +33 -0
  875. package/pto/yaamp/web/yaamp/models/db_algosModel.php +33 -0
  876. package/pto/yaamp/web/yaamp/models/db_balancesModel.php +33 -0
  877. package/pto/yaamp/web/yaamp/models/db_balanceuserModel.php +33 -0
  878. package/pto/yaamp/web/yaamp/models/db_blocksModel.php +33 -0
  879. package/pto/yaamp/web/yaamp/models/db_coinsModel.php +46 -0
  880. package/pto/yaamp/web/yaamp/models/db_connectionsModel.php +35 -0
  881. package/pto/yaamp/web/yaamp/models/db_earningsModel.php +33 -0
  882. package/pto/yaamp/web/yaamp/models/db_exchangeModel.php +33 -0
  883. package/pto/yaamp/web/yaamp/models/db_hashrateModel.php +33 -0
  884. package/pto/yaamp/web/yaamp/models/db_hashrenterModel.php +33 -0
  885. package/pto/yaamp/web/yaamp/models/db_hashstatsModel.php +33 -0
  886. package/pto/yaamp/web/yaamp/models/db_hashuserModel.php +33 -0
  887. package/pto/yaamp/web/yaamp/models/db_jobsModel.php +33 -0
  888. package/pto/yaamp/web/yaamp/models/db_jobsubmitsModel.php +33 -0
  889. package/pto/yaamp/web/yaamp/models/db_marketsModel.php +33 -0
  890. package/pto/yaamp/web/yaamp/models/db_miningModel.php +33 -0
  891. package/pto/yaamp/web/yaamp/models/db_nicehashModel.php +33 -0
  892. package/pto/yaamp/web/yaamp/models/db_ordersModel.php +33 -0
  893. package/pto/yaamp/web/yaamp/models/db_payoutsModel.php +33 -0
  894. package/pto/yaamp/web/yaamp/models/db_rawcoinsModel.php +36 -0
  895. package/pto/yaamp/web/yaamp/models/db_rentersModel.php +33 -0
  896. package/pto/yaamp/web/yaamp/models/db_rentertxsModel.php +33 -0
  897. package/pto/yaamp/web/yaamp/models/db_serversModel.php +33 -0
  898. package/pto/yaamp/web/yaamp/models/db_servicesModel.php +33 -0
  899. package/pto/yaamp/web/yaamp/models/db_sharesModel.php +33 -0
  900. package/pto/yaamp/web/yaamp/models/db_shares_vipModel.php +33 -0
  901. package/pto/yaamp/web/yaamp/models/db_statsModel.php +33 -0
  902. package/pto/yaamp/web/yaamp/models/db_stratumsModel.php +33 -0
  903. package/pto/yaamp/web/yaamp/models/db_withdrawsModel.php +33 -0
  904. package/pto/yaamp/web/yaamp/models/db_workersModel.php +33 -0
  905. package/pto/yaamp/web/yaamp/modules/api/ApiController.php +301 -0
  906. package/pto/yaamp/web/yaamp/modules/coin/CoinController.php +54 -0
  907. package/pto/yaamp/web/yaamp/modules/coin/_form.php +75 -0
  908. package/pto/yaamp/web/yaamp/modules/coin/index.php +134 -0
  909. package/pto/yaamp/web/yaamp/modules/common/CommonController.php +55 -0
  910. package/pto/yaamp/web/yaamp/modules/common/maintenance.php +25 -0
  911. package/pto/yaamp/web/yaamp/modules/common/yaamp.php +23 -0
  912. package/pto/yaamp/web/yaamp/modules/explorer/ExplorerController.php +56 -0
  913. package/pto/yaamp/web/yaamp/modules/explorer/block.php +122 -0
  914. package/pto/yaamp/web/yaamp/modules/explorer/coin.php +63 -0
  915. package/pto/yaamp/web/yaamp/modules/explorer/index.php +67 -0
  916. package/pto/yaamp/web/yaamp/modules/explorer/tx.php +73 -0
  917. package/pto/yaamp/web/yaamp/modules/explorer/util.php +146 -0
  918. package/pto/yaamp/web/yaamp/modules/market/MarketController.php +86 -0
  919. package/pto/yaamp/web/yaamp/modules/market/update.php +23 -0
  920. package/pto/yaamp/web/yaamp/modules/nicehash/NicehashController.php +55 -0
  921. package/pto/yaamp/web/yaamp/modules/nicehash/index.php +37 -0
  922. package/pto/yaamp/web/yaamp/modules/nicehash/index_results.php +78 -0
  923. package/pto/yaamp/web/yaamp/modules/renting/RentingController.php +469 -0
  924. package/pto/yaamp/web/yaamp/modules/renting/admin.php +148 -0
  925. package/pto/yaamp/web/yaamp/modules/renting/all_orders_results.php +95 -0
  926. package/pto/yaamp/web/yaamp/modules/renting/balance_results.php +115 -0
  927. package/pto/yaamp/web/yaamp/modules/renting/create.php +52 -0
  928. package/pto/yaamp/web/yaamp/modules/renting/graph_job_results.php +74 -0
  929. package/pto/yaamp/web/yaamp/modules/renting/graph_price_results.php +54 -0
  930. package/pto/yaamp/web/yaamp/modules/renting/index.php +318 -0
  931. package/pto/yaamp/web/yaamp/modules/renting/login.php +239 -0
  932. package/pto/yaamp/web/yaamp/modules/renting/orders_results.php +130 -0
  933. package/pto/yaamp/web/yaamp/modules/renting/settings.php +156 -0
  934. package/pto/yaamp/web/yaamp/modules/renting/status_results.php +103 -0
  935. package/pto/yaamp/web/yaamp/modules/renting/tx.php +74 -0
  936. package/pto/yaamp/web/yaamp/modules/site/SiteController.php +772 -0
  937. package/pto/yaamp/web/yaamp/modules/site/about.php +59 -0
  938. package/pto/yaamp/web/yaamp/modules/site/admin.php +90 -0
  939. package/pto/yaamp/web/yaamp/modules/site/admin_results.php +171 -0
  940. package/pto/yaamp/web/yaamp/modules/site/api.php +136 -0
  941. package/pto/yaamp/web/yaamp/modules/site/backup.php +33 -0
  942. package/pto/yaamp/web/yaamp/modules/site/block.php +46 -0
  943. package/pto/yaamp/web/yaamp/modules/site/block_results.php +85 -0
  944. package/pto/yaamp/web/yaamp/modules/site/coin.php +145 -0
  945. package/pto/yaamp/web/yaamp/modules/site/coin_form.php +229 -0
  946. package/pto/yaamp/web/yaamp/modules/site/coin_results.php +242 -0
  947. package/pto/yaamp/web/yaamp/modules/site/common.php +231 -0
  948. package/pto/yaamp/web/yaamp/modules/site/common_results.php +576 -0
  949. package/pto/yaamp/web/yaamp/modules/site/connections.php +57 -0
  950. package/pto/yaamp/web/yaamp/modules/site/connections_results.php +48 -0
  951. package/pto/yaamp/web/yaamp/modules/site/diff.php +36 -0
  952. package/pto/yaamp/web/yaamp/modules/site/earning.php +50 -0
  953. package/pto/yaamp/web/yaamp/modules/site/earning_results.php +74 -0
  954. package/pto/yaamp/web/yaamp/modules/site/emptymarkets.php +34 -0
  955. package/pto/yaamp/web/yaamp/modules/site/eval.php +22 -0
  956. package/pto/yaamp/web/yaamp/modules/site/exchange.php +50 -0
  957. package/pto/yaamp/web/yaamp/modules/site/exchange_results.php +183 -0
  958. package/pto/yaamp/web/yaamp/modules/site/index.php +154 -0
  959. package/pto/yaamp/web/yaamp/modules/site/memcached.php +56 -0
  960. package/pto/yaamp/web/yaamp/modules/site/miners.php +88 -0
  961. package/pto/yaamp/web/yaamp/modules/site/mining.php +235 -0
  962. package/pto/yaamp/web/yaamp/modules/site/monsters.php +129 -0
  963. package/pto/yaamp/web/yaamp/modules/site/multialgo.php +84 -0
  964. package/pto/yaamp/web/yaamp/modules/site/payments.php +50 -0
  965. package/pto/yaamp/web/yaamp/modules/site/payments_results.php +56 -0
  966. package/pto/yaamp/web/yaamp/modules/site/results/current_results.php +158 -0
  967. package/pto/yaamp/web/yaamp/modules/site/results/found_results.php +94 -0
  968. package/pto/yaamp/web/yaamp/modules/site/results/graph_assets_results.php +58 -0
  969. package/pto/yaamp/web/yaamp/modules/site/results/graph_earnings_results.php +47 -0
  970. package/pto/yaamp/web/yaamp/modules/site/results/graph_hashrate_results.php +68 -0
  971. package/pto/yaamp/web/yaamp/modules/site/results/graph_negative_results.php +36 -0
  972. package/pto/yaamp/web/yaamp/modules/site/results/graph_price_results.php +68 -0
  973. package/pto/yaamp/web/yaamp/modules/site/results/graph_profit_results.php +25 -0
  974. package/pto/yaamp/web/yaamp/modules/site/results/graph_user_results.php +81 -0
  975. package/pto/yaamp/web/yaamp/modules/site/results/history_results.php +156 -0
  976. package/pto/yaamp/web/yaamp/modules/site/results/miners_results.php +126 -0
  977. package/pto/yaamp/web/yaamp/modules/site/results/mining_results.php +216 -0
  978. package/pto/yaamp/web/yaamp/modules/site/results/user_earning_results.php +92 -0
  979. package/pto/yaamp/web/yaamp/modules/site/results/wallet_graphs_results.php +33 -0
  980. package/pto/yaamp/web/yaamp/modules/site/results/wallet_miners_results.php +117 -0
  981. package/pto/yaamp/web/yaamp/modules/site/results/wallet_results.php +263 -0
  982. package/pto/yaamp/web/yaamp/modules/site/terms.php +392 -0
  983. package/pto/yaamp/web/yaamp/modules/site/tx.php +64 -0
  984. package/pto/yaamp/web/yaamp/modules/site/user.php +80 -0
  985. package/pto/yaamp/web/yaamp/modules/site/user_results.php +136 -0
  986. package/pto/yaamp/web/yaamp/modules/site/version.php +50 -0
  987. package/pto/yaamp/web/yaamp/modules/site/version_results.php +48 -0
  988. package/pto/yaamp/web/yaamp/modules/site/wallet.php +390 -0
  989. package/pto/yaamp/web/yaamp/modules/site/worker.php +50 -0
  990. package/pto/yaamp/web/yaamp/modules/site/worker_results.php +55 -0
  991. package/pto/yaamp/web/yaamp/modules/stats/StatsController.php +65 -0
  992. package/pto/yaamp/web/yaamp/modules/stats/graph_results_1.php +20 -0
  993. package/pto/yaamp/web/yaamp/modules/stats/graph_results_2.php +19 -0
  994. package/pto/yaamp/web/yaamp/modules/stats/graph_results_3.php +20 -0
  995. package/pto/yaamp/web/yaamp/modules/stats/graph_results_4.php +34 -0
  996. package/pto/yaamp/web/yaamp/modules/stats/graph_results_5.php +33 -0
  997. package/pto/yaamp/web/yaamp/modules/stats/graph_results_6.php +40 -0
  998. package/pto/yaamp/web/yaamp/modules/stats/graph_results_7.php +34 -0
  999. package/pto/yaamp/web/yaamp/modules/stats/graph_results_8.php +33 -0
  1000. package/pto/yaamp/web/yaamp/modules/stats/graph_results_9.php +44 -0
  1001. package/pto/yaamp/web/yaamp/modules/stats/index.php +502 -0
  1002. package/pto/yaamp/web/yaamp/modules/thread/CronjobController.php +196 -0
  1003. package/pto/yaamp/web/yaamp/modules/trading/TradingController.php +59 -0
  1004. package/pto/yaamp/web/yaamp/modules/trading/index.php +270 -0
  1005. package/pto/yaamp/web/yaamp/modules/trading/mining_results.php +245 -0
  1006. package/pto/yaamp/web/yaamp/ui/app.php +8 -0
  1007. package/pto/yaamp/web/yaamp/ui/css/editor.css +34 -0
  1008. package/pto/yaamp/web/yaamp/ui/css/indicator.gif +0 -0
  1009. package/pto/yaamp/web/yaamp/ui/css/jquery-ui-fixes.css +26 -0
  1010. package/pto/yaamp/web/yaamp/ui/css/list.css +78 -0
  1011. package/pto/yaamp/web/yaamp/ui/css/main.css +225 -0
  1012. package/pto/yaamp/web/yaamp/ui/css/news.css +82 -0
  1013. package/pto/yaamp/web/yaamp/ui/css/objectmenu.css +27 -0
  1014. package/pto/yaamp/web/yaamp/ui/css/poll.css +194 -0
  1015. package/pto/yaamp/web/yaamp/ui/css/table.css +124 -0
  1016. package/pto/yaamp/web/yaamp/ui/css/tags.css +97 -0
  1017. package/pto/yaamp/web/yaamp/ui/css/uni-form-generic.css +25 -0
  1018. package/pto/yaamp/web/yaamp/ui/css/uni-form.css +94 -0
  1019. package/pto/yaamp/web/yaamp/ui/js/auto_refresh.js +33 -0
  1020. package/pto/yaamp/web/yaamp/ui/js/cookies.js +45 -0
  1021. package/pto/yaamp/web/yaamp/ui/js/datetime.js +126 -0
  1022. package/pto/yaamp/web/yaamp/ui/js/jquery.bgiframe.js +44 -0
  1023. package/pto/yaamp/web/yaamp/ui/js/jquery.dialogextend.js +589 -0
  1024. package/pto/yaamp/web/yaamp/ui/js/jquery.tablesorter.js +1031 -0
  1025. package/pto/yaamp/web/yaamp/ui/js/jquery.yii.js +45 -0
  1026. package/pto/yaamp/web/yaamp/ui/js/swfobject.js +780 -0
  1027. package/pto/yaamp/web/yaamp/ui/js/texteditor.js +54 -0
  1028. package/pto/yaamp/web/yaamp/ui/js/uni-form.jquery.js +38 -0
  1029. package/pto/yaamp/web/yaamp/ui/js/util.js +108 -0
  1030. package/pto/yaamp/web/yaamp/ui/lib/lib.php +4 -0
  1031. package/pto/yaamp/web/yaamp/ui/lib/libview.php +59 -0
  1032. package/pto/yaamp/web/yaamp/ui/lib/pageheader.php +26 -0
  1033. package/pto/yaamp/web/yaamp/ui/main.php +131 -0
  1034. package/pto/yaamp/web/yaamp/ui/misc.php +41 -0
  1035. package/pto/yaamp/yaamp.sql +3098 -0
@@ -0,0 +1,2212 @@
1
+ <?php
2
+ /**
3
+ * CActiveRecord class file.
4
+ *
5
+ * @author Qiang Xue <qiang.xue@gmail.com>
6
+ * @link http://www.yiiframework.com/
7
+ * @copyright Copyright &copy; 2008-2009 Yii Software LLC
8
+ * @license http://www.yiiframework.com/license/
9
+ */
10
+
11
+ /**
12
+ * CActiveRecord is the base class for classes representing relational data.
13
+ *
14
+ * It implements the active record design pattern, a popular Object-Relational Mapping (ORM) technique.
15
+ *
16
+ * Each active record class represents a database table/view, while an active record instance
17
+ * represents a row in that table. Using CActiveRecord, one can perform CRUD
18
+ * (create, read, update, delete) database actions in an object-oriented way. For example,
19
+ * the following code inserts a row to the 'Post' table (where 'Post' is the class representing
20
+ * the 'Post' table):
21
+ * <pre>
22
+ * $post=new Post;
23
+ * $post->title='sample post';
24
+ * $post->save();
25
+ * </pre>
26
+ *
27
+ * In the following, we elaborate how to use CActiveRecord.
28
+ *
29
+ * First, we need to set up a database connection to be used by CActiveRecord. This is
30
+ * done by loading a {@link CDbConnection} application component whose ID is "db", using the following application
31
+ * configuration:
32
+ * <pre>
33
+ * array(
34
+ * 'components'=>array(
35
+ * 'db'=>array(
36
+ * 'class'=>'CDbConnection',
37
+ * 'connectionString'=>'sqlite:test.db',
38
+ * ),
39
+ * )
40
+ * );
41
+ * </pre>
42
+ * To use a different database connection, you should override {@link getDbConnection}.
43
+ *
44
+ * Second, for every database table that we want to access, define an active record class.
45
+ * The following example shows the minimal code needed for a 'Post' class, which represents
46
+ * the 'Post' table.
47
+ * <pre>
48
+ * class Post extends CActiveRecord
49
+ * {
50
+ * public static function model($className=__CLASS__)
51
+ * {
52
+ * return parent::model($className);
53
+ * }
54
+ * }
55
+ * </pre>
56
+ * The 'model()' method is declared as such for every active record class (to be explained shortly).
57
+ * By convention, the 'Post' class is associated with the database table named 'Post' (the class name).
58
+ * If the class should be associated with some other table, you may override
59
+ * the {@link tableName()} method.
60
+ *
61
+ * To access column values, use $record->columnName, where $record refers to an active record instance.
62
+ * For example, the following code sets the 'title' column (attribute) of $post:
63
+ * <pre>
64
+ * $post=new Post;
65
+ * $post->title='a sample post';
66
+ * </pre>
67
+ * Although we never explicitly declare the 'title' property in the 'Post' class, we can
68
+ * still access it in the above code. This is because 'title' is a column in the 'Post' table,
69
+ * and CActiveRecord makes it accessible as a property with the help of PHP __get() magic method.
70
+ * If you attempt to access a non-existing column in the same way, an exception will be thrown.
71
+ *
72
+ * To insert a new row into 'Post', we first create a new instance of 'Post' class,
73
+ * and then call 'save()' to do the insertion.
74
+ * <pre>
75
+ * $post=new Post;
76
+ * $post->title='sample post';
77
+ * $post->save();
78
+ * </pre>
79
+ * After insertion, the $post object will contain an updated primary key if it is auto-incremental.
80
+ *
81
+ * To query for posts, we will use the 'model' method we defined earlier on. The 'model' method
82
+ * is the only static method defined in CActiveRecord. It returns a static active record instance
83
+ * that is used to access class-level methods (something similar to static class methods).
84
+ * The following 'find' methods are all class-level methods that CActiveRecord implements to
85
+ * facilitate database querying:
86
+ * <pre>
87
+ * // find the first row satisfying the specified condition
88
+ * $post=Post::model()->find($condition,$params);
89
+ *
90
+ * // find all rows satisfying the specified condition
91
+ * $posts=Post::model()->findAll($condition,$params);
92
+ *
93
+ * // find the row with the specified primary key
94
+ * $post=Post::model()->findByPk($postID,$condition,$params);
95
+ *
96
+ * // find all rows with the specified primary keys
97
+ * $posts=Post::model()->findAllByPk($postIDs,$condition,$params);
98
+ *
99
+ * // find the row with the specified attribute values
100
+ * $post=Post::model()->findByAttributes($attributes,$condition,$params);
101
+ *
102
+ * // find all rows with the specified attribute values
103
+ * $posts=Post::model()->findAllByAttributes($attributes,$condition,$params);
104
+ *
105
+ * // find the first row using the specified SQL statement
106
+ * $post=Post::model()->findBySql($sql,$params);
107
+ *
108
+ * // find all rows using the specified SQL statement
109
+ * $posts=Post::model()->findAllBySql($sql,$params);
110
+ *
111
+ * // get the number of rows satisfying the specified condition
112
+ * $n=Post::model()->count($condition,$params);
113
+ *
114
+ * // get the number of rows using the specified SQL statement
115
+ * $n=Post::model()->countBySql($sql,$params);
116
+ * </pre>
117
+ * where $condition specifies the WHERE clause, and $params gives a list of parameters that
118
+ * should be bound to the generated SQL statement.
119
+ * You may also pass a {@link CDbCriteria} object at the place of $condition to specify
120
+ * more complex query conditions (in that case, $params will be ignored since you can sepcify it
121
+ * in the {@link CDbCriteria} object.)
122
+ *
123
+ * As we can see from the above, we have a set of find() methods and a set of findAll() methods.
124
+ * The result of the former is either an active record instance or null
125
+ * if no result is found, while the result of the latter is always an array.
126
+ *
127
+ * After obtaining an active record from query, we can update it or delete it.
128
+ * <pre>
129
+ * $post->title='new post title';
130
+ * $post->save(); // or $post->delete();
131
+ * </pre>
132
+ * In the above, we are using the same 'save()' method to do both insertion and update.
133
+ * CActiveRecord is intelligent enough to differentiate these two scenarios.
134
+ *
135
+ * CActiveRecord also has a few class-level methods to facilitate updating and deleting rows
136
+ * without instantiating active record objects. Below is a summary:
137
+ * <pre>
138
+ * // update all records with the specified attributes and condition
139
+ * Post::model()->updateAll($attributes,$condition,$params);
140
+ *
141
+ * // update one or several records with the specified primary key(s) and attribute values
142
+ * Post::model()->updateByPk($postID,$attributes,$condition,$params);
143
+ *
144
+ * // update one or several counter columns
145
+ * Post::model()->updateCounters($counters,$condition,$params);
146
+ *
147
+ * // delete all records with the specified condition
148
+ * Post::model()->deleteAll($condition,$params);
149
+ *
150
+ * // delete one or several records with the specified primary key(s) and attribute values
151
+ * Post::model()->deleteByPk($pk,$condition,$params);
152
+ *
153
+ * // check if a record exists with the specified condition
154
+ * Post::model()->exists($condition,$params);
155
+ * </pre>
156
+ *
157
+ * A very useful feature that CActiveRecord supports is retrieving related active records.
158
+ * An active record is often related with other active records, via the relationship
159
+ * defined between database tables. For example, a post belongs to an author and has many comments;
160
+ * a user has a profile; a post belongs to and has many categories. CActiveRecord makes retrieving
161
+ * these related objects very easy.
162
+ *
163
+ * Before retrieving related objects, we need to declare these relations in the class definition.
164
+ * This is done by overriding the {@link relations} method:
165
+ * <pre>
166
+ * class Post extends CActiveRecord
167
+ * {
168
+ * public function relations()
169
+ * {
170
+ * return array(
171
+ * 'author'=>array(self::BELONGS_TO, 'User', 'authorID'),
172
+ * 'comments'=>array(self::HAS_MANY, 'Comment', 'postID'),
173
+ * );
174
+ * }
175
+ * }
176
+ * </pre>
177
+ * In the above, we declare two relations:
178
+ * <ul>
179
+ * <li>the 'author' relation is of BELONGS_TO type; it references the 'User' active record class;
180
+ * and the 'authorID' column of the 'Post' table is the foreign key.</li>
181
+ * <li>the 'comments' relation is of HAS_MANY type; it references the 'Comment' active record class;
182
+ * and the 'postID' column of the 'Comment' table is the foreign key.</li>
183
+ * </ul>
184
+ *
185
+ * Since the 'Post' class knows what kind of related objects it has, we can use
186
+ * the following code to access the author and comments of a post:
187
+ * <pre>
188
+ * $post=Post::model()->findByPk($postID);
189
+ * $author=$post->author;
190
+ * $comments=$post->comments;
191
+ * </pre>
192
+ * Internally, when we access 'author' or 'comments' the first time, an SQL query will
193
+ * be executed to fetch the corresponding active record(s). This is the so-called
194
+ * lazy loading, i.e., the related objects are loaded the first time when they are accessed.
195
+ *
196
+ * If we have 100 posts and would like to obtain the author and comments for every post,
197
+ * lazy loading would be very inefficient, because it means we will need 200 SQL queries
198
+ * in order to fetch those related objects. In this situation, we should resort to
199
+ * the so-called eager loading.
200
+ * <pre>
201
+ * $posts=Post::model()->with('author','comments')->findAll($condition,$params);
202
+ * </pre>
203
+ * Here we used the 'with' method to specify that we want to bring back post records
204
+ * together with their related author and comments. Internally, two SQL queries
205
+ * will be created and executed: one brings back the posts and their authors, and the other
206
+ * brings back the comments). The reason we do not fetch them all together in one shot is
207
+ * because the returned rows would otherwise contain many repetitive results (e.g. the post
208
+ * information is repeated for every comment it has), which is both inefficient for database
209
+ * server and PHP code.
210
+ *
211
+ * Eager loading can be nested. For example, if for every comment, we also want to know
212
+ * its author, we could use the following 'with' find:
213
+ * <pre>
214
+ * $posts=Post::model()->with(array('author','comments'=>'author'))->findAll($condition,$params);
215
+ * </pre>
216
+ * How many SQL queries do we need now? Still two (one for posts and their authors, and one
217
+ * for comments and their authors)! In fact, if there are N HAS_MANY/MANY_MANY relations involved,
218
+ * we would need N+1 queries in total.
219
+ *
220
+ * There is a minor inconvenience when using eager loading, though. That is, we need to
221
+ * disambiguate any column references in conditions or search criteria, because we are
222
+ * joining several tables together. In general, it would be safe if we prefix every column referenced
223
+ * in the condition or search criteria with the table name.
224
+ *
225
+ * Now let's describe more about the possible relations we can declare for active records.
226
+ * From database point of view, the relationship between two tables A and B has three types:
227
+ * one-to-many, one-to-one and many-to-many. In active records, these are classified into four types:
228
+ * <ul>
229
+ * <li>BELONGS_TO: if A vs. B is one-to-many, then B belongs to A (e.g. a post belongs to an author);</li>
230
+ * <li>HAS_MANY: if A vs. B is one-to-many, then A has many B (e.g. an author has many posts);</li>
231
+ * <li>HAS_ONE: this is special case of has-many where A has at most one B;</li>
232
+ * <li>MANY_MANY: this corresponds to many-to-many relationship in database. An intermediate
233
+ * join table is needed as most DBMS do not support many-to-many relationship directly.
234
+ * For example, a post can belong to many categories and a category can have many posts.
235
+ * We would use a table 'post_category' to join the 'posts' and 'categories' tables together.</li>
236
+ * </ul>
237
+ *
238
+ * We already see how to declare a relation in an active record class. In many situations,
239
+ * we often have more constraints on those related objects, such as the conditions that the related
240
+ * objects should satisfy, their orderings, etc. These can be specified as additional options
241
+ * in our relation declaration. For example,
242
+ * <pre>
243
+ * class Post extends CActiveRecord
244
+ * {
245
+ * ......
246
+ * public function relations()
247
+ * {
248
+ * return array(
249
+ * 'comments'=>array(self::HAS_MANY,'Comment','postID',
250
+ * 'order'=>'??.createTime DESC',
251
+ * 'with'=>'author'),
252
+ * );
253
+ * }
254
+ * }
255
+ * </pre>
256
+ * where the 'order' option specifies that the comments should be sorted by their creation time,
257
+ * and the 'with' option specifies that the comments should be loaded together with their authors.
258
+ * The special token '??.' is for disamibiguating the column reference. When SQL statement
259
+ * is generated, it will be replaced automatically by the table alias for the 'Comment' table.
260
+ * More detailed description about possible options can be found in {@link CActiveRelation} and
261
+ * {@link CHasManyRelation}.
262
+ *
263
+ * Since version 1.0.4, a new relational query, called STAT, is supported. It is meant
264
+ * to perform relational queries that return statistical information about related objects
265
+ * (e.g. the number of comments that each post has). To use this new relational query,
266
+ * we need to declare it in the {@link relations} method like other relations:
267
+ * <pre>
268
+ * class Post extends CActiveRecord
269
+ * {
270
+ * ......
271
+ * public function relations()
272
+ * {
273
+ * return array(
274
+ * 'commentCount'=>array(self::STAT,'Comment','postID'),
275
+ *
276
+ * 'comments'=>array(self::HAS_MANY,'Comment','postID',
277
+ * 'order'=>'??.createTime DESC',
278
+ * 'with'=>'author'),
279
+ * );
280
+ * }
281
+ * }
282
+ * </pre>
283
+ * In the above, we declare 'commentCount' to be a STAT relation that is related with
284
+ * the <code>Comment</code> model via its foreign key <code>postID</code>. Given a post
285
+ * model instance, we can then obtain the number of comments it has via the expression
286
+ * <code>$post->commentCount</code>. We can also obtain the number of comments for a list
287
+ * of posts via eager loading:
288
+ * <pre>
289
+ * $posts=Post::model()->with('commentCount')->findAll();
290
+ * </pre>
291
+ *
292
+ *
293
+ * CActiveRecord has built-in validation functionality that validates the user input data
294
+ * before they are saved to database. To use the validation, override {@link CModel::rules()} as follows,
295
+ * <pre>
296
+ * class Post extends CActiveRecord
297
+ * {
298
+ * public function rules()
299
+ * {
300
+ * return array(
301
+ * array('title, content', 'required'),
302
+ * array('title', 'length', 'min'=>5),
303
+ * );
304
+ * }
305
+ * }
306
+ * </pre>
307
+ * The method returns a list of validation rules, each represented as an array of the following format:
308
+ * <pre>
309
+ * array('attribute list', 'validator name', 'on'=>'insert', ...validation parameters...)
310
+ * </pre>
311
+ * where
312
+ * <ul>
313
+ * <li>attribute list: specifies the attributes to be validated;</li>
314
+ * <li>validator name: specifies the validator to be used. It can be a class name (or class in dot syntax),
315
+ * or a validation method in the AR class. A validator class must extend from {@link CValidator},
316
+ * while a validation method must have the following signature:
317
+ * <pre>
318
+ * function validatorName($attribute,$params)
319
+ * </pre>
320
+ * When using a built-in validator class, you can use an alias name instead of the full class name.
321
+ * For example, you can use "required" instead of "system.validators.CRequiredValidator".
322
+ * For more details, see {@link CValidator}.</li>
323
+ * <li>on: this specifies the scenario when the validation rule should be performed. Please see {@link CModel::validate}
324
+ * for more details about this option. NOTE: if the validation is triggered by the {@link save} call,
325
+ * it will use 'insert' to indicate an insertion operation, and 'update' an updating operation.
326
+ * You may thus specify a rule with the 'on' option so that it is applied only to insertion or updating.</li>
327
+ * <li>additional parameters are used to initialize the corresponding validator properties. See {@link CValidator}
328
+ * for possible properties.</li>
329
+ * </ul>
330
+ *
331
+ * When {@link save} is called, validation will be performed. If there are any validation errors,
332
+ * {@link save} will return false and the errors can be retrieved back via {@link getErrors}.
333
+ *
334
+ * @author Qiang Xue <qiang.xue@gmail.com>
335
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
336
+ * @package system.db.ar
337
+ * @since 1.0
338
+ */
339
+ abstract class CActiveRecord extends CModel
340
+ {
341
+ const BELONGS_TO='CBelongsToRelation';
342
+ const HAS_ONE='CHasOneRelation';
343
+ const HAS_MANY='CHasManyRelation';
344
+ const MANY_MANY='CManyManyRelation';
345
+ const STAT='CStatRelation';
346
+
347
+ /**
348
+ * @var CDbConnection the default database connection for all active record classes.
349
+ * By default, this is the 'db' application component.
350
+ * @see getDbConnection
351
+ */
352
+ public static $db;
353
+
354
+ private static $_models=array(); // class name => model
355
+
356
+ private $_md; // meta data
357
+ private $_new=false; // whether this instance is new or not
358
+ private $_attributes=array(); // attribute name => attribute value
359
+ private $_related=array(); // attribute name => related objects
360
+ private $_c; // query criteria (used by finder only)
361
+
362
+
363
+ /**
364
+ * Constructor.
365
+ * @param array initial attributes (name => value). The attributes
366
+ * are subject to filtering via {@link setAttributes}. If this parameter is null,
367
+ * nothing will be done in the constructor (this is internally used by {@link populateRecord}).
368
+ * @param string scenario name. See {@link setAttributes} for more details about this parameter.
369
+ * This parameter has been available since version 1.0.2.
370
+ * As of version 1.0.4, this parameter will be used to set the {@link CModel::scenario scenario}
371
+ * property of the model.
372
+ * @see setAttributes
373
+ */
374
+ public function __construct($attributes=array(),$scenario='')
375
+ {
376
+ if($attributes===null) // internally used by populateRecord() and model()
377
+ return;
378
+
379
+ $this->setScenario($scenario);
380
+ $this->setIsNewRecord(true);
381
+ $this->_attributes=$this->getMetaData()->attributeDefaults;
382
+
383
+ $this->init();
384
+
385
+ if($attributes!==array())
386
+ $this->setAttributes($attributes);
387
+
388
+ $this->attachBehaviors($this->behaviors());
389
+ $this->afterConstruct();
390
+ }
391
+
392
+ /**
393
+ * Initializes this model.
394
+ * This method is invoked in the constructor right after {@link scenario} is set.
395
+ * You may override this method to provide code that is needed to initialize the model (e.g. setting
396
+ * initial property values.)
397
+ * @since 1.0.8
398
+ */
399
+ public function init()
400
+ {
401
+ }
402
+
403
+ /**
404
+ * PHP sleep magic method.
405
+ * This method ensures that the model meta data reference is set to null.
406
+ */
407
+ public function __sleep()
408
+ {
409
+ $this->_md=null;
410
+ return array_keys((array)$this);
411
+ }
412
+
413
+ /**
414
+ * PHP getter magic method.
415
+ * This method is overridden so that AR attributes can be accessed like properties.
416
+ * @param string property name
417
+ * @return mixed property value
418
+ * @see getAttribute
419
+ */
420
+ public function __get($name)
421
+ {
422
+ if(isset($this->_attributes[$name]))
423
+ return $this->_attributes[$name];
424
+ else if(isset($this->getMetaData()->columns[$name]))
425
+ return null;
426
+ else if(isset($this->_related[$name]))
427
+ return $this->_related[$name];
428
+ else if(isset($this->getMetaData()->relations[$name]))
429
+ return $this->getRelated($name);
430
+ else
431
+ return parent::__get($name);
432
+ }
433
+
434
+ /**
435
+ * PHP setter magic method.
436
+ * This method is overridden so that AR attributes can be accessed like properties.
437
+ * @param string property name
438
+ * @param mixed property value
439
+ */
440
+ public function __set($name,$value)
441
+ {
442
+ if($this->setAttribute($name,$value)===false)
443
+ {
444
+ if(isset($this->getMetaData()->relations[$name]))
445
+ $this->_related[$name]=$value;
446
+ else
447
+ parent::__set($name,$value);
448
+ }
449
+ }
450
+
451
+ /**
452
+ * Checks if a property value is null.
453
+ * This method overrides the parent implementation by checking
454
+ * if the named attribute is null or not.
455
+ * @param string the property name or the event name
456
+ * @return boolean whether the property value is null
457
+ * @since 1.0.1
458
+ */
459
+ public function __isset($name)
460
+ {
461
+ if(isset($this->_attributes[$name]))
462
+ return true;
463
+ else if(isset($this->getMetaData()->columns[$name]))
464
+ return false;
465
+ else if(isset($this->_related[$name]))
466
+ return true;
467
+ else if(isset($this->getMetaData()->relations[$name]))
468
+ return $this->getRelated($name)!==null;
469
+ else
470
+ return parent::__isset($name);
471
+ }
472
+
473
+ /**
474
+ * Sets a component property to be null.
475
+ * This method overrides the parent implementation by clearing
476
+ * the specified attribute value.
477
+ * @param string the property name or the event name
478
+ * @since 1.0.1
479
+ */
480
+ public function __unset($name)
481
+ {
482
+ if(isset($this->getMetaData()->columns[$name]))
483
+ unset($this->_attributes[$name]);
484
+ else if(isset($this->getMetaData()->relations[$name]))
485
+ unset($this->_related[$name]);
486
+ else
487
+ parent::__unset($name);
488
+ }
489
+
490
+ /**
491
+ * Calls the named method which is not a class method.
492
+ * Do not call this method. This is a PHP magic method that we override
493
+ * to implement the named scope feature.
494
+ * @param string the method name
495
+ * @param array method parameters
496
+ * @return mixed the method return value
497
+ * @since 1.0.5
498
+ */
499
+ public function __call($name,$parameters)
500
+ {
501
+ if(isset($this->getMetaData()->relations[$name]))
502
+ {
503
+ if(empty($parameters))
504
+ return $this->getRelated($name,false);
505
+ else
506
+ return $this->getRelated($name,false,$parameters[0]);
507
+ }
508
+
509
+ $scopes=$this->scopes();
510
+ if(isset($scopes[$name]))
511
+ {
512
+ $this->getDbCriteria()->mergeWith($scopes[$name]);
513
+ return $this;
514
+ }
515
+
516
+ return parent::__call($name,$parameters);
517
+ }
518
+
519
+ /**
520
+ * Returns the related record(s).
521
+ * This method will return the related record(s) of the current record.
522
+ * If the relation is HAS_ONE or BELONGS_TO, it will return a single object
523
+ * or null if the object does not exist.
524
+ * If the relation is HAS_MANY or MANY_MANY, it will return an array of objects
525
+ * or an empty array.
526
+ * @param string the relation name (see {@link relations})
527
+ * @param boolean whether to reload the related objects from database. Defaults to false.
528
+ * @param array additional parameters that customize the query conditions as specified in the relation declaration.
529
+ * This parameter has been available since version 1.0.5.
530
+ * @return mixed the related object(s).
531
+ * @throws CDbException if the relation is not specified in {@link relations}.
532
+ * @since 1.0.2
533
+ */
534
+ public function getRelated($name,$refresh=false,$params=array())
535
+ {
536
+ if(!$refresh && $params===array() && (isset($this->_related[$name]) || array_key_exists($name,$this->_related)))
537
+ return $this->_related[$name];
538
+
539
+ $md=$this->getMetaData();
540
+ if(!isset($md->relations[$name]))
541
+ throw new CDbException(Yii::t('yii','{class} does not have relation "{name}".',
542
+ array('{class}'=>get_class($this), '{name}'=>$name)));
543
+
544
+ Yii::trace('lazy loading '.get_class($this).'.'.$name,'system.db.ar.CActiveRecord');
545
+ $relation=$md->relations[$name];
546
+ if($this->getIsNewRecord() && ($relation instanceof CHasOneRelation || $relation instanceof CHasManyRelation))
547
+ return $relation instanceof CHasOneRelation ? null : array();
548
+
549
+ if($params!==array()) // dynamic query
550
+ {
551
+ $exists=isset($this->_related[$name]) || array_key_exists($name,$this->_related);
552
+ if($exists)
553
+ $save=$this->_related[$name];
554
+ unset($this->_related[$name]);
555
+ $r=array($name=>$params);
556
+ }
557
+ else
558
+ $r=$name;
559
+
560
+ $finder=new CActiveFinder($this,$r);
561
+ $finder->lazyFind($this);
562
+
563
+ if(!isset($this->_related[$name]))
564
+ {
565
+ if($relation instanceof CHasManyRelation)
566
+ $this->_related[$name]=array();
567
+ else if($relation instanceof CStatRelation)
568
+ $this->_related[$name]=$relation->defaultValue;
569
+ else
570
+ $this->_related[$name]=null;
571
+ }
572
+
573
+ if($params!==array())
574
+ {
575
+ $results=$this->_related[$name];
576
+ if($exists)
577
+ $this->_related[$name]=$save;
578
+ else
579
+ unset($this->_related[$name]);
580
+ return $results;
581
+ }
582
+ else
583
+ return $this->_related[$name];
584
+ }
585
+
586
+ /**
587
+ * Returns a value indicating whether the named related object(s) has been loaded.
588
+ * @param string the relation name
589
+ * @return booolean a value indicating whether the named related object(s) has been loaded.
590
+ * @since 1.0.3
591
+ */
592
+ public function hasRelated($name)
593
+ {
594
+ return isset($this->_related[$name]) || array_key_exists($name,$this->_related);
595
+ }
596
+
597
+ /**
598
+ * Returns the query criteria associated with this model.
599
+ * @param boolean whether to create a criteria instance if it does not exist. Defaults to true.
600
+ * @return CDbCriteria the query criteria that is associated with this model.
601
+ * This criteria is mainly used by {@link scopes named scope} feature to accumulate
602
+ * different criteria specifications.
603
+ * @since 1.0.5
604
+ */
605
+ public function getDbCriteria($createIfNull=true)
606
+ {
607
+ if($this->_c===null)
608
+ {
609
+ if(($c=$this->defaultScope())!==array() || $createIfNull)
610
+ $this->_c=new CDbCriteria($c);
611
+ }
612
+ return $this->_c;
613
+ }
614
+
615
+ /**
616
+ * Returns the default named scope that should be implicitly applied to all queries for this model.
617
+ * Note, default scope only applies to SELECT queries. It is ignored for INSERT, UPDATE and DELETE queries.
618
+ * The default implementation simply returns an empty array. You may override this method
619
+ * if the model needs to be queried with some default criteria (e.g. only active records should be returned).
620
+ * @return array the query criteria. This will be used as the parameter to the constructor
621
+ * of {@link CDbCriteria}.
622
+ * @since 1.0.5
623
+ */
624
+ public function defaultScope()
625
+ {
626
+ return array();
627
+ }
628
+
629
+ /**
630
+ * Returns the static model of the specified AR class.
631
+ * The model returned is a static instance of the AR class.
632
+ * It is provided for invoking class-level methods (something similar to static class methods.)
633
+ *
634
+ * EVERY derived AR class must override this method as follows,
635
+ * <pre>
636
+ * public static function model($className=__CLASS__)
637
+ * {
638
+ * return parent::model($className);
639
+ * }
640
+ * </pre>
641
+ *
642
+ * @param string active record class name.
643
+ * @return CActiveRecord active record model instance.
644
+ */
645
+ public static function model($className=__CLASS__)
646
+ {
647
+ if(isset(self::$_models[$className]))
648
+ return self::$_models[$className];
649
+ else
650
+ {
651
+ $model=self::$_models[$className]=new $className(null);
652
+ $model->attachBehaviors($model->behaviors());
653
+ $model->_md=new CActiveRecordMetaData($model);
654
+ return $model;
655
+ }
656
+ }
657
+
658
+ /**
659
+ * @return CActiveRecordMetaData the meta for this AR class.
660
+ */
661
+ public function getMetaData()
662
+ {
663
+ if($this->_md!==null)
664
+ return $this->_md;
665
+ else
666
+ return $this->_md=self::model(get_class($this))->_md;
667
+ }
668
+
669
+ /**
670
+ * Refreshes the meta data for this AR class.
671
+ * By calling this method, this AR class will regenerate the meta data needed.
672
+ * This is useful if the table schema has been changed and you want to use the latest
673
+ * available table schema. Make sure you have called {@link CDbSchema::refresh}
674
+ * before you call this method. Otherwise, old table schema data will still be used.
675
+ * @since 1.0.8
676
+ */
677
+ public function refreshMetaData()
678
+ {
679
+ $finder=self::model(get_class($this));
680
+ $finder->_md=new CActiveRecordMetaData($finder);
681
+ if($this!==$finder)
682
+ $this->_md=$finder->_md;
683
+ }
684
+
685
+ /**
686
+ * Returns the name of the associated database table.
687
+ * By default this method returns the class name as the table name.
688
+ * You may override this method if the table is not named after this convention.
689
+ * @return string the table name
690
+ */
691
+ public function tableName()
692
+ {
693
+ return get_class($this);
694
+ }
695
+
696
+ /**
697
+ * Returns the primary key of the associated database table.
698
+ * This method is meant to be overridden in case when the table is not defined with a primary key
699
+ * (for some legency database). If the table is already defined with a primary key,
700
+ * you do not need to override this method. The default implementation simply returns null,
701
+ * meaning using the primary key defined in the database.
702
+ * @return mixed the primary key of the associated database table.
703
+ * If the key is a single column, it should return the column name;
704
+ * If the key is a composite one consisting of several columns, it should
705
+ * return the array of the key column names.
706
+ * @since 1.0.4
707
+ */
708
+ public function primaryKey()
709
+ {
710
+ }
711
+
712
+ /**
713
+ * This method should be overridden to declare related objects.
714
+ *
715
+ * There are four types of relations that may exist between two active record objects:
716
+ * <ul>
717
+ * <li>BELONGS_TO: e.g. a member belongs to a team;</li>
718
+ * <li>HAS_ONE: e.g. a member has at most one profile;</li>
719
+ * <li>HAS_MANY: e.g. a team has many members;</li>
720
+ * <li>MANY_MANY: e.g. a member has many skills and a skill belongs to a member.</li>
721
+ * </ul>
722
+ *
723
+ * By declaring these relations, CActiveRecord can bring back related objects
724
+ * in either lazy loading or eager loading approach, and you save the effort of
725
+ * writing complex JOIN SQL statements.
726
+ *
727
+ * Each kind of related objects is defined in this method as an array with the following elements:
728
+ * <pre>
729
+ * 'varName'=>array('relationType', 'className', 'foreignKey', ...additional options)
730
+ * </pre>
731
+ * where 'varName' refers to the name of the variable/property that the related object(s) can
732
+ * be accessed through; 'relationType' refers to the type of the relation, which can be one of the
733
+ * following four constants: self::BELONGS_TO, self::HAS_ONE, self::HAS_MANY and self::MANY_MANY;
734
+ * 'className' refers to the name of the active record class that the related object(s) is of;
735
+ * and 'foreignKey' states the foreign key that relates the two kinds of active record.
736
+ * Note, for composite foreign keys, they must be listed together, separating with space or comma;
737
+ * and for foreign keys used in MANY_MANY relation, the joining table must be declared as well
738
+ * (e.g. 'joinTable(fk1, fk2)').
739
+ *
740
+ * Additional options may be specified as name-value pairs in the rest array elements:
741
+ * <ul>
742
+ * <li>'select': string|array, a list of columns to be selected. Defaults to '*', meaning all columns.
743
+ * Column names should be disambiguated if they appear in an expression (e.g. COUNT(??.name) AS name_count).</li>
744
+ * <li>'condition': string, the WHERE clause. Defaults to empty. Note, column references need to
745
+ * be disambiguated with prefix '??.' (e.g. ??.age&gt;20)</li>
746
+ * <li>'order': string, the ORDER BY clause. Defaults to empty. Note, column references need to
747
+ * be disambiguated with prefix '??.' (e.g. ??.age DESC)</li>
748
+ * <li>'with': string|array, a list of child related objects that should be loaded together with this object.
749
+ * Note, this is only honored by lazy loading, not eager loading.</li>
750
+ * <li>'joinType': type of join. Defaults to 'LEFT OUTER JOIN'.</li>
751
+ * <li>'aliasToken': the column prefix for column reference disambiguation. Defaults to '??.'.</li>
752
+ * <li>'alias': the alias for the table associated with this relationship.
753
+ * This option has been available since version 1.0.1. It defaults to null,
754
+ * meaning the table alias is automatically generated. This is different
755
+ * from `aliasToken` in that the latter is just a placeholder and will be
756
+ * replaced by the actual table alias.</li>
757
+ * <li>'params': the parameters to be bound to the generated SQL statement.
758
+ * This should be given as an array of name-value pairs. This option has been
759
+ * available since version 1.0.3.</li>
760
+ * <li>'on': the ON clause. The condition specified here will be appended
761
+ * to the joining condition using the AND operator. This option has been
762
+ * available since version 1.0.2.</li>
763
+ * <li>'index': the name of the column whose values should be used as keys
764
+ * of the array that stores related objects. This option is only available to
765
+ * HAS_MANY and MANY_MANY relations. This option has been available since version 1.0.7.</li>
766
+ * </ul>
767
+ *
768
+ * The following options are available for certain relations when lazy loading:
769
+ * <ul>
770
+ * <li>'group': string, the GROUP BY clause. Defaults to empty. Note, column references need to
771
+ * be disambiguated with prefix '??.' (e.g. ??.age). This option only applies to HAS_MANY and MANY_MANY relations.</li>
772
+ * <li>'having': string, the HAVING clause. Defaults to empty. Note, column references need to
773
+ * be disambiguated with prefix '??.' (e.g. ??.age). This option only applies to HAS_MANY and MANY_MANY relations.</li>
774
+ * <li>'limit': limit of the rows to be selected. This option does not apply to BELONGS_TO relation.</li>
775
+ * <li>'offset': offset of the rows to be selected. This option does not apply to BELONGS_TO relation.</li>
776
+ * </ul>
777
+ *
778
+ * Below is an example declaring related objects for 'Post' active record class:
779
+ * <pre>
780
+ * return array(
781
+ * 'author'=>array(self::BELONGS_TO, 'User', 'authorID'),
782
+ * 'comments'=>array(self::HAS_MANY, 'Comment', 'postID', 'with'=>'author', 'order'=>'createTime DESC'),
783
+ * 'tags'=>array(self::MANY_MANY, 'Tag', 'PostTag(postID, tagID)', 'order'=>'name'),
784
+ * );
785
+ * </pre>
786
+ *
787
+ * @return array list of related object declarations. Defaults to empty array.
788
+ */
789
+ public function relations()
790
+ {
791
+ return array();
792
+ }
793
+
794
+ /**
795
+ * Returns the declaration of named scopes.
796
+ * A named scope represents a query criteria that can be chained together with
797
+ * other named scopes and applied to a query. This method should be overridden
798
+ * by child classes to declare named scopes for the particular AR classes.
799
+ * For example, the following code declares two named scopes: 'recently' and
800
+ * 'published'.
801
+ * <pre>
802
+ * return array(
803
+ * 'published'=>array(
804
+ * 'condition'=>'status=1',
805
+ * ),
806
+ * 'recently'=>array(
807
+ * 'order'=>'createTime DESC',
808
+ * 'limit'=>5,
809
+ * ),
810
+ * );
811
+ * </pre>
812
+ * If the above scopes are declared in a 'Post' model, we can perform the following
813
+ * queries:
814
+ * <pre>
815
+ * $posts=Post::model()->published()->findAll();
816
+ * $posts=Post::model()->published()->recently()->findAll();
817
+ * $posts=Post::model()->published()->with('comments')->findAll();
818
+ * </pre>
819
+ * Note that the last query is a relational query.
820
+ *
821
+ * @return array the scope definition. The array keys are scope names; the array
822
+ * values are the corresponding scope definitions. Each scope definition is represented
823
+ * as an array whose keys must be properties of {@link CDbCriteria}.
824
+ * @since 1.0.5
825
+ */
826
+ public function scopes()
827
+ {
828
+ return array();
829
+ }
830
+
831
+ /**
832
+ * Returns the list of all attribute names of the model.
833
+ * This would return all column names of the table associated with this AR class.
834
+ * @return array list of attribute names.
835
+ * @since 1.0.1
836
+ */
837
+ public function attributeNames()
838
+ {
839
+ return array_keys($this->getMetaData()->columns);
840
+ }
841
+
842
+ /**
843
+ * Returns the name of attributes that are safe to be massively assigned.
844
+ * The default implementation returns all table columns exception primary key(s).
845
+ * Child class may override this method to further limit the attributes that can be massively assigned.
846
+ * See {@link CModel::safeAttributes} on how to override this method.
847
+ * @return array list of safe attribute names.
848
+ * @see CModel::safeAttributes
849
+ */
850
+ public function safeAttributes()
851
+ {
852
+ $attributes=array();
853
+ foreach($this->getMetaData()->columns as $name=>$column)
854
+ {
855
+ if(!$column->isPrimaryKey)
856
+ $attributes[]=$name;
857
+ }
858
+ return $attributes;
859
+ }
860
+
861
+ /**
862
+ * Returns the database connection used by active record.
863
+ * By default, the "db" application component is used as the database connection.
864
+ * You may override this method if you want to use a different database connection.
865
+ * @return CDbConnection the database connection used by active record.
866
+ */
867
+ public function getDbConnection()
868
+ {
869
+ if(self::$db!==null)
870
+ return self::$db;
871
+ else
872
+ {
873
+ self::$db=Yii::app()->getDb();
874
+ if(self::$db instanceof CDbConnection)
875
+ {
876
+ self::$db->setActive(true);
877
+ return self::$db;
878
+ }
879
+ else
880
+ throw new CDbException(Yii::t('yii','Active Record requires a "db" CDbConnection application component.'));
881
+ }
882
+ }
883
+
884
+ /**
885
+ * @param string the relation name
886
+ * @return CActiveRelation the named relation declared for this AR class. Null if the relation does not exist.
887
+ */
888
+ public function getActiveRelation($name)
889
+ {
890
+ return isset($this->getMetaData()->relations[$name]) ? $this->getMetaData()->relations[$name] : null;
891
+ }
892
+
893
+ /**
894
+ * @return CDbTableSchema the metadata of the table that this AR belongs to
895
+ */
896
+ public function getTableSchema()
897
+ {
898
+ return $this->getMetaData()->tableSchema;
899
+ }
900
+
901
+ /**
902
+ * @return CDbCommandBuilder the command builder used by this AR
903
+ */
904
+ public function getCommandBuilder()
905
+ {
906
+ return $this->getDbConnection()->getSchema()->getCommandBuilder();
907
+ }
908
+
909
+ /**
910
+ * @param string attribute name
911
+ * @return boolean whether this AR has the named attribute (table column).
912
+ */
913
+ public function hasAttribute($name)
914
+ {
915
+ return isset($this->getMetaData()->columns[$name]);
916
+ }
917
+
918
+ /**
919
+ * Returns the named attribute value.
920
+ * If this is a new record and the attribute is not set before,
921
+ * the default column value will be returned.
922
+ * If this record is the result of a query and the attribute is not loaded,
923
+ * null will be returned.
924
+ * You may also use $this->AttributeName to obtain the attribute value.
925
+ * @param string the attribute name
926
+ * @return mixed the attribute value. Null if the attribute is not set or does not exist.
927
+ * @see hasAttribute
928
+ */
929
+ public function getAttribute($name)
930
+ {
931
+ if(property_exists($this,$name))
932
+ return $this->$name;
933
+ else if(isset($this->_attributes[$name]))
934
+ return $this->_attributes[$name];
935
+ }
936
+
937
+ /**
938
+ * Sets the named attribute value.
939
+ * You may also use $this->AttributeName to set the attribute value.
940
+ * @param string the attribute name
941
+ * @param mixed the attribute value.
942
+ * @return boolean whether the attribute exists and the assignment is conducted successfully
943
+ * @see hasAttribute
944
+ */
945
+ public function setAttribute($name,$value)
946
+ {
947
+ if(property_exists($this,$name))
948
+ $this->$name=$value;
949
+ else if(isset($this->getMetaData()->columns[$name]))
950
+ $this->_attributes[$name]=$value;
951
+ else
952
+ return false;
953
+ return true;
954
+ }
955
+
956
+ /**
957
+ * Adds a related object to this record.
958
+ * This method is used internally by {@link CActiveFinder} to populate related objects.
959
+ * @param string attribute name
960
+ * @param mixed the related record
961
+ * @param mixed the index value in the related object collection.
962
+ * If true, it means using zero-based integer index.
963
+ * If false, it means a HAS_ONE or BELONGS_TO object and no index is needed.
964
+ */
965
+ public function addRelatedRecord($name,$record,$index)
966
+ {
967
+ if($index!==false)
968
+ {
969
+ if(!isset($this->_related[$name]))
970
+ $this->_related[$name]=array();
971
+ if($record instanceof CActiveRecord)
972
+ {
973
+ if($index===true)
974
+ $this->_related[$name][]=$record;
975
+ else
976
+ $this->_related[$name][$index]=$record;
977
+ }
978
+ }
979
+ else if(!isset($this->_related[$name]))
980
+ $this->_related[$name]=$record;
981
+ }
982
+
983
+ /**
984
+ * Returns all column attribute values.
985
+ * Note, related objects are not returned.
986
+ * @param mixed names of attributes whose value needs to be returned.
987
+ * If this is true (default), then all attribute values will be returned, including
988
+ * those that are not loaded from DB (null will be returned for those attributes).
989
+ * If this is null, all attributes except those that are not loaded from DB will be returned.
990
+ * @return array attribute values indexed by attribute names.
991
+ */
992
+ public function getAttributes($names=true)
993
+ {
994
+ $attributes=$this->_attributes;
995
+ foreach($this->getMetaData()->columns as $name=>$column)
996
+ {
997
+ if(property_exists($this,$name))
998
+ $attributes[$name]=$this->$name;
999
+ else if($names===true && !isset($attributes[$name]))
1000
+ $attributes[$name]=null;
1001
+ }
1002
+ if(is_array($names))
1003
+ {
1004
+ $attrs=array();
1005
+ foreach($names as $name)
1006
+ $attrs[$name]=isset($attributes[$name])?$attributes[$name]:null;
1007
+ return $attrs;
1008
+ }
1009
+ else
1010
+ return $attributes;
1011
+ }
1012
+
1013
+ /**
1014
+ * Saves the current record.
1015
+ * The record is inserted as a row into the database table if it is manually
1016
+ * created using the 'new' operator. If it is obtained using one of those
1017
+ * 'find' methods, the record is considered not new and it will be used to
1018
+ * update the corresponding row in the table. You may check this status via {@link isNewRecord}.
1019
+ * Validation may be performed before saving the record. If the validation fails,
1020
+ * the record will not be saved.
1021
+ * If the record is being inserted and its primary key is null,
1022
+ * after insertion the primary key will be populated with the value
1023
+ * generated automatically by the database.
1024
+ * @param boolean whether to perform validation before saving the record.
1025
+ * If the validation fails, the record will not be saved to database.
1026
+ * The validation will be performed under either 'insert' or 'update' scenario,
1027
+ * depending on whether {@link isNewRecord} is true or false.
1028
+ * @param array list of attributes that need to be saved. Defaults to null,
1029
+ * meaning all attributes that are loaded from DB will be saved.
1030
+ * @return boolean whether the saving succeeds
1031
+ */
1032
+ public function save($runValidation=true,$attributes=null)
1033
+ {
1034
+ if(($scenario=$this->getScenario())==='')
1035
+ $scenario=$this->getIsNewRecord()?'insert':'update';
1036
+ if(!$runValidation || $this->validate($scenario,$attributes))
1037
+ return $this->getIsNewRecord() ? $this->insert($attributes) : $this->update($attributes);
1038
+ else
1039
+ return false;
1040
+ }
1041
+
1042
+ /**
1043
+ * @return boolean whether the record is new and should be inserted when calling {@link save}.
1044
+ * This property is automatically set in constructor and {@link populateRecord}.
1045
+ * Defaults to false, but it will be set to true if the instance is created using
1046
+ * the new operator.
1047
+ */
1048
+ public function getIsNewRecord()
1049
+ {
1050
+ return $this->_new;
1051
+ }
1052
+
1053
+ /**
1054
+ * @param boolean whether the record is new and should be inserted when calling {@link save}.
1055
+ * @see getIsNewRecord
1056
+ */
1057
+ public function setIsNewRecord($value)
1058
+ {
1059
+ $this->_new=$value;
1060
+ if(!$value && $this->getScenario()==='insert')
1061
+ $this->setScenario('update');
1062
+ }
1063
+
1064
+ /**
1065
+ * Returns a list of validators created according to {@link CModel::rules rules}.
1066
+ * This overrides the parent implementation so that the validators are only
1067
+ * created once for each type of AR.
1068
+ * @return array a list of validators created according to {@link CModel::rules}.
1069
+ * @since 1.0.1
1070
+ */
1071
+ public function getValidators()
1072
+ {
1073
+ return $this->getMetaData()->getValidators();
1074
+ }
1075
+
1076
+ /**
1077
+ * This event is raised before the record is saved.
1078
+ * @param CEvent the event parameter
1079
+ * @since 1.0.2
1080
+ */
1081
+ public function onBeforeSave($event)
1082
+ {
1083
+ $this->raiseEvent('onBeforeSave',$event);
1084
+ }
1085
+
1086
+ /**
1087
+ * This event is raised after the record is saved.
1088
+ * @param CEvent the event parameter
1089
+ * @since 1.0.2
1090
+ */
1091
+ public function onAfterSave($event)
1092
+ {
1093
+ $this->raiseEvent('onAfterSave',$event);
1094
+ }
1095
+
1096
+ /**
1097
+ * This event is raised before the record is deleted.
1098
+ * @param CEvent the event parameter
1099
+ * @since 1.0.2
1100
+ */
1101
+ public function onBeforeDelete($event)
1102
+ {
1103
+ $this->raiseEvent('onBeforeDelete',$event);
1104
+ }
1105
+
1106
+ /**
1107
+ * This event is raised after the record is deleted.
1108
+ * @param CEvent the event parameter
1109
+ * @since 1.0.2
1110
+ */
1111
+ public function onAfterDelete($event)
1112
+ {
1113
+ $this->raiseEvent('onAfterDelete',$event);
1114
+ }
1115
+
1116
+ /**
1117
+ * This event is raised after the record instance is created by new operator.
1118
+ * @param CEvent the event parameter
1119
+ * @since 1.0.2
1120
+ */
1121
+ public function onAfterConstruct($event)
1122
+ {
1123
+ $this->raiseEvent('onAfterConstruct',$event);
1124
+ }
1125
+
1126
+ /**
1127
+ * This event is raised after the record is instantiated by a find method.
1128
+ * @param CEvent the event parameter
1129
+ * @since 1.0.2
1130
+ */
1131
+ public function onAfterFind($event)
1132
+ {
1133
+ $this->raiseEvent('onAfterFind',$event);
1134
+ }
1135
+
1136
+ /**
1137
+ * This method is invoked before saving a record (after validation, if any).
1138
+ * The default implementation raises the {@link onBeforeSave} event.
1139
+ * You may override this method to do any preparation work for record saving.
1140
+ * Use {@link isNewRecord} to determine whether the saving is
1141
+ * for inserting or updating record.
1142
+ * Make sure you call the parent implementation so that the event is raised properly.
1143
+ * @return boolean whether the saving should be executed. Defaults to true.
1144
+ */
1145
+ protected function beforeSave()
1146
+ {
1147
+ $event=new CModelEvent($this);
1148
+ $this->onBeforeSave($event);
1149
+ return $event->isValid;
1150
+ }
1151
+
1152
+ /**
1153
+ * This method is invoked after saving a record.
1154
+ * The default implementation raises the {@link onAfterSave} event.
1155
+ * You may override this method to do postprocessing after record saving.
1156
+ * Make sure you call the parent implementation so that the event is raised properly.
1157
+ */
1158
+ protected function afterSave()
1159
+ {
1160
+ $this->onAfterSave(new CEvent($this));
1161
+ }
1162
+
1163
+ /**
1164
+ * This method is invoked before deleting a record.
1165
+ * The default implementation raises the {@link onBeforeDelete} event.
1166
+ * You may override this method to do any preparation work for record deletion.
1167
+ * Make sure you call the parent implementation so that the event is raised properly.
1168
+ * @return boolean whether the record should be deleted. Defaults to true.
1169
+ */
1170
+ protected function beforeDelete()
1171
+ {
1172
+ $event=new CModelEvent($this);
1173
+ $this->onBeforeDelete($event);
1174
+ return $event->isValid;
1175
+ }
1176
+
1177
+ /**
1178
+ * This method is invoked after deleting a record.
1179
+ * The default implementation raises the {@link onAfterDelete} event.
1180
+ * You may override this method to do postprocessing after the record is deleted.
1181
+ * Make sure you call the parent implementation so that the event is raised properly.
1182
+ */
1183
+ protected function afterDelete()
1184
+ {
1185
+ $this->onAfterDelete(new CEvent($this));
1186
+ }
1187
+
1188
+ /**
1189
+ * This method is invoked after a record instance is created by new operator.
1190
+ * The default implementation raises the {@link onAfterConstruct} event.
1191
+ * You may override this method to do postprocessing after record creation.
1192
+ * Make sure you call the parent implementation so that the event is raised properly.
1193
+ */
1194
+ protected function afterConstruct()
1195
+ {
1196
+ $this->onAfterConstruct(new CEvent($this));
1197
+ }
1198
+
1199
+ /**
1200
+ * This method is invoked after each record is instantiated by a find method.
1201
+ * The default implementation raises the {@link onAfterFind} event.
1202
+ * You may override this method to do postprocessing after each newly found record is instantiated.
1203
+ * Make sure you call the parent implementation so that the event is raised properly.
1204
+ */
1205
+ protected function afterFind()
1206
+ {
1207
+ $this->onAfterFind(new CEvent($this));
1208
+ }
1209
+
1210
+ /**
1211
+ * Calls {@link afterFind}.
1212
+ * This method is internally used.
1213
+ * @since 1.0.3
1214
+ */
1215
+ public function afterFindInternal()
1216
+ {
1217
+ $this->afterFind();
1218
+ }
1219
+
1220
+ /**
1221
+ * Inserts a row into the table based on this active record attributes.
1222
+ * If the table's primary key is auto-incremental and is null before insertion,
1223
+ * it will be populated with the actual value after insertion.
1224
+ * Note, validation is not performed in this method. You may call {@link validate} to perform the validation.
1225
+ * @param array list of attributes that need to be saved. Defaults to null,
1226
+ * meaning all attributes that are loaded from DB will be saved.
1227
+ * @return boolean whether the attributes are valid and the record is inserted successfully.
1228
+ * @throws CException if the record is not new
1229
+ */
1230
+ public function insert($attributes=null)
1231
+ {
1232
+ if(!$this->getIsNewRecord())
1233
+ throw new CDbException(Yii::t('yii','The active record cannot be inserted to database because it is not new.'));
1234
+ if($this->beforeSave())
1235
+ {
1236
+ Yii::trace(get_class($this).'.insert()','system.db.ar.CActiveRecord');
1237
+ $builder=$this->getCommandBuilder();
1238
+ $table=$this->getMetaData()->tableSchema;
1239
+ $command=$builder->createInsertCommand($table,$this->getAttributes($attributes));
1240
+ if($command->execute())
1241
+ {
1242
+ $primaryKey=$table->primaryKey;
1243
+ if($table->sequenceName!==null)
1244
+ {
1245
+ if(is_string($primaryKey) && $this->$primaryKey===null)
1246
+ $this->$primaryKey=$builder->getLastInsertID($table);
1247
+ else if(is_array($primaryKey))
1248
+ {
1249
+ foreach($primaryKey as $pk)
1250
+ {
1251
+ if($this->$pk===null)
1252
+ {
1253
+ $this->$pk=$builder->getLastInsertID($table);
1254
+ break;
1255
+ }
1256
+ }
1257
+ }
1258
+ }
1259
+ $this->afterSave();
1260
+ $this->setIsNewRecord(false);
1261
+ return true;
1262
+ }
1263
+ else
1264
+ $this->afterSave();
1265
+ }
1266
+ else
1267
+ return false;
1268
+ }
1269
+
1270
+ /**
1271
+ * Updates the row represented by this active record.
1272
+ * All loaded attributes will be saved to the database.
1273
+ * Note, validation is not performed in this method. You may call {@link validate} to perform the validation.
1274
+ * @param array list of attributes that need to be saved. Defaults to null,
1275
+ * meaning all attributes that are loaded from DB will be saved.
1276
+ * @return boolean whether the update is successful
1277
+ * @throws CException if the record is new
1278
+ */
1279
+ public function update($attributes=null)
1280
+ {
1281
+ if($this->getIsNewRecord())
1282
+ throw new CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
1283
+ if($this->beforeSave())
1284
+ {
1285
+ Yii::trace(get_class($this).'.update()','system.db.ar.CActiveRecord');
1286
+ $this->updateByPk($this->getPrimaryKey(),$this->getAttributes($attributes));
1287
+ $this->afterSave();
1288
+ return true;
1289
+ }
1290
+ else
1291
+ return false;
1292
+ }
1293
+
1294
+ /**
1295
+ * Saves a selected list of attributes.
1296
+ * Unlike {@link save}, this method only saves the specified attributes
1297
+ * of an existing row dataset. It thus has better performance.
1298
+ * Note, this method does neither attribute filtering nor validation.
1299
+ * So do not use this method with untrusted data (such as user posted data).
1300
+ * You may consider the following alternative if you want to do so:
1301
+ * <pre>
1302
+ * $postRecord=Post::model()->findByPk($postID);
1303
+ * $postRecord->attributes=$_POST['post'];
1304
+ * $postRecord->save();
1305
+ * </pre>
1306
+ * @param array attributes to be updated. Each element represents an attribute name
1307
+ * or an attribute value indexed by its name. If the latter, the record's
1308
+ * attribute will be changed accordingly before saving.
1309
+ * @return boolean whether the update is successful
1310
+ * @throws CException if the record is new or any database error
1311
+ */
1312
+ public function saveAttributes($attributes)
1313
+ {
1314
+ if(!$this->getIsNewRecord())
1315
+ {
1316
+ Yii::trace(get_class($this).'.saveAttributes()','system.db.ar.CActiveRecord');
1317
+ $values=array();
1318
+ foreach($attributes as $name=>$value)
1319
+ {
1320
+ if(is_integer($name))
1321
+ $values[$value]=$this->$value;
1322
+ else
1323
+ $values[$name]=$this->$name=$value;
1324
+ }
1325
+ return $this->updateByPk($this->getPrimaryKey(),$values)>0;
1326
+ }
1327
+ else
1328
+ throw new CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
1329
+ }
1330
+
1331
+ /**
1332
+ * Deletes the row corresponding to this active record.
1333
+ * @return boolean whether the deletion is successful.
1334
+ * @throws CException if the record is new
1335
+ */
1336
+ public function delete()
1337
+ {
1338
+ if(!$this->getIsNewRecord())
1339
+ {
1340
+ Yii::trace(get_class($this).'.delete()','system.db.ar.CActiveRecord');
1341
+ if($this->beforeDelete())
1342
+ {
1343
+ $result=$this->deleteByPk($this->getPrimaryKey())>0;
1344
+ $this->afterDelete();
1345
+ return $result;
1346
+ }
1347
+ else
1348
+ return false;
1349
+ }
1350
+ else
1351
+ throw new CDbException(Yii::t('yii','The active record cannot be deleted because it is new.'));
1352
+ }
1353
+
1354
+ /**
1355
+ * Repopulates this active record with the latest data.
1356
+ * @return boolean whether the row still exists in the database. If true, the latest data will be populated to this active record.
1357
+ */
1358
+ public function refresh()
1359
+ {
1360
+ Yii::trace(get_class($this).'.refresh()','system.db.ar.CActiveRecord');
1361
+ if(!$this->getIsNewRecord() && ($record=$this->findByPk($this->getPrimaryKey()))!==null)
1362
+ {
1363
+ $this->_attributes=array();
1364
+ $this->_related=array();
1365
+ foreach($this->getMetaData()->columns as $name=>$column)
1366
+ $this->$name=$record->$name;
1367
+ return true;
1368
+ }
1369
+ else
1370
+ return false;
1371
+ }
1372
+
1373
+ /**
1374
+ * Compares this active record with another one.
1375
+ * The comparison is made by comparing the primary key values of the two active records.
1376
+ * @return boolean whether the two active records refer to the same row in the database table.
1377
+ */
1378
+ public function equals($record)
1379
+ {
1380
+ return $this->tableName()===$record->tableName() && $this->getPrimaryKey()===$record->getPrimaryKey();
1381
+ }
1382
+
1383
+ /**
1384
+ * @return mixed the primary key value. An array (column name=>column value) is returned if the primary key is composite.
1385
+ * If primary key is not defined, null will be returned.
1386
+ */
1387
+ public function getPrimaryKey()
1388
+ {
1389
+ $table=$this->getMetaData()->tableSchema;
1390
+ if(is_string($table->primaryKey))
1391
+ return $this->{$table->primaryKey};
1392
+ else if(is_array($table->primaryKey))
1393
+ {
1394
+ $values=array();
1395
+ foreach($table->primaryKey as $name)
1396
+ $values[$name]=$this->$name;
1397
+ return $values;
1398
+ }
1399
+ else
1400
+ return null;
1401
+ }
1402
+
1403
+ private function query($criteria,$all=false)
1404
+ {
1405
+ $this->applyScopes($criteria);
1406
+ $command=$this->getCommandBuilder()->createFindCommand($this->getTableSchema(),$criteria);
1407
+ return $all ? $this->populateRecords($command->queryAll()) : $this->populateRecord($command->queryRow());
1408
+ }
1409
+
1410
+ private function applyScopes(&$criteria)
1411
+ {
1412
+ if(($c=$this->getDbCriteria(false))!==null)
1413
+ {
1414
+ $c->mergeWith($criteria);
1415
+ $criteria=$c;
1416
+ $this->_c=null;
1417
+ }
1418
+ }
1419
+
1420
+ /**
1421
+ * Finds a single active record with the specified condition.
1422
+ * @param mixed query condition or criteria.
1423
+ * If a string, it is treated as query condition (the WHERE clause);
1424
+ * If an array, it is treated as the initial values for constructing a {@link CDbCriteria} object;
1425
+ * Otherwise, it should be an instance of {@link CDbCriteria}.
1426
+ * @param array parameters to be bound to an SQL statement.
1427
+ * This is only used when the first parameter is a string (query condition).
1428
+ * In other cases, please use {@link CDbCriteria::params} to set parameters.
1429
+ * @return CActiveRecord the record found. Null if no record is found.
1430
+ */
1431
+ public function find($condition='',$params=array())
1432
+ {
1433
+ Yii::trace(get_class($this).'.find()','system.db.ar.CActiveRecord');
1434
+ $criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
1435
+ $criteria->limit=1;
1436
+ return $this->query($criteria);
1437
+ }
1438
+
1439
+ /**
1440
+ * Finds all active records satisfying the specified condition.
1441
+ * See {@link find()} for detailed explanation about $condition and $params.
1442
+ * @param mixed query condition or criteria.
1443
+ * @param array parameters to be bound to an SQL statement.
1444
+ * @return array list of active records satisfying the specified condition. An empty array is returned if none is found.
1445
+ */
1446
+ public function findAll($condition='',$params=array())
1447
+ {
1448
+ Yii::trace(get_class($this).'.findAll()','system.db.ar.CActiveRecord');
1449
+ $criteria=$this->getCommandBuilder()->createCriteria($condition,$params);
1450
+ return $this->query($criteria,true);
1451
+ }
1452
+
1453
+ /**
1454
+ * Finds a single active record with the specified primary key.
1455
+ * See {@link find()} for detailed explanation about $condition and $params.
1456
+ * @param mixed primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value).
1457
+ * @param mixed query condition or criteria.
1458
+ * @param array parameters to be bound to an SQL statement.
1459
+ * @return CActiveRecord the record found. Null if none is found.
1460
+ */
1461
+ public function findByPk($pk,$condition='',$params=array())
1462
+ {
1463
+ Yii::trace(get_class($this).'.findByPk()','system.db.ar.CActiveRecord');
1464
+ $criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params);
1465
+ $criteria->limit=1;
1466
+ return $this->query($criteria);
1467
+ }
1468
+
1469
+ /**
1470
+ * Finds all active records with the specified primary keys.
1471
+ * See {@link find()} for detailed explanation about $condition and $params.
1472
+ * @param mixed primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value).
1473
+ * @param mixed query condition or criteria.
1474
+ * @param array parameters to be bound to an SQL statement.
1475
+ * @return array the records found. An empty array is returned if none is found.
1476
+ */
1477
+ public function findAllByPk($pk,$condition='',$params=array())
1478
+ {
1479
+ Yii::trace(get_class($this).'.findAllByPk()','system.db.ar.CActiveRecord');
1480
+ $criteria=$this->getCommandBuilder()->createPkCriteria($this->getTableSchema(),$pk,$condition,$params);
1481
+ return $this->query($criteria,true);
1482
+ }
1483
+
1484
+ /**
1485
+ * Finds a single active record that has the specified attribute values.
1486
+ * See {@link find()} for detailed explanation about $condition and $params.
1487
+ * @param array list of attribute values (indexed by attribute names) that the active records should match.
1488
+ * Since version 1.0.8, an attribute value can be an array which will be used to generate an IN condition.
1489
+ * @param mixed query condition or criteria.
1490
+ * @param array parameters to be bound to an SQL statement.
1491
+ * @return CActiveRecord the record found. Null if none is found.
1492
+ */
1493
+ public function findByAttributes($attributes,$condition='',$params=array())
1494
+ {
1495
+ Yii::trace(get_class($this).'.findByAttributes()','system.db.ar.CActiveRecord');
1496
+ $criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params);
1497
+ $criteria->limit=1;
1498
+ return $this->query($criteria);
1499
+ }
1500
+
1501
+ /**
1502
+ * Finds all active records that have the specified attribute values.
1503
+ * See {@link find()} for detailed explanation about $condition and $params.
1504
+ * @param array list of attribute values (indexed by attribute names) that the active records should match.
1505
+ * Since version 1.0.8, an attribute value can be an array which will be used to generate an IN condition.
1506
+ * @param mixed query condition or criteria.
1507
+ * @param array parameters to be bound to an SQL statement.
1508
+ * @return array the records found. An empty array is returned if none is found.
1509
+ */
1510
+ public function findAllByAttributes($attributes,$condition='',$params=array())
1511
+ {
1512
+ Yii::trace(get_class($this).'.findAllByAttributes()','system.db.ar.CActiveRecord');
1513
+ $criteria=$this->getCommandBuilder()->createColumnCriteria($this->getTableSchema(),$attributes,$condition,$params);
1514
+ return $this->query($criteria,true);
1515
+ }
1516
+
1517
+ /**
1518
+ * Finds a single active record with the specified SQL statement.
1519
+ * @param string the SQL statement
1520
+ * @param array parameters to be bound to the SQL statement
1521
+ * @return CActiveRecord the record found. Null if none is found.
1522
+ */
1523
+ public function findBySql($sql,$params=array())
1524
+ {
1525
+ Yii::trace(get_class($this).'.findBySql()','system.db.ar.CActiveRecord');
1526
+ $command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
1527
+ return $this->populateRecord($command->queryRow());
1528
+ }
1529
+
1530
+ /**
1531
+ * Finds all active records using the specified SQL statement.
1532
+ * @param string the SQL statement
1533
+ * @param array parameters to be bound to the SQL statement
1534
+ * @return array the records found. An empty array is returned if none is found.
1535
+ */
1536
+ public function findAllBySql($sql,$params=array())
1537
+ {
1538
+ Yii::trace(get_class($this).'.findAllBySql()','system.db.ar.CActiveRecord');
1539
+ $command=$this->getCommandBuilder()->createSqlCommand($sql,$params);
1540
+ return $this->populateRecords($command->queryAll());
1541
+ }
1542
+
1543
+ /**
1544
+ * Finds the number of rows satisfying the specified query condition.
1545
+ * See {@link find()} for detailed explanation about $condition and $params.
1546
+ * @param mixed query condition or criteria.
1547
+ * @param array parameters to be bound to an SQL statement.
1548
+ * @return integer the number of rows satisfying the specified query condition.
1549
+ */
1550
+ public function count($condition='',$params=array())
1551
+ {
1552
+ Yii::trace(get_class($this).'.count()','system.db.ar.CActiveRecord');
1553
+ $builder=$this->getCommandBuilder();
1554
+ $criteria=$builder->createCriteria($condition,$params);
1555
+ $this->applyScopes($criteria);
1556
+ return $builder->createCountCommand($this->getTableSchema(),$criteria)->queryScalar();
1557
+ }
1558
+
1559
+ /**
1560
+ * Finds the number of rows using the given SQL statement.
1561
+ * @param string the SQL statement
1562
+ * @param array parameters to be bound to the SQL statement
1563
+ * @return integer the number of rows using the given SQL statement.
1564
+ */
1565
+ public function countBySql($sql,$params=array())
1566
+ {
1567
+ Yii::trace(get_class($this).'.countBySql()','system.db.ar.CActiveRecord');
1568
+ return $this->getCommandBuilder()->createSqlCommand($sql,$params)->queryScalar();
1569
+ }
1570
+
1571
+ /**
1572
+ * Checks whether there is row satisfying the specified condition.
1573
+ * See {@link find()} for detailed explanation about $condition and $params.
1574
+ * @param mixed query condition or criteria.
1575
+ * @param array parameters to be bound to an SQL statement.
1576
+ * @return boolean whether there is row satisfying the specified condition.
1577
+ */
1578
+ public function exists($condition,$params=array())
1579
+ {
1580
+ Yii::trace(get_class($this).'.exists()','system.db.ar.CActiveRecord');
1581
+ $builder=$this->getCommandBuilder();
1582
+ $criteria=$builder->createCriteria($condition,$params);
1583
+ $table=$this->getTableSchema();
1584
+ $criteria->select=reset($table->columns)->rawName;
1585
+ $criteria->limit=1;
1586
+ $this->applyScopes($criteria);
1587
+ return $builder->createFindCommand($table,$criteria)->queryRow()!==false;
1588
+ }
1589
+
1590
+ /**
1591
+ * Specifies which related objects should be eagerly loaded.
1592
+ * This method takes variable number of parameters. Each parameter specifies
1593
+ * the name of a relation or child-relation. For example,
1594
+ * <pre>
1595
+ * // find all posts together with their author and comments
1596
+ * Post::model()->with('author','comments')->findAll();
1597
+ * // find all posts together with their author and the author's profile
1598
+ * Post::model()->with('author','author.profile')->findAll();
1599
+ * </pre>
1600
+ * The relations should be declared in {@link relations()}.
1601
+ *
1602
+ * By default, the options specified in {@link relations()} will be used
1603
+ * to do relational query. In order to customize the options on the fly,
1604
+ * we should pass an array parameter to the with() method. The array keys
1605
+ * are relation names, and the array values are the corresponding query options.
1606
+ * For example,
1607
+ * <pre>
1608
+ * Post::model()->with(array(
1609
+ * 'author'=>array('select'=>'id, name'),
1610
+ * 'comments'=>array('condition'=>'approved=1', 'order'=>'createTime'),
1611
+ * ))->findAll();
1612
+ * </pre>
1613
+ *
1614
+ * This method returns a {@link CActiveFinder} instance that provides
1615
+ * a set of find methods similar to that of CActiveRecord.
1616
+ *
1617
+ * Note, the possible parameters to this method have been changed since version 1.0.2.
1618
+ * Previously, it was not possible to specify on-th-fly query options,
1619
+ * and child-relations were specified as hierarchical arrays.
1620
+ *
1621
+ * @return CActiveFinder the active finder instance. If no parameter is passed in, the object itself will be returned.
1622
+ */
1623
+ public function with()
1624
+ {
1625
+ if(func_num_args()>0)
1626
+ {
1627
+ $with=func_get_args();
1628
+ if(is_array($with[0])) // the parameter is given as an array
1629
+ $with=$with[0];
1630
+ $finder=new CActiveFinder($this,$with,$this->getDbCriteria(false));
1631
+ $this->_c=null;
1632
+ return $finder;
1633
+ }
1634
+ else
1635
+ return $this;
1636
+ }
1637
+
1638
+ /**
1639
+ * Updates records with the specified primary key(s).
1640
+ * See {@link find()} for detailed explanation about $condition and $params.
1641
+ * Note, the attributes are not checked for safety and validation is NOT performed.
1642
+ * @param mixed primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value).
1643
+ * @param array list of attributes (name=>$value) to be updated
1644
+ * @param mixed query condition or criteria.
1645
+ * @param array parameters to be bound to an SQL statement.
1646
+ * @return integer the number of rows being updated
1647
+ */
1648
+ public function updateByPk($pk,$attributes,$condition='',$params=array())
1649
+ {
1650
+ Yii::trace(get_class($this).'.updateByPk()','system.db.ar.CActiveRecord');
1651
+ $builder=$this->getCommandBuilder();
1652
+ $table=$this->getTableSchema();
1653
+ $criteria=$builder->createPkCriteria($table,$pk,$condition,$params);
1654
+ $command=$builder->createUpdateCommand($table,$attributes,$criteria);
1655
+ return $command->execute();
1656
+ }
1657
+
1658
+ /**
1659
+ * Updates records with the specified condition.
1660
+ * See {@link find()} for detailed explanation about $condition and $params.
1661
+ * Note, the attributes are not checked for safety and no validation is done.
1662
+ * @param array list of attributes (name=>$value) to be updated
1663
+ * @param mixed query condition or criteria.
1664
+ * @param array parameters to be bound to an SQL statement.
1665
+ * @return integer the number of rows being updated
1666
+ */
1667
+ public function updateAll($attributes,$condition='',$params=array())
1668
+ {
1669
+ Yii::trace(get_class($this).'.updateAll()','system.db.ar.CActiveRecord');
1670
+ $builder=$this->getCommandBuilder();
1671
+ $criteria=$builder->createCriteria($condition,$params);
1672
+ $command=$builder->createUpdateCommand($this->getTableSchema(),$attributes,$criteria);
1673
+ return $command->execute();
1674
+ }
1675
+
1676
+ /**
1677
+ * Updates one or several counter columns.
1678
+ * Note, this updates all rows of data unless a condition or criteria is specified.
1679
+ * See {@link find()} for detailed explanation about $condition and $params.
1680
+ * @param array the counters to be updated (column name=>increment value)
1681
+ * @param mixed query condition or criteria.
1682
+ * @param array parameters to be bound to an SQL statement.
1683
+ * @return integer the number of rows being updated
1684
+ */
1685
+ public function updateCounters($counters,$condition='',$params=array())
1686
+ {
1687
+ Yii::trace(get_class($this).'.updateCounters()','system.db.ar.CActiveRecord');
1688
+ $builder=$this->getCommandBuilder();
1689
+ $criteria=$builder->createCriteria($condition,$params);
1690
+ $command=$builder->createUpdateCounterCommand($this->getTableSchema(),$counters,$criteria);
1691
+ return $command->execute();
1692
+ }
1693
+
1694
+ /**
1695
+ * Deletes rows with the specified primary key.
1696
+ * See {@link find()} for detailed explanation about $condition and $params.
1697
+ * @param mixed primary key value(s). Use array for multiple primary keys. For composite key, each key value must be an array (column name=>column value).
1698
+ * @param mixed query condition or criteria.
1699
+ * @param array parameters to be bound to an SQL statement.
1700
+ * @return integer the number of rows deleted
1701
+ */
1702
+ public function deleteByPk($pk,$condition='',$params=array())
1703
+ {
1704
+ Yii::trace(get_class($this).'.deleteByPk()','system.db.ar.CActiveRecord');
1705
+ $builder=$this->getCommandBuilder();
1706
+ $criteria=$builder->createPkCriteria($this->getTableSchema(),$pk,$condition,$params);
1707
+ $command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
1708
+ return $command->execute();
1709
+ }
1710
+
1711
+ /**
1712
+ * Deletes rows with the specified condition.
1713
+ * See {@link find()} for detailed explanation about $condition and $params.
1714
+ * @param mixed query condition or criteria.
1715
+ * @param array parameters to be bound to an SQL statement.
1716
+ * @return integer the number of rows deleted
1717
+ */
1718
+ public function deleteAll($condition='',$params=array())
1719
+ {
1720
+ Yii::trace(get_class($this).'.deleteAll()','system.db.ar.CActiveRecord');
1721
+ $builder=$this->getCommandBuilder();
1722
+ $criteria=$builder->createCriteria($condition,$params);
1723
+ $command=$builder->createDeleteCommand($this->getTableSchema(),$criteria);
1724
+ return $command->execute();
1725
+ }
1726
+
1727
+ /**
1728
+ * Creates an active record with the given attributes.
1729
+ * This method is internally used by the find methods.
1730
+ * @param array attribute values (column name=>column value)
1731
+ * @param boolean whether to call {@link afterFind} after the record is populated.
1732
+ * This parameter is added in version 1.0.3.
1733
+ * @return CActiveRecord the newly created active record. The class of the object is the same as the model class.
1734
+ * Null is returned if the input data is false.
1735
+ */
1736
+ public function populateRecord($attributes,$callAfterFind=true)
1737
+ {
1738
+ if($attributes!==false)
1739
+ {
1740
+ $record=$this->instantiate($attributes);
1741
+ $record->_md=$this->getMetaData();
1742
+ foreach($attributes as $name=>$value)
1743
+ {
1744
+ if(property_exists($record,$name))
1745
+ $record->$name=$value;
1746
+ else if(isset($record->_md->columns[$name]))
1747
+ $record->_attributes[$name]=$value;
1748
+ }
1749
+ $record->attachBehaviors($record->behaviors());
1750
+ if($callAfterFind)
1751
+ $record->afterFind();
1752
+ return $record;
1753
+ }
1754
+ else
1755
+ return null;
1756
+ }
1757
+
1758
+ /**
1759
+ * Creates a list of active records based on the input data.
1760
+ * This method is internally used by the find methods.
1761
+ * @param array list of attribute values for the active records.
1762
+ * @param boolean whether to call {@link afterFind} after each record is populated.
1763
+ * This parameter is added in version 1.0.3.
1764
+ * @return array list of active records.
1765
+ */
1766
+ public function populateRecords($data,$callAfterFind=true)
1767
+ {
1768
+ $records=array();
1769
+ $md=$this->getMetaData();
1770
+ $table=$md->tableSchema;
1771
+ foreach($data as $attributes)
1772
+ {
1773
+ $record=$this->instantiate($attributes);
1774
+ $record->_md=$md;
1775
+ foreach($attributes as $name=>$value)
1776
+ {
1777
+ if(property_exists($record,$name))
1778
+ $record->$name=$value;
1779
+ else if(isset($record->_md->columns[$name]))
1780
+ $record->_attributes[$name]=$value;
1781
+ }
1782
+ $record->attachBehaviors($record->behaviors());
1783
+ if($callAfterFind)
1784
+ $record->afterFind();
1785
+ $records[]=$record;
1786
+ }
1787
+ return $records;
1788
+ }
1789
+
1790
+ /**
1791
+ * Creates an active record instance.
1792
+ * This method is called by {@link populateRecord} and {@link populateRecords}.
1793
+ * You may override this method if the instance being created
1794
+ * depends the attributes that are to be populated to the record.
1795
+ * For example, by creating a record based on the value of a column,
1796
+ * you may implement the so-called single-table inheritance mapping.
1797
+ * @param array list of attribute values for the active records.
1798
+ * @return CActiveRecord the active record
1799
+ * @since 1.0.2
1800
+ */
1801
+ protected function instantiate($attributes)
1802
+ {
1803
+ $class=get_class($this);
1804
+ return new $class(null);
1805
+ }
1806
+
1807
+ /**
1808
+ * Returns whether there is an element at the specified offset.
1809
+ * This method is required by the interface ArrayAccess.
1810
+ * @param mixed the offset to check on
1811
+ * @return boolean
1812
+ * @since 1.0.2
1813
+ */
1814
+ public function offsetExists($offset)
1815
+ {
1816
+ return isset($this->getMetaData()->columns[$offset]);
1817
+ }
1818
+ }
1819
+
1820
+
1821
+ /**
1822
+ * CBaseActiveRelation is the base class for all active relations.
1823
+ * @author Qiang Xue <qiang.xue@gmail.com>
1824
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
1825
+ * @package system.db.ar
1826
+ * @since 1.0.4
1827
+ */
1828
+ class CBaseActiveRelation extends CComponent
1829
+ {
1830
+ /**
1831
+ * @var string name of the related object
1832
+ */
1833
+ public $name;
1834
+ /**
1835
+ * @var string name of the related active record class
1836
+ */
1837
+ public $className;
1838
+ /**
1839
+ * @var string the foreign key in this relation
1840
+ */
1841
+ public $foreignKey;
1842
+ /**
1843
+ * @var mixed list of column names (an array, or a string of names separated by commas) to be selected.
1844
+ * Do not quote or prefix the column names unless they are used in an expression.
1845
+ * In that case, you should prefix the column names with '??.'.
1846
+ */
1847
+ public $select='*';
1848
+ /**
1849
+ * @var string WHERE clause. For {@link CActiveRelation} descendant classes, column names
1850
+ * referenced in the condition should be disambiguated with prefix '??.'.
1851
+ */
1852
+ public $condition='';
1853
+ /**
1854
+ * @var array the parameters that are to be bound to the condition.
1855
+ * The keys are parameter placeholder names, and the values are parameter values.
1856
+ */
1857
+ public $params=array();
1858
+ /**
1859
+ * @var string GROUP BY clause. For {@link CActiveRelation} descendant classes, column names
1860
+ * referenced in this property should be disambiguated with prefix '??.'.
1861
+ */
1862
+ public $group='';
1863
+ /**
1864
+ * @var string HAVING clause. For {@link CActiveRelation} descendant classes, column names
1865
+ * referenced in this property should be disambiguated with prefix '??.'.
1866
+ */
1867
+ public $having='';
1868
+ /**
1869
+ * @var string ORDER BY clause. For {@link CActiveRelation} descendant classes, column names
1870
+ * referenced in this property should be disambiguated with prefix '??.'.
1871
+ */
1872
+ public $order='';
1873
+
1874
+ /**
1875
+ * Constructor.
1876
+ * @param string name of the relation
1877
+ * @param string name of the related active record class
1878
+ * @param string foreign key for this relation
1879
+ * @param array additional options (name=>value). The keys must be the property names of this class.
1880
+ */
1881
+ public function __construct($name,$className,$foreignKey,$options=array())
1882
+ {
1883
+ $this->name=$name;
1884
+ $this->className=$className;
1885
+ $this->foreignKey=$foreignKey;
1886
+ foreach($options as $name=>$value)
1887
+ $this->$name=$value;
1888
+ }
1889
+
1890
+ /**
1891
+ * Merges this relation with a criteria specified dynamically.
1892
+ * @param array the dynamically specified criteria
1893
+ * @since 1.0.5
1894
+ */
1895
+ public function mergeWith($criteria)
1896
+ {
1897
+ if(isset($criteria['select']) && $this->select!==$criteria['select'])
1898
+ {
1899
+ if($this->select==='*')
1900
+ $this->select=$criteria['select'];
1901
+ else if($criteria['select']!=='*')
1902
+ {
1903
+ $select1=is_string($this->select)?preg_split('/\s*,\s*/',trim($this->select),-1,PREG_SPLIT_NO_EMPTY):$this->select;
1904
+ $select2=is_string($criteria['select'])?preg_split('/\s*,\s*/',trim($criteria['select']),-1,PREG_SPLIT_NO_EMPTY):$criteria['select'];
1905
+ $this->select=array_merge($select1,array_diff($select2,$select1));
1906
+ }
1907
+ }
1908
+
1909
+ if(isset($criteria['condition']) && $this->condition!==$criteria['condition'])
1910
+ {
1911
+ if($this->condition==='')
1912
+ $this->condition=$criteria['condition'];
1913
+ else if($criteria['condition']!=='')
1914
+ $this->condition="({$this->condition}) AND ({$criteria['condition']})";
1915
+ }
1916
+
1917
+ if(isset($criteria['params']) && $this->params!==$criteria['params'])
1918
+ $this->params=array_merge($this->params,$criteria['params']);
1919
+
1920
+ if(isset($criteria['order']) && $this->order!==$criteria['order'])
1921
+ {
1922
+ if($this->order==='')
1923
+ $this->order=$criteria['order'];
1924
+ else if($criteria['order']!=='')
1925
+ $this->order.=', '.$criteria['order'];
1926
+ }
1927
+
1928
+ if(isset($criteria['group']) && $this->group!==$criteria['group'])
1929
+ {
1930
+ if($this->group==='')
1931
+ $this->group=$criteria['group'];
1932
+ else if($criteria['group']!=='')
1933
+ $this->group.=', '.$criteria['group'];
1934
+ }
1935
+
1936
+ if(isset($criteria['having']) && $this->having!==$criteria['having'])
1937
+ {
1938
+ if($this->having==='')
1939
+ $this->having=$criteria['having'];
1940
+ else if($criteria['having']!=='')
1941
+ $this->having="({$this->having}) AND ({$criteria['having']})";
1942
+ }
1943
+ }
1944
+ }
1945
+
1946
+
1947
+ /**
1948
+ * CStatRelation represents a statistical relational query.
1949
+ * @author Qiang Xue <qiang.xue@gmail.com>
1950
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
1951
+ * @package system.db.ar
1952
+ * @since 1.0.4
1953
+ */
1954
+ class CStatRelation extends CBaseActiveRelation
1955
+ {
1956
+ /**
1957
+ * @var string the statistical expression. Defaults to 'COUNT(*)', meaning
1958
+ * the count of child objects.
1959
+ */
1960
+ public $select='COUNT(*)';
1961
+ /**
1962
+ * @var mixed the default value to be assigned to those records that do not
1963
+ * receive a statistical query result. Defaults to 0.
1964
+ */
1965
+ public $defaultValue=0;
1966
+
1967
+ /**
1968
+ * Merges this relation with a criteria specified dynamically.
1969
+ * @param array the dynamically specified criteria
1970
+ * @since 1.0.5
1971
+ */
1972
+ public function mergeWith($criteria)
1973
+ {
1974
+ parent::mergeWith($criteria);
1975
+
1976
+ if(isset($criteria['defaultValue']))
1977
+ $this->defaultValue=$criteria['defaultValue'];
1978
+ }
1979
+ }
1980
+
1981
+
1982
+ /**
1983
+ * CActiveRelation is the base class for representing active relations that bring back related objects.
1984
+ * @author Qiang Xue <qiang.xue@gmail.com>
1985
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
1986
+ * @package system.db.ar
1987
+ * @since 1.0
1988
+ */
1989
+ class CActiveRelation extends CBaseActiveRelation
1990
+ {
1991
+ /**
1992
+ * @var string join type. Defaults to 'LEFT OUTER JOIN'.
1993
+ */
1994
+ public $joinType='LEFT OUTER JOIN';
1995
+ /**
1996
+ * @var string ON clause. The condition specified here will be appended to the joining condition using AND operator.
1997
+ * @since 1.0.2
1998
+ */
1999
+ public $on='';
2000
+ /**
2001
+ * @var string the alias for the table that this relation refers to. Defaults to null, meaning
2002
+ * the alias will be generated automatically. If you set this property explicitly, make sure
2003
+ * the alias is unique globally.
2004
+ * @see aliasToken
2005
+ * @since 1.0.1
2006
+ */
2007
+ public $alias;
2008
+ /**
2009
+ * @var string the column prefix placeholder. It will be replaced by the corresponding table alias.
2010
+ * @see alias
2011
+ */
2012
+ public $aliasToken='??';
2013
+ /**
2014
+ * @var string|array specifies which related objects should be eagerly loaded when this related object is lazily loaded.
2015
+ * For more details about this property, see {@link CActiveRecord::with()}.
2016
+ */
2017
+ public $with=array();
2018
+ /**
2019
+ * @var boolean whether this table should be joined with the primary table. If not set or false,
2020
+ * Each HAS_MANY or MANY_MANY table will appear in a separate JOIN statement. Defaults to null.
2021
+ * @since 1.0.3
2022
+ */
2023
+ public $together;
2024
+
2025
+ /**
2026
+ * Merges this relation with a criteria specified dynamically.
2027
+ * @param array the dynamically specified criteria
2028
+ * @since 1.0.5
2029
+ */
2030
+ public function mergeWith($criteria)
2031
+ {
2032
+ parent::mergeWith($criteria);
2033
+
2034
+ if(isset($criteria['joinType']))
2035
+ $this->joinType=$criteria['joinType'];
2036
+
2037
+ if(isset($criteria['on']) && $this->on!==$criteria['on'])
2038
+ {
2039
+ if($this->on==='')
2040
+ $this->on=$criteria['on'];
2041
+ else if($criteria['on']!=='')
2042
+ $this->on="({$this->on}) AND ({$criteria['on']})";
2043
+ }
2044
+
2045
+ if(isset($criteria['with']))
2046
+ $this->with=$criteria['with'];
2047
+
2048
+ if(isset($criteria['alias']))
2049
+ $this->alias=$criteria['alias'];
2050
+
2051
+ if(isset($criteria['aliasToken']))
2052
+ $this->aliasToken=$criteria['aliasToken'];
2053
+
2054
+ if(isset($criteria['together']))
2055
+ $this->together=$criteria['together'];
2056
+ }
2057
+ }
2058
+
2059
+
2060
+ /**
2061
+ * CBelongsToRelation represents the parameters specifying a BELONGS_TO relation.
2062
+ * @author Qiang Xue <qiang.xue@gmail.com>
2063
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
2064
+ * @package system.db.ar
2065
+ * @since 1.0
2066
+ */
2067
+ class CBelongsToRelation extends CActiveRelation
2068
+ {
2069
+ }
2070
+
2071
+
2072
+ /**
2073
+ * CHasOneRelation represents the parameters specifying a HAS_ONE relation.
2074
+ * @author Qiang Xue <qiang.xue@gmail.com>
2075
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
2076
+ * @package system.db.ar
2077
+ * @since 1.0
2078
+ */
2079
+ class CHasOneRelation extends CActiveRelation
2080
+ {
2081
+ }
2082
+
2083
+
2084
+ /**
2085
+ * CHasManyRelation represents the parameters specifying a HAS_MANY relation.
2086
+ * @author Qiang Xue <qiang.xue@gmail.com>
2087
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
2088
+ * @package system.db.ar
2089
+ * @since 1.0
2090
+ */
2091
+ class CHasManyRelation extends CActiveRelation
2092
+ {
2093
+ /**
2094
+ * @var integer limit of the rows to be selected. It is effective only for lazy loading this related object. Defaults to -1, meaning no limit.
2095
+ */
2096
+ public $limit=-1;
2097
+ /**
2098
+ * @var integer offset of the rows to be selected. It is effective only for lazy loading this related object. Defaults to -1, meaning no offset.
2099
+ */
2100
+ public $offset=-1;
2101
+ /**
2102
+ * @var string the name of the column that should be used as the key for storing related objects.
2103
+ * Defaults to null, meaning using zero-based integer IDs.
2104
+ * @since 1.0.7
2105
+ */
2106
+ public $index;
2107
+
2108
+ /**
2109
+ * Merges this relation with a criteria specified dynamically.
2110
+ * @param array the dynamically specified criteria
2111
+ * @since 1.0.5
2112
+ */
2113
+ public function mergeWith($criteria)
2114
+ {
2115
+ parent::mergeWith($criteria);
2116
+ if(isset($criteria['limit']) && $criteria['limit']>0)
2117
+ $this->limit=$criteria['limit'];
2118
+
2119
+ if(isset($criteria['offset']) && $criteria['offset']>=0)
2120
+ $this->offset=$criteria['offset'];
2121
+
2122
+ if(isset($criteria['index']))
2123
+ $this->index=$criteria['index'];
2124
+ }
2125
+ }
2126
+
2127
+
2128
+ /**
2129
+ * CManyManyRelation represents the parameters specifying a MANY_MANY relation.
2130
+ * @author Qiang Xue <qiang.xue@gmail.com>
2131
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
2132
+ * @package system.db.ar
2133
+ * @since 1.0
2134
+ */
2135
+ class CManyManyRelation extends CHasManyRelation
2136
+ {
2137
+ }
2138
+
2139
+
2140
+ /**
2141
+ * CActiveRecordMetaData represents the meta-data for an Active Record class.
2142
+ *
2143
+ * @author Qiang Xue <qiang.xue@gmail.com>
2144
+ * @version $Id: CActiveRecord.php 1305 2009-08-07 16:02:29Z qiang.xue $
2145
+ * @package system.db.ar
2146
+ * @since 1.0
2147
+ */
2148
+ class CActiveRecordMetaData
2149
+ {
2150
+ /**
2151
+ * @var CDbTableSchema the table schema information
2152
+ */
2153
+ public $tableSchema;
2154
+ /**
2155
+ * @var array table columns
2156
+ */
2157
+ public $columns;
2158
+ /**
2159
+ * @var array list of relations
2160
+ */
2161
+ public $relations=array();
2162
+ /**
2163
+ * @var array attribute default values
2164
+ */
2165
+ public $attributeDefaults=array();
2166
+
2167
+ private $_model;
2168
+ private $_validators;
2169
+
2170
+ /**
2171
+ * Constructor.
2172
+ * @param CActiveRecord the model instance
2173
+ */
2174
+ public function __construct($model)
2175
+ {
2176
+ $this->_model=$model;
2177
+
2178
+ $tableName=$model->tableName();
2179
+ if(($table=$model->getDbConnection()->getSchema()->getTable($tableName))===null)
2180
+ throw new CDbException(Yii::t('yii','The table "{table}" for active record class "{class}" cannot be found in the database.',
2181
+ array('{class}'=>get_class($model),'{table}'=>$tableName)));
2182
+ if($table->primaryKey===null)
2183
+ $table->primaryKey=$model->primaryKey();
2184
+ $this->tableSchema=$table;
2185
+ $this->columns=$table->columns;
2186
+
2187
+ foreach($table->columns as $name=>$column)
2188
+ {
2189
+ if(!$column->isPrimaryKey && $column->defaultValue!==null)
2190
+ $this->attributeDefaults[$name]=$column->defaultValue;
2191
+ }
2192
+
2193
+ foreach($model->relations() as $name=>$config)
2194
+ {
2195
+ if(isset($config[0],$config[1],$config[2])) // relation class, AR class, FK
2196
+ $this->relations[$name]=new $config[0]($name,$config[1],$config[2],array_slice($config,3));
2197
+ else
2198
+ throw new CDbException(Yii::t('yii','Active record "{class}" has an invalid configuration for relation "{relation}". It must specify the relation type, the related active record class and the foreign key.',
2199
+ array('{class}'=>get_class($model),'{relation}'=>$name)));
2200
+ }
2201
+ }
2202
+
2203
+ /**
2204
+ * @return array list of validators
2205
+ */
2206
+ public function getValidators()
2207
+ {
2208
+ if(!$this->_validators)
2209
+ $this->_validators=$this->_model->createValidators();
2210
+ return $this->_validators;
2211
+ }
2212
+ }