⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adminaddpostaction.class.php

📁 一个用PHP编写的
💻 PHP
字号:
<?php	lt_include( PLOG_CLASS_PATH."class/action/admin/adminpostmanagementcommonaction.class.php" );	lt_include( PLOG_CLASS_PATH."class/view/admin/adminpostslistview.class.php" );	    lt_include( PLOG_CLASS_PATH."class/view/admin/admintemplatedview.class.php" );    lt_include( PLOG_CLASS_PATH."class/view/admin/adminnewpostview.class.php" );        lt_include( PLOG_CLASS_PATH."class/data/validator/stringvalidator.class.php" );	    lt_include( PLOG_CLASS_PATH."class/data/validator/arrayvalidator.class.php" );	        lt_include( PLOG_CLASS_PATH."class/data/validator/integervalidator.class.php" );	    /**     * \ingroup Action     * @private     *     * Action that adds a new post to the database.     */    class AdminAddPostAction extends AdminPostManagementCommonAction	{    	/**         * Constructor. If nothing else, it also has to call the constructor of the parent         * class, BlogAction with the same parameters         */        function AdminAddPostAction( $actionInfo, $request )        {        	$this->AdminPostManagementCommonAction( $actionInfo, $request );        	        	// for data validation purposes, posts must have at least a topic, an intro text, and a category        	$this->registerFieldValidator( "postText", new StringValidator());        	$this->registerFieldValidator( "postTopic", new StringValidator());        	$this->registerFieldValidator( "postCategories", new ArrayValidator());        	$this->registerFieldValidator( "globalArticleCategoryId", new IntegerValidator(), true );        	$view = new AdminNewPostView( $this->_blogInfo );        	$view->setErrorMessage( $this->_locale->tr("error_adding_post"));        	$this->setValidationErrorView( $view );        	        	// these fields do not need to be validated but should be there when we show the view once again        	$this->registerField( "postSlug" );        	$this->registerField( "postStatus" );        	$this->registerField( "sendNotification" );        	$this->registerField( "sendTrackbacks" );        	$this->registerField( "sendPings" );        	$this->registerField( "postId" );        	$this->registerField( "commentsEnabled" );        	$this->registerField( "customField" );        	$this->registerField( "postDateTime" );        	$this->registerField( "trackbackUrls" );        				// security checks			$this->requirePermission( "add_post" );        }        		/**		 * @private		 *		 * If the form is not validate, we need to clean the autosave cookie		 */		function validate()		{			$validateOk = parent::validate();			if( !$validateOk )				$this->clearAutoSaveCookie();							return $validateOk;		}		/**		 * @private		 *		 * returns the id of the post or 'false' if it couldn't be saved		 */		function _savePostData( $article )		{            lt_include( PLOG_CLASS_PATH."class/dao/articles.class.php" );			$status = $this->_postStatus;						$articles = new Articles();			$article->setFields( $this->_getArticleCustomFields());						//print_r($article->_customFields);						// notifiy about this event			$this->notifyEvent( EVENT_PRE_POST_ADD, Array( "article" => &$article ));										// in case the post is already in the db			if( $this->_postId != "" ) {				$article->setId( $this->_postId );				$artId = $this->_postId;				$postSavedOk = $articles->updateArticle( $article );								if( $postSavedOk )					$artId = $this->_postId;				else					$artId = false;			}			else {				$artId = $articles->addArticle( $article );			}						return $artId;		}        /**         * Carries out the specified action         */        function perform()        {            lt_include( PLOG_CLASS_PATH."class/dao/article.class.php" );	        lt_include( PLOG_CLASS_PATH."class/data/textfilter.class.php" );			$this->_fetchCommonData();			$this->_postId = $this->_request->getValue( "postId" );            $this->_previewPost    = $this->_request->getValue( "previewPost" );            $this->_addPost        = $this->_request->getValue( "addPost" );			$this->_saveDraft      = $this->_request->getValue( "isDraft" );	                    // we know for sure that the information is correct so we can now add            // the post to the database			$postText = Textfilter::xhtmlize($this->_postText);						$article  = new Article( $this->_postTopic, 			                         $postText, 			                         $this->_postCategories,									 $this->_userInfo->getId(), 									 $this->_blogInfo->getId(), 									 $this->_postStatus, 									 0, 									 Array(), 									 $this->_postSlug );			// set also the date before it's too late			$article->setDateObject( $this->_postTimestamp );			$article->setCommentsEnabled( $this->_commentsEnabled );			$article->setGlobalCategoryId( $this->_globalArticleCategoryId );					// save the article to the db			$artId = $this->_savePostData( $article );						// depending on the permission that the user has, we'll show one view or another			if( !$this->userHasPermission( "view_posts" ))				$view = "AdminNewPostView";			else				$view = "AdminPostsListView";						        	// once we have built the object, we can add it to the database        	if( $artId ) {	            // clear autosave cookie	            $this->clearAutoSaveCookie();                $this->_view = new $view( $this->_blogInfo );            	//$article->setId( $artId );                $message = $this->_locale->tr("post_added_ok");                                // train the filter, but only if enabled				if( $this->_config->getValue( "bayesian_filter_enabled" ) == true ) {		            include_once( PLOG_CLASS_PATH."class/bayesian/bayesianfiltercore.class.php" );	                BayesianFilterCore::trainWithArticle( $article );				}                                        		// add the article notification if requested to do so            	if( $this->_sendNotification ) {                    require_once( PLOG_CLASS_PATH."class/dao/articlenotifications.class.php" );                	$artNotifications = new ArticleNotifications();	            	$artNotifications->addNotification( $artId, $this->_blogInfo->getId(), $this->_userInfo->getId());                    $message .= " ".$this->_locale->tr("send_notifications_ok");        	    }                // we only have to send trackback pings if the article was published                // otherwise there is no need to...				$article->setId( $artId );                if( $article->getStatus() == POST_STATUS_PUBLISHED) {                	// get the output from the xmlrpc pings but only if the user decided to do so!					if( $this->_sendPings) {                        $t = new Timestamp();                        $today = $t->getTimestamp();                        if($today > $article->getDate()){                            $pingsOutput = $this->sendXmlRpcPings();                            $message .= "<br/><br/>".$pingsOutput;                        }					}                    // and now check what to do with the trackbacks                    if( $this->_sendTrackbacks ) {                        lt_include( PLOG_CLASS_PATH."class/data/stringutils.class.php" );                    	// get the links from the text of the post        				$postLinks = StringUtils::getLinks( stripslashes($article->getText()));		                // get the real trackback links from trackbackUrls		                $trackbackLinks = Array();		                foreach(explode( "\r\n", $this->_trackbackUrls ) as $host ) {		                	trim($host);		                	if( $host != "" && $host != "\r\n" && $host != "\r" && $host != "\n" )		                    	array_push( $trackbackLinks, $host );		                }        				// if no links, there is nothing to do        				if( count($postLinks) == 0 && count($trackbackLinks) == 0 ) {        					$this->_view = new $view( $this->_blogInfo );			                $this->_view->setErrorMessage( $this->_locale->tr("error_no_trackback_links_sent"));        				}        				else {            				$this->_view = new AdminTemplatedView( $this->_blogInfo, "sendtrackbacks" );            				$this->_view->setValue( "post", $article );            				$this->_view->setValue( "postLinks", $postLinks );							$this->_view->setValue( "trackbackLinks", $trackbackLinks );            				         				}                    }                    $this->_view->setSuccessMessage( $message );										$this->notifyEvent( EVENT_POST_POST_ADD, Array( "article" => &$article )); 										// empty the cache used by this blog	                lt_include( PLOG_CLASS_PATH."class/template/cachecontrol.class.php" );					CacheControl::resetBlogCache( $this->_blogInfo->getId());						                }                else {                	$this->_view = new $view( $this->_blogInfo );                    $this->_view->setSuccessMessage( $this->_locale->tr("post_added_not_published") );										$this->notifyEvent( EVENT_POST_POST_ADD, Array( "article" => &$article ));                }        	}        	else {        		$this->_view = new $view( $this->_blogInfo );            	$this->_view->setErrorMessage( $this->_locale->tr("error_adding_post") );        	}            $this->setCommonData();                        // better to return true if everything fine            return true;        }                function clearAutoSaveCookie()        {        	$rg = $this->_blogInfo->getBlogRequestGenerator();        	$plogBaseUrl = $rg->getBaseUrl(false);        	$cookieBaseName = "LT" . preg_replace("/[^a-zA-Z0-9]/", "", $plogBaseUrl).$this->_blogInfo->getId();        	// set the auto save cookie as false	    	setcookie( $cookieBaseName.'postNotSaved', '0', -1, '/' );	    	setcookie( $cookieBaseName.'postTopic', '', -1, '/' );	    	setcookie( $cookieBaseName.'postText', '', -1, '/' );        }    }?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -