Example #1
0
 /**
  * 创建元素集
  * @author gentle
  */
 public function actionCreate($id)
 {
     $model = new CardDs("Create");
     $model->database_id = $id;
     $db_model = $this->loadModel($id, 'db');
     if (isset($_POST['CardDs'])) {
         $CardDsArray = array();
         $CardDsArray[0]['database_id'] = $model->database_id;
         $CardDsArray[0]['name'] = $_POST['CardDs']['name'];
         $CardDsArray[0]['en_name'] = $_POST['CardDs']['en_name'];
         if (isset($_POST['CardDs']['additionField'])) {
             foreach ($_POST['CardDs']['additionField'] as $key => $value) {
                 if (empty($value['name']) || empty($value['en_name'])) {
                     continue;
                 }
                 $CardDsArray[$key] = $value;
                 $CardDsArray[$key]['database_id'] = $model->database_id;
             }
         }
         foreach ($CardDsArray as $val) {
             $model = new CardDs("Create");
             $model->database_id = $id;
             $model->attributes = $val;
             if (!$model->save()) {
                 $errorMsg = '';
                 $errorErr = $model->getErrors();
                 foreach ($errorErr as $value) {
                     $errorMsg .= "\t" . $value[0];
                 }
                 $errorMsg = trim($errorMsg, ',');
                 Yii::app()->user->setFlash("error", $errorMsg);
                 $this->redirect(array('CardDs/index/id/' . $id));
                 Yii::app()->end();
             } else {
                 $this->addLog('ds', $model->id, '在“' . $db_model->name . '”中新加了表“' . $model->name . '”');
             }
         }
         Yii::app()->user->setFlash("success", "新建 <b>{$model->name}</b> 数据表成功!");
         $this->redirect(array('CardDs/index/id/' . $id));
     }
     //@TODO yongze del
     //$dbModel = $this->loadModel($id, 'db');
     $this->renderPartial('_form_ds', array('model' => $model, 'dbModel' => $db_model));
 }
Example #2
0
 /**
  * 左侧栏树形结构
  * @author gentle
  */
 public function dataTree()
 {
     $data = array();
     $databases = CardDb::model()->findAll();
     foreach ($databases as $key => $value) {
         $data[$key]['text'] = '<span>' . $value->name . '</span>';
         $data[$key]['expanded'] = false;
         $data[$key]['children'] = array();
         $datasets = CardDs::model()->findAllByAttributes(array('database_id' => (string) $value->id));
         if (empty($datasets)) {
             continue;
         }
         foreach ($datasets as $k => $v) {
             $data[$key]['children'][$k] = array('text' => '<a href="' . $this->createUrl('/CardDs/Index/id/' . $value->id) . '">' . $v->name . '</a>');
         }
     }
     return $data;
 }
Example #3
0
 /**
  * 左侧栏树形结构
  * @author gentle
  */
 public function dataTree($databaseId = 0, $action = 'cardItem/Index')
 {
     $data = array();
     $databases = CardDb::model()->findAll(User::model()->getScopeDbCriteria());
     foreach ($databases as $key => $value) {
         $data[$key]['text'] = '<span>' . $value->name . '</span>';
         if ($databaseId == $value->id) {
             $data[$key]['expanded'] = true;
         } else {
             $data[$key]['expanded'] = false;
         }
         $data[$key]['children'] = array();
         $dscriteria = User::model()->getScopeDsCriteria();
         $dscriteria->addCond('database_id', '==', (int) $value->id);
         $datasets = CardDs::model()->findAll($dscriteria);
         if (empty($datasets)) {
             continue;
         }
         foreach ($datasets as $k => $v) {
             $data[$key]['children'][$k] = array('text' => '<a href="' . $this->createUrl('/' . $action . '/id/' . $v->id) . '">' . $v->name . '</a>');
         }
     }
     return $data;
 }
Example #4
0
 /**
  * 获取数据库中的文档列表
  * @param MongoDB $db DB
  * @return array<MongoCollection>
  */
 public function _listCollections(MongoDB $db)
 {
     //获取所有文档列表
     $names = array();
     try {
         //$names = $db->execute('function (){ return db.getCollectionNames(); }');	//生产线不支持js格式mongo指令
         $names = $db->getCollectionNames();
     } catch (Exception $e) {
         echo $e->errorMessage();
         exit;
     }
     //获取非系统文档
     $ret = array();
     $inlay_tabse = Yii::app()->params['inlay_tabse'];
     foreach ($names as $name) {
         //屏蔽掉系统文档和item
         if (preg_match("/^(system\\.|auto|file\\.)/", $name)) {
             continue;
         }
         $ret[$name] = isset($inlay_tabse[$name]) ? $inlay_tabse[$name] : $name;
     }
     //拆分item表
     $dsmap = CardDs::model()->getDBDSMap();
     //获取游戏表对应
     foreach ($dsmap as $dv) {
         foreach ($dv['list'] as $tv) {
             $ret['item_' . $dv['en_name'] . '_' . $tv['en_name']] = '数据表_' . $dv['name'] . '_' . $tv['name'];
         }
     }
     $names = $ret;
     return $names;
 }
Example #5
0
 /**
  * 根据表名得到真实的表和对应的查询条件
  * @param $tname	string	待解析表名
  * @return 真实表名和条件
  */
 public function parseRealTable($tname)
 {
     $rs = array('name' => $tname, 'criteria' => new EMongoCriteria());
     if (preg_match('/^(item_)/i', $tname)) {
         $tinfo = explode('_', $tname);
         if (count($tinfo) == 3) {
             $dbinfo = CardDb::model()->findByAttributes(array('en_name' => $tinfo[1]));
             if ($dbinfo) {
                 $dsinfo = CardDs::model()->findByAttributes(array('database_id' => $dbinfo->id, 'en_name' => $tinfo[2]));
                 if ($dsinfo) {
                     $rs['name'] = $tinfo[0];
                     $rs['criteria']->dataset_id = (int) $dsinfo['id'];
                 }
             }
         }
     }
     return $rs;
 }
 /**
  * Fields动态输出
  * @author gentle
  */
 public function actionAdditionField($fieldType, $additionType, $cardDsId = -1, $enName = '', $group = '')
 {
     //数值thirdField恢复
     if ($cardDsId != -1 && $enName != '') {
         $dsModel = $this->loadModel((int) $cardDsId, 'ds');
         if ($group) {
             $data = $dsModel->fields[$group]['fields'][$enName];
         } else {
             $data = $dsModel->fields[$enName];
         }
     } else {
         $data = array();
     }
     //普通字段
     if ($fieldType == 'normal') {
         $additionFieldHtml = $this->renderPartial('_form_field_' . $fieldType . '_' . $additionType, array('data' => $data), true);
     }
     //调用元素集字段
     if ($fieldType == 'reference') {
         $dsModel = CardDs::model()->findByAttributes(array('en_name' => $additionType));
         $fields = $dsModel->getFields();
         $fieldArray = array();
         foreach ($fields as $key => $value) {
             $fieldArray[$key] = $value['name'];
         }
         $additionFieldHtml = $this->renderPartial('_form_field_reference', array('fieldArray' => $fieldArray, 'data' => $data), true);
     }
     echo CJSON::encode(array('fieldHtml' => $additionFieldHtml));
 }
Example #7
0
 /**
  * 获取库与实体对应关系表
  * @return unknown_type
  */
 public function getDBDSMap()
 {
     //添加统一前缀
     $cache_key = strtolower('db.admin' . __FUNCTION__);
     //调用,有缓存则用缓存
     if (($map = Yii::app()->cache->get($cache_key)) === false) {
         $dblist = CardDb::model()->findAll(User::model()->getScopeDbCriteria());
         $dslist = CardDs::model()->findAll(User::model()->getScopeDsCriteria());
         foreach ($dblist as $dv) {
             $map[$dv['id']] = array('en_name' => $dv['en_name'], 'name' => $dv['name'], 'list' => array());
         }
         foreach ($dslist as $tv) {
             if (isset($map[$tv['database_id']])) {
                 $map[$tv['database_id']]['list'][$tv['id']] = array('en_name' => $tv['en_name'], 'name' => $tv['name']);
             }
         }
         if (!Yii::app()->cache->set($cache_key, $map, Yii::app()->params['cache_expire'])) {
             Yii::log('设置缓存失败:key=' . $cache_key, CLogger::LEVEL_WARNING, 'system.cache');
         }
     }
     return $map;
 }
Example #8
0
 /**
  * 获取选择字段的已使用选项(带缓存)
  * http://db.admin.mofang.com/api/card/getoptionuse?setid=1&field=fglx
  */
 public function actionGetOptionUse()
 {
     //参数接收
     //http://db.dev.mofang.com/api/card/getoptionuse/setid/9/field/select1
     $datasetId = isset($_GET['setid']) ? intval($_GET['setid']) : 0;
     //表id
     $fieldKay = isset($_GET['field']) ? $_GET['field'] : '';
     //字段名
     $filter = isset($_GET['filter']) ? $this->paramStr2Arr($_GET['filter']) : '';
     //过滤条件		filter = djfl|珍品::	(多个且关系)
     //初始化返回值
     $info = array();
     $return = array('code' => 0, 'data' => array());
     //参数验证
     if (empty($datasetId) || empty($fieldKay)) {
         $return['code'] = 1;
         //接口参数不足
         //获取字段定义
     } else {
         $this->checkCache($cache_data);
         //检查缓存
         if (!empty($cache_data)) {
             echo $cache_data;
             return '';
         }
         $options = CardDs::model()->getFieldOption($datasetId, $fieldKay);
         if (empty($options)) {
             $return['code'] = 2;
         } else {
             //过滤条件
             $condition = array("dataset_id" => $datasetId, 'data.' . $fieldKay => array('$exists' => true));
             //加入过滤条件
             if ($filter) {
                 foreach ($filter as $fkey => $fval) {
                     $condition['data.' . $fkey] = $fval;
                 }
             }
             //执行查询
             $option_dist = CardItem::model()->getCollection()->distinct('data.' . $fieldKay, $condition);
             //若有分组数据,则填入返回值中
             if ($option_dist) {
                 //合并选项并去重
                 foreach ($option_dist as $oval) {
                     if (is_array($oval)) {
                         $return['data'] = array_merge($return['data'], $oval);
                         //数组合并
                     } else {
                         array_push($return['data'], $oval);
                         //字符串压入
                     }
                 }
                 $return['data'] = array_unique($return['data']);
                 //去重
                 $return['data'] = array_filter($return['data']);
                 //去空
                 $return['data'] = array_merge($return['data'], array());
             }
             $this->writeCache(CJSON::encode($return));
             //设置缓存
         }
     }
     echo CJSON::encode($return);
 }
Example #9
0
 /**
  * 生成字段的展示HTML代码
  * @param $key		string	字段英文名
  * @param $value	array	字段属性
  * @param $group	string	组字段英文名
  * @param $index	string	貌似无用
  * @param $itemData
  * @return unknown_type
  */
 private function fieldItemHtml($key, $value, $group = '', $index = 'key', $itemData = '')
 {
     $fieldData = array();
     //初始化字段信息
     $fieldData['enName'] = $key;
     $fieldData['data'] = $value;
     //组需要加入的额外属性
     if ($group) {
         $fieldData['group'] = $group;
         $fieldData['key'] = $index;
     }
     if ($itemData) {
         $fieldData['itemData'] = $itemData;
     }
     //关联字段
     if ($value['extra']['field_info']['field_type'] == 'reference') {
         $fieldType = $value['extra']['field_info']['field_type'];
         //字段类型,此处只可能为reference
         $additionType = $value['extra']['field_info']['addition_type'];
         //关联表名
         $dataset = CardDs::model()->findByAttributes(array('en_name' => $additionType));
         //获取指定的表模型
         $dsId = $dataset['id'];
         //获取表id
         $fieldData['referenceItems'] = $this->loadModel($dsId, 'item', 'dataset_id', true);
         //获取 item表中dataset_id=$dsId的数据
         $tplName = '_form_item_' . $fieldType;
     } else {
         $fieldType = $value['extra']['field_info']['field_type'];
         $additionType = $value['extra']['field_info']['addition_type'];
         $tplName = '_form_item_' . $fieldType . '_' . $additionType;
     }
     $html = $this->renderPartial($tplName, $fieldData, true);
     return $html;
 }
Example #10
0
 /**
  * 范围格式转换(数据库->页面)
  * @param $scope string/array	用户的范围 	
  * @return array	一维数组
  */
 public function decodeScope($scope)
 {
     //空验证
     if (empty($scope)) {
         return array();
     }
     $stinfo = array();
     if ($scope == 'all') {
         $grs = CardDs::model()->getDBDSMap();
         $stinfo = array_keys($grs);
         //抽取数据
     } else {
         foreach ($scope as $key => $val) {
             if (is_array($val)) {
                 foreach ($val as $keys => $vals) {
                     $stinfo[] = $key . '--' . $vals;
                 }
             } else {
                 $stinfo[] = $val;
             }
         }
     }
     return $stinfo;
 }