post.php
来自「php 开发的内容管理系统」· PHP 代码 · 共 889 行 · 第 1/3 页
PHP
889 行
<?php
// $Id: post.php,v 1.3 2005/10/19 17:20:32 phppp Exp $
// ------------------------------------------------------------------------ //
// XOOPS - PHP Content Management System //
// Copyright (c) 2000 XOOPS.org //
// <http://www.xoops.org/> //
// ------------------------------------------------------------------------ //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// You may not change or alter any portion of this comment or credits //
// of supporting developers from this source code or any supporting //
// source code which is considered copyrighted (c) material of the //
// original comment or credit authors. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details. //
// //
// You should have received a copy of the GNU General Public License //
// along with this program; if not, write to the Free Software //
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA //
// ------------------------------------------------------------------------ //
// Author: phppp (D.J., infomax@gmail.com) //
// URL: http://xoopsforge.com, http://xoops.org.cn //
// Project: Article Project //
// ------------------------------------------------------------------------ //
if (!defined("XOOPS_ROOT_PATH")) {
exit();
}
defined("NEWBB_FUNCTIONS_INI") || include XOOPS_ROOT_PATH.'/modules/newbb/include/functions.ini.php';
newbb_load_object();
class Post extends ArtObject {
var $attachment_array = array();
function Post()
{
$this->initVar('post_id', XOBJ_DTYPE_INT);
$this->initVar('topic_id', XOBJ_DTYPE_INT, 0, true);
$this->initVar('forum_id', XOBJ_DTYPE_INT, 0, true);
$this->initVar('post_time', XOBJ_DTYPE_INT, 0, true);
$this->initVar('poster_ip', XOBJ_DTYPE_INT, 0);
$this->initVar('poster_name', XOBJ_DTYPE_TXTBOX, "");
$this->initVar('subject', XOBJ_DTYPE_TXTBOX, "", true);
$this->initVar('pid', XOBJ_DTYPE_INT, 0);
$this->initVar('dohtml', XOBJ_DTYPE_INT, 0);
$this->initVar('dosmiley', XOBJ_DTYPE_INT, 1);
$this->initVar('doxcode', XOBJ_DTYPE_INT, 1);
$this->initVar('doimage', XOBJ_DTYPE_INT, 1);
$this->initVar('dobr', XOBJ_DTYPE_INT, 1);
$this->initVar('uid', XOBJ_DTYPE_INT, 1);
$this->initVar('icon', XOBJ_DTYPE_TXTBOX, "");
$this->initVar('attachsig', XOBJ_DTYPE_INT, 0);
$this->initVar('approved', XOBJ_DTYPE_INT, 1);
$this->initVar('post_karma', XOBJ_DTYPE_INT, 0);
$this->initVar('require_reply', XOBJ_DTYPE_INT, 0);
$this->initVar('attachment', XOBJ_DTYPE_TXTAREA, "");
$this->initVar('post_text', XOBJ_DTYPE_TXTAREA, "");
$this->initVar('post_edit', XOBJ_DTYPE_TXTAREA, "");
}
// ////////////////////////////////////////////////////////////////////////////////////
// attachment functions TODO: there should be a file/attachment management class
function getAttachment()
{
if (count($this->attachment_array)) return $this->attachment_array;
$attachment = $this->getVar('attachment');
if (empty($attachment)) $this->attachment_array = null;
else $this->attachment_array = @unserialize(base64_decode($attachment));
return $this->attachment_array;
}
function incrementDownload($attach_key)
{
if (!$attach_key) return false;
$this->attachment_array[strval($attach_key)]['num_download'] ++;
return $this->attachment_array[strval($attach_key)]['num_download'];
}
function saveAttachment()
{
if (is_array($this->attachment_array) && count($this->attachment_array) > 0)
$attachment_save = base64_encode(serialize($this->attachment_array));
else $attachment_save = '';
$this->setVar('attachment', $attachment_save);
$sql = "UPDATE " . $GLOBALS["xoopsDB"]->prefix("bb_posts") . " SET attachment=" . $GLOBALS["xoopsDB"]->quoteString($attachment_save) . " WHERE post_id = " . $this->getVar('post_id');
if (!$result = $GLOBALS["xoopsDB"]->queryF($sql)) {
newbb_message("save attachment error: ". $sql);
return false;
}
return true;
}
function deleteAttachment($attach_array = null)
{
global $xoopsModuleConfig;
$attach_old = $this->getAttachment();
if (!is_array($attach_old) || count($attach_old) < 1) return true;
$this->attachment_array = array();
if ($attach_array === null) $attach_array = array_keys($attach_old); // to delete all!
if (!is_array($attach_array)) $attach_array = array($attach_array);
foreach($attach_old as $key => $attach) {
if (in_array($key, $attach_array)) {
@unlink(XOOPS_ROOT_PATH . '/' . $xoopsModuleConfig['dir_attachments'] . '/' . $attach['name_saved']);
@unlink(XOOPS_ROOT_PATH . '/' . $xoopsModuleConfig['dir_attachments'] . '/thumbs/' . $attach['name_saved']); // delete thumbnails
continue;
}
$this->attachment_array[$key] = $attach;
}
if (is_array($this->attachment_array) && count($this->attachment_array) > 0)
$attachment_save = base64_encode(serialize($this->attachment_array));
else $attachment_save = '';
$this->setVar('attachment', $attachment_save);
return true;
}
function setAttachment($name_saved = '', $name_display = '', $mimetype = '', $num_download = 0)
{
static $counter=0;
$this->attachment_array = $this->getAttachment();
if ($name_saved) {
$key = strval(time()+$counter++);
$this->attachment_array[$key] = array('name_saved' => $name_saved,
'name_display' => isset($name_display)?$name_display:$name_saved,
'mimetype' => $mimetype,
'num_download' => isset($num_download)?intval($num_download):0
);
}
if (is_array($this->attachment_array)){
$attachment_save = base64_encode(serialize($this->attachment_array));
}else{
$attachment_save = null;
}
$this->setVar('attachment', $attachment_save);
return true;
}
function displayAttachment($asSource = false)
{
global $xoopsModule, $xoopsModuleConfig;
$post_attachment = '';
$attachments = $this->getAttachment();
if (is_array($attachments) && count($attachments) > 0) {
include_once XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar("dirname") . '/include/functions.image.php';
$image_extensions = array("jpg", "jpeg", "gif", "png", "bmp"); // need improve !!!
$post_attachment .= '<br /><strong>' . _MD_ATTACHMENT . '</strong>:';
$post_attachment .= '<br /><hr size="1" noshade="noshade" /><br />';
foreach($attachments as $key => $att) {
$file_extension = ltrim(strrchr($att['name_saved'], '.'), '.');
$filetype = $file_extension;
if (file_exists(XOOPS_ROOT_PATH . '/modules/' . $xoopsModule->getVar("dirname") . '/images/filetypes/' . $filetype . '.gif')){
$icon_filetype = XOOPS_URL . '/modules/' . $xoopsModule->getVar("dirname") . '/images/filetypes/' . $filetype . '.gif';
}else{
$icon_filetype = XOOPS_URL . '/modules/' . $xoopsModule->getVar("dirname") . '/images/filetypes/unknown.gif';
}
$file_size = @filesize(XOOPS_ROOT_PATH . '/' . $xoopsModuleConfig['dir_attachments'] . '/' . $att['name_saved']);
$file_size = number_format ($file_size / 1024, 2)." KB";
if (in_array(strtolower($file_extension), $image_extensions) && $xoopsModuleConfig['media_allowed']) {
$post_attachment .= '<br /><img src="' . $icon_filetype . '" alt="' . $filetype . '" /><strong> ' . $att['name_display'] . '</strong> <small>('.$file_size.')</small>';
$post_attachment .= '<br />' . newbb_attachmentImage($att['name_saved'], $asSource);
$isDisplayed = true;
}else{
$post_attachment .= '<a href="' . XOOPS_URL . '/modules/' . $xoopsModule->getVar("dirname") . '/dl_attachment.php?attachid=' . $key . '&post_id=' . $this->getVar('post_id') . '"> <img src="' . $icon_filetype . '" alt="' . $filetype . '" /> ' . $att['name_display'] . '</a> ' . _MD_FILESIZE . ': '. $file_size . '; '._MD_HITS.': ' . $att['num_download'];
}
$post_attachment .= '<br />';
}
}
return $post_attachment;
}
// attachment functions
// ////////////////////////////////////////////////////////////////////////////////////
function setPostEdit($poster_name = '')
{
global $xoopsConfig, $xoopsModuleConfig, $xoopsUser;
if( empty($xoopsModuleConfig['recordedit_timelimit'])
|| (time()-$this->getVar('post_time'))< $xoopsModuleConfig['recordedit_timelimit'] * 60
|| $this->getVar('approved')<1
){
return true;
}
if (is_object($xoopsUser) && $xoopsUser->isActive()) {
if ($xoopsModuleConfig['show_realname'] && $xoopsUser->getVar('name')) {
$edit_user = $xoopsUser->getVar('name');
} else {
$edit_user = $xoopsUser->getVar('uname');
}
}
$post_edit = array();
$post_edit['edit_user'] = $edit_user; // The proper way is to store uid instead of name. However, to save queries when displaying, the current way is ok.
$post_edit['edit_time'] = time();
$post_edits = $this->getVar('post_edit');
if (!empty($post_edits)) $post_edits = unserialize(base64_decode($post_edits));
if (!is_array($post_edits)) $post_edits = array();
$post_edits[] = $post_edit;
$post_edit = base64_encode(serialize($post_edits));
unset($post_edits);
$this->setVar('post_edit', $post_edit);
return true;
}
function displayPostEdit()
{
global $myts, $xoopsModuleConfig;
if( empty($xoopsModuleConfig['recordedit_timelimit']) ) return false;
$post_edit = '';
$post_edits = $this->getVar('post_edit');
if (!empty($post_edits)) $post_edits = unserialize(base64_decode($post_edits));
if (!isset($post_edits) || !is_array($post_edits)) $post_edits = array();
if (is_array($post_edits) && count($post_edits) > 0) {
foreach($post_edits as $postedit) {
$edit_time = intval($postedit['edit_time']);
$edit_user = $myts->stripSlashesGPC($postedit['edit_user']);
$post_edit .= _MD_EDITEDBY . " " . $edit_user . " " . _MD_ON . " " . formatTimestamp(intval($edit_time)) . "<br/>";
}
}
return $post_edit;
}
function &getPostBody($imageAsSource = false)
{
global $xoopsConfig, $xoopsModuleConfig, $xoopsUser, $myts;
$uid = is_object($xoopsUser)? $xoopsUser->getVar('uid'):0;
$karma_handler =& xoops_getmodulehandler('karma', 'newbb');
$user_karma = $karma_handler->getUserKarma();
$post=array();
$post['attachment'] = false;
$post_text = newbb_displayTarea($this->vars['post_text']['value'], $this->getVar('dohtml'), $this->getVar('dosmiley'), $this->getVar('doxcode'), $this->getVar('doimage'), $this->getVar('dobr'));
if (newbb_isAdmin($this->getVar('forum_id')) or $this->checkIdentity()) {
$post['text'] = $post_text. '<br />' .$this->displayAttachment($imageAsSource);
} elseif ($xoopsModuleConfig['enable_karma'] && $this->getVar('post_karma') > $user_karma) {
$post['text'] = sprintf(_MD_KARMA_REQUIREMENT, $user_karma, $this->getVar('post_karma'));
} elseif ($xoopsModuleConfig['allow_require_reply'] && $this->getVar('require_reply') && (!$uid || !isset($viewtopic_users[$uid]))) {
$post['text'] = _MD_REPLY_REQUIREMENT;
} else {
$post['text'] = $post_text. '<br />' .$this->displayAttachment($imageAsSource);
}
$member_handler =& xoops_gethandler('member');
$eachposter = &$member_handler->getUser($this->getVar('uid'));
if (is_object($eachposter) && $eachposter->isActive()) {
if ($xoopsModuleConfig['show_realname'] && $eachposter->getVar('name')) {
$post['author'] = $eachposter->getVar('name');
} else {
$post['author'] = $eachposter->getVar('uname');
}
unset($eachposter);
} else {
$post['author'] = $this->getVar('poster_name')?$this->getVar('poster_name'):$xoopsConfig['anonymous'];
}
$post['subject'] = newbb_htmlSpecialChars($this->vars['subject']['value']);
$post['date'] = $this->getVar('post_time');
return $post;
}
function isTopic()
{
return !$this->getVar('pid');
}
function checkTimelimit($action_tag = 'edit_timelimit')
{
return newbb_checkTimelimit($this->getVar('post_time'), $action_tag);
}
function checkIdentity($uid = -1)
{
global $xoopsUser;
$uid = ($uid > -1)?$uid:(is_object($xoopsUser)? $xoopsUser->getVar('uid'):0);
if ($this->getVar('uid') > 0) {
$user_ok = ($uid == $this->getVar('uid'))?true:false;
} else {
static $user_ip;
if (!isset($user_ip)) {
$user_ip = newbb_getIP();
}
$user_ok = ($user_ip == $this->getVar('poster_ip'))?true:false;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?