[ 'class' => \yii\filters\AccessControl::className (), 'rules' => [ // allow authenticated users [ 'actions' => [ 'clear', ], 'allow' => true, 'roles' => [ 'admin' ] ], [ 'actions' => [ 'create', 'index', 'view', 'update', 'list' , 'import-rfid', 'insert', 'recalculate', ], 'allow' => true, 'roles' => [ '@' ] ] , ] // everything else is denied ] ]; } public function actionClear($id){ $model = $this->findModel ( $id ); $customer = $model->customer; $customer->id_customer_card = null; $customer->save(false); Ticket::updateAll(['id_card' => null],['id_card' => $model->id_card]); Helper::flash('success', "Vendég törölve a kártyáról"); $this->redirect(['card/update','id' =>$id]); } /** * Lists all Card models. * * @return mixed */ public function actionIndex() { $searchModel = new CardSearch (); $dataProvider = $searchModel->search ( Yii::$app->request->queryParams ); return $this->render ( 'index', [ 'searchModel' => $searchModel, 'dataProvider' => $dataProvider ] ); } /** * Displays a single Card model. * * @param integer $id * @return mixed */ public function actionView($id) { return $this->render ( 'view', [ 'model' => $this->findModel ( $id ) ] ); } /** * Creates a new Card model. * If creation is successful, the browser will be redirected to the 'view' page. * * @return mixed */ public function actionCreate() { $model = new Card (); $model->status = Card::STATUS_ACTIVE; $model->type = Card::TYPE_RFID; if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { \Yii::$app->session->setFlash ( 'success', 'Card created!' ); if (isset ( $_POST ['create_next'] )) { return $this->redirect ( [ 'create' ] ); } else { return $this->redirect ( [ 'view', 'id' => $model->id_card ] ); } } else { return $this->render ( 'create', [ 'model' => $model ] ); } } /** * Updates an existing Card model. * If update is successful, the browser will be redirected to the 'view' page. * * @param integer $id * @return mixed */ public function actionUpdate($id) { $model = $this->findModel ( $id ); if ($model->load ( Yii::$app->request->post () ) && $model->save ()) { return $this->redirect ( [ 'index' ] ); // return $this->redirect(Yii::$app->request->referrer); } else { return $this->render ( 'update', [ 'model' => $model ] ); } } /** * Deletes an existing Card model. * If deletion is successful, the browser will be redirected to the 'index' page. * * @param integer $id * @return mixed */ public function actionDelete($id) { $this->findModel ( $id )->delete (); return $this->redirect ( [ 'index' ] ); } /** * Finds the Card model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * * @param integer $id * @return Card the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Card::findOne ( $id )) !== null) { return $model; } else { throw new NotFoundHttpException ( 'The requested page does not exist.' ); } } /** * Your controller action to fetch the list */ public function actionList($search = null) { $query = new Query (); $query->select ( [ 'card.number as number', 'customer.name as name', "concat( card.number , case when customer.name is null then '' else customer.name end ) as txt " ] )->from ( Card::tableName () )->join ( "left join", Customer::tableName (), 'card.id_card = customer.id_customer_card' )->where ( ' lower(number) LIKE "%' . strtolower ( $search ) . '%"' )->orderBy ( 'number' ); if (isset ( $_GET ['onlyFree'] ) && $_GET ['onlyFree'] == '1') { $query->andWhere ( 'customer.id_customer is null' ); } $command = $query->createCommand (); $data = $command->queryAll (); $out = [ ]; foreach ( $data as $d ) { $out [] = [ 'number' => $d ['number'], 'name' => $d ['name'], 'txt' => $d ['txt'] ]; } echo Json::encode ( $out ); } public function actionImportRfid() { $model = new CardImportRfidForm (); $arr = []; if (Yii::$app->request->isPost) { $model->file = UploadedFile::getInstance($model, 'file'); // print_r($model->file); // $model->message = "ok"; $file = $model->file->tempName; $file = fopen ( $file , "r" ); $trans = null; $i = 0; $j = 0; while ( ($data = fgetcsv ( $file, 0, "," )) != null ) { // if ($i == 0) { // $i ++; // continue; // } $j++; $number = $key = false; if ( isset($data[0]) ){ $number = $data[0]; } if ( isset($data[1]) ){ $key = $data[1]; } if ( isset($number) && isset($key)){ $item = []; $item['number'] = $number; $item['key'] = Helper::fixAsciiChars( $key); $arr[] = $item; } } $failed = []; $sqls = []; $inserts = []; foreach ($arr as $item ){ $card = Card::find()->andWhere(['number' => $item['number']])->one(); if ( $card != null ){ $card->rfid_key = $item['key']; $sql = "update card set rfid_key = '" . strtolower( $item['key'] )."' where id_card = " .$card->id_card .";"; $sqls[] = $sql; $i++; }else{ // $failed [] = $item; $sql = "insert into card (number,status,type,created_at,updated_at, rfid_key) values("; $sql .= " '" .$item['number'] . "'" ; $sql .= " ," . Card::STATUS_ACTIVE ; $sql .= " ," . Card::TYPE_RFID; $sql .= " ,'" . date("Y-m-d H:i:s") ."'" ; $sql .= " ,'" . date("Y-m-d H:i:s") ."'" ; $sql .=" ,'" .$item['key'] ."'"; $sql .= " );"; $inserts[] = $sql; // rfid_key = '" . strtolower( $item['key'] )."' where id_card = " .$card->id_card .";"; } } $model->message = "rows read: " .$j ." / ". "updated cards: " .$i; $model->message .= "
array size: " . count($arr); $model->message .= "
failed: " . print_r($failed,true); $model->message .= "
sql:"; $model->message .= "
". implode("
", $sqls); $model->message .= "


Inserts


"; $model->message .= "
". implode("
", $inserts); } return $this->render ( 'importRfid.php', [ 'model' => $model ] ); } public function actionInsert() { $model = new CardInsertForm(); $arr = []; if (Yii::$app->request->isPost) { $model->file = UploadedFile::getInstance($model, 'file'); // print_r($model->file); // $model->message = "ok"; $file = $model->file->tempName; $file = fopen ( $file , "r" ); $trans = null; $i = 0; $j = 0; while ( ($data = fgetcsv ( $file, 0, "," )) != null ) { // if ($i == 0) { // $i ++; // continue; // } $j++; $number = $key = false; if ( isset($data[0]) ){ $number = $data[0]; } if ( isset($data[1]) ){ $key = $data[1]; } if ( isset($number) && isset($key) && !strpos($key, "E+") && strlen($key) > 7 ){ $item = []; $item['number'] = $number; $item['key'] = Helper::fixAsciiChars( $key); $arr[] = $item; } } $failed = []; $sqls = []; $inserts = []; foreach ($arr as $item ){ // $failed [] = $item; $sql = "insert into card (number,status,type,created_at,updated_at, rfid_key) values("; $sql .= " '" .$item['number'] . "'" ; $sql .= " ," . Card::STATUS_ACTIVE ; $sql .= " ," . Card::TYPE_RFID; $sql .= " ,'" . date("Y-m-d H:i:s") ."'" ; $sql .= " ,'" . date("Y-m-d H:i:s") ."'" ; $sql .=" ,'" .$item['key'] ."'"; $sql .= " );"; $inserts[] = $sql; } $model->message = "rows read: " .$j ." / ". "updated cards: " .$i; $model->message .= "
array size: " . count($arr); $model->message .= "
failed: " . print_r($failed,true); $model->message .= "
sql:"; $model->message .= "
". implode("
", $sqls); $model->message .= "


Inserts


"; $model->message .= "
". implode("
", $inserts); $inserts = implode("\n", $inserts); header("Content-type:text/plain"); //for pdf file //header('Content-Type:text/plain; charset=ISO-8859-15'); //if you want to read text file using text/plain header header('Content-Disposition: attachment; filename="insert.sql"'); header('Content-Length: ' . strlen($inserts)); echo $inserts; exit(); } return $this->render ( 'insert.php', [ 'model' => $model ] ); } public function actionRecalculate(){ if (Yii::$app->request->isPost) { $connection = \Yii::$app->db; $command = $connection->createCommand( Ticket::$SQL_UPDATE ); $result = $command->execute(); \Yii::info("Tickets updated: " . $result ); \Yii::$app->session->setFlash('success', 'Módosított bérletek száma: ' . $result); } return $this->render("recalculate"); } }