Example #1
0
function king_edt()
{
    global $king;
    $king->access('portal_content_edt');
    //初始化
    $listid = kc_get('listid', 2, 1);
    //$info['listid'];
    $info = $king->portal->infoList($listid);
    $model = $king->portal->infoModel($info['modelid']);
    //	kc_error('<pre>'.print_r($array_field,1));
    $kid = kc_get('kid', 2);
    $kid1 = kc_get('kid1', 2);
    $isadmin = $kid1 ? 'isadmin2' : 'isadmin1';
    //次页:首页
    $array_field = array_keys($model['field'][$isadmin]);
    $sql_field = implode(',', $array_field);
    //[tablemodel]字段调用
    //	$listid=kc_get('listid',2);
    if ($GLOBALS['ismethod'] || $kid == '') {
        //POST过程或新添加的过程
        $data = $_POST;
        if (!$GLOBALS['ismethod']) {
            //初始化新添加的数据
            $data['kpath'] = $king->portal->depathMode($info);
            $data['nshow'] = 1;
            $array_field_default = $model['field']['default'];
            foreach ($array_field_default as $key => $val) {
                $data[$key] = $val;
            }
        }
    } else {
        //编辑数据,从数据库读出
        if (!($data = $king->db->getRows_one('select ' . $sql_field . ' from %s__' . $model['modeltable'] . ' where kid=' . $kid . ' limit 1;'))) {
            kc_error($king->lang->get('system/error/param') . '<br/>select ' . $sql_field . ' from %s__' . $model['modeltable'] . ' where kid=' . $kid . ' limit 1;' . '<br/>File:' . basename(__FILE__) . ';Line:' . __LINE__);
        }
    }
    $data = kc_data($array_field, $data);
    $data['kid'] = $kid;
    if (!($res = $king->db->getRows("select * from %s_field where modelid={$info['modelid']} and {$isadmin}=1 and kid1=0 order by norder,kid;"))) {
        //全部调用
        $res = array();
    }
    $s = $king->openForm('manage.content.php?action=edt');
    $s .= kc_htm_hidden(array('listid' => $listid, 'kid' => $kid, 'kid1' => $kid1));
    //这个隐藏域不要放在下面
    //kc_error("select * from %s_field where modelid={$info['modelid']} and {$isshow}=1 and kid1=0 order by norder,kid;");
    //kc_error('<pre>'.print_r($res,1));
    foreach ($res as $rs) {
        $s .= $king->portal->formdecode($rs, $data, $info, 1, $kid1 ? 2 : 1);
    }
    $s .= $king->htmForm($king->lang->get('portal/common/exp'), kc_htm_checkbox('pag', array(1 => $king->lang->get('portal/goto/addpag')), kc_post('pag')));
    $s .= $king->closeForm('save');
    //数据处理
    if ($GLOBALS['ischeck']) {
        $_array = array();
        //设置为空数组
        //收集字段的值
        foreach ($array_field as $val) {
            if (in_array($val, array('nshow', 'nhead', 'ncommend', 'nup', 'nfocus', 'nhot')) || array_key_exists($val, $model['field']['offon'])) {
                //增加判断offon
                $_array[$val] = $data[$val] ? 1 : 0;
            } else {
                if (is_array($data[$val])) {
                    $_array[$val] = implode(',', $data[$val]);
                } else {
                    $_array[$val] = $data[$val];
                }
                //抓图和过滤链接
                if ($val == 'kcontent') {
                    if (kc_post('isgrab')) {
                        //抓图
                        $_array[$val] = kc_grab($_array[$val]);
                    }
                    if (kc_post('isremovea')) {
                        //过滤链接
                        $_array[$val] = preg_replace('/<a ([^>]*)>|<\\/a>/is', '', $_array[$val]);
                    }
                    if (kc_post('isremovetable')) {
                        //过滤表格
                        $_array[$val] = preg_replace('/<(table|tbody|thead|tr|td|th|caption) ?([^>]*)>|<\\/(table|tbody|thead|tr|td|th|caption)>/is', '', $_array[$val]);
                    }
                    if (kc_post('isremovestyle')) {
                        //过滤样式
                        $_array[$val] = preg_replace('/(<([^>]*))( style=)(["\'])(.*?)\\4(([^>]*)\\/?>)/is', '$1 $6', $_array[$val]);
                    }
                    if (kc_post('isremoveid')) {
                        //过滤样式
                        $_array[$val] = preg_replace('/(<([^>]*))( id=)(["\'])(.*?)\\4(([^>]*)\\/?>)/is', '$1 $6', $_array[$val]);
                    }
                    if (kc_post('isremoveclass')) {
                        //过滤样式
                        $_array[$val] = preg_replace('/(<([^>]*))( class=)(["\'])(.*?)\\4(([^>]*)\\/?>)/is', '$1 $6', $_array[$val]);
                    }
                }
            }
        }
        if (in_array('kimage', $_array) && in_array('kcontent', $_array)) {
            //如果有选择第一个图作为缩略图 并 kimage在列表里
            if (kc_post('isoneimage')) {
                //抓第一张图为缩略图
                if ($oneimage = preg_match('/(<img([^>]*))( src=)(["\'])(.*?)\\4(([^>]*)\\/?>)/is', $_array['kcontent'], $oneimage_array)) {
                    $smartimg = $oneimage_array[5];
                    if (is_file(ROOT . substr($smartimg, strlen($king->config('inst'))))) {
                        //判断是否为本地文件
                        $_array['kimage'] = substr($smartimg, strlen($king->config('inst')));
                    } else {
                        //若是远程文件,则抓取
                        if ($path = kc_grab_get($smartimg)) {
                            //抓取成功
                            if ($path != $smartimg) {
                                //值不一样,说明抓取成功
                                $_array['kimage'] = $path;
                            }
                        }
                    }
                }
            }
        }
        //listid & kid1
        $_array['listid'] = $data['listid'];
        $_array['kid1'] = $data['kid1'] ? $data['kid1'] : 0;
        /**
        		检查kpath是否在键名列表里,如果有则判断是否为空值
        		如果没有,则补充
        */
        if (empty($_array['kpath'])) {
            $_array['kpath'] = $king->portal->depathMode($info);
        }
        /**
        		检查kkeywords,如果没有,则自动补充其值
        		如果有,则更新列表
        */
        $_array['kkeywords'] = !empty($data['kkeywords']) ? $king->portal->getKey($_array['ktitle'], $_array['kkeywords']) : $king->portal->getKey($_array['ktitle']);
        /**
        	关键字替换功能的实现概论
        	从$_array['kkeywords']中获得关键字列表,从预置的[关键字链接页/待做的表]中查找相关关键字
        	kname 关键字
        	kkeywords 关键字相关关键字
        	kpath 关键字链接网址
        	preg_replace('',$rs['kpath'],$_array['kcontent'],1);
        */
        /**
        		检查ktag,如果没有,则自动补充其值
        		如果有,则更新列表
        */
        $_array['ktag'] = !empty($data['ktag']) ? $king->portal->getTag($_array['ktitle'], $_array['ktag']) : $king->portal->gettag($_array['ktitle']);
        /**
        		如果description值为空,则从content中获取
        */
        if (empty($data['kdescription']) && !empty($data['kcontent'])) {
            $kdescription = strip_tags($data['kcontent']);
            $kdescription = preg_replace('/(\\&[a-z]{1,6};)|\\s/', '', $kdescription);
            $_array['kdescription'] = kc_substr($kdescription, 0, 200);
        }
        //副标题长度
        $_array['nsublength'] = isset($data['ksubtitle']) ? kc_strlen($data['ksubtitle']) : 0;
        //更新时间
        $_array['nlastdate'] = time();
        //如果有kid1值,则对kid1对应的nlastdate进行更新
        if ($kid1) {
            $king->db->update('%s__' . $model['modeltable'], array('nlastdate' => time()), 'kid=' . $kid1);
        }
        //图片框写远程路径的时候,抓图
        foreach ($model['field']['image'] as $key => $val) {
            if (isset($_array[$key])) {
                //当有image类型的字段的时候,检查一下其值
                if (kc_validate($_array[$key], 6)) {
                    //若为网址类型的话,自动抓图到本地
                    $_array[$key] = kc_grab_get($_array[$key]);
                }
            }
        }
        //添加&更新数据
        if ($kid) {
            //update
            $king->db->update('%s__' . $model['modeltable'], $_array, 'kid=' . $kid);
            $_nlog = 7;
        } else {
            $_array['ndate'] = time();
            $_array['adminid'] = $king->admin['adminid'];
            $_array['userid'] = -1;
            $_array['norder'] = $king->db->neworder('%s__' . $model['modeltable']);
            //不同的浏览器不同的分页标签,前台不支持
            switch (strtolower($king->admin['admineditor'])) {
                case 'fckeditor':
                    $pagebreak = '<div style="page-break-after: always"><span style="display: none">&nbsp;</span></div>';
                    break;
                case 'tiny_mce':
                    $pagebreak = '<!-- pagebreak -->';
                    break;
                case 'edit_area':
                    $pagebreak = '<!-- pagebreak -->';
                    break;
            }
            if (isset($pagebreak) && isset($_array['kcontent'])) {
                $array = explode($pagebreak, $_array['kcontent']);
                foreach ($array as $key => $val) {
                    $_array['kcontent'] = $val;
                    $_array['norder']++;
                    if ($key === 0) {
                        //第一个
                        $kid = $king->db->insert('%s__' . $model['modeltable'], $_array);
                    } else {
                        $_array['kpath'] = $king->portal->depathMode($info);
                        $_array['kid1'] = $data['kid1'] ? $data['kid1'] : $kid;
                        $king->db->insert('%s__' . $model['modeltable'], $_array);
                    }
                }
            } else {
                $kid = $king->db->insert('%s__' . $model['modeltable'], $_array);
            }
            $_nlog = 5;
            if ($kid == 0) {
                kc_error($king->lang->get('system/error/insert') . kc_clew(__FILE__, __LINE__, nl2br(print_r($_array, 1))));
            }
        }
        //更新列表信息
        $king->portal->lastUpdated($listid, 'list');
        //删除缓存重建缓存
        $king->cache->del('portal/list/' . $listid);
        kc_f_delete($king->config('xmlpath', 'portal') . '/portal/' . $info['modelid'] . '/' . wordwrap($kid, 1, '/', 1) . '.xml');
        $id = $king->portal->infoID($listid, $kid);
        if ($kid1) {
            kc_f_delete($king->config('xmlpath', 'portal') . '/portal/' . $info['modelid'] . '/' . wordwrap($kid1, 1, '/', 1) . '.xml');
            $id = $king->portal->infoID($listid, $kid1);
        }
        //生成操作
        if ($info['npage'] == 0) {
            if ($info['npagenumber'] == 1) {
                $king->portal->createPage($listid, $kid1 ? $kid1 : $kid);
                //$listid,$kid,$pid=1,$is=null
                $subkid = $id['subkid'];
                if ($subkid) {
                    $subid = explode(',', $subkid);
                    foreach ($subid as $sid) {
                        $king->portal->createPage($listid, $sid);
                    }
                }
            } else {
                $pcount = ceil($id['ncount'] / $info['npagenumber']);
                for ($i = 1; $i <= $pcount; $i++) {
                    $king->portal->createPage($listid, $kid1 ? $kid1 : $kid, $i);
                }
            }
        }
        //写log
        $king->log($_nlog, $model['modeltable'] . ':' . $data['ktitle']);
        //		if(kc_post('pag')[0]==1){
        if (kc_post('pag') == 1) {
            $s = kc_goto($king->lang->get('system/goto/saveok'), 'manage.content.php?action=edtpag&listid=' . $data['listid'] . '&kid1=' . ($kid1 ? $kid1 : $kid));
        } else {
            if ($kid1) {
                kc_goto($king->lang->get('system/goto/is'), 'manage.content.php?action=edtpag&listid=' . $data['listid'] . '&kid1=' . $kid1, 'manage.content.php?action=pag&listid=' . $data['listid'] . '&kid1=' . $kid1);
            } else {
                kc_goto($king->lang->get('system/goto/is'), 'manage.content.php?action=edt&listid=' . $data['listid'], 'manage.content.php?listid=' . $data['listid']);
            }
        }
    }
    list($left, $right) = king_inc_list();
    $king->skin->output($info['ktitle'], $left, $right, $s);
}
Example #2
0
 public function createPage($listid, $kid, $pid = 1, $is = null)
 {
     global $king;
     if (!kc_validate($kid, 2)) {
         return false;
     }
     $info = $this->infoList($listid);
     $model = $this->infoModel($info['modelid']);
     $site = $this->infoSite($info['siteid']);
     if ($info['npage'] != 0 && $is == null) {
         return;
     }
     if ($info['modelid'] <= 0) {
         kc_error($king->lang->get('system/error/param') . kc_clew(__FILE__, __LINE__));
     }
     $id = $this->infoID($listid, $kid);
     //读取模板
     $tmp = new KC_Template_class($info['ktemplatepage1'], $info['ktemplatepage2']);
     $tmp->assign('type', 'page');
     foreach ($this->getField('list', 'field') as $val) {
         $tmp->assign(substr($val, 1), $info[$val]);
     }
     foreach ($this->getField('list', 'site') as $val) {
         $tmp->assign($val, $site[$val]);
     }
     foreach ($this->getField('list', 'id') as $val) {
         $tmp->assign($val, $info[$val]);
     }
     foreach ($model['field']['html'] as $key => $val) {
         $tmp->assign(substr($key, 1), kc_val($id, $key));
     }
     foreach ($model['field']['text'] as $key => $val) {
         $tmp->assign(substr($key, 1), kc_val($id, $key));
     }
     foreach ($model['field']['attrib'] as $val) {
         $tmp->assign(substr($val, 1), kc_val($id, $val));
     }
     foreach ($model['field']['id'] as $val) {
         $tmp->assign($val, $id[$val]);
     }
     foreach ($model['field']['images'] as $key => $val) {
         //图片组类型
         $array = $this->tab2array(kc_val($id, $key), 'images');
         $tmp->assign(substr($key, 1), $array);
         //替换已经提交过的字符串值
     }
     foreach ($model['field']['files'] as $key => $val) {
         //文件组类型
         $array = $this->tab2array(kc_val($id, $key), 'files');
         $tmp->assign(substr($key, 1), $array);
     }
     $kpath = $this->pathPage($info, $kid, $id['kpath'], 0, 1);
     //第一页的路径,不要指定为$pid,会出错
     $tmp->assign('path', $kpath);
     $tmp->assign('pid', $pid);
     //前置命令
     $tmp->assign('add', $king->config('inst') . "portal/index.php?action=edt&listid={$listid}");
     //添加新话题
     $tmp->assign('reply', $king->config('inst') . "portal/index.php?action=edt&listid={$listid}&kid1={$kid}");
     //回复话题
     $tmp->assign('commentlink', $king->config('inst') . "comment.php?modelid={$info['modelid']}&listid={$listid}&kid={$kid}");
     $tmp->assign('edit', $king->config('inst') . "portal/index.php?action=edt&listid={$listid}&kid={$kid}");
     //编辑话题
     $tmp->assign('hit', "<em id=\"k_hit\">" . ($info['npage'] == 0 ? 'Loading...' : $id['nhit'] + 1) . "</em><script type=\"text/javascript\" charset=\"UTF-8\"><!--\n\$.kc_ajax('{URL:\\'" . $king->config('inst') . "portal/index.php\\',CMD:\\'hit\\',kid:{$kid},modelid:{$info['modelid']},IS:1}')\n--></script>");
     //访问统计
     $tmp->assign('comment', "<em id=\"k_comment\">" . 'Loading...' . "</em><script type=\"text/javascript\" charset=\"UTF-8\"><!--\n\$.kc_ajax('{URL:\\'" . $king->config('inst') . "portal/index.php\\',CMD:\\'commentcount\\',kid:{$kid},modelid:{$info['modelid']},IS:1}')\n--></script>");
     //评论统计
     $tmp->assign('digg', "<div id=\"k_digg\"><p id=\"k_digg1\" onclick=\"\$.kc_ajax('{URL:\\'" . $king->config('inst') . "portal/index.php\\',CMD:\\'digg\\',kid:{$kid},modelid:{$info['modelid']},type:1,IS:1}');\">Loading...</p><p id=\"k_digg0\" onclick=\"\$.kc_ajax('{URL:\\'" . $king->config('inst') . "portal/index.php\\',CMD:\\'digg\\',kid:{$kid},modelid:{$info['modelid']},type:0,IS:1}');\">Loading...</p><script type=\"text/javascript\" charset=\"UTF-8\"><!--\n\$.kc_ajax('{URL:\\'" . $king->config('inst') . "portal/index.php\\',CMD:\\'digg\\',kid:{$kid},modelid:{$info['modelid']},type:2,IS:1}')\n--></script></div>");
     //顶踩
     if ($is || $info['npage'] != 0) {
         return $tmp->output();
     } else {
         kc_f_put_contents($this->pathPage($info, $kid, $id['kpath'], 1, $pid), $tmp->output(), 1);
     }
 }
Example #3
0
function king_edt()
{
    global $king;
    $king->load('user');
    //初始化zf
    $listid = kc_get('listid', 2, 1);
    //$info['listid'];
    $info = $king->portal->infoList($listid);
    $model = $king->portal->infoModel($info['modelid']);
    $kid = kc_get('kid', 2);
    $kid1 = kc_get('kid1', 2);
    $isuser = $kid1 ? 'isuser2' : 'isuser1';
    //次页:首页
    $array_field = array_keys($model['field'][$isuser]);
    $sql_field = implode(',', $array_field);
    //[tablemodel]字段调用
    //读取管理员列表
    $editors = $king->portal->getListEditor($listid);
    if (!is_array($editors)) {
        $editors = array();
    }
    //用户权限及登录验证
    if ($info['gidpublish'] == -1) {
        $user = array('userid' => 0, 'username' => '[' . $king->lang->get('user/name/guest') . ']');
    } else {
        $user = $king->user->access();
        if (!in_array($king->user->userid, $editors) && $info['gidpublish']) {
            //非栏目编辑 并 限制组会员 ;栏目编辑员则跳过此验证
            $king->user->access($info['gidpublish']);
        }
    }
    //发帖验证,检查是否为不允许发布
    //0不允许发布|1直接发布|2验证后发布
    if (!in_array($user['userid'], $editors)) {
        //栏目编辑员无需验证
        if ((int) $info['ispublish' . ($kid1 ? 2 : 1)] === 0) {
            $king->portal->error($king->lang->get('portal/title/stop'), $king->lang->get('portal/error/stop'));
        }
    }
    //当kid有值的时候(编辑),进行所有权验证
    if ($kid) {
        $user = empty($user) ? $king->user->access() : $user;
        //如果$user为null则进行登录验证,目的是要获得userid
        $id = $king->portal->infoID($listid, $kid);
        if (in_array($king->user->userid, $editors) || (int) $id['userid'] === (int) $king->user->userid) {
            if (!in_array($king->user->userid, $editors)) {
                //如果不是栏目管理员,则进行有效期验证
                if (time() - $model['nlocktime'] * 3600 > $id['ndate'] && (int) $model['nlocktime'] !== 0) {
                    //如果超过可允许编辑时间期限 并 可编辑时间不能为0,则提示错误
                    $king->portal->error($king->lang->get('portal/title/stop'), $king->lang->get('portal/error/timeout'));
                }
            }
        } else {
            $king->portal->error($king->lang->get('portal/title/stop'), $king->lang->get('portal/error/noaccess'));
        }
    }
    $fields = explode(',', $sql_field);
    if ($GLOBALS['ismethod'] || $kid == '') {
        //POST过程或新添加的过程
        $data = $_POST;
        if (!$GLOBALS['ismethod']) {
            //初始化新添加的数据
            $data['kpath'] = $king->portal->depathMode($info);
            $data['nshow'] = 1;
            $array_field_default = $model['field']['default'];
            foreach ($array_field_default as $key => $val) {
                $data[$key] = $val;
            }
            //从URL中获取初始值
            foreach ($fields as $val) {
                if (isset($_GET[$val])) {
                    $data[$val] = $_GET[$val];
                }
            }
        }
    } else {
        //编辑数据,从数据库读出
        //判断是否为栏目编辑 或 所有人
        if (!($data = $king->db->getRows_one('select ' . $sql_field . ' from %s__' . $model['modeltable'] . ' where kid=' . $kid . ' limit 1;'))) {
            kc_error($king->lang->get('system/error/param') . '<br/>select ' . $sql_field . ' from %s__' . $model['modeltable'] . ' where kid=' . $kid . ' limit 1;' . '<br/>File:' . basename(__FILE__) . ';Line:' . __LINE__);
        }
    }
    $data = kc_data($fields, $data);
    $data['kid'] = $kid;
    if (!($res = $king->db->getRows("select * from %s_field where modelid={$info['modelid']} and {$isuser}=1 and kid1=0 order by norder,kid;"))) {
        //全部调用
        $res = array();
    }
    $s = $king->openForm('index.php?action=edt');
    $s .= kc_htm_hidden(array('listid' => $listid, 'kid' => $kid, 'kid1' => $kid1));
    //这个隐藏域不要放在下面
    foreach ($res as $rs) {
        $s .= $king->portal->formdecode($rs, $data, $info, 0, $kid1 ? 2 : 1);
    }
    $s .= $king->closeForm($king->lang->get('system/common/publish'));
    //数据处理
    if ($GLOBALS['ischeck']) {
        $_array = array();
        //设置为空数组
        //收集字段的值
        foreach ($array_field as $val) {
            if (substr($val, 0, 1) == 'n') {
                $_array[$val] = $data[$val] ? 1 : 0;
            } else {
                if (is_array($data[$val])) {
                    $_array[$val] = implode(',', $data[$val]);
                } else {
                    $_array[$val] = $data[$val];
                }
            }
        }
        //listid & kid1
        $_array['listid'] = $data['listid'];
        $_array['kid1'] = $data['kid1'] ? $data['kid1'] : 0;
        /**
        		检查kpath是否在键名列表里,如果有则判断是否为空值
        		如果没有,则补充
        */
        if (empty($_array['kpath'])) {
            $_array['kpath'] = $king->portal->depathMode($info);
        }
        /**
        		检查kkeywords,如果没有,则自动补充其值
        		如果有,则更新列表
        */
        $_array['kkeywords'] = !empty($data['kkeywords']) ? $king->portal->getKey($_array['ktitle'], $_array['kkeywords']) : $king->portal->getKey($_array['ktitle']);
        /**
        		检查ktag,如果没有,则自动补充其值
        		如果有,则更新列表
        */
        $_array['ktag'] = !empty($data['ktag']) ? $king->portal->getTag($_array['ktitle'], $_array['ktag']) : $king->portal->gettag($_array['ktitle']);
        /**
        		如果description值为空,则从content中获取
        */
        if (empty($data['kdescription']) && !empty($data['kcontent'])) {
            $kdescription = strip_tags($data['kcontent']);
            $kdescription = preg_replace('/\\&[a-z]{1,6};/', '', $kdescription);
            $_array['kdescription'] = kc_substr($kdescription, 0, 200);
        }
        //副标题长度
        $_array['nsublength'] = isset($data['ksubtitle']) ? kc_strlen($data['ksubtitle']) : 0;
        //更新时间
        $_array['nlastdate'] = time();
        //如果有kid1值,则对kid1对应的nlastdate进行更新
        if ($kid1) {
            $king->db->update('%s__' . $model['modeltable'], array('nlastdate' => time()), 'kid=' . $kid1 . ' limit 1');
        }
        //添加&更新数据
        if ($kid) {
            //update
            $king->db->update('%s__' . $model['modeltable'], $_array, 'kid=' . $kid);
            $_nlog = 7;
        } else {
            $_array['ndate'] = time();
            $_array['norder'] = $king->db->neworder('%s__' . $model['modeltable']);
            $_array['userid'] = $user['userid'];
            $_array['nshow'] = $info['ispublish' . ($kid1 ? 2 : 1)];
            $kid = $king->db->insert('%s__' . $model['modeltable'], $_array);
            $_nlog = 5;
            if ($kid == 0) {
                kc_error($king->lang->get('system/error/insert') . kc_clew(__FILE__, __LINE__, nl2br(print_r($_array, 1))));
            }
        }
        //更新列表信息
        $king->portal->lastUpdated($listid, 'list');
        //删除缓存重建缓存
        $king->cache->del('portal/list/' . $listid);
        kc_f_delete($king->config('xmlpath', 'portal') . '/portal/' . $info['modelid'] . '/' . wordwrap($kid, 1, '/', 1) . '.xml');
        $id = $king->portal->infoID($listid, $kid);
        if ($kid1) {
            kc_f_delete($king->config('xmlpath', 'portal') . '/portal/' . $info['modelid'] . '/' . wordwrap($kid1, 1, '/', 1) . '.xml');
            $id = $king->portal->infoID($listid, $kid1);
        }
        //生成操作
        if ($info['npage'] == 0) {
            if ($info['npagenumber'] == 1) {
                $king->portal->createPage($listid, $kid1 ? $kid1 : $kid);
                //$listid,$kid,$pid=1,$is=null
                $subkid = $id['subkid'];
                if (isset($subkid)) {
                    $subid = explode(',', $subkid);
                    foreach ($subid as $sid) {
                        $king->portal->createPage($listid, $sid);
                    }
                }
            } else {
                $pcount = ceil($id['ncount'] / $info['npagenumber']);
                for ($i = 1; $i <= $pcount; $i++) {
                    $king->portal->createPage($listid, $kid1 ? $kid1 : $kid, $i);
                }
            }
        }
        //跳转,当留言反馈类型的时候,这个跳转需要改动
        echo "<script type=\"text/javascript\">parent.location='" . $king->portal->pathPage($info, $id['kid'], $id['kpath']) . "'</script>";
    }
    $tmp = new KC_Template_class($model['ktemplatepublish']);
    $tmp->assign('inside', $s);
    $tmp->assign('listid', $listid);
    $tmp->assign('title', $info['klistname']);
    $tmp->assign('type', 'edit');
    echo $tmp->output();
    //	list($left,$right)=king_inc_list();
    //	$king->skin->output($king->lang->get('portal/title/content'.($kid?'edt':'add')),$left,$right,$s);
}
Example #4
0
function king_edt()
{
    global $king;
    $_htmlcode = '';
    $_arraycheck = array();
    $_array_varchar = $king->portal->array_varchar;
    //varchar类型的字段
    $king->access('portal_field_edt');
    $_sql = 'ktitle,kfield,modelid,ntype,nvalidate,nsizemin,nsizemax,kdefault,koption,nstylewidth,nstyleheight,issearch,isadmin1,isadmin2,isuser1,isuser2,islist,khelp,isrelate,istitle';
    $modelid = kc_get('modelid');
    $kid = kc_get('kid', 2);
    $type = kc_get('type', 2);
    $kid1 = kc_get('kid1', 2);
    if ($type == '') {
        $type = 1;
    }
    $at_array = array(1, 4, 5, 7, 12, 13, 14);
    //允许添加的子字段
    //ntype参数验证
    if ($kid1 && !in_array($type, $at_array) || !in_array($type, $king->portal->ntype)) {
        kc_error($king->lang->get('system/error/param') . kc_clew(__FILE__, __LINE__));
    }
    $fields = explode(',', $_sql);
    if ($GLOBALS['ismethod'] || $kid == '') {
        //POST过程或新添加的过程
        $data = $_POST;
        if (!$GLOBALS['ismethod']) {
            //初始化新添加的数据
            if (in_array($type, $_array_varchar)) {
                $data['nsizemin'] = 1;
                $data['nsizemax'] = 255;
            } else {
                $data['nsizemin'] = 1;
                $data['nsizemax'] = 999999;
            }
            $data['nstylewidth'] = 400;
            $data['nstyleheight'] = 70;
            $data['isadmin1'] = 1;
            $data['isadmin2'] = 1;
            $data['isuser1'] = 1;
            $data['isuser2'] = 1;
            $data['istitle'] = 1;
            if ($type == 12) {
                $data['nvalidate'] = 13;
                $data['kdefault'] = '#000000';
                $data['nsizemax'] = 7;
            }
            if ($type == 14) {
                $data['nstylewidth'] = 100;
                $data['nsizemax'] = 10;
                $data['kdefault'] = 'TODAY';
                $data['nvalidate'] = 9;
                //数据类型设置为日期类型
                $data['nsizemin'] = 10;
                $data['nsizemax'] = 10;
            }
        } else {
            if ($kid != '') {
                $_res = $king->db->getRows_one('select ntype from %s_field where kid=' . $kid);
                //上面kc_get('kid')中有数据类型验证,无安全隐患
                $_res ? $type = $_res['ntype'] : kc_error($king->lang->get('system/error/not'));
            }
        }
    } else {
        //编辑数据,从数据库读出
        if ($data = $king->db->getRows_one('select ' . $_sql . ' from %s_field where kid=' . $kid . ' limit 1;')) {
            $type = $data['ntype'];
            $modelid = $data['modelid'];
        } else {
            kc_error($king->lang->get('system/error/param') . '<br/>select ' . $_sql . ' from %s_field where kid=' . $kid . ' limit 1;<br/>File:' . basename(__FILE__) . ';Line:' . __LINE__);
        }
    }
    $data = kc_data($fields, $data);
    $model = $king->portal->infoModel($modelid);
    $s = '<script type="text/javascript">';
    $s .= 'function jumpmenu(obj){eval("parent.location=\'manage.field.php?action=edt&modelid=' . $modelid . '&kid1=' . $kid1 . '&type="+obj.options[obj.selectedIndex].value+"\'");}';
    $s .= '</script>';
    $s .= $king->openForm('manage.field.php?action=edt');
    //字段类型
    $_array = array(array('ntype', 2));
    if ($kid) {
        $s .= $king->htmForm($king->lang->get('portal/list/ntype'), kc_htm_select('type', array($type => $king->lang->get('portal/type/n' . $type)), '', ' disabled="true"'), $_array);
    } else {
        $_array_select = array();
        $array_type = $kid1 ? $at_array : $king->portal->ntype;
        foreach ($array_type as $val) {
            $_array_select[$val] = $king->lang->get('portal/type/n' . $val);
        }
        $s .= $king->htmForm($king->lang->get('portal/list/ntype'), kc_htm_select('type', $_array_select, $type, ' onChange="jumpmenu(this);"'), $_array);
    }
    //子项目中是否显示标题
    if ($kid1 && $type != 13) {
        $checked = $data['istitle'] == 1 ? ' checked="checked"' : '';
        $s_istitle = $kid1 ? '<input' . $checked . ' type="checkbox" id="istitle" name="istitle" value="1"/><label for="istitle">' . $king->lang->get('portal/label/showtitle') . '</label>' : '';
    } else {
        $s_istitle = '';
    }
    //字段标题
    $_array = array(array('ktitle', 0, 2, 50));
    $s .= $king->htmForm($king->lang->get('portal/list/ktitle') . ' (2-50)', '<input class="k_in w200" type="text" name="ktitle" value="' . htmlspecialchars($data['ktitle']) . '" maxlength="50" />' . $s_istitle, $_array);
    if ($type != 99) {
        //字段名
        if ($kid) {
            //update
            $s .= $king->htmForm($king->lang->get('portal/list/kfield'), '<input class="k_in w200" type="text" disabled="true" value="' . htmlspecialchars($data['kfield']) . '" />');
            $s .= kc_htm_hidden(array('kfield' => $data['kfield']));
        } else {
            $_array = array(array('kfield', 0, 1, 50), array('kfield', 4), array('kfield', 12, $king->lang->get('system/check/none'), $king->db->getRows_one("select kid from %s_field where kfield='k_" . $king->db->escape(kc_post('kfield')) . "' and modelid={$modelid};")));
            $s .= $king->htmForm($king->lang->get('portal/list/kfield') . ' (1-50)', '<input class="k_in w200" type="text" name="kfield" value="' . htmlspecialchars($data['kfield']) . '" maxlength="50" />', $_array);
        }
        //数据类型
        if (in_array($type, array(1, 14))) {
            $array = array(0, 1, 2, 22, 3, 4, 5, 6, 7, 8, 9, 13);
            $_array_select = array();
            foreach ($array as $val) {
                $_array_select += array($val => $king->lang->get('portal/validate/n' . $val));
            }
            $s .= $king->htmForm($king->lang->get('portal/list/nvalidate'), kc_htm_select('nvalidate', $_array_select, $data['nvalidate']), array(array('nvalidate', 2)));
        }
        //长度
        if (!in_array($type, array(0, 4, 5, 6, 7, 12, 13)) || $data['kfield'] == 'kcontent') {
            //系统标签和颜色值无需设置长度
            $_size = '<input class="k_in w50" type="text" name="nsizemin" id="nsizemin" value="' . htmlspecialchars($data['nsizemin']) . '" maxlength="6" />';
            $_size .= ' - <input class="k_in w100" type="text" name="nsizemax" id="nsizemax" value="' . htmlspecialchars($data['nsizemax']) . '" maxlength="11" />';
            $_array = array(array('nsizemin', 2), array('nsizemax', 2), array('nsizemin', 0, 1, 6), array('nsizemax', 0, 1, 11));
            if (in_array($type, $_array_varchar)) {
                $_lang = 'nsize';
                $_array[] = array('nsizemin', 16, $king->lang->get('portal/check/nsize1'), 0, 255);
                $_array[] = array('nsizemax', 16, $king->lang->get('portal/check/nsize2'), 1, 255);
            } else {
                $_lang = 'nsizetext';
            }
            $s .= $king->htmForm($king->lang->get('portal/label/' . $_lang), $_size, $_array);
        } else {
            $s .= kc_htm_hidden(array('nsizemin' => $data['nsizemin'], 'nsizemax' => $data['nsizemax']));
        }
        //默认值
        if (in_array($type, array(1, 4, 5, 6, 7, 8, 10))) {
            $_array = array(array('kdefault', 0, 0, 255));
            $str = '<input class="k_in w400" type="text" id="kdefault" name="kdefault" value="' . htmlspecialchars($data['kdefault']) . '" maxlength="255" />';
            /**/
            if (in_array($type, array(8))) {
                $str .= kc_f_brow('kdefault', $king->config('uppath') . '/image', 0);
            }
            if (in_array($type, array(10))) {
                $str .= kc_f_brow('kdefault', $king->config('uppath') . '/file', 1);
            }
            /**/
            $s .= $king->htmForm($king->lang->get('portal/label/kdefault') . ' (0-255)', $str, $_array);
        } elseif (in_array($type, array(12))) {
            //颜色
            $_array = array(array('kdefault', 0, 7, 7), array('kdefault', 13));
            $str = '<input class="k_in k_color" type="text" id="kdefault" name="kdefault" value="' . htmlspecialchars($data['kdefault']) . '" maxlength="7" ' . (kc_validate($data['kdefault'], 13) ? ' style="background:' . $data['kdefault'] . '"' : '') . '/>';
            $s .= $king->htmForm($king->lang->get('portal/label/kdefault'), $str, $_array, null, kc_f_color('kdefault'));
        } elseif (in_array($type, array(14))) {
            $array = array('TODAY' => $king->lang->get('system/time/today'));
            $_array = array(array('kdefault', 0, 0, 20));
            $s .= $king->htmForm($king->lang->get('portal/label/kdefault'), kc_htm_input('kdefault', $data['kdefault']), $_array, 0, kc_htm_setvalue('kdefault', $array));
        } elseif (in_array($type, array(13))) {
            $array = array(1 => $king->lang->get('system/common/yes'), 0 => $king->lang->get('system/common/no'));
            $s .= $king->htmForm($king->lang->get('portal/label/kdefault'), kc_htm_radio('kdefault', $array, $data['kdefault']));
        } else {
            $s .= kc_htm_hidden(array('kdefault' => ''));
        }
    }
    //end if($type==99)
    //选项
    if (in_array($type, array(4, 5, 6, 7))) {
        $array = array(array('koption', 0, 1, 999999));
        $_default = '<table class="k_side" cellspacing="0"><tr><td><textarea name="koption" class="k_in w400" cols="130" rows="7">' . htmlspecialchars($data['koption']) . '</textarea></td>';
        $_default .= '<td>' . kc_help('portal/help/koption', 360, 310);
        $_default .= '</td></tr></table>';
        $s .= $king->htmForm($king->lang->get('portal/label/koption'), $_default, $array);
    } elseif (in_array($type, array(1, 8, 10)) || in_array($data['kfield'], array('nprice', 'nnumber', 'nweight'))) {
        $array = array(array('koption', 0, 0, 999999));
        $_default = '<table class="k_side" cellspacing="0"><tr><td><textarea name="koption" class="k_in w400" cols="130" rows="7">' . htmlspecialchars($data['koption']) . '</textarea></td>';
        $_default .= '<td>' . kc_help('portal/help/kdefault', 360, 260);
        $_default .= '</td></tr></table>';
        $s .= $king->htmForm($king->lang->get('portal/label/kdefault1'), $_default, $array);
    } else {
        $s .= kc_htm_hidden(array('koption' => ''));
    }
    //尺寸
    if (in_array($type, array(2, 3, 6, 9, 11)) || $data['kfield'] == 'kcontent') {
        //长X宽
        $_size = '<input class="k_in w50" type="text" name="nstylewidth" id="nstylewidth" value="' . htmlspecialchars($data['nstylewidth']) . '" maxlength="4" />';
        $_size .= ' X <input class="k_in w50" type="text" name="nstyleheight" id="nstyleheight" value="' . htmlspecialchars($data['nstyleheight']) . '" maxlength="4" />(px)';
        $_array = array(array('nstylewidth', 2), array('nstyleheight', 2), array('nstylewidth', 0, 1, 4), array('nstyleheight', 0, 1, 4));
        $s .= $king->htmForm($king->lang->get('portal/label/nstyle'), $_size, $_array);
    } elseif (in_array($type, array(1, 8, 10))) {
        //长
        $_size = '<input class="k_in w50" type="text" name="nstylewidth" id="nstylewidth" value="' . htmlspecialchars($data['nstylewidth']) . '" maxlength="4" />';
        $_array = array(array('nstylewidth', 2), array('nstyleheight', 2), array('nstylewidth', 0, 1, 4), array('nstyleheight', 0, 1, 4));
        $s .= kc_htm_hidden(array('nstyleheight' => 0));
        $s .= $king->htmForm($king->lang->get('portal/label/nstylewidth'), $_size, $_array, '', kc_htm_setvalue('nstylewidth', array(50 => '50 px', 100 => '100 px', 200 => '200 px', 400 => '400 px')));
    } else {
        $s .= kc_htm_hidden(array('nstylewidth' => 0, 'nstyleheight' => 0));
    }
    /**
    	//上传文件类型
    	if(in_array($type,array(8))){
    		$_array=array(
    			array('nupfile',0,0,255),
    			array('nupfile',2),
    		);
    		$s.=$king->htmForm($king->lang->get('portal/label/nupfile'),'<input class="k_in w300" type="text" name="nupfile" value="'.htmlspecialchars($data['nupfile']).'" maxlength="255" />',$_array);
    	}else{
    		$s.=kc_htm_hidden(array('nupfile'=>''));
    	}
    	/**/
    $_htmlcode = '';
    //加入搜索和关联选项
    if (in_array($type, array(1, 2))) {
        $data['issearch'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode = '<span><input type="checkbox" value="1" id="issearch" name="issearch"' . $_checked . '/>';
        $_htmlcode .= '<label for="issearch">' . $king->lang->get('portal/label/attrib/issearch') . '</label></span>';
        //		$s.=$king->htmForm($king->lang->get('system/common/option'),$_htmlcode);
    } else {
        $s .= kc_htm_hidden(array('issearch' => 0));
    }
    if (in_array($type, array(1, 4, 5))) {
        $data['isrelate'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode .= ' <span><input type="checkbox" value="1" id="isrelate" name="isrelate"' . $_checked . '/>';
        $_htmlcode .= '<label for="isrelate">' . $king->lang->get('portal/label/attrib/isrelate1') . '</label></span>';
        //		$s.=$king->htmForm($king->lang->get('system/common/option'),$_htmlcode);
    } else {
        $s .= kc_htm_hidden(array('issearch' => 0));
    }
    if ($_htmlcode) {
        $s .= $king->htmForm($king->lang->get('system/common/option'), $_htmlcode);
    }
    //是否显示
    if ($type == 0 && $data['kfield'] == 'ktitle' || $type == 99) {
        $s .= kc_htm_hidden(array('isadmin1' => 1, 'isadmin2' => 1, 'isuser1' => 1, 'isuser2' => 1));
    } else {
        $_htmlcode = '<span>';
        $data['isadmin1'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode .= '<input type="checkbox" value="1" id="isadmin1" name="isadmin1"' . $_checked . '/>';
        $_htmlcode .= '<label for="isadmin1">' . $king->lang->get('portal/label/attrib/isadmin1') . '</label>';
        $data['isadmin2'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode .= '<input type="checkbox" value="1" id="isadmin2" name="isadmin2"' . $_checked . '/>';
        $_htmlcode .= '<label for="isadmin2">' . $king->lang->get('portal/label/attrib/isadmin2') . '</label>';
        $data['isuser1'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode .= '<input type="checkbox" value="1" id="isuser1" name="isuser1"' . $_checked . '/>';
        $_htmlcode .= '<label for="isuser1">' . $king->lang->get('portal/label/attrib/isuser1') . '</label>';
        $data['isuser2'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
        $_htmlcode .= '<input type="checkbox" value="1" id="isuser2" name="isuser2"' . $_checked . '/>';
        $_htmlcode .= '<label for="isuser2">' . $king->lang->get('portal/label/attrib/isuser2') . '</label>';
        if (!in_array($type, array(0, 2, 3, 9, 11))) {
            $data['islist'] == 1 ? $_checked = ' checked="checked"' : ($_checked = '');
            $_htmlcode .= '<input type="checkbox" value="1" id="islist" name="islist"' . $_checked . '/>';
            $_htmlcode .= '<label for="islist">' . $king->lang->get('portal/label/attrib/islist') . '</label>';
        }
        $_htmlcode .= '</span>';
        $s .= $king->htmForm($king->lang->get('portal/label/attrib/isshow'), $_htmlcode);
    }
    //khelp
    if ($type != 0 && !$kid1) {
        $s .= $king->htmForm($king->lang->get('portal/list/khelp'), '<table class="k_side" cellspacing="0"><tr><td><textarea class="k_in w400" rows="5" name="khelp" >' . htmlspecialchars($data['khelp']) . '</textarea></td><td>' . kc_help('portal/help/khelp', 300, 160) . '</td></tr></table>');
    }
    $s .= kc_htm_hidden(array('modelid' => $modelid, 'kid' => $kid, 'ntype' => $type, 'kid1' => $kid1));
    $s .= $king->closeForm('save');
    //数据处理
    if ($GLOBALS['ischeck']) {
        $_sql = 'ktitle,nsizemin,nsizemax,kdefault,koption,nstylewidth,nstyleheight,khelp';
        $_array = array();
        $_array_sql = explode(',', $_sql);
        foreach ($_array_sql as $val) {
            if (isset($_POST[$val])) {
                $_array[$val] = $data[$val];
            }
        }
        $array_is = array('issearch', 'isadmin1', 'isadmin2', 'isuser1', 'isuser2', 'islist', 'isrelate', 'istitle');
        foreach ($array_is as $val) {
            $_array[$val] = $data[$val] == 1 ? 1 : 0;
        }
        $_array['nvalidate'] = $data['nvalidate'] ? $data['nvalidate'] : 0;
        //添加&更新数据
        if ($kid) {
            //update
            if (!($resmt = $king->db->getRows_one("select modeltable from %s_model where modelid={$modelid};"))) {
                kc_error($king->lang->get('system/error/param') . '<br/>File:' . basename(__FILE__) . ';Line:' . __LINE__);
            }
            $_modeltable = $resmt['modeltable'];
            if (in_array($type, $_array_varchar)) {
                //varchar类型
                $king->db->query('alter table %s__' . $king->db->escape($_modeltable) . ' modify ' . $king->db->escape(kc_post('kfield')) . ' varchar(' . $_array['nsizemax'] . ') null;');
            }
            $king->db->update('%s_field', $_array, 'kid=' . $kid);
            $_nlog = 7;
        } else {
            $_array += array('ktitle' => $data['ktitle'], 'kfield' => $data['kfield'] ? 'k_' . $data['kfield'] : '', 'modelid' => $data['modelid'], 'ntype' => $data['ntype'], 'norder' => $king->db->neworder('%s_field', 'modelid=' . $modelid), 'khelp' => $data['khelp'], 'kid1' => $kid1 ? $kid1 : 0);
            if (in_array($data['ntype'], array('10,11'))) {
                //当文件上传字段的时候,才可以上传文件
                $_array += array('ntype' => 1);
            }
            $king->db->insert('%s_field', $_array);
            $_nlog = 5;
            $res = $king->db->getRows_one("select modeltable from %s_model where modelid={$modelid};");
            $_modeltable = $res['modeltable'];
            if (in_array($type, $_array_varchar)) {
                //varchar类型
                $king->db->query('alter table %s__' . $king->db->escape($_modeltable) . ' add k_' . $king->db->escape($data['kfield']) . ' varchar(' . $_array['nsizemax'] . ') null;');
            } elseif (in_array($type, array(13))) {
                //tinyint
                $king->db->query('alter table %s__' . $king->db->escape($_modeltable) . ' add k_' . $king->db->escape($data['kfield']) . ' tinyint(1) not null default 0;');
            } elseif ($type == 99) {
                //组选项不需要字段
            } else {
                $king->db->query('alter table %s__' . $king->db->escape($_modeltable) . ' add k_' . $king->db->escape($data['kfield']) . ' text null;');
            }
        }
        $king->cache->del('portal/model/model' . $modelid);
        $king->cache->rd('data/_' . $_modeltable);
        //写log
        $king->log($_nlog, 'Field:' . $data['ktitle']);
        kc_goto($king->lang->get('system/goto/is'), 'manage.field.php?action=edt&modelid=' . $modelid . '&kid1=' . $kid1, 'manage.field.php?modelid=' . $modelid . '&kid1=' . $kid1);
    }
    list($left, $right) = king_inc_list();
    $king->skin->output($king->lang->get('portal/title/field' . ($kid ? 'edt' : 'add')) . "({$model['modelname']})", $left, $right, $s);
}