Example #1
0
 public function editCustomRecord($parameters)
 {
     $parameters['langs'] = Lang::getActivesLangs();
     $parameters['profiles'] = Profile::all();
     return $parameters;
 }
Example #2
0
 /**
  * @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);
 }