fieldtype = TRUE;
$this->defaulttype = 'VARCHAR'; // 当用户没有选择字段类型时的缺省值
}
/**
* 字段相关属性参数
*
* @param array $value 值
* @return string
*/
public function option($option) {
$mthumb = '';
if (\Phpcmf\Service::M('field')->relatedname == 'module') {
$mthumb = '
';
}
if ($this->field && $this->field['fieldname'] != 'thumb') {
$mthumb = '';
}
return [$this->field_type($option['fieldtype'], $option['fieldlength']).$this->_search_field().
$mthumb.'
'.$this->attachment($option).'
'
,
'
'
];
}
/**
* 验证字段属性
*/
public function edit_config($post) {
if (!isset($post['setting']['option']['ext']) || !$post['setting']['option']['ext']) {
return dr_return_data(0, dr_lang('扩展名必须填写'));
} elseif (!isset($post['setting']['option']['size']) || !$post['setting']['option']['size']) {
return dr_return_data(0, dr_lang('文件大小必须填写'));
}
return dr_return_data(1, 'ok');
}
/**
* 字段输出
*/
public function output($value) {
return $value;
}
/**
* 获取附件id
*/
public function get_attach_id($value) {
$data = [];
if (!$value || !is_numeric($value)) {
return $data;
}
$data[] = $value;
return $data;
}
/**
* 附件处理
*/
public function attach($data, $_data) {
// 新旧数据都无附件就跳出
if (!$data && !$_data) {
return NULL;
}
// 新旧数据都一样时表示没做改变就跳出
if (dr_diff($data, $_data)) {
return NULL;
}
// 当无新数据且有旧数据表示删除旧附件
if (!$data && $_data) {
return [
[],
[$_data]
];
}
// 当无旧数据且有新数据表示增加新附件
if ($data && !$_data) {
return [
[$data],
[]
];
}
// 剩下的情况就是删除旧文件增加新文件
return [
[$data],
[$_data]
];
}
/**
* 字段入库值
*
* @param array $field 字段信息
* @return void
*/
public function insert_value($field) {
$value = \Phpcmf\Service::L('Field')->post[$field['fieldname']];
// 存在缩略图值时,自己就是缩略图
if (!$value && $field['fieldname'] == 'thumb' && isset(\Phpcmf\Service::L('Field')->data[$field['ismain']]['thumb']) && \Phpcmf\Service::L('Field')->data[$field['ismain']]['thumb']) {
return;
}
// 提取缩略图
if ($value && $field['setting']['option']['stslt']) {
$_field = \Phpcmf\Service::L('form')->fields;
if (isset($_field['thumb']) && $_field['thumb']['fieldtype'] == 'File' && !\Phpcmf\Service::L('Field')->data[$_field['thumb']['ismain']]['thumb']) {
$info = \Phpcmf\Service::C()->get_attachment($value, 1);
if ($info && in_array($info['fileext'], ['jpg', 'jpeg', 'png', 'gif'])) {
\Phpcmf\Service::L('Field')->data[$_field['thumb']['ismain']]['thumb'] = $value;
}
}
}
\Phpcmf\Service::L('Field')->data[$field['ismain']][$field['fieldname']] = $value;
}
/**
* 字段表单输入
*
* @return string
*/
public function input($field, $value = '') {
// 字段禁止修改时就返回显示字符串
if ($this->_not_edit($field, $value)) {
return $this->show($field, $value);
}
// 字段存储名称
$name = $field['fieldname'];
// 字段显示名称
$text = ($field['setting']['validate']['required'] ? ' * ' : '').dr_lang($field['name']);
// 字段提示信息
$tips = ($name == 'title' && APP_DIR) || $field['setting']['validate']['tips'] ? ''.$field['setting']['validate']['tips'].'' : '';
// 表单附加参数
$attr = $field['setting']['validate']['formattr'];
$ts = dr_lang('上传格式要求:%s(%s)', str_replace(',', '、', (string)$field['setting']['option']['ext']), ($field['setting']['option']['size']).'MB');
$p = dr_authcode([
'size' => ($field['setting']['option']['size']),
'exts' => $field['setting']['option']['ext'],
'attachment' => $field['setting']['option']['attachment'],
'image_reduce' => $field['setting']['option']['image_reduce'],
], 'ENCODE');
// 显示模板
$tpl = '';
$tpl.= '
{preview}
';
$tpl.= '
';
$tpl.= '
';
// 已保存数据
$val = '';
$file_url = '';
$show_delete = 0;
if ($value) {
$file = \Phpcmf\Service::C()->get_attachment($value, 1);
if ($file) {
$preview = dr_file_preview_html($file['url'], $file['id']);
$filepath = $file['attachment'];
$title = $file['filename'];
$upload = '';
} else {
$file_url = $filepath = $value;
$preview = dr_file_preview_html($value);
$upload = '';
$title = '';
}
$val.= str_replace(
['{title}', '{id}', '{filepath}', '{preview}', '{upload}'],
[$title, $value, dr_strcut($filepath, 30), $preview, $upload],
$tpl
);
$show_delete = 1;
} else {
$val.= '';
}
$json = json_encode([
'name' => $name,
'ext' => !$field['setting']['option']['ext'] || $field['setting']['option']['ext'] == '*' ? 'null' : ' /(\.|\/)('.str_replace(',', '|', $field['setting']['option']['ext']).')$/i',
'size' => floatval($field['setting']['option']['size']) * 1024 * 1024,
'url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&is_iframe=1&token='.dr_get_csrf_token()).'&siteid='.SITE_ID.'&m=upload&p='.$p.'&fid='.$field['id'],
'unused_url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&m=input_file_list&is_iframe=1&p=' . $p . '&fid=' . $field['id']),
'input_url' => dr_web_prefix(''.(IS_ADMIN ? SELF.'?c=api' : 'index.php?s=api&c=file').'&m=input_file_url&is_iframe=1&token='.dr_get_csrf_token().'&siteid='.SITE_ID.'&p='.$p.'&fid='.$field['id'].'&file='.urlencode($file_url).'&one=1'),
'tpl' => $tpl,
'area' => \Phpcmf\Service::IS_MOBILE_USER() ? ["95%", "90%"] : ["80%", "80%"],
'url_area' => \Phpcmf\Service::IS_MOBILE_USER() ? ["95%", "90%"] : ["50%", "300px"],
'chunk' => $field['setting']['option']['chunk'] ? 20 * 1024 * 1024 : 0,
]);
$use = '';
if (!$field['setting']['option']['unused'] && \Phpcmf\Service::C()->uid) {
$use.= '';
}
if ($field['setting']['option']['input']) {
$use.= '';
}
$use.= '';
// 表单输出
$str = '
';
if (!$field['setting']['option']['is_ext_tips']) {
$str.= ''.$ts.'
';
}
$str.= ''.$val.'
';
if (!$this->is_load_js('File')) {
$str.= '
';
$this->set_load_js('File', 1);
}
$str.= '';
return $this->input_format($name, $text, $str.$tips);
}
/**
* 字段表单显示
*
* @param string $field 字段数组
* @param array $value 值
* @return string
*/
public function show($field, $value = null) {
$html = '';
if ($value) {
// 显示模板
$file = \Phpcmf\Service::C()->get_attachment($value, 1);
if ($file) {
$preview = dr_file_preview_html($file['url'], $file['id']);
} else {
$preview = dr_file_preview_html($value);
}
$html = ''.$preview.'
';
}
return $this->input_format($field['fieldname'], $field['name'], $html);
}
}