public function jsonData() { // get parameters from url route $parameters = $this->request->route()->parameters(); $actionsAcl = Action::get(); $acl = AclLibrary::getProfileAcl($parameters['profile']); $parameters = Miscellaneous::dataTablePaginate($this->request, $parameters); $parameters = Miscellaneous::dataTableSorting($this->request, $parameters, $this->indexColumns); $parameters = Miscellaneous::dataTableFiltering($this->request, $parameters); // set columns in parameters array $parameters['indexColumns'] = $this->indexColumns; $parametersCount = $parameters; $parametersCount['count'] = true; // get data to table $objects = call_user_func($this->model . '::getIndexRecords', $this->request, $parameters); $iFilteredTotal = call_user_func($this->model . '::getIndexRecords', $this->request, $parametersCount); $iTotal = call_user_func($this->model . '::countRecords', $this->request, $parameters); // get properties of model class $class = new \ReflectionClass($this->model); $response = ["sEcho" => intval($this->request->input('sEcho')), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => []]; // instance model to get primary key $instance = new $this->model(); $aObjects = $objects->toArray(); $i = 0; foreach ($aObjects as $aObject) { $row = []; foreach ($this->indexColumns as $indexColumn) { $row[] = $aObject[$indexColumn]; } $actions = '<div><select id="re' . $aObject[$instance->getKeyName()] . '" data-resource="' . $aObject[$instance->getKeyName()] . '" data-nresource="' . $aObject['name_007'] . '" multiple style="width: 100%;">'; foreach ($actionsAcl as $actionAcl) { $selected = $acl->allows($aObject['id_007'], $actionAcl->id_008, $parameters['profile']) ? ' selected' : null; $actions .= '<option value="' . $actionAcl->id_008 . '"' . $selected . '>' . $actionAcl->name_008 . '</option>'; } $actions .= '</select></div>'; $row[] = $actions; $response['aaData'][] = $row; $i++; } return response()->json($response); }
/** * @access public * @return json */ public function jsonData() { // get parameters from url route $parameters = $this->request->route()->parameters(); // get active langs if object has multiple langs if (isset($parameters['lang'])) { $langs = Lang::getActivesLangs(); } // set custom route suffix, if we need get data from other controller if ($this->request->has('routeSuffix')) { $this->routeSuffix = $this->request->input('routeSuffix'); } // table paginated $parameters = Miscellaneous::dataTablePaginate($this->request, $parameters); // table sorting $parameters = Miscellaneous::dataTableSorting($this->request, $parameters, $this->indexColumns); // quick search data table $parameters = Miscellaneous::dataTableFiltering($this->request, $parameters); // set advanced search $parameters = Miscellaneous::dataTableColumnFiltering($this->request, $parameters); // set columns in parameters array $parameters['indexColumns'] = $this->indexColumns; $parametersCount = $parameters; $parametersCount['count'] = true; // get data to table $objects = call_user_func($this->model . '::getIndexRecords', $this->request, $parameters); $iFilteredTotal = call_user_func($this->model . '::getIndexRecords', $this->request, $parametersCount); $iTotal = call_user_func($this->model . '::countRecords', $this->request, $parameters); // method to do custom actions if (method_exists($this, 'customJsonData')) { $this->customJsonData($parameters); } $response = ["sEcho" => $this->request->input('sEcho'), "iTotalRecords" => $iTotal, "iTotalDisplayRecords" => $iFilteredTotal, "aaData" => []]; // instance model to get primary key $instance = new $this->model(); foreach ($objects as $key => $aObject) { // start columns instance // set columns with your types, check, active, etc. $row = []; foreach ($this->indexColumns as $indexColumn) { if (is_array($indexColumn)) { switch ($indexColumn['type']) { case 'email': $row[] = !empty($aObject->{$indexColumn['data']}) ? '<a href="mailto:' . $aObject->{$indexColumn['data']} . '">' . $aObject->{$indexColumn['data']} . '</a>' : null; break; case 'img': $row[] = !empty($aObject->{$indexColumn['data']}) ? '<img src="' . asset($indexColumn['url'] . $aObject[$indexColumn['data']]) . '">' : null; break; case 'check': $row[] = $aObject[$indexColumn['data']] ? '<i class="icomoon-icon-checkmark-3"></i>' : null; break; case 'active': $row[] = $aObject[$indexColumn['data']] ? '<i class="icomoon-icon-checkmark-3"></i>' : '<i class="icomoon-icon-blocked"></i>'; break; case 'invertActive': $row[] = !$aObject[$indexColumn['data']] ? '<i class="icomoon-icon-checkmark-3"></i>' : '<i class="icomoon-icon-blocked"></i>'; break; case 'date': $date = new \DateTime(); $row[] = $date->setTimestamp($aObject[$indexColumn['data']])->format(isset($indexColumn['format']) ? $indexColumn['format'] : config('pulsar.datePattern') . ' H:i:s'); break; case 'url': // the prefix is to compose the url $prefix = isset($indexColumn['prefix']) ? $indexColumn['prefix'] : null; $row[] = '<a ' . (isset($indexColumn['target']) ? 'target="' . $indexColumn['target'] . '"' : null) . ' href="' . $prefix . $aObject[$indexColumn['data']] . '"><i class="icon-link"></i></a>'; break; case 'color': $row[] = '<i class="color' . (isset($indexColumn['tooltip']) && $indexColumn['tooltip'] ? ' bs-tooltip' : null) . '"' . (isset($indexColumn['title']) ? ' title="' . $aObject[$indexColumn['title']] . '"' : null) . ' style="background-color: ' . $aObject[$indexColumn['data']] . '"></i>'; break; case 'alias': $row[] = $aObject->{$indexColumn['alias']}; break; } if (method_exists($this, 'customColumnType')) { $row = $this->customColumnType($row, $indexColumn, $aObject); } } else { $row[] = $aObject->{$indexColumn}; } } // check if show checkbocx column if ($this->viewParameters['checkBoxColumn']) { $row[] = '<input type="checkbox" class="uniform" name="element' . $key . '" value="' . $aObject[$instance->getKeyName()] . '">'; } $actionUrlParameters['id'] = $aObject[$instance->getKeyName()]; $actionUrlParameters['offset'] = $this->request->input('start'); // check if create route has modal // is necessary to have modal paramenter in all routes for proper operation if (Route::current()->hasParameter('modal')) { // set modal parameter for actions from datatable, you need instance all situations if (isset($parameters['modal']) && $parameters['modal'] == 1) { $actionUrlParameters['modal'] = 1; } else { $actionUrlParameters['modal'] = 0; } } // if we have parentOffset, we instantiate it if (isset($parameters['parentOffset'])) { $actionUrlParameters['parentOffset'] = $parameters['parentOffset']; } // get lang parameter if object has multiple language if (isset($parameters['lang'])) { $actionUrlParameters['lang'] = $parameters['lang']; } if (method_exists($this, 'customActionUrlParameters')) { $actionUrlParameters = $this->customActionUrlParameters($actionUrlParameters, $parameters); } // check if is necesary add div before actions $actions = isset($parameters['lang']) ? '<div class="btn-group">' : null; // check whether it is necessary to insert custom actions if (method_exists($this, 'jsonCustomDataBeforeActions')) { $actions = $actions . $this->jsonCustomDataBeforeActions($aObject, $actionUrlParameters, $parameters); } // buttons actions if ($this->viewParameters['relatedButton']) { $actions .= is_allowed($this->resource, 'access') ? '<a class="btn btn-xs bs-tooltip related-record" data-json=\'' . json_encode($aObject) . '\' data-original-title="' . trans('pulsar::pulsar.related_record') . '"><i class="fa fa-link"></i></a>' : null; } // TODO: para que es isset($actionUrlParameters['modal']) && $actionUrlParameters['modal']?? if ($this->viewParameters['showButton']) { $actions .= is_allowed($this->resource, 'access') ? '<a class="btn btn-xs bs-tooltip' . (isset($actionUrlParameters['modal']) && $actionUrlParameters['modal'] ? ' magnific-popup' : null) . '" href="' . route('show' . ucfirst($this->routeSuffix), $actionUrlParameters) . '" data-original-title="' . trans('pulsar::pulsar.view_record') . '"><i class="fa fa-eye"></i></a>' : null; } if ($this->viewParameters['editButton']) { $actions .= is_allowed($this->resource, 'edit') ? '<a class="btn btn-xs bs-tooltip' . (isset($actionUrlParameters['modal']) && $actionUrlParameters['modal'] ? ' magnific-popup' : null) . '" href="' . route('edit' . ucfirst($this->routeSuffix), $actionUrlParameters) . '" data-original-title="' . trans('pulsar::pulsar.edit_record') . '"><i class="fa fa-pencil"></i></a>' : null; } if ($this->viewParameters['deleteButton']) { $actions .= is_allowed($this->resource, 'delete') ? '<a class="btn btn-xs bs-tooltip delete-record" data-id="' . $aObject[$instance->getKeyName()] . '" data-original-title="' . trans('pulsar::pulsar.delete_record') . '" data-delete-url="' . route('delete' . ucfirst($this->routeSuffix), $actionUrlParameters) . '"><i class="fa fa-trash"></i></a>' : null; } // set lang selector on datatable if (isset($parameters['lang'])) { // set language to object $jsonObject = json_decode($aObject['data_lang_' . call_user_func($this->model . '::getSuffix')]); $colorFlag = "MY_green"; foreach ($langs as $lang) { $isCreated = in_array($lang->id_001, $jsonObject->langs); if (!$isCreated) { $colorFlag = "MY_red"; break; } } $actions .= '<span class="btn btn-xs dropdown-toggle" data-toggle="dropdown"> <i class="brocco-icon-flag ' . $colorFlag . '"></i> <i class="fa fa-angle-down"></i> </span> <ul class="dropdown-menu pull-right">'; $nLangs = count($langs); $j = 0; foreach ($langs as $lang) { $isCreated = in_array($lang->id_001, $jsonObject->langs); $actionUrlParameters['lang'] = $lang->id_001; if (is_allowed($this->resource, 'edit') && is_allowed($this->resource, 'create')) { $actions .= '<li><a class="bs-tooltip" href="'; if ($isCreated) { $actions .= route('edit' . ucfirst($this->routeSuffix), $actionUrlParameters); } else { $actions .= route('create' . ucfirst($this->routeSuffix), $actionUrlParameters); } $actions .= '" data-original-title="' . $lang->name_001 . '"><img src="' . asset('/packages/syscover/pulsar/storage/langs/' . $lang->image_001) . '"> '; if ($isCreated) { $actions .= trans('pulsar::pulsar.edit'); } else { $actions .= trans('pulsar::pulsar.create'); } $actions .= '</a></li>'; } $j++; if ($j < $nLangs) { $actions .= '<li class="divider"></li>'; } } $actions .= '</ul>'; $actions .= '</div>'; } $row[] = $actions; $response['aaData'][] = $row; } return response()->json($response); }