user.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321
  1. import { REST } from 'vuejs/api/rest-axios'
  2. import { JSONAPI } from 'vuejs/api/json-axios'
  3. import { MA } from 'vuejs/api/ma-axios'
  4. import qs from 'querystring-es3'
  5. export default {
  6. namespaced: true,
  7. // initial state
  8. state: {
  9. uid: null,
  10. // username: '',
  11. mail: '',
  12. csrf_token: null,
  13. logout_token: null,
  14. isloggedin: false,
  15. isAdmin: false,
  16. isAdherent: false,
  17. canSearch: false,
  18. roles: [],
  19. flagcolls: false,
  20. openedCollid: null
  21. },
  22. // getters
  23. getters: {},
  24. // mutations
  25. mutations: {
  26. SetCsrftoken (state, token) {
  27. console.log('SetCsrftoken', token)
  28. state.csrf_token = token
  29. },
  30. setToken (state, data) {
  31. state.uid = data.current_user.uid
  32. // state.username = data.username;
  33. state.mail = data.current_user.mail
  34. state.csrf_token = data.csrf_token
  35. state.isloggedin = true
  36. state.logout_token = data.logout_token
  37. },
  38. setUid (state, uid) {
  39. state.uid = uid
  40. state.isloggedin = true
  41. },
  42. setUser (state, data) {
  43. state.mail = data.mail[0].value
  44. state.uuid = data.uuid[0].value
  45. },
  46. setRoles (state, roles) {
  47. console.log('User setRoles', roles)
  48. state.roles = []
  49. for (let i = 0; i < roles.length; i++) {
  50. state.roles.push(roles[i].target_id)
  51. }
  52. // check if admin
  53. if (
  54. state.roles.indexOf('admin') !== -1 ||
  55. state.roles.indexOf('root') !== -1
  56. ) {
  57. // console.log('is admin');
  58. state.isAdmin = true
  59. }
  60. // check if has access to search
  61. if (state.roles.indexOf('adherent') !== -1) {
  62. // console.log('is admin');
  63. state.canSearch = true
  64. state.isAdherent = true
  65. }
  66. },
  67. setLoggedOut (state) {
  68. console.log('setLoggedOut state', state)
  69. state.uid = null
  70. state.mail = ''
  71. state.csrf_token = null
  72. state.isloggedin = false
  73. state.logout_token = null
  74. if (state.isAdmin) {
  75. // TODO: what if on a page where login is needed (as commerce checkout and cart)
  76. window.location.reload(true)
  77. }
  78. state.asAdmin = false
  79. state.canSearch = false
  80. },
  81. setFlagColls (state, flagcolls) {
  82. console.log('User setFlagColls', flagcolls)
  83. state.flagcolls = flagcolls
  84. },
  85. openFlagColl (state, collid) {
  86. state.openedCollid = collid
  87. },
  88. setLoadedCollItems (state, data) {
  89. console.log('setLoadedCollItems', data)
  90. state.flagcolls[data.collid].loadedItems = data.items
  91. }
  92. },
  93. // actions
  94. actions: {
  95. userRegister ({ dispatch, commit, state }, credentials) {
  96. return new Promise((resolve) => {
  97. REST.get('/session/token').then(({ token }) => {
  98. commit('SetCsrftoken', token)
  99. REST.post('/user/register?_format=json', credentials, {
  100. 'X-CSRF-Token': state.csrftoken
  101. })
  102. .then(({ data }) => {
  103. console.log('user REST registered', data)
  104. dispatch('userLogin', credentials).then(() => {
  105. resolve()
  106. })
  107. })
  108. .catch(error => {
  109. console.warn('Issue with register', error)
  110. Promise.reject(error)
  111. })
  112. })
  113. })
  114. },
  115. userLogin ({ dispatch, state }, credentials) {
  116. return new Promise((resolve, reject) => {
  117. dispatch('getToken', credentials).then(() => {
  118. dispatch('getUser').then(userdata => {
  119. console.log('User Loggedin')
  120. if (state.isAdmin) {
  121. window.location.reload(true)
  122. }
  123. resolve()
  124. })
  125. })
  126. })
  127. },
  128. getToken ({ dispatch, commit, state }, credentials) {
  129. return REST.post('/user/login?_format=json', credentials)
  130. .then(({ data }) => {
  131. console.log('user REST getToken data', data)
  132. commit('setToken', data)
  133. })
  134. .catch(error => {
  135. console.warn('Issue with getToken', error)
  136. Promise.reject(error)
  137. })
  138. },
  139. getUser ({ dispatch, commit, state }) {
  140. return new Promise((resolve, reject) => {
  141. REST.get('/session/token').then(({ data }) => {
  142. console.log('csrftoken', data)
  143. commit('SetCsrftoken', data)
  144. console.log('state.csrf_token', state.csrf_token)
  145. const params = {
  146. token: state.csrf_token
  147. }
  148. REST.get(`/user/${state.uid}?_format=json`, params)
  149. .then(({ data }) => {
  150. console.log('user REST getUser data', data)
  151. console.log('roles', data.roles)
  152. commit('setUser', data)
  153. if (data.roles) {
  154. commit('setRoles', data.roles)
  155. }
  156. dispatch('getUserFlagColls')
  157. resolve()
  158. })
  159. .catch(error => {
  160. console.warn('Issue with getUser', error)
  161. Promise.reject(error)
  162. })
  163. })
  164. })
  165. },
  166. getUserFlagColls ({ dispatch, commit, state }) {
  167. // flags
  168. // REST.get('/flagging_collection/1?_format=json')
  169. // .then(( data ) => {
  170. // console.log('TEST FLAG REST data', data)
  171. // })
  172. // .catch(error => {
  173. // console.warn('Issue USER TEST FLAG REST', error)
  174. // Promise.reject(error)
  175. // })
  176. return MA.get('materio_flag/user_flagging_collections')
  177. .then(({ data }) => {
  178. console.log('user MA getFlags data', data)
  179. commit('setFlagColls', data)
  180. })
  181. .catch(error => {
  182. console.warn('Issue USER MA getFlags', error)
  183. Promise.reject(error)
  184. })
  185. },
  186. // https://drupal.stackexchange.com/questions/248539/cant-get-flagging-api-to-accept-post-request
  187. createFlagColl ({ dispatch, commit, state }, new_collection_name) {
  188. console.log('user createFlagColl', new_collection_name)
  189. return new Promise((resolve, reject) => {
  190. const params = {
  191. name: new_collection_name
  192. }
  193. MA.post('materio_flag/create_user_flagging_collection', params)
  194. .then(({ data }) => {
  195. console.log('user MA createFlagColl data', data)
  196. if (data.status) {
  197. dispatch('getUserFlagColls').then(() => {
  198. resolve()
  199. })
  200. }
  201. })
  202. .catch(error => {
  203. console.warn('Issue USER MA createFlag', error)
  204. reject(error)
  205. })
  206. })
  207. },
  208. deleteFlagColl ({ dispatch, commit, state }, flagcollid) {
  209. console.log('user deleteFlagColl', flagcollid)
  210. return new Promise((resolve, reject) => {
  211. const params = {
  212. flagcollid: flagcollid
  213. }
  214. MA.post('materio_flag/delete_user_flagging_collection', params)
  215. .then(({ data }) => {
  216. console.log('user MA deleteFlagColl data', data)
  217. dispatch('getUserFlagColls').then(() => {
  218. resolve()
  219. })
  220. })
  221. .catch(error => {
  222. console.warn('Issue USER MA createFlag', error)
  223. reject(error)
  224. })
  225. })
  226. },
  227. flag ({ dispatch, commit, state }, args) {
  228. console.log('user flag', args.uuid, args.collid)
  229. return new Promise((resolve, reject) => {
  230. const params = {
  231. flagid: state.flagcolls[args.collid].flag_id,
  232. uuid: args.uuid,
  233. flagcollid: args.collid
  234. }
  235. return MA.post('materio_flag/flag', params)
  236. .then(({ data }) => {
  237. console.log('user MA flag', data)
  238. dispatch('getUserFlagColls').then(() => {
  239. resolve()
  240. })
  241. })
  242. .catch(error => {
  243. console.warn('Issue USER MA flag', error)
  244. })
  245. })
  246. },
  247. unFlag ({ dispatch, commit, state }, args) {
  248. console.log('user unFlag', args.uuid, args.collid)
  249. return new Promise((resolve, reject) => {
  250. const params = {
  251. flagid: state.flagcolls[args.collid].flag_id,
  252. uuid: args.uuid,
  253. flagcollid: args.collid
  254. }
  255. return MA.post('materio_flag/unflag', params)
  256. .then(({ data }) => {
  257. console.log('user MA unFlag', data)
  258. dispatch('getUserFlagColls').then(() => {
  259. resolve()
  260. })
  261. })
  262. .catch(error => {
  263. console.warn('Issue USER MA unFlag', error)
  264. })
  265. })
  266. },
  267. openFlagColl ({ commit, dispatch }, collid) {
  268. console.log('user openFlagColl', collid)
  269. commit('openFlagColl', collid)
  270. dispatch('loadFlagCollItems', collid)
  271. },
  272. loadFlagCollItems ({ commit, state }, collid) {
  273. console.log('loadFlagCollItems', state.flagcolls[collid].items_uuids)
  274. const params = {
  275. 'filter[uuids-groupe][group][conjunction]': 'OR'
  276. }
  277. const uuids = state.flagcolls[collid].items_uuids
  278. // console.log('uuids', uuids)
  279. for (let i = 0; i < uuids.length; i++) {
  280. let uuid = uuids[i]
  281. // console.log('uuid', uuid)
  282. params[`filter[${uuid}][condition][path]`] = 'id'
  283. params[`filter[${uuid}][condition][value]`] = uuid
  284. params[`filter[${uuid}][condition][operator]`] = '='
  285. params[`filter[${uuid}][condition][memberOf]`] = 'uuids-groupe'
  286. }
  287. console.log('search JSONAPI params', params);
  288. const q = qs.stringify(params)
  289. return JSONAPI.get('node/materiau?' + q)
  290. .then(({ data }) => {
  291. console.log('user loadFlagCollItems data', data)
  292. // dispatch('parseItems', { data: data.data, uuids: uuids })
  293. commit('setLoadedCollItems', {collid: collid, items: data.data})
  294. })
  295. .catch((error) => {
  296. console.warn('Issue with loadFlagCollItems', error)
  297. Promise.reject(error)
  298. })
  299. },
  300. userLogout ({ commit, state }) {
  301. const credentials = qs.stringify({
  302. token: state.csrf_token
  303. })
  304. REST.post('/user/logout', credentials)
  305. .then(resp => {
  306. console.log('userLogout resp', resp)
  307. commit('setLoggedOut')
  308. })
  309. .catch(error => {
  310. console.warn('Issue with logout', error)
  311. Promise.reject(error)
  312. })
  313. }
  314. }
  315. }