You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
6.3 KiB

  1. <?php
  2. namespace modl;
  3. class ItemDAO extends SQL {
  4. function set(Item $item) {
  5. $this->_sql = '
  6. update item
  7. set name = :name,
  8. creator = :creator,
  9. created = :created,
  10. updated = :updated,
  11. description = :description
  12. where server = :server
  13. and jid = :jid
  14. and node = :node';
  15. $this->prepare(
  16. 'Item',
  17. array(
  18. 'name' => $item->name,
  19. 'created' => $item->created,
  20. 'updated' => $item->updated,
  21. 'server' => $item->server,
  22. 'jid' => $item->jid,
  23. 'node' => $item->node,
  24. 'creator' => $item->creator,
  25. 'description' => $item->description
  26. )
  27. );
  28. $this->run('Item');
  29. if(!$this->_effective) {
  30. $this->_sql = '
  31. insert into item
  32. (server,
  33. creator,
  34. node,
  35. jid,
  36. name,
  37. created,
  38. updated,
  39. description
  40. )
  41. values(
  42. :server,
  43. :creator,
  44. :node,
  45. :jid,
  46. :name,
  47. :created,
  48. :updated,
  49. :description
  50. )';
  51. $this->prepare(
  52. 'Item',
  53. array(
  54. 'name' => $item->name,
  55. 'creator' => $item->creator,
  56. 'created' => $item->created,
  57. 'updated' => $item->updated,
  58. 'server' => $item->server,
  59. 'jid' => $item->jid,
  60. 'node' => $item->node,
  61. 'description' => $item->description
  62. )
  63. );
  64. $this->run('Item');
  65. }
  66. }
  67. function getServers() {
  68. $this->_sql = '
  69. select server, count(node) as number
  70. from item
  71. where node not like :node
  72. group by server
  73. order by number desc';
  74. $this->prepare(
  75. 'Item',
  76. array(
  77. 'node' => 'urn:xmpp:microblog:0:comments%'
  78. )
  79. );
  80. return $this->run('Server');
  81. }
  82. function getConferenceServers() {
  83. $this->_sql = '
  84. select server, count(node) as number
  85. from item
  86. where node not like :node
  87. and node = :name
  88. group by server
  89. order by number desc';
  90. $this->prepare(
  91. 'Item',
  92. array(
  93. 'node' => 'urn:xmpp:microblog:0:comments%',
  94. // It's a hack to affect an empty string
  95. 'name' => ''
  96. )
  97. );
  98. return $this->run('Server');
  99. }
  100. function getGroupServers() {
  101. $this->_sql = '
  102. select server, count(node) as number
  103. from item
  104. where node not like :node
  105. and node != :name
  106. group by server
  107. order by number desc';
  108. $this->prepare(
  109. 'Item',
  110. array(
  111. 'node' => 'urn:xmpp:microblog:0:comments%',
  112. // Little hack here too
  113. 'name' => ''
  114. )
  115. );
  116. return $this->run('Server');
  117. }
  118. function getItems($server) {
  119. $this->_sql = '
  120. select * from item
  121. left outer join (
  122. select node, count(node) as num from postn
  123. where jid = :server
  124. group by node) as p
  125. on p.node = item.node
  126. left outer join (select server, node, subscription from subscription where jid = :node)
  127. as s on s.server = item.server
  128. and s.node = item.node
  129. where item.server= :server
  130. order by name, item.node
  131. ';
  132. $this->prepare(
  133. 'Item',
  134. array(
  135. // Dirty hack, using node param to inject the session key
  136. 'node' => $this->_user,
  137. 'server' => $server
  138. )
  139. );
  140. return $this->run('Item');
  141. }
  142. function getUpdatedItems($limitf = false, $limitr = false) {
  143. $this->_sql = '
  144. select * from item natural join (
  145. select distinct node, max(updated) as num from postn
  146. where node != :node
  147. group by node
  148. order by node) as post
  149. order by num desc
  150. ';
  151. if($limitr)
  152. $this->_sql = $this->_sql.' limit '.$limitr.' offset '.$limitf;
  153. $this->prepare(
  154. 'Item',
  155. array(
  156. 'node' => 'urn:xmpp:microblog:0:comments%'
  157. )
  158. );
  159. return $this->run('Item');
  160. }
  161. function deleteItems($server) {
  162. $this->_sql = '
  163. delete from item
  164. where server= :server';
  165. $this->prepare(
  166. 'Item',
  167. array(
  168. 'server' => $server
  169. )
  170. );
  171. return $this->run('Item');
  172. }
  173. function deleteItem($server, $item) {
  174. $this->_sql = '
  175. delete from item
  176. where server = :server
  177. and node = :node';
  178. $this->prepare(
  179. 'Item',
  180. array(
  181. 'server' => $server,
  182. 'node' => $item
  183. )
  184. );
  185. return $this->run('Item');
  186. }
  187. function getItem($server, $item) {
  188. $this->_sql = '
  189. select * from item
  190. where
  191. node = :node
  192. and server = :server';
  193. $this->prepare(
  194. 'Item',
  195. array(
  196. 'node' => $item,
  197. 'server' => $server
  198. )
  199. );
  200. return $this->run('Item', 'item');
  201. }
  202. }