Untitled
unknown
php
a year ago
10 kB
9
Indexable
class QueuesSearch extends Queues {
public function rules() {
return [
[['operatorNumber', 'queue_monitor_name'], 'safe'],
];
}
public function attributes() {
return array_merge(parent::attributes(), ['queue_monitor_name']);
}
public function search($params) {
$query = Queues::find()->joinWith('sipUsers')->all();
foreach($query as $row){
var_dump($row->sipUsers);
die;
}
$sort = new Sort([
'attributes' => [
'operatorNumber' => [
'asc' => ['membername' => SORT_ASC],
'desc' => ['membername' => SORT_DESC],
'default' => SORT_DESC,
],
'queue_monitor_name' => [
'asc' => ['sipfriends.queue_monitor_name' => SORT_ASC],
'desc' => ['sipfriends.queue_monitor_name' => SORT_DESC],
'default' => SORT_ASC,
],
],
'defaultOrder' => [
'operatorNumber' => SORT_DESC
],
]);
$data_provider = new ActiveDataProvider([
'query' => $query,
'pagination' => [
'pageSize' => 10
],
'sort' => $sort,
]);
if (!($this->load($params) && $this->validate())) {
return $data_provider;
}
die;
$query->andFilterWhere(['like', 'membername', $this->operatorNumber]);
$query->andFilterWhere(['like', 'sipfriends.queue_monitor_name', $this->queue_monitor_name]);
return $data_provider;
}
}
class Queues extends ActiveRecord {
const IFACE_PREFIX = 'SIP';
const LOCAL = FALSE;
const LOCAL_CONTEXT = '';
const USE_N = TRUE;
public static function tableName() {
return 'queue_members';
}
public static function primaryKey() {
return ['uniqueid'];
}
public function setOperatorNumber($value) {
$this->membername = $value;
$this->interface = (self::LOCAL) ? 'LOCAL/' . $value . '@' . self::LOCAL_CONTEXT . ((self::USE_N) ? '/n' : '') : self::IFACE_PREFIX . '/' . $value;
$this->state_interface = self::IFACE_PREFIX . '/' . $value;
}
public function getOperatorNumber() {
return $this->membername;
}
public function getSipUsers() {
return $this->hasOne(SipUsers::class, ['name' => 'membername']);
}
public function rules() {
$inner_number_pat = Yii::$app->params['NUM_PATTERNS']['inner'];
$inner_number_pat = '/^' . Utility::parseNumber($inner_number_pat) . '$/';
return [
['membername', 'match', 'pattern' => $inner_number_pat],
['queue_name', 'match', 'pattern' => '/^[A-Za-z\-\_\d]+$/'],
['interface', 'match', 'pattern' => '/^((PJSIP\/[A-Za-z\-\_\d]+)|(SIP\/[A-Za-z\-\_\d]+)|(LOCAL\/[A-Za-z\-\_\d]+\@[A-Za-z\-\_\d]+(\/n)?))$/i'],
['state_interface', 'match', 'pattern' => '/^((PJSIP\/[A-Za-z\-\_\d]+)|(SIP\/[A-Za-z\-\_\d]+))$/i'],
['penalty', 'integer', 'min' => 0],
['paused', 'integer', 'min' => 0, 'max' => 1],
['operatorNumber', 'match', 'pattern' => $inner_number_pat],
[['penalty', 'paused'], 'default', 'value' => 0],
['operatorNumber', 'unique', 'targetAttribute' => 'membername'],
[['operatorNumber', 'queue_name', 'interface', 'penalty', 'paused'], 'required']
];
}
public function attributeLabels() {
return [
'operatorNumber' => Yii::t('adm-queues', 'Номер'),
'queue_monitor_name' => Yii::t('adm-queues', 'Имя для монитора очередей')
];
}
}
class SipUsers extends ActiveRecord {
public static function tableName() {
return 'sipfriends';
}
public static function primaryKey() {
return ['id'];
}
public function setCalleridForm($value) {
$this->callerid = '"' . $value . '" <' . $this->name . '>';
}
public function getCalleridForm() {
$first_quote = mb_strpos($this->callerid, '"');
if($first_quote === FALSE) return NULL;
$second_quote = mb_strpos($this->callerid, '"', $first_quote + 1);
if($second_quote === FALSE) return NULL;
return mb_substr($this->callerid, $first_quote + 1, $second_quote - $first_quote - 1);
}
public function getCallLimitForm() {
return $this->getAttribute('call-limit');
}
public function setCallLimitForm($value) {
$this->setAttribute('call-limit', $value);
}
public function setNameForm($value) {
$this->name = $value;
$this->defaultuser = $value;
}
public function getNameForm() {
return $this->name;
}
public function rules() {
$inner_number_pat = Yii::$app->params['NUM_PATTERNS']['inner'];
$inner_number_pat = '/^' . Utility::parseNumber($inner_number_pat) . '$/';
return [
['context', 'match', 'pattern' => '/^[A-Za-z\-\_\d]+$/'],
['secret', 'match', 'pattern' => '/^[A-Za-z\d#?!@$%^&*-_]{8,50}$/'],
['nameForm', 'match', 'pattern' => $inner_number_pat],
[['deny', 'permit'], 'match', 'pattern' => '/^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}\/((((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4})|(\d{1,2}))(\; *((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4}\/((((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.?\b){4})|(\d{1,2})))*$/'],
['nat', 'in', 'range' => ['yes', 'no', 'never', 'route', 'force_rport,comedia']],
[['directmedia', 'callcounter'], 'in', 'range' => ['yes', 'no']],
['qualifyfreq', 'integer', 'min' => 0, 'max' => 999999],
[['calleridForm', 'queue_monitor_name'], 'filter', 'filter' => 'app\models\SipUsers::filter_name'],
['callLimitForm', 'integer', 'min' => 0, 'max' => 30],
['context', 'default', 'value' => 'local'],
[['deny', 'permit'], 'default', 'value' => '0.0.0.0/0'],
[['callcounter'], 'default', 'value' => 'yes'],
[['directmedia'], 'default', 'value' => 'no'],
['qualifyfreq', 'default', 'value' => 15],
['callLimitForm', 'default', 'value' => 2],
['nat', 'default', 'value' => 'force_rport,comedia'],
['nameForm', 'unique', 'targetAttribute' => 'name'],
[['secret', 'nameForm', 'deny', 'permit', 'calleridForm'], 'required'],
];
}
public function attributeLabels()
{
return [
'context' => Yii::t('sip-users', 'Контекст'),
'secret' => Yii::t('sip-users', 'Пароль'),
'nameForm' => Yii::t('sip-users', 'Номер'),
'deny' => Yii::t('sip-users', 'Запретить IP'),
'permit' => Yii::t('sip-users', 'Разрешить IP'),
'qualifyfreq' => Yii::t('sip-users', 'Частота qualify'),
'calleridForm' => Yii::t('sip-users', 'CallerID(name)'),
'queue_monitor_name' => Yii::t('sip-users', 'Имя для монитора очередей'),
'callLimitForm' => Yii::t('sip-users', 'Одновременных звонков'),
];
}
public static function filter_name($value) {
return preg_filter('/\n*[^a-zа-яёіїєґ \d\.\,\/\\\(\)]*/ui', '', $value);
}
}
class QueueAdminController extends Controller {
public function actionIndex() {
$search_model = new QueuesSearch();
$data_provider = $search_model->search(Yii::$app->request->post());
return $this->render('index', [
'data_provider' => $data_provider,
'search_model' => $search_model,
]);
}
}
VIEW:
<?php Pjax::begin(['id' => 'pjax-id', 'timeout' => FALSE, 'enablePushState' => FALSE, 'clientOptions' => ['method' => 'POST']]); ?>
<?= GridView::widget([
'dataProvider' => $data_provider,
'filterModel' => $search_model,
'formatter' => [
'class' => 'yii\i18n\Formatter',
'nullDisplay' => '',
],
'columns' => [
['class' => 'yii\grid\SerialColumn', 'contentOptions' => ['class' => 'text-center'], 'headerOptions' => ['style' => 'min-width: 35px; max-width: 35px']],
['attribute' => 'operatorNumber', 'contentOptions' => ['style' => 'min-width: 69px; max-width: 69px', 'class' => 'text-center', 'headerOptions' => ['style' => 'min-width: 69px; max-width: 69px']],
'encodeLabel' => FALSE , 'label' => '<i class="fa-regular fa-address-book"></i>', 'headerOptions' => ['title' => Yii::t('adm-queues', 'Номер')]],
['attribute' => 'queue_monitor_name', 'contentOptions' => ['style' => 'width: 100%', 'class' => 'text-truncate'],
'headerOptions' => ['style' => 'width: 100%']],
[
'class' => ActionColumn::className(),
'urlCreator' => function ($action, Queues $model, $key, $index, $column) {
return Url::toRoute([$action, 'id' => $model->uniqueid]);
},
'template' => '<div class="btn-group d-inline-block" role="group"> {delete} </div>',
'buttonOptions' => ['class' => 'btn btn-sm'],
'contentOptions' => ['class' => 'text-truncate text-center'],
'headerOptions' => ['style' => 'min-width: 55px; max-width: 55px'],
],
],
'options' => ['class' => 'grid-view grid-view-adm-queues'],
'tableOptions' => ['class' => 'table table-striped table-hover rounded-3 table-grid', 'style' => 'overflow: hidden'],
'pager' => ['class' => 'yii\bootstrap5\LinkPager'],
]); ?>
<?php Pjax::end(); ?>Editor is loading...
Leave a Comment