Untitled
unknown
php
a year ago
10 kB
9
Indexable
<?php 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