/** * 文档数据导出 * 导出及备份系统制定字段的数据 * 20130419 容易导致混乱,有整体导出即可,本功能暂停开发 */ public function actionCExport() { exit; $tableName = isset($_REQUEST['name']) ? $_REQUEST['name'] : ''; //表明 //验证表明是否为实体表 if (!preg_match('/^item/i', $tableName)) { $this->redirect_back(); } $selectedFields = isset($_POST['checked']) ? $_POST['checked'] : array(); //选中 //获取数据库对象和所有字段列表 $db = CardItem::model()->getDb(); $nameInfo = explode('_', $tableName); $attr = Attr::model()->getAll($nameInfo[1], $nameInfo[2]); $fields = array_merge(array('name', 'edittime', 'addtime'), array_keys($attr)); //获取字段列表 //获取需要导出的字段列表,并导出 if (!empty($_POST)) { $contents = ""; //内容 array_unshift($selectedFields, '_id'); //加入必选字段id //data 获取文档数据 $cursor = $db->selectCollection($tableName)->find(array(), $selectedFields); //查询指定字段数据 foreach ($cursor as $one) { $one_id = is_object($one['_id']) ? '' . $one['_id'] : $one['_id']; //id类型处理 unset($one['_id']); //$contents .= '{_id:"'.$one_id.'"},{$set:'.$this->_exportJSON($one).'}'."\n"; $contents .= $this->json_unicode_utf8(json_encode(array('_id' => $one_id))) . ',{"$set":' . $this->json_unicode_utf8(json_encode($one)) . '}' . "\n"; } unset($cursor); $fiels_ext = ''; array_shift($selectedFields); //移出顶部的_id $sfcount = count($selectedFields); //字段数量 if ($sfcount > 2) { $fiels_ext = $selectedFields[0] . ',' . $selectedFields[1] . '...[' . $sfcount . ']'; } else { $fiels_ext = implode(',', $selectedFields); } file_put_contents(yiiBase::getPathOfAlias($this->dirpath . '.export') . '/' . date("YmdHis") . '-' . $tableName . '-' . $fiels_ext . '.js', $contents); } //扫描导出文件并获取列表 $exportTables = $this->findDir($this->dirpath . '.export', 'js'); $exe_msg = $this->_exe_message(); $this->render('cexport', array('fields' => $fields, 'selectedFields' => $selectedFields, 'tableName' => $tableName, 'exportTables' => $exportTables, 'exe_msg' => $exe_msg)); }
/** * 根据表名清理记录 * @param $tname string 表名(可以是由item虚化出来的,如“item_nnhysj_tz”) * @return 记录总数 */ public function getRemove($tname) { $ts = $this->parseRealTable($tname); $this->applyScopes($ts['criteria']); return CardItem::model()->getDb()->selectCollection($ts['name'])->remove($ts['criteria']->getConditions()); }
/** * 获取选择字段的已使用选项(带缓存) * 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); }
/** * 获取当前表结构字段名和英文名的对应关系 * @author gavin * @param $istpl bool 是否为模板,若是组合框只导出一组(默认),若不是则按照当前最大元素数来生成 * @return 对应 */ public function getFieldNameMap($istpl = true) { //获取字段和中文的对应关系 $fields = array('id' => '序号'); // FunctionUTL::Debug($this->fields);exit; foreach ($this->fields as $field_key => $field_info) { if ($field_info['type'] == 'field') { $fields[$field_key] = $field_info['name']; } else { if ($field_info['type'] == 'group') { //确认组数 $size = 1; if (empty($istpl)) { //获取当前元素的最大值 $size = CardItem::model()->getFieldMaxSize($this->id, $field_key); } //按组数生成 for ($i = 0; $i < $size; $i++) { $_line = $i + 1; foreach ($field_info['fields'] as $fg_key => $fg_info) { $fields[$field_key . '-' . $i . '-' . $fg_key] = $field_info['name'] . '-' . $fg_info['name'] . $_line; } } } } } return $fields; }
/** * 发布数据 * @author gentle */ public function actionCreate($id, $preview = false) { $this->actCheck('item-add', false); $id = !empty($id) ? (int) $id : ''; empty($id) && $this->redirect(array('CardItem/index/id/0')); $dsModel = $this->loadModel($id, 'ds'); //范围验证 $this->scopeCheck($dsModel->database_id, $id); if (isset($_POST['CardItem'])) { $itemModel = new CardItem(); $itemModel->dataset_id = $id; //数据格式化 $this->_handleArguments($_POST['CardItem'], $dsModel->fields); $itemModel->attributes = $_POST['CardItem']; //数据校验 foreach ($dsModel->fields as $key => $value) { if (isset($value['must']) && $value['must'] == 1 && (!isset($itemModel->attributes['data'][$key]) || is_string($itemModel->attributes['data'][$key]) && trim($itemModel->attributes['data'][$key]) == '' || is_array($itemModel->attributes['data'][$key]) && empty($itemModel->attributes['data'][$key]))) { Yii::app()->user->setFlash("error", "必填项 {$value['name']} 无数据!"); $this->redirect(array('CardItem/index/id/' . $id)); } } if ($itemModel->save()) { $this->addLog('item', $itemModel->id, '发布了“' . $dsModel->name . '”的新数据'); Yii::app()->user->setFlash("success", "发布数据成功!"); } else { Yii::app()->user->setFlash("error", "发布数据失败!"); } $this->redirect(array('CardItem/index/id/' . $id)); } //构造字段Html $dsModel = $dsModel->sortField(); //排序字段 $fieldHtml = ''; foreach ($dsModel->fields as $key => $value) { //普通字段 if ($value['type'] == 'field') { $fieldHtml .= $this->fieldItemHtml($key, $value); //字段组 } elseif ($value['type'] == 'group') { $groupData = array(); $groupData['datasetId'] = $id; $groupData['enName'] = $key; $groupData['data'] = $value; $groupData['html'] = $this->groupItemHtml($id, $key); $fieldHtml .= $this->renderPartial('_form_item_group', $groupData, true); } } $data = array(); $data['model'] = $dsModel; $data['datasetId'] = $id; $data['fieldHtml'] = $fieldHtml; $data['preview'] = $preview; if ($preview) { $this->renderPartial('_form_item', $data); } else { $this->render('_form_item', $data); } }