post.php
来自「sabreipb 2.1.6 utf-8中文版本!」· PHP 代码 · 共 387 行
PHP
387 行
<?php/*+--------------------------------------------------------------------------| Invision Power Board v2.1.5| =============================================| by Matthew Mecham| (c) 2001 - 2005 Invision Power Services, Inc.| | =============================================| Web: | Time: Wed, 01 Mar 2006 19:11:27 GMT| Release: | Licence Info: +---------------------------------------------------------------------------| > $Date: 2006-02-01 18:16:26 +0000 (Wed, 01 Feb 2006) $| > $Revision: 132 $| > $Author: bfarber $+---------------------------------------------------------------------------|| > Post core module| > Module written by Matt Mecham| > Date started: 14th February 2002|| > Module Version 1.0.0| > DBA Checked: Thu 20 May 2004| > Quality Checked: Wed 15 Sept. 2004+--------------------------------------------------------------------------*/if ( ! defined( 'IN_IPB' ) ){ print "<h1>Incorrect access</h1>You cannot access this file directly. If you have recently upgraded, make sure you upgraded all the relevant files."; exit();}class post{ var $ipsclass; var $han_post; # Code remap var $do_into_code = array(); /*-------------------------------------------------------------------------*/ // Our constructor, load words, load skin, print the topic listing /*-------------------------------------------------------------------------*/ function auto_run() { //----------------------------------------- // Get the sync module //----------------------------------------- if ( USE_MODULES == 1 ) { require ROOT_PATH."modules/ipb_member_sync.php"; $this->modules = new ipb_member_sync(); $this->modules->ipsclass =& $this->ipsclass; } //----------------------------------------- // Check the input //----------------------------------------- $this->ipsclass->input['t'] = intval($this->ipsclass->input['t']); $this->ipsclass->input['p'] = intval($this->ipsclass->input['p']); $this->ipsclass->input['f'] = intval($this->ipsclass->input['f']); $this->ipsclass->input['st'] = intval($this->ipsclass->input['st']); //----------------------------------------- // At some point in the future, I want to // remove the CODE rubbish and move to a // more human-esque 'do' command. //----------------------------------------- $this->do_into_code = array( 'new_post' => '00', 'new_post_do' => '01', 'reply_post' => '02', 'reply_post_do' => '03', 'edit_post' => '08', 'edit_post_do' => '09', 'poll_add' => '14', 'poll_add_do' => '15' ); if ( $this->ipsclass->input['do'] ) { $this->ipsclass->input['CODE'] = $this->do_into_code[ $this->ipsclass->input['do'] ]; } //----------------------------------------- // Load post handler //----------------------------------------- require_once( ROOT_PATH.'sources/handlers/han_post.php' ); $this->han_post = new han_post(); $this->han_post->ipsclass =& $this->ipsclass; $this->han_post->forum = $this->ipsclass->forums->forum_by_id[ $this->ipsclass->input['f'] ]; $this->han_post->md5_check = $this->ipsclass->return_md5_check(); $this->han_post->modules = $this->modules; //----------------------------------------- // Set up object array //----------------------------------------- $this->han_post->obj['preview_post'] = $this->ipsclass->input['preview']; $this->han_post->obj['moderate'] = $this->ipsclass->member['g_avoid_q'] ? 0 : intval($this->han_post->forum['preview_posts']); //----------------------------------------- // Make sure member isn't moderated //----------------------------------------- $this->_check_post_mod(); //----------------------------------------- // Is this forum switched off? //----------------------------------------- if ( ! $this->han_post->forum['status'] ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'forum_read_only') ); } //----------------------------------------- // Check access //----------------------------------------- $this->ipsclass->forums->forums_check_access( $this->han_post->forum['id'], 1 ); //----------------------------------------- // Error out if we can not find the forum //----------------------------------------- if ( ! $this->han_post->forum['id'] ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') ); } if ( ! $this->han_post->forum['sub_can_post'] ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') ); } //----------------------------------------- // Are we allowed to post at all? //----------------------------------------- if ( $this->ipsclass->member['id'] ) { if ( $this->ipsclass->member['restrict_post'] ) { if ( $this->ipsclass->member['restrict_post'] == 1 ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'posting_off') ); } $post_arr = $this->ipsclass->hdl_ban_line( $this->ipsclass->member['restrict_post'] ); if ( time() >= $post_arr['date_end'] ) { //----------------------------------------- // Update this member's profile //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => 'restrict_post=0', 'where' => "id=".intval($this->ipsclass->member['id']) ) ); $this->ipsclass->DB->simple_exec(); } else { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'posting_off_susp', 'EXTRA' => $this->ipsclass->get_date($post_arr['date_end'], 'LONG') ) ); } } //----------------------------------------- // Flood check.. //----------------------------------------- if ( $this->ipsclass->input['CODE'] != "08" and $this->ipsclass->input['CODE'] != "09" and $this->ipsclass->input['CODE'] != "14" and $this->ipsclass->input['CODE'] != "15" ) { if ( $this->ipsclass->vars['flood_control'] > 0 ) { if ($this->ipsclass->member['g_avoid_flood'] != 1) { if ( time() - $this->ipsclass->member['last_post'] < $this->ipsclass->vars['flood_control'] ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'flood_control' , 'EXTRA' => $this->ipsclass->vars['flood_control'] ) ); } } } } } else if ( $this->ipsclass->is_bot == 1 ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'posting_off') ); } //----------------------------------------- // Convert the code ID's into something // use mere mortals can understand.... //----------------------------------------- $this->han_post->obj['action_codes'] = array ( '00' => array( '0' , 'new' ), '01' => array( '1' , 'new' ), '02' => array( '0' , 'reply' ), '03' => array( '1' , 'reply' ), '08' => array( '0' , 'edit' ), '09' => array( '1' , 'edit' ), '10' => array( '0' , 'poll' ), '11' => array( '1' , 'poll' ), '14' => array( '0' , 'poll_after' ), '15' => array( '1' , 'poll_after' ), ); //----------------------------------------- // Make sure our input CODE element is legal. //----------------------------------------- if ( ! isset($this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ]) ) { $this->ipsclass->Error( array( LEVEL => 1, MSG => 'missing_files') ); } //----------------------------------------- // Init classes //----------------------------------------- $this->han_post->method = $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][1]; $this->han_post->init(); //----------------------------------------- // Show form or process? //----------------------------------------- if ( $this->han_post->obj['action_codes'][ $this->ipsclass->input['CODE'] ][0] ) { //----------------------------------------- // Make sure we have a valid auth key //----------------------------------------- if ( $this->ipsclass->input['auth_key'] != $this->han_post->md5_check ) { $this->ipsclass->Error( array( 'LEVEL' => 1, 'MSG' => 'del_post') ); } //----------------------------------------- // Make sure we have a "Guest" Name.. //----------------------------------------- $this->_check_guest_name(); $this->_check_double_post(); $this->han_post->process_post(); } else { $this->han_post->show_form(); } } /*-------------------------------------------------------------------------*/ // Check for double post /*-------------------------------------------------------------------------*/ function _check_double_post() { if ( $this->han_post->obj['preview_post'] == "" ) { if ( preg_match( "/Post,.*,(01|03|07|11)$/", $this->ipsclass->location ) ) { if ( time() - $this->ipsclass->lastclick < 2 ) { if ( $this->ipsclass->input['CODE'] == '01' or $this->ipsclass->input['CODE'] == '11' ) { //----------------------------------------- // Redirect to the newest topic in the forum //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'select' => 'tid', 'from' => 'topics', 'where' => "forum_id='".$this->han_post->forum['id']."' AND approved=1", 'order' => 'last_post DESC', 'limit' => array( 0, 1 ) ) ); $this->ipsclass->DB->simple_exec(); $topic = $this->ipsclass->DB->fetch_row(); $this->ipsclass->boink_it($this->ipsclass->base_url."act=ST&f=".$this->han_post->forum['id']."&t=".$topic['tid']); exit(); } else { //----------------------------------------- // It's a reply, so simply show the topic... //----------------------------------------- $this->ipsclass->boink_it($this->ipsclass->base_url."act=ST&f=".$this->han_post->forum['id']."&t=".$this->ipsclass->input['t']."&view=getlastpost"); exit(); } } } } } /*-------------------------------------------------------------------------*/ // Check for guest's name /*-------------------------------------------------------------------------*/ function _check_guest_name() { if ( ! $this->ipsclass->member['id'] ) { $this->ipsclass->input['UserName'] = trim($this->ipsclass->input['UserName']); $this->ipsclass->input['UserName'] = str_replace( "<br />", "", $this->ipsclass->input['UserName']); $this->ipsclass->input['UserName'] = $this->ipsclass->input['UserName'] ? $this->ipsclass->input['UserName'] : $this->ipsclass->lang['global_guestname']; if ($this->ipsclass->input['UserName'] != $this->ipsclass->lang['global_guestname']) { $this->ipsclass->DB->cache_add_query( 'login_getmember', array( 'username' => trim(strtolower($this->ipsclass->input['UserName'])) ) ); $this->ipsclass->DB->cache_exec_query(); if ( $this->ipsclass->DB->get_num_rows() ) { $this->ipsclass->input['UserName'] = $this->ipsclass->vars['guest_name_pre'].$this->ipsclass->input['UserName'].$this->ipsclass->vars['guest_name_suf']; } } } } /*-------------------------------------------------------------------------*/ // Check for member post queue /*-------------------------------------------------------------------------*/ function _check_post_mod() { //----------------------------------------- // Does this member have mod_posts enabled? //----------------------------------------- if ( $this->ipsclass->member['mod_posts'] ) { if ( $this->ipsclass->member['mod_posts'] == 1 ) { $this->han_post->obj['moderate'] = 1; } else { $mod_arr = $this->ipsclass->hdl_ban_line( $this->ipsclass->member['mod_posts'] ); if ( time() >= $mod_arr['date_end'] ) { //----------------------------------------- // Update this member's profile //----------------------------------------- $this->ipsclass->DB->simple_construct( array( 'update' => 'members', 'set' => 'mod_posts=0', 'where' => "id=".intval($this->ipsclass->member['id']) ) ); $this->ipsclass->DB->simple_exec(); $this->han_post->obj['moderate'] = intval($this->han_post->forum['preview_posts']); } else { $this->han_post->obj['moderate'] = 1; } } } } }?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?