AntonLV 8 лет назад
Родитель
Сommit
b644fc0f60

+ 21 - 10
modules/base/text/classes/BxBaseModTextFormsEntryHelper.php

@@ -74,11 +74,7 @@ class BxBaseModTextFormsEntryHelper extends BxBaseModGeneralFormsEntryHelper
             $oProfile->disapprove(BX_PROFILE_ACTION_AUTO);
 
         // alert
-        $aParams = array('object_author_id' => $aContentInfo[$CNF['FIELD_AUTHOR']]);
-        if(isset($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]))
-        	$aParams['privacy_view'] = $aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']];
-
-        bx_alert($this->_oModule->getName(), 'edited', $aContentInfo[$CNF['FIELD_ID']], false, $aParams);
+        $this->_alertAfterEdit($aContentInfo);
 
         return '';
     }
@@ -88,21 +84,36 @@ class BxBaseModTextFormsEntryHelper extends BxBaseModGeneralFormsEntryHelper
         if ($s = parent::onDataAddAfter($iAccountId, $iContentId))
             return $s;
 
-        $CNF = &$this->_oModule->_oConfig->CNF;
-
         if (!($aContentInfo = $this->_oModule->_oDb->getContentInfoById($iContentId)))
             return MsgBox(_t('_sys_txt_error_occured'));
 
         // alert
+        $this->_alertAfterAdd($aContentInfo);
+
+        return '';
+    }
+
+    protected function _alertAfterAdd($aContentInfo)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
         $aParams = array('object_author_id' => $aContentInfo[$CNF['FIELD_AUTHOR']]);
         if(isset($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]))
         	$aParams['privacy_view'] = $aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']];
 
-        bx_alert($this->_oModule->getName(), 'added', $iContentId, false, $aParams);
-
-        return '';
+        bx_alert($this->_oModule->getName(), 'added', $aContentInfo[$CNF['FIELD_ID']], false, $aParams);
     }
 
+    protected function _alertAfterEdit($aContentInfo)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $aParams = array('object_author_id' => $aContentInfo[$CNF['FIELD_AUTHOR']]);
+        if(isset($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]))
+        	$aParams['privacy_view'] = $aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']];
+
+        bx_alert($this->_oModule->getName(), 'edited', $aContentInfo[$CNF['FIELD_ID']], false, $aParams);
+    }
 }
 
 /** @} */

+ 1 - 0
modules/boonex/posts/classes/BxPostsConfig.php

@@ -34,6 +34,7 @@ class BxPostsConfig extends BxBaseModTextConfig
             'FIELD_AUTHOR' => 'author',
             'FIELD_ADDED' => 'added',
             'FIELD_CHANGED' => 'changed',
+            'FIELD_PUBLISHED' => 'published',
             'FIELD_TITLE' => 'title',
             'FIELD_TEXT' => 'text',
             'FIELD_TEXT_ID' => 'post-text',

+ 37 - 0
modules/boonex/posts/classes/BxPostsCronPublishing.php

@@ -0,0 +1,37 @@
+<?php defined('BX_DOL') or die('hack attempt');
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Posts Posts
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+class BxPostsCronPublishing extends BxDolCron
+{
+	protected $_sModule;
+	protected $_oModule;
+
+	public function __construct()
+    {
+        parent::__construct();
+
+    	$this->_sModule = 'bx_posts';
+    	$this->_oModule = BxDolModule::getInstance($this->_sModule);
+    }
+
+    function processing()
+    {
+        $mixedIds = $this->_oModule->_oDb->publish();
+        var_dump($mixedIds); exit;
+        if($mixedIds === false)
+        	return;
+
+		foreach($mixedIds as $iId)
+        	$this->_oModule->onPublished($iId);
+    }
+}
+
+/** @} */

+ 18 - 0
modules/boonex/posts/classes/BxPostsDb.php

@@ -18,6 +18,24 @@ class BxPostsDb extends BxBaseModTextDb
     {
         parent::__construct($oConfig);
     }
+
+    public function publish()
+    {
+        $CNF = $this->_oConfig->CNF;
+
+        $aEntries = $this->getAll("SELECT `id`, `" . $CNF['FIELD_PUBLISHED'] . "`, from_unixtime(`" . $CNF['FIELD_PUBLISHED'] . "`)  FROM `" . $CNF['TABLE_ENTRIES'] . "` WHERE `" . $CNF['FIELD_STATUS'] . "` = 'awaiting'");
+        if(empty($aEntries) || !is_array($aEntries))
+            return false;
+
+        $iNow = time();
+        var_dump($iNow, $aEntries); exit;
+        $aResult = array();
+        foreach($aEntries as $aEntry)
+            if($aEntry[$CNF['FIELD_PUBLISHED']] <= $iNow) 
+                $aResult[] = $aEntry[$CNF['FIELD_ID']];
+
+        return count($aResult) == (int)$this->query("UPDATE `" . $CNF['TABLE_ENTRIES'] . "` SET `" . $CNF['FIELD_STATUS'] . "` = 'active' WHERE `id` IN (" . $this->implode_escape($aResult) . ")") ? $aResult : false;
+    }
 }
 
 /** @} */

+ 49 - 0
modules/boonex/posts/classes/BxPostsFormEntry.php

@@ -19,6 +19,55 @@ class BxPostsFormEntry extends BxBaseModTextFormEntry
         $this->MODULE = 'bx_posts';
         parent::__construct($aInfo, $oTemplate);
     }
+    
+    public function insert ($aValsToAdd = array(), $isIgnore = false)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(isset($CNF['FIELD_ADDED']) && empty($aValsToAdd[$CNF['FIELD_ADDED']])) {
+            $iAdded = 0;
+            if(isset($this->aInputs[$CNF['FIELD_ADDED']]))
+                $iAdded = $this->getCleanValue($CNF['FIELD_ADDED']);
+            
+            if(empty($iAdded))
+                 $iAdded = time();
+
+            $aValsToAdd[$CNF['FIELD_ADDED']] = $iAdded;
+        }
+
+        if(empty($aValsToAdd[$CNF['FIELD_PUBLISHED']])) {
+            $iPublished = 0;
+            if(isset($this->aInputs[$CNF['FIELD_PUBLISHED']]))
+                $iPublished = $this->getCleanValue($CNF['FIELD_PUBLISHED']);
+                
+             if(empty($iPublished))
+                 $iPublished = time();
+
+             $aValsToAdd[$CNF['FIELD_PUBLISHED']] = $iPublished;
+        }
+
+        $aValsToAdd[$CNF['FIELD_STATUS']] = $aValsToAdd[$CNF['FIELD_PUBLISHED']] > $aValsToAdd[$CNF['FIELD_ADDED']] ? 'awaiting' : 'active';
+
+        return parent::insert ($aValsToAdd, $isIgnore);
+    }
+
+    function update ($iContentId, $aValsToAdd = array(), &$aTrackTextFieldsChanges = null)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        if(empty($aValsToAdd[$CNF['FIELD_PUBLISHED']]) && isset($this->aInputs[$CNF['FIELD_PUBLISHED']])) {
+            $iPublished = $this->getCleanValue($CNF['FIELD_PUBLISHED']);
+            if(empty($iPublished))
+                $iPublished = time();
+
+            $aValsToAdd[$CNF['FIELD_PUBLISHED']] = $iPublished;
+        }
+
+        if(isset($aValsToAdd[$CNF['FIELD_PUBLISHED']]))
+            $aValsToAdd[$CNF['FIELD_STATUS']] = $aValsToAdd[$CNF['FIELD_PUBLISHED']] > time() ? 'awaiting' : 'active';
+
+        return parent::update ($iContentId, $aValsToAdd, $aTrackTextFieldsChanges);
+    }
 }
 
 /** @} */

+ 11 - 0
modules/boonex/posts/classes/BxPostsFormsEntryHelper.php

@@ -18,6 +18,17 @@ class BxPostsFormsEntryHelper extends BxBaseModTextFormsEntryHelper
     {
         parent::__construct($oModule);
     }
+
+    protected function _alertAfterAdd($aContentInfo)
+    {
+        $CNF = &$this->_oModule->_oConfig->CNF;
+
+        $aParams = array('object_author_id' => $aContentInfo[$CNF['FIELD_AUTHOR']]);
+        if(isset($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]))
+        	$aParams['privacy_view'] = $aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']];
+
+        bx_alert($this->_oModule->getName(), ($aContentInfo[$CNF['FIELD_STATUS']] == 'awaiting' ? 'scheduled' : 'added'), $aContentInfo[$CNF['FIELD_ID']], $aContentInfo[$CNF['FIELD_AUTHOR']], $aParams);
+    }
 }
 
 /** @} */

+ 35 - 0
modules/boonex/posts/classes/BxPostsModule.php

@@ -18,6 +18,41 @@ class BxPostsModule extends BxBaseModTextModule
     {
         parent::__construct($aModule);
     }
+
+    /**
+     * Entry post for Timeline module
+     */
+    public function serviceGetTimelinePost($aEvent, $aBrowseParams = array())
+    {
+        $CNF = &$this->_oConfig->CNF;
+
+        $aResult = parent::serviceGetTimelinePost($aEvent, $aBrowseParams);
+        if(empty($aResult) || !is_array($aResult) || empty($aResult['date']))
+            return $aResult;
+
+        $aContentInfo = $this->_oDb->getContentInfoById($aEvent['object_id']);
+        if($aContentInfo[$CNF['FIELD_PUBLISHED']] > $aResult['date'])
+            $aResult['date'] = $aContentInfo[$CNF['FIELD_PUBLISHED']];
+
+        return $aResult;
+    }
+
+    public function onPublished($iContentId)
+    {
+		$CNF = &$this->_oConfig->CNF;
+
+		$aContentInfo = $this->_oDb->getContentInfoById($iContentId);
+        if(!$aContentInfo)
+            return MsgBox(_t('_sys_txt_error_occured'));
+
+		$aParams = array('object_author_id' => $aContentInfo[$CNF['FIELD_AUTHOR']]);
+		if(isset($aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']]))
+			$aParams['privacy_view'] = $aContentInfo[$CNF['FIELD_ALLOW_VIEW_TO']];
+
+        bx_alert($this->getName(), 'added', $iContentId, false, $aParams);
+
+        return '';
+    }
 }
 
 /** @} */

+ 3 - 0
modules/boonex/posts/install/langs/en.xml

@@ -43,6 +43,9 @@
     <string name="_bx_posts_form_entry_input_date_added"><![CDATA[Created]]></string>
     <string name="_bx_posts_form_entry_input_sys_date_changed"><![CDATA[Updated]]></string>
     <string name="_bx_posts_form_entry_input_date_changed"><![CDATA[Updated]]></string>
+    <string name="_bx_posts_form_entry_input_sys_date_published"><![CDATA[Publish at]]></string>
+    <string name="_bx_posts_form_entry_input_date_published"><![CDATA[Publish at]]></string>
+    <string name="_bx_posts_form_entry_input_date_published_info"><![CDATA[Leave empty to publish immediately.]]></string>
 
 	<string name="_bx_posts_acl_action_create_entry"><![CDATA[Create Post]]></string>
 	<string name="_bx_posts_acl_action_delete_entry"><![CDATA[Delete Post]]></string>

+ 3 - 0
modules/boonex/posts/install/sql/disable.sql

@@ -49,3 +49,6 @@ DELETE FROM `sys_objects_uploader` WHERE `object` IN('bx_posts_simple', 'bx_post
 SET @iHandler := (SELECT `id` FROM `sys_alerts_handlers` WHERE `name` = 'bx_posts' LIMIT 1);
 DELETE FROM `sys_alerts` WHERE `handler_id` = @iHandler;
 DELETE FROM `sys_alerts_handlers` WHERE `id` = @iHandler;
+
+-- CRON
+DELETE FROM `sys_cron_jobs` WHERE `name` LIKE 'bx_posts%';

+ 4 - 0
modules/boonex/posts/install/sql/enable.sql

@@ -417,3 +417,7 @@ INSERT INTO `sys_alerts` (`unit`, `action`, `handler_id`) VALUES
 ('system', 'save_setting', @iHandler),
 ('profile', 'delete', @iHandler);
 
+
+-- CRON
+INSERT INTO `sys_cron_jobs` (`name`, `time`, `class`, `file`, `service_call`) VALUES
+('bx_posts_publishing', '* * * * *', 'BxPostsCronPublishing', 'modules/boonex/posts/classes/BxPostsCronPublishing.php', '');

+ 12 - 20
modules/boonex/posts/install/sql/install.sql

@@ -7,6 +7,7 @@ CREATE TABLE IF NOT EXISTS `bx_posts_posts` (
   `author` int(10) unsigned NOT NULL,
   `added` int(11) NOT NULL,
   `changed` int(11) NOT NULL,
+  `published` int(11) NOT NULL,
   `thumb` int(11) NOT NULL,
   `title` varchar(255) NOT NULL,
   `cat` int(11) NOT NULL,
@@ -19,7 +20,7 @@ CREATE TABLE IF NOT EXISTS `bx_posts_posts` (
   `reports` int(11) NOT NULL default '0',
   `featured` int(11) NOT NULL default '0',
   `allow_view_to` int(11) NOT NULL DEFAULT '3',
-  `status` enum('active','hidden') NOT NULL DEFAULT 'active',
+  `status` enum('active','awaiting','hidden') NOT NULL DEFAULT 'active',
   `status_admin` enum('active','hidden') NOT NULL DEFAULT 'active',
   PRIMARY KEY (`id`),
   FULLTEXT KEY `title_text` (`title`,`text`)
@@ -198,7 +199,8 @@ INSERT INTO `sys_form_inputs`(`object`, `module`, `name`, `value`, `values`, `ch
 ('bx_posts', 'bx_posts', 'title', '', '', 0, 'text', '_bx_posts_form_entry_input_sys_title', '_bx_posts_form_entry_input_title', '', 1, 0, 0, '', '', '', 'Avail', '', '_bx_posts_form_entry_input_title_err', 'Xss', '', 1, 0),
 ('bx_posts', 'bx_posts', 'cat', '', '#!bx_posts_cats', 0, 'select', '_bx_posts_form_entry_input_sys_cat', '_bx_posts_form_entry_input_cat', '', 1, 0, 0, '', '', '', 'avail', '', '_bx_posts_form_entry_input_cat_err', 'Xss', '', 1, 0),
 ('bx_posts', 'bx_posts', 'added', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_added', '_bx_posts_form_entry_input_date_added', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
-('bx_posts', 'bx_posts', 'changed', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_changed', '_bx_posts_form_entry_input_date_changed', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0);
+('bx_posts', 'bx_posts', 'changed', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_changed', '_bx_posts_form_entry_input_date_changed', '', 0, 0, 0, '', '', '', '', '', '', '', '', 1, 0),
+('bx_posts', 'bx_posts', 'published', '', '', 0, 'datetime', '_bx_posts_form_entry_input_sys_date_published', '_bx_posts_form_entry_input_date_published', '_bx_posts_form_entry_input_date_published_info', 0, 0, 0, '', '', '', '', '', '', 'DateTimeUtc', '', 1, 0);
 
 
 INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for_levels`, `active`, `order`) VALUES 
@@ -209,17 +211,12 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 ('bx_posts_entry_add', 'pictures', 2147483647, 1, 5),
 ('bx_posts_entry_add', 'allow_view_to', 2147483647, 1, 6),
 ('bx_posts_entry_add', 'location', 2147483647, 1, 7),
-('bx_posts_entry_add', 'do_submit', 2147483647, 0, 8),
+('bx_posts_entry_add', 'published', 192, 1, 8),
 ('bx_posts_entry_add', 'do_publish', 2147483647, 1, 9),
-('bx_posts_entry_delete', 'location', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'cat', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'pictures', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'text', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'do_publish', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'title', 2147483647, 0, 0),
-('bx_posts_entry_delete', 'allow_view_to', 2147483647, 0, 0),
+
 ('bx_posts_entry_delete', 'delete_confirm', 2147483647, 1, 1),
 ('bx_posts_entry_delete', 'do_submit', 2147483647, 1, 2),
+
 ('bx_posts_entry_edit', 'do_publish', 2147483647, 0, 1),
 ('bx_posts_entry_edit', 'delete_confirm', 2147483647, 0, 2),
 ('bx_posts_entry_edit', 'title', 2147483647, 1, 3),
@@ -228,18 +225,13 @@ INSERT INTO `sys_form_display_inputs`(`display_name`, `input_name`, `visible_for
 ('bx_posts_entry_edit', 'pictures', 2147483647, 1, 6),
 ('bx_posts_entry_edit', 'allow_view_to', 2147483647, 1, 7),
 ('bx_posts_entry_edit', 'location', 2147483647, 1, 8),
-('bx_posts_entry_edit', 'do_submit', 2147483647, 1, 9),
-('bx_posts_entry_view', 'location', 2147483647, 0, 0),
-('bx_posts_entry_view', 'pictures', 2147483647, 0, 0),
-('bx_posts_entry_view', 'delete_confirm', 2147483647, 0, 0),
-('bx_posts_entry_view', 'text', 2147483647, 0, 0),
-('bx_posts_entry_view', 'do_publish', 2147483647, 0, 0),
-('bx_posts_entry_view', 'title', 2147483647, 0, 0),
-('bx_posts_entry_view', 'do_submit', 2147483647, 0, 0),
-('bx_posts_entry_view', 'allow_view_to', 2147483647, 0, 0),
+('bx_posts_entry_edit', 'published', 192, 1, 9),
+('bx_posts_entry_edit', 'do_submit', 2147483647, 1, 10),
+
 ('bx_posts_entry_view', 'cat', 2147483647, 1, 1),
 ('bx_posts_entry_view', 'added', 2147483647, 1, 2),
-('bx_posts_entry_view', 'changed', 2147483647, 1, 3);
+('bx_posts_entry_view', 'changed', 2147483647, 1, 3),
+('bx_posts_entry_view', 'published', 192, 1, 4);
 
 -- PRE-VALUES
 INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES

+ 3 - 0
modules/boonex/russian/data/langs/bx_posts/ru.xml

@@ -43,6 +43,9 @@
     <string name="_bx_posts_form_entry_input_date_added"><![CDATA[Создано]]></string>
     <string name="_bx_posts_form_entry_input_sys_date_changed"><![CDATA[Обновлено]]></string>
     <string name="_bx_posts_form_entry_input_date_changed"><![CDATA[Обновлено]]></string>
+    <string name="_bx_posts_form_entry_input_sys_date_published"><![CDATA[Опубликовано]]></string>
+    <string name="_bx_posts_form_entry_input_date_published"><![CDATA[Опубликовано]]></string>
+    <string name="_bx_posts_form_entry_input_date_published_info"><![CDATA[Оставьте пустым, чтобы опубликовать немедленно.]]></string>
 
 	<string name="_bx_posts_acl_action_create_entry"><![CDATA[Создать публикацию]]></string>
 	<string name="_bx_posts_acl_action_delete_entry"><![CDATA[Удалить публикацию]]></string>