283 Commits

Author SHA1 Message Date
Mathieu Lagace 1acdb7c951 Add ProcFile 2023-12-04 19:22:22 +00:00
Mathieu Lagace 4d5cf2cdc0 feat: add redirect to drive files 2021-11-20 00:42:48 +00:00
Mathieu Lagace 2b0b8f3411 fix: small bug from Guillaume 2021-11-17 17:30:26 +00:00
Mathieu Lagace ccec089160 fix: added delay to updateCourseName 2021-11-01 16:46:34 +00:00
Mathieu Lagace 26c8cda7aa fix: devcontainer 2021-11-01 16:46:07 +00:00
Mathieu Lagace e95e93d229 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!119
2021-11-01 14:34:31 +00:00
Mathieu Lagace 527155786a fix: fix BD exception in Event.php 2021-09-27 09:30:52 -04:00
Mathieu Lagace f0364413a3 Merge branch 'feat-customPages' into 'dev'
Feat custom pages

See merge request TheGamecraft/c-cms!117
2021-08-30 20:42:06 +00:00
Mathieu Lagace 935b63898c feat added custom pages 2021-08-30 20:37:43 +00: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 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
Mathieu Lagace 7c95145459 Merge branch 'dev' into 'master'
Version 3.2.0

See merge request TheGamecraft/c-cms!44
2019-08-26 19:00:52 +00:00
Mathieu Lagace 52f2d242da Merge branch '3.2.0' into 'dev'
3.2.0

See merge request TheGamecraft/c-cms!43
2019-08-26 18:55:43 +00:00
Mathieu Lagace 615752d61a Version 3.2.0 2019-08-26 14:53:30 -04:00
Mathieu Lagace 54adf4ea22 Version 3.2.0 2019-08-26 14:51:17 -04:00
Mathieu Lagace a630de66e2 Merge branch '3.2.0' into 'dev'
Add picture

See merge request TheGamecraft/c-cms!42
2019-08-26 15:47:09 +00:00
Mathieu Lagace 2b9cd625d6 Add picture 2019-08-26 11:43:36 -04:00
Mathieu Lagace d2a884b0bb Merge branch '3.2.0' into 'dev'
Fix Public View & add General Config

See merge request TheGamecraft/c-cms!41
2019-08-26 14:19:30 +00:00
Mathieu Lagace 1cb85d50ca Fix Public View & add General Config 2019-08-26 10:17:11 -04:00
Mathieu Lagace 82b5ef34bf Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!40
2019-08-23 19:50:27 +00:00
Mathieu Lagace e595c1d7de Merge branch '3.2.0' into 'dev'
Patch for the demo

See merge request TheGamecraft/c-cms!39
2019-08-23 19:43:49 +00:00
Mathieu Lagace db63c4ea4d Patch for the demo 2019-08-23 15:41:43 -04:00
Mathieu Lagace 9a32aa1730 Merge branch '3.2.0' into 'dev'
Disable unfinish Feature

See merge request TheGamecraft/c-cms!38
2019-08-21 17:48:08 +00:00
Mathieu Lagace bfdfcb87cf Disable unfinish Feature 2019-08-21 13:45:41 -04:00
Mathieu Lagace 1b4eecb54d Merge branch '3.2.0' into 'dev'
Bug Fix

See merge request TheGamecraft/c-cms!37
2019-08-21 14:54:47 +00:00
Mathieu Lagace 44efcd8e32 Bug Fix 2019-08-21 10:52:16 -04:00
Mathieu Lagace abf3da8030 Merge branch '3.2.0' into 'dev'
3.2.0

See merge request TheGamecraft/c-cms!36
2019-08-21 14:33:20 +00:00
Mathieu Lagace 1d3f07b7b7 Calendar Edit 2019-08-21 10:30:52 -04:00
Mathieu Lagace 7869a96c81 Test Setup PhpStorm 2019-08-19 10:29:58 -04:00
Mathieu Lagace 3b2937d189 Merge branch '3.2.0' into 'dev'
Big Calendar/Schedule update

See merge request TheGamecraft/c-cms!35
2019-08-18 21:29:20 +00:00
Mathieu Lagace cf5f7effbf Big Calendar/Schedule update 2019-08-18 17:26:49 -04:00
Mathieu Lagace e453c0edcc Merge branch '3.2.0' into 'dev'
Perfect Scrollbar and Issue #79

See merge request TheGamecraft/c-cms!34
2019-08-17 22:48:01 +00:00
Mathieu Lagace 3546298a08 Perfect Scrollbar and Issue #79 2019-08-17 18:46:02 -04:00
Mathieu Lagace d277180e45 Merge branch '3.2.0' into 'dev'
3.2.0

See merge request TheGamecraft/c-cms!33
2019-08-17 22:04:28 +00:00
Mathieu Lagace a63eafb833 Add Calendar in Admin 2019-08-17 18:02:09 -04:00
Mathieu Lagace d4b3b1b47d New Model for Event,Booking and Course 2019-08-17 11:43:52 -04:00
Mathieu Lagace c4d382dbf0 Merge branch '3.2.0' into 'dev'
Edit CI/CD

See merge request TheGamecraft/c-cms!32
2019-08-16 00:25:30 +00:00
Mathieu Lagace b850b38b85 Edit CI/CD 2019-08-15 20:23:34 -04:00
Mathieu Lagace 7d1a208534 Merge branch '3.2.0' into 'dev'
Edit CI/CD

See merge request TheGamecraft/c-cms!31
2019-08-16 00:17:31 +00:00
Mathieu Lagace f1ee7cfeaf Edit CI/CD 2019-08-15 20:15:34 -04:00
Mathieu Lagace ea03d22558 Merge branch '3.2.0' into 'dev'
Edit CI/CD to add Dev

See merge request TheGamecraft/c-cms!30
2019-08-15 23:58:43 +00:00
Mathieu Lagace 45566d373f Edit CI/CD to add Dev 2019-08-15 19:56:40 -04:00
Mathieu Lagace e9fd3407a7 Merge branch '3.2.0' into 'dev'
3.2.0

See merge request TheGamecraft/c-cms!29
2019-08-15 23:50:37 +00:00
Mathieu Lagace 1419032b64 Edit Material Design Dashboard 2019-08-15 19:48:41 -04:00
Mathieu Lagace 9f85296cea Add Material Design for Public and Admin 2019-08-14 15:29:37 -04:00
Mathieu Lagace cb3fdc44e2 MIse a jour Ci/Cd 2019-08-04 19:26:54 -04:00
Mathieu Lagace d57c648d7f Mise a jour CI/CD 2019-08-04 19:19:33 -04:00
Mathieu Lagace c6110b47e8 Mise a jour CI/CD 2019-08-04 19:11:00 -04:00
Mathieu Lagace fd73dc388d Ajout 736 CI/CD 2019-08-04 19:10:08 -04:00
Mathieu Lagace 818a84c3df Mise a jour Envoy 2019-08-04 18:54:03 -04:00
Mathieu Lagace 7364c3494c Mise a jour Envoy 2019-08-04 18:47:46 -04:00
Mathieu Lagace 76c60d512f Edit CI/CD 2019-08-04 17:40:34 -04:00
Mathieu Lagace 54d57c7b13 Add Docker 2019-08-04 17:19:53 -04:00
Mathieu Lagace e679cacb7d Ajout de Envoy 2019-08-04 17:06:43 -04:00
Mathieu Lagace b28b7cdab5 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!28
2019-08-04 21:01:52 +00:00
Mathieu Lagace eee82e3b81 Release 3.1.0 2019-08-04 16:38:03 -04:00
Mathieu Lagace 97a7be702e Ajout des news & pictures & complementary activity 2019-08-04 14:26:14 -04:00
Mathieu Lagace 47128ea6fc test working tree 2019-08-04 10:07:32 -04:00
Dev Distant fdc2772ee2 workflow change 2019-08-04 09:56:40 -04:00
Mathieu Lagace c4f96fbfc4 Update .gitlab-ci.yml 2019-04-05 12:05:11 +00:00
Mathieu Lagace 75a4a0a080 Merge branch 'dev' into 'master'
v3.0.7a

See merge request TheGamecraft/c-cms!27
2019-04-05 12:00:22 +00:00
TheGamecraft f262392672 v3.0.7a 2019-01-31 11:47:01 -05:00
Mathieu Lagace 1679252930 Merge branch 'dev' into 'master'
3.0.7

See merge request TheGamecraft/c-cms!26
2018-12-03 22:22:50 +00:00
TheGamecraft 9dc4d1103f 3.0.7 2018-12-03 17:21:50 -05:00
Mathieu Lagace 07e409a922 Merge branch 'dev' into 'master'
3.0.6i

See merge request TheGamecraft/c-cms!25
2018-12-03 15:52:20 +00:00
TheGamecraft 0fddd138bf 3.0.6i 2018-12-03 10:51:24 -05:00
Mathieu Lagace 8bb9655c9f Merge branch 'dev' into 'master'
ALPHA 3.0.6h

See merge request TheGamecraft/c-cms!24
2018-11-27 22:18:38 +00:00
TheGamecraft f98cd85872 ALPHA 3.0.6h 2018-11-27 17:17:52 -05:00
Mathieu Lagace f6944d7b70 Merge branch 'dev' into 'master'
ALPHA 3.0.6g

See merge request TheGamecraft/c-cms!23
2018-11-14 16:37:54 +00:00
TheGamecraft fc9d14e735 ALPHA 3.0.6g 2018-11-14 11:37:04 -05:00
Mathieu Lagace fcf96df5e8 Merge branch 'dev' into 'master'
ALPHA 3.0.6f

See merge request TheGamecraft/c-cms!22
2018-11-13 18:40:47 +00:00
TheGamecraft 1ee9848312 ALPHA 3.0.6f 2018-11-13 13:40:15 -05:00
Mathieu Lagace 333679c510 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!21
2018-11-13 18:27:23 +00:00
TheGamecraft f65a38ca26 Merge branch 'dev' of gitlab.com:TheGamecraft/c-cms into dev
Mise a juors
2018-11-13 13:24:25 -05:00
TheGamecraft 84e17938a7 ALPHA 3.0.6e 2018-11-13 13:23:59 -05:00
TheGamecraft 0690d36eb2 ALPHA 3.0.6d 2018-11-13 13:18:46 -05:00
Mathieu Lagace e0f3a26bc2 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!19
2018-11-13 17:16:44 +00:00
Mathieu Lagace 96ec0fdb03 Delete .env.testing 2018-11-13 17:15:33 +00:00
TheGamecraft 01f8cf75b8 3.0.6c 2018-11-13 12:14:14 -05:00
Mathieu Lagace 72d51850c2 Merge branch 'dev' into 'master'
ALPHA 3.0.6b

See merge request TheGamecraft/c-cms!18
2018-11-12 16:11:55 +00:00
TheGamecraft e76a6e9f40 ALPHA 3.0.6b 2018-11-12 11:10:47 -05:00
Mathieu Lagace c58cf9ee8d Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!17
2018-11-08 17:20:02 +00:00
TheGamecraft 2b6bd17b8d ALPHA 3.0.6 2018-11-08 12:16:01 -05:00
TheGamecraft 87264660bc ALPHA 3.0.5e 2018-10-10 17:52:21 -04:00
Mathieu Lagace 932de1b154 Update readme.md 2018-09-26 21:20:42 +00:00
Mathieu Lagace 6353208b20 Merge branch 'dev' into 'master'
ALPHA 3.0.5d

See merge request TheGamecraft/c-cms!15
2018-09-26 14:48:49 +00:00
TheGamecraft d3dbd21da5 ALPHA 3.0.5d 2018-09-26 10:46:57 -04:00
Mathieu Lagace c5f9890ace Merge branch 'dev' into 'master'
ALPHA 3.0.5c

See merge request TheGamecraft/c-cms!14
2018-09-24 18:44:43 +00:00
TheGamecraft e554f011b4 ALPHA 3.0.5c 2018-09-24 14:43:32 -04:00
Mathieu Lagace 7b2d16642c Merge branch 'dev' into 'master'
ALPHA 3.0.5b

See merge request TheGamecraft/c-cms!13
2018-09-24 18:39:02 +00:00
TheGamecraft 64f5d54d3d ALPHA 3.0.5b 2018-09-24 14:37:47 -04:00
Mathieu Lagace 016e65b495 Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!12
2018-09-24 18:23:45 +00:00
TheGamecraft 23e4abc5c4 Merge branch 'dev' of gitlab.com:TheGamecraft/c-cms into dev
Voila
2018-09-24 14:21:00 -04:00
TheGamecraft ac829d58b9 ALPHA 3.0.5a 2018-09-24 14:19:28 -04:00
Mathieu Lagace c162184035 Update .gitlab-ci.yml 2018-09-24 18:14:24 +00:00
Mathieu Lagace 1a321d1021 Update .gitlab-ci.yml 2018-09-24 17:42:11 +00:00
Mathieu Lagace 0d8117c96d Update .gitlab-ci.yml 2018-09-24 17:37:46 +00:00
Mathieu Lagace 535048b687 Update .gitlab-ci.yml 2018-09-24 17:36:19 +00:00
Mathieu Lagace fc6255363e Merge branch 'dev' into 'master'
Dev

See merge request TheGamecraft/c-cms!11
2018-09-24 16:10:22 +00:00
Mathieu Lagace 7732bbe85e Merge branch 'TheGamecraft-dev-patch-96226' into 'dev'
The gamecraft dev patch 96226

See merge request TheGamecraft/c-cms!10
2018-09-24 16:09:07 +00:00
Mathieu Lagace 027e6e6b28 Update resources/views/public.blade.php
Deleted resources/views/default.blade.php
2018-09-24 16:08:08 +00:00
Mathieu Lagace ffe8032cc8 Deleted resources/views/public.blade.php 2018-09-24 16:07:49 +00:00
Mathieu Lagace 2ffa5d1ba3 Update .gitlab-ci.yml 2018-09-24 16:07:19 +00:00
Mathieu Lagace 839340acc2 Merge branch 'master' into 'dev'
Master

See merge request TheGamecraft/c-cms!9
2018-09-24 16:05:12 +00:00
Mathieu Lagace b44a8b94fb Update .gitlab-ci.yml 2018-09-24 15:34:43 +00:00
Mathieu Lagace 70bb173eb0 Update .gitlab-ci.yml 2018-09-24 15:22:38 +00:00
Mathieu Lagace 712246e6cb Update .gitlab-ci.yml 2018-09-24 15:19:14 +00:00
Mathieu Lagace c036745988 Update .gitlab-ci.yml 2018-09-24 15:15:21 +00:00
Mathieu Lagace d5151920d8 Update .gitlab-ci.yml 2018-09-24 15:08:32 +00:00
Mathieu Lagace bcc293a5d4 Update .gitlab-ci.yml 2018-09-24 15:05:19 +00:00
Mathieu Lagace 5922024c70 Update .gitlab-ci.yml 2018-09-24 15:03:54 +00:00
Mathieu Lagace f600c5cbb4 Update .gitlab-ci.yml 2018-09-24 15:00:05 +00:00
Mathieu Lagace 871877ca37 Update .gitlab-ci.yml 2018-09-24 14:54:13 +00:00
Mathieu Lagace 5597ded1ea Update .gitlab-ci.yml 2018-09-24 14:46:40 +00:00
Mathieu Lagace 34a4ebb2a8 Update .gitlab-ci.yml 2018-09-24 14:35:01 +00:00
Mathieu Lagace 1d13c8c8a9 Update .gitlab-ci.yml 2018-09-24 14:13:01 +00:00
Mathieu Lagace e3aa153cf8 Update .gitlab-ci.yml 2018-09-24 13:45:37 +00:00
Mathieu Lagace afa7e47ef3 Update .gitlab-ci.yml 2018-09-24 13:20:32 +00:00
Mathieu Lagace 033a2d65d8 Update .gitlab-ci.yml 2018-09-24 13:18:07 +00:00
Mathieu Lagace 863a701e08 Add .gitlab-ci.yml 2018-09-24 13:12:47 +00:00
Mathieu Lagace d5c6a534b5 Update CHANGELOG 2018-09-21 18:34:01 +00:00
Mathieu Lagace 0ddf99318d Merge branch 'dev' into 'master'
ALPHA 3.0.5

See merge request TheGamecraft/c-cms!8
2018-09-21 18:33:03 +00:00
TheGamecraft 3b593297cd ALPHA 3.0.5 2018-09-21 14:31:00 -04:00
Mathieu Lagace d41147346c Update CHANGELOG 2018-09-20 15:21:08 +00:00
9443 changed files with 649592 additions and 766173 deletions
+19
View File
@@ -0,0 +1,19 @@
# From official php image.
FROM php:7.4-cli-alpine
# Create a user group and account under id 1000.
RUN addgroup -g 1000 -S user && adduser -u 1000 -D user -G user
# Install quality-of-life packages.
RUN apk add --no-cache bash curl git vim
# Install composer for php deps.
RUN apk add --no-cache composer
# Install postgres pdo driver.
RUN apk add --no-cache mysql-dev && docker-php-ext-install pdo_mysql
RUN apk add --no-cache zip libzip-dev && docker-php-ext-configure zip && docker-php-ext-install zip
# Install redis driver.
RUN mkdir -p /usr/src/php/ext/redis; \
curl -fsSL --ipv4 https://github.com/phpredis/phpredis/archive/5.3.4.tar.gz | tar xvz -C "/usr/src/php/ext/redis" --strip 1; \
docker-php-ext-install redis
# Install nodejs and npm for frontend.
RUN apk add --no-cache nodejs npm
# Prevent container from exiting early.
CMD ["sleep", "infinity"]
+19
View File
@@ -0,0 +1,19 @@
{
"name": "Laravel",
"dockerComposeFile": "docker-compose.yaml",
"remoteUser": "user",
"service": "cli",
"workspaceFolder": "/workspaces/laravel",
"shutdownAction": "stopCompose",
"extensions": [
"bmewburn.vscode-intelephense-client",
"eamodio.gitlens",
"EditorConfig.EditorConfig",
"mikestead.dotenv",
"onecentlin.laravel-blade",
"ryannaddy.laravel-artisan",
"georgykurian.laravel-ide-helper"
]
}
+33
View File
@@ -0,0 +1,33 @@
version: "3.9"
services:
cli:
build: cli
volumes:
- ..:/workspaces/laravel
fpm:
build: fpm
volumes:
- ..:/workspaces/laravel
user: 1000:1000
nginx:
build: nginx
volumes:
- ..:/workspaces/laravel
ports:
- 80:80
depends_on:
- fpm
mysql:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: dev
MYSQL_USER: dev
MYSQL_PASSWORD: password
redis:
image: redis:6.2-alpine
+8
View File
@@ -0,0 +1,8 @@
# From official php image.
FROM php:8.0-fpm-alpine
# Install postgres pdo driver.
RUN apk add --no-cache postgresql-dev && docker-php-ext-install pdo_pgsql
# Install redis driver.
RUN mkdir -p /usr/src/php/ext/redis; \
curl -fsSL --ipv4 https://github.com/phpredis/phpredis/archive/5.3.4.tar.gz | tar xvz -C "/usr/src/php/ext/redis" --strip 1; \
docker-php-ext-install redis
+2
View File
@@ -0,0 +1,2 @@
FROM nginx:1.21-alpine
COPY default.conf /etc/nginx/conf.d/default.conf
+35
View File
@@ -0,0 +1,35 @@
server {
listen 80;
server_name localhost;
root /workspaces/laravel/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
index index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param PHP_VALUE "error_log=/var/log/nginx/php_errors.log";
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
+11 -10
View File
@@ -1,20 +1,20 @@
APP_NAME=C-CMS
APP_ENV=local
APP_KEY=base64:FQH+yWnhFyB+2gpByIg2Rybmqn5EXkL7VeFawzSJ/Lc=
APP_DEBUG=true
APP_URL=https://dev.c-cms.cf/
APP_KEY=
APP_DEBUG=false
APP_URL=https://dev.c-cms.cf/ # Adresse de votre site web
SQN_NUMBER=000
SQN_FULLNAME="Escadron 000 Exemple"
SQN_NUMBER=000 # Numéro de votre escadron
SQN_FULLNAME="Escadron 000 Exemple" # Nom complet de votre escadron
LOG_CHANNEL=stack
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=ddb_dev
DB_USERNAME=root
DB_PASSWORD=nHpz39lp
DB_DATABASE=ddb # Nom de la base de donnée
DB_USERNAME=user # Nom d'utilisateur pour ce connecter a la base de donnée
DB_PASSWORD=password # Mot de passe de la base de donnée
BROADCAST_DRIVER=log
CACHE_DRIVER=file
@@ -33,8 +33,8 @@ MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
NEXMO_KEY=f52074e0
NEXMO_SECRET=lXK9GasDUdotWqL3
NEXMO_KEY= # Votre Clé Nexmo API
NEXMO_SECRET= # Votre Mot de passe Nexmo API
PUSHER_APP_ID=
PUSHER_APP_KEY=
@@ -43,3 +43,4 @@ PUSHER_APP_CLUSTER=mt1
MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
+11 -10
View File
@@ -1,15 +1,16 @@
/node_modules
/public/hot
/public/storage
/storage/*.key
/vendor
/.idea
/.vscode
/.vagrant
node_modules
public/hot
public/storage
storage/*.key
vendor
.idea
.vscode
.vagrant
Homestead.json
Homestead.yaml
npm-debug.log
yarn-error.log
.env
/public/assets/public
/resources/views/public.blade.php
.env.testing
public/theme
resources/views/public.blade.php
+117
View File
@@ -0,0 +1,117 @@
image: registry.gitlab.com/thegamecraft/c-cms:latest
services:
- mysql:5.7
variables:
MYSQL_DATABASE: ddb
MYSQL_ROOT_PASSWORD: password
DB_HOST: mysql
DB_USERNAME: root
stages:
- build
- test
- 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
script:
- cp .env.example .env
- composer install
- php artisan key:generate
deploy_697:
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_697 --commit="$CI_COMMIT_SHA"
environment:
name: escadron697
url: http://escadron697.ca
when: manual
only:
- master
deploy_736:
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_736 --commit="$CI_COMMIT_SHA"
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
deploy_dev:
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_dev --commit="$CI_COMMIT_SHA"
environment:
name: dev
url: http://dev.exvps.ca
when: manual
only:
- dev
+1429
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;}}}
+58
View File
@@ -1,3 +1,61 @@
/** Version 3.2.0 **/
Nouveauté
Modernisation de l'affichage de l'horaire avec fullcalendar
Modernisation de la structure de la base de donnée de l'horaire
Modernisation de l'interface avec Material UI / Dashboard
Ajout d'une bibliothèque d'image
Ajout de nouvelle configuration
Le nombre de période dans l'horaire est maintenant dynamique
Le nombre de niveau dans l'horaire est maintenant dynamique
Les activitées sont maintenant dynamique
L'horaire est maintenant disponible sur le site publique
Les photos du calendrier sont disponible au publique depuis la page d'accueil
Bug
Correction de 22 bugs
/** ALPHA 3.0.5 **/
Front-End
Ajout d'un quantité d'item dans l'inventaire.
Modification de l'interface de la gestion d'inventaire pour accomoder l'ajout de quantité.
Ajout d'un indicateur de status sur la page de connexion..
Le rapport de bug est maintenant publique.
Ajout du dashboard administrateur.
Ajout d'option de configuration générale.'
Back End & API
Modification du model de réservation pour accomoder l'ajout de quantité.
Ajout d'une quantité d'item a l'inventaire.
Ajout d'un « Helper » pour connaitre le status des services.
Ajout d'une section « Alerte » dans le modele de page Admin.
Correction de bug
Correction de - Bug avec les heures quand il s'agit d'une activité "Autre" - #22
Correction de - Bug ECC" - #21
Correction de multiple bug
/** ALPHA 3.0.4 **/
Nouveauté
Création de l'espace cadet cadre.
Ajout de nouveau type d'icones.
Back End & API
Ajout de CSS spécifique au calendrier
Ajout d'un controller pour l'ECC
Correction de bug
Correction de multiple bug
/** ALPHA 3.0.3 **/
Nouveauté
+23
View File
@@ -0,0 +1,23 @@
# Set the base image for subsequent instructions
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 libzip-dev
# Clear out the local repository of retrieved package files
RUN apt-get clean
# Install needed extensions
# 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
# Install Composer
RUN curl --silent --show-error https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Install Laravel Envoy
RUN composer global require "laravel/envoy"
+252
View File
@@ -0,0 +1,252 @@
@servers(['web' => 'deployer@vps188754.vps.ovh.ca'])
@setup
$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_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_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
@endstory
@story('deploy_736')
clone_repository_736
run_composer_736
update_symlinks_736
@endstory
@story('deploy_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 }}
@endtask
@task('run_composer_697')
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 .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 'Setting permission'
chmod -R 777 {{ $app_dir_697 }}/current/bootstrap/
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 }}
@endtask
@task('run_composer_736')
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 .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 'Setting permission'
chmod -R 777 {{ $app_dir_736 }}/current/bootstrap/
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 }}
@endtask
@task('run_composer_dev')
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 .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 'Setting permission'
chmod -R 777 {{ $app_dir_dev }}/current/bootstrap/
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
+1 -1
View File
@@ -1,6 +1,6 @@
MIT License
Copyright (c) 2018 Mathieu Lagace
Copyright (c) 2019 Mathieu Lagace
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+1
View File
@@ -0,0 +1 @@
web: heroku-php-apache2 public/
+18907
View File
File diff suppressed because it is too large Load Diff
+59
View File
@@ -0,0 +1,59 @@
<?php
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()
{
return $this->morphTo();
}
public function user()
{
return $this->belongsTo('App\User');
}
public function item()
{
return $this->belongsTo('App\Item');
}
public function logs()
{
return $this->morphMany('App\Log', 'logable');
}
}
+53
View File
@@ -0,0 +1,53 @@
<?php
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()
{
return $this->morphMany('App\Picture', 'pictureable');
}
}
+45 -1
View File
@@ -4,7 +4,51 @@ 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 = [
'data' => 'array',
];
public function data()
{
return $this->data[0];
}
public static function getData($configName)
{
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();
}
}
+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;
}
}
+1
View File
@@ -26,6 +26,7 @@ class Kernel extends ConsoleKernel
{
// $schedule->command('inspire')
// ->hourly();
$schedule->command('telescope:prune')->weekly();
}
/**
+164
View File
@@ -0,0 +1,164 @@
<?php
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()
{
return $this->morphMany('App\Booking', 'bookable');
}
public function 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');
}
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);
}
}
+173
View File
@@ -0,0 +1,173 @@
<?php
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
* @property string $weekly_msg_publication_time
* @property int $hidden
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereHidden($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\Event whereWeeklyMsgPublicationTime($value)
*/
class Event extends Model
{
protected $casts = [
'schedule' => 'array',
'msg' => 'array',
'weekly_msg_file' => 'array'
];
public function bookings()
{
return $this->morphMany('App\Booking', 'bookable');
}
public function courses()
{
return $this->hasMany('App\Course');
}
public function type()
{
return \App\EventType::find($this->type);
}
public function user()
{
return $this->belongsTo('App\User');
}
public function course($p,$l)
{
$courses = $this->courses;
foreach ($courses as $c)
{
if ($c->periode == $p && $c->level == $l)
{
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_officer = "Le cours est manquant dans la base de données";
$error->event_id = $this->id;
$error->user_id = 1;
return $error;
}
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;
}
}
+83
View File
@@ -0,0 +1,83 @@
<?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
* @property int $hidden
* @method static \Illuminate\Database\Eloquent\Builder|\App\EventType whereHidden($value)
*/
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);
}
}
+51 -4
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,20 +23,64 @@ 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');
return view('admin.dashboard');
return view('admin.dashboard',['futureEvent' => \App\Event::future()->take(3),'userClasse' => \Auth::user()->futureCourses()->forPage(1,6)]);
}
public function setup()
{
if (\Auth::user()->use_default_psw == true)
{
return view('admin.user.profil.setup');
}
return redirect('/admin');
}
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');
}
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]);
}
public function instruction()
{
}
}
+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.
+175
View File
@@ -0,0 +1,175 @@
<?php
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 Response
*/
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 Response
*/
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 Response
*/
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 Response
*/
public function show(Booking $booking)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Booking $booking
* @return Response
*/
public function edit(Booking $booking)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Booking $booking
* @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 Response
*/
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 -497
View File
@@ -32,506 +32,14 @@ class CalendarController extends Controller
*/
public function index()
{
Log::saveLog("Affichage de l'horaire");
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)">';
$text = "";
foreach ($activityToday as $activity) {
echo '<div class="calendar-date">'.date("j", strtotime($today)).'</div>
<div class="calendar-text" style="width:90%;">';
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;
default:
echo '<div class="row" style="color:#0B615E;"><span class="fa-stack fa-lg col-md-2"><i class="fa fa-circle fa-stack-2x"></i></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>'.
"L'activité auras lieux a l'escadron entre 18h30 et 21h30".
'</p>'.
'<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]);
}
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->name." à l'horaire le ".$schedule->date);
$userToNotify = $schedule->getUserToNotify();
\Notification::send($userToNotify, new Alert(\Auth::User()->id,"Ajout de l'activité, ".$schedule->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->name." à l'horaire le ".$schedule->date));
}
return redirect('/admin/calendar');
}
public function patch($id)
{
$schedule = Schedule::find($id);
$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();
return redirect('/admin/calendar');
}
public function delete()
{
$id = request('id');
$schedule = Schedule::find($id);
$schedule->delete();
$event = \App\Event::allThisYear()->sortBy('date_begin')->filter(function ($value,$key) {
return $value->hidden != 1;
});
return view('admin.schedule.table.index',['events' => $event]);
}
}
@@ -0,0 +1,152 @@
<?php
namespace App\Http\Controllers;
use App\ComplementaryActivity;
use Illuminate\Http\Request;
class ComplementaryActivityController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
clogNav('consulte les configurations d\'activité');
return view('admin.configs.activity',['configs' => \App\Config::all(),'activities' => \App\ComplementaryActivity::all()]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.configs.activity-add');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store()
{
$activity = new ComplementaryActivity();
$activity->name = request('name');
$activity->admin_desc = request('admin_desc');
$activity->public_body = 'Veuillez modifier le text de description publique par défaut';
$activity->calendar_color = request('calendar_color');
$activity->calendar_icon = request('calendar_icon');
$activity->begin_time = request('begin_time');
$activity->end_time = request('end_time');
$activity->location = request('location');
$activity->public_slogan = "Veuillez modifier le slogan publique par défaut";
$activity->public_header_picture = "./assets/img/bg2.jpg";
$activity->location = request('location');
$activity->location = request('location');
if(request('is_mandatory') == 'on')
{
$activity->is_mandatory = true;
}
else
{
$activity->is_mandatory = false;
}
if(request('is_promoted') == 'on')
{
$activity->is_promoted = true;
}
else
{
$activity->is_promoted = false;
}
$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');
}
/**
* Display the specified resource.
*
* @param \App\ComplementaryActivity $complementaryActivity
* @return \Illuminate\Http\Response
*/
public function show($id)
{
return view('public.activity',['activity' => ComplementaryActivity::find($id)]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\ComplementaryActivity $complementaryActivity
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.configs.activity-edit',['activity' => \App\ComplementaryActivity::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\ComplementaryActivity $complementaryActivity
* @return \Illuminate\Http\Response
*/
public function update($id)
{
$activity = ComplementaryActivity::find($id);
$activity->name = request('name');
$activity->admin_desc = request('admin_desc');
$activity->calendar_color = request('calendar_color');
$activity->calendar_icon = request('calendar_icon');
$activity->begin_time = request('begin_time');
$activity->end_time = request('end_time');
$activity->location = request('location');
if(request('is_mandatory') == 'true')
{
$activity->is_mandatory = true;
}
else
{
$activity->is_mandatory = false;
}
if(request('is_promoted') == 'true')
{
$activity->is_promoted = true;
}
else
{
$activity->is_promoted = false;
}
$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');
}
/**
* Remove the specified resource from storage.
*
* @param \App\ComplementaryActivity $complementaryActivity
* @return \Illuminate\Http\Response
*/
public function destroy()
{
$id = request('id');
$activity = ComplementaryActivity::find($id);
clog('delete','success','a supprimé une activité',null,'App\ComplementaryActivity',$id);
$activity->delete();
}
}
+103 -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,7 +16,30 @@ 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 !');
}
/**
@@ -67,9 +92,33 @@ class ConfigController extends Controller
* @param \App\Config $config
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Config $config)
public function update()
{
//
$configs = [
'is_schedule_public',
'is_schedule_build',
'escadron_name_full',
'escadron_name_short',
'escadron_number',
'escadron_phone',
'escadron_element',
'element_title',
'escadron_address',
'escadron_direct_googlemap_link',
'media_facebook',
'media_twitter',
'media_instagram',
'media_email',
];
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')->with('success','Modification sauvegarder avec succès !');
}
/**
@@ -82,4 +131,55 @@ class ConfigController extends Controller
{
//
}
public function showfilesConfig()
{
$error = [];
return view('admin.configs.file',['configs' => Config::all(),'error' => $error]);
}
public function editfilesConfig()
{
$configList = [
'cadet_list',
];
$configListEncrypt = [
'GOOGLE_DRIVE_CLIENT_ID',
'GOOGLE_DRIVE_CLIENT_SECRET',
'GOOGLE_DRIVE_REFRESH_TOKEN',
'GOOGLE_DRIVE_FOLDER_ID'
];
if (\request('is_active') == 'on')
{
$config = \App\Config::find('is_Google_Drive_enabled');
$config->data = ['true'];
$config->save();
}
else
{
$config = \App\Config::find('is_Google_Drive_enabled');
$config->data = ['false'];
$config->save();
}
foreach ($configList as $configName)
{
$config = \App\Config::find($configName);
$config->data = [\request($configName)];
$config->save();
}
foreach ($configListEncrypt as $configName)
{
$config = \App\Config::find($configName);
$config->data = [\Crypt::encryptString(\request($configName))];
$config->save();
}
clog('edit','success','a modifié la configuration des fichiers');
return redirect('/admin/config/files')->with('success','Modification sauvegarder avec succès !');
}
}
+201
View File
@@ -0,0 +1,201 @@
<?php
namespace App\Http\Controllers;
use App\Course;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
class CourseController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
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]);
}
/**
* 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 $id
* @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
*/
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,'lessonPlanDir' => \App\GoogleDriveFile::findByPath('.Systeme/.Fichier/.PlanDeCours')->id]);
}
/**
* Show the form for editing the specified resource.
*
* @param Course $course
* @return \Illuminate\Http\Response
*/
public function edit(Course $course)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param Course $course
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Course $course)
{
//
}
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().'_'.$course->event->date_begin.'_'.'v'.date('c').'.'.\request()->file('file')->getClientOriginalExtension();
$name = urlencode($name);
$dirID = \App\GoogleDriveFile::findByPath('.Systeme/.Fichier/.PlanDeCours')->id;
if ($course->lessonPlan != null)
{
$lessonPlan = $course->lessonPlan;
$contents = collect(\Storage::cloud()->listContents($dirID, false));
$file = $contents
->where('type', '=', 'file')
->where('filename', '=', pathinfo($course->lessonPlan->file, PATHINFO_FILENAME))
->where('extension', '=', pathinfo($course->lessonPlan->file, PATHINFO_EXTENSION))
->first(); // there can be duplicate file names!
\Storage::cloud()->delete($file['path']);
}
else
{
$lessonPlan = new \App\LessonPlan();
}
\Storage::cloud()->putFileAs($dirID,\request()->file('file'),$name);
$metadata = \Storage::cloud()->getMetadata($dirID.'/'.$name);
$lessonPlan->user_id = \Auth::user()->id;
$lessonPlan->file = $metadata['name'];
$lessonPlan->course_id = $course->id;
$lessonPlan->desc = "";
$lessonPlan->comment = "";
$lessonPlan->save();
return redirect()->back();
}
/**
* Remove the specified resource from storage.
*
* @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);
}
}
+53 -5
View File
@@ -247,25 +247,43 @@ class ECCController extends Controller
foreach ($items_array as $item_array) {
if ($item_array != "") {
$items->push(\App\Item::find($item_array));
$item_array_ex = explode(":",$item_array);
$this_item = \App\Item::find($item_array_ex[0]);
$this_item->quantity = $item_array_ex[1];
$items->push($this_item);
}
}
}
return view('ecc.booking',['schedule' => $schedule, 'periode' => $periode, 'niveau' => $niveau, 'items' => $items, 'dispo_item' => $schedule->getInventory($periode)]);
}
public function booking_add($id,$periode,$niveau)
{
$schedule = Schedule::find($id);
$id_to_modify = "passet";
$qt_to_add = 0;
$periode_item = 'n'.$niveau.'_p'.$periode.'_item';
if (isset($schedule->$periode_item)) {
$array_items = explode("-",$schedule->$periode_item);
array_push($array_items,request('add'));
for ($i=0; $i < count($array_items); $i++) {
$array_item_id = explode(":",$array_items[$i]);
if ($array_item_id[0] == request('add')) {
$id_to_modify = $i;
$qt_to_add = $array_item_id[1];
}
}
if ($id_to_modify === "passet") {
array_push($array_items,request('add').":".request('qt'));
} else {
$toadd = $qt_to_add+request('qt');
$array_items[$id_to_modify] = request('add').":".$toadd;
}
} else {
$array_items = [];
array_push($array_items,request('add'));
array_push($array_items,request('add').":".request('qt'));
}
$final_items = implode("-",$array_items);
@@ -273,7 +291,7 @@ class ECCController extends Controller
$schedule->$periode_item = $final_items;
$schedule->save();
return redirect('/ecc/inventory/'.$id.'/'.$niveau.'/'.$periode);
}
@@ -297,4 +315,34 @@ class ECCController extends Controller
return redirect('/ecc/inventory/'.$id.'/'.$niveau.'/'.$periode);
}
public function list()
{
return view('ecc.list');
}
public function files()
{
return view('ecc.files');
}
public function settings()
{
return view('ecc.settings');
}
public function UserPassword()
{
return view('ecc.settings.password');
}
public function UserAvatar()
{
return view('ecc.settings.avatar');
}
public function UserAdress()
{
return view('ecc.settings.adress');
}
}
+482
View File
@@ -0,0 +1,482 @@
<?php
namespace App\Http\Controllers;
use App\Course;
use App\Event;
use App\EventType;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class EventController extends Controller
{
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return Response
*/
public function store()
{
$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_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('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->use_schedule) {
for ($l=1; $l < $nbLevel; $l++) {
for ($p=1; $p < $nbPeriode; $p++) {
$course = new \App\Course();
$users = \App\User::all();
$instructor = request('instruc_n'.$l.'_p'.$p);
foreach ($users as $user) {
if($user->fullname() == request('instruc_n'.$l.'_p'.$p))
{
$instructor = $user->id;
}
}
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->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);
}
}
}
}
clog('add','success','a ajouté un évènement',null,'App\Event',$event->id);
return redirect('/admin/schedule')->with('success','Événement ajouter à l\'horaire');
}
/**
* Display the specified resource.
*
* @param \App\Event $event
* @return Response
*/
public function show(Event $event)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param $id
* @return Response
*/
public function edit($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]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Event $event
* @return Response
*/
public function update($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_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('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->use_schedule) {
for ($l=1; $l < $nbLevel; $l++) {
for ($p=1; $p < $nbPeriode; $p++) {
$course = $event->course($p,$l);
if ($course == null)
{
$course = new Course();
}
$users = \App\User::all();
$instructor = request('instruc_n'.$l.'_p'.$p);
foreach ($users as $user) {
if($user->fullname() == request('instruc_n'.$l.'_p'.$p))
{
$instructor = $user->id;
}
}
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->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);
}
}
}
}
clog('add','success','a modifier un évènement',null,'App\Event',$event->id);
return redirect('/admin/schedule')->with('success','Événement modifier à l\'horaire');
}
/**
* Remove the specified resource from storage.
*
* @param \App\Event $event
* @return Response
*/
public function destroy(Event $event)
{
//
}
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();
}
}
+153
View File
@@ -0,0 +1,153 @@
<?php
namespace App\Http\Controllers;
use App\GoogleDriveFile;
use Illuminate\Http\Request;
use Redirect;
class FilesController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('admin.files.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 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)
{
//
}
/**
* 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 guide()
{
// if (\App\GoogleDriveFile::checkConfig())
// {
// $dirID = \App\GoogleDriveFile::findByPath('.Privé/.Staff/.Guide');
// $dir = collect(\Storage::cloud()->listContents($dirID->id,false))->sortBy('name');
// return view('admin.files.guide',['dir' => $dir]);
// }
// return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
return Redirect::away('https://drive.google.com/drive/folders/1iL_mMKMMAzyR203ni3HCPrU-ohCAel5S');
}
public function instruction()
{
if (\App\GoogleDriveFile::checkConfig())
{
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Privé/.Staff/.Instruction')->first()->id, 'mode' => 'folder']);
}
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
public function cadet()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Privé/.Cadet')->first()->id, 'mode' => 'folder']);
}
public function staff()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Privé/.Staff')->first()->id, 'mode' => 'folder']);
}
public function etamas()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Privé/.ETAMAS')->first()->id, 'mode' => 'folder']);
}
public function officier()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Privé/.Officier')->first()->id, 'mode' => 'folder']);
}
public function publique()
{
if (!\App\GoogleDriveFile::checkConfig())
{
return redirect('/admin')->with('error','Google Drive n\'est pas configuré');
}
return view('admin.files.Google Drive.index',['folder' => \App\GoogleDriveFile::where('path','=','.Publique')->first()->id, 'mode' => 'folder']);
}
}
@@ -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');
}
}
+30 -6
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]);
}
@@ -29,6 +29,12 @@ class InventoryController extends Controller
{
//
}
public function management()
{
clogNav('consulte la gestion de l\'inventaire');
return view('admin.inventory.management');
}
public function booking()
{
@@ -54,15 +60,29 @@ class InventoryController extends Controller
public function store($id,$periode,$niveau)
{
$schedule = Schedule::find($id);
$id_to_modify = "passet";
$qt_to_add = 0;
$periode_item = 'n'.$niveau.'_p'.$periode.'_item';
if (isset($schedule->$periode_item)) {
$array_items = explode("-",$schedule->$periode_item);
array_push($array_items,request('add'));
for ($i=0; $i < count($array_items); $i++) {
$array_item_id = explode(":",$array_items[$i]);
if ($array_item_id[0] == request('add')) {
$id_to_modify = $i;
$qt_to_add = $array_item_id[1];
}
}
if ($id_to_modify === "passet") {
array_push($array_items,request('add').":".request('qt'));
} else {
$toadd = $qt_to_add+request('qt');
$array_items[$id_to_modify] = request('add').":".$toadd;
}
} else {
$array_items = [];
array_push($array_items,request('add'));
array_push($array_items,request('add').":".request('qt'));
}
$final_items = implode("-",$array_items);
@@ -70,7 +90,7 @@ class InventoryController extends Controller
$schedule->$periode_item = $final_items;
$schedule->save();
return redirect('/admin/inventory/'.$id.'/'.$periode.'/'.$niveau);
}
@@ -91,10 +111,14 @@ class InventoryController extends Controller
foreach ($items_array as $item_array) {
if ($item_array != "") {
$items->push(Item::find($item_array));
$item_array_ex = explode(":",$item_array);
$this_item = Item::find($item_array_ex[0]);
$this_item->quantity = $item_array_ex[1];
$items->push($this_item);
}
}
}
return view('admin.inventory.show',['schedule' => $schedule, 'periode' => $periode, 'niveau' => $niveau, 'items' => $items, 'dispo_item' => $schedule->getInventory($periode)]);
}
@@ -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 -7
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,16 +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->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');
}
/**
@@ -66,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()]);
}
/**
@@ -82,10 +86,14 @@ class ItemController extends Controller
$item->name = request('name');
$item->desc = request('desc');
$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');
}
/**
@@ -99,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);
}
}
+44 -87
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,22 @@ class JobController extends Controller
{
$job = new Job;
$job->name = request('name');
$job->acces_level = request('acces_level');
$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;
$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();
return redirect('/admin/config/job/'.$job->id);
clog('add','success','Poste ajouté avec succès');
return redirect('/admin/config/jobs')->with('success','Poste ajouté avec succès');
}
/**
@@ -162,19 +94,44 @@ 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();
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)
{
//
}
}
+6 -18
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');
}
@@ -78,22 +78,9 @@ class MessageController extends Controller
*/
public function show($id)
{
$this_msg = Message::find($id);
if(isset($this_msg->data['as_seen']))
{
if (!strpos($this_msg->data['as_seen'],"-".\Auth::user()->id."-")) {
$data = [
'as_seen' => $this_msg->data['as_seen']."-".\Auth::user()->id."-",
'parameter' => $this_msg->data['parameter']
];
$this_msg->data = $data;
$this_msg->save();
}
}
return view('admin.message.show', ['message' => $this_msg]);
\Auth::User()->seenMessage($id);
clog('see','success','a consulté un message',null,'App\Message',$id);
return view('admin.message.show', ['message' => Message::find($id)]);
}
/**
@@ -132,5 +119,6 @@ class MessageController extends Controller
$msg = Message::find($id);
$msg->delete();
clog('delete','success','a supprimé un message',null,'App\Message',$id);
}
}
+134
View File
@@ -0,0 +1,134 @@
<?php
namespace App\Http\Controllers;
use App\News;
use Illuminate\Http\Request;
class NewsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
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)]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.news.create');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
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');
}
/**
* Display the specified resource.
*
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
public function show($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)]);
}
}
/**
* Show the form for editing the specified resource.
*
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.news.update',['news' => News::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
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');
}
/**
* Remove the specified resource from storage.
*
* @param \App\News $news
* @return \Illuminate\Http\Response
*/
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)
{
//
}
}
+120
View File
@@ -0,0 +1,120 @@
<?php
namespace App\Http\Controllers;
use App\Picture;
use Illuminate\Http\Request;
class PictureController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('public.allpicture',['pictures' => \App\Picture::paginate(\App\Config::getData('text_public_picture_nb'))]);
}
public function indexAdmin()
{
clogNav('consulte les images');
return view('admin.picture.index',['pictures' => \App\Picture::paginate(\App\Config::getData('text_public_picture_nb'))]);
}
/**
* Show the form for creating a new resource.
*
* @return \Illuminate\Http\Response
*/
public function create()
{
return view('admin.picture.add');
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store()
{
$pic = new Picture();
$pic->title = request('title');
$pic->url = request('url');
$pic->desc = request('desc');
$pic->pictureable_id = 0;
$pic->pictureable_type = "";
$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');
}
/**
* Display the specified resource.
*
* @param \App\Picture $picture
* @return \Illuminate\Http\Response
*/
public function show($id)
{
clog('see','success','a consulté une image',null,'App\Picture',$id);
return view('public.picture',['picture' => \App\Picture::find($id)]);
}
/**
* Show the form for editing the specified resource.
*
* @param \App\Picture $picture
* @return \Illuminate\Http\Response
*/
public function edit($id)
{
return view('admin.picture.edit',['picture' => Picture::find($id)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Picture $picture
* @return \Illuminate\Http\Response
*/
public function update($id)
{
$pic = Picture::find($id);
$pic->title = request('title');
$pic->url = request('url');
$pic->desc = request('desc');
$pic->save();
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');
}
}
/**
* Remove the specified resource from storage.
*
* @param \App\Picture $picture
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
$pic = Picture::find($id);
$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]);
}
}
+95
View File
@@ -0,0 +1,95 @@
<?php
namespace App\Http\Controllers;
use App\News;
use Illuminate\Http\Request;
class PublicController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('public.index',[
'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'))
]);
}
/**
* 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($config)
{
return view('admin.public.edit',['config' => \App\Config::where('name',$config)->first()]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param int $id
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $config)
{
$config = \App\Config::where('name',$config)->first();
$config->data = [request('data')];
$config->save();
return redirect('/?editMode');;
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
}
}
@@ -0,0 +1,111 @@
<?php
namespace App\Http\Controllers;
use App\PublicPage;
use Illuminate\Http\Request;
use PHPUnit\Util\Json;
class PublicPageController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
return view('admin.public_page.index', ['pages' => PublicPage::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 \App\PublicPage $publicPage
* @return \Illuminate\Http\Response
*/
public function show(PublicPage $publicPage)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param \App\PublicPage $publicPage
* @return \Illuminate\Http\Response
*/
public function edit(string $publicPage)
{
return view('admin.public_page.edit', ['page' => PublicPage::find($publicPage)]);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\PublicPage $publicPage
* @return \Illuminate\Http\Response
*/
public function update(Request $request, string $publicPage)
{
$page = PublicPage::find($publicPage);
$page->body = $request->body;
$page->header = $request->header;
$page->banner = $request->banner;
$page->save();
return redirect('/admin/public-pages');
}
/**
* Remove the specified resource from storage.
*
* @param \App\PublicPage $publicPage
* @return \Illuminate\Http\Response
*/
public function destroy(PublicPage $publicPage)
{
//
}
/**
* Display the specified resource.
*
* @param \App\PublicPage $publicPage
* @return \Illuminate\Http\Response
*/
public function display(string $publicPage)
{
$page = PublicPage::whereName($publicPage)->first();
if($page == null) {
abort(404);
}
return view('public.publicpage', ['page' => $page]);
}
}
+55 -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,25 @@ 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();
clog('add','success','Grade ajouté avec succès');
return redirect('/admin/config/ranks')->with('success','Grade ajouté avec succès');
}
/**
@@ -44,9 +62,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 +75,7 @@ class RankController extends Controller
*/
public function edit(Rank $rank)
{
//
}
/**
@@ -67,19 +85,43 @@ 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();
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();
}
}
+287 -1
View File
@@ -3,8 +3,294 @@
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use \App\Schedule;
use function GuzzleHttp\json_encode;
use PDF;
class ScheduleController extends Controller
{
//
public function index()
{
return view('admin.configs.schedule',['configs' => \App\Config::all(),'events_type' => \App\EventType::all()]);
}
public function update(Request $request)
{
$instruction_year_begin = \App\Config::find('instruction_year_begin');
$instruction_year_end = \App\Config::find('instruction_year_end');
$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))];
$instruction_year_begin->save();
$instruction_year_end->save();
return redirect('/admin/config/instruction')->with('success','Modification sauvegarder avec succès !');
}
public function apiIndex()
{
$start = strtotime(request()->start);
$end = strtotime(request()->end);
$allschedules = Schedule::all();
$allevents = \App\Event::all();
$events = [];
$jsonevents = [];
$schedules = [];
foreach ($allschedules as $schedule) {
if(strtotime($schedule->date) >= $start && strtotime($schedule->date) <= $end) {
array_push($schedules,$schedule);
}
}
foreach ($allevents as $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_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);
}
}
}
foreach ($schedules as $schedule) {
$color = $this->getColor($schedule->type);
$event = [
'title' => $schedule->data['event_name'],
'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
];
array_push($jsonevents,$event);
}
foreach ($events as $event) {
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' => $name,
'start' => date('c',strtotime($event->date_begin)),
'end' => date('c',strtotime($event->date_end)),
'color' => $color,
'extraParams' => [
'db_type' => 'event'],
'id' => $event->id,
'icon' => $icon
];
array_push($jsonevents,$myevent);
}
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")
{
$event = \App\Event::find($id);
}
else
{
$event = \App\Schedule::find($id);
}
return view('public.modal.schedule',['event' => $event]);
}
public function loadModalFull($id,$db_type)
{
if($db_type == "event")
{
$event = \App\Event::find($id);
}
else
{
$event = \App\Schedule::find($id);
}
return view('admin.schedule.modal.show',['event' => $event]);
}
public function getColor($type)
{
$activity = \App\ComplementaryActivity::all();
$color = 'blue';
switch ($type) {
case 'regular':
$color = 'orange';
break;
case 'pilotage':
$color = '#58D3F7';
break;
case 'drill':
$color = 'blue';
break;
case 'music':
$color = 'green';
break;
case 'biathlon':
$color = 'red';
break;
case 'marksmanship':
$color = 'grey';
break;
case 'founding':
$color = '#00FF40';
break;
case 'volunteer':
$color = '#DF0174';
break;
case 'other':
$color = '#DF0174';
break;
default:
if ($activity->find($type)) {
$color = $activity->find($type)->calendar_color;
}
break;
};
return $color;
}
public function printtopdf($id)
{
$event = \App\Event::find($id);
//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');
}
public function create($date)
{
$date = str_replace('/','-',$date);
return view('admin.schedule.event.add',['date' => $date]);
}
public function loadModalDefautType($type,$date)
{
$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,
'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()),
]);
}
}
+132 -12
View File
@@ -5,6 +5,8 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\User;
use function GuzzleHttp\json_encode;
class UserController extends Controller
{
/**
@@ -47,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');
}
@@ -61,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);
@@ -111,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');
}
@@ -134,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'));
}
@@ -173,4 +175,122 @@ class UserController extends Controller
$notification->delete();
return redirect(request('url'));
}
public function notificationmarkALL()
{
$notifications = \Auth::User()->unreadNotifications;
foreach($notifications as $notification)
{
$notification->delete();
}
return redirect()->back();
}
public function notificationmarkECC($id)
{
$notification = \Auth::User()->unreadNotifications->where('id',$id)->first();
$notification->delete();
return redirect('/ecc');
}
public function showUserProfil($id = 0)
{
if ($id == 0) {
$id = \Auth::User()->id;
}
return view('admin.user.profil',['user' => \App\User::find($id)]);
}
public function editUserAvatar($id)
{
$user = \Auth::User();
$user->avatar = $id;
$user->save();
return back()->with('success', 'Votre avatar a été mis à jour !');
}
public function UserAvatar()
{
return view('admin.user.profil.avatar');
}
public function UserPassword()
{
return view('admin.user.profil.password');
}
public function editUserPassword()
{
$user = \Auth::User();
$user->password = bcrypt(request('psw'));
$user->save();
return redirect('/admin/profil')->with('success', 'Modification enregistré');
}
public function UserAdress()
{
return view('admin.user.profil.adress');
}
public function editUserAdress()
{
$user = \Auth::user();
$user->adress = request('adress');
$user->save();
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()
{
$users = \App\User::all();
$name = [];
foreach ($users as $user) {
array_push($name, $user->fullname());
}
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);
}
}
+108
View File
@@ -0,0 +1,108 @@
<?php
use App\Log;
/**
* @return bool
*/
function getStatus()
{
$client = new GuzzleHttp\Client();
$incidents = $client->get('https://status.exvps.ca/api/v1/incidents');
$isBroken = false;
$incidents_decode = json_decode($incidents->getBody(),true);
foreach ($incidents_decode['data'] as $incident) {
if (!$incident['is_resolved']) {
$isBroken = true;
}
}
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];
}
}
}
}
+123
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)
@@ -17,4 +47,97 @@ class Item extends Model
$col_items->forget(0);
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');
}
}
+42 -3
View File
@@ -4,9 +4,48 @@ 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);
}
}
+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');
}
}
+95
View File
@@ -0,0 +1,95 @@
<?php
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');
}
public function pictures()
{
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 [
//
];
}
}
+119
View File
@@ -0,0 +1,119 @@
<?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;
}
}
+413
View File
@@ -0,0 +1,413 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Arr;
/**
* 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 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_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
],
],
'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' => [
'file_see' => [
'ckey' => 'file_see',
'communName' => 'Voir les fichiers publiques',
'desc' => 'L\'utilisateur peut-il consulter les fichiers publiques',
'icon' => 'fa-eye',
'valeur' => 0
],
'drive_see' => [
'ckey' => 'drive_see',
'communName' => 'Voir l\'explorateur de fichier',
'desc' => 'L\'utilisateur peut-il consulter l\'explorateur de fichier',
'icon' => 'fa-eye',
'valeur' => 0
],
]
];
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);
}
}
+45
View File
@@ -0,0 +1,45 @@
<?php
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');
}
}
+35 -1
View File
@@ -3,7 +3,10 @@
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
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 (env('TELESCOPE_ENABLED', true) | $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->rank->id, [
'1',
]);
});
}
}
+32
View File
@@ -0,0 +1,32 @@
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
/**
* App\PublicPage
*
* @property int $id
* @property string $name
* @property string $banner
* @property string $header
* @property string $body
* @property \Illuminate\Support\Carbon|null $created_at
* @property \Illuminate\Support\Carbon|null $updated_at
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage newModelQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage newQuery()
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage query()
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereBanner($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereBody($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereCreatedAt($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereHeader($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereId($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereName($value)
* @method static \Illuminate\Database\Eloquent\Builder|\App\PublicPage whereUpdatedAt($value)
* @mixin \Eloquent
*/
class PublicPage extends Model
{
//
}
+44 -3
View File
@@ -4,9 +4,50 @@ 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);
}
}
+135 -15
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 = [
@@ -13,8 +45,10 @@ class Schedule extends Model
public function getInventory($periode)
{
$dispo = [];
$used = [];
$dispo_id = [];
$dispo_qt = [];
$used_id = [];
$used_qt = [];
$dispo_item = collect();
$string_periode = 'p'.$periode;
@@ -22,34 +56,72 @@ class Schedule extends Model
$inventory = Item::all();
foreach ($inventory as $item) {
array_push($dispo, $item->id);
array_push($dispo_id, $item->id);
array_push($dispo_qt, $item->quantity);
}
$n1 = 'n1_'.$string_periode.'_item';
$items_array = explode("-",$this->$n1);
foreach ($items_array as $item_array) {
array_push($used,$item_array);
if ($items_array[0] == "") {
unset($items_array[0]);
}
$items_array = array_values($items_array);
if ($items_array != "") {
foreach ($items_array as $item_array) {
$items_for = explode(":",$item_array);
array_push($used_id,$items_for[0]);
array_push($used_qt,$items_for[1]);
}
}
$n2 = 'n2_'.$string_periode.'_item';
$items_array = explode("-",$this->$n2);
if ($items_array[0] == "") {
unset($items_array[0]);
}
$items_array = array_values($items_array);
foreach ($items_array as $item_array) {
array_push($used,$item_array);
if ($items_array != "") {
foreach ($items_array as $item_array) {
$items_for = explode(":",$item_array);
array_push($used_id,$items_for[0]);
array_push($used_qt,$items_for[1]);
}
}
$n3 = 'n3_'.$string_periode.'_item';
$items_array = explode("-",$this->$n3);
foreach ($items_array as $item_array) {
array_push($used,$item_array);
if ($items_array[0] == "") {
unset($items_array[0]);
}
$items_array = array_values($items_array);
if ($items_array != "") {
foreach ($items_array as $item_array) {
$items_for = explode(":",$item_array);
array_push($used_id,$items_for[0]);
array_push($used_qt,$items_for[1]);
}
}
$dispo = array_diff($dispo,$used);
foreach ($dispo as $key) {
$dispo_item->push(Item::find($key));
for ($i=0; $i < count($used_id); $i++) {
for ($e=0; $e < count($dispo_id); $e++) {
if (isset($dispo_id[0])) {
if ($used_id[$i] == $dispo_id[$e]) {
$dispo_qt[$e] = $dispo_qt[$e] - $used_qt[$i];
if ($dispo_qt[$e] < 1) {
unset($dispo_id[$e]);
unset($dispo_qt[$e]);
}
}
}
}
}
$dispo_id = array_values($dispo_id);
$dispo_qt = array_values($dispo_qt);
for ($i=0; $i < count($dispo_id); $i++) {
$this_item = Item::find($dispo_id[$i]);
$this_item->quantity = $dispo_qt[$i];
$dispo_item->push($this_item);
}
return $dispo_item;
@@ -74,4 +146,52 @@ class Schedule extends Model
return $users;
}
}
public static function checkForWarning()
{
$schedule = Schedule::all();
$warning = collect();
$today = date('U');
foreach ($schedule as $activity) {
if ($activity->type == "regular") {
$time = date('U',strtotime($activity->date));
if ($time >= $today) {
for ($niv=1; $niv <= 3; $niv++) {
for ($pe=1; $pe <= 2; $pe++) {
/** Check name */
if ($activity->data['n'.$niv."_p".$pe."_name"] == "") {
$warning->push(['warning' => 'Il doit y avoir un nom pour le cours', 'niveau' => $niv, 'periode' => $pe,'date' => $activity->date]);
}
/** Check OCOM */
if ($activity->data['n'.$niv."_p".$pe."_ocom"] == "") {
$warning->push(['warning' => "Il doit y avoir un OCOM pour le cours", 'niveau' => $niv, 'periode' => $pe,'date' => $activity->date]);
} else {
$regex = '/[MC]['.$niv.']\d\d.\d\d/';
if (preg_match($regex,trim($activity->data['n'.$niv."_p".$pe."_ocom"])) == 0 && $activity->data['n'.$niv."_p".$pe."_ocom"] != "S.O") {
$warning->push(['warning' => "L'OCOM du cours de semble pas être valide", 'niveau' => $niv, 'periode' => $activity->data['n'.$niv."_p".$pe."_ocom"],'date' => $activity->date]);
}
}
/** Check Instructor */
if ($activity->data['n'.$niv."_p".$pe."_instructor"] == "") {
$warning->push(['warning' => "Il doit y avoir un instructeur pour le cours", 'niveau' => $niv, 'periode' => $pe,'date' => $activity->date]);
}
/** Check local */
if ($activity->data['n'.$niv."_p".$pe."_local"] == "") {
$warning->push(['warning' => "Il doit y avoir un local pour le cours", 'niveau' => $niv, 'periode' => $pe,'date' => $activity->date]);
}
}
}
}
}
}
return $warning;
}
}
+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)
+154 -1
View File
@@ -2,9 +2,69 @@
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
* @property int $use_default_psw
* @method static \Illuminate\Database\Eloquent\Builder|\App\User whereUseDefaultPsw($value)
*/
class User extends Authenticatable
{
use Notifiable;
@@ -27,6 +87,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);
@@ -50,6 +120,26 @@ class User extends Authenticatable
return $this->hasMany(Message::class);
}
public function events()
{
return $this->hasMany('App\Event');
}
public function bookings()
{
return $this->hasMany('App\Booking');
}
public function courses()
{
return $this->hasMany('App\Course');
}
public function futureCourses()
{
return \App\Course::allFutureForUser($this->id);
}
public function routeNotificationForNexmo($notification)
{
return $this->telephone;
@@ -208,7 +298,7 @@ class User extends Authenticatable
$filtered_schedule = collect();
foreach (\App\Schedule::all() as $day) {
foreach ($schedules as $day) {
if ($day->date >= date('Y-m-d')) {
$filtered_schedule->push($day);
}
@@ -236,4 +326,67 @@ class User extends Authenticatable
}
return $nbClasse;
}
public function seenMessage($id)
{
$this_msg = Message::find($id);
if(isset($this_msg->data['as_seen']))
{
$as_seen = explode("-",$this_msg->data['as_seen']);
if (array_search(strval($this->id),$as_seen) === false) {
array_push($as_seen,$this->id);
}
$as_seen = array_filter($as_seen);
$as_seen_str = implode('-',$as_seen);
$data = [
'as_seen' => $as_seen_str,
'parameter' => $this_msg->data['parameter']
];
$this_msg->data = $data;
$this_msg->save();
}
}
public function news()
{
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');
});
}
}
+23 -8
View File
@@ -5,19 +5,32 @@
"license": "MIT",
"type": "project",
"require": {
"php": "^7.1.3",
"php": "^7.4",
"barryvdh/laravel-dompdf": "^0.8.4",
"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",
"nao-pon/flysystem-google-drive": "^1.1",
"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": [
@@ -26,7 +39,8 @@
],
"psr-4": {
"App\\": "app/"
}
},
"files": ["app/Http/helpers.php"]
},
"autoload-dev": {
"psr-4": {
@@ -48,7 +62,8 @@
],
"post-autoload-dump": [
"Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
"@php artisan package:discover"
"@php artisan package:discover",
"@php artisan version"
]
},
"config": {
Generated
+5850 -920
View File
File diff suppressed because it is too large Load Diff
+8 -2
View File
@@ -63,7 +63,7 @@ return [
|
*/
'version' => "3.0.2b",
'version' => "3.2.5.",
/*
|--------------------------------------------------------------------------
@@ -157,19 +157,24 @@ return [
Illuminate\Translation\TranslationServiceProvider::class,
Illuminate\Validation\ValidationServiceProvider::class,
Illuminate\View\ViewServiceProvider::class,
/*
* Package Service Providers...
*/
Barryvdh\DomPDF\ServiceProvider::class,
'Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider',
/*
* Application Service Providers...
*/
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,
],
@@ -219,6 +224,7 @@ return [
'URL' => Illuminate\Support\Facades\URL::class,
'Validator' => Illuminate\Support\Facades\Validator::class,
'View' => Illuminate\Support\Facades\View::class,
'PDF' => Barryvdh\DomPDF\Facade::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,
];
+8 -8
View File
@@ -26,7 +26,7 @@ return [
|
*/
'cloud' => env('FILESYSTEM_CLOUD', 's3'),
'cloud' => env('FILESYSTEM_CLOUD', 'google'),
/*
|--------------------------------------------------------------------------
@@ -55,13 +55,13 @@ return [
'visibility' => 'public',
],
's3' => [
'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'),
'google' => [
'driver' => 'google',
'clientId' => '',
'clientSecret' => '',
'refreshToken' => '',
'folderId' => '',
// 'teamDriveId' => env('GOOGLE_DRIVE_TEAM_DRIVE_ID'),
],
],
+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: absorb
blade-directive: version
current:
label: ''
major: 3
minor: 2
patch: 5
prerelease: 54-g63301aec
buildmetadata: ''
commit: 41845
timestamp:
year: 2020
month: 6
day: 21
hour: 18
minute: 44
second: 55
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} (commit {$commit})'
version-only: 'version {$major}.{$minor}.{$patch}'
full: '{$version-only}[.?={$prerelease}][+?={$buildmetadata}] (commit {$commit})'
compact: 'v{$major}.{$minor}.{$patch}-{$commit}'
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,30 +19,15 @@ 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('api_token', 60)->unique()->default(str_random(60));
$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();
});
}
@@ -15,23 +15,10 @@ class CreateRanksTable extends Migration
{
Schema::create('ranks', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$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,8 +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();
});
}

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