Blame view

protected/modules/admin/components/CrudController.php 3.16 KB
a1684257   Administrator   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
  <?php
  
  class CrudController extends AdminController
  {
      public $actionsMenu;
      public $layout = 'crud_layout';
      public $defaultAction = 'admin';
  
      public $labels = array(
          'admin' => 'Управление',
          'create' => 'Добавить',
          'update' => 'Редактировать',
      );
  
      public $modelName;
  
      /**
       * Creates a new model.
       * If creation is successful, the browser will be redirected to the 'view' page.
       */
      public function actionCreate()
      {
          $model = new $this->modelName;
  
          // Uncomment the following line if AJAX validation is needed
          // $this->performAjaxValidation($model);
  
          if (isset($_POST[$this->modelName])) {
              $model->attributes = $_POST[$this->modelName];
              if ($model->save())
                  $this->redirect(array('admin'));
          }
  
          $this->render('create', array(
              'model' => $model,
          ));
      }
  
      /**
       * Updates a particular model.
       * If update is successful, the browser will be redirected to the 'view' page.
       * @param integer $id the ID of the model to be updated
       */
      public function actionUpdate($id)
      {
          $model = $this->loadModel($id);
  
          if (isset($_POST[$this->modelName])) {
              $model->attributes = $_POST[$this->modelName];
              if ($model->save())
                  $this->redirect(array('admin'));
          }
  
          $this->render('update', array(
              'model' => $model,
          ));
      }
  
      /**
       * Deletes a particular model.
       * If deletion is successful, the browser will be redirected to the 'admin' page.
       * @param integer $id the ID of the model to be deleted
       */
      public function actionDelete($id)
      {
          if (Yii::app()->request->isPostRequest) {
              // we only allow deletion via POST request
              $this->loadModel($id)->delete();
  
              // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
              if (!isset($_GET['ajax']))
                  $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
          } else
              throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
      }
  
      /**
       * Manages all models.
       */
      public function actionAdmin()
      {
          $model = new $this->modelName('search');
          $model->unsetAttributes(); // clear any default values
          if (isset($_GET[$this->modelName]))
              $model->attributes = $_GET[$this->modelName];
  
          $this->render('admin', array(
              'model' => $model,
          ));
      }
  
      /**
       * Returns the data model based on the primary key given in the GET variable.
       * If the data model is not found, an HTTP exception will be raised.
       * @param integer the ID of the model to be loaded
       */
      public function loadModel($id)
      {
          $class = $this->modelName;
          $model = call_user_func_array(array(&$class, 'model'), array());
  
  
          $model = $model->findByPk($id);
          if ($model === null)
              throw new CHttpException(404, 'The requested page does not exist.');
          return $model;
      }
  }