/** * @brief showAttachment 防盗链显示、下载附件 * * @param $params 参数 * * @return void */ public function showAttachment($params) { $meta = new MetaLibrary(); $meta->setType(3); $meta->setMID($params['mid']); if (!($m = $meta->getMeta())) { Response::error(404); return; } $m = $m[0]; // 判断 referer 防盗链 $referer = Request::S('HTTP_REFERER', 'string'); if ($referer) { $referer = parse_url($referer); $host = parse_url(OptionLibrary::get('domain')); if (LogX::getDomain($referer['host']) != LogX::getDomain($host['host'])) { Response::error(403); exit; } } $m['alias'] = LOGX_FILE . $m['alias']; // 通过判断getimagesize取出的图片信息是否存在类型标记和色彩位深来防止伪造。 $isimage = false; if (stristr($m['description'], 'image')) { if (function_exists('getimagesize')) { $imginfo = @getimagesize($m['alias']); if (isset($imginfo[2]) && isset($imginfo['bits'])) { $isimage = true; } unset($imginfo); } else { $isimage = true; } } // 附件读取形式,inline直接读取,attachment下载到本地 $disposition = $isimage ? 'inline' : 'attachment'; // 统计附件下载次数 if ($disposition == 'attachment') { $meta->incReply($params['mid']); } $m['description'] = $m['description'] ? $m['description'] : 'application/octet-stream'; if (is_readable($m['alias'])) { @ob_end_clean(); if ($disposition == 'inline') { Response::setExpire(60 * 24 * 365); } header('content-Encoding: none'); header('content-type: ' . $m['description']); header('content-Disposition: ' . $disposition . '; filename=' . urlencode($m['name'])); header('content-Length: ' . abs(filesize($m['alias']))); $fp = @fopen($m['alias'], 'rb'); @fpassthru($fp); @fclose($fp); exit; } else { Response::error(404); } }
?> </label></li> </ul> </li> <li> <label class="add-post-label"><?php _e('Attachment'); ?> </label> <a href="#" onclick="uploadPanel(); return false;" style="font-size:12px;"><?php _e('Upload'); ?> </a> <ul class="clearfix" id="fsUpload"> <?php $meta = new MetaLibrary(); $meta->setType(3); $meta->setPID(1000000000); $attachments = $meta->getMeta(); foreach ($attachments as $c) { ?> <li class="multiline"><label for="attach-<?php echo $c['mid']; ?> "><?php echo $c['name']; ?> </label><a href="#" onclick="insertToEditor('<?php path(array('mid' => $c['mid']), 'Attachment'); ?> ','<?php echo $c['description'];
?> </th> <th><?php _e('Alias'); ?> </th> <th class="radius-topright"><?php _e('Reply'); ?> </th> </tr> </thead> <tbody> <?php $meta = new MetaLibrary(); $meta->setType(2); $categories = $meta->getMeta(); $i = 0; foreach ($categories as $c) { ?> <tr<?php if ($i % 2 == 0) { ?> class="even"<?php } ?> id="tag-<?php echo $c['mid']; ?> "> <td><input type="checkbox" value="<?php
/** * @brief editPost 编辑一篇文章 * * @return void */ public function editPost() { $p = array(); $p['pid'] = Request::P('pid'); $p['title'] = htmlspecialchars(Request::P('title', 'string')); $p['content'] = Request::P('content', 'string'); $p['category'] = Request::P('category', 'array'); if (!$p['pid'] || !$p['title'] || !$p['content'] || count($p['category']) == 1 && !$p['category'][0]) { $r = array('success' => FALSE, 'message' => _t('Title, Content and Category can not be null.')); Response::ajaxReturn($r); return; } $p['allow_reply'] = Request::P('allowComment') ? 1 : 0; $p['top'] = Request::P('top') ? 1 : 0; $p['alias'] = ''; $p['status'] = 1; // 编辑文章 $post = new PostLibrary(); $meta = new MetaLibrary(); $post->editPost($p); // 删除原有的分类与标签 $meta->setPID($p['pid']); $metas = $meta->getMeta(FALSE); foreach ($metas as $m) { if ($m['type'] == 1 || $m['type'] == 2) { $meta->delRelation($m['mid'], $p['pid']); } } $meta->setPID(0); // 处理分类 foreach ($p['category'] as $c) { $meta->addRelation($c, $p['pid']); } // 处理标签 if ($p['tags'] = Request::P('tags', 'string')) { $p['tags'] = str_replace(array(' ', ',', '、'), ',', $p['tags']); $p['tags'] = explode(',', $p['tags']); $meta->setType(2); foreach ($p['tags'] as $tag) { $meta->setName($tag); $t = $meta->getMeta(); if (!$t) { $t = $meta->addMeta(array('type' => 2, 'name' => $tag)); } else { $t = $t[0]['mid']; } $meta->addRelation($t, $p['pid']); } } // 处理新附件 $meta = new MetaLibrary(); $meta->setType(3); $meta->setPID(1000000000); $attachments = $meta->getMeta(); foreach ($attachments as $a) { $meta->movRelation($a['mid'], 1000000000, $p['pid']); } $r = array('success' => TRUE, 'message' => _t('Edit post success.')); Response::ajaxReturn($r); }
/** * @brief editPostDo 编辑文章 * * @return void */ private function editPostDo() { // 验证用户权限 // 非管理员只能编辑自己的文章 // 如果原文章属于多个分类,那么编辑者必须拥有所有从属分类的权限 // 如果原文章不属于任何一个分类(正常情况下不会出现),那么任何人均可以编辑该文章 if (!Widget::getWidget('User')->isAdmin()) { $pid = Request::P('pid'); $meta = new MetaLibrary(); $meta->setPID($pid); $meta->setType(1); $metas = $meta->getMeta(FALSE); foreach ($metas as $m) { if (!Widget::getWidget('User')->checkPrivilege('POST', $m['mid'])) { Response::ajaxReturn(array('success' => FALSE, 'message' => _t('Permission denied.'))); return; } } } Widget::initWidget('Post'); Widget::getWidget('Post')->editPost(); }
/** * @brief editPage 编辑页面 * * @return void */ public function editPage() { $p = array(); $p['pid'] = Request::P('pid'); $p['title'] = Request::P('title', 'string'); $p['alias'] = Request::P('alias', 'string'); $p['content'] = Request::P('content', 'string'); if (!$p['pid'] || !$p['title'] || !$p['content'] || !$p['alias']) { $r = array('success' => FALSE, 'message' => _t('Title, Content and Alias can not be null.')); Response::ajaxReturn($r); return; } $p['allow_reply'] = Request::P('allowComment') ? 1 : 0; $p['top'] = 0; $p['status'] = 1; $post = new PostLibrary(); // 检查别名是否重复 if (($pid = $post->getPage($p['alias'])) && $pid['pid'] != $p['pid']) { $r = array('success' => FALSE, 'message' => _t('Alias already exists.')); Response::ajaxReturn($r); return; } // 写入页面 $post->editPost($p); // 处理新附件 $meta = new MetaLibrary(); $meta->setType(3); $meta->setPID(1000000000); $attachments = $meta->getMeta(); foreach ($attachments as $a) { $meta->movRelation($a['mid'], 1000000000, $p['pid']); } $r = array('success' => TRUE, 'message' => _t('Edit page success.')); Response::ajaxReturn($r); }
?> </th> <th><?php _e('Alias'); ?> </th> <th class="radius-topright"><?php _e('Reply'); ?> </th> </tr> </thead> <tbody> <?php $meta = new MetaLibrary(); $meta->setType(1); $categories = $meta->getMeta(); $i = 0; foreach ($categories as $c) { showItem($i, $c); } function showItem(&$i, $c, $pn = '') { ?> <tr<?php if ($i % 2 == 0) { ?> class="even"<?php } ?> id="category-<?php