Example #1
0
 /**
  * 用户组绑定权限
  */
 public function actionIndex($id)
 {
     $id = (int) $id;
     $model = Group::model()->findByPk($id);
     if ($model->access) {
         foreach ($model->access as $g) {
             $access[] = $g->access_id;
         }
     }
     $cache = cache('auth_controller_file');
     if (!$cache) {
         $d = $this->_get_modules(\Yii::getPathOfAlias('application.modules'));
         if ($d) {
             Access::generate($d);
         }
         DirHelper::$kep_list_file = false;
         cache('auth_controller_file', true);
     }
     $rows = DB::all('access', array('select' => "id,name,pid"));
     foreach ($rows as $v) {
         $out[$v['id']] = $v;
     }
     $rows = ArrHelper::_tree_id($rows);
     if ($_POST) {
         $auth = $_POST['auth'];
         GroupAccess::saveAccess($id, $auth);
         cache('acl', false);
         flash('success', __('set access success'));
         $this->redirect(url('admin/auth/index', array('id' => $id)));
     }
     return $this->render('index', array('rows' => $rows, 'out' => $out, 'model' => $model, 'id' => $id, 'access' => $access));
 }
Example #2
0
 static function category()
 {
     $db = Yii::app()->db->createCommand();
     $db->setFetchMode(PDO::FETCH_OBJ);
     $rows = $db->from('category')->queryAll();
     if ($rows) {
         foreach ($rows as $v) {
             $tree[$v->id] = $v;
         }
         $category = ArrHelper::tree($tree);
     }
     return array($category, $tree);
 }
Example #3
0
 /**
  * 返回access 里面name
  */
 function access($access_id = null)
 {
     $model = Access::model()->findAll();
     if (!$access_id) {
         $access_id = $this->access_id;
     }
     $t = \ArrHelper::parentTree($model, $access_id);
     unset($s);
     foreach ($t as $v) {
         $s .= $v . ".";
     }
     return substr($s, 0, -1);
 }
Example #4
0
 /**
  * 用户绑定到组
  */
 public function actionBind($id)
 {
     $id = (int) $id;
     $model = User::model()->findByPk($id);
     foreach ($model->groups as $g) {
         $groups[] = $g->group_id;
     }
     $rows = Group::model()->findAll();
     if ($rows) {
         $rows = \ArrHelper::model_tree($rows);
     }
     if ($_POST) {
         $group = $_POST['group'];
         //绑定用户到组
         UserGroup::UserGroupSave($id, $group);
         flash('success', __('bin user group success') . " # " . $id);
         $this->redirect(url('admin/user/index', array('id' => $id)));
     }
     return $this->render('bind', array('rows' => $rows, 'groups' => $groups, 'model' => $model, 'id' => $id, 'self' => $model->yourself));
 }
Example #5
0
echo CHtml::submitButton($model->isNewRecord ? __('create') : __('save'), array('class' => 'btn btn-primary'));
?>
	</div>

<?php 
$this->endWidget();
?>
	
<?php 
/**
* 字段类型 使用AJAX
* 数据库表名及字段名
*/
$rows = CDB('SHOW TABLES')->queryAll();
foreach ($rows as $v) {
    $mysql_table = ArrHelper::first($v);
    if (in_array($mysql_table, array('node_field', 'node_content'))) {
        continue;
    }
    $row = CDB("SHOW  COLUMNS FROM  {$mysql_table}")->queryAll();
    foreach ($row as $k) {
        $f = $k['Field'];
        if (!in_array($f, array('uid', 'created', 'id', 'updated', 'language_id', 'vid', 'sort', 'display')) && strpos($f, 'id') === false) {
            $ajax_str .= "'" . $mysql_table . '.' . $f . "',";
        }
    }
}
$ajax_str = substr($ajax_str, 0, -1);
/**
* ajax 自动完成的验证规则
*/
Example #6
0
 /**
  * 向上生成tree
  */
 static function parentTree($data = array(), $parent = null, $root = 0, $value = 'name', $id = 'id', $pid = 'pid')
 {
     self::$_j = 0;
     if (self::$_j == 0) {
         self::$_ptree = array();
     }
     foreach ($data as $v) {
         $out[$v->{$id}] = $v->{$value};
     }
     foreach ($data as $v) {
         if ($v->{$id} == $parent && $v->{$pid} != $root) {
             self::$_j++;
             self::parentTree($data, $v->{$pid}, $root, $value, $id, $pid);
         }
     }
     self::$_ptree[$parent] = $out[$parent];
     return self::$_ptree;
 }
Example #7
0
 /**
  * Извлекает и валидирует входные данные - get параметры
  */
 private function parseRequest()
 {
     $form = ArrHelper::extract($_GET, ['page', 'category', 'order_by']);
     $this->page = is_null($form->page) ? $this->page : (int) $form->page;
     $this->category = is_null($form->category) ? $this->category : (int) $form->category;
     switch ($form->order_by) {
         case 'name_desc':
             $this->order_by = ' A.name DESC';
             break;
         case 'name_asc':
             $this->order_by = ' A.name ASC';
             break;
         case 'date_desc':
             $this->order_by = ' A.created_at DESC';
             break;
         case 'date_asc':
             $this->order_by = ' A.created_at ASC';
             break;
         default:
             $this->order_by = ' A.created_at DESC';
             break;
     }
 }
Example #8
0
 /**
 * 
 $criteria =  new CDbCriteria();
 $criteria->condition = "id = 1 or id =1";
 $node = Node::find('post',$criteria); 
 Node::find('post',1); 
 */
 static function find($table, $criteria, $pager = false, $pageSize = 10)
 {
     if (!is_object($criteria)) {
         $id = $criteria;
     }
     //所以字段key以及对应的model
     $cache = cache('node__field_table');
     $now = $cache[$table];
     $realTable = "field_" . $table;
     //设置NodeModel的表名
     NodeModel::$_table = $realTable;
     $t = new NodeModel();
     $t->refreshMetaData();
     if (is_object($criteria)) {
         if (true === $pager) {
             $count = NodeModel::model()->count($criteria);
             $pages = new CPagination($count);
             $pages->pageSize = $pageSize;
             $pages->applyLimit($criteria);
         }
         $posts = NodeModel::model()->findAll($criteria);
         if (!$posts) {
             return null;
         }
         foreach ($posts as $r) {
             $allRows[] = static::find($table, $r->id);
         }
         if (true === $pager) {
             $out = array('posts' => $allRows, 'pages' => $pages);
             return $out;
         }
         if ($criteria->limit == 1) {
             return ArrHelper::first($allRows);
         }
         return $allRows;
     }
     $fields = cache('node__content_field');
     if (!fields) {
         return null;
     }
     $rows = NodeModel::model()->findByPk($id);
     foreach ($fields[$table] as $k => $v) {
         $row[$k] = $rows->{$k};
     }
     //没有缓存是有问题的
     if (!$cache) {
         return $row;
     }
     foreach ($now as $k => $v) {
         $name = trim($v->name);
         $_relation_table = $realTable . "_" . $name;
         //真实的第三方表的内容
         $deep = $v->_relation_table;
         //是多个值的,并且是关联其他表的情况
         if ($v->relation && $v->mvalue == 1) {
             $allR = CDB()->from($_relation_table)->where('nid=:nid', array(':nid' => $id))->queryAll();
             if ($allR) {
                 foreach ($allR as $key => $al) {
                     $value = $al['value'];
                     $values = CDB()->from($deep)->where('id=:id', array(':id' => $value))->queryRow();
                     $all[$name][$value] = $values;
                 }
                 foreach ($all as $key => $value) {
                     $row[$key] = $value;
                 }
             }
         } else {
             if ($v->relation) {
                 $value = CDB()->from($deep)->where('id=:id', array(':id' => $row[$name]))->queryRow();
                 $row[$name] = $value;
             }
         }
     }
     return $row;
 }
Example #9
0
 /**
  * 显示 向上的树结构
  */
 function getGroup_tree()
 {
     if (0 == $this->pid) {
         return __('root');
     }
     $data = Group::model()->findAll();
     $out = ArrHelper::parentTree($data, $this->pid);
     return implode("<br>", $out);
 }
Example #10
0
<?php

/**
* language 表配置
*/
$db = Yii::app()->db->createCommand();
$db->setFetchMode(PDO::FETCH_OBJ);
$rows = $db->from('category')->queryAll();
if ($rows) {
    foreach ($rows as $v) {
        $tree[$v->id] = $v;
    }
    $arr = ArrHelper::tree($tree);
}
$arr[0] = __('please select');
/**
* 分类 默认第一个显示PID为0的,
* 一层层向下,直到没有下层,将不显示超链接,直接显示字段name的值
*/
function admin_config_category($v)
{
    $row = Yii::app()->db->createCommand()->from('category')->where("pid=:pid", array(':pid' => $v['id']))->queryRow();
    if ($row) {
        return "<a href='" . url('admin/category/index', array('pid' => $v['id'])) . "'>" . $v['name'] . "</a>";
    }
    return $v['name'];
}
return array('name' => array('type' => 'input', 'index' => true, '_value' => "php:admin_config_category"), 'pid' => array('type' => 'select', 'datas' => $arr), '_rules' => array(array('name', 'required')), '_error' => 1);
Example #11
0
 function run()
 {
     $this->db = Yii::app()->db->createCommand();
     //取得文件完整路径
     $file = Yii::getPathOfAlias($this->config) . '.php';
     //取得文件配置信息
     $row = self::loadFile($file);
     $this->model = new AutoModel();
     //验证规则
     $this->model->rules = $row['_rules'];
     $_AutoModel = $row['_AutoModel'];
     //关联表的表名
     $this->relation_table = $row['_relation_table'];
     $_config = cache('config');
     if (!$_config['mlanguage']) {
         unset($row['_multiLanguage'], $row['language_id']);
     }
     //判断是不是启用了多语言
     $this->_multiLanguage = $_multiLanguage = $row['_multiLanguage'];
     $data['error'] = $row['_error'];
     unset($row['_rules'], $row['_error'], $row['_AutoModel'], $row['_multiLanguage'], $row['_relation_table']);
     $this->row = $row;
     if (!$this->table) {
         //取得数据库的名称
         $this->table = substr($this->config, strrpos($this->config, '.') + 1);
     }
     //判断是否是更新
     if (true === $this->save) {
         $id = (int) $this->id;
         if ($id) {
             $dbRow = $this->db->from($this->table)->where('id=:id', array(':id' => $id))->queryRow();
             if ($dbRow) {
                 $this->update = true;
                 $node_id = $dbRow['id'];
                 //取数据库中原来的UUID
                 $uuid = $dbRow['uuid'];
                 foreach ($row as $key => $value) {
                     $row[$key]['value'] = $dbRow[$key];
                     $this->model->{$key} = $dbRow[$key];
                 }
                 /**
                  * 取得关联表的值
                  */
                 if ($this->relation_table) {
                     // key是字段名 ,value是表名
                     foreach ($this->relation_table as $key => $value) {
                         $allR = CDB()->from($value)->where('nid=:nid', array(':nid' => $node_id))->queryAll();
                         if ($allR) {
                             foreach ($allR as $al) {
                                 $all[$key][] = $al['value'];
                             }
                             foreach ($all as $k => $v) {
                                 $_POST['Field'][$k] = $v;
                             }
                         }
                     }
                 }
             }
         }
         //设置模型对应的属性,供自动翻译多语言
         $this->model->set_attrs($row);
         $fixVid = null;
         //启用多语言判断,多语言一定是有VID的
         if (true === $_multiLanguage) {
             if ($dbRow['vid'] && $dbRow['language_id'] != trim($_POST['AutoModel']['language_id'])) {
                 $fixVid = $dbRow['vid'];
             }
             $vid = $dbRow['vid'];
             /**
              * 已经存在的多语言记录
              */
             $all = Yii::app()->db->createCommand()->from($this->table)->where("vid=:vid", array(':vid' => $dbRow['vid']))->queryAll();
             foreach ($all as $al) {
                 $muitLang[$al['language_id']] = $al['id'];
             }
         }
         if (isset($_POST['AutoModel'])) {
             //关联到其他表的值
             $NodeField = $_POST['NodeField'];
             if ($NodeField) {
                 foreach ($NodeField as $key => $value) {
                     //关联表名
                     $rale = $this->relation_table[$key];
                     //用来保存到数据库的
                     $relation_datas[$rale] = $value;
                 }
             }
             //对AutoModel属性赋值
             foreach ($row as $key => $value) {
                 $postV = $_POST['AutoModel'][$key];
                 //判断是否是多值
                 if ($NodeField[$key]['mvalue'] != 1 && is_array($postV)) {
                     $postV = ArrHelper::first($postV);
                 } elseif (is_array($postV)) {
                     $postV = serialize($postV);
                 }
                 //当字段配置中 insert 值为false时不写入主表
                 if ($value['insert'] === false) {
                     continue;
                 }
                 $this->model->{$key} = trim($postV);
                 $saveDatas[$key] = trim($postV);
             }
             //验证规则
             if ($this->model->validate()) {
                 $column = cache('DBColumns_' . $this->table);
                 if (!$column) {
                     $columns = Yii::app()->db->createCommand("SHOW  COLUMNS FROM  `" . $this->table . "`")->queryAll();
                     foreach ($columns as $c) {
                         $column[$c['Field']] = $c['Field'];
                     }
                 }
                 /**
                  * 自动加载 application.components.AutoModel 下的文件
                  */
                 $insertDatas = array();
                 $updateDatas = array();
                 if ($_AutoModel) {
                     foreach ($_AutoModel as $AutoModel) {
                         $AutoModel = $AutoModel . 'AutoModel';
                         Yii::import("application.components.AutoModel.{$AutoModel}");
                         $objModel = new $AutoModel();
                         if (method_exists($AutoModel, 'insert')) {
                             $insertDatas += $objModel->insert($saveDatas);
                         }
                         if (method_exists($AutoModel, 'update')) {
                             $updateDatas += $objModel->update($saveDatas);
                         }
                         if (method_exists($AutoModel, 'after')) {
                             $after[] = $objModel;
                         }
                         /**
                          * 判断字段是否存在
                          */
                         if (is_array($objModel->fields)) {
                             foreach ($objModel->fields as $v) {
                                 if (!$column[$v]) {
                                     unset($insertDatas[$v], $updateDatas[$v]);
                                 }
                             }
                         } else {
                             $v = $objModel->fields;
                             if (!$column[$v]) {
                                 unset($insertDatas[$v], $updateDatas[$v]);
                             }
                         }
                     }
                 }
                 //如果不是更新,将取AUTOMODEL里面的UUID值
                 if (!$uuid) {
                     $uuid = $insertDatas['uuid'];
                 }
                 if (true === $this->update) {
                     /**
                      * 判断更新需要操作的字段
                      */
                     if ($fixVid) {
                         $updateDatas['vid'] = $fixVid;
                     }
                     if ($updateDatas) {
                         foreach ($updateDatas as $_k => $_v) {
                             $saveDatas[$_k] = $_v;
                         }
                     }
                     if ($fixVid) {
                         if (!$this->db->from($this->table)->where('vid=' . $fixVid . ' and language_id=' . $saveDatas['language_id'])->queryRow()) {
                             $this->db->insert($this->table, $saveDatas);
                         } else {
                             unset($saveDatas['vid']);
                             $this->db->update($this->table, $saveDatas, 'id=:id', array(':id' => $id));
                         }
                     } else {
                         unset($saveDatas['vid']);
                         $this->db->update($this->table, $saveDatas, 'id=:id', array(':id' => $id));
                     }
                 } else {
                     /**
                      * 判断写入需要操作的字段
                      */
                     if ($insertDatas) {
                         foreach ($insertDatas as $_k => $_v) {
                             $saveDatas[$_k] = $_v;
                         }
                     }
                     $this->db->insert($this->table, $saveDatas);
                 }
                 //写入主表完成,写入关联表
                 if ($relation_datas) {
                     /**
                      * 当没有node_id 时,也就是新建操作时,将查寻一次数据库取得node_id的值
                      */
                     if (!$node_id) {
                         $row = $this->db->from($this->table)->where('uuid=:uuid', array(':uuid' => $uuid))->queryRow();
                         $node_id = $dbRow['id'];
                     }
                     foreach ($relation_datas as $RT => $volist) {
                         CDB()->delete($RT, 'nid=:nid', array(':nid' => $node_id));
                         foreach ($volist as $vo) {
                             CDB()->insert($RT, array('nid' => $node_id, 'value' => $vo));
                         }
                     }
                 }
                 //所以操作后
                 if ($after) {
                     foreach ($after as $af) {
                         $af->after($this->db, $this->table, $data, $id);
                     }
                 }
                 if (true === $_multiLanguage) {
                     cache('language_' . $this->table . $vid, false);
                 }
                 flash('success', __('success'));
                 $this->controller->refresh();
             }
         }
         if (!$this->editUrl) {
             $this->editUrl = $this->controller->module->id . '/' . $this->controller->id . '/update';
         }
         if (!$this->createUrl) {
             $this->createUrl = $this->controller->module->id . '/' . $this->controller->id . '/create';
         }
         $data['model'] = $this->model;
         $data['row'] = $row;
         $data['multiLanguage'] = $this->_multiLanguage;
         $data['muitLang'] = $muitLang;
         $data['createUrl'] = $this->createUrl;
         $data['editUrl'] = $this->editUrl;
         $this->render('BuilderView', $data);
     }
 }