snipe-it/app/Models/CustomField.php

192 lines
5.3 KiB
PHP
Raw Normal View History

2016-03-25 01:18:05 -07:00
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Schema;
use Watson\Validating\ValidatingTrait;
use App\Http\Traits\UniqueUndeletedTrait;
use ForceUTF8\Encoding;
use EasySlugger\Utf8Slugger;
use Patchwork\Utf8;
2016-03-25 01:18:05 -07:00
class CustomField extends Model
{
use ValidatingTrait, UniqueUndeletedTrait;
2016-03-25 01:18:05 -07:00
public $guarded=["id"];
public static $PredefinedFormats=[
2016-08-23 15:51:14 -07:00
"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",
2016-03-25 01:18:05 -07:00
];
public $rules = [
"name" => "required|unique:custom_fields"
2016-03-25 01:18:05 -07:00
];
public static $table_name="assets";
public static function name_to_db_name($name)
{
return "_snipeit_".preg_replace("/[^a-zA-Z0-9]/", "_", strtolower($name));
}
public static function boot()
{
self::created(function ($custom_field)
{
\Log::debug("\n\nCreating Original Name: ".$custom_field->name);
\Log::debug('Creating Column Name: '.$custom_field->convertUnicodeDbSlug());
2016-03-25 01:18:05 -07:00
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug())) {
\Log::debug('Column exists. Nothing to do here.');
2016-03-25 01:18:05 -07:00
return false;
}
Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
$table->text($custom_field->convertUnicodeDbSlug())->nullable();
2016-03-25 01:18:05 -07:00
});
$custom_field->db_column = $custom_field->convertUnicodeDbSlug();
$custom_field->save();
2016-03-25 01:18:05 -07:00
});
self::updating(function ($custom_field)
{
\Log::debug('Updating column name');
\Log::debug('Updating Original Name: '.$custom_field->getOriginal("name"));
\Log::debug('Updating New Column Name: '.$custom_field->convertUnicodeDbSlug());
2016-03-25 01:18:05 -07:00
if ($custom_field->isDirty("name")) {
if (Schema::hasColumn(CustomField::$table_name, $custom_field->convertUnicodeDbSlug()))
{
\Log::debug('Column already exists. Nothing to update.');
return true;
2016-03-25 01:18:05 -07:00
}
\Log::debug('Updating column name to.'.$custom_field->convertUnicodeDbSlug());
return Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
$table->renameColumn($custom_field->convertUnicodeDbSlug($custom_field->getOriginal("name")), $custom_field->convertUnicodeDbSlug());
});
2016-03-25 01:18:05 -07:00
}
return true;
});
self::deleting(function ($custom_field)
{
2016-12-29 14:02:18 -08:00
return Schema::table(CustomField::$table_name, function ($table) use ($custom_field) {
$table->dropColumn($custom_field->convertUnicodeDbSlug());
});
2016-03-25 01:18:05 -07:00
});
}
public function fieldset()
{
return $this->belongsToMany('\App\Models\CustomFieldset'); //?!?!?!?!?!?
}
public function user()
{
return $this->belongsTo('\App\Models\User');
}
public function check_format($value)
{
return preg_match('/^'.$this->attributes['format'].'$/', $value)===1;
}
public function db_column_name()
{
return self::convertUnicodeDbSlug();
2016-03-25 01:18:05 -07:00
}
//mutators for 'format' attribute
public function getFormatAttribute($value)
{
foreach (self::$PredefinedFormats as $name => $pattern) {
if ($pattern===$value) {
return $name;
}
}
return $value;
}
public function setFormatAttribute($value)
{
if (isset(self::$PredefinedFormats[$value])) {
$this->attributes['format']=self::$PredefinedFormats[$value];
} else {
$this->attributes['format']=$value;
}
}
/**
* Format a value string as an array for select boxes and checkboxes.
*
* @author [A. Gianotto] [<snipe@snipe.net>]
* @since [v3.4]
* @return Array
*/
2016-12-29 14:02:18 -08:00
public function formatFieldValuesAsArray()
{
$arr = preg_split("/\\r\\n|\\r|\\n/", $this->field_values);
2016-08-25 21:04:10 -07:00
$result[''] = 'Select '.strtolower($this->format);
for ($x = 0; $x < count($arr); $x++) {
$arr_parts = explode('|', $arr[$x]);
2016-08-25 21:04:10 -07:00
if ($arr_parts[0]!='') {
2016-12-29 14:02:18 -08:00
if (key_exists('1', $arr_parts)) {
2016-08-25 21:04:10 -07:00
$result[$arr_parts[0]] = $arr_parts[1];
} else {
$result[$arr_parts[0]] = $arr_parts[0];
}
}
2016-08-25 21:04:10 -07:00
}
2016-08-25 21:04:10 -07:00
return $result;
}
2016-08-25 21:04:10 -07:00
2016-12-29 14:02:18 -08:00
public function isFieldDecryptable($string)
{
2016-08-25 21:04:10 -07:00
if (($this->field_encrypted=='1') && ($string!='')) {
return true;
}
return false;
}
public function convertUnicodeDbSlug($original = null)
{
$name = $original ? $original : $this->name;
$id = $this->id ? $this->id : 'xx';
if (!function_exists('transliterator_transliterate')) {
$long_slug = str_slug('_snipeit_'.\Patchwork\Utf8::utf8_encode(trim($name)),'_');
} else {
$long_slug = '_snipeit_'.Utf8Slugger::slugify($name,'_');
}
return substr($long_slug, 0, 50).'_'.$id;
}
2016-03-25 01:18:05 -07:00
}