drg_default_html_editor 0.4.15

Sign up to get free protection for your applications and to get access to all the features.
Files changed (458) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +40 -0
  5. data/app/assets/images/elfinder/arrows-active.png +0 -0
  6. data/app/assets/images/elfinder/arrows-normal.png +0 -0
  7. data/app/assets/images/elfinder/crop.gif +0 -0
  8. data/app/assets/images/elfinder/dialogs.png +0 -0
  9. data/app/assets/images/elfinder/icons-big.png +0 -0
  10. data/app/assets/images/elfinder/icons-small.png +0 -0
  11. data/app/assets/images/elfinder/progress.gif +0 -0
  12. data/app/assets/images/elfinder/quicklook-bg.png +0 -0
  13. data/app/assets/images/elfinder/quicklook-icons.png +0 -0
  14. data/app/assets/images/elfinder/resize.png +0 -0
  15. data/app/assets/images/elfinder/spinner-mini.gif +0 -0
  16. data/app/assets/images/elfinder/toolbar.png +0 -0
  17. data/app/assets/javascripts/drg_default_html_editor/ckeditor/CHANGES.md +612 -0
  18. data/app/assets/javascripts/drg_default_html_editor/ckeditor/LICENSE.md +1264 -0
  19. data/app/assets/javascripts/drg_default_html_editor/ckeditor/README.md +39 -0
  20. data/app/assets/javascripts/drg_default_html_editor/ckeditor/adapters/jquery.js +10 -0
  21. data/app/assets/javascripts/drg_default_html_editor/ckeditor/build-config.js +173 -0
  22. data/app/assets/javascripts/drg_default_html_editor/ckeditor/ckeditor.js +993 -0
  23. data/app/assets/javascripts/drg_default_html_editor/ckeditor/config.js +10 -0
  24. data/app/assets/javascripts/drg_default_html_editor/ckeditor/contents.css +134 -0
  25. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/af.js +5 -0
  26. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ar.js +5 -0
  27. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/bg.js +5 -0
  28. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/bn.js +5 -0
  29. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/bs.js +5 -0
  30. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ca.js +5 -0
  31. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/cs.js +5 -0
  32. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/cy.js +5 -0
  33. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/da.js +5 -0
  34. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/de.js +5 -0
  35. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/el.js +5 -0
  36. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/en-au.js +5 -0
  37. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/en-ca.js +5 -0
  38. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/en-gb.js +5 -0
  39. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/en.js +5 -0
  40. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/eo.js +5 -0
  41. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/es.js +5 -0
  42. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/et.js +5 -0
  43. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/eu.js +5 -0
  44. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/fa.js +5 -0
  45. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/fi.js +5 -0
  46. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/fo.js +5 -0
  47. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/fr-ca.js +5 -0
  48. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/fr.js +5 -0
  49. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/gl.js +5 -0
  50. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/gu.js +5 -0
  51. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/he.js +5 -0
  52. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/hi.js +5 -0
  53. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/hr.js +5 -0
  54. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/hu.js +5 -0
  55. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/id.js +5 -0
  56. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/is.js +5 -0
  57. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/it.js +5 -0
  58. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ja.js +5 -0
  59. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ka.js +5 -0
  60. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/km.js +5 -0
  61. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ko.js +5 -0
  62. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ku.js +5 -0
  63. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/lt.js +5 -0
  64. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/lv.js +5 -0
  65. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/mk.js +5 -0
  66. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/mn.js +5 -0
  67. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ms.js +5 -0
  68. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/nb.js +5 -0
  69. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/nl.js +5 -0
  70. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/no.js +5 -0
  71. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/pl.js +5 -0
  72. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/pt-br.js +5 -0
  73. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/pt.js +5 -0
  74. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ro.js +5 -0
  75. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ru.js +5 -0
  76. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/si.js +5 -0
  77. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sk.js +5 -0
  78. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sl.js +5 -0
  79. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sq.js +5 -0
  80. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sr-latn.js +5 -0
  81. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sr.js +5 -0
  82. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/sv.js +5 -0
  83. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/th.js +5 -0
  84. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/tr.js +5 -0
  85. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/tt.js +5 -0
  86. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/ug.js +5 -0
  87. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/uk.js +5 -0
  88. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/vi.js +5 -0
  89. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/zh-cn.js +5 -0
  90. data/app/assets/javascripts/drg_default_html_editor/ckeditor/lang/zh.js +5 -0
  91. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/a11yhelp.js +10 -0
  92. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/_translationstatus.txt +25 -0
  93. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ar.js +11 -0
  94. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/bg.js +11 -0
  95. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ca.js +13 -0
  96. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/cs.js +13 -0
  97. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/cy.js +11 -0
  98. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/da.js +11 -0
  99. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/de.js +12 -0
  100. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/el.js +13 -0
  101. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/en-gb.js +11 -0
  102. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/en.js +11 -0
  103. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/eo.js +13 -0
  104. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/es.js +12 -0
  105. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/et.js +11 -0
  106. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/fa.js +11 -0
  107. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/fi.js +12 -0
  108. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr-ca.js +12 -0
  109. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/fr.js +13 -0
  110. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/gl.js +12 -0
  111. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/gu.js +11 -0
  112. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/he.js +11 -0
  113. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/hi.js +11 -0
  114. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/hr.js +11 -0
  115. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/hu.js +13 -0
  116. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/id.js +11 -0
  117. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/it.js +13 -0
  118. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ja.js +9 -0
  119. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/km.js +11 -0
  120. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ko.js +10 -0
  121. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ku.js +12 -0
  122. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/lt.js +11 -0
  123. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/lv.js +13 -0
  124. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/mk.js +11 -0
  125. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/mn.js +11 -0
  126. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/nb.js +12 -0
  127. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/nl.js +12 -0
  128. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/no.js +11 -0
  129. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/pl.js +13 -0
  130. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt-br.js +12 -0
  131. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/pt.js +12 -0
  132. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ro.js +12 -0
  133. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ru.js +11 -0
  134. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/si.js +10 -0
  135. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sk.js +12 -0
  136. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sl.js +12 -0
  137. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sq.js +11 -0
  138. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr-latn.js +11 -0
  139. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sr.js +11 -0
  140. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/sv.js +12 -0
  141. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/th.js +11 -0
  142. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/tr.js +12 -0
  143. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/tt.js +11 -0
  144. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/ug.js +11 -0
  145. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/uk.js +12 -0
  146. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/vi.js +11 -0
  147. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh-cn.js +9 -0
  148. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/a11yhelp/dialogs/lang/zh.js +10 -0
  149. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/about/dialogs/about.js +7 -0
  150. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/about/dialogs/hidpi/logo_ckeditor.png +0 -0
  151. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/about/dialogs/logo_ckeditor.png +0 -0
  152. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/clipboard/dialogs/paste.js +11 -0
  153. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/colordialog/dialogs/colordialog.js +13 -0
  154. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/dialog/dialogDefinition.js +4 -0
  155. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/div/dialogs/div.js +9 -0
  156. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/find/dialogs/find.js +24 -0
  157. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/flash/dialogs/flash.js +24 -0
  158. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/flash/images/placeholder.png +0 -0
  159. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/button.js +8 -0
  160. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/checkbox.js +8 -0
  161. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/form.js +8 -0
  162. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/hiddenfield.js +8 -0
  163. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/radio.js +8 -0
  164. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/select.js +20 -0
  165. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/textarea.js +8 -0
  166. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/dialogs/textfield.js +10 -0
  167. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/forms/images/hiddenfield.gif +0 -0
  168. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/icons.png +0 -0
  169. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/icons_hidpi.png +0 -0
  170. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/iframe/dialogs/iframe.js +10 -0
  171. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/iframe/images/placeholder.png +0 -0
  172. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/image/dialogs/image.js +43 -0
  173. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/image/images/noimage.png +0 -0
  174. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/link/dialogs/anchor.js +7 -0
  175. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/link/dialogs/link.js +26 -0
  176. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/link/images/anchor.png +0 -0
  177. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/link/images/hidpi/anchor.png +0 -0
  178. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/liststyle/dialogs/liststyle.js +10 -0
  179. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/magicline/images/hidpi/icon.png +0 -0
  180. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/magicline/images/icon.png +0 -0
  181. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/pagebreak/images/pagebreak.gif +0 -0
  182. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/pastefromword/filter/default.js +31 -0
  183. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/preview/preview.html +13 -0
  184. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/scayt/LICENSE.md +28 -0
  185. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/scayt/README.md +25 -0
  186. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/scayt/dialogs/options.js +17 -0
  187. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/scayt/dialogs/toolbar.css +71 -0
  188. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_address.png +0 -0
  189. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_blockquote.png +0 -0
  190. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_div.png +0 -0
  191. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h1.png +0 -0
  192. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h2.png +0 -0
  193. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h3.png +0 -0
  194. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h4.png +0 -0
  195. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h5.png +0 -0
  196. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_h6.png +0 -0
  197. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_p.png +0 -0
  198. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/showblocks/images/block_pre.png +0 -0
  199. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/dialogs/smiley.js +10 -0
  200. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/angel_smile.gif +0 -0
  201. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/angel_smile.png +0 -0
  202. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/angry_smile.gif +0 -0
  203. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/angry_smile.png +0 -0
  204. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/broken_heart.gif +0 -0
  205. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/broken_heart.png +0 -0
  206. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/confused_smile.gif +0 -0
  207. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/confused_smile.png +0 -0
  208. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/cry_smile.gif +0 -0
  209. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/cry_smile.png +0 -0
  210. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/devil_smile.gif +0 -0
  211. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/devil_smile.png +0 -0
  212. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/embaressed_smile.gif +0 -0
  213. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/embarrassed_smile.gif +0 -0
  214. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/embarrassed_smile.png +0 -0
  215. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/envelope.gif +0 -0
  216. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/envelope.png +0 -0
  217. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/heart.gif +0 -0
  218. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/heart.png +0 -0
  219. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/kiss.gif +0 -0
  220. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/kiss.png +0 -0
  221. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/lightbulb.gif +0 -0
  222. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/lightbulb.png +0 -0
  223. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/omg_smile.gif +0 -0
  224. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/omg_smile.png +0 -0
  225. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/regular_smile.gif +0 -0
  226. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/regular_smile.png +0 -0
  227. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/sad_smile.gif +0 -0
  228. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/sad_smile.png +0 -0
  229. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/shades_smile.gif +0 -0
  230. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/shades_smile.png +0 -0
  231. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/teeth_smile.gif +0 -0
  232. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/teeth_smile.png +0 -0
  233. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/thumbs_down.gif +0 -0
  234. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/thumbs_down.png +0 -0
  235. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/thumbs_up.gif +0 -0
  236. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/thumbs_up.png +0 -0
  237. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/tongue_smile.gif +0 -0
  238. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/tongue_smile.png +0 -0
  239. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/tounge_smile.gif +0 -0
  240. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.gif +0 -0
  241. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/whatchutalkingabout_smile.png +0 -0
  242. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/wink_smile.gif +0 -0
  243. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/smiley/images/wink_smile.png +0 -0
  244. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/_translationstatus.txt +20 -0
  245. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ar.js +13 -0
  246. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/bg.js +13 -0
  247. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ca.js +14 -0
  248. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/cs.js +13 -0
  249. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/cy.js +14 -0
  250. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/de.js +13 -0
  251. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/el.js +13 -0
  252. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/en-gb.js +13 -0
  253. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/en.js +13 -0
  254. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/eo.js +12 -0
  255. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/es.js +13 -0
  256. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/et.js +13 -0
  257. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/fa.js +12 -0
  258. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/fi.js +13 -0
  259. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/fr-ca.js +10 -0
  260. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/fr.js +11 -0
  261. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/gl.js +13 -0
  262. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/he.js +12 -0
  263. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/hr.js +13 -0
  264. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/hu.js +12 -0
  265. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/id.js +13 -0
  266. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/it.js +14 -0
  267. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ja.js +9 -0
  268. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/km.js +13 -0
  269. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ku.js +13 -0
  270. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/lv.js +13 -0
  271. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/nb.js +11 -0
  272. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/nl.js +13 -0
  273. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/no.js +11 -0
  274. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/pl.js +12 -0
  275. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/pt-br.js +11 -0
  276. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/pt.js +13 -0
  277. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ru.js +13 -0
  278. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/si.js +13 -0
  279. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/sk.js +13 -0
  280. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/sl.js +12 -0
  281. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/sq.js +13 -0
  282. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/sv.js +11 -0
  283. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/th.js +13 -0
  284. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/tr.js +12 -0
  285. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/tt.js +13 -0
  286. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/ug.js +13 -0
  287. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/uk.js +12 -0
  288. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/vi.js +14 -0
  289. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/zh-cn.js +9 -0
  290. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/lang/zh.js +12 -0
  291. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/specialchar/dialogs/specialchar.js +14 -0
  292. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/table/dialogs/table.js +21 -0
  293. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/tabletools/dialogs/tableCell.js +17 -0
  294. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/dialogs/templates.css +84 -0
  295. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/dialogs/templates.js +10 -0
  296. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/templates/default.js +6 -0
  297. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/templates/images/template1.gif +0 -0
  298. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/templates/images/template2.gif +0 -0
  299. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/templates/templates/images/template3.gif +0 -0
  300. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/LICENSE.md +28 -0
  301. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/README.md +25 -0
  302. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/dialogs/ciframe.html +66 -0
  303. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/dialogs/tmpFrameset.html +52 -0
  304. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/dialogs/wsc.css +82 -0
  305. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/dialogs/wsc.js +74 -0
  306. data/app/assets/javascripts/drg_default_html_editor/ckeditor/plugins/wsc/dialogs/wsc_ie.js +11 -0
  307. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/ajax.html +82 -0
  308. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/api.html +207 -0
  309. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/appendto.html +56 -0
  310. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/assets/inlineall/logo.png +0 -0
  311. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/assets/outputxhtml/outputxhtml.css +204 -0
  312. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/assets/posteddata.php +59 -0
  313. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/assets/sample.jpg +0 -0
  314. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/assets/uilanguages/languages.js +7 -0
  315. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/datafiltering.html +401 -0
  316. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/divreplace.html +141 -0
  317. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/index.html +128 -0
  318. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/inlineall.html +311 -0
  319. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/inlinebycode.html +121 -0
  320. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/inlinetextarea.html +110 -0
  321. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/jquery.html +100 -0
  322. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/dialog/assets/my_dialog.js +48 -0
  323. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/dialog/dialog.html +187 -0
  324. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/enterkey/enterkey.html +103 -0
  325. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.fla +0 -0
  326. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/outputforflash.swf +0 -0
  327. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/htmlwriter/assets/outputforflash/swfobject.js +18 -0
  328. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/htmlwriter/outputforflash.html +280 -0
  329. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/htmlwriter/outputhtml.html +221 -0
  330. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/magicline/magicline.html +206 -0
  331. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/toolbar/toolbar.html +232 -0
  332. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/plugins/wysiwygarea/fullpage.html +77 -0
  333. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/readonly.html +73 -0
  334. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/replacebyclass.html +57 -0
  335. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/replacebycode.html +56 -0
  336. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/sample.css +365 -0
  337. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/sample.js +50 -0
  338. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/sample_posteddata.php +16 -0
  339. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/tabindex.html +75 -0
  340. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/uicolor.html +69 -0
  341. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/uilanguages.html +119 -0
  342. data/app/assets/javascripts/drg_default_html_editor/ckeditor/samples/xhtmlstyle.html +231 -0
  343. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/dialog.css +5 -0
  344. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/dialog_ie.css +5 -0
  345. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/dialog_ie7.css +5 -0
  346. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/dialog_ie8.css +5 -0
  347. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/dialog_iequirks.css +5 -0
  348. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor.css +5 -0
  349. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor_gecko.css +5 -0
  350. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor_ie.css +5 -0
  351. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor_ie7.css +5 -0
  352. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor_ie8.css +5 -0
  353. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/editor_iequirks.css +5 -0
  354. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/icons.png +0 -0
  355. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/icons_hidpi.png +0 -0
  356. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/arrow.png +0 -0
  357. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/close.png +0 -0
  358. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/hidpi/close.png +0 -0
  359. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/hidpi/lock-open.png +0 -0
  360. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/hidpi/lock.png +0 -0
  361. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/hidpi/refresh.png +0 -0
  362. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/lock-open.png +0 -0
  363. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/lock.png +0 -0
  364. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/images/refresh.png +0 -0
  365. data/app/assets/javascripts/drg_default_html_editor/ckeditor/skins/moono/readme.md +51 -0
  366. data/app/assets/javascripts/drg_default_html_editor/ckeditor/styles.js +111 -0
  367. data/app/assets/javascripts/drg_default_html_editor/elfinder/Changelog.txt +63 -0
  368. data/app/assets/javascripts/drg_default_html_editor/elfinder/README.md +118 -0
  369. data/app/assets/javascripts/drg_default_html_editor/elfinder/css/elfinder.min.css +9 -0
  370. data/app/assets/javascripts/drg_default_html_editor/elfinder/css/theme.css +49 -0
  371. data/app/assets/javascripts/drg_default_html_editor/elfinder/elfinder.html +56 -0
  372. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/arrows-active.png +0 -0
  373. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/arrows-normal.png +0 -0
  374. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/crop.gif +0 -0
  375. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/dialogs.png +0 -0
  376. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/icons-big.png +0 -0
  377. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/icons-small.png +0 -0
  378. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/progress.gif +0 -0
  379. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/quicklook-bg.png +0 -0
  380. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/quicklook-icons.png +0 -0
  381. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/resize.png +0 -0
  382. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/spinner-mini.gif +0 -0
  383. data/app/assets/javascripts/drg_default_html_editor/elfinder/img/toolbar.png +0 -0
  384. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/elfinder.min.js +25 -0
  385. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/elfinder.min_1.js +25 -0
  386. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.LANG.js +348 -0
  387. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.ar.js +290 -0
  388. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.bg.js +310 -0
  389. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.ca.js +310 -0
  390. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.cs.js +285 -0
  391. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.de.js +280 -0
  392. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.es.js +291 -0
  393. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.fr.js +298 -0
  394. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.hu.js +280 -0
  395. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.jp.js +316 -0
  396. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.nl.js +342 -0
  397. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.no.js +280 -0
  398. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.pl.js +309 -0
  399. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.pt_BR.js +280 -0
  400. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.ru.js +344 -0
  401. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.sl.js +348 -0
  402. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/i18n/elfinder.zh_CN.js +280 -0
  403. data/app/assets/javascripts/drg_default_html_editor/elfinder/js/proxy/elFinderSupportVer1.js +338 -0
  404. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/MySQLStorage.sql +23 -0
  405. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/connector.php +44 -0
  406. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/elFinder.class.php +1103 -0
  407. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/elFinderConnector.class.php +133 -0
  408. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/elFinderVolumeDriver.class.php +3370 -0
  409. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/elFinderVolumeLocalFileSystem.class.php +835 -0
  410. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/elFinderVolumeMySQL.class.php +896 -0
  411. data/app/assets/javascripts/drg_default_html_editor/elfinder/php/mime.types +512 -0
  412. data/app/assets/javascripts/drg_default_html_editor_application.js +7 -0
  413. data/app/assets/javascripts/drg_default_html_editor_cms.js +14 -0
  414. data/app/assets/stylesheets/drg_default_html_editor/elfinder.min.css +9 -0
  415. data/app/assets/stylesheets/drg_default_html_editor_application.css +11 -0
  416. data/app/assets/stylesheets/drg_default_html_editor_cms.css +21 -0
  417. data/app/controllers/dc_elfinder_controller.rb +58 -0
  418. data/config/initializers/patch_drgcms_form_field.rb +96 -0
  419. data/config/initializers/patch_for_elfinder.rb +114 -0
  420. data/config/routes.rb +2 -0
  421. data/lib/drg_default_html_editor/engine.rb +14 -0
  422. data/lib/drg_default_html_editor/version.rb +3 -0
  423. data/lib/drg_default_html_editor.rb +6 -0
  424. data/lib/drg_default_html_editor.rb~ +6 -0
  425. data/lib/tasks/drg_default_html_editor_copy_assets.rake +10 -0
  426. data/lib/tasks/drg_default_html_editor_tasks.rake +4 -0
  427. data/test/drg_default_html_editor_test.rb +7 -0
  428. data/test/dummy/README.rdoc +261 -0
  429. data/test/dummy/Rakefile +7 -0
  430. data/test/dummy/app/assets/javascripts/application.js +15 -0
  431. data/test/dummy/app/assets/stylesheets/application.css +13 -0
  432. data/test/dummy/app/controllers/application_controller.rb +3 -0
  433. data/test/dummy/app/helpers/application_helper.rb +2 -0
  434. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  435. data/test/dummy/config/application.rb +59 -0
  436. data/test/dummy/config/boot.rb +10 -0
  437. data/test/dummy/config/database.yml +25 -0
  438. data/test/dummy/config/environment.rb +5 -0
  439. data/test/dummy/config/environments/development.rb +37 -0
  440. data/test/dummy/config/environments/production.rb +67 -0
  441. data/test/dummy/config/environments/test.rb +37 -0
  442. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  443. data/test/dummy/config/initializers/inflections.rb +15 -0
  444. data/test/dummy/config/initializers/mime_types.rb +5 -0
  445. data/test/dummy/config/initializers/secret_token.rb +7 -0
  446. data/test/dummy/config/initializers/session_store.rb +8 -0
  447. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  448. data/test/dummy/config/locales/en.yml +5 -0
  449. data/test/dummy/config/routes.rb +58 -0
  450. data/test/dummy/config.ru +4 -0
  451. data/test/dummy/public/404.html +26 -0
  452. data/test/dummy/public/422.html +26 -0
  453. data/test/dummy/public/500.html +25 -0
  454. data/test/dummy/public/favicon.ico +0 -0
  455. data/test/dummy/script/rails +6 -0
  456. data/test/integration/navigation_test.rb +10 -0
  457. data/test/test_helper.rb +15 -0
  458. metadata +574 -0
@@ -0,0 +1,1103 @@
1
+ <?php
2
+
3
+ /**
4
+ * elFinder - file manager for web.
5
+ * Core class.
6
+ *
7
+ * @package elfinder
8
+ * @author Dmitry (dio) Levashov
9
+ * @author Troex Nevelin
10
+ * @author Alexey Sukhotin
11
+ **/
12
+ class elFinder {
13
+
14
+ /**
15
+ * API version number
16
+ *
17
+ * @var string
18
+ **/
19
+ protected $version = '2.0';
20
+
21
+ /**
22
+ * Storages (root dirs)
23
+ *
24
+ * @var array
25
+ **/
26
+ protected $volumes = array();
27
+
28
+ /**
29
+ * Mounted volumes count
30
+ * Required to create unique volume id
31
+ *
32
+ * @var int
33
+ **/
34
+ public static $volumesCnt = 1;
35
+
36
+ /**
37
+ * Default root (storage)
38
+ *
39
+ * @var elFinderStorageDriver
40
+ **/
41
+ protected $default = null;
42
+
43
+ /**
44
+ * Commands and required arguments list
45
+ *
46
+ * @var array
47
+ **/
48
+ protected $commands = array(
49
+ 'open' => array('target' => false, 'tree' => false, 'init' => false, 'mimes' => false),
50
+ 'ls' => array('target' => true, 'mimes' => false),
51
+ 'tree' => array('target' => true),
52
+ 'parents' => array('target' => true),
53
+ 'tmb' => array('targets' => true),
54
+ 'file' => array('target' => true, 'download' => false),
55
+ 'size' => array('targets' => true),
56
+ 'mkdir' => array('target' => true, 'name' => true),
57
+ 'mkfile' => array('target' => true, 'name' => true, 'mimes' => false),
58
+ 'rm' => array('targets' => true),
59
+ 'rename' => array('target' => true, 'name' => true, 'mimes' => false),
60
+ 'duplicate' => array('targets' => true, 'suffix' => false),
61
+ 'paste' => array('dst' => true, 'targets' => true, 'cut' => false, 'mimes' => false),
62
+ 'upload' => array('target' => true, 'FILES' => true, 'mimes' => false, 'html' => false),
63
+ 'get' => array('target' => true),
64
+ 'put' => array('target' => true, 'content' => '', 'mimes' => false),
65
+ 'archive' => array('targets' => true, 'type' => true, 'mimes' => false),
66
+ 'extract' => array('target' => true, 'mimes' => false),
67
+ 'search' => array('q' => true, 'mimes' => false),
68
+ 'info' => array('targets' => true),
69
+ 'dim' => array('target' => true),
70
+ 'resize' => array('target' => true, 'width' => true, 'height' => true, 'mode' => false, 'x' => false, 'y' => false, 'degree' => false)
71
+ );
72
+
73
+ /**
74
+ * Commands listeners
75
+ *
76
+ * @var array
77
+ **/
78
+ protected $listeners = array();
79
+
80
+ /**
81
+ * script work time for debug
82
+ *
83
+ * @var string
84
+ **/
85
+ protected $time = 0;
86
+ /**
87
+ * Is elFinder init correctly?
88
+ *
89
+ * @var bool
90
+ **/
91
+ protected $loaded = false;
92
+ /**
93
+ * Send debug to client?
94
+ *
95
+ * @var string
96
+ **/
97
+ protected $debug = false;
98
+
99
+ /**
100
+ * undocumented class variable
101
+ *
102
+ * @var string
103
+ **/
104
+ protected $uploadDebug = '';
105
+
106
+ /**
107
+ * Errors from not mounted volumes
108
+ *
109
+ * @var array
110
+ **/
111
+ public $mountErrors = array();
112
+
113
+ // Errors messages
114
+ const ERROR_UNKNOWN = 'errUnknown';
115
+ const ERROR_UNKNOWN_CMD = 'errUnknownCmd';
116
+ const ERROR_CONF = 'errConf';
117
+ const ERROR_CONF_NO_JSON = 'errJSON';
118
+ const ERROR_CONF_NO_VOL = 'errNoVolumes';
119
+ const ERROR_INV_PARAMS = 'errCmdParams';
120
+ const ERROR_OPEN = 'errOpen';
121
+ const ERROR_DIR_NOT_FOUND = 'errFolderNotFound';
122
+ const ERROR_FILE_NOT_FOUND = 'errFileNotFound'; // 'File not found.'
123
+ const ERROR_TRGDIR_NOT_FOUND = 'errTrgFolderNotFound'; // 'Target folder "$1" not found.'
124
+ const ERROR_NOT_DIR = 'errNotFolder';
125
+ const ERROR_NOT_FILE = 'errNotFile';
126
+ const ERROR_PERM_DENIED = 'errPerm';
127
+ const ERROR_LOCKED = 'errLocked'; // '"$1" is locked and can not be renamed, moved or removed.'
128
+ const ERROR_EXISTS = 'errExists'; // 'File named "$1" already exists.'
129
+ const ERROR_INVALID_NAME = 'errInvName'; // 'Invalid file name.'
130
+ const ERROR_MKDIR = 'errMkdir';
131
+ const ERROR_MKFILE = 'errMkfile';
132
+ const ERROR_RENAME = 'errRename';
133
+ const ERROR_COPY = 'errCopy';
134
+ const ERROR_MOVE = 'errMove';
135
+ const ERROR_COPY_FROM = 'errCopyFrom';
136
+ const ERROR_COPY_TO = 'errCopyTo';
137
+ const ERROR_COPY_ITSELF = 'errCopyInItself';
138
+ const ERROR_REPLACE = 'errReplace'; // 'Unable to replace "$1".'
139
+ const ERROR_RM = 'errRm'; // 'Unable to remove "$1".'
140
+ const ERROR_RM_SRC = 'errRmSrc'; // 'Unable remove source file(s)'
141
+ const ERROR_UPLOAD = 'errUpload'; // 'Upload error.'
142
+ const ERROR_UPLOAD_FILE = 'errUploadFile'; // 'Unable to upload "$1".'
143
+ const ERROR_UPLOAD_NO_FILES = 'errUploadNoFiles'; // 'No files found for upload.'
144
+ const ERROR_UPLOAD_TOTAL_SIZE = 'errUploadTotalSize'; // 'Data exceeds the maximum allowed size.'
145
+ const ERROR_UPLOAD_FILE_SIZE = 'errUploadFileSize'; // 'File exceeds maximum allowed size.'
146
+ const ERROR_UPLOAD_FILE_MIME = 'errUploadMime'; // 'File type not allowed.'
147
+ const ERROR_UPLOAD_TRANSFER = 'errUploadTransfer'; // '"$1" transfer error.'
148
+ // const ERROR_ACCESS_DENIED = 'errAccess';
149
+ const ERROR_NOT_REPLACE = 'errNotReplace'; // Object "$1" already exists at this location and can not be replaced with object of another type.
150
+ const ERROR_SAVE = 'errSave';
151
+ const ERROR_EXTRACT = 'errExtract';
152
+ const ERROR_ARCHIVE = 'errArchive';
153
+ const ERROR_NOT_ARCHIVE = 'errNoArchive';
154
+ const ERROR_ARCHIVE_TYPE = 'errArcType';
155
+ const ERROR_ARC_SYMLINKS = 'errArcSymlinks';
156
+ const ERROR_ARC_MAXSIZE = 'errArcMaxSize';
157
+ const ERROR_RESIZE = 'errResize';
158
+ const ERROR_UNSUPPORT_TYPE = 'errUsupportType';
159
+ const ERROR_NOT_UTF8_CONTENT = 'errNotUTF8Content';
160
+
161
+ /**
162
+ * Constructor
163
+ *
164
+ * @param array elFinder and roots configurations
165
+ * @return void
166
+ * @author Dmitry (dio) Levashov
167
+ **/
168
+ public function __construct($opts) {
169
+
170
+ $this->time = $this->utime();
171
+ $this->debug = (isset($opts['debug']) && $opts['debug'] ? true : false);
172
+
173
+ setlocale(LC_ALL, !empty($opts['locale']) ? $opts['locale'] : 'en_US.UTF-8');
174
+
175
+ // bind events listeners
176
+ if (!empty($opts['bind']) && is_array($opts['bind'])) {
177
+ foreach ($opts['bind'] as $cmd => $handler) {
178
+ $this->bind($cmd, $handler);
179
+ }
180
+ }
181
+
182
+ // "mount" volumes
183
+ if (isset($opts['roots']) && is_array($opts['roots'])) {
184
+
185
+ foreach ($opts['roots'] as $i => $o) {
186
+ $class = 'elFinderVolume'.(isset($o['driver']) ? $o['driver'] : '');
187
+
188
+ if (class_exists($class)) {
189
+ $volume = new $class();
190
+
191
+ if ($volume->mount($o)) {
192
+ // unique volume id (ends on "_") - used as prefix to files hash
193
+ $id = $volume->id();
194
+
195
+ $this->volumes[$id] = $volume;
196
+ if (!$this->default && $volume->isReadable()) {
197
+ $this->default = $this->volumes[$id];
198
+ }
199
+ } else {
200
+ $this->mountErrors[] = 'Driver "'.$class.'" : '.implode(' ', $volume->error());
201
+ }
202
+ } else {
203
+ $this->mountErrors[] = 'Driver "'.$class.'" does not exists';
204
+ }
205
+ }
206
+ }
207
+ // if at least one redable volume - ii desu >_<
208
+ $this->loaded = !empty($this->default);
209
+ }
210
+
211
+ /**
212
+ * Return true if fm init correctly
213
+ *
214
+ * @return bool
215
+ * @author Dmitry (dio) Levashov
216
+ **/
217
+ public function loaded() {
218
+ return $this->loaded;
219
+ }
220
+
221
+ /**
222
+ * Return version (api) number
223
+ *
224
+ * @return string
225
+ * @author Dmitry (dio) Levashov
226
+ **/
227
+ public function version() {
228
+ return $this->version;
229
+ }
230
+
231
+ /**
232
+ * Add handler to elFinder command
233
+ *
234
+ * @param string command name
235
+ * @param string|array callback name or array(object, method)
236
+ * @return elFinder
237
+ * @author Dmitry (dio) Levashov
238
+ **/
239
+ public function bind($cmd, $handler) {
240
+ $cmds = array_map('trim', explode(' ', $cmd));
241
+
242
+ foreach ($cmds as $cmd) {
243
+ if ($cmd) {
244
+ if (!isset($this->listeners[$cmd])) {
245
+ $this->listeners[$cmd] = array();
246
+ }
247
+
248
+ if ((is_array($handler) && count($handler) == 2 && is_object($handler[0]) && method_exists($handler[0], $handler[1]))
249
+ || function_exists($handler)) {
250
+ $this->listeners[$cmd][] = $handler;
251
+ }
252
+ }
253
+ }
254
+
255
+ return $this;
256
+ }
257
+
258
+ /**
259
+ * Remove event (command exec) handler
260
+ *
261
+ * @param string command name
262
+ * @param string|array callback name or array(object, method)
263
+ * @return elFinder
264
+ * @author Dmitry (dio) Levashov
265
+ **/
266
+ public function unbind($cmd, $handler) {
267
+ if (!empty($this->listeners[$cmd])) {
268
+ foreach ($this->listeners[$cmd] as $i => $h) {
269
+ if ($h === $handler) {
270
+ unset($this->listeners[$cmd][$i]);
271
+ return $this;
272
+ }
273
+ }
274
+ }
275
+ return $this;
276
+ }
277
+
278
+ /**
279
+ * Return true if command exists
280
+ *
281
+ * @param string command name
282
+ * @return bool
283
+ * @author Dmitry (dio) Levashov
284
+ **/
285
+ public function commandExists($cmd) {
286
+ return $this->loaded && isset($this->commands[$cmd]) && method_exists($this, $cmd);
287
+ }
288
+
289
+ /**
290
+ * Return command required arguments info
291
+ *
292
+ * @param string command name
293
+ * @return array
294
+ * @author Dmitry (dio) Levashov
295
+ **/
296
+ public function commandArgsList($cmd) {
297
+ return $this->commandExists($cmd) ? $this->commands[$cmd] : array();
298
+ }
299
+
300
+ /**
301
+ * Exec command and return result
302
+ *
303
+ * @param string $cmd command name
304
+ * @param array $args command arguments
305
+ * @return array
306
+ * @author Dmitry (dio) Levashov
307
+ **/
308
+ public function exec($cmd, $args) {
309
+
310
+ if (!$this->loaded) {
311
+ return array('error' => $this->error(self::ERROR_CONF, self::ERROR_CONF_NO_VOL));
312
+ }
313
+
314
+ if (!$this->commandExists($cmd)) {
315
+ return array('error' => $this->error(self::ERROR_UNKNOWN_CMD));
316
+ }
317
+
318
+ if (!empty($args['mimes']) && is_array($args['mimes'])) {
319
+ foreach ($this->volumes as $id => $v) {
320
+ $this->volumes[$id]->setMimesFilter($args['mimes']);
321
+ }
322
+ }
323
+
324
+ $result = $this->$cmd($args);
325
+
326
+ if (isset($result['removed'])) {
327
+ foreach ($this->volumes as $volume) {
328
+ $result['removed'] = array_merge($result['removed'], $volume->removed());
329
+ $volume->resetRemoved();
330
+ }
331
+ }
332
+
333
+ // call handlers for this command
334
+ if (!empty($this->listeners[$cmd])) {
335
+ foreach ($this->listeners[$cmd] as $handler) {
336
+ if ((is_array($handler) && $handler[0]->{$handler[1]}($cmd, $result, $args, $this))
337
+ || (!is_array($handler) && $handler($cmd, $result, $args, $this))) {
338
+ // handler return true to force sync client after command completed
339
+ $result['sync'] = true;
340
+ }
341
+ }
342
+ }
343
+
344
+ // replace removed files info with removed files hashes
345
+ if (!empty($result['removed'])) {
346
+ $removed = array();
347
+ foreach ($result['removed'] as $file) {
348
+ $removed[] = $file['hash'];
349
+ }
350
+ $result['removed'] = array_unique($removed);
351
+ }
352
+ // remove hidden files and filter files by mimetypes
353
+ if (!empty($result['added'])) {
354
+ $result['added'] = $this->filter($result['added']);
355
+ }
356
+ // remove hidden files and filter files by mimetypes
357
+ if (!empty($result['changed'])) {
358
+ $result['changed'] = $this->filter($result['changed']);
359
+ }
360
+
361
+ if ($this->debug || !empty($args['debug'])) {
362
+ $result['debug'] = array(
363
+ 'connector' => 'php',
364
+ 'phpver' => PHP_VERSION,
365
+ 'time' => $this->utime() - $this->time,
366
+ 'memory' => (function_exists('memory_get_peak_usage') ? ceil(memory_get_peak_usage()/1024).'Kb / ' : '').ceil(memory_get_usage()/1024).'Kb / '.ini_get('memory_limit'),
367
+ 'upload' => $this->uploadDebug,
368
+ 'volumes' => array(),
369
+ 'mountErrors' => $this->mountErrors
370
+ );
371
+
372
+ foreach ($this->volumes as $id => $volume) {
373
+ $result['debug']['volumes'][] = $volume->debug();
374
+ }
375
+ }
376
+
377
+ foreach ($this->volumes as $volume) {
378
+ $volume->umount();
379
+ }
380
+
381
+ return $result;
382
+ }
383
+
384
+ /**
385
+ * Return file real path
386
+ *
387
+ * @param string $hash file hash
388
+ * @return string
389
+ * @author Dmitry (dio) Levashov
390
+ **/
391
+ public function realpath($hash) {
392
+ if (($volume = $this->volume($hash)) == false) {
393
+ return false;
394
+ }
395
+ return $volume->realpath($hash);
396
+ }
397
+
398
+ /***************************************************************************/
399
+ /* commands */
400
+ /***************************************************************************/
401
+
402
+ /**
403
+ * Normalize error messages
404
+ *
405
+ * @return array
406
+ * @author Dmitry (dio) Levashov
407
+ **/
408
+ public function error() {
409
+ $errors = array();
410
+
411
+ foreach (func_get_args() as $msg) {
412
+ if (is_array($msg)) {
413
+ $errors = array_merge($errors, $msg);
414
+ } else {
415
+ $errors[] = $msg;
416
+ }
417
+ }
418
+
419
+ return count($errors) ? $errors : array(self::ERROR_UNKNOWN);
420
+ }
421
+
422
+ /**
423
+ * "Open" directory
424
+ * Return array with following elements
425
+ * - cwd - opened dir info
426
+ * - files - opened dir content [and dirs tree if $args[tree]]
427
+ * - api - api version (if $args[init])
428
+ * - uplMaxSize - if $args[init]
429
+ * - error - on failed
430
+ *
431
+ * @param array command arguments
432
+ * @return array
433
+ * @author Dmitry (dio) Levashov
434
+ **/
435
+ protected function open($args) {
436
+ $target = $args['target'];
437
+ $init = !empty($args['init']);
438
+ $tree = !empty($args['tree']);
439
+ $volume = $this->volume($target);
440
+ $cwd = $volume ? $volume->dir($target, true) : false;
441
+ $hash = $init ? 'default folder' : '#'.$target;
442
+
443
+ // on init request we can get invalid dir hash -
444
+ // dir which can not be opened now, but remembered by client,
445
+ // so open default dir
446
+ if ((!$cwd || !$cwd['read']) && $init) {
447
+ $volume = $this->default;
448
+ $cwd = $volume->dir($volume->defaultPath(), true);
449
+ }
450
+
451
+ if (!$cwd) {
452
+ return array('error' => $this->error(self::ERROR_OPEN, $hash, self::ERROR_DIR_NOT_FOUND));
453
+ }
454
+ if (!$cwd['read']) {
455
+ return array('error' => $this->error(self::ERROR_OPEN, $hash, self::ERROR_PERM_DENIED));
456
+ }
457
+
458
+ $files = array();
459
+
460
+ // get folders trees
461
+ if ($args['tree']) {
462
+ foreach ($this->volumes as $id => $v) {
463
+
464
+ if (($tree = $v->tree('', 0, $cwd['hash'])) != false) {
465
+ $files = array_merge($files, $tree);
466
+ }
467
+ }
468
+ }
469
+
470
+ // get current working directory files list and add to $files if not exists in it
471
+ if (($ls = $volume->scandir($cwd['hash'])) === false) {
472
+ return array('error' => $this->error(self::ERROR_OPEN, $cwd['name'], $volume->error()));
473
+ }
474
+
475
+ foreach ($ls as $file) {
476
+ if (!in_array($file, $files)) {
477
+ $files[] = $file;
478
+ }
479
+ }
480
+
481
+ $result = array(
482
+ 'cwd' => $cwd,
483
+ 'options' => $volume->options($cwd['hash']),
484
+ 'files' => $files
485
+ );
486
+
487
+ if (!empty($args['init'])) {
488
+ $result['api'] = $this->version;
489
+ $result['uplMaxSize'] = ini_get('upload_max_filesize');
490
+ }
491
+
492
+ return $result;
493
+ }
494
+
495
+ /**
496
+ * Return dir files names list
497
+ *
498
+ * @param array command arguments
499
+ * @return array
500
+ * @author Dmitry (dio) Levashov
501
+ **/
502
+ protected function ls($args) {
503
+ $target = $args['target'];
504
+
505
+ if (($volume = $this->volume($target)) == false
506
+ || ($list = $volume->ls($target)) === false) {
507
+ return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
508
+ }
509
+ return array('list' => $list);
510
+ }
511
+
512
+ /**
513
+ * Return subdirs for required directory
514
+ *
515
+ * @param array command arguments
516
+ * @return array
517
+ * @author Dmitry (dio) Levashov
518
+ **/
519
+ protected function tree($args) {
520
+ $target = $args['target'];
521
+
522
+ if (($volume = $this->volume($target)) == false
523
+ || ($tree = $volume->tree($target)) == false) {
524
+ return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
525
+ }
526
+
527
+ return array('tree' => $tree);
528
+ }
529
+
530
+ /**
531
+ * Return parents dir for required directory
532
+ *
533
+ * @param array command arguments
534
+ * @return array
535
+ * @author Dmitry (dio) Levashov
536
+ **/
537
+ protected function parents($args) {
538
+ $target = $args['target'];
539
+
540
+ if (($volume = $this->volume($target)) == false
541
+ || ($tree = $volume->parents($target)) == false) {
542
+ return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
543
+ }
544
+
545
+ return array('tree' => $tree);
546
+ }
547
+
548
+ /**
549
+ * Return new created thumbnails list
550
+ *
551
+ * @param array command arguments
552
+ * @return array
553
+ * @author Dmitry (dio) Levashov
554
+ **/
555
+ protected function tmb($args) {
556
+
557
+ $result = array('images' => array());
558
+ $targets = $args['targets'];
559
+
560
+ foreach ($targets as $target) {
561
+ if (($volume = $this->volume($target)) != false
562
+ && (($tmb = $volume->tmb($target)) != false)) {
563
+ $result['images'][$target] = $tmb;
564
+ }
565
+ }
566
+ return $result;
567
+ }
568
+
569
+ /**
570
+ * Required to output file in browser when volume URL is not set
571
+ * Return array contains opened file pointer, root itself and required headers
572
+ *
573
+ * @param array command arguments
574
+ * @return array
575
+ * @author Dmitry (dio) Levashov
576
+ **/
577
+ protected function file($args) {
578
+ $target = $args['target'];
579
+ $download = !empty($args['download']);
580
+ $h403 = 'HTTP/1.x 403 Access Denied';
581
+ $h404 = 'HTTP/1.x 404 Not Found';
582
+
583
+ if (($volume = $this->volume($target)) == false) {
584
+ return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
585
+ }
586
+
587
+ if (($file = $volume->file($target)) == false) {
588
+ return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
589
+ }
590
+
591
+ if (!$file['read']) {
592
+ return array('error' => 'Access denied', 'header' => $h403, 'raw' => true);
593
+ }
594
+
595
+ if (($fp = $volume->open($target)) == false) {
596
+ return array('error' => 'File not found', 'header' => $h404, 'raw' => true);
597
+ }
598
+
599
+ if ($download) {
600
+ $disp = 'attachment';
601
+ $mime = 'application/octet-stream';
602
+ } else {
603
+ $disp = preg_match('/^(image|text)/i', $file['mime']) || $file['mime'] == 'application/x-shockwave-flash'
604
+ ? 'inline'
605
+ : 'attachment';
606
+ $mime = $file['mime'];
607
+ }
608
+
609
+ $filenameEncoded = rawurlencode($file['name']);
610
+ if (strpos($filenameEncoded, '%') === false) { // ASCII only
611
+ $filename = 'filename="'.$file['name'].'"';
612
+ } else {
613
+ $ua = $_SERVER["HTTP_USER_AGENT"];
614
+ if (preg_match('/MSIE [4-8]/', $ua)) { // IE < 9 do not support RFC 6266 (RFC 2231/RFC 5987)
615
+ $filename = 'filename="'.$filenameEncoded.'"';
616
+ } else { // RFC 6266 (RFC 2231/RFC 5987)
617
+ $filename = 'filename*=UTF-8\'\''.$filenameEncoded;
618
+ }
619
+ }
620
+
621
+ $result = array(
622
+ 'volume' => $volume,
623
+ 'pointer' => $fp,
624
+ 'info' => $file,
625
+ 'header' => array(
626
+ 'Content-Type: '.$mime,
627
+ 'Content-Disposition: '.$disp.'; '.$filename,
628
+ 'Content-Location: '.$file['name'],
629
+ 'Content-Transfer-Encoding: binary',
630
+ 'Content-Length: '.$file['size'],
631
+ 'Connection: close'
632
+ )
633
+ );
634
+ return $result;
635
+ }
636
+
637
+ /**
638
+ * Count total files size
639
+ *
640
+ * @param array command arguments
641
+ * @return array
642
+ * @author Dmitry (dio) Levashov
643
+ **/
644
+ protected function size($args) {
645
+ $size = 0;
646
+
647
+ foreach ($args['targets'] as $target) {
648
+ if (($volume = $this->volume($target)) == false
649
+ || ($file = $volume->file($target)) == false
650
+ || !$file['read']) {
651
+ return array('error' => $this->error(self::ERROR_OPEN, '#'.$target));
652
+ }
653
+
654
+ $size += $volume->size($target);
655
+ }
656
+ return array('size' => $size);
657
+ }
658
+
659
+ /**
660
+ * Create directory
661
+ *
662
+ * @param array command arguments
663
+ * @return array
664
+ * @author Dmitry (dio) Levashov
665
+ **/
666
+ protected function mkdir($args) {
667
+ $target = $args['target'];
668
+ $name = $args['name'];
669
+
670
+ if (($volume = $this->volume($target)) == false) {
671
+ return array('error' => $this->error(self::ERROR_MKDIR, $name, self::ERROR_TRGDIR_NOT_FOUND, '#'.$target));
672
+ }
673
+
674
+ return ($dir = $volume->mkdir($target, $name)) == false
675
+ ? array('error' => $this->error(self::ERROR_MKDIR, $name, $volume->error()))
676
+ : array('added' => array($dir));
677
+ }
678
+
679
+ /**
680
+ * Create empty file
681
+ *
682
+ * @param array command arguments
683
+ * @return array
684
+ * @author Dmitry (dio) Levashov
685
+ **/
686
+ protected function mkfile($args) {
687
+ $target = $args['target'];
688
+ $name = $args['name'];
689
+
690
+ if (($volume = $this->volume($target)) == false) {
691
+ return array('error' => $this->error(self::ERROR_MKFILE, $name, self::ERROR_TRGDIR_NOT_FOUND, '#'.$target));
692
+ }
693
+
694
+ return ($file = $volume->mkfile($target, $args['name'])) == false
695
+ ? array('error' => $this->error(self::ERROR_MKFILE, $name, $volume->error()))
696
+ : array('added' => array($file));
697
+ }
698
+
699
+ /**
700
+ * Rename file
701
+ *
702
+ * @param array $args
703
+ * @return array
704
+ * @author Dmitry (dio) Levashov
705
+ **/
706
+ protected function rename($args) {
707
+ $target = $args['target'];
708
+ $name = $args['name'];
709
+
710
+ if (($volume = $this->volume($target)) == false
711
+ || ($rm = $volume->file($target)) == false) {
712
+ return array('error' => $this->error(self::ERROR_RENAME, '#'.$target, self::ERROR_FILE_NOT_FOUND));
713
+ }
714
+ $rm['realpath'] = $volume->realpath($target);
715
+
716
+ return ($file = $volume->rename($target, $name)) == false
717
+ ? array('error' => $this->error(self::ERROR_RENAME, $rm['name'], $volume->error()))
718
+ : array('added' => array($file), 'removed' => array($rm));
719
+ }
720
+
721
+ /**
722
+ * Duplicate file - create copy with "copy %d" suffix
723
+ *
724
+ * @param array $args command arguments
725
+ * @return array
726
+ * @author Dmitry (dio) Levashov
727
+ **/
728
+ protected function duplicate($args) {
729
+ $targets = is_array($args['targets']) ? $args['targets'] : array();
730
+ $result = array('added' => array());
731
+ $suffix = empty($args['suffix']) ? 'copy' : $args['suffix'];
732
+
733
+ foreach ($targets as $target) {
734
+ if (($volume = $this->volume($target)) == false
735
+ || ($src = $volume->file($target)) == false) {
736
+ $result['warning'] = $this->error(self::ERROR_COPY, '#'.$target, self::ERROR_FILE_NOT_FOUND);
737
+ break;
738
+ }
739
+
740
+ if (($file = $volume->duplicate($target, $suffix)) == false) {
741
+ $result['warning'] = $this->error($volume->error());
742
+ break;
743
+ }
744
+
745
+ $result['added'][] = $file;
746
+ }
747
+
748
+ return $result;
749
+ }
750
+
751
+ /**
752
+ * Remove dirs/files
753
+ *
754
+ * @param array command arguments
755
+ * @return array
756
+ * @author Dmitry (dio) Levashov
757
+ **/
758
+ protected function rm($args) {
759
+ $targets = is_array($args['targets']) ? $args['targets'] : array();
760
+ $result = array('removed' => array());
761
+
762
+ foreach ($targets as $target) {
763
+ if (($volume = $this->volume($target)) == false) {
764
+ $result['warning'] = $this->error(self::ERROR_RM, '#'.$target, self::ERROR_FILE_NOT_FOUND);
765
+ return $result;
766
+ }
767
+ if (!$volume->rm($target)) {
768
+ $result['warning'] = $this->error($volume->error());
769
+ return $result;
770
+ }
771
+ }
772
+
773
+ return $result;
774
+ }
775
+
776
+ /**
777
+ * Save uploaded files
778
+ *
779
+ * @param array
780
+ * @return array
781
+ * @author Dmitry (dio) Levashov
782
+ **/
783
+ protected function upload($args) {
784
+ $target = $args['target'];
785
+ $volume = $this->volume($target);
786
+ $files = isset($args['FILES']['upload']) && is_array($args['FILES']['upload']) ? $args['FILES']['upload'] : array();
787
+ $result = array('added' => array(), 'header' => empty($args['html']) ? false : 'Content-Type: text/html; charset=utf-8');
788
+
789
+ if (empty($files)) {
790
+ return array('error' => $this->error(self::ERROR_UPLOAD, self::ERROR_UPLOAD_NO_FILES), 'header' => $header);
791
+ }
792
+
793
+ if (!$volume) {
794
+ return array('error' => $this->error(self::ERROR_UPLOAD, self::ERROR_TRGDIR_NOT_FOUND, '#'.$target), 'header' => $header);
795
+ }
796
+
797
+ foreach ($files['name'] as $i => $name) {
798
+ if (($error = $files['error'][$i]) > 0) {
799
+ $result['warning'] = $this->error(self::ERROR_UPLOAD_FILE, $name, $error == UPLOAD_ERR_INI_SIZE || $error == UPLOAD_ERR_FORM_SIZE ? self::ERROR_UPLOAD_FILE_SIZE : self::ERROR_UPLOAD_TRANSFER);
800
+ $this->uploadDebug = 'Upload error code: '.$error;
801
+ break;
802
+ }
803
+
804
+ $tmpname = $files['tmp_name'][$i];
805
+
806
+ if (($fp = fopen($tmpname, 'rb')) == false) {
807
+ $result['warning'] = $this->error(self::ERROR_UPLOAD_FILE, $name, self::ERROR_UPLOAD_TRANSFER);
808
+ $this->uploadDebug = 'Upload error: unable open tmp file';
809
+ break;
810
+ }
811
+
812
+ if (($file = $volume->upload($fp, $target, $name, $tmpname)) === false) {
813
+ $result['warning'] = $this->error(self::ERROR_UPLOAD_FILE, $name, $volume->error());
814
+ fclose($fp);
815
+ break;
816
+ }
817
+
818
+ fclose($fp);
819
+ $result['added'][] = $file;
820
+ }
821
+
822
+ return $result;
823
+ }
824
+
825
+ /**
826
+ * Copy/move files into new destination
827
+ *
828
+ * @param array command arguments
829
+ * @return array
830
+ * @author Dmitry (dio) Levashov
831
+ **/
832
+ protected function paste($args) {
833
+ $dst = $args['dst'];
834
+ $targets = is_array($args['targets']) ? $args['targets'] : array();
835
+ $cut = !empty($args['cut']);
836
+ $error = $cut ? self::ERROR_MOVE : self::ERROR_COPY;
837
+ $result = array('added' => array(), 'removed' => array());
838
+
839
+ if (($dstVolume = $this->volume($dst)) == false) {
840
+ return array('error' => $this->error($error, '#'.$targets[0], self::ERROR_TRGDIR_NOT_FOUND, '#'.$dst));
841
+ }
842
+
843
+ foreach ($targets as $target) {
844
+ if (($srcVolume = $this->volume($target)) == false) {
845
+ $result['warning'] = $this->error($error, '#'.$target, self::ERROR_FILE_NOT_FOUND);
846
+ break;
847
+ }
848
+
849
+ if (($file = $dstVolume->paste($srcVolume, $target, $dst, $cut)) == false) {
850
+ $result['warning'] = $this->error($dstVolume->error());
851
+ break;
852
+ }
853
+
854
+ $result['added'][] = $file;
855
+ }
856
+ return $result;
857
+ }
858
+
859
+ /**
860
+ * Return file content
861
+ *
862
+ * @param array $args command arguments
863
+ * @return array
864
+ * @author Dmitry (dio) Levashov
865
+ **/
866
+ protected function get($args) {
867
+ $target = $args['target'];
868
+ $volume = $this->volume($target);
869
+
870
+ if (!$volume || ($file = $volume->file($target)) == false) {
871
+ return array('error' => $this->error(self::ERROR_OPEN, '#'.$target, self::ERROR_FILE_NOT_FOUND));
872
+ }
873
+
874
+ if (($content = $volume->getContents($target)) === false) {
875
+ return array('error' => $this->error(self::ERROR_OPEN, $volume->path($target), $volume->error()));
876
+ }
877
+
878
+ $json = json_encode($content);
879
+
880
+ if ($json == 'null' && strlen($json) < strlen($content)) {
881
+ return array('error' => $this->error(self::ERROR_NOT_UTF8_CONTENT, $volume->path($target)));
882
+ }
883
+
884
+ return array('content' => $content);
885
+ }
886
+
887
+ /**
888
+ * Save content into text file
889
+ *
890
+ * @return array
891
+ * @author Dmitry (dio) Levashov
892
+ **/
893
+ protected function put($args) {
894
+ $target = $args['target'];
895
+
896
+ if (($volume = $this->volume($target)) == false
897
+ || ($file = $volume->file($target)) == false) {
898
+ return array('error' => $this->error(self::ERROR_SAVE, '#'.$target, self::ERROR_FILE_NOT_FOUND));
899
+ }
900
+
901
+ if (($file = $volume->putContents($target, $args['content'])) == false) {
902
+ return array('error' => $this->error(self::ERROR_SAVE, $volume->path($target), $volume->error()));
903
+ }
904
+
905
+ return array('changed' => array($file));
906
+ }
907
+
908
+ /**
909
+ * Extract files from archive
910
+ *
911
+ * @param array $args command arguments
912
+ * @return array
913
+ * @author Dmitry (dio) Levashov,
914
+ * @author Alexey Sukhotin
915
+ **/
916
+ protected function extract($args) {
917
+ $target = $args['target'];
918
+ $mimes = !empty($args['mimes']) && is_array($args['mimes']) ? $args['mimes'] : array();
919
+ $error = array(self::ERROR_EXTRACT, '#'.$target);
920
+
921
+ if (($volume = $this->volume($target)) == false
922
+ || ($file = $volume->file($target)) == false) {
923
+ return array('error' => $this->error(self::ERROR_EXTRACT, '#'.$target, self::ERROR_FILE_NOT_FOUND));
924
+ }
925
+
926
+ return ($file = $volume->extract($target))
927
+ ? array('added' => array($file))
928
+ : array('error' => $this->error(self::ERROR_EXTRACT, $volume->path($target), $volume->error()));
929
+ }
930
+
931
+ /**
932
+ * Create archive
933
+ *
934
+ * @param array $args command arguments
935
+ * @return array
936
+ * @author Dmitry (dio) Levashov,
937
+ * @author Alexey Sukhotin
938
+ **/
939
+ protected function archive($args) {
940
+ $type = $args['type'];
941
+ $targets = isset($args['targets']) && is_array($args['targets']) ? $args['targets'] : array();
942
+
943
+ if (($volume = $this->volume($targets[0])) == false) {
944
+ return $this->error(self::ERROR_ARCHIVE, self::ERROR_TRGDIR_NOT_FOUND);
945
+ }
946
+
947
+ return ($file = $volume->archive($targets, $args['type']))
948
+ ? array('added' => array($file))
949
+ : array('error' => $this->error(self::ERROR_ARCHIVE, $volume->error()));
950
+ }
951
+
952
+ /**
953
+ * Search files
954
+ *
955
+ * @param array $args command arguments
956
+ * @return array
957
+ * @author Dmitry Levashov
958
+ **/
959
+ protected function search($args) {
960
+ $q = trim($args['q']);
961
+ $mimes = !empty($args['mimes']) && is_array($args['mimes']) ? $args['mimes'] : array();
962
+ $result = array();
963
+
964
+ foreach ($this->volumes as $volume) {
965
+ $result = array_merge($result, $volume->search($q, $mimes));
966
+ }
967
+
968
+ return array('files' => $result);
969
+ }
970
+
971
+ /**
972
+ * Return file info (used by client "places" ui)
973
+ *
974
+ * @param array $args command arguments
975
+ * @return array
976
+ * @author Dmitry Levashov
977
+ **/
978
+ protected function info($args) {
979
+ $files = array();
980
+
981
+ foreach ($args['targets'] as $hash) {
982
+ if (($volume = $this->volume($hash)) != false
983
+ && ($info = $volume->file($hash)) != false) {
984
+ $files[] = $info;
985
+ }
986
+ }
987
+
988
+ return array('files' => $files);
989
+ }
990
+
991
+ /**
992
+ * Return image dimmensions
993
+ *
994
+ * @param array $args command arguments
995
+ * @return array
996
+ * @author Dmitry (dio) Levashov
997
+ **/
998
+ protected function dim($args) {
999
+ $target = $args['target'];
1000
+
1001
+ if (($volume = $this->volume($target)) != false) {
1002
+ $dim = $volume->dimensions($target);
1003
+ return $dim ? array('dim' => $dim) : array();
1004
+ }
1005
+ return array();
1006
+ }
1007
+
1008
+ /**
1009
+ * Resize image
1010
+ *
1011
+ * @param array command arguments
1012
+ * @return array
1013
+ * @author Dmitry (dio) Levashov
1014
+ * @author Alexey Sukhotin
1015
+ **/
1016
+ protected function resize($args) {
1017
+ $target = $args['target'];
1018
+ $width = $args['width'];
1019
+ $height = $args['height'];
1020
+ $x = (int)$args['x'];
1021
+ $y = (int)$args['y'];
1022
+ $mode = $args['mode'];
1023
+ $bg = null;
1024
+ $degree = (int)$args['degree'];
1025
+
1026
+ if (($volume = $this->volume($target)) == false
1027
+ || ($file = $volume->file($target)) == false) {
1028
+ return array('error' => $this->error(self::ERROR_RESIZE, '#'.$target, self::ERROR_FILE_NOT_FOUND));
1029
+ }
1030
+
1031
+ return ($file = $volume->resize($target, $width, $height, $x, $y, $mode, $bg, $degree))
1032
+ ? array('changed' => array($file))
1033
+ : array('error' => $this->error(self::ERROR_RESIZE, $volume->path($target), $volume->error()));
1034
+ }
1035
+
1036
+ /***************************************************************************/
1037
+ /* utils */
1038
+ /***************************************************************************/
1039
+
1040
+ /**
1041
+ * Return root - file's owner
1042
+ *
1043
+ * @param string file hash
1044
+ * @return elFinderStorageDriver
1045
+ * @author Dmitry (dio) Levashov
1046
+ **/
1047
+ protected function volume($hash) {
1048
+ foreach ($this->volumes as $id => $v) {
1049
+ if (strpos(''.$hash, $id) === 0) {
1050
+ return $this->volumes[$id];
1051
+ }
1052
+ }
1053
+ return false;
1054
+ }
1055
+
1056
+ /**
1057
+ * Return files info array
1058
+ *
1059
+ * @param array $data one file info or files info
1060
+ * @return array
1061
+ * @author Dmitry (dio) Levashov
1062
+ **/
1063
+ protected function toArray($data) {
1064
+ return isset($data['hash']) || !is_array($data) ? array($data) : $data;
1065
+ }
1066
+
1067
+ /**
1068
+ * Return fils hashes list
1069
+ *
1070
+ * @param array $files files info
1071
+ * @return array
1072
+ * @author Dmitry (dio) Levashov
1073
+ **/
1074
+ protected function hashes($files) {
1075
+ $ret = array();
1076
+ foreach ($files as $file) {
1077
+ $ret[] = $file['hash'];
1078
+ }
1079
+ return $ret;
1080
+ }
1081
+
1082
+ /**
1083
+ * Remove from files list hidden files and files with required mime types
1084
+ *
1085
+ * @param array $files files info
1086
+ * @return array
1087
+ * @author Dmitry (dio) Levashov
1088
+ **/
1089
+ protected function filter($files) {
1090
+ foreach ($files as $i => $file) {
1091
+ if (!empty($file['hidden']) || !$this->default->mimeAccepted($file['mime'])) {
1092
+ unset($files[$i]);
1093
+ }
1094
+ }
1095
+ return array_merge($files, array());
1096
+ }
1097
+
1098
+ protected function utime() {
1099
+ $time = explode(" ", microtime());
1100
+ return (double)$time[1] + (double)$time[0];
1101
+ }
1102
+
1103
+ } // END class