organizations_controller.rb 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284
  1. # Copyright (C) 2012-2014 Zammad Foundation, http://zammad-foundation.org/
  2. class OrganizationsController < ApplicationController
  3. before_action :authentication_check
  4. =begin
  5. Format:
  6. JSON
  7. Example:
  8. {
  9. "id":1,
  10. "name":"Znuny GmbH",
  11. "note":"",
  12. "active":true,
  13. "shared":true,
  14. "updated_at":"2012-09-14T17:51:53Z",
  15. "created_at":"2012-09-14T17:51:53Z",
  16. "created_by_id":2,
  17. }
  18. =end
  19. =begin
  20. Resource:
  21. GET /api/v1/organizations
  22. Response:
  23. [
  24. {
  25. "id": 1,
  26. "name": "some_name1",
  27. ...
  28. },
  29. {
  30. "id": 2,
  31. "name": "some_name2",
  32. ...
  33. }
  34. ]
  35. Test:
  36. curl http://localhost/api/v1/organizations -v -u #{login}:#{password}
  37. =end
  38. def index
  39. offset = 0
  40. per_page = 1000
  41. if params[:page] && params[:per_page]
  42. offset = (params[:page].to_i - 1) * params[:per_page].to_i
  43. per_page = params[:per_page].to_i
  44. end
  45. # only allow customer to fetch his own organization
  46. organizations = []
  47. if role?(Z_ROLENAME_CUSTOMER) && !role?(Z_ROLENAME_ADMIN) && !role?(Z_ROLENAME_AGENT)
  48. if current_user.organization_id
  49. organizations = Organization.where(id: current_user.organization_id).offset(offset).limit(per_page)
  50. end
  51. else
  52. organizations = Organization.all.offset(offset).limit(per_page)
  53. end
  54. if params[:full]
  55. assets = {}
  56. item_ids = []
  57. organizations.each {|item|
  58. item_ids.push item.id
  59. assets = item.assets(assets)
  60. }
  61. render json: {
  62. record_ids: item_ids,
  63. assets: assets,
  64. }, status: :ok
  65. return
  66. end
  67. render json: organizations
  68. end
  69. =begin
  70. Resource:
  71. GET /api/v1/organizations/#{id}
  72. Response:
  73. {
  74. "id": 1,
  75. "name": "name_1",
  76. ...
  77. }
  78. Test:
  79. curl http://localhost/api/v1/organizations/#{id} -v -u #{login}:#{password}
  80. =end
  81. def show
  82. # only allow customer to fetch his own organization
  83. if role?(Z_ROLENAME_CUSTOMER) && !role?(Z_ROLENAME_ADMIN) && !role?(Z_ROLENAME_AGENT)
  84. if !current_user.organization_id
  85. render json: {}
  86. return
  87. end
  88. if params[:id].to_i != current_user.organization_id
  89. response_access_deny
  90. return
  91. end
  92. end
  93. if params[:full]
  94. full = Organization.full(params[:id])
  95. render json: full
  96. return
  97. end
  98. model_show_render(Organization, params)
  99. end
  100. =begin
  101. Resource:
  102. POST /api/v1/organizations
  103. Payload:
  104. {
  105. "name": "some_name",
  106. "active": true,
  107. "note": "some note",
  108. "shared": true
  109. }
  110. Response:
  111. {
  112. "id": 1,
  113. "name": "some_name",
  114. ...
  115. }
  116. Test:
  117. curl http://localhost/api/v1/organizations -v -u #{login}:#{password} -H "Content-Type: application/json" -X POST -d '{"name": "some_name","active": true,"shared": true,"note": "some note"}'
  118. =end
  119. def create
  120. return if deny_if_not_role(Z_ROLENAME_AGENT)
  121. model_create_render(Organization, params)
  122. end
  123. =begin
  124. Resource:
  125. PUT /api/v1/organizations/{id}
  126. Payload:
  127. {
  128. "id": 1
  129. "name": "some_name",
  130. "active": true,
  131. "note": "some note",
  132. "shared": true
  133. }
  134. Response:
  135. {
  136. "id": 1,
  137. "name": "some_name",
  138. ...
  139. }
  140. Test:
  141. curl http://localhost/api/v1/organizations -v -u #{login}:#{password} -H "Content-Type: application/json" -X PUT -d '{"id": 1,"name": "some_name","active": true,"shared": true,"note": "some note"}'
  142. =end
  143. def update
  144. return if deny_if_not_role(Z_ROLENAME_AGENT)
  145. model_update_render(Organization, params)
  146. end
  147. =begin
  148. Resource:
  149. DELETE /api/v1/organization/{id}
  150. Response:
  151. {}
  152. Test:
  153. curl http://localhost/api/v1/organization/{id} -v -u #{login}:#{password} -H "Content-Type: application/json" -X DELETE -d '{}'
  154. =end
  155. def destroy
  156. return if deny_if_not_role(Z_ROLENAME_AGENT)
  157. return if model_references_check(Organization, params)
  158. model_destory_render(Organization, params)
  159. end
  160. def search
  161. if role?(Z_ROLENAME_CUSTOMER) && !role?(Z_ROLENAME_ADMIN) && !role?(Z_ROLENAME_AGENT)
  162. response_access_deny
  163. return
  164. end
  165. # set limit for pagination if needed
  166. if params[:page] && params[:per_page]
  167. params[:limit] = params[:page].to_i * params[:per_page].to_i
  168. end
  169. query_params = {
  170. query: params[:term],
  171. limit: params[:limit],
  172. current_user: current_user,
  173. }
  174. if params[:role_ids] && !params[:role_ids].empty?
  175. query_params[:role_ids] = params[:role_ids]
  176. end
  177. # do query
  178. organization_all = Organization.search(query_params)
  179. # do pagination if needed
  180. if params[:page] && params[:per_page]
  181. offset = (params[:page].to_i - 1) * params[:per_page].to_i
  182. organization_all = organization_all.slice(offset, params[:per_page].to_i) || []
  183. end
  184. if params[:expand]
  185. render json: organization_all
  186. return
  187. end
  188. # build result list
  189. if !params[:full]
  190. organizations = []
  191. organization_all.each { |organization|
  192. a = { id: organization.id, label: organization.name }
  193. organizations.push a
  194. }
  195. # return result
  196. render json: organizations
  197. return
  198. end
  199. organization_ids = []
  200. assets = {}
  201. organization_all.each { |organization|
  202. assets = organization.assets(assets)
  203. organization_ids.push organization.id
  204. }
  205. # return result
  206. render json: {
  207. assets: assets,
  208. organization_ids: organization_ids.uniq,
  209. }
  210. end
  211. # GET /api/v1/organizations/history/1
  212. def history
  213. # permission check
  214. if !role?(Z_ROLENAME_ADMIN) && !role?(Z_ROLENAME_AGENT)
  215. response_access_deny
  216. return
  217. end
  218. # get organization data
  219. organization = Organization.find(params[:id])
  220. # get history of organization
  221. history = organization.history_get(true)
  222. # return result
  223. render json: history
  224. end
  225. end