/laravel/app/Services/FormService.php

https://github.com/coreui/coreui-free-vue-laravel-admin-template · PHP · 353 lines · 328 code · 20 blank · 5 comment · 38 complexity · 5617ae4bdecceb4d4606ed478571923a MD5 · raw file

  1. <?php
  2. /*
  3. 16.12.2019
  4. RolesService.php
  5. */
  6. namespace App\Services;
  7. use App\Models\FormField;
  8. use App\Models\Form;
  9. use Illuminate\Support\Facades\DB;
  10. use Spatie\Permission\Models\Role;
  11. use Spatie\Permission\Models\Permission;
  12. class FormService{
  13. public function __construct(){
  14. }
  15. public function saveSingleFormData($slug, $request, $formId){
  16. $formField = new FormField();
  17. $formField->name = $request[$slug . '_name'];
  18. $formField->type = $request[$slug . '_field_type'];
  19. if(isset( $request[$slug . '_browse'] )){
  20. $formField->browse = 1;
  21. }else{
  22. $formField->browse = 0;
  23. }
  24. if(isset( $request[$slug . '_read'] )){
  25. $formField->read = 1;
  26. }else{
  27. $formField->read = 0;
  28. }
  29. if(isset( $request[$slug . '_edit'] )){
  30. $formField->edit = 1;
  31. }else{
  32. $formField->edit = 0;
  33. }
  34. if(isset( $request[$slug . '_add'] )){
  35. $formField->add = 1;
  36. }else{
  37. $formField->add = 0;
  38. }
  39. if(isset( $request[$slug . '_relation_table'] )){
  40. $formField->relation_table = $request[$slug . '_relation_table'];
  41. }
  42. if(isset( $request[$slug . '_relation_column'] )){
  43. $formField->relation_column = $request[$slug . '_relation_column'];
  44. }
  45. $formField->form_id = $formId;
  46. $formField->column_name = $slug;
  47. $formField->save();
  48. }
  49. public function updateSingleFormField($field, $request){
  50. $field->name = $request[$field->id . '_name'];
  51. $field->type = $request[$field->id . '_field_type'];
  52. if(isset($request[$field->id . '_browse'])){
  53. $field->browse = 1;
  54. }else{
  55. $field->browse = 0;
  56. }
  57. if(isset($request[$field->id . '_read'])){
  58. $field->read = 1;
  59. }else{
  60. $field->read = 0;
  61. }
  62. if(isset($request[$field->id . '_edit'])){
  63. $field->edit = 1;
  64. }else{
  65. $field->edit = 0;
  66. }
  67. if(isset($request[$field->id . '_add'])){
  68. $field->add = 1;
  69. }else{
  70. $field->add = 0;
  71. }
  72. if(isset($request[$field->id . '_relation_table'])){
  73. $field->relation_table = $request[$field->id . '_relation_table'];
  74. }
  75. if(isset($request[$field->id . '_relation_column'])){
  76. $field->relation_column = $request[$field->id . '_relation_column'];
  77. }
  78. $field->save();
  79. }
  80. public function updateForm($formId, $request){
  81. $form = Form::find($formId);
  82. $form->name = $request['name'];
  83. $form->pagination = $request['pagination'];
  84. if(isset($request['read'])){
  85. $form->read = true;
  86. }else{
  87. $form->read = false;
  88. }
  89. if(isset($request['edit'])){
  90. $form->edit = true;
  91. }else{
  92. $form->edit = false;
  93. }
  94. if(isset($request['add'])){
  95. $form->add = true;
  96. }else{
  97. $form->add = false;
  98. }
  99. if(isset($request['delete'])){
  100. $form->delete = true;
  101. }else{
  102. $form->delete = false;
  103. }
  104. $form->save();
  105. $formFields = FormField::where('form_id', '=', $formId)->get();
  106. foreach($formFields as $field){
  107. $this->updateSingleFormField($field, $request);
  108. }
  109. $this->revokeAllPermisions( $form->id, $request );
  110. $this->givePermissions( $form->id, $request );
  111. }
  112. public function addNewForm( $model, $request ){
  113. $form = new Form();
  114. $form->name = $request['name'];
  115. $form->pagination = $request['pagination'];
  116. $form->table_name = $model;
  117. if(isset($request['read'])){
  118. $form->read = true;
  119. }else{
  120. $form->read = false;
  121. }
  122. if(isset($request['edit'])){
  123. $form->edit = true;
  124. }else{
  125. $form->edit = false;
  126. }
  127. if(isset($request['add'])){
  128. $form->add = true;
  129. }else{
  130. $form->add = false;
  131. }
  132. if(isset($request['delete'])){
  133. $form->delete = true;
  134. }else{
  135. $form->delete = false;
  136. }
  137. $form->save();
  138. $formDatas = $this->getFormDataByModel( $model );
  139. foreach($formDatas as $formData){
  140. if($formData != 'id'){
  141. $this->saveSingleFormData($formData, $request, $form->id);
  142. }
  143. }
  144. $this->givePermissions( $form->id, $request );
  145. return $form->id;
  146. }
  147. public function getBreadRoles( $formId ){
  148. $result = array();
  149. $roles = Role::all();
  150. foreach($roles as $role){
  151. if($role->hasPermissionTo('browse bread ' . $formId)){
  152. array_push($result, $role->name);
  153. }
  154. }
  155. return $result;
  156. }
  157. public function createPermissions( $formId ){
  158. $permission = Permission::where('name', '=', 'browse bread ' . $formId)->first();
  159. if(empty($permission)){
  160. Permission::create(['name' => 'browse bread ' . $formId]);
  161. }
  162. $permission = Permission::where('name', '=', 'read bread ' . $formId)->first();
  163. if(empty($permission)){
  164. Permission::create(['name' => 'read bread ' . $formId]);
  165. }
  166. $permission = Permission::where('name', '=', 'edit bread ' . $formId)->first();
  167. if(empty($permission)){
  168. Permission::create(['name' => 'edit bread ' . $formId]);
  169. }
  170. $permission = Permission::where('name', '=', 'add bread ' . $formId)->first();
  171. if(empty($permission)){
  172. Permission::create(['name' => 'add bread ' . $formId]);
  173. }
  174. $permission = Permission::where('name', '=', 'delete bread ' . $formId)->first();
  175. if(empty($permission)){
  176. Permission::create(['name' => 'delete bread ' . $formId]);
  177. }
  178. }
  179. public function givePermissions( $formId, $request){
  180. $this->createPermissions( $formId );
  181. $assign = array();
  182. $roles = Role::all();
  183. foreach($roles as $role){
  184. if(isset($request[ '_role_' . $role->name ])){
  185. $role->givePermissionTo('browse bread ' . $formId);
  186. if(isset($request['read'])){
  187. $role->givePermissionTo('read bread ' . $formId);
  188. }
  189. if(isset($request['edit'])){
  190. $role->givePermissionTo('edit bread ' . $formId);
  191. }
  192. if(isset($request['add'])){
  193. $role->givePermissionTo('add bread ' . $formId);
  194. }
  195. if(isset($request['delete'])){
  196. $role->givePermissionTo('delete bread ' . $formId);
  197. }
  198. }
  199. }
  200. }
  201. public function revokeAllPermisions( $formId, $request){
  202. $assign = array();
  203. $roles = Role::all();
  204. foreach($roles as $role){
  205. $permission = Permission::where('name', '=', 'browse bread ' . $formId)->first();
  206. if(!empty($permission)){
  207. $permission->removeRole($role);
  208. }
  209. $permission = Permission::where('name', '=', 'read bread ' . $formId)->first();
  210. if(!empty($permission)){
  211. $permission->removeRole($role);
  212. }
  213. $permission = Permission::where('name', '=', 'edit bread ' . $formId)->first();
  214. if(!empty($permission)){
  215. $permission->removeRole($role);
  216. }
  217. $permission = Permission::where('name', '=', 'add bread ' . $formId)->first();
  218. if(!empty($permission)){
  219. $permission->removeRole($role);
  220. }
  221. $permission = Permission::where('name', '=', 'delete bread ' . $formId)->first();
  222. if(!empty($permission)){
  223. $permission->removeRole($role);
  224. }
  225. }
  226. }
  227. public function getFormDataByModel( $model ){
  228. $columns = DB::getSchemaBuilder()->getColumnListing( $model );
  229. return $columns;
  230. }
  231. /** PRZERZUCIĆ TO DO INNEGO PLIKU */
  232. public function getFromOptionsStandardInput(){
  233. return array(
  234. array(
  235. 'value'=> 'checkbox',
  236. 'name'=> 'checkbox'
  237. ),
  238. array(
  239. 'value'=> 'color',
  240. 'name' => 'color'
  241. ),
  242. array(
  243. 'value'=> 'date',
  244. 'name' => 'date'
  245. ),
  246. array(
  247. 'value'=> 'datetime-local',
  248. 'name' => 'datetime-local'
  249. ),
  250. array(
  251. 'value'=> 'email',
  252. 'name' => 'email'
  253. ),
  254. array(
  255. 'value'=> 'hidden',
  256. 'name' => 'hidden'
  257. ),
  258. array(
  259. 'value'=> 'month',
  260. 'name' => 'month'
  261. ),
  262. array(
  263. 'value'=> 'number',
  264. 'name' => 'number'
  265. ),
  266. array(
  267. 'value'=> 'password',
  268. 'name' => 'password'
  269. ),
  270. array(
  271. 'value'=> 'radio',
  272. 'name' => 'radio'
  273. ),
  274. array(
  275. 'value'=> 'range',
  276. 'name' => 'range'
  277. ),
  278. array(
  279. 'value'=> 'reset',
  280. 'name' => 'reset'
  281. ),
  282. array(
  283. 'value'=> 'search',
  284. 'name' => 'search'
  285. ),
  286. array(
  287. 'value'=> 'tel',
  288. 'name' => 'tel'
  289. ),
  290. array(
  291. 'value'=> 'text',
  292. 'name' => 'text'
  293. ),
  294. array(
  295. 'value'=> 'time',
  296. 'name' => 'time'
  297. ),
  298. array(
  299. 'value'=> 'url',
  300. 'name' => 'url'
  301. ),
  302. array(
  303. 'value'=> 'week',
  304. 'name' => 'week'
  305. ),
  306. );
  307. }
  308. public function getFormOptions(){
  309. $otherOptions = array(
  310. array(
  311. 'value' => 'text_area',
  312. 'name' => 'text area'
  313. ),
  314. array(
  315. 'value'=> 'relation_select',
  316. 'name' => 'relation select'
  317. ),
  318. array(
  319. 'value'=> 'relation_radio',
  320. 'name' => 'relation radio'
  321. ),
  322. array(
  323. 'value' => 'file',
  324. 'name' => 'file'
  325. ),
  326. array(
  327. 'value' => 'image',
  328. 'name' => 'image'
  329. )
  330. );
  331. return array_merge( $this->getFromOptionsStandardInput(), $otherOptions);
  332. }
  333. }