Changeset 1305

Show
Ignore:
Timestamp:
02/21/11 20:23:52 (2 years ago)
Author:
Torben Brodt
Message:
  • show rules to users registering with twitter
  • twitter update job to fetch feeds
Location:
twitter
Files:
6 modified

Legend:

Unmodified
Added
Removed
  • twitter/de.xml

    r1299 r1305  
    1010                <item name="wcf.acp.option.twitter_user.description"><![CDATA[Geben Sie hier den Namen ihres Twitter Accounts ein.]]></item> 
    1111                <item name="wcf.acp.option.twitter_consumer_key"><![CDATA[Consumer Key]]></item> 
    12                 <item name="wcf.acp.option.twitter_consumer_key.description"><![CDATA[Geben Sie hier den Consumer Key ein, die Sie auf <a href="http://dev.twitter.com/apps">Twitter</a> erhalten haben.]]></item> 
     12                <item name="wcf.acp.option.twitter_consumer_key.description"><![CDATA[Geben Sie hier den Consumer Key ein, den Sie auf <a href="http://dev.twitter.com/apps">Twitter</a> erhalten haben.]]></item> 
    1313                <item name="wcf.acp.option.twitter_consumer_secret"><![CDATA[Consumer Secret]]></item> 
    1414                <item name="wcf.acp.option.twitter_consumer_secret.description"><![CDATA[Geben Sie hier das Consumer Secret ein, das Sie auf <a href="http://dev.twitter.com/apps">Twitter</a> erhalten haben.]]></item> 
  • twitter/eventlistener.xml

    r1290 r1305  
    33<data> 
    44        <import> 
     5                <eventlistener> 
     6                        <eventclassname>SessionFactory</eventclassname> 
     7                        <eventname>didInit</eventname> 
     8                        <listenerclassfile>lib/system/event/listener/UserLoginTwitterListener.class.php</listenerclassfile> 
     9                </eventlistener> 
    510                <eventlistener> 
    611                        <eventclassname>UserLoginForm</eventclassname> 
  • twitter/files/lib/system/cronjob/TwitterUpdateJob.class.php

    r1303 r1305  
    1111 */ 
    1212class TwitterUpdateJob implements Cronjob { 
    13          
     13 
    1414        /** 
    1515         * @see Cronjob::execute() 
    1616         */ 
    1717        public function execute($data) { 
    18                 $system_user = $this->getSystemUser(); 
    19  
    20                 // no system user yet? 
    21                 if(!$system_user) { 
    22                         return; 
    23                 } 
     18                $action = 'user_timeline'; 
    2419         
    25                 $twitter = Twitter::getInstance(); 
    26                  
    27                 /* 
    28                         http://api.twitter.com/version/statuses/user_timeline.format 
    29                          * since_id 
    30                          * count 
    31                          * trim_user 
    32  
    33                         http://api.twitter.com/version/statuses/mentions.format 
    34                          * since_id 
    35                          * count 
    36                          * trim_user 
    37                           
    38                         @return 
    39                          * text 
    40                          * id 
    41                 */ 
    42         } 
    43          
    44         protected function getSystemUser() { 
    45                 $sql = "SELECT          utt.* 
     20                $sql = "SELECT          *, 
     21                                        ta.screen_name = '".escapeString(TWITTER_USER)."' AS doSave 
    4622                        FROM            wcf".WCF_N."_twitter_account ta 
    4723                        INNER JOIN      wcf".WCF_N."_user_to_twitter utt ON utt.accountID = ta.accountID 
    48                         WHERE           ta.screen_name = '".escapeString(TWITTER_USER)."'"; 
    49                 return WCF::getDB()->getFirstRow($sql); 
     24                        LEFT JOIN       wcf".WCF_N."_twitter_import ti ON ti.accountID = ta.accountID 
     25                        WHERE           (ISNULL(ti.action) OR (ti.action = '".escapeString($action)."'))"; 
     26 
     27                $result = WCF::getDB()->sendQuery($sql); 
     28                while ($row = WCF::getDB()->fetchArray($result)) { 
     29                        $this->load($row, $action); 
     30                } 
     31        } 
     32 
     33        /** 
     34         * 
     35         */ 
     36        public function load($me, $action) { 
     37                $twitterObj = Twitter::getInstance(); 
     38                $twitterObj->setToken($me['userToken'], $me['userSecret']); 
     39                 
     40                $opts = array( 
     41                        'since_id' => $me['since_id'], 
     42                        'trim_user' => 1, 
     43                ); 
     44 
     45                $list = $twitterObj->get('/statuses/'.$action.'.json', $opts); 
     46                 
     47                foreach($list as $message) { 
     48                        if($me['doSave']) { 
     49                                // TODO: check column documentation 
     50                                $sql = 'INSERT IGNORE INTO twitter_message 
     51                                                (messageID, accountID, username, message, time) 
     52                                        VALUES ('.intval($message->id).', '.intval($me['accountID']).',  
     53                                                "'.escapeString($me['screen_name']).'", "'.escapeString($message->text).'",  
     54                                                '.intval($message->time).')'; 
     55                                WCF::getDB()->sendQuery($sql); 
     56                        } 
     57                         
     58                        // TODO: check wether the list is sorted ascending or descending 
     59                        // TODO: update useroption with current status 
     60                } 
    5061        } 
    5162} 
  • twitter/files/lib/system/event/listener/UserLoginTwitterListener.class.php

    r1298 r1305  
    1010 */ 
    1111class UserLoginTwitterListener implements EventListener { 
     12        protected static $ignoreForms = array( 
     13                'rulesagree', 
     14                'userprofileedit', 
     15                'accountmanagement', 
     16        ); 
     17        protected static $ignorePages = array( 
     18                'legalnotice' 
     19        ); 
    1220 
    1321        /** 
     
    2028                 
    2129                switch($className) { 
     30                         
     31                        // did agree with rules? 
     32                        case 'SessionFactory': 
     33                                // didInit 
     34                                $this->validateRuleAgree($eventObj->session); 
     35                        break; 
     36                 
    2237                        // login or register with twitter 
    2338                        case 'UserLoginForm': 
     
    6984                } 
    7085        } 
     86 
     87        /** 
     88         *  
     89         */ 
     90        protected function validateRuleAgree($session) { 
     91                 
     92                // if the modul deactivated, or the user must no agree the rules, we can leave the event. 
     93                // if we log out or on the rulesagree page, we also leave the event. 
     94                if (MODULE_RULE == 0 || $session->getUser()->getPermission('admin.general.canIgnoreRules')) return; 
     95                if ((isset($_REQUEST['action']) && strtolower($_REQUEST['action']) == 'userlogout') || (isset($_REQUEST['form']) && in_array(strtolower($_REQUEST['form']), self::$ignoreForms)) || (isset($_REQUEST['page']) && in_array(strtolower($_REQUEST['page']), self::$ignorePages))) return; 
     96                 
     97                // if the modul activate and the user is twitter user he must agree the rules after a change, and the user is not a guest. 
     98                if ($session->getUser()->userID && TwitterUtil::hasTwitterUser($session->getUser()->userID)) { 
     99                        // select all packageids of the packages where the user is agree with the rules. 
     100                        $packageIDs = $session->getVar('package_agrees'); 
     101                         
     102                        // if the packageid array null or the current package is not in the id, must check the agreement. 
     103                        if (is_null($packageIDs) || !in_array(PACKAGE_ID, $packageIDs)) { 
     104                                // we check the agreement, is the user agree with the rules, we put the package id in to the array and leave the event. 
     105                                if (Ruleset::isUserAgree($session->getUser()->userID, PACKAGE_ID)) { 
     106                                        if (is_null($packageIDs) || !is_array($packageIDs))  
     107                                                $packageIDs = array(PACKAGE_ID); 
     108                                        else $packageIDs[] = PACKAGE_ID; 
     109                                                $session->register('package_agrees', $packageIDs); 
     110                                        return; 
     111                                } 
     112                                HeaderUtil::redirect('index.php?form=RulesAgree'.SID_ARG_2ND_NOT_ENCODED, false); 
     113                                exit; 
     114                        } 
     115                } 
     116        } 
    71117} 
    72118?> 
  • twitter/install.sql

    r1298 r1305  
    2525        KEY (accountID) 
    2626) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
     27 
     28DROP TABLE IF EXISTS wcf1_twitter_import; 
     29CREATE TABLE wcf1_twitter_import ( 
     30        accountID BIGINT unsigned NOT NULL, 
     31        action VARCHAR(255) NULL, 
     32        since_id BIGINT unsigned NOT NULL, 
     33        UNIQUE KEY (accountID, action) 
     34) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
  • twitter/package.xml

    r1303 r1305  
    44                <packagename><![CDATA[Twitter (WCF)]]></packagename> 
    55                <packagedescription><![CDATA[Twitter is a service for friends, family, and co–workers to communicate and stay connected through the exchange of quick, frequent answers to one simple question: What are you doing?]]></packagedescription> 
    6                 <version>2.0.0</version> 
     6                <version>2.1.0</version> 
    77                <date>DATE</date> 
    88                <isunique>1</isunique> 
     
    3636                <!-- languages --> 
    3737                <languages languagecode="de">de.xml</languages> 
     38                <languages languagecode="de-informal">de.xml</languages> 
    3839                <languages languagecode="en">en.xml</languages> 
     40        </instructions> 
     41        <instructions type="update" fromversion="2.0.0"> 
     42                <files>files.tar</files> 
     43                <eventlistener>eventlistener.xml</eventlistener> 
     44                <languages languagecode="de">de.xml</languages> 
     45                <languages languagecode="de-informal">de.xml</languages> 
    3946        </instructions> 
    4047        <instructions type="update" fromversion="1.1.2"> 
     
    5562                <!-- languages --> 
    5663                <languages languagecode="de">de.xml</languages> 
     64                <languages languagecode="de-informal">de.xml</languages> 
    5765                <languages languagecode="en">en.xml</languages> 
    5866        </instructions>