166 Commits

Author SHA1 Message Date
Mathieu Lagacé 2f9e6d4d15 Update Picture to S3 2020-10-24 19:28:09 -04:00
Mathieu Lagacé 4f83774200 File systeme V3 2020-10-19 18:45:05 -04:00
Mathieu Lagacé 1664bb06aa Merge branch 'master' into file-v3
# Conflicts:
#	config/version.yml
2020-10-13 14:48:50 -04:00
Mathieu Lagace 1bec8805a7 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!116
2020-10-06 23:05:17 +00:00
Mathieu Lagace 5b69a9943e Merge branch 'hide-event' into 'dev'
Hide event

See merge request TheGamecraft/c-cms!115
2020-10-06 22:59:11 +00:00
Mathieu Lagacé f7845d8f1b hide event 2020-10-06 18:54:56 -04:00
Mathieu Lagace 63301aec97 Merge branch 'schedule-table' into 'master'
Schedule Table view update & permissions update

See merge request TheGamecraft/c-cms!114
2020-10-02 22:09:26 +00:00
Mathieu Lagacé 9cdd47a6f4 Schedule Table view update & permissions update 2020-10-02 18:05:03 -04:00
Mathieu Lagace 6eb517a0cb Merge branch 'schedule-table' into 'master'
Update app/Event.php

See merge request TheGamecraft/c-cms!113
2020-10-02 18:19:38 +00:00
Mathieu Lagace 95a088ddc6 Update app/Event.php 2020-10-02 18:15:24 +00:00
Mathieu Lagace f1df0ee562 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!112
2020-10-02 17:50:43 +00:00
Mathieu Lagace ef66ed3d69 Merge branch 'schedule-table' into 'dev'
Schedule table

See merge request TheGamecraft/c-cms!111
2020-10-02 17:06:02 +00:00
Mathieu Lagace f45bc5522e Merge branch 'dev' into 'schedule-table'
# Conflicts:
#   config/version.yml
2020-10-02 17:02:03 +00:00
Mathieu Lagacé 60c5a995f2 Add table view for calendar 2020-10-02 12:38:07 -04:00
Mathieu Lagacé 2a8178c6f3 Fix edit event bug 2020-09-12 10:44:15 -04:00
Mathieu Lagacé 60f0e1c7ec filesysteme 2020-09-12 10:14:10 -04:00
Mathieu Lagacé b3f471e6e9 filesysteme 2020-09-12 10:13:21 -04:00
Mathieu Lagace ae00c9e7e0 Update .gitlab-ci.yml 2020-08-03 15:50:53 +00:00
Mathieu Lagace d730f358fe Update .gitlab-ci.yml 2020-08-03 15:49:18 +00:00
Mathieu Lagace ba1d56c7d3 Merge branch 'update-profil' into 'dev'
update profil

See merge request TheGamecraft/c-cms!109
2020-08-03 15:48:08 +00:00
Mathieu Lagace 6d50d2c57a update profil 2020-08-03 11:44:07 -04:00
Mathieu Lagace 465bac0e94 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!108
2020-07-31 22:11:30 +00:00
Mathieu Lagace ec7a6c57f5 Update Envoy.blade.php 2020-07-31 21:59:54 +00:00
Mathieu Lagace efd70e3fea Merge branch 'update-profil' into 'dev'
fix bug in news when user is delete

See merge request TheGamecraft/c-cms!107
2020-07-31 21:40:50 +00:00
Mathieu Lagace d8e36b8479 fix bug in news when user is delete 2020-07-31 17:36:46 -04:00
Mathieu Lagace 2b3b64362a Merge branch 'update-profil' into 'dev'
add first login logic

See merge request TheGamecraft/c-cms!106
2020-07-31 21:33:48 +00:00
Mathieu Lagace 8158f8a8aa add first login logic 2020-07-31 17:29:47 -04:00
Mathieu Lagace 039b09b681 Update Envoy.blade.php 2020-07-31 00:20:52 +00:00
Mathieu Lagace c703ade5cb Merge branch 'update-schedule' into 'dev'
Update schedule

See merge request TheGamecraft/c-cms!105
2020-07-30 22:46:56 +00:00
Mathieu Lagace 65876e5b78 Update dashboard 2020-07-30 18:42:43 -04:00
Mathieu Lagace 4c5d635d5b Working schedule v2 2020-07-30 17:46:11 -04:00
Mathieu Lagace 8d22092ea8 Merge branch 'update-notification' into 'dev'
update notification

See merge request TheGamecraft/c-cms!104
2020-07-27 20:45:58 +00:00
Mathieu Lagace 2d64d6d422 update notification 2020-07-27 16:41:28 -04:00
Mathieu Lagace c16d1e7e95 Merge branch 'Update_versioning' into 'dev'
Revert Envoy.blade.php

See merge request TheGamecraft/c-cms!103
2020-06-22 00:40:08 +00:00
George Frederick "Buzz" Beurling e066ace8f8 Revert Envoy.blade.php 2020-06-21 20:36:13 -04:00
Mathieu Lagace 50c051f0cc Merge branch 'Update_versioning' into 'dev'
Update Envoy

See merge request TheGamecraft/c-cms!102
2020-06-22 00:24:51 +00:00
George Frederick "Buzz" Beurling 8d2af9053a Update Envoy 2020-06-21 20:20:46 -04:00
Mathieu Lagace 7b024ebffe Merge branch 'Update_versioning' into 'dev'
Update versioning

See merge request TheGamecraft/c-cms!101
2020-06-22 00:03:16 +00:00
George Frederick "Buzz" Beurling 9ff095a2ee Update version.yml 2020-06-21 19:57:05 -04:00
George Frederick "Buzz" Beurling 9caca508ed Update version.yml 2020-06-21 19:55:34 -04:00
George Frederick "Buzz" Beurling b79c54fd32 Update footer with new versioning 2020-06-21 19:52:12 -04:00
George Frederick "Buzz" Beurling 418455c508 Add laravel-version 2020-06-21 18:26:15 -04:00
Mathieu Lagace 2a8f73cc76 Merge branch 'Update_news_display' into 'dev'
Update CI/CD Envoy Script

See merge request TheGamecraft/c-cms!100
2020-06-21 16:55:33 +00:00
George Frederick "Buzz" Beurling ad4b9a8ff2 Update CI/CD Envoy Script 2020-06-21 12:51:49 -04:00
Mathieu Lagace d944701957 Merge branch '3.2.5' into 'dev'
3.2.5

See merge request TheGamecraft/c-cms!99
2020-06-21 16:43:03 +00:00
Mathieu Lagace f1e37487e9 Merge branch 'Update_news_display' into '3.2.5'
Update Message UI in Admin Dashboard

See merge request TheGamecraft/c-cms!98
2020-06-21 16:39:12 +00:00
George Frederick "Buzz" Beurling 9c9ad71a49 Update CI/CD Test Script 2020-06-21 12:30:56 -04:00
George Frederick "Buzz" Beurling 542895c11c Update CI/CD MySQL Password 2020-06-21 12:22:14 -04:00
George Frederick "Buzz" Beurling 4539470537 Update CI/CD 2020-06-21 12:15:32 -04:00
George Frederick "Buzz" Beurling 5a019b2c92 Update Message UI in Admin Dashboard 2020-06-21 11:30:00 -04:00
George Frederick "Buzz" Beurling 8866cafd31 Update Laravel to 7.0 2020-06-20 17:03:30 -04:00
George Frederick "Buzz" Beurling f104c1b61b Ajout de la modification des event_type 2020-04-16 18:32:02 -04:00
Mathieu Lagace 94275f49b2 Merge branch '3.2.5' into 'dev'
April 9 update v2

See merge request TheGamecraft/c-cms!97
2020-04-09 22:28:01 +00:00
George Frederick "Buzz" Beurling 4b659c5db1 April 9 update v2 2020-04-09 18:25:21 -04:00
Mathieu Lagace c7df62b483 Merge branch '3.2.5' into 'dev'
April 9 update v1

See merge request TheGamecraft/c-cms!96
2020-04-09 21:55:16 +00:00
George Frederick "Buzz" Beurling bf28eac68a April 9 update v1 2020-04-09 17:53:09 -04:00
Mathieu Lagace e4aaf461fb Merge branch '3.2.5' into 'dev'
April 9 update

See merge request TheGamecraft/c-cms!95
2020-04-09 21:22:11 +00:00
George Frederick "Buzz" Beurling 50abb9d909 April 9 update 2020-04-09 17:20:03 -04:00
Mathieu Lagace 3da8af3344 Merge branch '3.2.5' into 'dev'
3.2.5

See merge request TheGamecraft/c-cms!94
2020-03-23 00:22:28 +00:00
George Frederick "Buzz" Beurling 94509caf3c Update Docker 2020-03-22 20:19:29 -04:00
George Frederick "Buzz" Beurling ae3be2b977 Permission update 2020-03-22 20:00:23 -04:00
George Frederick "Buzz" Beurling 1e3ae2fbbb File Explorer update + Permission update 2020-03-19 19:07:26 -04:00
George Frederick "Buzz" Beurling 8a0e09cb80 Ajout de la BD OCOM 2020-03-14 09:51:26 -04:00
George Frederick "Buzz" Beurling 7433051f85 Debut BD Cours 2020-03-10 20:38:43 -04:00
George Frederick "Buzz" Beurling 763e00435c Finalisation de Google Drive 2020-03-10 16:26:48 -04:00
Lagacé Mathieu 8189bbce9a Au cas ou 2020-03-05 08:59:10 -05:00
Lagacé Mathieu baef9a1df0 3.2.5 2020-02-01 13:17:32 -05:00
Lagacé Mathieu 03cf1c5493 Test performance 2020-01-24 10:33:16 -05:00
Lagacé Mathieu ef6f403e1b Merge remote-tracking branch 'origin/3.2.5' into 3.2.5 2020-01-22 12:04:39 -05:00
Mathieu Lagace 9e21124e90 To cegep 2020-01-21 21:14:48 -05:00
Mathieu Lagace 299ba8ade7 Merge branch '3.2.5' into 'dev'
Update schedule editor

See merge request TheGamecraft/c-cms!93
2019-12-23 23:00:45 +00:00
Mathieu Lagace c20024ed96 Update schedule editor 2019-12-23 17:57:41 -05:00
Mathieu Lagace 75564bc3e6 Merge branch '3.2.5' into 'dev'
Update schedule editor

See merge request TheGamecraft/c-cms!92
2019-12-22 22:48:43 +00:00
Mathieu Lagace 2c18dc8c1d Update schedule editor 2019-12-22 17:45:44 -05:00
Mathieu Lagace 9d9e4bb8f6 Merge branch '3.2.5' into 'dev'
Turn on perfect-scrollbar

See merge request TheGamecraft/c-cms!91
2019-12-22 18:13:58 +00:00
Mathieu Lagace 047633c2ce Turn on perfect-scrollbar 2019-12-22 13:10:57 -05:00
Mathieu Lagace 104a20925a Merge branch '3.2.5' into 'dev'
Turn off perfect-scrollbar

See merge request TheGamecraft/c-cms!90
2019-12-22 18:00:38 +00:00
Mathieu Lagace e5d28d796a Turn off perfect-scrollbar 2019-12-22 12:57:35 -05:00
Mathieu Lagace 0479c7814c Merge branch '3.2.5' into 'dev'
begin of schedule editor

See merge request TheGamecraft/c-cms!89
2019-12-22 00:15:30 +00:00
Mathieu Lagace ab82a55452 begin of schedule editor 2019-12-21 19:12:36 -05:00
Mathieu Lagace 181720aa64 Merge branch '3.2.5' into 'dev'
begin of schedule editor

See merge request TheGamecraft/c-cms!88
2019-12-21 23:56:07 +00:00
Mathieu Lagace b992286c2e begin of schedule editor 2019-12-21 18:53:04 -05:00
Mathieu Lagace 88d2163e4c Merge branch '3.2.5' into 'dev'
3.2.5

See merge request TheGamecraft/c-cms!87
2019-12-21 23:43:11 +00:00
Mathieu Lagace 997abf460e begin of schedule editor 2019-12-21 18:40:01 -05:00
Lagacé Mathieu a4e5a647d6 Merge remote-tracking branch 'origin/3.2.4' into 3.2.5 2019-12-11 10:47:22 -05:00
Mathieu Lagace 143ccc3750 Merge branch '3.2.4' into 'master'
3.2.4

See merge request TheGamecraft/c-cms!86
2019-12-10 15:32:42 +00:00
Lagacé Mathieu c706bb7361 3.2.4 fix 2019-12-10 10:30:17 -05:00
Lagacé Mathieu 48d998ec67 3.2.4 fix 2019-12-10 10:27:44 -05:00
Lagacé Mathieu 90b551ad31 3.2.5 2019-12-10 10:09:59 -05:00
Mathieu Lagace 09523f2bb0 Update to 6.6 2019-12-04 20:58:20 -05:00
Mathieu Lagace 31e26b6747 Merge branch '3.2.4' into 'master'
Fix for mobile

See merge request TheGamecraft/c-cms!85
2019-11-09 01:05:52 +00:00
Mathieu Lagace c916e5e580 Fix for mobile 2019-11-08 17:35:13 -05:00
Mathieu Lagace 57783b8e85 Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!84
2019-11-08 22:25:19 +00:00
Mathieu Lagace 5c61b124f8 Merge branch '3.2.4' into 'master'
Fix for mobile

See merge request TheGamecraft/c-cms!83
2019-11-08 22:25:19 +00:00
Mathieu Lagace 2f441f36f8 Fix for mobile 2019-11-08 17:23:13 -05:00
Mathieu Lagace 7f032f5fa7 Merge branch '3.2.4' into 'master'
Hotfix

See merge request TheGamecraft/c-cms!82
2019-11-07 22:08:09 +00:00
Mathieu Lagace 537e5dc139 Hotfix 2019-11-07 17:06:01 -05:00
Mathieu Lagace 5585b8a8a7 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!81
2019-11-07 20:59:07 +00:00
Mathieu Lagace 82c50eb03b Merge branch '3.2.4' into 'dev'
Ajout Plan de cours vierge

See merge request TheGamecraft/c-cms!80
2019-11-07 20:55:04 +00:00
Mathieu Lagace 344c406b5a Ajout Plan de cours vierge 2019-11-07 15:52:47 -05:00
Mathieu Lagace 21111ae622 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!79
2019-10-19 20:38:52 +00:00
Mathieu Lagace 13af227a7d Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!78
2019-10-19 20:32:30 +00:00
Mathieu Lagace 073ad62ccf 3.2.4 2019-10-19 16:30:03 -04:00
Mathieu Lagace f3ec54db20 Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!77
2019-10-19 20:24:33 +00:00
Mathieu Lagace fea20bcda9 3.2.4 2019-10-19 16:20:57 -04:00
Mathieu Lagace 44a4035f42 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!76
2019-10-19 20:08:47 +00:00
Mathieu Lagace f61aa35ac3 Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!75
2019-10-19 19:40:43 +00:00
Mathieu Lagace 7e676ddedd 3.2.4 2019-10-19 15:38:19 -04:00
Mathieu Lagace f04f93e89b Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!74
2019-10-19 19:19:20 +00:00
Mathieu Lagace f26631bedf 3.2.4 2019-10-19 15:16:24 -04:00
Mathieu Lagace 799261a7d5 3.2.4 2019-10-19 13:11:42 -04:00
Mathieu Lagace 5c6f2d28bc Merge branch '3.2.4' into 'dev'
MAJ UI Calendar Fix

See merge request TheGamecraft/c-cms!73
2019-10-02 13:34:34 +00:00
Mathieu Lagace 498c80f404 MAJ UI Calendar Fix 2019-10-02 09:32:08 -04:00
Mathieu Lagace 619c335379 Merge branch '3.2.4' into 'dev'
MAJ UI Calendar

See merge request TheGamecraft/c-cms!72
2019-10-02 12:44:25 +00:00
Mathieu Lagace 1c7997c549 MAJ UI Calendar 2019-10-02 08:40:53 -04:00
Mathieu Lagace faf0c20d7d Merge branch '3.2.4' into 'dev'
3.2.4

See merge request TheGamecraft/c-cms!70
2019-10-02 12:16:14 +00:00
Mathieu Lagace 0166c48daa 3.2.4 2019-09-30 17:06:31 -04:00
Mathieu Lagace d1ce6ba6da Merge branch '3.2.3' into '3.2.4'
3.2.3

See merge request TheGamecraft/c-cms!69
2019-09-18 11:50:00 +00:00
Mathieu Lagace 2eabeb4205 3.2.4 2019-09-17 21:40:55 -04:00
Mathieu Lagace ccc947d444 Merge branch '3.2.1' of https://gitlab.com/TheGamecraft/c-cms into 3.2.2 2019-09-14 15:33:56 -04:00
Mathieu Lagace 14cdc8b880 Merge branch '3.2.3' into 'master'
3.2.3

See merge request TheGamecraft/c-cms!68
2019-09-13 20:51:47 +00:00
Mathieu Lagace b24f0baddb 3.2.3 2019-09-13 16:49:03 -04:00
Mathieu Lagace 0f28be3218 Merge branch '3.2.3' into 'master'
3.2.3

See merge request TheGamecraft/c-cms!67
2019-09-13 20:48:50 +00:00
Mathieu Lagace 9fee30f1ee 3.2.3 2019-09-13 16:46:51 -04:00
Mathieu Lagace dccc76d7e7 Merge branch '3.2.3' into 'master'
3.2.3

See merge request TheGamecraft/c-cms!66
2019-09-13 20:42:42 +00:00
Mathieu Lagace 5f7894781c 3.2.3 2019-09-13 16:40:43 -04:00
Mathieu Lagace 037b3b4c47 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!65
2019-09-13 20:33:08 +00:00
Mathieu Lagace f517250bbf Merge branch '3.2.3' into 'dev'
3.2.3

See merge request TheGamecraft/c-cms!64
2019-09-13 20:28:28 +00:00
Mathieu Lagace 7dedd9586b 3.2.3 2019-09-13 16:25:36 -04:00
Mathieu Lagace b7c2b8a632 Perm 2019-09-12 18:21:55 -04:00
Mathieu Lagace 67f49b40e9 Merge remote-tracking branch 'origin/3.2.3' into 3.2.3 2019-09-12 08:02:22 -04:00
Mathieu Lagace 566c5ef0ba Merge remote-tracking branch 'origin/3.2.2' into 3.2.3 2019-09-12 08:02:14 -04:00
Mathieu Lagace 376268aa42 Merge branch '3.2.2' into '3.2.3'
Bug Fix

See merge request TheGamecraft/c-cms!63
2019-09-12 11:58:27 +00:00
Mathieu Lagace 2331beab17 3.2.3 2019-09-12 07:53:18 -04:00
Mathieu Lagace 6e7c5c81e6 Merge branch '3.2.2' into 'dev'
Bug Fix

See merge request TheGamecraft/c-cms!62
2019-09-11 22:56:50 +00:00
Mathieu Lagace c86e6af390 Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!61
2019-09-11 14:15:52 +00:00
Mathieu Lagace 7f07490bdf 3.2.1 2019-09-11 10:13:29 -04:00
Mathieu Lagace f4dd3ed742 Merge branch 'dev' into 'master'
3.2.1

See merge request TheGamecraft/c-cms!60
2019-09-11 12:39:39 +00:00
Mathieu Lagace e78d6c3c12 Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!59
2019-09-11 11:50:58 +00:00
Mathieu Lagace 04dd5ee6b7 Bug Fix 2019-09-11 06:57:45 -04:00
Mathieu Lagace 133f430445 3.2.1 2019-09-08 16:43:34 -04:00
Mathieu Lagace 9a65920265 Merge branch 'dev' into 'master'
Fix 3.2.1c

See merge request TheGamecraft/c-cms!58
2019-09-04 01:33:44 +00:00
Mathieu Lagace ee6b71534a Merge branch '3.2.1' into 'dev'
3.2.1c

See merge request TheGamecraft/c-cms!57
2019-09-04 01:28:46 +00:00
Mathieu Lagace 0bd86285ca 3.2.1c 2019-09-03 21:26:47 -04:00
Mathieu Lagace 245c357b7a Merge branch 'dev' into 'master'
Fix 3.2.1b

See merge request TheGamecraft/c-cms!56
2019-09-03 21:41:39 +00:00
Mathieu Lagace 96e4fc36d1 Merge branch '3.2.1' into 'dev'
3.2.1b

See merge request TheGamecraft/c-cms!55
2019-09-03 21:37:19 +00:00
Mathieu Lagace 0b5b5575d4 3.2.1b 2019-09-03 17:34:48 -04:00
Mathieu Lagace 3a05ddfb0d Merge branch 'dev' into 'master'
Fix 3.2.1a

See merge request TheGamecraft/c-cms!54
2019-09-03 21:25:39 +00:00
Mathieu Lagace 48ccf671ef Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!53
2019-09-03 21:21:24 +00:00
Mathieu Lagace 06f706b3a8 3.2.1 2019-09-03 17:18:45 -04:00
Mathieu Lagace 8fb24e1605 Merge branch 'dev' into 'master'
Mise a jour 3.2.1

See merge request TheGamecraft/c-cms!52
2019-09-03 20:51:53 +00:00
Mathieu Lagace d2a23628cd Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!51
2019-09-03 20:45:02 +00:00
Mathieu Lagace fbd644fd8a 3.2.1 2019-09-03 16:42:45 -04:00
Mathieu Lagace 70b9478dd2 Merge branch '3.2.1' into 'dev'
Fix Bug#100

See merge request TheGamecraft/c-cms!50
2019-08-29 15:13:09 +00:00
Mathieu Lagace dda94c1b7c Fix Bug#100 2019-08-29 11:09:48 -04:00
Mathieu Lagace 47512a221e Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!49
2019-08-28 17:01:01 +00:00
Mathieu Lagace d01bf2fca7 Add ItemCategory form 2019-08-28 12:57:51 -04:00
Mathieu Lagace 1462c4d16d Merge branch '3.2.1' into 'master'
Update CI/CD

See merge request TheGamecraft/c-cms!48
2019-08-28 14:29:23 +00:00
Mathieu Lagace caf44ba58a Update CI/CD 2019-08-28 10:27:17 -04:00
Mathieu Lagace daba93bcfc Merge branch '3.2.1' into 'master'
Update CI/CD

See merge request TheGamecraft/c-cms!47
2019-08-28 14:16:01 +00:00
Mathieu Lagace 28c2f0a13d Update CI/CD 2019-08-28 10:13:30 -04:00
Mathieu Lagace f9bf70d7d3 Merge branch '3.2.1' into 'master'
3.2.1

See merge request TheGamecraft/c-cms!46
2019-08-28 14:04:52 +00:00
Mathieu Lagace 13ed334ea1 Deployement 117 2019-08-28 10:02:25 -04:00
Mathieu Lagace 585c05d1d7 Merge branch '3.2.1' into 'dev'
3.2.1

See merge request TheGamecraft/c-cms!45
2019-08-28 13:31:30 +00:00
Mathieu Lagace a3156ac246 new instance for 227 2019-08-28 09:28:02 -04:00
Mathieu Lagace 509a135e74 Edit Item DB structure 2019-08-27 13:36:55 -04:00
2117 changed files with 180617 additions and 63444 deletions
+2 -2
View File
@@ -33,8 +33,8 @@ MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
NEXMO_KEY=4587feffd # Votre Clé Nexmo API
NEXMO_SECRET=54dasf4e8fa4s4fd4f5s # Votre Mot de passe Nexmo API
NEXMO_KEY= # Votre Clé Nexmo API
NEXMO_SECRET= # Votre Mot de passe Nexmo API
PUSHER_APP_ID=
PUSHER_APP_KEY=
+50 -3
View File
@@ -4,15 +4,25 @@ services:
- mysql:5.7
variables:
MYSQL_DATABASE: homestead
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: ddb
MYSQL_ROOT_PASSWORD: password
DB_HOST: mysql
DB_USERNAME: root
stages:
- build
- test
- deploy
- deploy
unit_test:
stage: test
script:
- cp .env.example .env
- composer install
- php artisan key:generate
- php artisan migrate
- php artisan db:seed
- vendor/bin/phpunit
build:
stage: build
@@ -34,6 +44,7 @@ deploy_697:
environment:
name: escadron697
url: http://escadron697.ca
when: manual
only:
- master
@@ -50,6 +61,41 @@ deploy_736:
environment:
name: escadron736
url: http://736.exvps.ca
when: manual
only:
- master
deploy_227:
stage: deploy
script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- ~/.composer/vendor/bin/envoy run deploy_227 --commit="$CI_COMMIT_SHA"
environment:
name: CCMRC227
url: http://227.exvps.ca
when: manual
only:
- master
deploy_117:
stage: deploy
script:
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )'
- eval $(ssh-agent -s)
- ssh-add <(echo "$SSH_PRIVATE_KEY")
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
- ~/.composer/vendor/bin/envoy run deploy_117 --commit="$CI_COMMIT_SHA"
environment:
name: CCMRC117
url: http://117.exvps.ca
when: manual
only:
- master
@@ -66,5 +112,6 @@ deploy_dev:
environment:
name: dev
url: http://dev.exvps.ca
when: manual
only:
- dev
+1325
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -0,0 +1 @@
C:37:"PHPUnit\Runner\DefaultTestResultCache":273:{a:2:{s:7:"defects";a:2:{s:32:"Tests\Feature\AdminTest::testUrl";i:3;s:30:"Tests\Feature\ECCTest::testUrl";i:3;}s:5:"times";a:3:{s:32:"Tests\Feature\AdminTest::testUrl";d:0.099;s:30:"Tests\Feature\ECCTest::testUrl";d:0.014;s:33:"Tests\Feature\PublicTest::testUrl";d:0.031;}}}
+3 -3
View File
@@ -1,11 +1,11 @@
# Set the base image for subsequent instructions
FROM php:7.2
FROM php:7.4
# Update packages
RUN apt-get update
# Install PHP and composer dependencies
RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev autoconf libc-dev pkg-config
RUN apt-get install -qq git curl libmcrypt-dev libjpeg-dev libpng-dev libfreetype6-dev libbz2-dev autoconf libc-dev pkg-config libzip-dev
# Clear out the local repository of retrieved package files
RUN apt-get clean
@@ -14,7 +14,7 @@ RUN apt-get clean
# Here you can install any other extension that you need during the test and deployment process
RUN docker-php-ext-install pdo_mysql zip
RUN pecl install mcrypt-1.0.1
RUN pecl install mcrypt
# Install Composer
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
+194 -83
View File
@@ -1,141 +1,252 @@
@servers(['web' => 'deployer@vps188754.vps.ovh.ca'])
@setup
$repository = 'git@gitlab.com:TheGamecraft/c-cms.git';
$release = date('YmdHis');
$repository = 'git@gitlab.com:TheGamecraft/c-cms.git';
$release = date('YmdHis');
$releases_dir_697 = '/var/www/c-cms/escadron697/releases';
$app_dir_697 = '/var/www/c-cms/escadron697';
$new_release_dir_697 = $releases_dir_697 .'/'. $release;
$releases_dir_697 = '/var/www/c-cms/escadron697/releases';
$app_dir_697 = '/var/www/c-cms/escadron697';
$new_release_dir_697 = $releases_dir_697 .'/'. $release;
$releases_dir_736 = '/var/www/c-cms/escadron736/releases';
$app_dir_736 = '/var/www/c-cms/escadron736';
$new_release_dir_736 = $releases_dir_736 .'/'. $release;
$releases_dir_736 = '/var/www/c-cms/escadron736/releases';
$app_dir_736 = '/var/www/c-cms/escadron736';
$new_release_dir_736 = $releases_dir_736 .'/'. $release;
$releases_dir_dev = '/var/www/c-cms/dev/releases';
$app_dir_dev = '/var/www/c-cms/dev';
$new_release_dir_dev = $releases_dir_dev .'/'. $release;
$releases_dir_dev = '/var/www/c-cms/dev/releases';
$app_dir_dev = '/var/www/c-cms/dev';
$new_release_dir_dev = $releases_dir_dev .'/'. $release;
$releases_dir_227 = '/var/www/c-cms/ccmrc227/releases';
$app_dir_227 = '/var/www/c-cms/ccmrc227';
$new_release_dir_227 = $releases_dir_227 .'/'. $release;
$releases_dir_117 = '/var/www/c-cms/ccmrc117/releases';
$app_dir_117 = '/var/www/c-cms/ccmrc117';
$new_release_dir_117 = $releases_dir_117 .'/'. $release;
@endsetup
@story('deploy_697')
clone_repository_697
run_composer_697
update_symlinks_697
clone_repository_697
run_composer_697
update_symlinks_697
@endstory
@story('deploy_736')
clone_repository_736
run_composer_736
update_symlinks_736
clone_repository_736
run_composer_736
update_symlinks_736
@endstory
@story('deploy_dev')
clone_repository_dev
run_composer_dev
update_symlinks_dev
clone_repository_dev
run_composer_dev
update_symlinks_dev
remove_old_release_dev
@endstory
@story('deploy_227')
clone_repository_227
run_composer_227
update_symlinks_227
@endstory
@story('deploy_117')
clone_repository_117
run_composer_117
update_symlinks_117
@endstory
@task('clone_repository_697')
echo 'Cloning repository'
[ -d {{ $releases_dir_697 }} ] || mkdir {{ $releases_dir_697 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_697 }}
cd {{ $new_release_dir_697 }}
git reset --hard {{ $commit }}
echo 'Cloning repository'
[ -d {{ $releases_dir_697 }} ] || mkdir {{ $releases_dir_697 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_697 }}
cd {{ $new_release_dir_697 }}
git reset --hard {{ $commit }}
@endtask
@task('run_composer_697')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_697 }}
composer install --prefer-dist --no-scripts -q -o
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_697 }}
composer install --prefer-dist --no-scripts -q -o --no-dev
npm install
npm run production
@endtask
@task('update_symlinks_697')
echo "Linking storage directory"
rm -rf {{ $new_release_dir_697 }}/storage
ln -nfs {{ $app_dir_697 }}/storage {{ $new_release_dir_697 }}/storage
echo "Linking storage directory"
rm -rf {{ $new_release_dir_697 }}/storage
ln -nfs {{ $app_dir_697 }}/storage {{ $new_release_dir_697 }}/storage
echo 'Linking .env file'
ln -nfs {{ $app_dir_697 }}/.env {{ $new_release_dir_697 }}/.env
echo 'Linking .env file'
ln -nfs {{ $app_dir_697 }}/.env {{ $new_release_dir_697 }}/.env
echo 'Linking current release'
ln -nfs {{ $new_release_dir_697 }} {{ $app_dir_697 }}/current
echo 'Linking current release'
ln -nfs {{ $new_release_dir_697 }} {{ $app_dir_697 }}/current
echo 'Setting permission'
chmod -R 777 {{ $app_dir_697 }}/current/bootstrap/
echo 'Setting permission'
chmod -R 777 {{ $app_dir_697 }}/current/bootstrap/
echo 'Migrate DB'
cd {{ $app_dir_697 }}/current/
php artisan migrate
php artisan db:seed --class=ConfigsTableSeeder
echo 'Migrate DB'
cd {{ $app_dir_697 }}/current/
yes|php artisan migrate
yes|php artisan db:seed --class=ConfigsTableSeeder
php artisan update
@endtask
@task('clone_repository_736')
echo 'Cloning repository'
[ -d {{ $releases_dir_736 }} ] || mkdir {{ $releases_dir_736 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_736 }}
cd {{ $new_release_dir_736 }}
git reset --hard {{ $commit }}
echo 'Cloning repository'
[ -d {{ $releases_dir_736 }} ] || mkdir {{ $releases_dir_736 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_736 }}
cd {{ $new_release_dir_736 }}
git reset --hard {{ $commit }}
@endtask
@task('run_composer_736')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_736 }}
composer install --prefer-dist --no-scripts -q -o
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_736 }}
composer install --prefer-dist --no-scripts -q -o --no-dev
npm install
npm run production
@endtask
@task('update_symlinks_736')
echo "Linking storage directory"
rm -rf {{ $new_release_dir_736 }}/storage
ln -nfs {{ $app_dir_736 }}/storage {{ $new_release_dir_736 }}/storage
echo "Linking storage directory"
rm -rf {{ $new_release_dir_736 }}/storage
ln -nfs {{ $app_dir_736 }}/storage {{ $new_release_dir_736 }}/storage
echo 'Linking .env file'
ln -nfs {{ $app_dir_736 }}/.env {{ $new_release_dir_736 }}/.env
echo 'Linking .env file'
ln -nfs {{ $app_dir_736 }}/.env {{ $new_release_dir_736 }}/.env
echo 'Linking current release'
ln -nfs {{ $new_release_dir_736 }} {{ $app_dir_736 }}/current
echo 'Linking current release'
ln -nfs {{ $new_release_dir_736 }} {{ $app_dir_736 }}/current
echo 'Setting permission'
chmod -R 777 {{ $app_dir_736 }}/current/bootstrap/
echo 'Setting permission'
chmod -R 777 {{ $app_dir_736 }}/current/bootstrap/
echo 'Migrate DB'
cd {{ $app_dir_736 }}/current/
php artisan migrate
php artisan db:seed --class=ConfigsTableSeeder
echo 'Migrate DB'
cd {{ $app_dir_736 }}/current/
yes|php artisan migrate
yes|php artisan db:seed --class=ConfigsTableSeeder
php artisan update
@endtask
@task('clone_repository_dev')
echo 'Cloning repository'
[ -d {{ $releases_dir_dev }} ] || mkdir {{ $releases_dir_dev }}
git clone --depth 1 --single-branch -b dev {{ $repository }} {{ $new_release_dir_dev }}
cd {{ $new_release_dir_dev }}
git reset --hard {{ $commit }}
echo 'Cloning repository'
[ -d {{ $releases_dir_dev }} ] || mkdir {{ $releases_dir_dev }}
git clone --depth 1 --single-branch -b dev {{ $repository }} {{ $new_release_dir_dev }}
cd {{ $new_release_dir_dev }}
git reset --hard {{ $commit }}
@endtask
@task('run_composer_dev')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_dev }}
composer install --prefer-dist --no-scripts -q -o
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_dev }}
composer install --prefer-dist --no-scripts -q -o --no-dev
npm install
npm run production
@endtask
@task('update_symlinks_dev')
echo "Linking storage directory"
rm -rf {{ $new_release_dir_dev }}/storage
ln -nfs {{ $app_dir_dev }}/storage {{ $new_release_dir_dev }}/storage
echo "Linking storage directory"
rm -rf {{ $new_release_dir_dev }}/storage
ln -nfs {{ $app_dir_dev }}/storage {{ $new_release_dir_dev }}/storage
echo 'Linking .env file'
ln -nfs {{ $app_dir_dev }}/.env {{ $new_release_dir_dev }}/.env
echo 'Linking .env file'
ln -nfs {{ $app_dir_dev }}/.env {{ $new_release_dir_dev }}/.env
echo 'Linking current release'
ln -nfs {{ $new_release_dir_dev }} {{ $app_dir_dev }}/current
echo 'Linking current release'
ln -nfs {{ $new_release_dir_dev }} {{ $app_dir_dev }}/current
echo 'Setting permission'
chmod -R 777 {{ $app_dir_dev }}/current/bootstrap/
echo 'Setting permission'
chmod -R 777 {{ $app_dir_dev }}/current/bootstrap/
echo 'Migrate DB'
cd {{ $app_dir_dev }}/current/
php artisan migrate
php artisan db:seed --class=ConfigsTableSeeder
echo 'Migrate DB'
cd {{ $app_dir_dev }}/current/
yes|php artisan migrate
yes|php artisan db:seed --class=ConfigsTableSeeder
php artisan update
@endtask
@task('remove_old_release_dev')
cd {{ $releases_dir_dev }}
rm -fr $(ls -t1 | tail -n +3)
@endtask
@task('clone_repository_227')
echo 'Cloning repository'
[ -d {{ $releases_dir_227 }} ] || mkdir {{ $releases_dir_227 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_227 }}
cd {{ $new_release_dir_227 }}
git reset --hard {{ $commit }}
@endtask
@task('run_composer_227')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_227 }}
composer install --prefer-dist --no-scripts -q -o --no-dev
npm install
npm run production
@endtask
@task('update_symlinks_227')
echo "Linking storage directory"
rm -rf {{ $new_release_dir_227 }}/storage
ln -nfs {{ $app_dir_227 }}/storage {{ $new_release_dir_227 }}/storage
echo 'Linking .env file'
ln -nfs {{ $app_dir_227 }}/.env {{ $new_release_dir_227 }}/.env
echo 'Linking current release'
ln -nfs {{ $new_release_dir_227 }} {{ $app_dir_227 }}/current
echo 'Setting permission'
chmod -R 777 {{ $app_dir_227 }}/current/bootstrap/
echo 'Migrate DB'
cd {{ $app_dir_227 }}/current/
yes|php artisan migrate
yes|php artisan db:seed --class=ConfigsTableSeeder
php artisan update
@endtask
@task('clone_repository_117')
echo 'Cloning repository'
[ -d {{ $releases_dir_117 }} ] || mkdir {{ $releases_dir_117 }}
git clone --depth 1 {{ $repository }} {{ $new_release_dir_117 }}
cd {{ $new_release_dir_117 }}
git reset --hard {{ $commit }}
@endtask
@task('run_composer_117')
echo "Starting deployment ({{ $release }})"
cd {{ $new_release_dir_117 }}
composer install --prefer-dist --no-scripts -q -o --no-dev
npm install
npm run production
@endtask
@task('update_symlinks_117')
echo "Linking storage directory"
rm -rf {{ $new_release_dir_117 }}/storage
ln -nfs {{ $app_dir_117 }}/storage {{ $new_release_dir_117 }}/storage
echo 'Linking .env file'
ln -nfs {{ $app_dir_117 }}/.env {{ $new_release_dir_117 }}/.env
echo 'Linking current release'
ln -nfs {{ $new_release_dir_117 }} {{ $app_dir_117 }}/current
echo 'Setting permission'
chmod -R 777 {{ $app_dir_117 }}/current/bootstrap/
echo 'Migrate DB'
cd {{ $app_dir_117 }}/current/
yes|php artisan migrate
yes|php artisan db:seed --class=ConfigsTableSeeder
php artisan update
@endtask
+3510 -1140
View File
File diff suppressed because it is too large Load Diff
+36
View File
@@ -4,6 +4,37 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Booking
*
* @property int $id
* @property int $item_id
* @property int $amount
* @property int $bookable_id
* @property string $bookable_type
* @property int $user_id
* @property string $comment
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $bookable
* @property-read \App\Item $item
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \App\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereAmount($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereBookableId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereBookableType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereComment($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereItemId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Booking whereUserId($value)
* @mixin \Eloquent
*/
class Booking extends Model
{
public function bookable()
@@ -20,4 +51,9 @@ class Booking extends Model
{
return $this->belongsTo('App\Item');
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
}
+40
View File
@@ -4,6 +4,46 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\ComplementaryActivity
*
* @property int $id
* @property string $name
* @property string $public_body
* @property string $public_slogan
* @property string $public_header_picture
* @property string $admin_desc
* @property string $calendar_color
* @property string $calendar_icon
* @property string $begin_time
* @property string $end_time
* @property string $location
* @property int $is_mandatory
* @property int $is_promoted
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Picture[] $pictures
* @property-read int|null $pictures_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereAdminDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereBeginTime($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereCalendarColor($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereCalendarIcon($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereEndTime($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereIsMandatory($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereIsPromoted($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereLocation($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity wherePublicBody($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity wherePublicHeaderPicture($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity wherePublicSlogan($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ComplementaryActivity whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ComplementaryActivity extends Model
{
public function pictures()
+32
View File
@@ -4,6 +4,28 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Config
*
* @property int $id
* @property string $name
* @property int $state
* @property array $data
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereState($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Config whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Config extends Model
{
protected $casts = [
@@ -19,4 +41,14 @@ class Config extends Model
{
return Config::where('name',$configName)->first()->data();
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
public static function find($name)
{
return Config::where('name',$name)->first();
}
}
+58
View File
@@ -0,0 +1,58 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Contracts\Filesystem\Cloud;
class initDrive extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'drive:init';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Initialize drive';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
\Storage::cloud()->createDir('Systeme');
\Storage::cloud()->createDir('Systeme/Fichier');
\Storage::cloud()->createDir('Systeme/Fichier/PlanDeCours');
\Storage::cloud()->createDir('Systeme/Fichier/MessageDeLaSemaine');
\Storage::cloud()->createDir('Prive');
\Storage::cloud()->createDir('Prive/Cadet');
\Storage::cloud()->createDir('Prive/ETAMAS');
\Storage::cloud()->createDir('Prive/Officier');
\Storage::cloud()->createDir('Prive/Staff');
\Storage::cloud()->createDir('Prive/Staff/Guide');
\Storage::cloud()->createDir('Prive/Staff/Instruction');
\Storage::cloud()->createDir('Publique');
\Storage::cloud()->createDir('Publique/Fichier');
\Storage::cloud()->createDir('Publique/Image');
return "Drive is initialized";
}
}
+81
View File
@@ -0,0 +1,81 @@
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Schema;
class update extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'update';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Update C-CMS';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$this->info('Starting update ...');
$this->updateDatabase();
$this->info('Update completed !');
}
private function updateDatabase()
{
$this->info('Updating database ...');
// Check event table
if (!Schema::hasColumn('events','hidden'))
{
$this->info('Updating events table ...');
Schema::table('events', function ($table) {
$table->boolean('hidden')->default(0);
});
}
else
{
$this->info('Events table is up to date ...');
}
// Check event_type table
if (!Schema::hasColumn('event_types','hidden'))
{
$this->info('Updating event_types table ...');
Schema::table('event_types', function ($table) {
$table->boolean('hidden')->default(0);
});
}
else
{
$this->info('Event_types table is up to date ...');
}
return 0;
}
}
+143 -2
View File
@@ -4,6 +4,47 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Course
*
* @property int $id
* @property string $name
* @property string $ocom
* @property int $periode
* @property int $level
* @property string $location
* @property string $desc
* @property string $comment
* @property string $comment_officer
* @property int $event_id
* @property string $user_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Booking[] $bookings
* @property-read int|null $bookings_count
* @property-read \App\Event $event
* @property-read \App\LessonPlan|null $lessonPlan
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \App\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereComment($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereCommentOfficer($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereEventId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereLevel($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereLocation($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereOcom($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course wherePeriode($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Course whereUserId($value)
* @mixin \Eloquent
*/
class Course extends Model
{
public function bookings()
@@ -13,11 +54,111 @@ class Course extends Model
public function user()
{
return $this->belongsTo('App\User');
return $this->belongsTo('App\User');
}
public function instructor()
{
if (\App\User::find($this->user_id)) {
return \App\User::find($this->user_id)->fullname();
} else {
if (is_numeric($this->user_id)) {
return 'Utilisateur inconnu';
} else {
return $this->user_id;
}
}
}
public function ocom()
{
if ($this->ocom != null) {
$ocom = \App\OCOM::findByOCOM($this->ocom);
if ($ocom != null) {
return $ocom;
}
}
return null;
}
public function event()
{
return $this->belongsTo('App\Event');
return $this->belongsTo('App\Event');
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
public function use_course()
{
return $this->name == "" && $this->ocom == "";
}
public function lessonPlan()
{
return $this->hasOne('App\LessonPlan');
}
public static function allFuture()
{
$courses = Course::all();
foreach ($courses as $key => $course) {
if (date('c', strtotime($course->event->date_begin)) <= date('c')) {
$courses->forget($key);
}
}
return $courses;
}
public static function allThisYear()
{
$courses = Course::all();
foreach ($courses as $key => $course) {
if (date('c', strtotime($course->event->date_begin)) <= date('c', strtotime(\App\Config::getData('instruction_year_begin')))) {
$courses->forget($key);
}
if (date('c', strtotime($course->event->date_begin)) >= date('c', strtotime(\App\Config::getData('instruction_year_end')))) {
$courses->forget($key);
}
}
return $courses;
}
public static function allForUser($user_id)
{
$courses = Course::all();
foreach ($courses as $key => $course) {
if ($course->user_id != $user_id) {
$courses->forget($key);
}
}
return $courses;
}
public static function allForAuthUser()
{
return self::allForUser(\Auth::user()->id);
}
public static function allFutureForUser($user_id)
{
$courses = Course::all();
foreach ($courses as $key => $course) {
if (date('c', strtotime($course->event->date_begin)) <= date('c')) {
$courses->forget($key);
}
if ($course->user_id != $user_id) {
$courses->forget($key);
}
}
return $courses;
}
public static function allFutureForAuthUser()
{
return self::allFutureForUser(\Auth::user()->id);
}
}
+133 -2
View File
@@ -4,8 +4,65 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Event
*
* @property int $id
* @property string $name
* @property string $date_begin
* @property string $date_end
* @property string $type
* @property string $user_id
* @property string $location
* @property int $is_mandatory
* @property int $use_weekly_msg
* @property int $use_schedule
* @property string $desc
* @property array $msg
* @property array $weekly_msg_file
* @property array $schedule
* @property string $calendar_color
* @property string $calendar_icon
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Booking[] $bookings
* @property-read int|null $bookings_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Course[] $courses
* @property-read int|null $courses_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \App\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereCalendarColor($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereCalendarIcon($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereDateBegin($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereDateEnd($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereIsMandatory($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereLocation($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereMsg($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereSchedule($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereUseSchedule($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereUseWeeklyMsg($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereUserId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereWeeklyMsgFile($value)
* @mixin \Eloquent
*/
class Event extends Model
{
protected $casts = [
'schedule' => 'array',
'msg' => 'array',
'weekly_msg_file' => 'array'
];
public function bookings()
{
return $this->morphMany('App\Booking', 'bookable');
@@ -16,9 +73,14 @@ class Event extends Model
return $this->hasMany('App\Course');
}
public function type()
{
return \App\EventType::find($this->type);
}
public function user()
{
return $this->belongsTo('App\User');
return $this->belongsTo('App\User');
}
public function course($p,$l)
@@ -32,7 +94,76 @@ class Event extends Model
return $c;
}
}
$error = new \App\Course();
$error->name = "Cours manquant dans la BD";
$error->ocom = "ERREUR";
$error->periode = $p;
$error->level = $l;
$error->location = "";
$error->desc = "";
$error->comment = "Le cours est manquant dans la base de données";
$error->comment_officier = "Le cours est manquant dans la base de données";
$error->event_id = $this->id;
$error->user_id = 1;
return $error;
}
return false;
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
public static function future()
{
$events = collect();
foreach (Event::all() as $event)
{
if (date('U',strtotime($event->date_begin)) >= time())
{
$events->push($event);
}
}
return $events;
}
public static function allThisYear()
{
$events = Event::all();
foreach ($events as $key => $event)
{
if (date('c',strtotime($event->date_begin)) <= date('c',strtotime(\App\Config::getData('instruction_year_begin'))))
{
$events->forget($key);
}
if (date('c',strtotime($event->date_begin)) >= date('c',strtotime(\App\Config::getData('instruction_year_end'))))
{
$events->forget($key);
}
}
return $events;
}
public function nbPeriode()
{
return (count($this->schedule["periodes"]));
}
public function nbNiveau()
{
return count($this->schedule["niveaux"]);
}
static function getMaxLevels($events)
{
$maxlevel = 0;
foreach ($events as $e)
{
if ($e->nbNiveau() > $maxlevel)
{
$maxlevel = $e->nbNiveau();
}
}
return $maxlevel;
}
}
+81
View File
@@ -0,0 +1,81 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\EventType
*
* @property int $id
* @property string $name
* @property string $admin_desc
* @property string $calendar_color
* @property string $calendar_icon
* @property string $begin_time
* @property string $end_time
* @property string $location
* @property int $is_mandatory
* @property int $use_weekly_msg
* @property string $weekly_msg_publication_time
* @property int $use_schedule
* @property array $schedule_model
* @property int $is_promoted
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereAdminDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereBeginTime($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereCalendarColor($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereCalendarIcon($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereEndTime($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereIsMandatory($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereIsPromoted($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereLocation($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereScheduleModel($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereUseSchedule($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereUseWeeklyMsg($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereWeeklyMsgPublicationTime($value)
* @mixin \Eloquent
*/
class EventType extends Model
{
protected $casts = [
'schedule_model' => 'array',
];
public function getScheduleModelData($level,$periode)
{
if (isset($this->schedule_model['default_value']))
{
dd($this->schedule_model ['default_value']);
return $this->schedule_model['default_value'][$periode-1][$level-1];
}
else
{
return [
'ocom' => 'M103.03',
'name' => 'Super cours',
'location' => 'Bic',
'instructor' => 'Math',
'desc' => ''
];
}
}
public function nbLevel()
{
return count($this->schedule_model['niveaux']);
}
public function nbPeriode()
{
return count($this->schedule_model['periodes']);
}
}
+3 -3
View File
@@ -2,7 +2,7 @@
namespace App\Exceptions;
use Exception;
use Throwable;
use Illuminate\Foundation\Exceptions\Handler as ExceptionHandler;
class Handler extends ExceptionHandler
@@ -32,7 +32,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return void
*/
public function report(Exception $exception)
public function report(Throwable $exception)
{
parent::report($exception);
}
@@ -44,7 +44,7 @@ class Handler extends ExceptionHandler
* @param \Exception $exception
* @return \Illuminate\Http\Response
*/
public function render($request, Exception $exception)
public function render($request, Throwable $exception)
{
return parent::render($request, $exception);
}
+444
View File
@@ -0,0 +1,444 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;
use League\Flysystem\FileNotFoundException;
use mysql_xdevapi\Exception;
/**
* App\GoogleDriveFile
*
* @property string $id
* @property string $type
* @property string $name
* @property string $path
* @property array $rank_permission
* @property array $job_permission
* @property array $user_permission
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereJobPermission($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile wherePath($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereRankPermission($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\GoogleDriveFile whereUserPermission($value)
* @mixin \Eloquent
*/
class GoogleDriveFile extends Model
{
protected $primaryKey = 'id'; // or null
public $incrementing = false;
// In Laravel 6.0+ make sure to also set $keyType
protected $keyType = 'string';
protected $casts = [
'rank_permission' => 'array',
'job_permission' => 'array',
'user_permission' => 'array',
];
public static function icon($extension)
{
$icon = "fas fa-file";
switch ($extension)
{
case 'pdf':
$icon = 'fas fa-file-pdf text-pdf';
break;
case 'php':
$icon = 'fas fa-file-code text-code';
break;
case 'pptx':
$icon = 'fas fa-file-powerpoint text-powerpoint';
break;
case 'docx':
case 'odt':
$icon = 'fas fa-file-word text-word';
break;
case 'ods':
case 'xlsx':
$icon = 'fas fa-file-excel text-excel';
break;
case 'png':
case 'PNG':
case 'jpg':
case 'jpeg':
$icon = 'fas fa-file-image text-image';
break;
}
return $icon;
}
public static function checkConfig()
{
$configNull = (\Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_ID')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_SECRET')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_REFRESH_TOKEN')) != "" && \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_FOLDER_ID')) != "");
$configOk = true;
if ($configNull)
{
try {
\Storage::cloud()->listContents("/", false);
}
catch (\Exception $e)
{
$configOk = false;
}
}
return $configNull && $configOk;
}
public static function findByName($name)
{
return GoogleDriveFile::where('name','=',$name)->get()->first();
}
public static function findByPath($path)
{
return GoogleDriveFile::where('path','=',$path)->get()->first();
}
public static function findByPathInDrive($path,$current_directory = '/')
{
if ($path != "")
{
$exploded_path = explode('/',$path);
if ($exploded_path[0] == "")
{
array_splice($exploded_path,0,1);
}
$contents = collect(Storage::cloud()->listContents($current_directory, false));
$dir = $contents->where('type', '=', 'dir')
->where('name', '=', $exploded_path[0])
->first();
if ( ! $dir)
{
return false;
}
else
{
array_splice($exploded_path,0,1);
$newPath = implode('/',$exploded_path);
if ($newPath == "")
{
return $dir['basename'];
}
else
{
return GoogleDriveFile::findByPathInDrive($newPath,$dir['basename']);
}
}
}
return true;
}
public static function createByPathInDrive($path,$current_directory = '/')
{
if ($path != "")
{
$exploded_path = explode('/',$path);
$size = count($exploded_path);
if ($size > 1)
{
$parent = self::findByName($exploded_path[$size-2]);
\Storage::cloud()->createDir($parent->id.'/'.$exploded_path[$size-1]);
}
else
{
\Storage::cloud()->createDir('/'.$exploded_path[$size-1]);
}
return self::findByPathInDrive($path);
}
return false;
}
public function setPermission($subject, $value)
{
$explodedSubject = explode('.',$subject);
$subject = $explodedSubject[0];
$id = $explodedSubject[1];
$permission = null;
if ($subject == 'rank')
{
$permission = $this->rank_permission;
}
elseif ($subject == 'job')
{
$permission = $this->job_permission;
}
elseif ($subject == 'user')
{
$permission = $this->user_permission;
}
[$id] = $value;
if ($subject == 'rank')
{
$this->rank_permission = $permission;
}
elseif ($subject == 'job')
{
$this->job_permission = $permission;
}
elseif ($subject == 'user')
{
$this->user_permission = $permission;
}
$this->save();
}
public function getAllPermission($subject)
{
$permission = null;
if ($subject == 'rank')
{
$permission = $this->rank_permission;
}
elseif ($subject == 'job')
{
$permission = $this->job_permission;
}
elseif ($subject == 'user')
{
$permission = $this->user_permission;
}
return $permission;
}
public function getPermission($subject)
{
$explodedSubject = explode('.',$subject);
$subject = $explodedSubject[0];
$id = $explodedSubject[1];
if (isset($this->getAllPermission($subject)[$id]))
{
return $this->getAllPermission($subject)[$id];
}
else
{
return '';
}
}
public function canUser($user, $permission = 'r')
{
if (strpos($this->getPermission('rank.0'),$permission) !== false)
{
return true;
}
if (strpos($this->getPermission('user.'.$user->id),$permission) === false)
{
if (strpos($this->getPermission('job.'.$user->job->id),$permission) === false)
{
if (strpos($this->getPermission('rank.'.$user->rank->id),$permission) === false)
{
return false;
}
}
}
return true;
}
public function canAuthUser($perm = 'r')
{
return $this->canUser(\Auth::user(),$perm);
}
public static function getPermForUser($folder,$user,$perm = 'r')
{
if ($folder == '' || $folder == "root")
{
if ($user->p('file_manage') == 1)
{
return true;
}
else
{
return false;
}
}
$dir = \App\GoogleDriveFile::find($folder);
if ($dir == null)
{
$path = GoogleDriveFile::getPathFolder($folder);
$exploderPath = explode('/',$path);
for ($i = count($exploderPath)-1; $i >= 0; $i--)
{
$dir = \App\GoogleDriveFile::find($exploderPath[$i]);
if ($dir != null)
{
$metaData = \Storage::cloud()->getMetadata($folder);
$googleDriveFile = new GoogleDriveFile();
$googleDriveFile->id = $folder;
$googleDriveFile->type = 'directory';
$googleDriveFile->name = $metaData['name'];
$googleDriveFile->path = self::recreatePath($folder);
$googleDriveFile->rank_permission = $dir->rank_permission;
$googleDriveFile->job_permission = $dir->job_permission;
$googleDriveFile->user_permission = $dir->user_permission;
$googleDriveFile->save();
return $dir->canUser($user,$perm);
}
}
return false;
}
else
{
return $dir->canUser($user,$perm);
}
}
public static function getPermForAuthUser($folder,$perm = 'r')
{
return self::getPermForUser($folder,\Auth::user(),$perm);
}
public static function getPathFolder($folder)
{
$allDir = \Storage::cloud()->allDirectories();
foreach ($allDir as $dir)
{
$exploderDir = explode('/',$dir);
if ($exploderDir[count($exploderDir)-1] == $folder)
{
return $dir;
}
}
}
public static function recreatePath($folder)
{
$path = [];
$name = [];
$directories = collect(json_decode(self::getPathArray(),true));
foreach ($directories as $dir)
{
$path[$dir['basename']] = $dir['dirname'];
$name[$dir['basename']] = $dir['name'];
}
$realPath = $name[$folder];
$foo = $folder;
while ($foo != "")
{
$bar = explode('/',$path[$foo]);
$foo = $bar[count($bar)-1];
if ($foo != "")
{
$realPath = $name[$foo].'/'.$realPath;
}
}
return $realPath;
}
public static function getPathArray()
{
$contents = collect(Storage::cloud()->listContents('/', true));
return json_encode($contents->where('type', '=', 'dir'));
}
public static function getSidebarFile()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return [];
}
$user = \Auth::user();
$sidebarArray = [];
$dirList = \App\GoogleDriveFile::all();
$temp = $dirList->where('path','=','.Privé/.Cadet')->first();
if ($temp != null)
{
if ($dirList->where('path','=','.Privé/.Cadet')->first()->canAuthUser())
{
$sidebarArray['Cadet'] = [
'route' => 'admin.files.cadet',
'icon' => 'fas fa-folder-open',
'perm' => null,
'child' => null
];
}
}
$temp = $dirList->where('path','=','.Privé/.Staff')->first();
if ($temp != null)
{
if ($dirList->where('path','=','.Privé/.Staff')->first()->canAuthUser())
{
$sidebarArray['Staff'] = [
'route' => 'admin.files.staff',
'icon' => 'fas fa-folder-open',
'perm' => null,
'child' => null
];
}
}
$temp = $dirList->where('path','=','.Privé/.ETAMAS')->first();
if ($temp != null)
{
if ($dirList->where('path','=','.Privé/.ETAMAS')->first()->canAuthUser())
{
$sidebarArray['ETAMAS'] = [
'route' => 'admin.files.etamas',
'icon' => 'fas fa-folder-open',
'perm' => null,
'child' => null
];
}
}
$temp = $dirList->where('path','=','.Privé/.Officier')->first();
if ($temp != null)
{
if ($dirList->where('path','=','.Privé/.Officier')->first()->canAuthUser())
{
$sidebarArray['Officier'] = [
'route' => 'admin.files.officier',
'icon' => 'fas fa-folder-open',
'perm' => null,
'child' => null
];
}
}
$sidebarArray['Publique'] = [
'route' => 'admin.files.publique',
'icon' => 'fas fa-folder-open',
'perm' => null,
'child' => null
];
if (\Auth::user()->p('drive_see') == 1)
{
$sidebarArray['Google Drive'] = [
'route' => 'admin.drive',
'icon' => 'fab fa-google-drive',
'perm' => null,
'child' => null
];
}
return $sidebarArray;
}
public static function getDownloadURL($path,$file)
{
$dir = urlencode(\App\GoogleDriveFile::findByPath($path)->id);
return '/file/get?d='.$dir.'&f='.urlencode($file);
}
}
+42 -16
View File
@@ -2,8 +2,11 @@
namespace App\Http\Controllers;
use Illuminate\Contracts\Foundation\Application;
use Illuminate\Contracts\View\Factory;
use Illuminate\Http\Request;
use \App\Log;
use Illuminate\View\View;
class AdminController extends Controller
{
@@ -20,36 +23,59 @@ class AdminController extends Controller
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
* @return Application|Factory|View
*/
public function index()
{
Log::saveLog('Affichage du tableau de bord');
clog('navigate','success','consulte le tableau de bord');
$futureEvent_to_filtered = \App\Event::all()->sortBy('date_begin');
$futureEvent_to_filtered_pass_1 = collect();
$futureEvent = collect();
return view('admin.dashboard',['futureEvent' => \App\Event::future()->take(3),'userClasse' => \Auth::user()->futureCourses()->forPage(1,6)]);
}
foreach ($futureEvent_to_filtered as $day) {
if (date('U',strtotime($day->date_begin)) >= date('U')) {
$futureEvent_to_filtered_pass_1->push($day);
}
public function setup()
{
if (\Auth::user()->use_default_psw == true)
{
return view('admin.user.profil.setup');
}
return redirect('/admin');
}
foreach ($futureEvent_to_filtered_pass_1 as $day) {
if (date('U',strtotime($day->date_begin)) <= date('U',strtotime("+2 week"))) {
$futureEvent->push($day);
}
public function saveSetup()
{
$user = \Auth::user();
$user->firstname = \request('firstname');
$user->lastname = \request('lastname');
$user->password = bcrypt(request('psw'));
if (\request('address') != null)
{
$user->adress = \request('address');
}
return view('admin.dashboard',['futureEvent' => $futureEvent->take(3),'userClasse' => \Auth::User()->getClasse()->forPage(1,6)]);
if (\request('telephone') != null)
{
$user->telephone = \request('telephone');
}
if (\request('sexe') != null)
{
$user->sexe = \request('sexe');
}
$user->use_default_psw = false;
$user->save();
return redirect('/admin');
}
public function update()
{
Log::saveLog('Affichage des notes de mise a jour');
clog('navigate','success','consulte les notes de mise à jours');
return view('admin.update');
}
public function status()
{
$alerts = \App\Event::checkForError();
return view('admin.status.index',['alerts' => $alerts]);
}
}
+134
View File
@@ -0,0 +1,134 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
clogNav('consulte les articles');
return view('admin.article.index',['activity' => \App\ComplementaryActivity::all()]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function editActivity($id)
{
return view('admin.article.editActivity',['article' => \App\ComplementaryActivity::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
public function updateActivity(Request $request, $id)
{
$a = \App\ComplementaryActivity::find($id);
$a->public_slogan = $request->public_slogan;
$a->public_body = $request->public_body;
$a->public_header_picture = $request->public_header_picture;
$a->save();
clog('edit','success','a ajouté un article');
return redirect('/admin/article')->with('success','Article modifié avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
public function pictureActivity($id)
{
return view('admin.article.pictureActivity',['article' => \App\ComplementaryActivity::find($id)]);
}
public function pictureActivityCreate($id)
{
return view('admin.article.picture.add',['article' => \App\ComplementaryActivity::find($id)]);
}
public function pictureActivityStore(Request $request, $id)
{
$p = new \App\Picture();
$p->url = $request->url;
$p->title = $request->title;
$p->desc = $request->desc;
$p->pictureable_id = $id;
$p->pictureable_type = "App\ComplementaryActivity";
$p->save();
clog('add','success','a ajouté une photo avec succès');
return redirect('/admin/article/activity/picture/'.$id)->with('success','Photo ajoutéé avec succès');
}
}
@@ -22,12 +22,9 @@ class LoginController extends Controller
protected function redirectTo()
{
if(\Auth::User()->getAcces(2))
{
return '/admin';
} else if(\Auth::User()->getAcces(1)){
return '/ecc';
}
return '/admin';
}
/**
* Where to redirect users after login.
+106 -16
View File
@@ -4,45 +4,100 @@ namespace App\Http\Controllers;
use App\Booking;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class BookingController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function index()
public function index($type, $id)
{
//
switch ($type)
{
case 'course':
$event = \App\Course::find($id);
$event->fulltime = $event->event->date_begin.', Niveau '.$event->level.', Période '.$event->periode;
$event->fulldesc = $event->ocom;
break;
case 'event':
$event = \App\Event::find($id);
$event->fulltime = $event->date_begin;
$event->fulldesc = $event->desc;
break;
default:
abort(500);
}
clogNav('consulte les réservations');
return view('admin.booking.index',['event' => $event,'event_type' => $type,'event_id' => $id]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
* @return Response
*/
public function create()
public function create($type,$id)
{
//
$event = null;
if($type == 'course')
{
$event = \App\Course::find($id)->event;
}
else if ($type == 'event')
{
$event = \App\Event::find($id);
}
return view('admin.booking.create',['items' => \App\Item::training(),'event_type' => $type,'event_id' => $id,'event' => $event]);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
* @return Response
*/
public function store(Request $request)
public function store(Request $request,$type,$id)
{
//
$b = new Booking();
$b->item_id = $request->item_id;
$b->amount = $request->amount;
$b->bookable_id = $id;
$b->user_id = \Auth::user()->id;
if (!$request->comment == '')
{
$b->comment = $request->comment;
}
else
{
$b->comment = 'Aucun commentaire';
}
switch ($type)
{
case 'course':
$b->bookable_type = 'App\Course';
break;
case 'event':
$b->bookable_type = 'App\Event';
default:
$b->bookable_type = '';
}
$b->save();
clog('add','success','a ajouté une réservation avec succès',null,'App\Booking',$b->id);
return redirect('/admin/booking/course/'.$id)->with('success','Réservation ajouté avec succès');
}
/**
* Display the specified resource.
*
* @param \App\Booking $booking
* @return \Illuminate\Http\Response
* @return Response
*/
public function show(Booking $booking)
{
@@ -53,7 +108,7 @@ class BookingController extends Controller
* Show the form for editing the specified resource.
*
* @param \App\Booking $booking
* @return \Illuminate\Http\Response
* @return Response
*/
public function edit(Booking $booking)
{
@@ -65,21 +120,56 @@ class BookingController extends Controller
*
* @param \Illuminate\Http\Request $request
* @param \App\Booking $booking
* @return \Illuminate\Http\Response
* @return Response
*/
public function update(Request $request, Booking $booking)
{
//
$b = Booking::find($request->booking_id);
$b->amount = $request->amount;
$b->comment = $request->comment;
$b->save();
return back()->with('success','Modification sauvegardé avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Booking $booking
* @return \Illuminate\Http\Response
* @return Response
*/
public function destroy(Booking $booking)
public function destroy(Request $request)
{
//
$b = Booking::find($request->id);
$b->delete();
}
public function modalItem($id,$event_type,$event_id)
{
$event = null;
if ($event_type == 'course')
{
$event = \App\Course::find($event_id)->event;
}
else
{
$event = \App\Event::find($event_id);
}
return view('admin.booking.modal.create',['item' => \App\Item::find($id),'event' => $event]);
}
public function modalItemEdit($id,$event_type,$event_id)
{
$event = null;
if ($event_type == 'course')
{
$event = \App\Course::find($event_id)->event;
}
else
{
$event = \App\Event::find($event_id);
}
return view('admin.booking.modal.edit',['booking' => \App\Booking::find($id),'event' => $event]);
}
}
+5 -714
View File
@@ -32,723 +32,14 @@ class CalendarController extends Controller
*/
public function index()
{
Log::saveLog("Affichage de l'horaire");
$this->listClass();
return view('admin.calendar.calendar_display');
}
public function generate()
public function indexTable()
{
$lang = str_replace('_', '-', app()->getLocale());
setlocale(LC_ALL, $lang.'_'.strtoupper($lang).'.utf8','fra');
$month = request('month');
$year = request('year');
$nextMonth = $month + 1;
$nextYear = $year;
if ($nextMonth > 12) {
$nextMonth = 1;
$nextYear = $nextYear + 1;
}
$prevMonth = $month - 1;
$prevYear = $year;
if ($prevMonth < 1) {
$prevMonth = 12;
$prevYear = $prevYear - 1;
}
$calendar = array();
$dayinmonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$firstdaymonth = date("w", strtotime("01-".$month."-".$year));
$addingday = 0;
for ($i=$firstdaymonth ; $addingday < $dayinmonth ; $i++) {
$addingday = $addingday + 1;
$calendar[$i] = $addingday;
}
echo '<div class="table calendar">';
echo '<div class="thead-dark">';
echo '<div class="row"><div class="col-2"><a class="btn" onclick="generate('.$prevMonth.','.$prevYear.')"><i class="fa fa-chevron-left" aria-hidden="true"></i></a></div><div class="col-8">'.ucfirst(strftime("%B %Y", strtotime("01-".$month."-".$year))).'</div><div class="col-2"><a class="btn" onclick="generate('.$nextMonth.','.$nextYear.')"><i class="fa fa-chevron-right" aria-hidden="true"></i></a></div></div>';
echo '<div class="row calendar-head"><div style="width:14%;">Dimanche</div><div style="width:14%;">Lundi</div><div style="width:14%;">Mardi</div><div style="width:14%;">Mercredi</div><div style="width:14%;">Jeudi</div><div style="width:14%;">Vendredi</div><div style="width:14%;">Samedi</div></div>';
echo '</div>';
echo '<div class="card-body">';
for ($i=0; $i < 6 ; $i++)
{
echo '<div class="row">';
for ($a=0; $a < 7 ; $a++)
{
if (isset($calendar[(($i*7) + $a)]))
{
/** Date info */
$today = date("Y-m-d", strtotime($year."-".$month."-".$calendar[(($i*7) + $a)]));
$activityToday = Schedule::where('date','=',$today)->get();
/** If nothing today */
if ($activityToday->isEmpty()) {
echo '<a class="calendar-container calendar-empty" name="'.$today.'" type="button" data-toggle="modal" data-target="#scrollmodal" id="calendar_'.$calendar[(($i*7) + $a)].'" class="btn btn-block btn-calendar" onclick="openCalendar(this.name)"><div class="calendar-date">'.date("j", strtotime($today)).'</div></a>';
} else {
echo '<a class="calendar-container" name="'.$today.'" type="button" data-toggle="modal" data-target="#scrollmodal" id="calendar_'.$calendar[(($i*7) + $a)].'" class="btn btn-block btn-calendar" onclick="openCalendar(this.name)"><div class="calendar-date">'.date("j", strtotime($today)).'</div>';
$text = "";
foreach ($activityToday as $activity) {
echo '<div class="calendar-text" style="width:90%;height:3rem;">';
switch ($activity->type) {
case 'regular':
echo '<div class="row" style="color:orange;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-book fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'pilotage':
echo '<div class="row" style="color:#58D3F7;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-plane fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'drill':
echo '<div class="row" style="color:blue;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-trophy fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'music':
echo '<div class="row" style="color:green;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-music fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'biathlon':
echo '<div class="row" style="color:red;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-snowflake-o fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'marksmanship':
echo '<div class="row" style="color:grey;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-star fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'founding':
echo '<div class="row" style="color:#00FF40;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-usd fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'volunteer':
echo '<div class="row" style="color:#DF0174;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-handshake-o fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
case 'other':
echo '<div class="row" style="color:#DF0174;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i><i class="fa fa-handshake-o fa-stack-1x fa-inverse"></i></span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
default:
echo '<div class="row" style="color:'.\App\ComplementaryActivity::find($activity->type)->calendar_color.';"><span class="fa-stack fa-lg col-md-2">'.\App\ComplementaryActivity::find($activity->type)->calendar_icon.'</span><div class="col-md-10 calendar_event_name">'.ucfirst($activity->data['event_name'])."</div></div>";
break;
}
echo '</div>';
}
echo '</a>';
}
} else {
echo '<div class="calendar-container¸calendar-empty" style="border:none !important; width:14%;"></div>';
}
}
echo '</div>';
}
}
public function load()
{
$lang = str_replace('_', '-', app()->getLocale());
setlocale(LC_ALL, $lang.'_'.strtoupper($lang).'.utf8','fra');
$Requestdate = request('date');
$url = str_replace("-","_", $Requestdate);
/** Dont work ... API stuff
* Log::saveLog("a consulté l'horaire du ".$date);
**/
$today = Schedule::where('date','=',$Requestdate)->get();
$isEmpty = $today->isEmpty();
echo '<div class="modal-content"><div class="modal-header"><h5 class="modal-title" id="scrollmodalLabel">'.ucfirst(strftime("%A le %e %B %Y", strtotime($Requestdate))).'</h5><button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span></button></div><div class="modal-body">';
foreach ($today as $date) {
if ($date->data['is_event_mandatory'] == "on") {
$is_mandatory = "<div class='btn btn-block btn-warning m-l-10 m-b-10 float-right'>Activité obligatoire</div>";
} else {
$is_mandatory = "<div class='btn btn-block btn-primary m-l-10 m-b-10 float-right'>Activité n'est pas obligatoire</div>";
}
echo(
'<div class="row">'.
'<div class="col-7">'.
'<p>'.$date->data['event_name'].trans('calendar.begin_at').$date->data['event_begin_time'].trans('calendar.end_at').$date->data['event_end_time'].'</p>'.
'</div>'.
'<div class="col-3">'.
$is_mandatory.
'</div>'.
'<div class="col-1">'.
'<a href="/admin/calendar/edit/'.$date->id.'" type="button" class="btn btn-secondary"><i class="fa fa-cog"></i>&nbsp; Modifier</a>'.
'</div>'.
'<div class="col-1">'.
'<a type="button" class="btn btn-danger" onclick="deleteEvent('.$date->id.');"><i class="fa fa-times-circle" style="color:white;"></i></a>'.
'</div>'.
'</div>'.
'<p>'.$date->data['event_desc'].
'</p>'
);
if ($date->type == "regular") {
if($date->data['n1_p1_plandone'] == "on")
{
$isdone_n1_p1 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n1_p1 = '<span class="badge badge-danger">Non remis</span>';
}
if($date->data['n1_p2_plandone'] == "on")
{
$isdone_n1_p2 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n1_p2 = '<span class="badge badge-danger">Non remis</span>';
}
if($date->data['n2_p1_plandone'] == "on")
{
$isdone_n2_p1 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n2_p1 = '<span class="badge badge-danger">Non remis</span>';
}
if($date->data['n2_p2_plandone'] == "on")
{
$isdone_n2_p2 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n2_p2 = '<span class="badge badge-danger">Non remis</span>';
}
if($date->data['n3_p1_plandone'] == "on")
{
$isdone_n3_p1 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n3_p1 = '<span class="badge badge-danger">Non remis</span>';
}
if($date->data['n3_p2_plandone'] == "on")
{
$isdone_n3_p2 = '<span class="badge badge-success">Remis</span></i>';
} else {
$isdone_n3_p2 = '<span class="badge badge-danger">Non remis</span>';
}
echo '<table class="table">
<thead class="thead-dark">
<tr>
<th>Niveau</th>
<th style="width:45%">1er Période</th>
<th style="width:45%">2e Période</th>
</tr>
</thead>
<tbody>
<tr>
<th>1</th>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none; width:80%">'.User::find($date->data['n1_p1_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n1_p1.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/1/1" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n1_p1_ocom'].' - '.$date->data['n1_p1_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n1_p1_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none;width:80%">'.User::find($date->data['n1_p2_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n1_p2.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/2/1" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n1_p2_ocom'].' - '.$date->data['n1_p2_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n1_p2_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th>2</th>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none;width:80%">'.User::find($date->data['n2_p1_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n2_p1.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/1/2" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n2_p1_ocom'].' - '.$date->data['n2_p1_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n2_p1_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none;width:80%">'.User::find($date->data['n2_p2_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n2_p2.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/2/2" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n2_p2_ocom'].' - '.$date->data['n2_p2_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n2_p2_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th>3</th>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none;width:80%">'.User::find($date->data['n3_p1_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n3_p1.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/1/3" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n3_p1_ocom'].' - '.$date->data['n3_p1_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n3_p1_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
<td>
<table class="table float center" style="border:none; max-width:80%; margin:auto;">
<tbody>
<tr style="border:none;">
<td style="border:none;width:80%">'.User::find($date->data['n3_p2_instructor'])->fullname().'</td>
<td style="border:none;">'.$isdone_n3_p2.'</td>
<td style="border:none;"><a href="/admin/inventory/'.$date->id.'/2/3" type="button" class="btn btn-info"><i class="fa fa-archive" style="color:white;"></i></a></td>
</tr>
<tr style="border:none;">
<td style="border:none;width:80%">'.$date->data['n3_p2_ocom'].' - '.$date->data['n3_p2_name'].'</td>
<td style="border:none;">'.Local::find($date->data['n3_p2_local'])->name.'</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>';
}
echo '<br><hr><br>';
}
echo '<a href="/admin/calendar/add/'.$url.'" type="button" class="btn btn-primary btn-lg btn-block">'.trans('calendar.add_to_schedule').'</a></div><div class="modal-footer"><button type="button" class="btn btn-secondary" data-dismiss="modal">'.trans('pagination.close').'</button></div></div>';
}
public function add($date)
{
$lang = str_replace('_', '-', app()->getLocale());
setlocale(LC_ALL, $lang.'_'.strtoupper($lang).'.utf8','fra');
$date = str_replace("_", "-", $date);
$UserList = User::all();
$LocalList = Local::all();
return view('admin.calendar.calendar_add' ,[
'RequestDate' => $date,
'Userslist' => $UserList,
'LocalsList' => $LocalList,
'ComplementaryActivity' => \App\ComplementaryActivity::all()]);
}
public function edit($id)
{
$schedule = Schedule::find($id);
$UserList = User::all();
$LocalList = Local::all();
return view('admin.calendar.calendar_edit' ,['RequestSchedule' => $schedule, 'Userslist' => $UserList, 'LocalsList' => $LocalList]);
}
public function store()
{
$schedule = new Schedule;
$schedule->date = request('event_date');
$schedule->type = request('event_type');
if(request('event_type') == "regular")
{
$eventData = [
"event_name" => request('event_name'),
"is_event_mandatory" => request('is_event_mandatory'),
"event_date" => request('event_date'),
"event_begin_time" => request('event_begin_time'),
"event_end_time" => request('event_end_time'),
"event_location" => request('event_location'),
"event_desc" => request('event_desc'),
"n1_p1_name" => request('n1_p1_name'),
"n1_p1_ocom" => request('n1_p1_ocom'),
"n1_p1_instructor" => request('n1_p1_instructor'),
"n1_p1_local" => request('n1_p1_local'),
"n1_p1_plandone" => request('n1_p1_plandone'),
"n1_p2_name" => request('n1_p2_name'),
"n1_p2_ocom" => request('n1_p2_ocom'),
"n1_p2_instructor" => request('n1_p2_instructor'),
"n1_p2_local" => request('n1_p2_local'),
"n1_p2_plandone" => request('n1_p2_plandone'),
"n2_p1_name" => request('n2_p1_name'),
"n2_p1_ocom" => request('n2_p1_ocom'),
"n2_p1_instructor" => request('n2_p1_instructor'),
"n2_p1_local" => request('n2_p1_local'),
"n2_p1_plandone" => request('n2_p1_plandone'),
"n2_p2_name" => request('n2_p2_name'),
"n2_p2_ocom" => request('n2_p2_ocom'),
"n2_p2_instructor" => request('n2_p2_instructor'),
"n2_p2_local" => request('n2_p2_local'),
"n2_p2_plandone" => request('n2_p2_plandone'),
"n3_p1_name" => request('n3_p1_name'),
"n3_p1_ocom" => request('n3_p1_ocom'),
"n3_p1_instructor" => request('n3_p1_instructor'),
"n3_p1_local" => request('n3_p1_local'),
"n3_p1_plandone" => request('n3_p1_plandone'),
"n3_p2_name" => request('n3_p2_name'),
"n3_p2_ocom" => request('n3_p2_ocom'),
"n3_p2_instructor" => request('n3_p2_instructor'),
"n3_p2_local" => request('n3_p2_local'),
"n3_p2_plandone" => request('n3_p2_plandone'),
];
} else {
$eventData = [
"event_name" => request('event_name'),
"is_event_mandatory" => request('is_event_mandatory'),
"event_date" => request('event_date'),
"event_begin_time" => request('event_begin_time'),
"event_end_time" => request('event_end_time'),
"event_location" => request('event_location'),
"event_desc" => request('event_desc'),
];
}
$schedule->data = $eventData;
$schedule->save();
/** Logs and Notification */
Log::saveLog("Ajout de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date);
$userToNotify = $schedule->getUserToNotify();
\Notification::send($userToNotify, new Alert(\Auth::User()->id,"Ajout de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date,"/admin/calendar"));
if(\App\Config::where('name','is_schedule_build')->first()->state == 1)
{
\Notification::send($userToNotify, new mail(\Auth::User(),"Ajout d'une activité a l'horaire",\Auth::User()->fullname()." à ajouté l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date));
}
return redirect('/admin/calendar');
}
public function patch($id)
{
$schedule = Schedule::find($id);
$original = clone($schedule);
$schedule->date = request('event_date');
$schedule->type = request('event_type');
if(request('event_type') == "regular")
{
$eventData = [
"event_name" => request('event_name'),
"is_event_mandatory" => request('is_event_mandatory'),
"event_date" => request('event_date'),
"event_begin_time" => request('event_begin_time'),
"event_end_time" => request('event_end_time'),
"event_location" => request('event_location'),
"event_desc" => request('event_desc'),
"n1_p1_name" => request('n1_p1_name'),
"n1_p1_ocom" => request('n1_p1_ocom'),
"n1_p1_instructor" => request('n1_p1_instructor'),
"n1_p1_local" => request('n1_p1_local'),
"n1_p1_plandone" => request('n1_p1_plandone'),
"n1_p2_name" => request('n1_p2_name'),
"n1_p2_ocom" => request('n1_p2_ocom'),
"n1_p2_instructor" => request('n1_p2_instructor'),
"n1_p2_local" => request('n1_p2_local'),
"n1_p2_plandone" => request('n1_p2_plandone'),
"n2_p1_name" => request('n2_p1_name'),
"n2_p1_ocom" => request('n2_p1_ocom'),
"n2_p1_instructor" => request('n2_p1_instructor'),
"n2_p1_local" => request('n2_p1_local'),
"n2_p1_plandone" => request('n2_p1_plandone'),
"n2_p2_name" => request('n2_p2_name'),
"n2_p2_ocom" => request('n2_p2_ocom'),
"n2_p2_instructor" => request('n2_p2_instructor'),
"n2_p2_local" => request('n2_p2_local'),
"n2_p2_plandone" => request('n2_p2_plandone'),
"n3_p1_name" => request('n3_p1_name'),
"n3_p1_ocom" => request('n3_p1_ocom'),
"n3_p1_instructor" => request('n3_p1_instructor'),
"n3_p1_local" => request('n3_p1_local'),
"n3_p1_plandone" => request('n3_p1_plandone'),
"n3_p2_name" => request('n3_p2_name'),
"n3_p2_ocom" => request('n3_p2_ocom'),
"n3_p2_instructor" => request('n3_p2_instructor'),
"n3_p2_local" => request('n3_p2_local'),
"n3_p2_plandone" => request('n3_p2_plandone'),
];
} else {
$eventData = [
"event_name" => request('event_name'),
"is_event_mandatory" => request('is_event_mandatory'),
"event_date" => request('event_date'),
"event_begin_time" => request('event_begin_time'),
"event_end_time" => request('event_end_time'),
"event_location" => request('event_location'),
"event_desc" => request('event_desc'),
];
}
$schedule->data = $eventData;
$schedule->save();
/** Notification */
$asChange = false;
$userToNotify = $schedule->getUserToNotify();
$changes = [];
$found = false;
if ($schedule->type == "regular") {
for ($p=1; $p < 3; $p++) {
for ($n=1; $n < 4; $n++) {
$pUser = \App\User::find($schedule->data['n'.$n.'_p'.$p.'_instructor']);
foreach ($userToNotify as $user) {
if ($user->id == $pUser->id) {
$found = true;
}
}
if (!$found) {
$userToNotify->push($pUser);
}
}
}
}
if ($schedule->data['event_begin_time'] != $original->data['event_begin_time']) {
array_push($changes,"L'heure de début a été modifié de ".$original->data['event_begin_time']." à ".$schedule->data['event_begin_time']);
}
if ($schedule->data['event_end_time'] != $original->data['event_end_time']) {
array_push($changes,"L'heure de fin a été modifié de ".$original->data['event_end_time']." à ".$schedule->data['event_end_time']);
}
if ($schedule->type != $original->type) {
array_push($changes,"Le type d'évenement a été modifié de ".$original->type." à ".$schedule->type);
}
if ($schedule->data['event_name'] != $original->data['event_name']) {
array_push($changes,"Le nom de l'évenement a été modifié de ".$original->data['event_name']." à ".$schedule->data['event_name']);
}
if ($schedule->data['is_event_mandatory'] != $original->data['is_event_mandatory']) {
if ($schedule->data['is_event_mandatory'] == "on") {
array_push($changes,"L'évenement est maintenant obligatoire");
} else {
array_push($changes,"L'évenement n'est plus obligatoire");
}
}
if ($schedule->data['event_location'] != $original->data['event_location']) {
array_push($changes,"Le lieu de l'évenement a été modifié de ".$original->data['event_location']." à ".$schedule->data['event_location']);
}
if ($schedule->data['event_desc'] != $original->data['event_desc']) {
array_push($changes,"La description de l'évenement a été modifié de ".$original->data['event_desc']." à ".$schedule->data['event_desc']);
}
if ($schedule->type == "regular") {
/** Check Instructor */
if ($schedule->data['n1_p1_instructor'] != $original->data['n1_p1_instructor']) {
array_push($changes,"L'instructeur du niveau 1 pour la première période a été changé de ".\App\User::find($original->data['n1_p1_instructor'])->fullname()." à ".\App\User::find($schedule->data['n1_p1_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n1_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n1_p1_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n1_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n1_p1_name']." du ".$schedule->date." vous a été ajouté."));
}
if ($schedule->data['n1_p2_instructor'] != $original->data['n1_p2_instructor']) {
array_push($changes,"L'instructeur du niveau 1 pour la deuxième période a été changé de ".\App\User::find($original->data['n1_p2_instructor'])->fullname()." à ".\App\User::find($schedule->data['n1_p2_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n1_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n1_p2_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n1_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n1_p2_name']." du ".$schedule->date." vous a été ajouté."));
}
if ($schedule->data['n2_p1_instructor'] != $original->data['n2_p1_instructor']) {
array_push($changes,"L'instructeur du niveau 2 pour la première période a été changé de ".\App\User::find($original->data['n2_p1_instructor'])->fullname()." à ".\App\User::find($schedule->data['n2_p1_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n2_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n2_p1_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n2_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n2_p1_name']." du ".$schedule->date." vous a été ajouté."));
}
if ($schedule->data['n2_p2_instructor'] != $original->data['n2_p2_instructor']) {
array_push($changes,"L'instructeur du niveau 2 pour la deuxième période a été changé de ".\App\User::find($original->data['n2_p2_instructor'])->fullname()." à ".\App\User::find($schedule->data['n2_p2_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n2_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n2_p2_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n2_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n2_p2_name']." du ".$schedule->date." vous a été ajouté."));
}
if ($schedule->data['n3_p1_instructor'] != $original->data['n3_p1_instructor']) {
array_push($changes,"L'instructeur du niveau 3 pour la première période a été changé de ".\App\User::find($original->data['n3_p1_instructor'])->fullname()." à ".\App\User::find($schedule->data['n3_p1_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n3_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n3_p1_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n3_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n3_p1_name']." du ".$schedule->date." vous a été ajouté."));
}
if ($schedule->data['n3_p2_instructor'] != $original->data['n3_p2_instructor']) {
array_push($changes,"L'instructeur du niveau 3 pour la deuxième période a été changé de ".\App\User::find($original->data['n3_p2_instructor'])->fullname()." à ".\App\User::find($schedule->data['n3_p2_instructor'])->fullname());
\Notification::send(\App\User::find($original->data['n3_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$original->data['n3_p2_name']." du ".$original->date." vous a été retiré."));
\Notification::send(\App\User::find($schedule->data['n3_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le cours ".$schedule->data['n3_p2_name']." du ".$schedule->date." vous a été ajouté."));
}
/** Check OCOM */
if ($schedule->data['n1_p1_ocom'] != $original->data['n1_p1_ocom']) {
array_push($changes,"L'OCOM du niveau 1 pour la première période a été changé de ".$original->data['n1_p1_ocom']." à ".$schedule->data['n1_p1_ocom']);
\Notification::send(\App\User::find($schedule->data['n1_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n1_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n1_p1_ocom']));
}
if ($schedule->data['n1_p2_ocom'] != $original->data['n1_p2_ocom']) {
array_push($changes,"L'OCOM du niveau 1 pour la deuxième période a été changé de ".$original->data['n1_p2_ocom']." à ".$schedule->data['n1_p2_ocom']);
\Notification::send(\App\User::find($schedule->data['n1_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n1_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n1_p2_ocom']));
}
if ($schedule->data['n2_p1_ocom'] != $original->data['n2_p1_ocom']) {
array_push($changes,"L'OCOM du niveau 2 pour la première période a été changé de ".$original->data['n2_p1_ocom']." à ".$schedule->data['n2_p1_ocom']);
\Notification::send(\App\User::find($schedule->data['n2_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n2_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n2_p1_ocom']));
}
if ($schedule->data['n2_p2_ocom'] != $original->data['n2_p2_ocom']) {
array_push($changes,"L'OCOM du niveau 2 pour la deuxième période a été changé de ".$original->data['n2_p2_ocom']." à ".$schedule->data['n2_p2_ocom']);
\Notification::send(\App\User::find($schedule->data['n2_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n2_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n2_p2_ocom']));
}
if ($schedule->data['n3_p1_ocom'] != $original->data['n3_p1_ocom']) {
array_push($changes,"L'OCOM du niveau 3 pour la première période a été changé de ".$original->data['n3_p1_ocom']." à ".$schedule->data['n3_p1_ocom']);
\Notification::send(\App\User::find($schedule->data['n3_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n3_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n3_p1_ocom']));
}
if ($schedule->data['n3_p2_ocom'] != $original->data['n3_p2_ocom']) {
array_push($changes,"L'OCOM du niveau 3 pour la deuxième période a été changé de ".$original->data['n3_p2_ocom']." à ".$schedule->data['n3_p2_ocom']);
\Notification::send(\App\User::find($schedule->data['n3_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","L'ocom du cours ".$schedule->data['n3_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n3_p2_ocom']));
}
/** Check Local */
if ($schedule->data['n1_p1_local'] != $original->data['n1_p1_local']) {
array_push($changes,"Le local du niveau 1 pour la première période a été changé de ".$original->data['n1_p1_local']." à ".$schedule->data['n1_p1_local']);
}
if ($schedule->data['n1_p2_local'] != $original->data['n1_p2_local']) {
array_push($changes,"Le local du niveau 1 pour la deuxième période a été changé de ".$original->data['n1_p2_local']." à ".$schedule->data['n1_p2_local']);
}
if ($schedule->data['n2_p1_local'] != $original->data['n2_p1_local']) {
array_push($changes,"Le local du niveau 2 pour la première période a été changé de ".$original->data['n2_p1_local']." à ".$schedule->data['n2_p1_local']);
}
if ($schedule->data['n2_p2_local'] != $original->data['n2_p2_local']) {
array_push($changes,"Le local du niveau 2 pour la deuxième période a été changé de ".$original->data['n2_p2_local']." à ".$schedule->data['n2_p2_local']);
}
if ($schedule->data['n3_p1_local'] != $original->data['n3_p1_local']) {
array_push($changes,"Le local du niveau 3 pour la première période a été changé de ".$original->data['n3_p1_local']." à ".$schedule->data['n3_p1_local']);
}
if ($schedule->data['n3_p2_local'] != $original->data['n3_p2_local']) {
array_push($changes,"Le local du niveau 3 pour la deuxième période a été changé de ".$original->data['n3_p2_local']." à ".$schedule->data['n3_p2_local']);
}
/** Check Name */
if ($schedule->data['n1_p1_name'] != $original->data['n1_p1_name']) {
array_push($changes,"Le nom du cours niveau 1 pour la première période a été changé de ".$original->data['n1_p1_name']." à ".$schedule->data['n1_p1_name']);
\Notification::send(\App\User::find($schedule->data['n1_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n1_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n1_p1_name']));
}
if ($schedule->data['n1_p2_name'] != $original->data['n1_p2_name']) {
array_push($changes,"Le nom du cours niveau 1 pour la deuxième période a été changé de ".$original->data['n1_p2_name']." à ".$schedule->data['n1_p2_name']);
\Notification::send(\App\User::find($schedule->data['n1_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n1_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n1_p2_name']));
}
if ($schedule->data['n2_p1_name'] != $original->data['n2_p1_name']) {
array_push($changes,"Le nom du cours niveau 2 pour la première période a été changé de ".$original->data['n2_p1_name']." à ".$schedule->data['n2_p1_name']);
\Notification::send(\App\User::find($schedule->data['n2_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n2_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n2_p1_name']));
}
if ($schedule->data['n2_p2_name'] != $original->data['n2_p2_name']) {
array_push($changes,"Le nom du cours niveau 2 pour la deuxième période a été changé de ".$original->data['n2_p2_name']." à ".$schedule->data['n2_p2_name']);
\Notification::send(\App\User::find($schedule->data['n2_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n2_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n2_p2_name']));
}
if ($schedule->data['n3_p1_name'] != $original->data['n3_p1_name']) {
array_push($changes,"Le nom du cours niveau 3 pour la première période a été changé de ".$original->data['n3_p1_name']." à ".$schedule->data['n3_p1_name']);
\Notification::send(\App\User::find($schedule->data['n3_p1_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n3_p1_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n3_p1_name']));
}
if ($schedule->data['n3_p2_name'] != $original->data['n3_p2_name']) {
array_push($changes,"Le nom du cours niveau 3 pour la deuxième période a été changé de ".$original->data['n3_p2_name']." à ".$schedule->data['n3_p2_name']);
\Notification::send(\App\User::find($schedule->data['n3_p2_instructor']), new mail(\Auth::User(),"Modification d'un de vos cours","Le nom du cours ".$original->data['n3_p2_name']." du ".$schedule->date." a été changé pour ".$schedule->data['n3_p2_name']));
}
}
\Notification::send($userToNotify, new Alert(\Auth::User()->id,"Modification de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date,"/admin/calendar"));
$string_Change = "<ul>";
foreach ($changes as $value) {
$string_Change = $string_Change."<li>".$value."</li>";
}
$string_Change = $string_Change."</ul>";
if(\App\Config::where('name','is_schedule_build')->first()->state == 1)
{
\Notification::send($userToNotify, new mail(\Auth::User(),"Modification d'une activité a l'horaire",\Auth::User()->fullname()." à modifié l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date."<br>".$string_Change));
}
Log::saveLog("Modification de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date);
return redirect('/admin/calendar');
}
public function delete()
{
$id = request('id');
$schedule = Schedule::find($id);
$schedule->delete();
\Notification::send($userToNotify, new Alert(\Auth::User()->id,"Suppresion de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date,"/admin/calendar"));
if(\App\Config::where('name','is_schedule_build')->first()->state == 1)
{
\Notification::send($userToNotify, new mail(\Auth::User(),"Suppression d'une activité a l'horaire",\Auth::User()->fullname()." à supprimé l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date));
}
Log::saveLog("Suppression de l'activité, ".$schedule->data['event_name']." à l'horaire le ".$schedule->date);
}
private function listClass()
{
$schedules = \App\Schedule::all();
$filtered_schedules = collect();
$classes = [];
foreach($schedules as $schedule)
{
if($schedule->type == "regular")
{
$filtered_schedules->push($schedule);
}
}
foreach($filtered_schedules as $schedule)
{
array_push($classes,$schedule->data['n1_p1_ocom']);
array_push($classes,$schedule->data['n1_p2_ocom']);
array_push($classes,$schedule->data['n2_p1_ocom']);
array_push($classes,$schedule->data['n2_p2_ocom']);
array_push($classes,$schedule->data['n3_p1_ocom']);
array_push($classes,$schedule->data['n3_p2_ocom']);
}
$filtered_classes = array_unique($classes);
return $filtered_classes;
}
public function show()
{
$date = request('date');
return view('admin.calendar.modal.show',['schedules' => \App\Schedule::all()->where('date',$date),'date' => $date]);
$event = \App\Event::allThisYear()->sortBy('date_begin')->filter(function ($value,$key) {
return $value->hidden != 1;
});
return view('admin.schedule.table.index',['events' => $event]);
}
}
@@ -14,6 +14,7 @@ class ComplementaryActivityController extends Controller
*/
public function index()
{
clogNav('consulte les configurations d\'activité');
return view('admin.configs.activity',['configs' => \App\Config::all(),'activities' => \App\ComplementaryActivity::all()]);
}
@@ -67,7 +68,7 @@ class ComplementaryActivityController extends Controller
}
$activity->save();
clog('add','success','a ajouté une activité',null,'App\ComplementaryActivity',$activity->id);
return redirect('/admin/config/activity')->with('success','Activité ajouté avec succes');
}
@@ -129,7 +130,7 @@ class ComplementaryActivityController extends Controller
}
$activity->save();
clog('edit','success','a modifié une activité',null,'App\ComplementaryActivity',$activity->id);
return redirect('/admin/config/activity')->with('success','Modification sauvegarder avec succes');
}
@@ -145,6 +146,7 @@ class ComplementaryActivityController extends Controller
$activity = ComplementaryActivity::find($id);
clog('delete','success','a supprimé une activité',null,'App\ComplementaryActivity',$id);
$activity->delete();
}
}
+43 -3
View File
@@ -4,9 +4,11 @@ namespace App\Http\Controllers;
use App\Config;
use Illuminate\Http\Request;
use phpDocumentor\Reflection\Types\Boolean;
class ConfigController extends Controller
{
/**
* Display a listing of the resource.
*
@@ -14,9 +16,32 @@ class ConfigController extends Controller
*/
public function index()
{
clogNav('consulte les configurations');
return view ('admin.configs.general',['configs' => Config::all()]);
}
public function customisation()
{
return view ('admin.configs.perso',['configs' => Config::all()]);
}
public function customisationUpdate()
{
$configs = [
'public_index_img_url'
];
foreach ($configs as $config) {
$c = \App\Config::all()->where('name',$config)->first();
$c->data = [request($config)];
$c->save();
}
clog('edit','success','a modifié la configuration');
return redirect('/admin/config/customisation')->with('success','Modification sauvegarder avec succès !');
}
/**
* Show the form for creating a new resource.
*
@@ -92,9 +117,7 @@ class ConfigController extends Controller
$c->data = [request($config)];
$c->save();
}
\App\Log::saveLog('Modification de la configuration du site');
clog('edit','success','a modifié la configuration');
return redirect('/admin/config')->with('success','Modification sauvegarder avec succès !');
}
@@ -108,4 +131,21 @@ class ConfigController extends Controller
{
//
}
public function showfilesConfig()
{
$error = [];
return view('admin.configs.file',['configs' => Config::all(),'error' => $error]);
}
public function editfilesConfig()
{
if (\request()->file('nominativeList') != null)
{
\Storage::putFileAs('Systeme/Fichier',\request()->file('nominativeList'),'ListeNominative.pdf');
}
clog('edit','success','a modifié la configuration des fichiers');
return redirect('/admin/config/files')->with('success','Modification sauvegarder avec succès !');
}
}
+126 -8
View File
@@ -3,6 +3,7 @@
namespace App\Http\Controllers;
use App\Course;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
class CourseController extends Controller
@@ -14,7 +15,24 @@ class CourseController extends Controller
*/
public function index()
{
//
$mode = 'future';
if (\request('all'))
{
$courses = Course::all();
$mode = 'all';
}
else
{
$courses = Course::allFuture();
}
foreach ($courses as $course)
{
if($course->ocom() != null)
{
$course->ocom()->updateWasGiven();
}
}
return view('admin.course.index',['courses' => $courses,'mode' => $mode]);
}
/**
@@ -41,18 +59,25 @@ class CourseController extends Controller
/**
* Display the specified resource.
*
* @param \App\Course $course
* @return \Illuminate\Http\Response
* @param $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function show(Course $course)
public function show($id)
{
//
$course = Course::find($id);
$user = \App\User::find($course->user_id);
$name = $course->user_id;
if ($user != null)
{
$name = $user->fullname();
}
return view('admin.course.show',['course' => $course,'username' => $name]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Course $course
* @param Course $course
* @return \Illuminate\Http\Response
*/
public function edit(Course $course)
@@ -64,7 +89,7 @@ class CourseController extends Controller
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Course $course
* @param Course $course
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Course $course)
@@ -72,14 +97,107 @@ class CourseController extends Controller
//
}
public function updateCommentOfficer(Request $request, $id)
{
$course = Course::findOrFail($id);
$course->comment_officer = $request->comment_officer;
$course->save();
return redirect()->back()->with('success','Modification enregisté avec succès');
}
public function updateComment(Request $request, $id)
{
$course = Course::findOrFail($id);
$course->comment = $request->comment;
$course->save();
return redirect()->back()->with('success','Modification enregisté avec succès');
}
public function updateCommentOfficerPlan(Request $request, $id)
{
$course = Course::findOrFail($id);
$course->lessonPlan->comment = $request->comment_officer;
$course->lessonPlan->save();
return redirect()->back()->with('success','Modification enregisté avec succès');
}
public function updateCommentPlan(Request $request, $id)
{
$course = Course::findOrFail($id);
$course->lessonPlan->desc = $request->comment;
$course->lessonPlan->save();
return redirect()->back()->with('success','Modification enregisté avec succès');
}
public function updateLessonPlan(Request $request, $id)
{
$course = Course::findOrFail($id);
$name = $course->ocom.'_'.$course->instructor().'_'.date('c',strtotime($course->event->date_begin)).'.'.\request()->file('file')->getClientOriginalExtension();
$dirID = 'Systeme/Fichier/PlanDeCours';
if ($course->lessonPlan != null)
{
$lessonPlan = $course->lessonPlan;
}
else
{
$lessonPlan = new \App\LessonPlan();
}
\Storage::putFileAs($dirID,\request()->file('file'),$name);
$lessonPlan->user_id = \Auth::user()->id;
$lessonPlan->file = $name;
$lessonPlan->course_id = $course->id;
$lessonPlan->desc = "";
$lessonPlan->comment = "";
$lessonPlan->save();
return redirect()->back();
}
public function downloadLessonPlan($name)
{
if (\Storage::exists('Systeme/Fichier/PlanDeCours/'.$name))
{
return \Storage::download('Systeme/Fichier/PlanDeCours/'.$name);
}
else
{
abort(404);
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Course $course
* @param Course $course
* @return \Illuminate\Http\Response
*/
public function destroy(Course $course)
{
//
}
public function validatePlan($id)
{
$course = Course::findOrFail($id);
if ($course->lessonPlan)
{
if ($course->lessonPlan->approved)
{
$course->lessonPlan->approved = false;
}
else
{
$course->lessonPlan->approved = true;
}
$course->lessonPlan->save();
return strval($course->lessonPlan->approved);
}
return abort(500);
}
}
+334 -32
View File
@@ -2,7 +2,10 @@
namespace App\Http\Controllers;
use App\Course;
use App\Event;
use App\EventType;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
@@ -38,29 +41,112 @@ class EventController extends Controller
{
$event = new Event();
if (\App\GoogleDriveFile::checkConfig())
{
if (\request()->hasFile('files'))
{
$dir = \App\GoogleDriveFile::findByPath('.Systeme/.Fichier/.MessageDeLaSemaine');
$files = [];
foreach (\request()->file('files') as $f)
{
$name = urlencode(pathinfo($f->getClientOriginalName())['filename'].'_'.uniqid().'.'.$f->getClientOriginalExtension());
\Storage::cloud()->putFileAs($dir->id,$f,$name);
array_push($files,$name);
}
$event->weekly_msg_file = $files;
}
else
{
$event->weekly_msg_file = [''];
}
} else {
$event->weekly_msg_file = [''];
}
$event->name = request('name');
$event->date_begin = request('begin');
$event->date_end = request('end');
$event->date_begin = request('begin_time');
$event->date_end = request('end_time');
$event->type = request('type');
$event->user_id = \Auth::user()->id;
$event->location = request('location');
if(request('is_mandatory') != null){
$event->is_mandatory = 1;
} else {
$event->is_mandatory = 0;
}
$event->desc = request('desc');
$event->desc = \request('admin_desc');
if(\request("use_weekly_msg"))
{
$event->use_weekly_msg = 1;
$event->weekly_msg_publication_time = \request('date_msg');
$event->msg = request('admin_desc');
}
else
{
$event->use_weekly_msg = 0;
$event->weekly_msg_publication_time = "";
$event->msg = "";
}
if(\request("use_schedule"))
{
$event->use_schedule = 1;
}
else
{
$event->use_schedule = 0;
}
if(\request("hidden"))
{
$event->hidden = 1;
}
else
{
$event->hidden = 0;
}
$event->calendar_color = \request('calendar_color');
$event->calendar_icon = \request('calendar_icon');
$nbLevel = 1;
$niveaux = [];
while (\request('level_name_'.$nbLevel))
{
array_push($niveaux,['name' => \request('level_name_'.$nbLevel)]);
$nbLevel++;
}
$nbPeriode = 1;
$periodes = [];
while (\request('periode_name_'.$nbPeriode))
{
array_push($periodes,[
'name' => \request('periode_name_'.$nbPeriode),
'begin_time' => \request('periode_begin_time_'.$nbPeriode),
'end_time' => \request('periode_end_time_'.$nbPeriode)
]);
$nbPeriode++;
}
$event->schedule = [
'periodes' => $periodes,
'niveaux' => $niveaux,
'courses' => []
];
$event->save();
if ($event->type == 1) {
for ($l=1; $l <= \App\Config::getData('admin_level_in_schedule_nb'); $l++) {
for ($p=1; $p <= \App\Config::getData('admin_periode_nb'); $p++) {
if ($event->use_schedule) {
for ($l=1; $l < $nbLevel; $l++) {
for ($p=1; $p < $nbPeriode; $p++) {
$course = new \App\Course();
$users = \App\User::all();
$instructor = 1;
$instructor = request('instruc_n'.$l.'_p'.$p);
foreach ($users as $user) {
if($user->fullname() == request('instruc_n'.$l.'_p'.$p))
@@ -69,22 +155,64 @@ class EventController extends Controller
}
}
$course->name = request('name_n'.$l.'_p'.$p);
$course->user_id = $instructor;
$course->ocom = request('ocom_n'.$l.'_p'.$p);
$course->location = request('loc_n'.$l.'_p'.$p);
if ($instructor == null) {
$course->user_id = '';
} else {
$course->user_id = $instructor;
}
if (request('location_n'.$l.'_p'.$p) != null) {
$course->location = request('location_n'.$l.'_p'.$p);
} else {
$course->location = "";
}
$course->periode = $p;
$course->level = $l;
$course->comment = "";
$course->event_id = $event->id;
if(\request("use_course_n".$l."_p".$p) == 'on')
{
if (request('name_n'.$l.'_p'.$p) == null) {
$course->name = "";
} else {
$course->name = request('name_n'.$l.'_p'.$p);
}
if (request('ocom_n'.$l.'_p'.$p) == null) {
$course->ocom = "";
} else {
$course->ocom = request('ocom_n'.$l.'_p'.$p);
}
$course->desc = "";
}
else
{
$course->name = "";
$course->ocom = "";
if (request('desc_n'.$l.'_p'.$p) == null)
{
$course->desc = "";
}
else
{
$course->desc = request('desc_n'.$l.'_p'.$p);
}
}
$course->comment_officer = "";
$course->comment = "";
$course->save();
$ocom = \App\OCOM::where('ocom','=',request('ocom_n'.$l.'_p'.$p))->first();
if ($ocom != null)
{
$foo = $ocom->courses();
$foo->push($course);
$ocom->saveCourses($foo);
}
}
}
}
return redirect('/admin/calendar')->with('success','Événement ajouter à l\'horaire');
clog('add','success','a ajouté un évènement',null,'App\Event',$event->id);
return redirect('/admin/schedule')->with('success','Événement ajouter à l\'horaire');
}
/**
@@ -106,7 +234,15 @@ class EventController extends Controller
*/
public function edit($id)
{
return view('admin.schedule.event.edit',['activity' => \App\Event::find($id)]);
$event = \App\Event::find($id);
if ($event->hidden == 1)
{
if (\Auth::user()->p('instruction_see_hidden_event') != 1)
{
return redirect('/admin/schedule')->with('error','Modification non authorisé');
}
}
return view('admin.schedule.event.edit',['event' => $event]);
}
/**
@@ -118,29 +254,124 @@ class EventController extends Controller
*/
public function update($id)
{
$event = Event::find($id);
$event = Event::findOrFail($id);
if ($event->hidden == 1)
{
if (\Auth::user()->p('instruction_see_hidden_event') != 1)
{
return redirect('/admin/schedule')->with('error','Modification non authorisé');
}
}
// if (\App\GoogleDriveFile::checkConfig())
// {
// if (\request()->hasFile('files'))
// {
// $dir = \App\GoogleDriveFile::findByPath('.Systeme/.Fichier/.MessageDeLaSemaine');
// $files = [];
// foreach (\request()->file('files') as $f)
// {
// $name = urlencode(pathinfo($f->getClientOriginalName())['filename'].'_'.uniqid().'.'.$f->getClientOriginalExtension());
// \Storage::cloud()->putFileAs($dir->id,$f,$name);
// array_push($files,$name);
// }
// $event->weekly_msg_file = $files;
// }
// else
// {
// $event->weekly_msg_file = [''];
// }
// } else {
// $event->weekly_msg_file = [''];
// }
$event->name = request('name');
$event->date_begin = request('begin');
$event->date_end = request('end');
$event->date_begin = request('begin_time');
$event->date_end = request('end_time');
$event->user_id = \Auth::user()->id;
$event->location = request('location');
if(request('is_mandatory') != null){
$event->is_mandatory = 1;
} else {
$event->is_mandatory = 0;
}
$event->desc = request('desc');
$event->desc = \request('admin_desc');
if(\request("use_weekly_msg"))
{
$event->use_weekly_msg = 1;
$event->weekly_msg_publication_time = \request('date_msg');
$event->msg = request('admin_desc');
}
else
{
$event->use_weekly_msg = 0;
$event->weekly_msg_publication_time = "";
$event->msg = "";
}
if(\request("use_schedule"))
{
$event->use_schedule = 1;
}
else
{
$event->use_schedule = 0;
}
if(\request("hidden"))
{
$event->hidden = 1;
}
else
{
$event->hidden = 0;
}
$event->calendar_color = \request('calendar_color');
$event->calendar_icon = \request('calendar_icon');
$nbLevel = 1;
$niveaux = [];
while (\request('level_name_'.$nbLevel))
{
array_push($niveaux,['name' => \request('level_name_'.$nbLevel)]);
$nbLevel++;
}
$nbPeriode = 1;
$periodes = [];
while (\request('periode_name_'.$nbPeriode))
{
array_push($periodes,[
'name' => \request('periode_name_'.$nbPeriode),
'begin_time' => \request('periode_begin_time_'.$nbPeriode),
'end_time' => \request('periode_end_time_'.$nbPeriode)
]);
$nbPeriode++;
}
$event->schedule = [
'periodes' => $periodes,
'niveaux' => $niveaux,
'courses' => []
];
$event->save();
if ($event->type == 1) {
for ($l=1; $l <= \App\Config::getData('admin_level_in_schedule_nb'); $l++) {
for ($p=1; $p <= \App\Config::getData('admin_periode_nb'); $p++) {
if ($event->use_schedule) {
for ($l=1; $l < $nbLevel; $l++) {
for ($p=1; $p < $nbPeriode; $p++) {
$course = new \App\Course();
$course = $event->course($p,$l);
if ($course == null)
{
$course = new Course();
}
$users = \App\User::all();
$instructor = 1;
$instructor = request('instruc_n'.$l.'_p'.$p);
foreach ($users as $user) {
if($user->fullname() == request('instruc_n'.$l.'_p'.$p))
@@ -148,23 +379,56 @@ class EventController extends Controller
$instructor = $user->id;
}
}
$course->name = request('name_n'.$l.'_p'.$p);
$course->user_id = $instructor;
$course->ocom = request('ocom_n'.$l.'_p'.$p);
$course->location = request('loc_n'.$l.'_p'.$p);
if ($instructor == null) {
$course->user_id = "";
} else {
$course->user_id = $instructor;
}
if (request('location_n'.$l.'_p'.$p) == null) {
$course->location = "";
} else {
$course->location = request('location_n'.$l.'_p'.$p);
}
$course->periode = $p;
$course->level = $l;
$course->comment = "";
$course->event_id = $event->id;
if(\request("use_course_n".$l."_p".$p) == 'on')
{
$course->name = request('name_n'.$l.'_p'.$p);
$course->ocom = request('ocom_n'.$l.'_p'.$p);
$course->desc = "";
}
else
{
$course->name = "";
$course->ocom = "";
if (request('desc_n'.$l.'_p'.$p) == null)
{
$course->desc = "";
}
else
{
$course->desc = request('desc_n'.$l.'_p'.$p);
}
}
$course->comment_officer = "";
$course->comment = "";
$course->save();
$ocom = \App\OCOM::where('ocom','=',request('ocom_n'.$l.'_p'.$p))->first();
if ($ocom != null)
{
$foo = $ocom->courses();
$foo->push($course);
$ocom->saveCourses($foo);
}
}
}
}
return redirect('/admin/calendar')->with('success','Modification à l\'événement sauvegarder à l\'horaire');
clog('add','success','a modifier un évènement',null,'App\Event',$event->id);
return redirect('/admin/schedule')->with('success','Événement modifier à l\'horaire');
}
/**
@@ -177,4 +441,42 @@ class EventController extends Controller
{
//
}
public function checkEvent()
{
//
}
public function toJson($id)
{
$event = Event::findOrFail($id);
$model = $event->schedule;
$default_value = [];
if ($event->use_schedule == 1) {
foreach ($model['periodes'] as $periode_index => $periode)
{
$niveau_array = [];
foreach ($model['niveaux'] as $niveau_index => $niveau)
{
$course = $event->course($periode_index+1,$niveau_index+1);
$use_course = "on";
if ($course->name == null) {
$use_course = "off";
}
array_push($niveau_array,[
'ocom' => $course->ocom,
'name' => $course->name,
'location' => $course->location,
'instructor' => $course->instructor(),
'desc' => $course->desc,
'use_course' => $use_course
]);
}
array_push($default_value,$niveau_array);
}
$model['default_value'] = $default_value;
}
$event->schedule_model = $model;
return $event->toArray();
}
}
@@ -0,0 +1,261 @@
<?php
namespace App\Http\Controllers;
use App\EventType;
use Illuminate\Http\Request;
class EventTypeController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.event_type.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$eventType = new EventType();
$eventType->name = $request->name;
$eventType->location = $request->location;
$eventType->begin_time = $request->begin_time;
$eventType->end_time = $request->end_time;
$eventType->calendar_icon = $request->calendar_icon;
$eventType->calendar_color = $request->calendar_color;
$eventType->admin_desc = $request->admin_desc;
if ($request->use_weekly_msg == 'on')
{
$eventType->use_weekly_msg = 1;
$eventType->weekly_msg_publication_time = $request->weekly_msg_publication_time;
}
else
{
$eventType->use_weekly_msg = 0;
$eventType->weekly_msg_publication_time = '';
}
if ($request->use_schedule == 'on')
{
$eventType->use_schedule = 1;
}
else
{
$eventType->use_schedule = 0;
}
if(\request("hidden"))
{
$eventType->hidden = 1;
}
else
{
$eventType->hidden = 0;
}
if ($request->is_mandatory == 'on')
{
$eventType->is_mandatory = 1;
}
else
{
$eventType->is_mandatory = 0;
}
$nbOfLevel = 1;
while (\request('level_name_'.$nbOfLevel))
{
$nbOfLevel++;
}
$nbOfLevel = $nbOfLevel-1;
$nbOfPeriode = 1;
while (\request('periode_name_'.$nbOfPeriode))
{
$nbOfPeriode++;
}
$nbOfPeriode = $nbOfPeriode -1;
$model = [];
for ($x = 1; $x <= $nbOfPeriode; $x++) {
$model['periodes'][$x-1] = [
'name' => \Request('periode_name_'.$x),
'begin_time' => \Request('periode_begin_time_'.$x),
'end_time' => \Request('periode_end_time_'.$x)
];
}
for ($i = 1; $i <= $nbOfLevel; $i++) {
$model['niveaux'][$i-1] = [
'name' => \Request('level_name_'.$i)
];
for ($x = 1; $x <= $nbOfPeriode; $x++) {
$model['default_value'][$x-1][$i-1] = [
'ocom' => \Request('ocom_n'.$i.'_p'.$x),
'name' => \Request('name_n'.$i.'_p'.$x),
'location' => \Request('location_n'.$i.'_p'.$x),
'instructor' => \Request('instruc_n'.$i.'_p'.$x),
'desc' => \Request('desc_n'.$i.'_p'.$x),
'use_course' => \Request('use_course_n'.$i.'_p'.$x),
];
}
}
$eventType->schedule_model = $model;
$eventType->save();
return redirect('/admin/config/instruction')->with('success','Type d\'évenement ajouté avec succès');
}
/**
* Display the specified resource.
*
* @param \App\EventType $eventType
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$event_type = EventType::findOrFail($id);
return view('admin.event_type.show',['event_type' => $event_type]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\EventType $eventType
* @return \Illuminate\Http\Response
*/
public function edit(EventType $eventType)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\EventType $eventType
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
$eventType = EventType::findOrFail($id);
$eventType->name = $request->name;
$eventType->location = $request->location;
$eventType->begin_time = $request->begin_time;
$eventType->end_time = $request->end_time;
$eventType->calendar_icon = $request->calendar_icon;
$eventType->calendar_color = $request->calendar_color;
$eventType->admin_desc = $request->admin_desc;
if ($request->use_weekly_msg == 'on')
{
$eventType->use_weekly_msg = 1;
$eventType->weekly_msg_publication_time = $request->weekly_msg_publication_time;
}
else
{
$eventType->use_weekly_msg = 0;
$eventType->weekly_msg_publication_time = '';
}
if ($request->use_schedule == 'on')
{
$eventType->use_schedule = 1;
}
else
{
$eventType->use_schedule = 0;
}
if(\request("hidden"))
{
$eventType->hidden = 1;
}
else
{
$eventType->hidden = 0;
}
if ($request->is_mandatory == 'on')
{
$eventType->is_mandatory = 1;
}
else
{
$eventType->is_mandatory = 0;
}
$nbOfLevel = 1;
while (\request('level_name_'.$nbOfLevel))
{
$nbOfLevel++;
}
$nbOfLevel = $nbOfLevel-1;
$nbOfPeriode = 1;
while (\request('periode_name_'.$nbOfPeriode))
{
$nbOfPeriode++;
}
$nbOfPeriode = $nbOfPeriode -1;
$model = [];
for ($x = 1; $x <= $nbOfPeriode; $x++) {
$model['periodes'][$x-1] = [
'name' => \Request('periode_name_'.$x),
'begin_time' => \Request('periode_begin_time_'.$x),
'end_time' => \Request('periode_end_time_'.$x)
];
}
for ($i = 1; $i <= $nbOfLevel; $i++) {
$model['niveaux'][$i-1] = [
'name' => \Request('level_name_'.$i)
];
for ($x = 1; $x <= $nbOfPeriode; $x++) {
$model['default_value'][$x-1][$i-1] = [
'ocom' => \Request('ocom_n'.$i.'_p'.$x),
'name' => \Request('name_n'.$i.'_p'.$x),
'location' => \Request('location_n'.$i.'_p'.$x),
'instructor' => \Request('instruc_n'.$i.'_p'.$x),
'desc' => \Request('desc_n'.$i.'_p'.$x),
'use_course' => \Request('use_course_n'.$i.'_p'.$x),
];
}
}
$eventType->schedule_model = $model;
$eventType->save();
return redirect()->back()->with('success','Modification sauvegardé avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param \App\EventType $eventType
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$e = EventType::findOrFail($id);
$e->delete();
}
public function toJson($id)
{
return EventType::findOrFail($id)->toArray();
}
}
+135 -5
View File
@@ -2,7 +2,9 @@
namespace App\Http\Controllers;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
use function Symfony\Component\VarDumper\Dumper\esc;
class FilesController extends Controller
{
@@ -40,12 +42,83 @@ class FilesController extends Controller
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
* @param $path
* @return \Symfony\Component\HttpFoundation\StreamedResponse
*/
public function show($id)
public function show(String $path)
{
//
$all_rules = collect(\DB::table('acl_rules')->get()->all());
foreach ($all_rules as $rule)
{
if ($rule->path == "*")
{
if (\Auth::check())
{
if (\Auth::user()->checkACLRules($rule) > 0)
{
if (\Storage::exists($path))
{
return \Storage::download($path);
}
else
{
abort(404);
}
}
}
}
}
$path_array = explode('/',$path);
$checkedPath = $path_array[0];
unset($path_array[0]);
$path_array = array_values($path_array);
while ($checkedPath != $path)
{
$rules = $all_rules->where('path','=',$checkedPath.'/*');
if ($rules->isNotEmpty())
{
$access_level = 0;
foreach ($rules as $r)
{
if (\Auth::check())
{
$temp_access_level = \Auth::user()->checkACLRules($r);
if ($temp_access_level > $access_level)
{
$access_level = $temp_access_level;
}
}
else
{
if ($r->user_id == '*')
{
if ($r->access > $access_level)
{
$access_level = $r->access;
}
}
}
if ($access_level > 0)
{
if (\Storage::exists($path))
{
return \Storage::download($path);
}
else
{
abort(404);
}
}
}
}
$checkedPath = $checkedPath.'/'.$path_array[0];
unset($path_array[0]);
$path_array = array_values($path_array);
}
abort(403);
}
/**
@@ -84,6 +157,63 @@ class FilesController extends Controller
public function guide()
{
return view('admin.files.guide');
return redirect('/admin/files?leftPath=Prive/Staff/Guide');
}
public function instruction()
{
return redirect('/admin/files?leftPath=Prive/Staff/Instruction');
}
public function cadet()
{
return redirect('/admin/files?leftPath=Prive/Cadet');
}
public function staff()
{
return redirect('/admin/files?leftPath=Prive/Staff');
}
public function etamas()
{
return redirect('/admin/files?leftPath=Prive/ETAMAS');
}
public function officier()
{
return redirect('/admin/files?leftPath=Prive/Officier');
}
public function publique()
{
return redirect('/admin/files?leftPath=Publique');
}
public function show_nominativeList()
{
return view('admin.files.list.index');
}
public function download_nominativeList()
{
if (\Storage::exists('/Systeme/Fichier/ListeNominative.pdf'))
{
return \Storage::download('/Systeme/Fichier/ListeNominative.pdf');
}
return view('admin.files.list.index');
}
public function edit_nominativeList()
{
return view('admin.files.list.edit');
}
public function update_nominativeList()
{
\Storage::putFileAs('Systeme/Fichier',\request()->file('nominativeList'),'ListeNominative.pdf');
clog('edit','success','a modifié la liste nominative');
return redirect('/admin/nominativelist')->with('success','Modification sauvegarder avec succès !');
}
}
@@ -0,0 +1,635 @@
<?php
namespace App\Http\Controllers;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Psy\Util\Str;
use Symfony\Component\Console\Input\Input;
class GoogleDriveController extends Controller
{
/**
* Display a listing of the resource.
*
* @param string $dir
* @param bool $recursive
* @return \Illuminate\Http\Response
*/
public function index($folder = '')
{
return view('admin.files.Google Drive.index',['folder' => $folder]);
}
public function indexFolder($folder = '')
{
return view('admin.files.Google Drive.index',['folder' => $folder,'mode' => 'folder']);
}
/**
* Show the form for creating a new file.
*
* @return \Illuminate\Http\RedirectResponse
*/
public function createFile()
{
Storage::cloud()->put(\request('currentDir'.'/'.\request('name')), '');
return back()->with('success','Fichier créer avec succès');
}
public function createFolder()
{
Storage::cloud()->makeDirectory(\request('currentDir').'/'.\request('name'));
return back()->with('success','Dossier créer avec succès');
}
public function uploadFile()
{
Storage::cloud()->putFileAs(\request('currentDir'),\request()->file('fichier'),\request()->file('fichier')->getClientOriginalName());
return back()->with('success','Fichier téléversé avec succès');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return bool
*/
public function store(Request $request)
{
$path = Storage::cloud()->makeDirectory('Test Dir');
dd($path);
}
/**
* Display the specified resource.
*
* @param $filename
* @return \Illuminate\Http\Response
* @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
*/
public function show()
{
$filename = \request('file');
$contents = collect(Storage::cloud()->listContents('/1nEe35-GvLX598RketTI-UoaOxIMNxfka', true));
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($filename, PATHINFO_FILENAME))
->where('extension', '=', pathinfo($filename, PATHINFO_EXTENSION))
->first(); // there can be duplicate file names!
//return $file; // array with file info
$rawData = Storage::cloud()->get($file['path']);
return response($rawData, 200)
->header('ContentType', $file['mimetype'])
->header('Content-Disposition', "attachment; filename='$filename'");
}
public function showMetadata($dir,$file)
{
if ($dir == 'root')
{
$dir = '/';
}
$contents = collect(Storage::cloud()->listContents($dir, true));
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($file, PATHINFO_FILENAME))
->where('extension', '=', pathinfo($file, PATHINFO_EXTENSION))
->first(); // there can be duplicate file names!
return $file;
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
public function getPathArray()
{
$contents = collect(Storage::cloud()->listContents('/', true));
return json_encode($contents->where('type', '=', 'dir'));
}
public function getPath($folder)
{
$contents = collect(Storage::cloud()->listContents('/', true));
$dir = collect($contents->where('type', '=', 'dir'));
foreach ($dir as $d)
{
if($d['basename'] == $folder)
{
return $d['dirname'];
}
}
}
public function getFile()
{
if(\request('f'))
{
$dir = '/';
if (\request('d') && urldecode(\request('d')) != '')
{
$dir = \request('d');
}
$filename = urldecode(\request('f'));
$recursive = false; // Get subdirectories also?
$contents = collect(Storage::cloud()->listContents($dir, $recursive));
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($filename, PATHINFO_FILENAME))
->first(); // there can be duplicate file names!
if ($file == null)
{
$filename = \request('f');
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($filename, PATHINFO_FILENAME))
->first(); // there can be duplicate file names!
}
$rawData = Storage::cloud()->get($file['path']);
$filename = urlencode($filename);
return response($rawData, 200)
->header('Content-Type', $file['mimetype'])
->header('Content-Disposition', "attachment; filename=$filename");
}
else
{
abort(404);
}
}
public function deleteFile()
{
if(\request('f'))
{
$dir = '/';
if (\request('d') && urldecode(\request('d')) != '')
{
$dir = \request('d');
}
$filename = urldecode(\request('f'));
$recursive = false; // Get subdirectories also?
$contents = collect(Storage::cloud()->listContents($dir, $recursive));
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($filename, PATHINFO_FILENAME))
->where('extension', '=', pathinfo($filename, PATHINFO_EXTENSION))
->first(); // there can be duplicate file names!
Storage::cloud()->delete($file['path']);
return back()->with('success','Fichier supprimé avec succès');
}
else
{
abort(404);
}
}
public function deleteDir()
{
$directoryID = \request('d');
// Now find that directory and use its ID (path) to delete it
$dir = '/';
$recursive = false; // Get subdirectories also?
$contents = collect(Storage::cloud()->listContents($dir, $recursive));
$directory = $contents
->where('type', '=', 'dir')
->where('basename', '=', $directoryID)
->first();
Storage::cloud()->deleteDirectory($directory['path']);
return back()->with('success','Dossier supprimé avec succès');
}
public function list($folder = 'root')
{
$recursive = false; // Get subdirectories also?
$perm = ['r' => GoogleDriveFile::getPermForAuthUser($folder,'r'),'w' => GoogleDriveFile::getPermForAuthUser($folder,'w'),'p' => GoogleDriveFile::getPermForAuthUser($folder,'p')];
if ($folder == 'root')
{
$contents = collect(Storage::cloud()->listContents('/', $recursive));
}
else
{
$contents = collect(Storage::cloud()->listContents($folder, $recursive));
}
return view('admin.files.Google Drive.explorer',[
'directories' => $contents->where('type', '=', 'dir')->sortByDesc('name'),
'files' => $contents->where('type', '=', 'file'),
'currentDir' => $folder,
'permission' => $perm]);
}
public function checkFileSystem()
{
$error = [];
if(\App\Config::getData('is_Google_Drive_enabled') == "true")
{
if (GoogleDriveFile::checkConfig())
{
$structure = $this->getFileStructure();
$this->checkStructure($structure,'/','/',$error);
}
else
{
$error = ['Il y a un probleme avec vos configurations'];
}
}
else
{
$error = ['Google Drive n\'est pas actif'];
}
return $error;
}
public function checkStructure()
{
$structure = $this->getFileStructure();
foreach ($structure as $directory => $value)
{
$basename = GoogleDriveFile::findByPathInDrive($directory);
if ($basename == false)
{
$basename = GoogleDriveFile::createByPathInDrive($directory);
}
$googleDriveFile = GoogleDriveFile::findByPath($directory);
if ($googleDriveFile == null)
{
$googleDriveFile = new GoogleDriveFile();
$googleDriveFile->id = $basename;
$googleDriveFile->type = 'directory';
$googleDriveFile->rank_permission = $value['rank'];
$googleDriveFile->job_permission = [];
$googleDriveFile->user_permission = [];
$googleDriveFile->path = $directory;
$name = explode('/',$directory);
$googleDriveFile->name = $name[count($name)-1];
$googleDriveFile->save();
}
else
{
if ($googleDriveFile->id != $basename)
{
$googleDriveFile->id = $basename;
$googleDriveFile->save();
}
}
}
}
public function editPermission($folder)
{
$f = GoogleDriveFile::find($folder);
if ($f == null)
{
$metadata = \Storage::cloud()->getMetadata($folder);
$f = new GoogleDriveFile();
$f->id = $folder;
$f->type = 'directory';
$f->name = $metadata['name'];
$f->rank_permission = [1 => 'rwp'];
$f->job_permission = [];
$f->user_permission = [];
$f->path = $this->recreatePath($folder);
$f->save();
}
return view('admin.files.Google Drive.permission',['dir' => $f]);
}
public function getFileStructure()
{
return collect([
'.Systeme' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Systeme/.Fichier' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Systeme/.Fichier/.MessageDeLaSemaine' => [
'rank' => [1 => 'rwp',0 => 'r'],
'job' => [],
'user' => []
],
'.Systeme/.Fichier/.PlanDeCours' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.Cadet' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.ETAMAS' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.Officier' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.Staff' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.Staff/.Guide' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Privé/.Staff/.Instruction' => [
'rank' => [1 => 'rwp'],
'job' => [],
'user' => []
],
'.Publique' => [
'rank' => [1 => 'rwp',0 => 'r'],
'job' => [],
'user' => []
],
'.Publique/.Fichier' => [
'rank' => [1 => 'rwp',0 => 'r'],
'job' => [],
'user' => []
],
'.Publique/.Image' => [
'rank' => [1 => 'rwp',0 => 'r'],
'job' => [],
'user' => []
],
]);
}
public function listLockDirectory($d)
{
$contents = collect(\Storage::cloud()->listContents($d, false));
$dir = $contents->where('type', '=', 'dir');
$dir = $dir->where('filename','=','');
return $dir;
}
public function recreatePath($folder)
{
$path = [];
$name = [];
$directories = collect(json_decode($this->getPathArray(),true));
foreach ($directories as $dir)
{
$path[$dir['basename']] = $dir['dirname'];
$name[$dir['basename']] = $dir['name'];
}
$realPath = $name[$folder];
$foo = $folder;
while ($foo != "")
{
$bar = explode('/',$path[$foo]);
$foo = $bar[count($bar)-1];
if ($foo != "")
{
$realPath = $name[$foo].'/'.$realPath;
}
}
return $realPath;
}
public function editPermissionModal($folder,$subject,$id)
{
$dir = GoogleDriveFile::find($folder);
$foo = null;
$perm = null;
if ($subject == 'rank')
{
if ($id == 0)
{
$foo = new \App\Rank();
$foo->name = "Utilisateur non authentifié";
$foo->id = 0;
if (isset($dir->rank_permission[$id]))
{
$perm = $dir->rank_permission[$id];
}
else
{
$perm = "";
}
}
else
{
$foo = \App\Rank::find($id);
$perm = $dir->rank_permission[$id];
}
}
elseif ($subject == 'job')
{
$foo = \App\Job::find($id);
$perm = $dir->job_permission[$id];
}
else
{
$foo = \App\User::find($id);
$perm = $dir->user_permission[$id];
}
return view('admin.files.Google Drive.permission.edit',['folder' => $dir,'subject' => $foo,'perm' => $perm,'s' => $subject]);
}
public function addPermissionModal($folder,$subject)
{
$dir = GoogleDriveFile::find($folder);
$list = null;
if ($subject == 'rank')
{
$list = \App\Rank::all();
}
elseif ($subject == 'job')
{
$list = \App\Job::all();
}
else
{
$list = \App\User::all();
}
return view('admin.files.Google Drive.permission.add',['folder' => $dir,'list' => $list,'s' => $subject]);
}
public function patchPermission(Request $request,$folder,$subject,$id)
{
$f = GoogleDriveFile::find($folder);
$permstring = '';
if (isset($request->read))
{
if ($request->read == 'on')
{
$permstring = $permstring.'r';
}
}
if (isset($request->write))
{
if ($request->write == 'on')
{
$permstring = $permstring.'w';
}
}
if (isset($request->perm))
{
if ($request->perm == 'on')
{
$permstring = $permstring.'p';
}
}
if ($subject == 'rank')
{
$temp = $f->rank_permission;
$temp[$id] = $permstring;
$f->rank_permission = $temp;
}
if ($subject == 'job')
{
$temp = $f->job_permission;
$temp[$id] = $permstring;
$f->job_permission = $temp;
}
if ($subject == 'user')
{
$temp = $f->user_permission;
$temp[$id] = $permstring;
$f->user_permission = $temp;
}
$f->save();
return redirect()->back()->with('success','Modification enregistré avec succès');
}
public function addPermission(Request $request,$folder,$subject)
{
$f = GoogleDriveFile::find($folder);
$permstring = '';
if (isset($request->read))
{
if ($request->read == 'on')
{
$permstring = $permstring.'r';
}
}
if (isset($request->write))
{
if ($request->write == 'on')
{
$permstring = $permstring.'w';
}
}
if (isset($request->perm))
{
if ($request->perm == 'on')
{
$permstring = $permstring.'p';
}
}
if ($subject == 'rank')
{
$temp = $f->rank_permission;
$temp[$request->id] = $permstring;
$f->rank_permission = $temp;
}
if ($subject == 'job')
{
$temp = $f->job_permission;
$temp[$request->id] = $permstring;
$f->job_permission = $temp;
}
if ($subject == 'user')
{
$temp = $f->user_permission;
$temp[$request->id] = $permstring;
$f->user_permission = $temp;
}
$f->save();
return redirect()->back()->with('success','Modification enregistré avec succès');
}
public function deletePermission($folder,$subject,$id)
{
$f = GoogleDriveFile::find($folder);
if ($subject == 'rank')
{
$temp = $f->rank_permission;
unset($temp[$id]);
$f->rank_permission = $temp;
}
if ($subject == 'job')
{
$temp = $f->job_permission;
unset($temp[$id]);
$f->job_permission = $temp;
}
if ($subject == 'user')
{
$temp = $f->user_permission;
unset($temp[$id]);
$f->user_permission = $temp;
}
$f->save();
return redirect()->back()->with('success','Modification enregistré avec succès');
}
}
+7 -1
View File
@@ -16,7 +16,7 @@ class InventoryController extends Controller
public function index()
{
$items = Item::all();
clogNav('consulte l\'inventaire');
return view('admin.inventory.index',[ 'items' => $items]);
}
@@ -30,6 +30,12 @@ class InventoryController extends Controller
//
}
public function management()
{
clogNav('consulte la gestion de l\'inventaire');
return view('admin.inventory.management');
}
public function booking()
{
$items = Item::all();
@@ -0,0 +1,136 @@
<?php
namespace App\Http\Controllers;
use App\Item;
use App\ItemCategory;
use Illuminate\Http\Request;
class ItemCategoryController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
clogNav('consulte la gestion des catégories d\'inventaire');
return view('admin.itemcategory.index',['categories' => ItemCategory::all()]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.itemcategory.add');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store()
{
$c = new ItemCategory();
$c->name = \request('name');
$c->desc = \request('desc');
if (\request('is_training') == 1)
{
$c->is_training = 1;
}
else
{
$c->is_training = 0;
}
if (\request('is_op_appro') == 1)
{
$c->is_op_appro = 1;
}
else
{
$c->is_op_appro = 0;
}
$c->save();
clog('add','success','a ajouté une catégorie a l\'inventaire',null,'App\ItemCategory',$c->id);
return redirect('/admin/inventory/management/category/')->with('success','Catégorie ajouté avec succès');
}
/**
* Display the specified resource.
*
* @param \App\ItemCategory $itemCategory
* @return \Illuminate\Http\Response
*/
public function show(ItemCategory $itemCategory)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\ItemCategory $itemCategory
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.itemcategory.edit',['category' => ItemCategory::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\ItemCategory $itemCategory
* @return \Illuminate\Http\Response
*/
public function update($id)
{
$c = ItemCategory::find($id);
$c->name = \request('name');
$c->desc = \request('desc');
if (\request('is_training') == 1)
{
$c->is_training = 1;
}
else
{
$c->is_training = 0;
}
if (\request('is_op_appro') == 1)
{
$c->is_op_appro = 1;
}
else
{
$c->is_op_appro = 0;
}
$c->save();
clog('edit','success','a modifié une catégorie de l\'inventaire',null,'App\ItemCategory',$c->id);
return redirect('/admin/inventory/management/category/')->with('success','Catégorie modifié avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param \App\ItemCategory $itemCategory
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$c = ItemCategory::find($id);
$c->delete();
clog('delete','success','a supprimé une catégorie de l\'inventaire',null,'App\ItemCategory',$c->id);
}
}
+16 -9
View File
@@ -24,7 +24,7 @@ class ItemController extends Controller
*/
public function create()
{
return view('admin.item.add');
return view('admin.item.add',['categories' => \App\ItemCategory::all()]);
}
/**
@@ -33,17 +33,20 @@ class ItemController extends Controller
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
public function store()
{
$item = new Item;
$item->name = request('name');
$item->desc = request('desc');
$item->quantiy = request('qt');
$item->quantity = request('quantity');
$item->official_number = request('official_number');
$item->metadata = ['size' => request('metadata-size')];
$item->category_id = request('category_id');
$item->save();
return redirect('/admin/inventory');
clog('add','success',"a ajouté un item à l'inventaire",null,"App\Item",$item->id);
return redirect('/admin/inventory')->with('success','Item sauvegardé avec succès');
}
/**
@@ -67,7 +70,7 @@ class ItemController extends Controller
{
$item = Item::find($id);
return view('admin.item.edit',['item' => $item]);
return view('admin.item.edit',['item' => $item,'categories' => \App\ItemCategory::all()]);
}
/**
@@ -83,11 +86,14 @@ class ItemController extends Controller
$item->name = request('name');
$item->desc = request('desc');
$item->quantity = request('qt');
$item->quantity = request('quantity');
$item->official_number = request('official_number');
$item->metadata = ['size' => request('metadata-size')];
$item->category_id = request('category_id');
$item->save();
return redirect('/admin/inventory');
clog('edit','success',"a modifié un item à l'inventaire",null,"App\Item",$item->id);
return redirect('/admin/inventory')->with('success','Item sauvegardé avec succès');
}
/**
@@ -101,5 +107,6 @@ class ItemController extends Controller
$item = Item::find(request('id'));
$item->delete();
clog('delete','success',"a supprimé un item à l'inventaire",null,"App\Item",$item->id);
}
}
+47 -86
View File
@@ -20,7 +20,7 @@ class JobController extends Controller
$jobs = $jobs_sorted->values();
return view('admin.job.index', ['jobs' => $jobs]);
return view('admin.configs.jobs.index', ['jobs' => $jobs]);
}
/**
@@ -43,90 +43,24 @@ class JobController extends Controller
{
$job = new Job;
$job->name = request('name');
$job->acces_level = request('acces_level');
$job->desc = request('desc');
$job->name = $request->name;
$job->desc = $request->desc;
if (null !==(request('schedule_see'))) {
$job->schedule_see = request('schedule_see');
} else {
$job->schedule_see = false;
}
if (null !==(request('schedule_edit'))) {
$job->schedule_edit = 1;
} else {
$job->schedule_edit = false;
}
if (null !==(request('schedule_notify'))) {
$job->schedule_notify = 1;
} else {
$job->schedule_notify = false;
}
if (null !==(request('message_see'))) {
$job->message_see = 1;
} else {
$job->message_see = false;
}
if (null !==(request('message_edit'))) {
$job->message_edit = 1;
} else {
$job->message_edit = false;
}
if (null !==(request('message_notify'))) {
$job->message_notify = 1;
} else {
$job->message_notify = false;
}
if (null !==(request('paper_edit'))) {
$job->paper_edit = 1;
} else {
$job->paper_edit = false;
}
if (null !==(request('paper_publish'))) {
$job->paper_publish = 1;
} else {
$job->paper_publish = false;
}
if (null !==(request('paper_notify'))) {
$job->paper_notify = 1;
} else {
$job->paper_notify = false;
}
if (null !==(request('inventory_see'))) {
$job->inventory_see = 1;
} else {
$job->inventory_see = false;
}
if (null !==(request('inventory_edit'))) {
$job->inventory_edit = 1;
} else {
$job->inventory_edit = false;
}
if (null !==(request('inventory_notify'))) {
$job->inventory_notify = 1;
} else {
$job->inventory_notify = false;
}
if (null !==(request('user_see'))) {
$job->user_see = 1;
} else {
$job->user_see = false;
}
if (null !==(request('user_edit'))) {
$job->user_edit = 1;
} else {
$job->user_edit = false;
}
if (null !==(request('user_notify'))) {
$job->user_notify = 1;
} else {
$job->user_notify = false;
$tpermission = [];
foreach (\App\Permission::all() as $perm)
{
$tkey = $perm->ckey;
$tpermission[$tkey] = $request->$tkey;
}
$job->permissions = json_encode($tpermission);
$job->save();
return redirect('/admin/config/job/'.$job->id);
$job->updateACLRules();
clog('add','success','Poste ajouté avec succès');
return redirect('/admin/config/jobs')->with('success','Poste ajouté avec succès');
}
/**
@@ -162,19 +96,46 @@ class JobController extends Controller
* @param \App\Job $job
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Job $job)
public function update(Request $request, $id)
{
//
$job = Job::find($id);
$job->name = $request->name;
$job->desc = $request->desc;
$tpermission = [];
foreach (\App\Permission::all() as $perm)
{
$tkey = $perm->ckey;
$tpermission[$tkey] = $request->$tkey;
}
$job->permissions = json_encode($tpermission);
$job->save();
$job->updateACLRules();
clog('add','success','Poste modifié avec succès');
return redirect('/admin/config/jobs')->with('success','Poste modifié avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Job $job
* @return \Illuminate\Http\Response
*/
public function destroy(Job $job)
public function destroy(Request $request)
{
//
$job = Job::find($request->id);
foreach (\App\User::all() as $user)
{
if($user->job->id == $job->id)
{
$user->job_id = 1;
$user->save();
}
}
clog('delete','success','Poste supprimé avec succès');
$job->delete();
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\LessonPlan;
use Illuminate\Http\Request;
class LessonPlanController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\LessonPlan $lessonPlan
* @return \Illuminate\Http\Response
*/
public function show(LessonPlan $lessonPlan)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\LessonPlan $lessonPlan
* @return \Illuminate\Http\Response
*/
public function edit(LessonPlan $lessonPlan)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\LessonPlan $lessonPlan
* @return \Illuminate\Http\Response
*/
public function update(Request $request, LessonPlan $lessonPlan)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\LessonPlan $lessonPlan
* @return \Illuminate\Http\Response
*/
public function destroy(LessonPlan $lessonPlan)
{
//
}
}
+4 -2
View File
@@ -25,6 +25,7 @@ class MessageController extends Controller
*/
public function index()
{
clogNav('consulte les messages');
return view('admin.message.index', ['messages' => \App\Message::all()]);
}
@@ -65,8 +66,7 @@ class MessageController extends Controller
$msg->save();
\App\Log::savelog("Publication du message : ".request('msg_title'));
clog('add','success','a ajouté un message',null,'App\Message',$msg->id);
return redirect('/admin/message');
}
@@ -79,6 +79,7 @@ class MessageController extends Controller
public function show($id)
{
\Auth::User()->seenMessage($id);
clog('see','success','a consulté un message',null,'App\Message',$id);
return view('admin.message.show', ['message' => Message::find($id)]);
}
@@ -118,5 +119,6 @@ class MessageController extends Controller
$msg = Message::find($id);
$msg->delete();
clog('delete','success','a supprimé un message',null,'App\Message',$id);
}
}
+59 -10
View File
@@ -14,7 +14,13 @@ class NewsController extends Controller
*/
public function index()
{
return view('public.allnews',['news' => \App\News::paginate(9)]);
return view('public.allnews',['news' => News::allWithWeeklyMsg()->where('publish','=','1')->sortByDesc('updated_at')->paginate(9)]);
}
public function indexAdmin()
{
clogNav('a consulté les nouvelles');
return view('admin.news.index',['news' => News::allWithWeeklyMsg()->sortByDesc('updated_at')->paginate(9)]);
}
/**
@@ -24,7 +30,7 @@ class NewsController extends Controller
*/
public function create()
{
//
return view('admin.news.create');
}
/**
@@ -35,7 +41,24 @@ class NewsController extends Controller
*/
public function store(Request $request)
{
//
$n = new News();
$n->title = $request->title;
$n->body = $request->body;
if ($request->publish == "1")
{
$n->publish = 1;
}
else
{
$n->publish = 0;
}
$n->user_id = \Auth::user()->id;
$n->save();
clog('add','success','a ajouté une nouvelle',null,'App\News',$n->id);
return redirect('/admin/news')->with('success','Nouvelle ajouté avec succès');
}
/**
@@ -46,7 +69,14 @@ class NewsController extends Controller
*/
public function show($id)
{
return view('public.news', ['new' => \App\News::find($id)]);
if (\request('type') == 'msg')
{
return view('public.news', ['new' => \App\News::getWeeklyMsg(\App\Event::find($id))]);
}
else
{
return view('public.news', ['new' => \App\News::find($id)]);
}
}
/**
@@ -55,9 +85,9 @@ class NewsController extends Controller
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
public function edit(News $news)
public function edit($id)
{
//
return view('admin.news.update',['news' => News::find($id)]);
}
/**
@@ -67,9 +97,25 @@ class NewsController extends Controller
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
public function update(Request $request, News $news)
public function update(Request $request, $id)
{
//
$n = News::find($id);
$n->title = $request->title;
$n->body = $request->body;
if ($request->publish == "1")
{
$n->publish = 1;
}
else
{
$n->publish = 0;
}
$n->user_id = \Auth::user()->id;
$n->save();
clog('edit','success','a modifié une nouvelle',null,'App\News',$id);
return redirect('/admin/news')->with('success','Nouvelle modifié avec succès');
}
/**
@@ -78,8 +124,11 @@ class NewsController extends Controller
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
public function destroy(News $news)
public function destroy()
{
//
$news = News::find(request('id'));
$news->delete();
clog('delete','success','a supprimé une nouvelle',null,'App\News',$id);
}
}
@@ -0,0 +1,27 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Notifications\DatabaseNotification;
class NotificationController extends Controller
{
public function markAsRead($id)
{
$n = DatabaseNotification::find($id);
$n->read_at = date('Y-m-d h:i:s');
$n->save();
}
public function markAllAsRead()
{
$notifications = \Auth::user()->unreadNotifications;
foreach ($notifications as $n)
{
$n->read_at = date('Y-m-d h:i:s');
$n->save();
}
return $notifications;
}
}
+320
View File
@@ -0,0 +1,320 @@
<?php
namespace App\Http\Controllers;
use App\OCOM;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Routing\Redirector;
use function GuzzleHttp\json_encode;
use function GuzzleHttp\Psr7\str;
class OCOMController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function index()
{
OCOM::wasUpdateGivenAll();
return view('admin.ocom.index',['ocoms' => OCOM::all()]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.ocom.add');
}
public function generate()
{
$file = fopen(\request()->file('file'),'r');
$data = fread($file,filesize(\request()->file('file')));
fclose($file);
$data = str_replace(["\r","\n"],'',$data);
// Detection et nettoyage des ORENs
preg_match_all('/[MX\d][X\d]\d+,[^,]+/',$data,$matches_orens);
foreach ($matches_orens[0] as $key => $oren) {
$oren = str_replace('"','',$oren);
$matches_orens[0][$key] = $oren;
}
$orens_pass_2 = collect($matches_orens[0])->unique();
$orens = [];
foreach ($orens_pass_2 as $oren)
{
$foo = explode(',',$oren);
$orens[$foo[0]] = $foo[1];
}
// Detection et nettoyage des OCOMs
preg_match_all('/[MC][X\d]\d{2}\.\d{2}\w?,[^,]+,\d/',$data,$matches_ocom);
foreach ($matches_ocom[0] as $key => $ocom) {
$ocom = str_replace('"','',$ocom);
$matches_ocom[0][$key] = $ocom;
}
$ocoms_pass_2 = collect($matches_ocom[0])->unique();
foreach ($ocoms_pass_2 as $ocom_pass_2)
{
$foo = explode(',',$ocom_pass_2);
if (OCOM::findByOCOM($foo[0]) == null)
{
preg_match('/[X\d]\d{2}/',$ocom_pass_2,$matches);
$oren = $matches[0];
$complementary = false;
if ($foo[0][0] == "C")
{
$complementary = true;
}
$nocom = new OCOM();
$nocom->ocom = $foo[0];
$nocom->objectif_competence = $foo[1];
$nocom->nbPeriode = $foo[2];
$nocom->objectif_rendement = $orens[$oren];
$nocom->oren = $oren;
$nocom->complementary = $complementary;
$nocom->course_id = '';
$nocom->save();
}
}
$this->updateOCOMDB();
return redirect('/admin/ocom')->with('success','Base de donnée des cours générée avec succès!');
}
public function g()
{
OCOM::truncate();
$matches = [];
$orens = [];
preg_match_all('/[X\d]\d\d,[^,]*/',\request('text'),$matches);
foreach ($matches[0] as $match)
{
$match = str_replace('"',"",$match);
$match = trim(preg_replace('/\s\s+/', ' ', $match));
$oren = "";
preg_match('/[X\d]\d\d/',$match,$oren);
$value = preg_replace('/[X\d]\d\d,/','',$match);
if($value != "")
{
$orens[$oren[0]] = preg_replace('/[X\d]\d\d,/','',$match);
}
}
preg_match_all('/[MC]\S\d\d.\d\d[A-Z]?,[^,]*,\d/',$text,$matches);
foreach ($matches[0] as $match)
{
$newocom = new OCOM();
$match = str_replace('"',"",$match);
$ocom = "";
preg_match('/[MC]\S\d\d.\d\d[A-Z]?/',$match,$ocom);
if(!OCOM::where('ocom',$ocom)->first())
{
$oren = "";
preg_match('/[X\d]\d\d/',$ocom[0],$oren);
$obj_competence = str_replace($ocom[0].",","",$match);
$obj_competence = trim(preg_replace('/\s\s+/', ' ', $obj_competence));
$obj_competence = trim($obj_competence,"\\");
$nbPeriode = preg_replace('/[MC]\S\d\d.\d\d[A-Z]?,[^,]*,/','',$match);
$newocom->nbPeriode = $nbPeriode;
$obj_competence = str_replace(",".$nbPeriode,'',$obj_competence);
$newocom->ocom = $ocom[0];
$newocom->oren = $oren[0];
if ($newocom->ocom[0] == 'C' || $newocom->ocom[0] == 'c')
{
$newocom->complementary = true;
}
else
{
$newocom->complementary = false;
}
$newocom->course_id = '';
$newocom->objectif_competence = $obj_competence;
$newocom->objectif_rendement = $orens[$oren[0]];
$newocom->objectif_rendement = trim($newocom->objectif_rendement,"\\");
$newocom->save();
}
}
return redirect('/admin/ocom')->with('success','Base de donnée des cours générée avec succès!');
}
public function showgenerate()
{
return view('admin.ocom.generate');
}
public function updateOCOMDB()
{
$ocoms = OCOM::all();
$from = strtotime(\App\Config::getData('instruction_year_begin'));
$to = strtotime(\App\Config::getData('instruction_year_end'));
$allEvent = \App\Event::all();
$events = collect();
foreach ($allEvent as $e)
{
if ($e->use_schedule == 1)
{
if (strtotime($e->date_begin) >= $from)
{
if (strtotime($e->date_begin) <= $to)
{
$events->push($e);
foreach ($e->courses as $c)
{
$r = $ocoms->where('ocom',$c->ocom)->first();
if ($r != null)
{
$r->saveCourse($c);
}
}
}
}
}
}
foreach ($ocoms as $o)
{
$o->save();
}
}
/**
* Store a newly created resource in storage.
*
* @param Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
$ocom = new OCOM();
$ocom->ocom = $request->ocom;
$ocom->objectif_competence = $request->objectif_competence;
$ocom->nbPeriode = $request->nbPeriode;
$ocom->objectif_rendement = $request->objectif_rendement;
$ocom->oren = $request->oren;
if ($ocom->ocom[0] == 'C' || $ocom->ocom[0] == 'c')
{
$ocom->complementary = true;
}
else
{
$ocom->complementary = false;
}
$ocom->course_id = "";
$ocom->save();
clog('add','success','a ajouter un ocom',\Auth::User()->id);
return redirect('/admin/ocom/'.$ocom->id);
}
/**
* Display the specified resource.
*
* @param $OCOM
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
public function show($OCOM)
{
return view('admin.ocom.show',['ocom' => OCOM::find($OCOM)]);
}
/**
* Show the form for editing the specified resource.
*
* @param $id
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.ocom.edit',['ocom' => OCOM::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param Request $request
* @param $id
* @return RedirectResponse|Redirector
*/
public function update(Request $request,$id)
{
$ocom = OCOM::find($id);
$ocom->ocom = $request->ocom;
$ocom->objectif_competence = $request->objectif_competence;
$ocom->nbPeriode = $request->nbPeriode;
$ocom->objectif_rendement = $request->objectif_rendement;
$ocom->oren = $request->oren;
if ($ocom->ocom[0] == 'C' || $ocom->ocom[0] == 'c')
{
$ocom->complementary = true;
}
else
{
$ocom->complementary = false;
}
$ocom->save();
clog('edit','success','a modifié un ocom',\Auth::User()->id);
return redirect('/admin/ocom/'.$id);
}
/**
* Remove the specified resource from storage.
*
* @param OCOM $oCOM
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
OCOM::find($id)->delete();
}
public function jsonList()
{
$ocoms = OCOM::all();
$name = [];
foreach ($ocoms as $ocom) {
array_push($name, $ocom->ocom);
}
return json_encode($name);
}
public function getName(string $ocom)
{
$foo = OCOM::all()->where('ocom','=',$ocom)->first();
if($foo != null)
{
return $foo->objectif_competence;
}
else
{
return null;
}
}
}
@@ -0,0 +1,85 @@
<?php
namespace App\Http\Controllers;
use App\Permission;
use Illuminate\Http\Request;
class PermissionController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Permission $permission
* @return \Illuminate\Http\Response
*/
public function show(Permission $permission)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Permission $permission
* @return \Illuminate\Http\Response
*/
public function edit(Permission $permission)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Permission $permission
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Permission $permission)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Permission $permission
* @return \Illuminate\Http\Response
*/
public function destroy(Permission $permission)
{
//
}
}
+28 -6
View File
@@ -19,6 +19,7 @@ class PictureController extends Controller
public function indexAdmin()
{
clogNav('consulte les images');
return view('admin.picture.index',['pictures' => \App\Picture::paginate(\App\Config::getData('text_public_picture_nb'))]);
}
/**
@@ -42,13 +43,19 @@ class PictureController extends Controller
$pic = new Picture();
$pic->title = request('title');
$pic->url = request('url');
$pic->url = "";
$pic->desc = request('desc');
$pic->pictureable_id = 0;
$pic->pictureable_type = "";
$pic->save();
$filename = $pic->title.'-'.$pic->id.'.'.\request()->file('file')->getClientOriginalExtension();
\Storage::putFileAs('Publique/Image',\request()->file('file'),$filename);
$pic->url = '/api/files/Publique/Image/'.$filename;
$pic->save();
clog('add','success','a ajouté une image',null,'App\Picture',$pic->id);
return redirect('/admin/picture')->with('success','Image ajoutée avec succès');
}
@@ -61,6 +68,7 @@ class PictureController extends Controller
*/
public function show($id)
{
clog('see','success','a consulté une image',null,'App\Picture',$id);
return view('public.picture',['picture' => \App\Picture::find($id)]);
}
@@ -85,14 +93,27 @@ class PictureController extends Controller
public function update($id)
{
$pic = Picture::find($id);
if (\request()->hasFile('file'))
{
\Storage::delete(str_replace('/api/files/','',$pic->url));
$filename = \request('title').'-'.$pic->id.'.'.\request()->file('file')->getClientOriginalExtension();
\Storage::putFileAs('Publique/Image',\request()->file('file'),$filename);
$pic->url = '/api/files/Publique/Image/'.$filename;
}
$pic->title = request('title');
$pic->url = request('url');
$pic->desc = request('desc');
$pic->save();
return redirect('/admin/picture')->with('success','Image sauvegarder avec succès');
clog('edit','success','a modifié une image',null,'App\Picture',$id);
if ($pic->pictureable_type == "App\ComplementaryActivity")
{
return redirect('admin/article/activity/picture/'.$pic->pictureable->id)->with('success','Image sauvegarder avec succès');
}
else
{
return redirect('/admin/picture')->with('success','Image sauvegarder avec succès');
}
}
/**
@@ -104,7 +125,8 @@ class PictureController extends Controller
public function destroy($id)
{
$pic = Picture::find($id);
\Storage::delete(str_replace('/api/files/','',$pic->url));
$pic->delete();
clog('delete','success','a supprimé une image',null,'App\Picture',$id);
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ProfilController extends Controller
{
public function courses()
{
$mode = 'future';
if (\request('all'))
{
$courses = \App\Course::allForAuthUser();
$mode = 'all';
}
else
{
$courses = \App\Course::allFutureForAuthUser();
}
return view('admin.user.profil.courses',['courses' => $courses,'mode' => $mode]);
}
}
+2 -1
View File
@@ -2,6 +2,7 @@
namespace App\Http\Controllers;
use App\News;
use Illuminate\Http\Request;
class PublicController extends Controller
@@ -14,7 +15,7 @@ class PublicController extends Controller
public function index()
{
return view('public.index',[
'news' => \App\News::all()->sortByDesc('created_at')->take(3),
'news' => \App\News::allWithWeeklyMsg()->where('publish','=','1')->sortByDesc('created_at')->take(3),
'activities' => \App\ComplementaryActivity::all()->where('is_promoted','1'),
'pictures' => \App\Picture::all()->sortByDesc('created_at')->take(\App\Config::getData('nb_activity_public'))
]);
+58 -13
View File
@@ -14,7 +14,7 @@ class RankController extends Controller
*/
public function index()
{
//
return view('admin.configs.ranks.index',['ranks' => Rank::all()]);
}
/**
@@ -24,7 +24,7 @@ class RankController extends Controller
*/
public function create()
{
//
return view('admin.configs.ranks.add');
}
/**
@@ -35,7 +35,27 @@ class RankController extends Controller
*/
public function store(Request $request)
{
//
$r = new Rank();
$r->name = $request->name;
$r->desc = $request->desc;
$r->acces_level = 1;
$tpermission = [];
foreach (\App\Permission::all() as $perm)
{
$tkey = $perm->ckey;
$tpermission[$tkey] = $request->$tkey;
}
$r->permissions = json_encode($tpermission);
$r->save();
$r->updateACLRules();
clog('add','success','Grade ajouté avec succès');
return redirect('/admin/config/ranks')->with('success','Grade ajouté avec succès');
}
/**
@@ -44,9 +64,9 @@ class RankController extends Controller
* @param \App\Rank $rank
* @return \Illuminate\Http\Response
*/
public function show(Rank $rank)
public function show($rank)
{
//
return view('admin.configs.ranks.show',['rank' => Rank::find($rank)]);
}
/**
@@ -57,7 +77,7 @@ class RankController extends Controller
*/
public function edit(Rank $rank)
{
//
}
/**
@@ -67,19 +87,44 @@ class RankController extends Controller
* @param \App\Rank $rank
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Rank $rank)
public function update(Request $request, $rank)
{
//
$r = Rank::find($rank);
$r->name = $request->name;
$r->desc = $request->desc;
$tpermission = [];
foreach (\App\Permission::all() as $perm)
{
$tkey = $perm->ckey;
$tpermission[$tkey] = $request->$tkey;
}
$r->permissions = json_encode($tpermission);
$r->save();
$r->updateACLRules();
clog('edit','success','Grade modifié avec succès');
return redirect('/admin/config/ranks')->with('success','Grade modifié avec succès');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Rank $rank
* @return \Illuminate\Http\Response
*/
public function destroy(Rank $rank)
public function destroy(Request $request)
{
//
$rank = Rank::find($request->id);
foreach (\App\User::all() as $user)
{
if($user->rank->id == $rank->id)
{
$user->rank_id = 1;
$user->save();
}
}
clog('delete','success','Grade supprimé avec succès');
$rank->delete();
}
}
+117 -49
View File
@@ -11,49 +11,21 @@ class ScheduleController extends Controller
{
public function index()
{
return view('admin.configs.schedule',['configs' => \App\Config::all()]);
return view('admin.configs.schedule',['configs' => \App\Config::all(),'events_type' => \App\EventType::all()]);
}
public function update()
public function update(Request $request)
{
$configs = ['admin_periode_nb'];
$instruction_year_begin = \App\Config::find('instruction_year_begin');
$instruction_year_end = \App\Config::find('instruction_year_end');
foreach ($configs as $config) {
$c = \App\Config::all()->where('name',$config)->first();
$c->data = [request($config)];
$c->save();
}
$instruction_year_begin->data = [date('Y-m-d',strtotime($request->instruction_year_begin))];
$instruction_year_end->data = [date('Y-m-d',strtotime($request->instruction_year_end))];
$new_admin_periode_begin = [];
$new_admin_periode_end = [];
for ($i=1; $i <= request('admin_periode_nb'); $i++) {
if(request('admin_periode_begin_'.$i))
{
$new_admin_periode_begin[$i] = request('admin_periode_begin_'.$i);
}
else
{
$new_admin_periode_begin[$i] = "00:00";
}
if(request('admin_periode_end_'.$i))
{
$new_admin_periode_end[$i] = request('admin_periode_end_'.$i);
}
else
{
$new_admin_periode_end[$i] = "00:00";
}
}
$instruction_year_begin->save();
$instruction_year_end->save();
$temp = \App\Config::all()->where('name','admin_periode_begin')->first();
$temp->data = $new_admin_periode_begin;
$temp->save();
$temp = \App\Config::all()->where('name','admin_periode_end')->first();
$temp->data = $new_admin_periode_end;
$temp->save();
return redirect('/admin/config/schedule')->with('success','Modification sauvegarder avec succès !');
return redirect('/admin/config/instruction')->with('success','Modification sauvegarder avec succès !');
}
public function apiIndex()
@@ -74,11 +46,28 @@ class ScheduleController extends Controller
}
foreach ($allevents as $event) {
if(strtotime($event->date_begin) >= $start && strtotime($event->date_begin) <= $end) {
array_push($events,$event);
if ($event->hidden == 1) {
if (\Auth::check())
{
if (\Auth::user()->p('instruction_see_hidden_event') == 1)
{
if(strtotime($event->date_begin) >= $start && strtotime($event->date_begin) <= $end) {
array_push($events,$event);
}
else if(strtotime($event->date_end) >= $start && strtotime($event->date_end) <= $end) {
array_push($events,$event);
}
}
}
}
else if(strtotime($event->date_end) >= $start && strtotime($event->date_end) <= $end) {
array_push($events,$event);
else
{
if(strtotime($event->date_begin) >= $start && strtotime($event->date_begin) <= $end) {
array_push($events,$event);
}
else if(strtotime($event->date_end) >= $start && strtotime($event->date_end) <= $end) {
array_push($events,$event);
}
}
}
@@ -89,8 +78,8 @@ class ScheduleController extends Controller
$event = [
'title' => $schedule->data['event_name'],
'start' => $schedule->date.'T'.$schedule->data['event_begin_time'],
'end' => $schedule->date.'T'.$schedule->data['event_end_time'],
'start' => date('c',strtotime($schedule->date.'T'.$schedule->data['event_begin_time'])),
'end' => date('c',strtotime($schedule->date.'T'.$schedule->data['event_end_time'])),
'color' => $color,
'source' => 'schedule',
'id' => $schedule->id
@@ -100,16 +89,41 @@ class ScheduleController extends Controller
foreach ($events as $event) {
$color = $this->getColor($event->type);
if($event->calendar_color == null)
{
$color = $this->getColor($event->type);
}
else
{
$color = $event->calendar_color;
}
if($event->calendar_icon == null)
{
$icon = "";
}
else
{
$icon = $event->calendar_icon;
}
$name = $event->name;
if ($event->hidden == 1) {
$color = $this->hex2rgba($color,0.5);
$icon = 'fas fa-eye-slash';
$name = 'Caché - '.$name;
}
$myevent = [
'title' => $event->name,
'title' => $name,
'start' => date('c',strtotime($event->date_begin)),
'end' => date('c',strtotime($event->date_end)),
'color' => $color,
'extraParams' => [
'db_type' => 'event'],
'id' => $event->id
'id' => $event->id,
'icon' => $icon
];
array_push($jsonevents,$myevent);
}
@@ -117,6 +131,45 @@ class ScheduleController extends Controller
return json_encode($jsonevents);
}
function hex2rgba($color, $opacity = false) {
$default = 'rgb(0,0,0)';
//Return default if no color provided
if(empty($color))
return $default;
//Sanitize $color if "#" is provided
if ($color[0] == '#' ) {
$color = substr( $color, 1 );
}
//Check if color has 6 or 3 characters and get values
if (strlen($color) == 6) {
$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
} elseif ( strlen( $color ) == 3 ) {
$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
} else {
return $default;
}
//Convert hexadec to rgb
$rgb = array_map('hexdec', $hex);
//Check if opacity is set(rgba or rgb)
if($opacity){
if(abs($opacity) > 1)
$opacity = 1.0;
$output = 'rgba('.implode(",",$rgb).','.$opacity.')';
} else {
$output = 'rgb('.implode(",",$rgb).')';
}
//Return rgb(a) color string
return $output;
}
public function loadModal($id,$db_type)
{
if($db_type == "event")
@@ -196,7 +249,8 @@ class ScheduleController extends Controller
public function printtopdf($id)
{
$event = \App\Event::find($id);
$pdf = PDF::loadView('admin.schedule.modal.show',['event' => $event]);
//return view('admin.schedule.print.event',['event' => $event]);
$pdf = PDF::loadView('admin.schedule.print.event',['event' => $event])->setPaper('8.5x11', 'landscape');
return $pdf->download($event->date_begin.'.pdf');
}
@@ -212,17 +266,31 @@ class ScheduleController extends Controller
$activity = \App\ComplementaryActivity::find($type);
$begin_time = $date." ".$activity->begin_time;
$end_time = $date." ".$activity->end_time;
$msg_time = Date('c',strtotime($begin_time.'-4day'));
return view('admin.schedule.modal.add',[
'activity' => \App\ComplementaryActivity::find($type),
'begin_time' => $begin_time,
'end_time' => $end_time
'end_time' => $end_time,
'msg_time' => $msg_time
]);
}
public function delete($id)
{
$event = \App\Event::find($id);
if ($event->hidden == 1)
{
if (\Auth::user()->p('instruction_see_hidden_event') != 1)
{
abort(403);
}
}
foreach ($event->courses as $course)
{
$course->delete();
}
$event->delete();
}
}
@@ -0,0 +1,66 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ScheduleEditorController extends Controller
{
public function getCourse(int $id = null)
{
return view('admin.schedule.editor.course');
}
public function getCourseEmpty(int $niveau,int $periode,$event_type = 1)
{
$eventType = \App\EventType::findOrFail($event_type);
$data = $eventType->getScheduleModelData($niveau,$periode);
$ocom = $data['ocom'];
$name = $data['name'];
$location = $data['location'];
$instructor = $data['instructor'];
$desc = $data['desc'];
return view('admin.schedule.editor.course',[
'periode' => $periode,
'niveau' => $niveau,
'ocom' => $ocom,
'name' => $name,
'location' => $location,
'instructor' => $instructor,
'desc' => $desc]);
}
public function getTemplate(int $id)
{
return view('admin.schedule.editor.template',["eventType" => \App\EventType::find($id)]);
}
public function getEventTemplate(int $id)
{
$eventType = \App\EventType::find($id);
return json_encode($eventType);
}
public function getEmptyPeriode(int $id)
{
return view('admin.schedule.editor.periode',[
'periode_name' => 'Periode '.$id,
'periode_begin_time' => '00:00',
'periode_end_time' => '00:00',
'periode_id' => $id,
'nbLevel' => request('nblevel')
]);
}
public function getEmptyLevel(int $id)
{
return view('admin.schedule.editor.level',['periode_id' => \request('nbPeriode'),'level_id' => $id]);
}
public function getLevelHeader(int $id)
{
return view('admin.schedule.editor.levelHeader',['level_id' => $id,'level_name' => 'Niveau '.$id]);
}
}
+81
View File
@@ -0,0 +1,81 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use phpDocumentor\Reflection\Types\Collection;
class StatsController extends Controller
{
public function instruction()
{
$instructorUTTD = collect();
$coursesTY = \App\Course::allThisYear();
$nbCoursePlanDoneTY = 0;
$nbCoursePlanDoneAndCheckTY = 0;
foreach ($coursesTY as $course)
{
if ($course->lessonPlan)
{
if ($course->lessonPlan->approved)
{
$nbCoursePlanDoneAndCheckTY++;
}
else
{
$nbCoursePlanDoneTY++;
}
}
}
$coursesUTTD = clone $coursesTY;
$nbCoursePlanDoneUTDP = 0;
$nbCoursePlanDoneAndCheckUTDP = 0;
foreach ($coursesUTTD as $key => $course)
{
if (date('c',strtotime($course->event->date_begin)) >= date('c'))
{
$coursesUTTD->forget($key);
}
else
{
$instructorUTTD->push($course->instructor());
if ($course->lessonPlan)
{
if ($course->lessonPlan->approved)
{
$nbCoursePlanDoneAndCheckUTDP++;
}
else
{
$nbCoursePlanDoneUTDP++;
}
}
}
}
$instructorUTTD = $instructorUTTD->unique();
$eventTY = \App\Event::allThisYear();
$eventUTTD = clone $eventTY;
foreach ($eventUTTD as $key => $event)
{
if (date('c',strtotime($event->date_begin)) >= date('c'))
{
$eventUTTD->forget($key);
}
}
return view('admin.stats.instruction',[
'nbCourseThisYear' => count($coursesTY),
'nbInstructorUpToThisDay' => count($instructorUTTD),
'nbEventThisYear' => count($eventTY),
'nbEventUpToThisDay' => count($eventUTTD),
'nbCourseUpToThisDay' => count($coursesUTTD),
'nbCoursePlanDoneUTDP' => $nbCoursePlanDoneUTDP,
'nbCoursePlanDoneTY' => $nbCoursePlanDoneTY,
'nbCoursePlanDoneAndCheckUTDP' => $nbCoursePlanDoneAndCheckUTDP,
'nbCoursePlanDoneAndCheckTY' => $nbCoursePlanDoneAndCheckTY,
'nbCourseInDB' => count(\App\OCOM::all()),
]);
}
}
+45 -14
View File
@@ -49,13 +49,13 @@ class UserController extends Controller
$user->email = request('email');
if (request('adresse') == null) {
$user->adress = "Inconnu";
$user->adress = "";
} else {
$user->adress = request('adresse');
}
if (request('telephone') == null) {
$user->telephone = "Inconnu";
$user->telephone = "";
} else {
$user->telephone = request('telephone');
}
@@ -63,14 +63,14 @@ class UserController extends Controller
$user->sexe = request('sexe');
if (request('age') == null) {
$user->age = "Inconnu";
$user->age = "";
} else {
$user->age = request('age');
}
$user->avatar = rand(1,16);
$user->rank = request('rank');
$user->job = request('job');
$user->rank_id = request('rank');
$user->job_id = request('job');
$user->password = bcrypt(request('psw'));
$user->api_token = str_random(60);
@@ -113,22 +113,22 @@ class UserController extends Controller
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request)
public function update($id)
{
$user = User::where('email', request('email'))->first();
$user = User::find($id);
$user->firstname = request('firstname');
$user->lastname = request('lastname');
$user->email = request('email');
if (request('adresse') == null) {
$user->adress = "Inconnu";
$user->adress = "";
} else {
$user->adress = request('adresse');
}
if (request('telephone') == null) {
$user->telephone = "Inconnu";
$user->telephone = "";
} else {
$user->telephone = request('telephone');
}
@@ -136,13 +136,13 @@ class UserController extends Controller
$user->sexe = request('sexe');
if (request('age') == null) {
$user->age = "Inconnu";
$user->age = "";
} else {
$user->age = request('age');
}
$user->rank = request('rank');
$user->job = request('job');
$user->rank_id = request('rank');
$user->job_id = request('job');
if (request('psw') != null) {
$user->password = bcrypt(request('psw'));
}
@@ -231,7 +231,7 @@ class UserController extends Controller
$user->save();
return back()->with('success', 'Modification enregistré');
return redirect('/admin/profil')->with('success', 'Modification enregistré');
}
public function UserAdress()
@@ -247,7 +247,23 @@ class UserController extends Controller
$user->save();
return back()->with('success', 'Modification enregistré');
return redirect('/admin/profil')->with('success', 'Modification enregistré');
}
public function UserTelephone()
{
return view('admin.user.profil.telephone');
}
public function editUserTelephone()
{
$user = \Auth::user();
$user->telephone = request('telephone');
$user->save();
return redirect('/admin/profil')->with('success', 'Modification enregistré');
}
public function apiList()
@@ -262,4 +278,19 @@ class UserController extends Controller
return json_encode($name);
}
public function showCourses($id)
{
return view('admin.user.courses',['courses' => User::find($id)->courses]);
}
public function showCourse($id,$course_id)
{
return view('admin.user.course',['courses' => User::find($id)->courses]);
}
public function userNotification()
{
return view('admin.user.profil.notifications',['notifications' => \Auth::user()->notifications]);
}
}
+4
View File
@@ -61,5 +61,9 @@ class Kernel extends HttpKernel
'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
'staff' => \App\Http\Middleware\AccesStaff::class,
'admin' => \App\Http\Middleware\AccesAdmin::class,
'perm' => \App\Http\Middleware\CheckPerm::class,
'fileperm' => \App\Http\Middleware\CheckFilePerm::class,
'courseperm' => \App\Http\Middleware\CheckCoursePerm::class,
'firstlogin' => \App\Http\Middleware\FirstLogin::class
];
}
+43
View File
@@ -0,0 +1,43 @@
<?php
namespace App\Http\Middleware;
use Closure;
class CheckCoursePerm
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next,$perm = 'see')
{
$course = \App\Course::findOrFail($request->id);
if (\Auth::user()->id == $course->user_id)
{
if ($perm == 'see' || $perm == 'edit')
{
return $next($request);
}
}
if (\Auth::user()->p('course_'.$perm.'_all') == 1)
{
return $next($request);
}
if (\Auth::user()->p('course_'.$perm) == 1)
{
return $next($request);
}
if ($perm == 'validate_plan')
{
abort(401);
}
clog('navigate','danger','L\'utilisateur n\'est pas autorisé à effectuer cette action',\Auth::user()->id);
return redirect('/admin')->with('error','Vous n\'êtes pas autorisé à effectuer cette action');
}
}
+83
View File
@@ -0,0 +1,83 @@
<?php
namespace App\Http\Middleware;
use App\User;
use Closure;
use \App\GoogleDriveFile;
use \App\Config;
class CheckFilePerm
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next,$type,$permission = 'r')
{
if (GoogleDriveFile::checkConfig() && Config::getData('is_Google_Drive_enabled') == 'true')
{
// Get folder
if (isset($request->folder))
{
$folder = $request->folder;
}
else
{
$folder = $request->d;
}
$dir = GoogleDriveFile::find($folder);
// Check if $folder is root directory or $dir is null
if ($folder == "" || $dir == null)
{
if (\Auth::check())
{
if ($permission == 'r')
{
return $next($request);
}
else
{
if (\Auth::user()->p('file_manage') === 1)
{
return $next($request);
}
}
}
abort(401,'Pas connecter');
}
// Check for specific folder permission
if ($dir != null)
{
if (\Auth::check())
{
if (!$dir->canAuthUser($permission))
{
clog('navigate','danger','Vous n\'avez pas la permission d\'accéder',\Auth::user()->id);
return redirect('/admin')->with('error','Vous n\'avez pas la permission d\'accéder');
}
}
else
{
if (strpos($dir->getPermission('rank.0'),$permission) === false)
{
clog('navigate','danger','Un utilisateur non authentifié tente d\'accéder a un dossier privé','0');
abort(401,'Vous n\'avez pas la permission d\'accéder');
}
}
return $next($request);
}
}
else
{
clog('navigate','danger','Google Drive n\'est pas activé ou les identifiants sont incorrect',\Auth::user()->id);
return redirect('/admin')->with('error','Google Drive n\'est pas activé ou les identifiants sont incorrect');
}
return abort(500,'Wow... Aucune idée comment ce qui viens d\'arriver');
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace App\Http\Middleware;
use Closure;
class CheckPerm
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next,$permission)
{
if (\Auth::user()->p($permission) != 1)
{
clog('navigate','danger','L\'utilisateur n\'est pas autorisé à effectuer cette action',\Auth::user()->id);
return redirect('/admin')->with('error','Vous n\'êtes pas autorisé à effectuer cette action');
}
return $next($request);
}
}
+28
View File
@@ -0,0 +1,28 @@
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class FirstLogin
{
/**
* Handle an incoming request.
*
* @param Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if ($request->isMethod('get'))
{
if (\Auth::user()->use_default_psw == true)
{
return redirect('/admin/setup');
}
}
return $next($request);
}
}
+89
View File
@@ -1,5 +1,10 @@
<?php
use App\Log;
/**
* @return bool
*/
function getStatus()
{
$client = new GuzzleHttp\Client();
@@ -17,3 +22,87 @@ function getStatus()
return $isBroken;
}
/**
* @param string $type
* @param string $result
* @param string $event
* @param int $user_id
* @param null $obj_type
* @param null $obj_id
*/
function clog(string $type,string $result,string $event,$user_id = null,$obj_type = null,$obj_id = null)
{
$log = new Log;
$log->result = $result;
$log->event = $event;
$log->type = $type;
if ($user_id != null)
{
$log->user_id = $user_id;
}
else
{
$log->user_id = \Auth::User()->id;
}
if ($obj_type != null)
{
$log->logable_type = $obj_type;
}
else
{
$log->logable_type = '';
}
if ($obj_id != null)
{
$log->logable_id = $obj_id;
}
else
{
$log->logable_id = 0;
}
$log->save();
}
function clogNav($event)
{
clog('navigate','success',$event);
}
function GetSizeName($octet)
{
// Array contenant les differents unités
$unite = array('octet','ko','mo','go');
if ($octet < 1000) // octet
{
return $octet.' '.$unite[0];
}
else
{
if ($octet < 1000000) // ko
{
$ko = round($octet/1024,2);
return $ko.' '.$unite[1];
}
else // Mo ou Go
{
if ($octet < 1000000000) // Mo
{
$mo = round($octet/(1024*1024),2);
return $mo.' '.$unite[2];
}
else // Go
{
$go = round($octet/(1024*1024*1024),2);
return $go.' '.$unite[3];
}
}
}
}
+118
View File
@@ -3,7 +3,37 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use mysql_xdevapi\Collection;
use function foo\func;
/**
* App\Item
*
* @property int $id
* @property int $category_id
* @property int $quantity
* @property string $name
* @property string $official_number
* @property string $desc
* @property array $metadata
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Booking[] $bookings
* @property-read int|null $bookings_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereCategoryId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereMetadata($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereOfficialNumber($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereQuantity($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Item whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Item extends Model
{
public static function explodeItems($items)
@@ -18,8 +48,96 @@ class Item extends Model
return $col_items;
}
protected $casts = [
'metadata' => 'array',
];
public function bookings()
{
return $this->hasMany('App\Booking');
}
public function category()
{
if (\App\ItemCategory::find($this->category_id) == null)
{
$this->category_id = -1;
$this->save();
$c = new \App\ItemCategory();
$c->name = "[Categorie Supprimé]";
$c->is_training = 0;
$c->is_op_appro = 0;
return $c;
}
return \App\ItemCategory::find($this->category_id);
}
public function available($begin = null,$end = null)
{
if ($begin == null && $end == null)
{
return $this->quantity - $this->booked();
}
else
{
return $this->quantity - $this->booked($begin,$end);
}
}
public function booked($begin_time = null,$end_time = null)
{
$nbBooked = 0;
foreach ($this->bookings as $b)
{
if ($begin_time != null && $end_time != null)
{
$b_begin_time = null;
$b_end_time = null;
if ($b->bookable_type == 'App\Course')
{
$b_begin_time = $b->bookable->event->date_begin;
$b_end_time = $b->bookable->event->date_end;
}
else
{
$b_begin_time = $b->bookable->date_begin;
$b_end_time = $b->bookable->date_end;
}
if (date('U',strtotime($b_begin_time)) <= date('U',strtotime($begin_time)) && date('U',strtotime($b_end_time)) <= date('U',strtotime($end_time)) && date('U',strtotime($b_end_time)) >= date('U',strtotime($begin_time)))
{
$nbBooked = $nbBooked + $b->amount;
}
elseif (date('U',strtotime($b_begin_time)) <= date('U',strtotime($begin_time)) && date('U',strtotime($b_end_time)) >= date('U',strtotime($end_time)))
{
$nbBooked = $nbBooked + $b->amount;
}
elseif (date('U',strtotime($b_begin_time)) >= date('U',strtotime($begin_time)) && date('U',strtotime($b_begin_time)) <= date('U',strtotime($end_time)) && date('U',strtotime($b_end_time)) >= date('U',strtotime($end_time)))
{
$nbBooked = $nbBooked + $b->amount;
}
elseif (date('U',strtotime($b_begin_time)) >= date('U',strtotime($begin_time)) && date('U',strtotime($b_begin_time)) <= date('U',strtotime($end_time)))
{
$nbBooked = $nbBooked + $b->amount;
}
}
else
{
$nbBooked = $nbBooked + $b->amount;
}
}
return $nbBooked;
}
public static function training()
{
$training = collect();
$training = \App\Item::all()->filter(function($value,$key){
return $value->category()->is_training == 1 && $value->category()->is_op_appro != 1;
});
return $training;
}
}
+44
View File
@@ -0,0 +1,44 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\ItemCategory
*
* @property int $id
* @property string $name
* @property string $desc
* @property int $is_training
* @property int $is_op_appro
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Item[] $items
* @property-read int|null $items_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereIsOpAppro($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereIsTraining($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\ItemCategory whereUpdatedAt($value)
* @mixin \Eloquent
*/
class ItemCategory extends Model
{
public function items()
{
return $this->hasMany('App\Item','category_id');
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
}
+47 -3
View File
@@ -4,9 +4,53 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Job
*
* @property int $id
* @property string $name
* @property string $desc
* @property string $permissions
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job wherePermissions($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Job whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Job extends Model
{
protected $casts = [
'perm' => 'array',
];
public function permissions()
{
return collect(json_decode($this->permissions,true));
}
public function permission($permission)
{
foreach ($this->permissions() as $perm => $value)
{
if ($permission == $perm)
{
return $value;
}
}
return 0;
}
public function p($perm)
{
return $this->permission($perm);
}
public function updateACLRules()
{
\App\Permission::updateACLRules($this);
}
}
+40
View File
@@ -0,0 +1,40 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\LessonPlan
*
* @property int $id
* @property int $user_id
* @property string $file
* @property int|null $course_id
* @property string|null $desc
* @property string|null $comment
* @property int $approved
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \App\Course|null $course
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereApproved($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereComment($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereCourseId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereFile($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\LessonPlan whereUserId($value)
* @mixin \Eloquent
*/
class LessonPlan extends Model
{
public function course()
{
return $this->belongsTo('App\Course');
}
}
+18
View File
@@ -4,6 +4,24 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Local
*
* @property int $id
* @property string $name
* @property string $desc
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Local whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Local extends Model
{
//
+64 -8
View File
@@ -4,6 +4,34 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Log
*
* @property int $id
* @property string $type
* @property string $result
* @property string $event
* @property int $user_id
* @property string $logable_type
* @property int $logable_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $logable
* @property-read \App\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereEvent($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereLogableId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereLogableType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereResult($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Log whereUserId($value)
* @mixin \Eloquent
*/
class Log extends Model
{
public function user()
@@ -11,17 +39,45 @@ class Log extends Model
return $this->belongsTo(User::class);
}
public static function saveLog($action, $user = "default")
public function logable()
{
$log = new Log;
return $this->morphTo();
}
if ($user == "default") {
$user = \Auth::User()->id;
public function typeColor()
{
switch ($this->type)
{
case 'add':
return 'success';
break;
case 'edit':
return 'primary';
break;
case 'delete':
return 'warning';
break;
case 'see':
return 'info';
break;
case 'navigate':
return 'secondary';
break;
case 'error':
return 'danger';
break;
}
}
$log->action = $action;
$log->user_id = $user;
$log->save();
public function logableURL()
{
if ($this->logable != null)
{
switch ($this->logable_type)
{
case "App\News":
return "/news/".$this->logable->id;
}
}
}
}
+33
View File
@@ -4,9 +4,42 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Message
*
* @property int $id
* @property string $title
* @property string $body
* @property int $publish
* @property int $private
* @property int $user_id
* @property array $data
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereBody($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message wherePrivate($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message wherePublish($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Message whereUserId($value)
* @mixin \Eloquent
*/
class Message extends Model
{
protected $casts = [
'data' => 'array',
];
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
}
+77
View File
@@ -3,9 +3,43 @@
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Date;
/**
* App\News
*
* @property int $id
* @property string $title
* @property string $body
* @property int $user_id
* @property int $publish
* @property array $tags
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Picture[] $pictures
* @property-read int|null $pictures_count
* @property-read \App\User $user
* @method static \Illuminate\Database\Eloquent\Builder|\App\News newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\News newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\News query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereBody($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News wherePublish($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereTags($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\News whereUserId($value)
* @mixin \Eloquent
*/
class News extends Model
{
protected $casts = [
'tags' => 'array',
];
public function user()
{
return $this->belongsTo('App\User');
@@ -15,4 +49,47 @@ class News extends Model
{
return $this->morphMany('App\Picture', 'pictureable');
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
public static function allWithWeeklyMsg()
{
$news = \App\News::all();
foreach (\App\Event::all() as $event)
{
if($event->use_weekly_msg == 1)
{
if (strtotime($event->weekly_msg_publication_time) <= time())
{
$news->push(self::getWeeklyMsg($event));
}
}
}
return $news;
}
public static function getWeeklyMsg(\App\Event $event)
{
$n = new News();
$n->event_id = $event->id;
$n->title = 'Message de la semaine du '.date('Y-m-d',strtotime($event->date_begin));
$n->body = $event->desc;
$n->user_id = $event->user_id;
$n->publish = 1;
$n->created_at = $event->created_at;
$n->updated_at = $event->updated_at;
$n->tags = ['message de la semaine','Important'];
if ($event->weekly_msg_file != null)
{
$n->files = $event->weekly_msg_file;
}
return $n;
}
}
+17 -1
View File
@@ -3,6 +3,7 @@
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Messages\BroadcastMessage;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
@@ -13,6 +14,7 @@ class Alert extends Notification
protected $fromUser;
protected $myNotification;
private $myUrl;
/**
* Create a new notification instance.
@@ -34,7 +36,7 @@ class Alert extends Notification
*/
public function via($notifiable)
{
return ['database'];
return ['database','broadcast'];
}
/**
@@ -51,4 +53,18 @@ class Alert extends Notification
'url' => $this->myUrl,
];
}
public function toBroadcast($notifiable)
{
return new BroadcastMessage([
'from' => $this->fromUser,
'msg' => $this->myNotification,
'url' => $this->myUrl,
]);
}
public function broadcastType()
{
return 'notification.alert';
}
}
@@ -0,0 +1,65 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class ScheduleNotification extends Notification
{
use Queueable;
protected String $name;
protected String $msg;
protected String $url;
protected String $icon;
/**
* Create a new notification instance.
*
* @param String $name
* @param String $msg
* @param String $url
*/
public function __construct(String $name,String $msg,String $url)
{
$this->name = $name;
$this->msg = $msg;
$this->url = $url;
$this->icon = '<i class="far fa-calendar"></i>';
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['database','broadcast'];
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
'name' => $this->name,
'msg' => $this->msg,
'url' => $this->url,
'icon' => $this->icon
];
}
public function broadcastType()
{
return 'notification.schedule';
}
}
+61
View File
@@ -0,0 +1,61 @@
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class SystemNotification extends Notification
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['mail'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toMail($notifiable)
{
return (new MailMessage)
->line('The introduction to the notification.')
->action('Notification Action', url('/'))
->line('Thank you for using our application!');
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
+126
View File
@@ -0,0 +1,126 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use function GuzzleHttp\Promise\all;
/**
* App\OCOM
*
* @property int $id
* @property string $ocom
* @property string $objectif_competence
* @property string $nbPeriode
* @property string $objectif_rendement
* @property string $oren
* @property int $complementary
* @property string $course_id
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereComplementary($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereCourseId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereNbPeriode($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereObjectifCompetence($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereObjectifRendement($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereOcom($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereOren($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\OCOM whereUpdatedAt($value)
* @mixin \Eloquent
*/
class OCOM extends Model
{
public function courses()
{
$courses_id = explode(',',$this->course_id);
$courses = collect();
foreach ($courses_id as $course_id)
{
$courses->push(\App\Course::find($course_id));
}
return $courses;
}
public function saveCourses($courses)
{
$courses_id = explode(',',$this->course_id);
foreach ($courses as $cours)
{
if ($cours != null){
array_push($courses_id,$cours->id);
}
}
$courses_id = array_unique($courses_id);
$courses_id = array_filter($courses_id);
$this->course_id = implode(',',$courses_id);
$this->save();
}
public function saveCourse($course)
{
$courses_id = explode(',',$this->course_id);
array_push($courses_id,$course->id);
$courses_id = array_unique($courses_id);
$courses_id = array_filter($courses_id);
$this->course_id = implode(',',$courses_id);
$this->save();
}
public function wasGiven()
{
$courses = Course::where('ocom',$this->ocom)->get();
$result = collect();
$from = strtotime(\App\Config::getData('instruction_year_begin'));
$to = strtotime(\App\Config::getData('instruction_year_end'));
foreach ($courses as $course)
{
$event = $course->event;
if (strtotime($event->date_begin) >= $from)
{
if (strtotime($event->date_begin) <= $to)
{
$result->push($course->id);
}
}
}
return $result;
}
public function updateWasGiven()
{
$this->course_id = implode(",",$this->wasGiven()->toArray());
$this->save();
}
public static function wasUpdateGivenAll()
{
$ocoms = OCOM::all();
foreach ($ocoms as $o)
{
$o->updateWasGiven();
}
}
public static function findByOCOM($ocom)
{
return OCOM::where('ocom','=',$ocom)->first();
}
public function getDurationInMin()
{
return $this->nbPeriode * 30;
}
public function niveau()
{
$niveau = -1;
preg_match('/[^0\D]/',$this->oren,$niveau);
return $niveau[0];
}
}
+699
View File
@@ -0,0 +1,699 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
/**
* App\Permission
*
* @method static \Illuminate\Database\Eloquent\Builder|\App\Permission newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Permission newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Permission query()
* @mixin \Eloquent
*/
class Permission extends Model
{
const ACLRULES = [
'files_cadets' => [
'_see' => [
[
'path' => 'Prive/Cadet',
'access' => '1'
],
[
'path' => 'Prive/Cadet/*',
'access' => '1'
]
],
'_edit' => [
[
'path' => 'Prive/Cadet',
'access' => '2'
],
[
'path' => 'Prive/Cadet/*',
'access' => '2'
]
]
],
'files_staff' => [
'_see' => [
[
'path' => 'Prive/Staff',
'access' => '1'
],
[
'path' => 'Prive/Staff/*',
'access' => '1'
]
],
'_edit' => [
[
'path' => 'Prive/Staff',
'access' => '2'
],
[
'path' => 'Prive/Staff/*',
'access' => '2'
]
]
],
'files_etamas' => [
'_see' => [
[
'path' => 'Prive/ETAMAS',
'access' => '1'
],
[
'path' => 'Prive/ETAMAS/*',
'access' => '1'
]
],
'_edit' => [
[
'path' => 'Prive/ETAMAS',
'access' => '2'
],
[
'path' => 'Prive/ETAMAS/*',
'access' => '2'
]
]
],
'files_officier' => [
'_see' => [
[
'path' => 'Prive',
'access' => '1'
],
[
'path' => 'Prive/Officier',
'access' => '1'
],
[
'path' => 'Prive/Officier/*',
'access' => '1'
]
],
'_edit' => [
[
'path' => 'Prive',
'access' => '1'
],
[
'path' => 'Prive/Officier',
'access' => '2'
],
[
'path' => 'Prive/Officier/*',
'access' => '2'
]
]
],
'files_systeme' => [
'_see' => [
[
'path' => 'Systeme',
'access' => '1'
],
[
'path' => 'Systeme/*',
'access' => '1'
]
],
'_edit' => [
// Vide
]
],
'files_instruction' => [
'_see' => [
[
'path' => 'Prive/Staff/Instruction',
'access' => '1'
],
[
'path' => 'Prive/Staff/Instruction/*',
'access' => '1'
]
],
'_edit' => [
// Vide
]
],
'instruction_guide' => [
'_see' => [
[
'path' => 'Prive/Staff/Guide',
'access' => '1'
],
[
'path' => 'Prive/Staff/Guide/*',
'access' => '1'
]
],
'_edit' => [
// Vide
]
],
];
const PERMISSIONS = [
'Nouvelle' => [
'news_see' => [
'ckey' => 'news_see',
'communName' => 'Voir les nouvelles',
'desc' => 'L\'utilisateur peut-il consulter les nouvelles',
'icon' => 'fa-eye',
'valeur' => 0
],
'news_add' => [
'ckey' => 'news_add',
'communName' => 'Ajouter une nouvelles',
'desc' => 'L\'utilisateur peut-il ajouter une nouvelle',
'icon' => 'fa-plus',
'valeur' => 0
],
'news_edit' => [
'ckey' => 'news_edit',
'communName' => 'Modifier une nouvelles',
'desc' => 'L\'utilisateur peut-il modifier une nouvelle',
'icon' => 'fa-edit',
'valeur' => 0
],
'news_delete' => [
'ckey' => 'news_delete',
'communName' => 'Supprimer une nouvelles',
'desc' => 'L\'utilisateur peut-il supprimer une nouvelle',
'icon' => 'fa-close',
'valeur' => 0
]
],
'Inventaire' => [
'inventory_see' => [
'ckey' => 'inventory_see',
'communName' => 'Voir l\'inventaire',
'desc' => 'L\'utilisateur peut-il consulter l\'inventaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'inventory_add' => [
'ckey' => 'inventory_add',
'communName' => 'Ajouter item a l\'inventaire',
'desc' => 'L\'utilisateur peut-il ajouter un item a l\'inventaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'inventory_edit' => [
'ckey' => 'inventory_edit',
'communName' => 'Modifier un item de l\'inventaire',
'desc' => 'L\'utilisateur peut-il modifier un item de l\'inventaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'inventory_delete' => [
'ckey' => 'inventory_delete',
'communName' => 'Supprimer un item de l\'inventaire',
'desc' => 'L\'utilisateur peut-il supprimer un item de l\'inventaire',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Utilisateur' => [
'user_see' => [
'ckey' => 'user_see',
'communName' => 'Voir la liste des utilisateurs',
'desc' => 'L\'utilisateur peut-il consulter la liste des utilisateurs',
'icon' => 'fa-eye',
'valeur' => 0
],
'user_add' => [
'ckey' => 'user_add',
'communName' => 'Ajouter un utilisateur',
'desc' => 'L\'utilisateur peut-il ajouter un autre utilisateur',
'icon' => 'fa-eye',
'valeur' => 0
],
'user_edit' => [
'ckey' => 'user_edit',
'communName' => 'Modifier un utilisateur',
'desc' => 'L\'utilisateur peut-il modifier un autre utilisateur',
'icon' => 'fa-eye',
'valeur' => 0
],
'user_delete' => [
'ckey' => 'user_delete',
'communName' => 'Supprimer un utilisateur',
'desc' => 'L\'utilisateur peut-il supprimer un autre utilisateur',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Configuration' => [
'config_see' => [
'ckey' => 'config_see',
'communName' => 'Voir les configurations',
'desc' => 'L\'utilisateur peut-il consulter les configurations',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit' => [
'ckey' => 'config_edit',
'communName' => 'Modifier les configurations générales',
'desc' => 'L\'utilisateur peut-il modifier les configurations générales',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_instruction' => [
'ckey' => 'config_edit_instruction',
'communName' => 'Modifier les configurations de l\'instruction',
'desc' => 'L\'utilisateur peut-il modifier les configurations de l\'instruction',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_administration' => [
'ckey' => 'config_edit_administration',
'communName' => 'Modifier les configurations de l\'administration',
'desc' => 'L\'utilisateur peut-il modifier les configurations de l\'administration',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_rank' => [
'ckey' => 'config_edit_rank',
'communName' => 'Modifier les configurations des grades',
'desc' => 'L\'utilisateur peut-il modifier les configurations des grades',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_job' => [
'ckey' => 'config_edit_job',
'communName' => 'Modifier les configurations des postes',
'desc' => 'L\'utilisateur peut-il modifier les configurations des postes',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_files' => [
'ckey' => 'config_edit_files',
'communName' => 'Modifier les configurations de fichier',
'desc' => 'L\'utilisateur peut-il modifier les configurations de fichier',
'icon' => 'fa-eye',
'valeur' => 0
],
'config_edit_customization' => [
'ckey' => 'config_edit_customization',
'communName' => 'Modifier les configurations de l\'apparence du site',
'desc' => 'L\'utilisateur peut-il modifier les configurations de l\'apparence du site',
'icon' => 'fa-eye',
'valeur' => 0
]
],
'Statistique' => [
'stats_see' => [
'ckey' => 'stats_see',
'communName' => 'Voir les statistiques',
'desc' => 'L\'utilisateur peut-il consulter les statistiques',
'icon' => 'fa-eye',
'valeur' => 0
]
],
'Instruction' => [
'instruction_guide_see' => [
'ckey' => 'instruction_guide_see',
'communName' => 'Voir les guides pédagogiques et normes de qualifications',
'desc' => 'L\'utilisateur peut-il consulter les guides pédagogiques et normes de qualifications',
'icon' => 'fa-eye',
'valeur' => 0
],
'instruction_db_ocom_see' => [
'ckey' => 'instruction_db_ocom_see',
'communName' => 'Voir la base de donnée de cours',
'desc' => 'L\'utilisateur peut-il consulter la base de donnée des cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'instruction_db_ocom_add' => [
'ckey' => 'instruction_db_ocom_add',
'communName' => 'Ajouter à la base de donnée de cours',
'desc' => 'L\'utilisateur peut-il ajouter à la base de donnée des cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'instruction_db_ocom_edit' => [
'ckey' => 'instruction_db_ocom_edit',
'communName' => 'Modifier la base de donnée de cours',
'desc' => 'L\'utilisateur peut-il modifier la base de donnée des cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'instruction_db_ocom_delete' => [
'ckey' => 'instruction_db_ocom_delete',
'communName' => 'Supprimer de la base de donnée de cours',
'desc' => 'L\'utilisateur peut-il supprimer de la base de donnée des cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'course_see_all' => [
'ckey' => 'course_see_all',
'communName' => 'Voir les cours de tous les utilisateurs',
'desc' => 'L\'utilisateur peut-il voir les cours de tous les utilisateurs',
'icon' => 'fa-eye',
'valeur' => 0
],
'course_comment_officer' => [
'ckey' => 'course_comment_officer',
'communName' => 'Ajouter un commentaire sur n\'importe quel cours',
'desc' => 'L\'utilisateur peut-il ajouter un commentaire sur n\'importe quel cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'course_validate_plan' => [
'ckey' => 'course_validate_plan',
'communName' => 'Valider n\'importe quel plan de cours',
'desc' => 'L\'utilisateur peut-il valider n\'importe quel plan de cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'course_comment_plan_officer' => [
'ckey' => 'course_comment_plan_officer',
'communName' => 'Ajouter un commentaire sur n\'importe quel plan de cours',
'desc' => 'L\'utilisateur peut-il ajouter un commentaire sur n\'importe quel plan de cours',
'icon' => 'fa-eye',
'valeur' => 0
],
'stats_instruction_see' => [
'ckey' => 'stats_instruction_see',
'communName' => 'Voir les statistiques de l\'instruction',
'desc' => 'L\'utilisateur peut-il voir les statistiques de l\'instruction',
'icon' => 'fa-eye',
'valeur' => 0
],
'instruction_see_hidden_event' => [
'ckey' => 'instruction_see_hidden_event',
'communName' => 'Voir les évenements cachés',
'desc' => 'L\'utilisateur peut-il voir les évenements cachés',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Administration' => [
'cadet_list_see' => [
'ckey' => 'cadet_list_see',
'communName' => 'Voir la liste nominative',
'desc' => 'L\'utilisateur peut-il voir la liste nominative',
'icon' => 'fa-eye',
'valeur' => 0
],
'cadet_list_edit' => [
'ckey' => 'cadet_list_edit',
'communName' => 'Modifier la liste nominative',
'desc' => 'L\'utilisateur peut-il modifier la liste nominative',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Horaire' => [
'schedule_see' => [
'ckey' => 'schedule_see',
'communName' => 'Voir l\'horaire',
'desc' => 'L\'utilisateur peut-il consulter l\'horaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'schedule_add' => [
'ckey' => 'schedule_add',
'communName' => 'Ajouter un évènement à l\'horaire',
'desc' => 'L\'utilisateur peut-il ajouter un évènement à l\'horaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'schedule_edit' => [
'ckey' => 'schedule_edit',
'communName' => 'Modifier un évènement à l\'horaire',
'desc' => 'L\'utilisateur peut-il modifier un évènement à l\'horaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'schedule_delete' => [
'ckey' => 'schedule_delete',
'communName' => 'Supprimer un évènement à l\'horaire',
'desc' => 'L\'utilisateur peut-il supprimer un évènement à l\'horaire',
'icon' => 'fa-eye',
'valeur' => 0
]
],
'Articles' => [
'article_see' => [
'ckey' => 'article_see',
'communName' => 'Voir les articles',
'desc' => 'L\'utilisateur peut-il consulter les articles',
'icon' => 'fa-eye',
'valeur' => 0
],
'article_add' => [
'ckey' => 'article_add',
'communName' => 'Ajouter un article',
'desc' => 'L\'utilisateur peut-il ajouter un article',
'icon' => 'fa-eye',
'valeur' => 0
],
'article_edit' => [
'ckey' => 'article_edit',
'communName' => 'Modifier un article',
'desc' => 'L\'utilisateur peut-il modifier un évènement à l\'horaire',
'icon' => 'fa-eye',
'valeur' => 0
],
'article_delete' => [
'ckey' => 'article_delete',
'communName' => 'Supprimer un article',
'desc' => 'L\'utilisateur peut-il supprimer un article',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Photos & Images' => [
'picture_see' => [
'ckey' => 'picture_see',
'communName' => 'Voir les images',
'desc' => 'L\'utilisateur peut-il consulter les images',
'icon' => 'fa-eye',
'valeur' => 0
],
'picture_add' => [
'ckey' => 'picture_add',
'communName' => 'Ajouter une image',
'desc' => 'L\'utilisateur peut-il ajouter une image',
'icon' => 'fa-eye',
'valeur' => 0
],
'picture_edit' => [
'ckey' => 'picture_edit',
'communName' => 'Modifier une image',
'desc' => 'L\'utilisateur peut-il modifier une image',
'icon' => 'fa-eye',
'valeur' => 0
],
'picture_delete' => [
'ckey' => 'picture_delete',
'communName' => 'Supprimer une image',
'desc' => 'L\'utilisateur peut-il supprimer une image',
'icon' => 'fa-eye',
'valeur' => 0
],
],
'Fichiers' => [
'files_cadets_see' => [
'ckey' => 'files_cadets_see',
'communName' => 'Consulter les fichiers des cadets',
'desc' => 'L\'utilisateur peut-il consulter les fichiers des cadets',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_cadets_edit' => [
'ckey' => 'files_cadets_edit',
'communName' => 'Modifier les fichiers des cadets',
'desc' => 'L\'utilisateur peut-il modifier les fichiers des cadets',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_staff_see' => [
'ckey' => 'files_staff_see',
'communName' => 'Consulter les fichiers des staffs',
'desc' => 'L\'utilisateur peut-il consulter les fichiers des staffs',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_staff_edit' => [
'ckey' => 'files_staff_edit',
'communName' => 'Modifier les fichiers des staffs',
'desc' => 'L\'utilisateur peut-il modifier les fichiers des staffs',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_etamas_see' => [
'ckey' => 'files_etamas_see',
'communName' => 'Consulter les fichiers de l\'ETAMAS',
'desc' => 'L\'utilisateur peut-il consulter les fichiers de l\'ETAMAS',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_etamas_edit' => [
'ckey' => 'files_etamas_edit',
'communName' => 'Mo
difier les fichiers de l\'ETAMAS',
'desc' => 'L\'utilisateur peut-il modifier les fichiers de l\'ETAMAS',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_officier_see' => [
'ckey' => 'files_officier_see',
'communName' => 'Consulter les fichiers des officiers',
'desc' => 'L\'utilisateur peut-il consulter les fichiers des officiers',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_officier_edit' => [
'ckey' => 'files_officier_edit',
'communName' => 'Modifier les fichiers des officiers',
'desc' => 'L\'utilisateur peut-il modifier les fichiers des officiers',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_systeme_see' => [
'ckey' => 'files_systeme_see',
'communName' => 'Voir les fichiers systemes',
'desc' => 'L\'utilisateur peut-il consulter les fichiers systemes',
'icon' => 'fa-eye',
'valeur' => 0
],
'files_instruction_see' => [
'ckey' => 'files_instruction_see',
'communName' => 'Voir les fichiers de l\'instruction',
'desc' => 'L\'utilisateur peut-il consulter les fichiers de l\'instruction',
'icon' => 'fa-eye',
'valeur' => 0
],
]
];
public static function updateACLRules($o)
{
$user_id = '0';
$rank_id = '0';
$job_id = '0';
switch ($o->table) {
case 'users':
$user_id = $o->id;
break;
case 'ranks':
$rank_id = $o->id;
break;
case 'jobs':
$job_id = $o->id;
break;
}
foreach (self::ACLRULES as $key => $rule)
{
if ($o->p($key.'_see') == 1) {
if ($o->p($key.'_edit') == 1) {
foreach ($rule['_edit'] as $acl) {
self::updateOrInsertACLRules($user_id,$rank_id,$job_id,'storage',$acl['path'],$acl['access']);
}
} else {
foreach ($rule['_see'] as $acl) {
self::updateOrInsertACLRules($user_id,$rank_id,$job_id,'storage',$acl['path'],$acl['access']);
}
}
} else {
foreach ($rule['_see'] as $acl) {
self::removeACLRules($user_id,$rank_id,$job_id,'storage',$acl['path']);
}
}
}
}
public static function removeACLRules($userId,$rankId,$jobId,$disk,$path)
{
$rules = DB::table('acl_rules')->where([
['user_id',$userId],
['rank_id',$rankId],
['job_id',$jobId],
['disk',$disk],
['path',$path]
]);
$rules->delete();
}
public static function updateOrInsertACLRules($userId,$rankId,$jobId,$disk,$path,$access)
{
DB::table('acl_rules')->updateOrInsert(
['user_id' => $userId, 'rank_id' => $rankId, 'job_id' => $jobId, 'disk' => $disk, 'path' => $path],
['access' => $access]
);
}
public static function addACLRules($userId,$rankId,$jobId,$disk,$path,$access)
{
DB::table('acl_rules')->insertOrIgnore([
'user_id' => $userId,
'rank_id' => $rankId,
'job_id' => $jobId,
'disk' => $disk,
'path' => $path,
'access' => $access
]);
}
public static function all($value = null,$columns = null)
{
$permissions = collect();
foreach (self::PERMISSIONS as $key => $cat)
{
foreach ($cat as $c)
{
$p = new Permission();
$p->ckey = $c['ckey'];
$p->communName = $c['communName'];
$p->desc = $c['desc'];
$p->icon = $c['icon'];
if ($value == null)
{
$p->value = $c['valeur'];
}
else
{
$p->value = $value;
}
$permissions->push($p);
}
}
return $permissions;
}
public static function allToArray()
{
return self::PERMISSIONS;
}
public static function allToJSON()
{
return self::all()->toJson();
}
public static function allToString($value = null)
{
$perm = [];
foreach (Permission::all($value) as $p)
{
$perm[$p->ckey] = $p->value;
}
return \GuzzleHttp\json_encode($perm);
}
}
+32
View File
@@ -4,10 +4,42 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Picture
*
* @property int $id
* @property string $url
* @property string $title
* @property string $desc
* @property int $pictureable_id
* @property string $pictureable_type
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \Illuminate\Database\Eloquent\Model|\Eloquent $pictureable
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture wherePictureableId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture wherePictureableType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereTitle($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereUpdatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Picture whereUrl($value)
* @mixin \Eloquent
*/
class Picture extends Model
{
public function pictureable()
{
return $this->morphTo();
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
}
+34
View File
@@ -4,6 +4,9 @@ namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Collection;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Facades\Blade;
class AppServiceProvider extends ServiceProvider
{
@@ -15,6 +18,37 @@ class AppServiceProvider extends ServiceProvider
public function boot()
{
Schema::defaultStringLength(191);
/**
* Paginate a standard Laravel Collection.
*
* @param int $perPage
* @param int $total
* @param int $page
* @param string $pageName
* @return array
*/
Collection::macro('paginate', function($perPage, $total = null, $page = null, $pageName = 'page') {
$page = $page ?: LengthAwarePaginator::resolveCurrentPage($pageName);
return new LengthAwarePaginator(
$this->forPage($page, $perPage),
$total ?: $this->count(),
$perPage,
$page,
[
'path' => LengthAwarePaginator::resolveCurrentPath(),
'pageName' => $pageName,
]
);
});
Blade::directive('loaderDot', function () {
return '<div class="text-center"><div class="lds-ellipsis"><div></div><div></div><div></div><div></div></div></div>';
});
Blade::directive('loaderRipple', function () {
return '<div class="lds-ripple"><div></div><div></div></div>';
});
}
/**
@@ -0,0 +1,44 @@
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Hypweb\Flysystem\GoogleDrive\GoogleDriveAdapter;
class GoogleDriveServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
//
}
/**
* Bootstrap services.
*
* @return void
*/
public function boot()
{
\Storage::extend('google', function($app, $config) {
$client = new \Google_Client();
$client->setClientId(\Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_ID')));
$client->setClientSecret(\Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_CLIENT_SECRET')));
$client->refreshToken(\Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_REFRESH_TOKEN')));
$service = new \Google_Service_Drive($client);
$options = [];
if(isset($config['teamDriveId'])) {
$options['teamDriveId'] = $config['teamDriveId'];
}
$adapter = new GoogleDriveAdapter($service, \Crypt::decryptString(\App\Config::getData('GOOGLE_DRIVE_FOLDER_ID')), $options);
return new \League\Flysystem\Filesystem($adapter);
});
}
}
@@ -0,0 +1,71 @@
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Gate;
use Laravel\Telescope\IncomingEntry;
use Laravel\Telescope\Telescope;
use Laravel\Telescope\TelescopeApplicationServiceProvider;
class TelescopeServiceProvider extends TelescopeApplicationServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
// Telescope::night();
$this->hideSensitiveRequestDetails();
Telescope::filter(function (IncomingEntry $entry) {
if ($this->app->environment('local')) {
return true;
}
return $entry->isReportableException() ||
$entry->isFailedRequest() ||
$entry->isFailedJob() ||
$entry->isScheduledTask() ||
$entry->hasMonitoredTag();
});
}
/**
* Prevent sensitive request details from being logged by Telescope.
*
* @return void
*/
protected function hideSensitiveRequestDetails()
{
if ($this->app->environment('local')) {
return;
}
Telescope::hideRequestParameters(['_token']);
Telescope::hideRequestHeaders([
'cookie',
'x-csrf-token',
'x-xsrf-token',
]);
}
/**
* Register the Telescope gate.
*
* This gate determines who can access Telescope in non-local environments.
*
* @return void
*/
protected function gate()
{
Gate::define('viewTelescope', function ($user) {
return in_array($user->email, [
'admin@exvps.ca'
]);
});
}
}
+49 -3
View File
@@ -4,9 +4,55 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Rank
*
* @property int $id
* @property string $name
* @property string $desc
* @property string $acces_level
* @property string $permissions
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereAccesLevel($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereDesc($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank wherePermissions($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Rank whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Rank extends Model
{
protected $casts = [
'perm' => 'array',
];
public function permissions()
{
return collect(json_decode($this->permissions,true));
}
public function permission($permission)
{
foreach ($this->permissions() as $perm => $value)
{
if ($permission == $perm)
{
return $value;
}
}
return 0;
}
public function p($perm)
{
return $this->permission($perm);
}
public function updateACLRules()
{
\App\Permission::updateACLRules($this);
}
}
+32
View File
@@ -5,6 +5,38 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
use App\Item;
/**
* App\Schedule
*
* @property int $id
* @property string $date
* @property string $type
* @property string $n1_p1_item
* @property string $n1_p2_item
* @property string $n2_p1_item
* @property string $n2_p2_item
* @property string $n3_p1_item
* @property string $n3_p2_item
* @property array $data
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereData($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereDate($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN1P1Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN1P2Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN2P1Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN2P2Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN3P1Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereN3P2Item($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereType($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Schedule whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Schedule extends Model
{
protected $casts = [
+72
View File
@@ -0,0 +1,72 @@
<?php
namespace App\Services;
use Alexusmai\LaravelFileManager\Services\ACLService\ACLRepository;
/**
* Class DBACLRepository
*
* @package Alexusmai\LaravelFileManager\Services\ACLService
*/
class DBACLRepository implements ACLRepository
{
/**
* Get user ID
*
* @return mixed
*/
public function getUserID()
{
return \Auth::id();
}
public function getUserRank()
{
return \Auth::user()->rank_id;
}
public function getUserJobs()
{
return \Auth::user()->job_id;
}
/**
* Get ACL rules list for user
*
* @return array
*/
public function getRules(): array
{
$rules = \DB::table('acl_rules')
->where('user_id', $this->getUserID())
->get(['disk', 'path', 'access'])
->map(function ($item) {
return get_object_vars($item);
})
->all();
$rank_rules = \DB::table('acl_rules')
->where('rank_id', $this->getUserRank())
->get(['disk', 'path', 'access'])
->map(function ($item) {
return get_object_vars($item);
})
->all();
$job_rules = \DB::table('acl_rules')
->where('job_id', $this->getUserJobs())
->get(['disk', 'path', 'access'])
->map(function ($item) {
return get_object_vars($item);
})
->all();
$all_rules = \DB::table('acl_rules')
->where('user_id', '=','*')
->get(['disk', 'path', 'access'])
->map(function ($item) {
return get_object_vars($item);
})
->all();
$rules = array_merge($rules,$rank_rules,$job_rules,$all_rules);
return $rules;
}
}
+21
View File
@@ -4,6 +4,27 @@ namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\Task
*
* @property int $id
* @property int $priority
* @property string $body
* @property int $completed
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task incomplete()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task whereBody($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task whereCompleted($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task wherePriority($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Task whereUpdatedAt($value)
* @mixin \Eloquent
*/
class Task extends Model
{
public function scopeIncomplete($query)
+134
View File
@@ -2,9 +2,67 @@
namespace App;
use Carbon\Carbon;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
use phpDocumentor\Reflection\Types\Collection;
/**
* App\User
*
* @property int $id
* @property string $firstname
* @property string $lastname
* @property string $email
* @property string $password
* @property string $rank_id
* @property string $adress
* @property string $telephone
* @property string $age
* @property string $avatar
* @property string $sexe
* @property string $job_id
* @property string $api_token
* @property string|null $remember_token
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Booking[] $bookings
* @property-read int|null $bookings_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Course[] $courses
* @property-read int|null $courses_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Event[] $events
* @property-read int|null $events_count
* @property-read \App\Job $job
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Log[] $logs
* @property-read int|null $logs_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\Message[] $messages
* @property-read int|null $messages_count
* @property-read \Illuminate\Database\Eloquent\Collection|\App\News[] $news
* @property-read int|null $news_count
* @property-read \Illuminate\Notifications\DatabaseNotificationCollection|\Illuminate\Notifications\DatabaseNotification[] $notifications
* @property-read int|null $notifications_count
* @property-read \App\Rank $rank
* @method static \Illuminate\Database\Eloquent\Builder|\App\User newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereAdress($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereAge($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereApiToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereAvatar($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereEmail($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereFirstname($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereJobId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereLastname($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User wherePassword($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereRankId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereRememberToken($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereSexe($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereTelephone($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereUpdatedAt($value)
* @mixin \Eloquent
*/
class User extends Authenticatable
{
use Notifiable;
@@ -27,6 +85,16 @@ class User extends Authenticatable
'password', 'remember_token',
];
public function rank()
{
return $this->belongsTo('App\Rank');
}
public function job()
{
return $this->belongsTo('App\Job');
}
public function logs()
{
return $this->hasMany(Log::class);
@@ -65,6 +133,11 @@ class User extends Authenticatable
return $this->hasMany('App\Course');
}
public function futureCourses()
{
return \App\Course::allFutureForUser($this->id);
}
public function routeNotificationForNexmo($notification)
{
return $this->telephone;
@@ -279,4 +352,65 @@ class User extends Authenticatable
{
return $this->hasMany('App\News');
}
public function permission($perm)
{
if ($this->job->permission($perm) == 0)
{
if ($this->rank->id == 1)
{
return 1;
}
return $this->rank->permission($perm);
}
else
{
return $this->job->permission($perm);
}
}
public function p($perm)
{
return $this->permission($perm);
}
public function getNotificationByDay()
{
return \Auth::user()->notifications->groupBy(function ($val) {
return Carbon::parse($val->created_at)->format('Y-m-d');
});
}
public function getNotificationForUI(int $number = 8)
{
return \Auth::user()->notifications->take($number)->groupBy(function ($val) {
return Carbon::parse($val->created_at)->format('Y-m-d');
});
}
public function checkACLRules($rule)
{
if ($rule->user_id == $this->id || $rule->user_id == '*')
{
return $rule->access;
}
if ($rule->job_id == $this->job_id || $rule->job_id == '*')
{
return $rule->access;
}
if ($rule->rank_id == $this->rank_id || $rule->rank_id == '*')
{
return $rule->access;
}
return -1;
}
public function checkACLRulesVisitor($rule)
{
if ($rule->user_id == '*')
{
return $rule->access;
}
return -1;
}
}
+21 -8
View File
@@ -5,21 +5,33 @@
"license": "MIT",
"type": "project",
"require": {
"php": "^7.1.3",
"php": "^7.4",
"alexusmai/laravel-file-manager": "^2.5",
"barryvdh/laravel-dompdf": "^0.8.4",
"barryvdh/laravel-ide-helper": "v2.6.2",
"barryvdh/laravel-ide-helper": "2.7.0",
"davejamesmiller/laravel-breadcrumbs": "5.3.2",
"facade/ignition": "^2.0",
"fideloper/proxy": "^4.0",
"guzzlehttp/guzzle": "^6.3",
"laravel/framework": "5.6.*",
"laravel/tinker": "^1.0",
"nexmo/client": "^1.4"
"laravel/framework": "^7.0",
"laravel/helpers": "^1.1",
"laravel/nexmo-notification-channel": "^2.2",
"laravel/telescope": "^3.5",
"laravel/tinker": "^2.0",
"laravel/ui": "^2.0",
"league/flysystem-aws-s3-v3": "^1.0",
"nexmo/client": "^2.0",
"pragmarx/version": "^1.2",
"pusher/pusher-php-server": "~4.0"
},
"require-dev": {
"filp/whoops": "^2.0",
"fzaninotto/faker": "^1.4",
"laravel/dusk": "^5.6",
"mockery/mockery": "^1.0",
"nunomaduro/collision": "^2.0",
"phpunit/phpunit": "^7.0"
"nunomaduro/collision": "^4.1",
"phpunit/phpunit": "^8.5",
"staudenmeir/dusk-updater": "^1.1"
},
"autoload": {
"classmap": [
@@ -51,7 +63,8 @@
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
"@php artisan package:discover",
"@php artisan version"
]
},
"config": {
Generated
+5098 -1173
View File
File diff suppressed because it is too large Load Diff
+4 -2
View File
@@ -63,7 +63,7 @@ return [
|
*/
'version' => "3.0.2b",
'version' => "3.2.6.",
/*
|--------------------------------------------------------------------------
@@ -170,9 +170,11 @@ return [
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
// App\Providers\BroadcastServiceProvider::class,
App\Providers\BroadcastServiceProvider::class,
App\Providers\EventServiceProvider::class,
App\Providers\RouteServiceProvider::class,
App\Providers\TelescopeServiceProvider::class,
App\Providers\GoogleDriveServiceProvider::class,
],
+75
View File
@@ -0,0 +1,75 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| View Name
|--------------------------------------------------------------------------
|
| Choose a view to display when Breadcrumbs::render() is called.
| Built in templates are:
|
| - 'breadcrumbs::bootstrap4' - Bootstrap 4
| - 'breadcrumbs::bootstrap3' - Bootstrap 3
| - 'breadcrumbs::bootstrap2' - Bootstrap 2
| - 'breadcrumbs::bulma' - Bulma
| - 'breadcrumbs::foundation6' - Foundation 6
| - 'breadcrumbs::materialize' - Materialize
| - 'breadcrumbs::uikit' - UIkit
| - 'breadcrumbs::json-ld' - JSON-LD Structured Data
|
| Or a custom view, e.g. '_partials/breadcrumbs'.
|
*/
'view' => 'breadcrumbs::bootstrap4',
/*
|--------------------------------------------------------------------------
| Breadcrumbs File(s)
|--------------------------------------------------------------------------
|
| The file(s) where breadcrumbs are defined. e.g.
|
| - base_path('routes/breadcrumbs.php')
| - glob(base_path('breadcrumbs/*.php'))
|
*/
'files' => base_path('routes/breadcrumbs.php'),
/*
|--------------------------------------------------------------------------
| Exceptions
|--------------------------------------------------------------------------
|
| Determine when to throw an exception.
|
*/
// When route-bound breadcrumbs are used but the current route doesn't have a name (UnnamedRouteException)
'unnamed-route-exception' => false,
// When route-bound breadcrumbs are used and the matching breadcrumb doesn't exist (InvalidBreadcrumbException)
'missing-route-bound-breadcrumb-exception' => false,
// When a named breadcrumb is used but doesn't exist (InvalidBreadcrumbException)
'invalid-named-breadcrumb-exception' => true,
/*
|--------------------------------------------------------------------------
| Classes
|--------------------------------------------------------------------------
|
| Subclass the default classes for more advanced customisations.
|
*/
// Manager
'manager-class' => DaveJamesMiller\Breadcrumbs\BreadcrumbsManager::class,
// Generator
'generator-class' => DaveJamesMiller\Breadcrumbs\BreadcrumbsGenerator::class,
];
+168
View File
@@ -0,0 +1,168 @@
<?php
use Alexusmai\LaravelFileManager\Services\ConfigService\DefaultConfigRepository;
use Alexusmai\LaravelFileManager\Services\ACLService\ConfigACLRepository;
return [
/**
* Set Config repository
*
* Default - DefaultConfigRepository get config from this file
*/
'configRepository' => DefaultConfigRepository::class,
/**
* ACL rules repository
*
* Default - ConfigACLRepository (see rules in - aclRules)
*/
'aclRepository' => \App\Services\DBACLRepository::class,
//********* Default configuration for DefaultConfigRepository **************
/**
* LFM Route prefix
* !!! WARNING - if you change it, you should compile frontend with new prefix(baseUrl) !!!
*/
'routePrefix' => 'file-manager',
/**
* List of disk names that you want to use
* (from config/filesystems)
*/
'diskList' => ['storage'],
/**
* Default disk for left manager
*
* null - auto select the first disk in the disk list
*/
'leftDisk' => null,
/**
* Default disk for right manager
*
* null - auto select the first disk in the disk list
*/
'rightDisk' => null,
/**
* Default path for left manager
*
* null - root directory
*/
'leftPath' => null,
/**
* Default path for right manager
*
* null - root directory
*/
'rightPath' => null,
/**
* Image cache ( Intervention Image Cache )
*
* set null, 0 - if you don't need cache (default)
* if you want use cache - set the number of minutes for which the value should be cached
*/
'cache' => null,
/**
* File manager modules configuration
*
* 1 - only one file manager window
* 2 - one file manager window with directories tree module
* 3 - two file manager windows
*/
'windowsConfig' => 2,
/**
* File upload - Max file size in KB
*
* null - no restrictions
*/
'maxUploadFileSize' => null,
/**
* File upload - Allow these file types
*
* [] - no restrictions
*/
'allowFileTypes' => [],
/**
* Show / Hide system files and folders
*/
'hiddenFiles' => true,
/***************************************************************************
* Middleware
*
* Add your middleware name to array -> ['web', 'auth', 'admin']
* !!!! RESTRICT ACCESS FOR NON ADMIN USERS !!!!
*/
'middleware' => ['web','auth'],
/***************************************************************************
* ACL mechanism ON/OFF
*
* default - false(OFF)
*/
'acl' => true,
/**
* Hide files and folders from file-manager if user doesn't have access
*
* ACL access level = 0
*/
'aclHideFromFM' => true,
/**
* ACL strategy
*
* blacklist - Allow everything(access - 2 - r/w) that is not forbidden by the ACL rules list
*
* whitelist - Deny anything(access - 0 - deny), that not allowed by the ACL rules list
*/
'aclStrategy' => 'whitelist',
/**
* ACL Rules cache
*
* null or value in minutes
*/
'aclRulesCache' => null,
//********* Default configuration for DefaultConfigRepository END **********
/***************************************************************************
* ACL rules list - used for default ACL repository (ConfigACLRepository)
*
* 1 it's user ID
* null - for not authenticated user
*
* 'disk' => 'disk-name'
*
* 'path' => 'folder-name'
* 'path' => 'folder1*' - select folder1, folder12, folder1/sub-folder, ...
* 'path' => 'folder2/*' - select folder2/sub-folder,... but not select folder2 !!!
* 'path' => 'folder-name/file-name.jpg'
* 'path' => 'folder-name/*.jpg'
*
* * - wildcard
*
* access: 0 - deny, 1 - read, 2 - read/write
*/
'aclRules' => [
null => [
//['disk' => 'public', 'path' => '/', 'access' => 2],
],
1 => [
//['disk' => 'public', 'path' => 'images/arch*.jpg', 'access' => 2],
//['disk' => 'public', 'path' => 'files/*', 'access' => 1],
],
],
];
+3 -10
View File
@@ -26,7 +26,7 @@ return [
|
*/
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
'cloud' => env('FILESYSTEM_CLOUD', 'storage'),
/*
|--------------------------------------------------------------------------
@@ -48,22 +48,15 @@ return [
'root' => storage_path('app'),
],
'public' => [
'driver' => 'local',
'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage',
'visibility' => 'public',
],
's3' => [
'storage' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
],
],
];
+1 -1
View File
@@ -164,7 +164,7 @@ return [
|
*/
'secure' => env('SESSION_SECURE_COOKIE', false),
'secure' => env('SESSION_SECURE_COOKIE', null),
/*
|--------------------------------------------------------------------------
+164
View File
@@ -0,0 +1,164 @@
<?php
use Laravel\Telescope\Http\Middleware\Authorize;
use Laravel\Telescope\Watchers;
return [
/*
|--------------------------------------------------------------------------
| Telescope Domain
|--------------------------------------------------------------------------
|
| This is the subdomain where Telescope will be accessible from. If the
| setting is null, Telescope will reside under the same domain as the
| application. Otherwise, this value will be used as the subdomain.
|
*/
'domain' => env('TELESCOPE_DOMAIN', null),
/*
|--------------------------------------------------------------------------
| Telescope Path
|--------------------------------------------------------------------------
|
| This is the URI path where Telescope will be accessible from. Feel free
| to change this path to anything you like. Note that the URI will not
| affect the paths of its internal API that aren't exposed to users.
|
*/
'path' => env('TELESCOPE_PATH', 'admin/telescope'),
/*
|--------------------------------------------------------------------------
| Telescope Storage Driver
|--------------------------------------------------------------------------
|
| This configuration options determines the storage driver that will
| be used to store Telescope's data. In addition, you may set any
| custom options as needed by the particular driver you choose.
|
*/
'driver' => env('TELESCOPE_DRIVER', 'database'),
'storage' => [
'database' => [
'connection' => env('DB_CONNECTION', 'mysql'),
'chunk' => 1000,
],
],
/*
|--------------------------------------------------------------------------
| Telescope Master Switch
|--------------------------------------------------------------------------
|
| This option may be used to disable all Telescope watchers regardless
| of their individual configuration, which simply provides a single
| and convenient way to enable or disable Telescope data storage.
|
*/
'enabled' => env('TELESCOPE_ENABLED', false),
/*
|--------------------------------------------------------------------------
| Telescope Route Middleware
|--------------------------------------------------------------------------
|
| These middleware will be assigned to every Telescope route, giving you
| the chance to add your own middleware to this list or change any of
| the existing middleware. Or, you can simply stick with this list.
|
*/
'middleware' => [
'web',
'auth',
Authorize::class,
],
/*
|--------------------------------------------------------------------------
| Ignored Paths & Commands
|--------------------------------------------------------------------------
|
| The following array lists the URI paths and Artisan commands that will
| not be watched by Telescope. In addition to this list, some Laravel
| commands, like migrations and queue commands, are always ignored.
|
*/
'ignore_paths' => [
'nova-api*',
],
'ignore_commands' => [
//
],
/*
|--------------------------------------------------------------------------
| Telescope Watchers
|--------------------------------------------------------------------------
|
| The following array lists the "watchers" that will be registered with
| Telescope. The watchers gather the application's profile data when
| a request or task is executed. Feel free to customize this list.
|
*/
'watchers' => [
Watchers\CacheWatcher::class => env('TELESCOPE_CACHE_WATCHER', true),
Watchers\CommandWatcher::class => [
'enabled' => env('TELESCOPE_COMMAND_WATCHER', true),
'ignore' => [],
],
Watchers\DumpWatcher::class => env('TELESCOPE_DUMP_WATCHER', true),
Watchers\EventWatcher::class => [
'enabled' => env('TELESCOPE_EVENT_WATCHER', true),
'ignore' => [],
],
Watchers\ExceptionWatcher::class => env('TELESCOPE_EXCEPTION_WATCHER', true),
Watchers\JobWatcher::class => env('TELESCOPE_JOB_WATCHER', true),
Watchers\LogWatcher::class => env('TELESCOPE_LOG_WATCHER', true),
Watchers\MailWatcher::class => env('TELESCOPE_MAIL_WATCHER', true),
Watchers\ModelWatcher::class => [
'enabled' => env('TELESCOPE_MODEL_WATCHER', true),
'events' => ['eloquent.*'],
],
Watchers\NotificationWatcher::class => env('TELESCOPE_NOTIFICATION_WATCHER', true),
Watchers\QueryWatcher::class => [
'enabled' => env('TELESCOPE_QUERY_WATCHER', true),
'ignore_packages' => true,
'slow' => 100,
],
Watchers\RedisWatcher::class => env('TELESCOPE_REDIS_WATCHER', true),
Watchers\RequestWatcher::class => [
'enabled' => env('TELESCOPE_REQUEST_WATCHER', true),
'size_limit' => env('TELESCOPE_RESPONSE_SIZE_LIMIT', 64),
],
Watchers\GateWatcher::class => [
'enabled' => env('TELESCOPE_GATE_WATCHER', true),
'ignore_abilities' => [],
'ignore_packages' => true,
],
Watchers\ScheduleWatcher::class => env('TELESCOPE_SCHEDULE_WATCHER', true),
Watchers\ViewWatcher::class => env('TELESCOPE_VIEW_WATCHER', true),
],
];
+59
View File
@@ -0,0 +1,59 @@
mode: increment
blade-directive: version
current:
label: ''
major: 3
minor: 2
patch: 6
prerelease: ''
buildmetadata: ''
commit: '41847'
timestamp:
year: 2020
month: 10
day: 13
hour: 14
minute: 50
second: 31
timezone: America/New_York
commit:
mode: git-local
length: 6
increment-by: 1
git:
from: local
commit:
local: 'git rev-parse --verify HEAD'
remote: 'git ls-remote {$repository}'
branch: refs/heads/master
repository: ''
version:
local: 'git describe'
remote: 'git ls-remote {$repository} | grep tags/ | grep -v {} | cut -d / -f 3 | sort --version-sort | tail -1'
matcher: '/^(?P<label>[v|V]*[er]*[sion]*)[\.|\s]*(?P<major>0|[1-9]\d*)\.(?P<minor>0|[1-9]\d*)\.(?P<patch>0|[1-9]\d*)(?:-(?P<prerelease>(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+(?P<buildmetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/'
timestamp:
local: 'git show -s --format=%ci'
remote: 'git show -s --format=%ci origin/master'
format:
regex:
optional_bracket: '\[(?P<prefix>.*?)(?P<spaces>\s*)(?P<delimiter>\?\=)(?P<optional>.*?)\]'
label: '{$label}'
major: '{$major}'
minor: '{$minor}'
patch: '{$patch}'
prerelease: '{$prerelease}'
buildmetadata: '{$buildmetadata}'
commit: '{$commit}'
version: 'v {$major}.{$minor}.{$patch}'
version-only: 'version {$major}.{$minor}.{$patch}'
full: '{$version-only}[.?={$prerelease}][+?={$buildmetadata}] (commit {$commit})'
compact: 'v{$major}.{$minor}.{$patch}'
timestamp-year: '{$timestamp.year}'
timestamp-month: '{$timestamp.month}'
timestamp-day: '{$timestamp.day}'
timestamp-hour: '{$timestamp.hour}'
timestamp-minute: '{$timestamp.minute}'
timestamp-second: '{$timestamp.second}'
timestamp-timezone: '{$timestamp.timezone}'
timestamp-datetime: '{$timestamp.year}-{$timestamp.month}-{$timestamp.day} {$timestamp.hour}:{$timestamp.minute}:{$timestamp.second}'
timestamp-full: '{$timestamp.year}-{$timestamp.month}-{$timestamp.day} {$timestamp.hour}:{$timestamp.minute}:{$timestamp.second} {$timestamp.timezone}'
@@ -19,29 +19,14 @@ class CreateUsersTable extends Migration
$table->string('lastname');
$table->string('email')->unique();
$table->string('password');
$table->string('rank')->default(1);
$table->string('adress')->default('unknown');
$table->string('telephone')->default('unknown');
$table->string('rank_id')->default(1);
$table->string('adress')->default('');
$table->string('telephone')->default('');
$table->string('age');
$table->string('avatar')->default('1');
$table->string('sexe');
$table->string('job')->default(6);
$table->string('acces_level')->default('unknown');
$table->string('schedule_see')->default('unknown');
$table->string('schedule_edit')->default('unknown');
$table->string('schedule_notify')->default('unknown');
$table->string('message_see')->default('unknown');
$table->string('message_edit')->default('unknown');
$table->string('message_notify')->default('unknown');
$table->string('paper_edit')->default('unknown');
$table->string('paper_publish')->default('unknown');
$table->string('paper_notify')->default('unknown');
$table->string('inventory_see')->default('unknown');
$table->string('inventory_edit')->default('unknown');
$table->string('inventory_notify')->default('unknown');
$table->string('user_see')->default('unknown');
$table->string('user_edit')->default('unknown');
$table->string('user_notify')->default('unknown');
$table->string('job_id')->default(6);
$table->boolean('use_default_psw')->default(true);
$table->string('api_token', 60)->unique()->default(str_shuffle(str_random(60)));
$table->rememberToken();
$table->timestamps();
@@ -15,8 +15,12 @@ class CreateLogsTable extends Migration
{
Schema::create('logs', function (Blueprint $table) {
$table->increments('id');
$table->string('type');
$table->string('result');
$table->text('event');
$table->integer('user_id');
$table->string('action');
$table->string('logable_type');
$table->integer('logable_id');
$table->timestamps();
});
}
@@ -17,22 +17,7 @@ class CreateJobsTable extends Migration
$table->increments('id');
$table->string('name');
$table->text('desc');
$table->text('acces_level');
$table->boolean('schedule_see');
$table->boolean('schedule_edit');
$table->boolean('schedule_notify');
$table->boolean('message_see');
$table->boolean('message_edit');
$table->boolean('message_notify');
$table->boolean('paper_edit');
$table->boolean('paper_publish');
$table->boolean('paper_notify');
$table->boolean('inventory_see');
$table->boolean('inventory_edit');
$table->boolean('inventory_notify');
$table->boolean('user_see');
$table->boolean('user_edit');
$table->boolean('user_notify');
$table->text('permissions');
$table->timestamps();
});
}
@@ -16,22 +16,9 @@ class CreateRanksTable extends Migration
Schema::create('ranks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('desc');
$table->text('acces_level');
$table->boolean('schedule_see');
$table->boolean('schedule_edit');
$table->boolean('schedule_notify');
$table->boolean('message_see');
$table->boolean('message_edit');
$table->boolean('message_notify');
$table->boolean('paper_edit');
$table->boolean('paper_publish');
$table->boolean('paper_notify');
$table->boolean('inventory_see');
$table->boolean('inventory_edit');
$table->boolean('inventory_notify');
$table->boolean('user_see');
$table->boolean('user_edit');
$table->boolean('user_notify');
$table->text('permissions');
$table->timestamps();
});
}
@@ -15,9 +15,12 @@ class CreateItemsTable extends Migration
{
Schema::create('items', function (Blueprint $table) {
$table->increments('id');
$table->integer('category_id');
$table->integer('quantity');
$table->string('name');
$table->string('official_number');
$table->string('desc');
$table->text('metadata');
$table->timestamps();
});
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class MakeAclRulesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('acl_rules', function (Blueprint $table) {
$table->increments('id');
$table->string('user_id')->nullable();
$table->string('rank_id')->nullable();
$table->string('job_id')->nullable();
$table->string('disk');
$table->string('path');
$table->tinyInteger('access');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('acl_rules');
}
}
@@ -19,6 +19,7 @@ class CreateNewsTable extends Migration
$table->text('body');
$table->integer('user_id');
$table->boolean('publish');
$table->string('tags')->default("[]");
$table->timestamps();
});
}
@@ -18,7 +18,7 @@ class CreateComplementaryActivitiesTable extends Migration
$table->string('name');
$table->text('public_body');
$table->text('public_slogan');
$table->string('public_header_picture');
$table->text('public_header_picture');
$table->text('admin_desc');
$table->string('calendar_color')->default('blue');
$table->string('calendar_icon')->default('<i class="fa fa-question-circle"></i>');
@@ -15,7 +15,7 @@ class CreatePicturesTable extends Migration
{
Schema::create('pictures', function (Blueprint $table) {
$table->increments('id');
$table->string('url');
$table->text('url');
$table->string('title');
$table->text('desc');
$table->integer('pictureable_id');
@@ -22,7 +22,16 @@ class CreateEventsTable extends Migration
$table->string('user_id');
$table->string('location');
$table->boolean('is_mandatory');
$table->boolean('use_weekly_msg');
$table->boolean('use_schedule');
$table->text('desc');
$table->text('msg');
$table->string('weekly_msg_file');
$table->text('schedule');
$table->string('calendar_color');
$table->string('calendar_icon');
$table->string('weekly_msg_publication_time')->default('-5day');
$table->boolean('hidden')->default(0);
$table->timestamps();
});
}
@@ -20,9 +20,11 @@ class CreateCoursesTable extends Migration
$table->integer('periode');
$table->integer('level');
$table->string('location');
$table->text('desc');
$table->text('comment');
$table->text('comment_officer');
$table->integer('event_id');
$table->integer('user_id');
$table->string('user_id');
$table->timestamps();
});
}
@@ -0,0 +1,35 @@
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateItemCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('item_categories', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->text('desc');
$table->boolean('is_training');
$table->boolean('is_op_appro');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('item_categories');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateOCOMSTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('o_c_o_m_s', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('ocom');
$table->string('objectif_competence');
$table->string('nbPeriode');
$table->string('objectif_rendement');
$table->string('oren');
$table->boolean('complementary');
$table->string('course_id');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('o_c_o_m_s');
}
}
@@ -0,0 +1,45 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateEventTypesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('event_types', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->text('admin_desc');
$table->string('calendar_color')->default('#FFFFFF');
$table->string('calendar_icon')->default('fa fa-question-circle');
$table->string('begin_time')->default('12:00');
$table->string('end_time')->default('13:00');
$table->string('location')->default('Escadron');
$table->boolean('is_mandatory')->default(false);
$table->boolean('use_weekly_msg')->default(false);
$table->string('weekly_msg_publication_time')->default('-5day');
$table->boolean('use_schedule')->default(false);
$table->text('schedule_model');
$table->boolean('is_promoted')->default(false);
$table->boolean('hidden')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('event_types');
}
}
@@ -0,0 +1,38 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateGoogleDriveFileTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('google_drive_files', function (Blueprint $table) {
$table->string('id');
$table->index('id');
$table->string('type');
$table->string('name');
$table->string('path')->default('');
$table->string('rank_permission');
$table->string('job_permission');
$table->string('user_permission');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('google_drive_files');
}
}
@@ -0,0 +1,37 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateLessonPlansTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('lesson_plans', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('user_id');
$table->string('file');
$table->integer('course_id')->nullable();
$table->text('desc')->nullable();
$table->text('comment')->nullable();
$table->boolean('approved')->default(false);
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('lesson_plans');
}
}

Some files were not shown because too many files have changed in this diff Show More