birzha/plugins/rainlab/location/models/Country.php

109 lines
2.4 KiB
PHP

<?php namespace RainLab\Location\Models;
use Http;
use Form;
use Model;
use Exception;
/**
* Country Model
*/
class Country extends Model
{
use \October\Rain\Database\Traits\Validation;
/**
* @var string The database table used by the model.
*/
public $table = 'rainlab_location_countries';
/**
* @var array Behaviours implemented by this model.
*/
public $implement = ['@RainLab.Translate.Behaviors.TranslatableModel'];
/**
* @var array The translatable table fields.
*/
public $translatable = ['name'];
/**
* @var array Guarded fields
*/
protected $guarded = ['*'];
/**
* @var array Fillable fields
*/
protected $fillable = ['name', 'code', 'calling_code'];
/**
* @var array Validation rules
*/
public $rules = [
'name' => 'required',
'code' => 'unique:rainlab_location_countries',
];
/**
* @var array Relations
*/
public $hasMany = [
'states' => ['RainLab\Location\Models\State']
];
/**
* @var bool Indicates if the model should be timestamped.
*/
public $timestamps = false;
/**
* @var array Cache for nameList() method
*/
protected static $nameList = null;
public static function getNameList()
{
if (self::$nameList) {
return self::$nameList;
}
return self::$nameList = self::isEnabled()->orderBy('is_pinned', 'desc')->orderBy('name', 'asc')->lists('name', 'id');
}
public static function formSelect($name, $selectedValue = null, $options = [])
{
return Form::select($name, self::getNameList(), $selectedValue, $options);
}
public function scopeIsEnabled($query)
{
return $query->where('is_enabled', true);
}
public static function getDefault()
{
return ($defaultId = Setting::get('default_country'))
? static::find($defaultId)
: null;
}
/**
* Attempts to find a country from the IP address.
* @param string $ipAddress
* @return self
*/
public static function getFromIp($ipAddress)
{
try {
$body = (string) Http::get('http://ip2c.org/?ip='.$ipAddress);
if (substr($body, 0, 1) === '1') {
$code = explode(';', $body)[1];
return static::where('code', $code)->first();
}
}
catch (Exception $e) {}
}
}