/**
  * Run the migrations.
  *
  * @return void
  */
 public function up()
 {
     foreach (\App\Models\CustomField::all() as $custom_field) {
         if ($custom_field->format == 'regex:/^MAC$/') {
             $custom_field->format = 'regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/';
         }
         $custom_field->save();
     }
 }
 /**
  * Run the migrations.
  *
  * @return void
  */
 public function up()
 {
     foreach (\App\Models\CustomField::all() as $custom_field) {
         switch ($custom_field->format) {
             case '[a-zA-Z]*':
                 $custom_field->format = 'ALPHA';
                 break;
             case '[0-9]*':
                 $custom_field->format = 'NUMERIC';
                 break;
             case '([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])':
                 $custom_field->format = 'IP';
                 break;
                 //ANYTHING ELSE.
             //ANYTHING ELSE.
             default:
                 $custom_field->format = 'regex:/^' . $custom_field->format . "\$/";
         }
         $custom_field->save();
     }
 }
 /**
  * Run the migrations.
  * "ANY" => "",
  * "ALPHA" => "alpha",
  * "EMAIL" => "email",
  * "DATE" => "date",
  *  "URL" => "url",
  * "NUMERIC" => "numeric",
  * "MAC" => "regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/",
  * "IP" => "ip"
  *
  * @return void
  */
 public function up()
 {
     foreach (\App\Models\CustomField::all() as $custom_field) {
         // Handle alphanumeric
         if (stripos($custom_field->format, 'ALPHA') !== false) {
             $custom_field->format = 'alpha';
             // Numeric
         } elseif (stripos($custom_field->format, 'NUMERIC') !== false) {
             $custom_field->format = 'numeric';
             // IP
         } elseif (stripos($custom_field->format, 'IP') !== false) {
             $custom_field->format = 'ip';
             // Email
         } elseif (stripos($custom_field->format, 'EMAIL') !== false) {
             $custom_field->format = 'email';
             // MAC
         } elseif (stripos($custom_field->format, 'regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/') !== false) {
             $custom_field->format = 'regex:/^[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}:[a-fA-F0-9]{2}$/';
             // Date
         } elseif (stripos($custom_field->format, 'DATE') !== false) {
             $custom_field->format = 'date';
             // URL
         } elseif (stripos($custom_field->format, 'URL') !== false) {
             $custom_field->format = 'url';
             // ANY
         } elseif (stripos($custom_field->format, 'ANY') !== false) {
             $custom_field->format = '';
             // Fix any custom regexes
         } else {
             $tmp_custom = str_replace('regex:/^', '', $custom_field->format);
             $tmp_custom = str_replace('$/', '', $tmp_custom);
             $custom_field->format = 'regex:/^' . $tmp_custom . '$/';
         }
         $custom_field->save();
     }
 }
Beispiel #4
0
 /**
  * Query builder scope to search on text for complex Bootstrap Tables API
  *
  * @param  Illuminate\Database\Query\Builder  $query  Query builder instance
  * @param  text                              $search      Search term
  *
  * @return Illuminate\Database\Query\Builder          Modified query builder
  */
 public function scopeTextSearch($query, $search)
 {
     $search = explode(' OR ', $search);
     return $query->where(function ($query) use($search) {
         foreach ($search as $search) {
             $query->whereHas('model', function ($query) use($search) {
                 $query->whereHas('category', function ($query) use($search) {
                     $query->where(function ($query) use($search) {
                         $query->where('categories.name', 'LIKE', '%' . $search . '%')->orWhere('models.name', 'LIKE', '%' . $search . '%')->orWhere('models.modelno', 'LIKE', '%' . $search . '%');
                     });
                 });
             })->orWhereHas('model', function ($query) use($search) {
                 $query->whereHas('manufacturer', function ($query) use($search) {
                     $query->where(function ($query) use($search) {
                         $query->where('manufacturers.name', 'LIKE', '%' . $search . '%');
                     });
                 });
             })->orWhere(function ($query) use($search) {
                 $query->whereHas('assetstatus', function ($query) use($search) {
                     $query->where('status_labels.name', 'LIKE', '%' . $search . '%');
                 });
             })->orWhere(function ($query) use($search) {
                 $query->whereHas('company', function ($query) use($search) {
                     $query->where('companies.name', 'LIKE', '%' . $search . '%');
                 });
             })->orWhere(function ($query) use($search) {
                 $query->whereHas('defaultLoc', function ($query) use($search) {
                     $query->where('locations.name', 'LIKE', '%' . $search . '%');
                 });
             })->orWhere(function ($query) use($search) {
                 $query->whereHas('assigneduser', function ($query) use($search) {
                     $query->where(function ($query) use($search) {
                         $query->where('users.first_name', 'LIKE', '%' . $search . '%')->orWhere('users.last_name', 'LIKE', '%' . $search . '%')->orWhere(function ($query) use($search) {
                             $query->whereHas('userloc', function ($query) use($search) {
                                 $query->where('locations.name', 'LIKE', '%' . $search . '%');
                             });
                         });
                     });
                 });
             })->orWhere('assets.name', 'LIKE', '%' . $search . '%')->orWhere('assets.asset_tag', 'LIKE', '%' . $search . '%')->orWhere('assets.serial', 'LIKE', '%' . $search . '%')->orWhere('assets.order_number', 'LIKE', '%' . $search . '%')->orWhere('assets.notes', 'LIKE', '%' . $search . '%');
         }
         foreach (CustomField::all() as $field) {
             $query->orWhere($field->db_column_name(), 'LIKE', "%{$search}%");
         }
     });
 }
Beispiel #5
0
 /**
  * Generates the JSON used to display the asset listing.
  *
  * @author [A. Gianotto] [<*****@*****.**>]
  * @param  string  $status
  * @since [v2.0]
  * @return String JSON
  */
 public function getDatatable(Request $request, $status = null)
 {
     $assets = Company::scopeCompanyables(Asset::select('assets.*'))->with('model', 'assigneduser', 'assigneduser.userloc', 'assetstatus', 'defaultLoc', 'assetlog', 'model', 'model.category', 'model.manufacturer', 'model.fieldset', 'assetstatus', 'assetloc', 'company')->Hardware();
     if ($request->has('search')) {
         $assets = $assets->TextSearch(e($request->get('search')));
     }
     if ($request->has('offset')) {
         $offset = e($request->get('offset'));
     } else {
         $offset = 0;
     }
     if ($request->has('limit')) {
         $limit = e($request->get('limit'));
     } else {
         $limit = 50;
     }
     if ($request->has('order_number')) {
         $assets->where('order_number', '=', e($request->get('order_number')));
     }
     switch ($status) {
         case 'Deleted':
             $assets->withTrashed()->Deleted();
             break;
         case 'Pending':
             $assets->Pending();
             break;
         case 'RTD':
             $assets->RTD();
             break;
         case 'Undeployable':
             $assets->Undeployable();
             break;
         case 'Archived':
             $assets->Archived();
             break;
         case 'Requestable':
             $assets->RequestableAssets();
             break;
         case 'Deployed':
             $assets->Deployed();
             break;
         default:
             $assets->NotArchived();
             break;
     }
     if ($request->has('status_id')) {
         $assets->where('status_id', '=', e($request->get('status_id')));
     }
     $allowed_columns = ['id', 'name', 'asset_tag', 'serial', 'model', 'model_number', 'last_checkout', 'category', 'manufacturer', 'notes', 'expected_checkin', 'order_number', 'companyName', 'location', 'image', 'status_label', 'assigned_to', 'created_at', 'purchase_date', 'purchase_cost'];
     $all_custom_fields = CustomField::all();
     //used as a 'cache' of custom fields throughout this page load
     foreach ($all_custom_fields as $field) {
         $allowed_columns[] = $field->db_column_name();
     }
     $order = $request->get('order') === 'asc' ? 'asc' : 'desc';
     $sort = in_array($request->get('sort'), $allowed_columns) ? $request->get('sort') : 'asset_tag';
     switch ($sort) {
         case 'model':
             $assets = $assets->OrderModels($order);
             break;
         case 'model_number':
             $assets = $assets->OrderModelNumber($order);
             break;
         case 'category':
             $assets = $assets->OrderCategory($order);
             break;
         case 'manufacturer':
             $assets = $assets->OrderManufacturer($order);
             break;
         case 'companyName':
             $assets = $assets->OrderCompany($order);
             break;
         case 'location':
             $assets = $assets->OrderLocation($order);
             break;
         case 'status_label':
             $assets = $assets->OrderStatus($order);
             break;
         case 'assigned_to':
             $assets = $assets->OrderAssigned($order);
             break;
         default:
             $assets = $assets->orderBy($sort, $order);
             break;
     }
     $assetCount = $assets->count();
     $assets = $assets->skip($offset)->take($limit)->get();
     $rows = array();
     foreach ($assets as $asset) {
         $inout = '';
         $actions = '<div style="white-space: nowrap;">';
         if ($asset->deleted_at == '') {
             if (Gate::allows('assets.create')) {
                 $actions .= '<a href="' . route('clone/hardware', $asset->id) . '" class="btn btn-info btn-sm" title="Clone asset" data-toggle="tooltip"><i class="fa fa-clone"></i></a> ';
             }
             if (Gate::allows('assets.edit')) {
                 $actions .= '<a href="' . route('update/hardware', $asset->id) . '" class="btn btn-warning btn-sm" title="Edit asset" data-toggle="tooltip"><i class="fa fa-pencil icon-white"></i></a> ';
             }
             if (Gate::allows('assets.delete')) {
                 $actions .= '<a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="' . route('delete/hardware', $asset->id) . '" data-content="' . trans('admin/hardware/message.delete.confirm') . '" data-title="' . trans('general.delete') . ' ' . htmlspecialchars($asset->asset_tag) . '?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a>';
             }
         } elseif ($asset->model->deleted_at == '') {
             $actions .= '<a href="' . route('restore/hardware', $asset->id) . '" title="Restore asset" data-toggle="tooltip" class="btn btn-warning btn-sm"><i class="fa fa-recycle icon-white"></i></a>';
         }
         $actions .= '</div>';
         if ($asset->availableForCheckout()) {
             if (Gate::allows('assets.checkout')) {
                 $inout = '<a href="' . route('checkout/hardware', $asset->id) . '" class="btn btn-info btn-sm" title="Checkout this asset to a user" data-toggle="tooltip">' . trans('general.checkout') . '</a>';
             }
         } else {
             if (Gate::allows('assets.checkin')) {
                 $inout = '<a href="' . route('checkin/hardware', $asset->id) . '" class="btn btn-primary btn-sm" title="Checkin this asset" data-toggle="tooltip">' . trans('general.checkin') . '</a>';
             }
         }
         $purchase_cost = Helper::formatCurrencyOutput($asset->purchase_cost);
         $row = array('checkbox' => '<div class="text-center"><input type="checkbox" name="edit_asset[' . $asset->id . ']" class="one_required"></div>', 'id' => $asset->id, 'image' => $asset->image && $asset->image != '' ? '<img src="' . config('app.url') . '/uploads/assets/' . $asset->image . '" height=50 width=50>' : ($asset->model && $asset->model->image != '' ? '<img src="' . config('app.url') . '/uploads/models/' . $asset->model->image . '" height=40 width=50>' : ''), 'name' => '<a title="' . e($asset->name) . '" href="hardware/' . $asset->id . '/view">' . e($asset->name) . '</a>', 'asset_tag' => '<a title="' . e($asset->asset_tag) . '" href="hardware/' . $asset->id . '/view">' . e($asset->asset_tag) . '</a>', 'serial' => e($asset->serial), 'model' => $asset->model ? (string) link_to('/hardware/models/' . $asset->model->id . '/view', e($asset->model->name)) : 'No model', 'model_number' => $asset->model && $asset->model->modelno ? (string) $asset->model->modelno : '', 'status_label' => $asset->assigneduser ? 'Deployed' : (e($asset->assetstatus) ? e($asset->assetstatus->name) : ''), 'assigned_to' => $asset->assigneduser ? (string) link_to(config('app.url') . '/admin/users/' . $asset->assigned_to . '/view', e($asset->assigneduser->fullName())) : '', 'location' => $asset->assigneduser && $asset->assigneduser->userloc != '' ? (string) link_to('admin/settings/locations/' . $asset->assigneduser->userloc->id . '/view', e($asset->assigneduser->userloc->name)) : ($asset->defaultLoc != '' ? (string) link_to('admin/settings/locations/' . $asset->defaultLoc->id . '/edit', e($asset->defaultLoc->name)) : ''), 'category' => $asset->model && $asset->model->category ? (string) link_to('/admin/settings/categories/' . $asset->model->category->id . '/view', e($asset->model->category->name)) : '', 'manufacturer' => $asset->model && $asset->model->manufacturer ? (string) link_to('/admin/settings/manufacturers/' . $asset->model->manufacturer->id . '/view', e($asset->model->manufacturer->name)) : '', 'eol' => $asset->eol_date() ? $asset->eol_date() : '', 'purchase_cost' => $purchase_cost, 'purchase_date' => $asset->purchase_date ? $asset->purchase_date : '', 'notes' => e($asset->notes), 'order_number' => $asset->order_number != '' ? '<a href="' . config('app.url') . '/hardware?order_number=' . e($asset->order_number) . '">' . e($asset->order_number) . '</a>' : '', 'last_checkout' => $asset->last_checkout != '' ? e($asset->last_checkout) : '', 'expected_checkin' => $asset->expected_checkin != '' ? e($asset->expected_checkin) : '', 'created_at' => $asset->created_at != '' ? e($asset->created_at->format('F j, Y h:iA')) : '', 'change' => $inout ? $inout : '', 'actions' => $actions ? $actions : '', 'companyName' => is_null($asset->company) ? '' : e($asset->company->name));
         foreach ($all_custom_fields as $field) {
             $column_name = $field->db_column_name();
             if ($field->isFieldDecryptable($asset->{$column_name})) {
                 if (Gate::allows('admin')) {
                     if ($field->format == 'URL' && $asset->{$column_name} != '') {
                         $row[$column_name] = '<a href="' . Helper::gracefulDecrypt($field, $asset->{$column_name}) . '" target="_blank">' . Helper::gracefulDecrypt($field, $asset->{$column_name}) . '</a>';
                     } else {
                         $row[$column_name] = Helper::gracefulDecrypt($field, $asset->{$column_name});
                     }
                 } else {
                     $row[$field->db_column_name()] = strtoupper(trans('admin/custom_fields/general.encrypted'));
                 }
             } else {
                 if ($field->format == 'URL' && $asset->{$field->db_column_name()} != '') {
                     $row[$field->db_column_name()] = '<a href="' . $asset->{$field->db_column_name()} . '" target="_blank">' . $asset->{$field->db_column_name()} . '</a>';
                 } else {
                     $row[$field->db_column_name()] = e($asset->{$field->db_column_name()});
                 }
             }
         }
         $rows[] = $row;
     }
     $data = array('total' => $assetCount, 'rows' => $rows);
     return $data;
 }