Version Notes
Fixed losing block order on cms edit page load
Download this release
Release Info
| Developer | Hussey Coding |
| Extension | HusseyCoding_TwitterReader |
| Version | 1.0.5 |
| Comparing to | |
| See all releases | |
Version 1.0.5
- app/code/community/HusseyCoding/Common/etc/system.xml +9 -0
- app/code/community/HusseyCoding/TwitterReader/Block/Tweets.php +8 -0
- app/code/community/HusseyCoding/TwitterReader/Block/Verify.php +84 -0
- app/code/community/HusseyCoding/TwitterReader/Helper/Data.php +128 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Config/CoreData.php +8 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Manage.php +197 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Mysql4/Twitterreader.php +8 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Mysql4/Twitterreader/Collection.php +9 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Observer.php +17 -0
- app/code/community/HusseyCoding/TwitterReader/Model/Twitterreader.php +9 -0
- app/code/community/HusseyCoding/TwitterReader/controllers/CallbackController.php +49 -0
- app/code/community/HusseyCoding/TwitterReader/etc/adminhtml.xml +25 -0
- app/code/community/HusseyCoding/TwitterReader/etc/config.xml +111 -0
- app/code/community/HusseyCoding/TwitterReader/etc/system.xml +186 -0
- app/code/community/HusseyCoding/TwitterReader/sql/twitterreader_setup/mysql4-install-1.0.0.php +19 -0
- app/design/adminhtml/default/default/layout/twitterreader.xml +14 -0
- app/design/adminhtml/default/default/template/twitterreader/verify.phtml +24 -0
- app/design/frontend/base/default/layout/twitterreader.xml +47 -0
- app/design/frontend/base/default/template/twitterreader/tweets.phtml +48 -0
- app/etc/modules/HusseyCoding_Common.xml +9 -0
- app/etc/modules/HusseyCoding_TwitterReader.xml +9 -0
- package.xml +18 -0
- skin/adminhtml/default/default/twitterreader/js/twitterreader.js +62 -0
- skin/frontend/base/default/css/twitterreader.css +6 -0
app/code/community/HusseyCoding/Common/etc/system.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<tabs>
|
| 4 |
+
<husseycoding translate="label">
|
| 5 |
+
<label>Hussey Coding</label>
|
| 6 |
+
<sort_order>500</sort_order>
|
| 7 |
+
</husseycoding>
|
| 8 |
+
</tabs>
|
| 9 |
+
</config>
|
app/code/community/HusseyCoding/TwitterReader/Block/Tweets.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Block_Tweets extends Mage_Core_Block_Text_List
|
| 3 |
+
{
|
| 4 |
+
public function verifyBlock($config, $block)
|
| 5 |
+
{
|
| 6 |
+
if (!Mage::getStoreConfig('twitterreader/position/' . $config)) $this->unsetChild($block);
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Block/Verify.php
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Block_Verify extends Mage_Page_Block_Html
|
| 3 |
+
{
|
| 4 |
+
public function verifyCredentials()
|
| 5 |
+
{
|
| 6 |
+
if (Mage::app()->getRequest()->getParam('section') == 'twitterreader' && !Mage::app()->getRequest()->getParam('website')):
|
| 7 |
+
$key = Mage::getStoreConfig('twitterreader/configuration/consumer_key');
|
| 8 |
+
$secret = Mage::getStoreConfig('twitterreader/configuration/consumer_secret');
|
| 9 |
+
$request = Mage::helper('twitterreader')->getOauthObject('twitterreader/configuration/request_token');
|
| 10 |
+
$access = Mage::helper('twitterreader')->getOauthObject('twitterreader/configuration/access_token');
|
| 11 |
+
if (Mage::registry('twitterreader_problem')):
|
| 12 |
+
return 'problem';
|
| 13 |
+
elseif (!$key || !$secret):
|
| 14 |
+
return 'consumer_missing';
|
| 15 |
+
elseif (!$request && !$access):
|
| 16 |
+
$config = array(
|
| 17 |
+
'callbackUrl' => Mage::helper('adminhtml')->getUrl('twitterreader/callback/access'),
|
| 18 |
+
'siteUrl' => 'https://api.twitter.com/oauth',
|
| 19 |
+
'consumerKey' => $key,
|
| 20 |
+
'consumerSecret' => $secret
|
| 21 |
+
);
|
| 22 |
+
$consumer = new Zend_Oauth_Consumer($config);
|
| 23 |
+
|
| 24 |
+
try {
|
| 25 |
+
$request = $consumer->getRequestToken();
|
| 26 |
+
Mage::helper('twitterreader')->storeOauthObject($request, 'twitterreader/configuration/request_token');
|
| 27 |
+
$url = $consumer->getRedirectUrl();
|
| 28 |
+
Mage::getConfig()->saveConfig('twitterreader/configuration/callback_url', $url);
|
| 29 |
+
Mage::getConfig()->reinit();
|
| 30 |
+
Mage::app()->reinitStores();
|
| 31 |
+
return 'verify_credentials';
|
| 32 |
+
} catch (Exception $e) {
|
| 33 |
+
return 'bad_callback';
|
| 34 |
+
}
|
| 35 |
+
elseif ($request && !$access):
|
| 36 |
+
return 'verify_credentials';
|
| 37 |
+
else:
|
| 38 |
+
$config = array(
|
| 39 |
+
'callbackUrl' => Mage::helper('adminhtml')->getUrl('twitterreader/callback/access'),
|
| 40 |
+
'siteUrl' => 'https://api.twitter.com/oauth',
|
| 41 |
+
'consumerKey' => $key,
|
| 42 |
+
'consumerSecret' => $secret
|
| 43 |
+
);
|
| 44 |
+
$token = Mage::helper('twitterreader')->getAccessToken();
|
| 45 |
+
|
| 46 |
+
if ($token):
|
| 47 |
+
$client = $token->getHttpClient($config);
|
| 48 |
+
$client->setUri('https://api.twitter.com/1.1/application/rate_limit_status.json');
|
| 49 |
+
$client->setMethod(Zend_Http_Client::GET);
|
| 50 |
+
$client->setParameterGet('resources', 'account');
|
| 51 |
+
|
| 52 |
+
try {
|
| 53 |
+
$response = $client->request();
|
| 54 |
+
|
| 55 |
+
$limit = Zend_Json::decode($response->getBody());
|
| 56 |
+
$limit = $limit['resources']['account']['/account/verify_credentials'];
|
| 57 |
+
if ($limit['remaining'] > 0):
|
| 58 |
+
$client->setUri('https://api.twitter.com/1.1/account/verify_credentials.json');
|
| 59 |
+
$client->setMethod(Zend_Http_Client::GET);
|
| 60 |
+
$response = $client->request();
|
| 61 |
+
|
| 62 |
+
$status = Zend_Json::decode($response->getBody());
|
| 63 |
+
|
| 64 |
+
if (isset($status['errors'])):
|
| 65 |
+
return 'bad_verify';
|
| 66 |
+
endif;
|
| 67 |
+
elseif ($limit):
|
| 68 |
+
$timestamp = Mage::getModel('core/date')->timestamp($limit['reset']);
|
| 69 |
+
return $timestamp;
|
| 70 |
+
else:
|
| 71 |
+
return 'bad_callback';
|
| 72 |
+
endif;
|
| 73 |
+
} catch (Exception $e) {
|
| 74 |
+
return 'bad_verify';
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
return 'ready';
|
| 78 |
+
endif;
|
| 79 |
+
endif;
|
| 80 |
+
endif;
|
| 81 |
+
|
| 82 |
+
return false;
|
| 83 |
+
}
|
| 84 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Helper/Data.php
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Helper_Data extends Mage_Core_Helper_Abstract
|
| 3 |
+
{
|
| 4 |
+
private $_collection;
|
| 5 |
+
|
| 6 |
+
public function collectFeedContent()
|
| 7 |
+
{
|
| 8 |
+
if (!$this->_collection):
|
| 9 |
+
$store = Mage::app()->getStore()->getCode();
|
| 10 |
+
$screenname = Mage::getStoreConfig('twitterreader/configuration/screen_name');
|
| 11 |
+
$collection = Mage::getModel('twitterreader/twitterreader')->getCollection();
|
| 12 |
+
$select = $collection->getSelect();
|
| 13 |
+
$select
|
| 14 |
+
->where('store = ?', $store)
|
| 15 |
+
->where('screen_name = ?', $screenname)
|
| 16 |
+
->order(array('timestamp DESC'))
|
| 17 |
+
->limit($this->getDisplayCount());
|
| 18 |
+
|
| 19 |
+
$collection = count($collection) ? $collection : false;
|
| 20 |
+
$this->_collection = $collection;
|
| 21 |
+
return $collection;
|
| 22 |
+
else:
|
| 23 |
+
return $this->_collection;
|
| 24 |
+
endif;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
private function getDisplayCount($store = null)
|
| 28 |
+
{
|
| 29 |
+
if ($store):
|
| 30 |
+
$count = Mage::getStoreConfig('twitterreader/configuration/tweet_display', $store);
|
| 31 |
+
else:
|
| 32 |
+
$count = Mage::getStoreConfig('twitterreader/configuration/tweet_display');
|
| 33 |
+
endif;
|
| 34 |
+
$count = $count ? (int) $count : 5;
|
| 35 |
+
|
| 36 |
+
return $count ? $count : 5;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
public function getStoreCount($store = null)
|
| 40 |
+
{
|
| 41 |
+
if ($store):
|
| 42 |
+
return $this->getDisplayCount($store) + 10;
|
| 43 |
+
else:
|
| 44 |
+
return $this->getDisplayCount() + 10;
|
| 45 |
+
endif;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
public function storeOauthObject($object, $path)
|
| 49 |
+
{
|
| 50 |
+
$object = Zend_Serializer::serialize($object);
|
| 51 |
+
$resource = Mage::getSingleton('core/resource');
|
| 52 |
+
$write = $resource->getConnection('twitterreader_write');
|
| 53 |
+
$query = 'UPDATE `' . $resource->getTableName('core/config_data') . '` SET `value` = ' . $write->quote($object) . ' WHERE `path` = \'' . $path . '\'';
|
| 54 |
+
$write->query($query);
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
public function getOauthObject($path)
|
| 58 |
+
{
|
| 59 |
+
$resource = Mage::getSingleton('core/resource');
|
| 60 |
+
$read = $resource->getConnection('twitterreader_read');
|
| 61 |
+
$query = 'SELECT `value` FROM `' . $resource->getTableName('core/config_data') . '` WHERE `path` = \'' . $path . '\'';
|
| 62 |
+
$object = $read->fetchOne($query);
|
| 63 |
+
|
| 64 |
+
if ($object):
|
| 65 |
+
$object = stripslashes($object);
|
| 66 |
+
try {
|
| 67 |
+
$object = Zend_Serializer::unserialize($object);
|
| 68 |
+
} catch (Exception $e) {
|
| 69 |
+
Mage::register('twitterreader_problem', 1);
|
| 70 |
+
$object = false;
|
| 71 |
+
}
|
| 72 |
+
endif;
|
| 73 |
+
|
| 74 |
+
return $object;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
public function removeOauthObject($path)
|
| 78 |
+
{
|
| 79 |
+
$resource = Mage::getSingleton('core/resource');
|
| 80 |
+
$write = $resource->getConnection('twitterreader_write');
|
| 81 |
+
$query = 'UPDATE `' . $resource->getTableName('core/config_data') . '` SET `value` = NULL WHERE `path` = \'' . $path . '\'';
|
| 82 |
+
$write->query($query);
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
public function checkCoreRow($path)
|
| 86 |
+
{
|
| 87 |
+
$resource = Mage::getSingleton('core/resource');
|
| 88 |
+
$read = $resource->getConnection('twitterreader_read');
|
| 89 |
+
$query = 'SELECT `config_id` FROM `' . $resource->getTableName('core/config_data') . '` WHERE `path` = \'' . $path . '\'';
|
| 90 |
+
$object = $read->fetchOne($query);
|
| 91 |
+
|
| 92 |
+
return $object ? true : false;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
public function getAccessToken()
|
| 96 |
+
{
|
| 97 |
+
return $this->getOauthObject('twitterreader/configuration/access_token');
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
public function displayDate($timestamp)
|
| 101 |
+
{
|
| 102 |
+
$timestamp = strtotime($timestamp);
|
| 103 |
+
$format = Mage::getStoreConfig('twitterreader/configuration/date_format');
|
| 104 |
+
$format = $format ? $format : 'D jS M';
|
| 105 |
+
$return = date($format, $timestamp);
|
| 106 |
+
|
| 107 |
+
return $return ? ' - ' . $return : '';
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
public function formatContent($content)
|
| 111 |
+
{
|
| 112 |
+
$length = (int) Mage::getStoreConfig('twitterreader/configuration/tweet_length');
|
| 113 |
+
if ($length && strlen($content) > $length):
|
| 114 |
+
$content = substr($content, 0, $length) . '...';
|
| 115 |
+
endif;
|
| 116 |
+
|
| 117 |
+
return $content;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
public function show()
|
| 121 |
+
{
|
| 122 |
+
if (Mage::getStoreConfig('twitterreader/position/custom')):
|
| 123 |
+
return Mage::app()->getLayout()->getBlock('twitterreader')->toHtml();
|
| 124 |
+
endif;
|
| 125 |
+
|
| 126 |
+
return '';
|
| 127 |
+
}
|
| 128 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Config/CoreData.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Config_CoreData extends Mage_Core_Model_Config_Data
|
| 3 |
+
{
|
| 4 |
+
public function disableSave()
|
| 5 |
+
{
|
| 6 |
+
$this->_dataSaveAllowed = false;
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Manage.php
ADDED
|
@@ -0,0 +1,197 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Manage
|
| 3 |
+
{
|
| 4 |
+
public function cron()
|
| 5 |
+
{
|
| 6 |
+
if (!Mage::registry('twitterreader_runonce')):
|
| 7 |
+
$count = Mage::getModel('twitterreader/twitterreader')->getCollection();
|
| 8 |
+
$count = count($count);
|
| 9 |
+
if ($this->getLatest() || $this->getCombinedCount() < $count):
|
| 10 |
+
$this->cleanUp();
|
| 11 |
+
endif;
|
| 12 |
+
Mage::register('twitterreader_runonce', true);
|
| 13 |
+
endif;
|
| 14 |
+
|
| 15 |
+
return true;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
private function getCombinedCount()
|
| 19 |
+
{
|
| 20 |
+
$return = 0;
|
| 21 |
+
foreach (Mage::app()->getStores() as $store):
|
| 22 |
+
$return = $return + Mage::helper('twitterreader')->getStoreCount($store->getCode());
|
| 23 |
+
endforeach;
|
| 24 |
+
|
| 25 |
+
return $return;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
private function getLatest()
|
| 29 |
+
{
|
| 30 |
+
$stores = array();
|
| 31 |
+
$storecount = array();
|
| 32 |
+
foreach (Mage::app()->getStores() as $store):
|
| 33 |
+
$screenname = Mage::getStoreConfig('twitterreader/configuration/screen_name', $store->getCode());
|
| 34 |
+
if ($screenname):
|
| 35 |
+
$stores[$store->getCode()] = $screenname;
|
| 36 |
+
$storecount[$store->getCode()] = Mage::helper('twitterreader')->getStoreCount($store->getCode());
|
| 37 |
+
endif;
|
| 38 |
+
endforeach;
|
| 39 |
+
$key = Mage::getStoreConfig('twitterreader/configuration/consumer_key');
|
| 40 |
+
$secret = Mage::getStoreConfig('twitterreader/configuration/consumer_secret');
|
| 41 |
+
$access = Mage::helper('twitterreader')->getAccessToken();
|
| 42 |
+
|
| 43 |
+
if (!$key || !$secret || !$access):
|
| 44 |
+
return false;
|
| 45 |
+
endif;
|
| 46 |
+
|
| 47 |
+
$config = array(
|
| 48 |
+
'callbackUrl' => Mage::helper('adminhtml')->getUrl('twitterreader/callback/access'),
|
| 49 |
+
'siteUrl' => 'https://api.twitter.com/oauth',
|
| 50 |
+
'consumerKey' => $key,
|
| 51 |
+
'consumerSecret' => $secret
|
| 52 |
+
);
|
| 53 |
+
|
| 54 |
+
$client = $access->getHttpClient($config);
|
| 55 |
+
$client->setUri('https://api.twitter.com/1.1/application/rate_limit_status.json');
|
| 56 |
+
$client->setMethod(Zend_Http_Client::GET);
|
| 57 |
+
$client->setParameterGet('resources', 'account,statuses');
|
| 58 |
+
|
| 59 |
+
try {
|
| 60 |
+
$response = $client->request();
|
| 61 |
+
|
| 62 |
+
$limit = Zend_Json::decode($response->getBody());
|
| 63 |
+
$credlimit = $limit['resources']['account']['/account/verify_credentials'];
|
| 64 |
+
if ($credlimit['remaining'] > 0):
|
| 65 |
+
$client->setUri('https://api.twitter.com/1.1/account/verify_credentials.json');
|
| 66 |
+
$client->setMethod(Zend_Http_Client::GET);
|
| 67 |
+
$response = $client->request();
|
| 68 |
+
|
| 69 |
+
$status = Zend_Json::decode($response->getBody());
|
| 70 |
+
|
| 71 |
+
if (isset($status['errors'])) return false;
|
| 72 |
+
|
| 73 |
+
$userlimit = $limit['resources']['statuses']['/statuses/user_timeline'];
|
| 74 |
+
if ($userlimit['remaining'] >= $this->findRequestCount($stores, $storecount)):
|
| 75 |
+
$screencontent = array();
|
| 76 |
+
$storecontent = array();
|
| 77 |
+
foreach ($stores as $store => $screenname):
|
| 78 |
+
$screenstore = isset($screencontent[$screenname]) ? $screencontent[$screenname] : false;
|
| 79 |
+
if ($screenstore && $storecount[$store] <= $storecount[$screenstore]):
|
| 80 |
+
$storecontent[$store] = $storecontent[$screenstore];
|
| 81 |
+
else:
|
| 82 |
+
$client->setUri('https://api.twitter.com/1.1/statuses/user_timeline.json');
|
| 83 |
+
$client->setMethod(Zend_Http_Client::GET);
|
| 84 |
+
$client->setParameterGet('screen_name', $screenname);
|
| 85 |
+
$client->setParameterGet('count', $storecount[$store]);
|
| 86 |
+
$client->setParameterGet('trim_user', 'true');
|
| 87 |
+
$client->setParameterGet('exclude_replies', 'true');
|
| 88 |
+
$client->setParameterGet('include_rts', 'false');
|
| 89 |
+
|
| 90 |
+
$response = $client->request();
|
| 91 |
+
|
| 92 |
+
$content = Zend_Json::decode($response->getBody());
|
| 93 |
+
$screencontent[$screenname] = $store;
|
| 94 |
+
$storecontent[$store] = $content;
|
| 95 |
+
endif;
|
| 96 |
+
endforeach;
|
| 97 |
+
endif;
|
| 98 |
+
endif;
|
| 99 |
+
} catch (Exception $e) {
|
| 100 |
+
return false;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
$cleanup = $this->processStoreContent($storecontent);
|
| 104 |
+
|
| 105 |
+
return $cleanup;
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
private function findRequestCount($stores, $storecount)
|
| 109 |
+
{
|
| 110 |
+
$screencontent = array();
|
| 111 |
+
$return = 0;
|
| 112 |
+
foreach ($stores as $store => $screenname):
|
| 113 |
+
$screenstore = isset($screencontent[$screenname]) ? $screencontent[$screenname] : false;
|
| 114 |
+
if ($screenstore && $storecount[$store] <= $storecount[$screenstore]):
|
| 115 |
+
$return++;
|
| 116 |
+
else:
|
| 117 |
+
$screencontent[$screenname] = $store;
|
| 118 |
+
endif;
|
| 119 |
+
endforeach;
|
| 120 |
+
|
| 121 |
+
return count($stores) - $return;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
private function processStoreContent($storecontent)
|
| 125 |
+
{
|
| 126 |
+
$cleanup = false;
|
| 127 |
+
$ids = $this->getIdsByStore();
|
| 128 |
+
foreach ($storecontent as $store => $content):
|
| 129 |
+
foreach ($content as $tweet):
|
| 130 |
+
$newid = $tweet['id_str'];
|
| 131 |
+
if (!in_array($newid, $ids[$store])):
|
| 132 |
+
$this->storeTweet($tweet, $store);
|
| 133 |
+
$cleanup = true;
|
| 134 |
+
endif;
|
| 135 |
+
endforeach;
|
| 136 |
+
endforeach;
|
| 137 |
+
|
| 138 |
+
return $cleanup;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
private function getIdsByStore()
|
| 142 |
+
{
|
| 143 |
+
$ids = array();
|
| 144 |
+
foreach(Mage::getModel('twitterreader/twitterreader')->getCollection() as $content):
|
| 145 |
+
$ids[$content->getStore()][] = $content->getTwitterId();
|
| 146 |
+
endforeach;
|
| 147 |
+
|
| 148 |
+
return $ids;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
private function storeTweet($tweet, $store)
|
| 152 |
+
{
|
| 153 |
+
$twitterid = $tweet['id_str'];
|
| 154 |
+
$content = $tweet['text'];
|
| 155 |
+
$timestamp = strtotime($tweet['created_at']);
|
| 156 |
+
$timestamp = date('Y-m-d H:i:s', $timestamp);
|
| 157 |
+
$screenname = Mage::getStoreConfig('twitterreader/configuration/screen_name', $store);
|
| 158 |
+
|
| 159 |
+
$newtweet = Mage::getModel('twitterreader/twitterreader');
|
| 160 |
+
$newtweet
|
| 161 |
+
->setTwitterId($twitterid)
|
| 162 |
+
->setContent($content)
|
| 163 |
+
->setStore($store)
|
| 164 |
+
->setScreenName($screenname)
|
| 165 |
+
->setTimestamp($timestamp);
|
| 166 |
+
|
| 167 |
+
$newtweet->save();
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
private function cleanUp()
|
| 171 |
+
{
|
| 172 |
+
$resource = Mage::getSingleton('core/resource');
|
| 173 |
+
$write = $resource->getConnection('twitterreader_write');
|
| 174 |
+
|
| 175 |
+
$keepids = array();
|
| 176 |
+
foreach (Mage::app()->getStores() as $store):
|
| 177 |
+
$screenname = Mage::getStoreConfig('twitterreader/configuration/screen_name', $store->getCode());
|
| 178 |
+
$count = Mage::helper('twitterreader')->getStoreCount($store->getCode());
|
| 179 |
+
$collection = Mage::getModel('twitterreader/twitterreader')->getCollection();
|
| 180 |
+
$select = $collection->getSelect();
|
| 181 |
+
$select
|
| 182 |
+
->where('store = ?', $store->getCode())
|
| 183 |
+
->where('screen_name = ?', $screenname)
|
| 184 |
+
->order(array('timestamp DESC'))
|
| 185 |
+
->limit($count);
|
| 186 |
+
|
| 187 |
+
foreach ($collection as $tweet):
|
| 188 |
+
$keepids[] = $tweet->getId();
|
| 189 |
+
endforeach;
|
| 190 |
+
endforeach;
|
| 191 |
+
|
| 192 |
+
$write->delete(
|
| 193 |
+
$resource->getTableName('twitterreader/twitter_reader'),
|
| 194 |
+
array('id NOT IN (?)' => $keepids)
|
| 195 |
+
);
|
| 196 |
+
}
|
| 197 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Mysql4/Twitterreader.php
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Mysql4_Twitterreader extends Mage_Core_Model_Mysql4_Abstract
|
| 3 |
+
{
|
| 4 |
+
public function _construct()
|
| 5 |
+
{
|
| 6 |
+
$this->_init('twitterreader/twitter_reader', 'id');
|
| 7 |
+
}
|
| 8 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Mysql4/Twitterreader/Collection.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Mysql4_Twitterreader_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
|
| 3 |
+
{
|
| 4 |
+
public function _construct()
|
| 5 |
+
{
|
| 6 |
+
parent::_construct();
|
| 7 |
+
$this->_init('twitterreader/twitterreader');
|
| 8 |
+
}
|
| 9 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Observer.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Observer
|
| 3 |
+
{
|
| 4 |
+
public function adminhtmlCoreConfigDataSaveBefore($observer)
|
| 5 |
+
{
|
| 6 |
+
$config = $observer->getConfigData();
|
| 7 |
+
if ($config->getPath() == 'twitterreader/configuration/request_token'):
|
| 8 |
+
if (Mage::helper('twitterreader')->checkCoreRow('twitterreader/configuration/request_token')):
|
| 9 |
+
$config->disableSave();
|
| 10 |
+
endif;
|
| 11 |
+
elseif ($config->getPath() == 'twitterreader/configuration/access_token'):
|
| 12 |
+
if (Mage::helper('twitterreader')->checkCoreRow('twitterreader/configuration/access_token')):
|
| 13 |
+
$config->disableSave();
|
| 14 |
+
endif;
|
| 15 |
+
endif;
|
| 16 |
+
}
|
| 17 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/Model/Twitterreader.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_Model_Twitterreader extends Mage_Core_Model_Abstract
|
| 3 |
+
{
|
| 4 |
+
public function _construct()
|
| 5 |
+
{
|
| 6 |
+
parent::_construct();
|
| 7 |
+
$this->_init('twitterreader/twitterreader');
|
| 8 |
+
}
|
| 9 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/controllers/CallbackController.php
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
class HusseyCoding_TwitterReader_CallbackController extends Mage_Adminhtml_Controller_Action
|
| 3 |
+
{
|
| 4 |
+
public function accessAction()
|
| 5 |
+
{
|
| 6 |
+
$config = array(
|
| 7 |
+
'callbackUrl' => Mage::helper('adminhtml')->getUrl('twitterreader/callback/access'),
|
| 8 |
+
'siteUrl' => 'https://api.twitter.com/oauth',
|
| 9 |
+
'consumerKey' => Mage::getStoreConfig('twitterreader/configuration/consumer_key'),
|
| 10 |
+
'consumerSecret' => Mage::getStoreConfig('twitterreader/configuration/consumer_secret')
|
| 11 |
+
);
|
| 12 |
+
$consumer = new Zend_Oauth_Consumer($config);
|
| 13 |
+
|
| 14 |
+
try {
|
| 15 |
+
$request = Mage::helper('twitterreader')->getOauthObject('twitterreader/configuration/request_token');
|
| 16 |
+
if ($request):
|
| 17 |
+
$access = $consumer->getAccessToken($_GET, $request);
|
| 18 |
+
Mage::helper('twitterreader')->storeOauthObject($access, 'twitterreader/configuration/access_token');
|
| 19 |
+
Mage::helper('twitterreader')->removeOauthObject('twitterreader/configuration/request_token');
|
| 20 |
+
Mage::getConfig()->saveConfig('twitterreader/configuration/callback_url', '');
|
| 21 |
+
endif;
|
| 22 |
+
} catch (Exception $e) {
|
| 23 |
+
Mage::getConfig()->saveConfig('twitterreader/configuration/callback_url', '');
|
| 24 |
+
Mage::helper('twitterreader')->removeOauthObject('twitterreader/configuration/request_token');
|
| 25 |
+
Mage::helper('twitterreader')->removeOauthObject('twitterreader/configuration/access_token');
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
$url = Mage::helper('adminhtml')->getUrl('adminhtml/system_config/edit/section/twitterreader');
|
| 29 |
+
$this->getResponse()->setRedirect($url);
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
public function resetAction()
|
| 33 |
+
{
|
| 34 |
+
Mage::getConfig()->saveConfig('twitterreader/configuration/callback_url', '');
|
| 35 |
+
Mage::helper('twitterreader')->removeOauthObject('twitterreader/configuration/request_token');
|
| 36 |
+
Mage::helper('twitterreader')->removeOauthObject('twitterreader/configuration/access_token');
|
| 37 |
+
|
| 38 |
+
$url = Mage::helper('adminhtml')->getUrl('adminhtml/system_config/edit/section/twitterreader');
|
| 39 |
+
$this->getResponse()->setRedirect($url);
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
public function updateAction()
|
| 43 |
+
{
|
| 44 |
+
Mage::getModel('twitterreader/manage')->cron();
|
| 45 |
+
|
| 46 |
+
$url = Mage::helper('adminhtml')->getUrl('adminhtml/system_config/edit/section/twitterreader');
|
| 47 |
+
$this->getResponse()->setRedirect($url);
|
| 48 |
+
}
|
| 49 |
+
}
|
app/code/community/HusseyCoding/TwitterReader/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<acl>
|
| 4 |
+
<resources>
|
| 5 |
+
<all>
|
| 6 |
+
<title>Allow Everything</title>
|
| 7 |
+
</all>
|
| 8 |
+
<admin>
|
| 9 |
+
<children>
|
| 10 |
+
<system>
|
| 11 |
+
<children>
|
| 12 |
+
<config>
|
| 13 |
+
<children>
|
| 14 |
+
<twitterreader module="twitterreader">
|
| 15 |
+
<title>Twitter Reader</title>
|
| 16 |
+
</twitterreader>
|
| 17 |
+
</children>
|
| 18 |
+
</config>
|
| 19 |
+
</children>
|
| 20 |
+
</system>
|
| 21 |
+
</children>
|
| 22 |
+
</admin>
|
| 23 |
+
</resources>
|
| 24 |
+
</acl>
|
| 25 |
+
</config>
|
app/code/community/HusseyCoding/TwitterReader/etc/config.xml
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_TwitterReader>
|
| 5 |
+
<version>1.0.5</version>
|
| 6 |
+
</HusseyCoding_TwitterReader>
|
| 7 |
+
</modules>
|
| 8 |
+
<global>
|
| 9 |
+
<models>
|
| 10 |
+
<twitterreader>
|
| 11 |
+
<class>HusseyCoding_TwitterReader_Model</class>
|
| 12 |
+
<resourceModel>twitterreader_mysql4</resourceModel>
|
| 13 |
+
</twitterreader>
|
| 14 |
+
<twitterreader_mysql4>
|
| 15 |
+
<class>HusseyCoding_TwitterReader_Model_Mysql4</class>
|
| 16 |
+
<entities>
|
| 17 |
+
<twitter_reader>
|
| 18 |
+
<table>twitter_reader</table>
|
| 19 |
+
</twitter_reader>
|
| 20 |
+
</entities>
|
| 21 |
+
</twitterreader_mysql4>
|
| 22 |
+
<core>
|
| 23 |
+
<rewrite>
|
| 24 |
+
<config_data>HusseyCoding_TwitterReader_Model_Config_CoreData</config_data>
|
| 25 |
+
</rewrite>
|
| 26 |
+
</core>
|
| 27 |
+
</models>
|
| 28 |
+
<helpers>
|
| 29 |
+
<twitterreader>
|
| 30 |
+
<class>HusseyCoding_TwitterReader_Helper</class>
|
| 31 |
+
</twitterreader>
|
| 32 |
+
</helpers>
|
| 33 |
+
<blocks>
|
| 34 |
+
<twitterreader>
|
| 35 |
+
<class>HusseyCoding_TwitterReader_Block</class>
|
| 36 |
+
</twitterreader>
|
| 37 |
+
</blocks>
|
| 38 |
+
<resources>
|
| 39 |
+
<twitterreader_setup>
|
| 40 |
+
<setup>
|
| 41 |
+
<module>HusseyCoding_TwitterReader</module>
|
| 42 |
+
<resourceModel>husseycoding_twitterreader_mysql4</resourceModel>
|
| 43 |
+
</setup>
|
| 44 |
+
<connection>
|
| 45 |
+
<use>core_setup</use>
|
| 46 |
+
</connection>
|
| 47 |
+
</twitterreader_setup>
|
| 48 |
+
<twitterreader_write>
|
| 49 |
+
<connection>
|
| 50 |
+
<use>core_write</use>
|
| 51 |
+
</connection>
|
| 52 |
+
</twitterreader_write>
|
| 53 |
+
<twitterreader_read>
|
| 54 |
+
<connection>
|
| 55 |
+
<use>core_read</use>
|
| 56 |
+
</connection>
|
| 57 |
+
</twitterreader_read>
|
| 58 |
+
</resources>
|
| 59 |
+
</global>
|
| 60 |
+
<frontend>
|
| 61 |
+
<layout>
|
| 62 |
+
<updates>
|
| 63 |
+
<twitterreader>
|
| 64 |
+
<file>twitterreader.xml</file>
|
| 65 |
+
</twitterreader>
|
| 66 |
+
</updates>
|
| 67 |
+
</layout>
|
| 68 |
+
</frontend>
|
| 69 |
+
<admin>
|
| 70 |
+
<routers>
|
| 71 |
+
<twitterreader>
|
| 72 |
+
<use>admin</use>
|
| 73 |
+
<args>
|
| 74 |
+
<module>HusseyCoding_TwitterReader</module>
|
| 75 |
+
<frontName>twitterreader</frontName>
|
| 76 |
+
</args>
|
| 77 |
+
</twitterreader>
|
| 78 |
+
</routers>
|
| 79 |
+
</admin>
|
| 80 |
+
<adminhtml>
|
| 81 |
+
<layout>
|
| 82 |
+
<updates>
|
| 83 |
+
<menupages>
|
| 84 |
+
<file>twitterreader.xml</file>
|
| 85 |
+
</menupages>
|
| 86 |
+
</updates>
|
| 87 |
+
</layout>
|
| 88 |
+
<events>
|
| 89 |
+
<core_config_data_save_before>
|
| 90 |
+
<observers>
|
| 91 |
+
<adminhtml_core_config_data_save_before_twitterreader>
|
| 92 |
+
<class>twitterreader/observer</class>
|
| 93 |
+
<method>adminhtmlCoreConfigDataSaveBefore</method>
|
| 94 |
+
</adminhtml_core_config_data_save_before_twitterreader>
|
| 95 |
+
</observers>
|
| 96 |
+
</core_config_data_save_before>
|
| 97 |
+
</events>
|
| 98 |
+
</adminhtml>
|
| 99 |
+
<crontab>
|
| 100 |
+
<jobs>
|
| 101 |
+
<twitterreader_manage>
|
| 102 |
+
<schedule>
|
| 103 |
+
<cron_expr>*/10 * * * *</cron_expr>
|
| 104 |
+
</schedule>
|
| 105 |
+
<run>
|
| 106 |
+
<model>twitterreader/manage::cron</model>
|
| 107 |
+
</run>
|
| 108 |
+
</twitterreader_manage>
|
| 109 |
+
</jobs>
|
| 110 |
+
</crontab>
|
| 111 |
+
</config>
|
app/code/community/HusseyCoding/TwitterReader/etc/system.xml
ADDED
|
@@ -0,0 +1,186 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<sections>
|
| 4 |
+
<twitterreader translate="label" module="twitterreader">
|
| 5 |
+
<label>Twitter Reader</label>
|
| 6 |
+
<tab>husseycoding</tab>
|
| 7 |
+
<frontend_type>text</frontend_type>
|
| 8 |
+
<sort_order>1</sort_order>
|
| 9 |
+
<show_in_default>1</show_in_default>
|
| 10 |
+
<show_in_website>1</show_in_website>
|
| 11 |
+
<show_in_store>1</show_in_store>
|
| 12 |
+
<groups>
|
| 13 |
+
<configuration translate="label">
|
| 14 |
+
<label>Feed Configuration</label>
|
| 15 |
+
<frontend_type>text</frontend_type>
|
| 16 |
+
<sort_order>1</sort_order>
|
| 17 |
+
<show_in_default>1</show_in_default>
|
| 18 |
+
<show_in_website>1</show_in_website>
|
| 19 |
+
<show_in_store>1</show_in_store>
|
| 20 |
+
<fields>
|
| 21 |
+
<screen_name>
|
| 22 |
+
<label>Twitter Screen Name</label>
|
| 23 |
+
<frontend_type>text</frontend_type>
|
| 24 |
+
<sort_order>1</sort_order>
|
| 25 |
+
<show_in_default>1</show_in_default>
|
| 26 |
+
<show_in_website>1</show_in_website>
|
| 27 |
+
<show_in_store>1</show_in_store>
|
| 28 |
+
</screen_name>
|
| 29 |
+
<tweet_display>
|
| 30 |
+
<label>Maximum Tweets To Display</label>
|
| 31 |
+
<frontend_type>text</frontend_type>
|
| 32 |
+
<sort_order>2</sort_order>
|
| 33 |
+
<show_in_default>1</show_in_default>
|
| 34 |
+
<show_in_website>1</show_in_website>
|
| 35 |
+
<show_in_store>1</show_in_store>
|
| 36 |
+
<comment>Defaults to 5</comment>
|
| 37 |
+
</tweet_display>
|
| 38 |
+
<tweet_length>
|
| 39 |
+
<label>Limit Tweet Length</label>
|
| 40 |
+
<frontend_type>text</frontend_type>
|
| 41 |
+
<sort_order>3</sort_order>
|
| 42 |
+
<show_in_default>1</show_in_default>
|
| 43 |
+
<show_in_website>1</show_in_website>
|
| 44 |
+
<show_in_store>1</show_in_store>
|
| 45 |
+
<comment>Number of characters to display. Blank for all</comment>
|
| 46 |
+
</tweet_length>
|
| 47 |
+
<display_date>
|
| 48 |
+
<label>Display Tweet Date</label>
|
| 49 |
+
<frontend_type>select</frontend_type>
|
| 50 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 51 |
+
<sort_order>4</sort_order>
|
| 52 |
+
<show_in_default>1</show_in_default>
|
| 53 |
+
<show_in_website>1</show_in_website>
|
| 54 |
+
<show_in_store>1</show_in_store>
|
| 55 |
+
</display_date>
|
| 56 |
+
<date_format>
|
| 57 |
+
<label>Date Format</label>
|
| 58 |
+
<frontend_type>text</frontend_type>
|
| 59 |
+
<sort_order>5</sort_order>
|
| 60 |
+
<show_in_default>1</show_in_default>
|
| 61 |
+
<show_in_website>1</show_in_website>
|
| 62 |
+
<show_in_store>1</show_in_store>
|
| 63 |
+
<comment>Optional. PHP date() function format</comment>
|
| 64 |
+
</date_format>
|
| 65 |
+
<consumer_key>
|
| 66 |
+
<label>Consumer Key</label>
|
| 67 |
+
<frontend_type>text</frontend_type>
|
| 68 |
+
<sort_order>6</sort_order>
|
| 69 |
+
<show_in_default>1</show_in_default>
|
| 70 |
+
<show_in_website>0</show_in_website>
|
| 71 |
+
<show_in_store>0</show_in_store>
|
| 72 |
+
<comment><![CDATA[Create an application <a href="https://dev.twitter.com/apps" target="_blank">here</a> to obtain]]></comment>
|
| 73 |
+
</consumer_key>
|
| 74 |
+
<consumer_secret>
|
| 75 |
+
<label>Consumer Secret</label>
|
| 76 |
+
<frontend_type>text</frontend_type>
|
| 77 |
+
<sort_order>7</sort_order>
|
| 78 |
+
<show_in_default>1</show_in_default>
|
| 79 |
+
<show_in_website>0</show_in_website>
|
| 80 |
+
<show_in_store>0</show_in_store>
|
| 81 |
+
<comment><![CDATA[Create an application <a href="https://dev.twitter.com/apps" target="_blank">here</a> to obtain]]></comment>
|
| 82 |
+
</consumer_secret>
|
| 83 |
+
<callback_url>
|
| 84 |
+
<label>Status</label>
|
| 85 |
+
<frontend_type>hidden</frontend_type>
|
| 86 |
+
<sort_order>8</sort_order>
|
| 87 |
+
<show_in_default>1</show_in_default>
|
| 88 |
+
<show_in_website>0</show_in_website>
|
| 89 |
+
<show_in_store>0</show_in_store>
|
| 90 |
+
</callback_url>
|
| 91 |
+
<request_token>
|
| 92 |
+
<label>Request Token</label>
|
| 93 |
+
<frontend_type>hidden</frontend_type>
|
| 94 |
+
<sort_order>9</sort_order>
|
| 95 |
+
<show_in_default>1</show_in_default>
|
| 96 |
+
<show_in_website>0</show_in_website>
|
| 97 |
+
<show_in_store>0</show_in_store>
|
| 98 |
+
</request_token>
|
| 99 |
+
<access_token>
|
| 100 |
+
<label>Access Token</label>
|
| 101 |
+
<frontend_type>hidden</frontend_type>
|
| 102 |
+
<sort_order>10</sort_order>
|
| 103 |
+
<show_in_default>1</show_in_default>
|
| 104 |
+
<show_in_website>0</show_in_website>
|
| 105 |
+
<show_in_store>0</show_in_store>
|
| 106 |
+
</access_token>
|
| 107 |
+
</fields>
|
| 108 |
+
</configuration>
|
| 109 |
+
<position translate="label">
|
| 110 |
+
<label>Display Position</label>
|
| 111 |
+
<frontend_type>text</frontend_type>
|
| 112 |
+
<sort_order>2</sort_order>
|
| 113 |
+
<show_in_default>1</show_in_default>
|
| 114 |
+
<show_in_website>1</show_in_website>
|
| 115 |
+
<show_in_store>1</show_in_store>
|
| 116 |
+
<comment><![CDATA[For custom position add <?php echo Mage::helper('twitterreader')->show(); ?> to the template of your choice.]]></comment>
|
| 117 |
+
<fields>
|
| 118 |
+
<left_sidebar_top>
|
| 119 |
+
<label>Left Sidebar Top</label>
|
| 120 |
+
<frontend_type>select</frontend_type>
|
| 121 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 122 |
+
<sort_order>1</sort_order>
|
| 123 |
+
<show_in_default>1</show_in_default>
|
| 124 |
+
<show_in_website>1</show_in_website>
|
| 125 |
+
<show_in_store>1</show_in_store>
|
| 126 |
+
</left_sidebar_top>
|
| 127 |
+
<left_sidebar_bottom>
|
| 128 |
+
<label>Left Sidebar Bottom</label>
|
| 129 |
+
<frontend_type>select</frontend_type>
|
| 130 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 131 |
+
<sort_order>2</sort_order>
|
| 132 |
+
<show_in_default>1</show_in_default>
|
| 133 |
+
<show_in_website>1</show_in_website>
|
| 134 |
+
<show_in_store>1</show_in_store>
|
| 135 |
+
</left_sidebar_bottom>
|
| 136 |
+
<right_sidebar_top>
|
| 137 |
+
<label>Right Sidebar Top</label>
|
| 138 |
+
<frontend_type>select</frontend_type>
|
| 139 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 140 |
+
<sort_order>3</sort_order>
|
| 141 |
+
<show_in_default>1</show_in_default>
|
| 142 |
+
<show_in_website>1</show_in_website>
|
| 143 |
+
<show_in_store>1</show_in_store>
|
| 144 |
+
</right_sidebar_top>
|
| 145 |
+
<right_sidebar_bottom>
|
| 146 |
+
<label>Right Sidebar Bottom</label>
|
| 147 |
+
<frontend_type>select</frontend_type>
|
| 148 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 149 |
+
<sort_order>4</sort_order>
|
| 150 |
+
<show_in_default>1</show_in_default>
|
| 151 |
+
<show_in_website>1</show_in_website>
|
| 152 |
+
<show_in_store>1</show_in_store>
|
| 153 |
+
</right_sidebar_bottom>
|
| 154 |
+
<footer_start>
|
| 155 |
+
<label>Footer Start</label>
|
| 156 |
+
<frontend_type>select</frontend_type>
|
| 157 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 158 |
+
<sort_order>5</sort_order>
|
| 159 |
+
<show_in_default>1</show_in_default>
|
| 160 |
+
<show_in_website>1</show_in_website>
|
| 161 |
+
<show_in_store>1</show_in_store>
|
| 162 |
+
</footer_start>
|
| 163 |
+
<footer_end>
|
| 164 |
+
<label>Footer End</label>
|
| 165 |
+
<frontend_type>select</frontend_type>
|
| 166 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 167 |
+
<sort_order>6</sort_order>
|
| 168 |
+
<show_in_default>1</show_in_default>
|
| 169 |
+
<show_in_website>1</show_in_website>
|
| 170 |
+
<show_in_store>1</show_in_store>
|
| 171 |
+
</footer_end>
|
| 172 |
+
<custom>
|
| 173 |
+
<label>Custom</label>
|
| 174 |
+
<frontend_type>select</frontend_type>
|
| 175 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 176 |
+
<sort_order>7</sort_order>
|
| 177 |
+
<show_in_default>1</show_in_default>
|
| 178 |
+
<show_in_website>1</show_in_website>
|
| 179 |
+
<show_in_store>1</show_in_store>
|
| 180 |
+
</custom>
|
| 181 |
+
</fields>
|
| 182 |
+
</position>
|
| 183 |
+
</groups>
|
| 184 |
+
</twitterreader>
|
| 185 |
+
</sections>
|
| 186 |
+
</config>
|
app/code/community/HusseyCoding/TwitterReader/sql/twitterreader_setup/mysql4-install-1.0.0.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
$installer = $this;
|
| 3 |
+
|
| 4 |
+
$installer->startSetup();
|
| 5 |
+
|
| 6 |
+
$installer->run("
|
| 7 |
+
CREATE TABLE {$this->getTable('twitterreader/twitter_reader')} (
|
| 8 |
+
`id` int unsigned NOT NULL auto_increment,
|
| 9 |
+
`twitter_id` tinytext NOT NULL,
|
| 10 |
+
`content` text NOT NULL,
|
| 11 |
+
`store` tinytext NOT NULL,
|
| 12 |
+
`screen_name` tinytext NOT NULL,
|
| 13 |
+
`timestamp` datetime NOT NULL,
|
| 14 |
+
PRIMARY KEY (`id`)
|
| 15 |
+
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
|
| 16 |
+
|
| 17 |
+
");
|
| 18 |
+
|
| 19 |
+
$installer->endSetup();
|
app/design/adminhtml/default/default/layout/twitterreader.xml
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout>
|
| 3 |
+
<adminhtml_system_config_edit>
|
| 4 |
+
<reference name="head">
|
| 5 |
+
<action method="addItem">
|
| 6 |
+
<type>skin_js</type>
|
| 7 |
+
<name>twitterreader/js/twitterreader.js</name>
|
| 8 |
+
</action>
|
| 9 |
+
</reference>
|
| 10 |
+
<reference name="content">
|
| 11 |
+
<block type="twitterreader/verify" template="twitterreader/verify.phtml" name="twitter_verify" />
|
| 12 |
+
</reference>
|
| 13 |
+
</adminhtml_system_config_edit>
|
| 14 |
+
</layout>
|
app/design/adminhtml/default/default/template/twitterreader/verify.phtml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if ($status = $this->verifyCredentials()): ?>
|
| 2 |
+
<script type="text/javascript">
|
| 3 |
+
//<![CDATA[
|
| 4 |
+
var thistwitterverify = new twitterverify();
|
| 5 |
+
thistwitterverify.status = "<?php echo $status; ?>";
|
| 6 |
+
<?php if ($status == 'ready'): ?>
|
| 7 |
+
thistwitterverify.reseturl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/reset'); ?>";
|
| 8 |
+
thistwitterverify.updateurl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/update'); ?>";
|
| 9 |
+
<?php elseif ($status == 'verify_credentials'): ?>
|
| 10 |
+
thistwitterverify.callbackurl = "<?php echo Mage::getStoreConfig('twitterreader/configuration/callback_url'); ?>";
|
| 11 |
+
thistwitterverify.reseturl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/reset'); ?>";
|
| 12 |
+
<?php elseif ($status == 'bad_verify'): ?>
|
| 13 |
+
thistwitterverify.reseturl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/reset'); ?>";
|
| 14 |
+
<?php elseif ($status == 'problem'): ?>
|
| 15 |
+
thistwitterverify.reseturl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/reset'); ?>";
|
| 16 |
+
<?php elseif (is_int($status)): ?>
|
| 17 |
+
thistwitterverify.status = "exceeded";
|
| 18 |
+
thistwitterverify.reset = "<?php echo date('H:i:s', $status); ?>";
|
| 19 |
+
<?php elseif ($status == 'bad_callback'): ?>
|
| 20 |
+
thistwitterverify.reseturl = "<?php echo Mage::helper('adminhtml')->getUrl('twitterreader/callback/reset'); ?>";
|
| 21 |
+
<?php endif; ?>
|
| 22 |
+
//]]>
|
| 23 |
+
</script>
|
| 24 |
+
<?php endif; ?>
|
app/design/frontend/base/default/layout/twitterreader.xml
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout version="0.1.0">
|
| 3 |
+
<default>
|
| 4 |
+
<reference name="head">
|
| 5 |
+
<action method="addItem">
|
| 6 |
+
<type>skin_css</type>
|
| 7 |
+
<name>css/twitterreader.css</name>
|
| 8 |
+
</action>
|
| 9 |
+
</reference>
|
| 10 |
+
<reference name="left">
|
| 11 |
+
<block type="twitterreader/tweets" name="twitterreader_left_sidebar_top_container" before="-">
|
| 12 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_left_sidebar_top" />
|
| 13 |
+
<action method="verifyBlock"><config>left_sidebar_top</config><block>twitterreader_left_sidebar_top</block></action>
|
| 14 |
+
</block>
|
| 15 |
+
<block type="twitterreader/tweets" name="twitterreader_left_sidebar_bottom_container" after="-">
|
| 16 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_left_sidebar_bottom" />
|
| 17 |
+
<action method="verifyBlock"><config>left_sidebar_bottom</config><block>twitterreader_left_sidebar_bottom</block></action>
|
| 18 |
+
</block>
|
| 19 |
+
</reference>
|
| 20 |
+
<reference name="right">
|
| 21 |
+
<block type="twitterreader/tweets" name="twitterreader_right_sidebar_top_container" before="-">
|
| 22 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_right_sidebar_top" />
|
| 23 |
+
<action method="verifyBlock"><config>right_sidebar_top</config><block>twitterreader_right_sidebar_top</block></action>
|
| 24 |
+
</block>
|
| 25 |
+
<block type="twitterreader/tweets" name="twitterreader_right_sidebar_bottom_container" after="-">
|
| 26 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_right_sidebar_bottom" />
|
| 27 |
+
<action method="verifyBlock"><config>right_sidebar_bottom</config><block>twitterreader_right_sidebar_bottom</block></action>
|
| 28 |
+
</block>
|
| 29 |
+
</reference>
|
| 30 |
+
<reference name="footer">
|
| 31 |
+
<block type="twitterreader/tweets" name="twitterreader_footer_start_container" before="-">
|
| 32 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_footer_start" />
|
| 33 |
+
<action method="verifyBlock"><config>footer_start</config><block>twitterreader_footer_start</block></action>
|
| 34 |
+
</block>
|
| 35 |
+
<block type="twitterreader/tweets" name="twitterreader_right_sidebar_end_container" after="-">
|
| 36 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader_footer_end" />
|
| 37 |
+
<action method="verifyBlock"><config>footer_end</config><block>twitterreader_footer_end</block></action>
|
| 38 |
+
</block>
|
| 39 |
+
</reference>
|
| 40 |
+
<reference name="root">
|
| 41 |
+
<block type="twitterreader/tweets" name="twitterreader_container" after="-">
|
| 42 |
+
<block type="page/html" template="twitterreader/tweets.phtml" name="twitterreader" />
|
| 43 |
+
<action method="verifyBlock"><config>custom</config><block>twitterreader</block></action>
|
| 44 |
+
</block>
|
| 45 |
+
</reference>
|
| 46 |
+
</default>
|
| 47 |
+
</layout>
|
app/design/frontend/base/default/template/twitterreader/tweets.phtml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if ($collection = Mage::helper('twitterreader')->collectFeedContent()): ?>
|
| 2 |
+
<?php $class = $this->getNameInLayout(); ?>
|
| 3 |
+
<?php if (strpos($class, 'footer')): ?>
|
| 4 |
+
<div class="<?php echo $this->getNameInLayout(); ?>">
|
| 5 |
+
<h3><?php echo $this->helper('twitterreader')->__('Recent Tweets'); ?></h3>
|
| 6 |
+
<div class="twitterreader_tweets">
|
| 7 |
+
<?php foreach ($collection as $tweet): ?>
|
| 8 |
+
<span>
|
| 9 |
+
<?php $screen = Mage::getStoreConfig('twitterreader/configuration/screen_name'); ?>
|
| 10 |
+
<a href="https://twitter.com/<?php echo $screen; ?>/status/<?php echo $tweet->getTwitterId(); ?>" target="_blank">
|
| 11 |
+
<?php echo $tweet->getContent(); ?>
|
| 12 |
+
</a>
|
| 13 |
+
<?php if (Mage::getStoreConfig('twitterreader/configuration/display_date')): ?>
|
| 14 |
+
<?php echo Mage::helper('twitterreader')->displayDate($tweet->getTimestamp()); ?>
|
| 15 |
+
<?php endif; ?>
|
| 16 |
+
</span>
|
| 17 |
+
<?php endforeach; ?>
|
| 18 |
+
</div>
|
| 19 |
+
</div>
|
| 20 |
+
<?php else: ?>
|
| 21 |
+
<div class="<?php echo $this->getNameInLayout(); ?>">
|
| 22 |
+
<div class="block">
|
| 23 |
+
<div class="block-title">
|
| 24 |
+
<strong>
|
| 25 |
+
<span>
|
| 26 |
+
<?php echo $this->helper('twitterreader')->__('Recent Tweets'); ?>
|
| 27 |
+
</span>
|
| 28 |
+
</strong>
|
| 29 |
+
</div>
|
| 30 |
+
<div class="block-content">
|
| 31 |
+
<ol>
|
| 32 |
+
<?php foreach ($collection as $tweet): ?>
|
| 33 |
+
<li class="item">
|
| 34 |
+
<?php $screen = Mage::getStoreConfig('twitterreader/configuration/screen_name'); ?>
|
| 35 |
+
<a href="https://twitter.com/<?php echo $screen; ?>/status/<?php echo $tweet->getTwitterId(); ?>" target="_blank">
|
| 36 |
+
<?php echo Mage::helper('twitterreader')->formatContent($tweet->getContent()); ?>
|
| 37 |
+
</a>
|
| 38 |
+
<?php if (Mage::getStoreConfig('twitterreader/configuration/display_date')): ?>
|
| 39 |
+
<?php echo Mage::helper('twitterreader')->displayDate($tweet->getTimestamp()); ?>
|
| 40 |
+
<?php endif; ?>
|
| 41 |
+
<li>
|
| 42 |
+
<?php endforeach; ?>
|
| 43 |
+
</ol>
|
| 44 |
+
</div>
|
| 45 |
+
</div>
|
| 46 |
+
</div>
|
| 47 |
+
<?php endif; ?>
|
| 48 |
+
<?php endif; ?>
|
app/etc/modules/HusseyCoding_Common.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_Common>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</HusseyCoding_Common>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
app/etc/modules/HusseyCoding_TwitterReader.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<HusseyCoding_TwitterReader>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</HusseyCoding_TwitterReader>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
package.xml
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>HusseyCoding_TwitterReader</name>
|
| 4 |
+
<version>1.0.5</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Increase the social profile of your Magento site by easily adding store specific tweets.</summary>
|
| 10 |
+
<description>This extension seamlessly integrates with the latest Twitter API technology and allows you to quickly and easily add tweets, per store, to any page in any position.</description>
|
| 11 |
+
<notes>Fixed losing block order on cms edit page load</notes>
|
| 12 |
+
<authors><author><name>Hussey Coding</name><user>husseycoding</user><email>info@husseycoding.co.uk</email></author></authors>
|
| 13 |
+
<date>2015-08-26</date>
|
| 14 |
+
<time>10:13:18</time>
|
| 15 |
+
<contents><target name="magecommunity"><dir name="HusseyCoding"><dir name="TwitterReader"><dir name="Block"><file name="Tweets.php" hash="049d0934eeac08c235b39c71a1293910"/><file name="Verify.php" hash="68098cae4b409154a4aa618e5b2da6c2"/></dir><dir name="controllers"><file name="CallbackController.php" hash="4154dc3be629ca8b438e12b1a1e23511"/></dir><dir name="etc"><file name="adminhtml.xml" hash="909b1f48112a4c4b00a37e145041eadd"/><file name="config.xml" hash="f1b8d6a59b3dbcb9c4c9c08dd94196ce"/><file name="system.xml" hash="3609a56fbd345b8651066b5486d8de45"/></dir><dir name="Helper"><file name="Data.php" hash="01b6ef3fe4a5e33c7c24a8e4d1572b0b"/></dir><dir name="Model"><dir name="Config"><file name="CoreData.php" hash="ec734ef221f1c1527be82d7dd09ccf23"/></dir><file name="Manage.php" hash="c52b4b6af39cc8bececd0f6c6e6643e6"/><dir name="Mysql4"><dir name="Twitterreader"><file name="Collection.php" hash="d00dec73701177bdbe0b755a7cab65da"/></dir><file name="Twitterreader.php" hash="0ee1e85be7b2559ceff18c9ec9160f47"/></dir><file name="Observer.php" hash="355ab44cdb45102855b7fb4847aa489a"/><file name="Twitterreader.php" hash="0bcfbf3b1a569793e409cd7f1deec000"/></dir><dir name="sql"><dir name="twitterreader_setup"><file name="mysql4-install-1.0.0.php" hash="1e59e36f7e5eea1406e64d7f0099197b"/></dir></dir></dir><dir name="Common"><dir name="etc"><file name="system.xml" hash="6c9ba9f227b9adfc9abf97f17b46fdbf"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="HusseyCoding_TwitterReader.xml" hash="365441683cb1c3c5fef7569aab423dc0"/><file name="HusseyCoding_Common.xml" hash="31e82d3d9b3179c2fa9e002f9669da47"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="twitterreader.xml" hash="da55257b0be819190ce22e975f007a63"/></dir><dir name="template"><dir name="twitterreader"><file name="verify.phtml" hash="eab267b579bb5a419df3a2fbf31d397a"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="twitterreader.xml" hash="867abc35ab34bc33cbecf5362521d94a"/></dir><dir name="template"><dir name="twitterreader"><file name="tweets.phtml" hash="1aefa42a68f124df4571b26a4f3dfa80"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="twitterreader"><dir name="js"><file name="twitterreader.js" hash="4bdcd68a1648fde96cbd4f649ee07aa8"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="twitterreader.css" hash="6bdd8f39d0175c4e05d1f8804ef1f152"/></dir></dir></dir></dir></target></contents>
|
| 16 |
+
<compatible/>
|
| 17 |
+
<dependencies><required><php><min>5.1.0</min><max>6.0.0</max></php></required></dependencies>
|
| 18 |
+
</package>
|
skin/adminhtml/default/default/twitterreader/js/twitterreader.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var twitterverify = Class.create({
|
| 2 |
+
afterInit: function() {
|
| 3 |
+
$("row_twitterreader_configuration_callback_url").down("td.value").insert({ top: "<span id=\"twitterreader_apistatus\"></span>" });
|
| 4 |
+
this.showStatus();
|
| 5 |
+
},
|
| 6 |
+
showStatus: function() {
|
| 7 |
+
var el = $("twitterreader_apistatus");
|
| 8 |
+
if (this.status == "consumer_missing") {
|
| 9 |
+
el.update("Consumer Key/Secret missing");
|
| 10 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Invalid without consumer data</span>" });
|
| 11 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Invalid without consumer data</span>" });
|
| 12 |
+
} else if (this.status == "verify_credentials") {
|
| 13 |
+
el.update("Verify your credentials <a href=\"" + this.callbackurl + "\">here</a><br />If the page has expired reset the request <a id=\"twitterreader_readyreset\" href=\"javascript:void(null)\">here</a>");
|
| 14 |
+
this.resetListener();
|
| 15 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Obtained</span>" });
|
| 16 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Required</span>" });
|
| 17 |
+
} else if (this.status == "bad_callback") {
|
| 18 |
+
el.update("Please check your consumer credentials and make sure you have created an access token, and added a dummy 'Callback URL' to your <a href=\"https://dev.twitter.com/apps\" target=\"_blank\">application</a><br />Reset your credentials <a id=\"twitterreader_readyreset\" href=\"javascript:void(null)\">here</a>");
|
| 19 |
+
this.resetListener();
|
| 20 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Obtained</span>" });
|
| 21 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Required</span>" });
|
| 22 |
+
} else if (this.status == "ready") {
|
| 23 |
+
el.update("Verified and ready<br />Reset your credentials <a id=\"twitterreader_readyreset\" href=\"javascript:void(null)\">here</a><br />Tweets updated via cron, update manually <a id=\"twitterreader_readyupdate\" href=\"javascript:void(null)\">here</a>")
|
| 24 |
+
this.resetListener();
|
| 25 |
+
this.updateListener();
|
| 26 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Not required</span>" });
|
| 27 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Obtained</span>" });
|
| 28 |
+
} else if (this.status == "bad_verify") {
|
| 29 |
+
el.update("Failed to verify your credentials<br />You may need to reset them <a id=\"twitterreader_readyreset\" href=\"javascript:void(null)\">here</a>")
|
| 30 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Not required</span>" });
|
| 31 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Possibly invalidated</span>" });
|
| 32 |
+
this.resetListener();
|
| 33 |
+
} else if (this.status == "problem") {
|
| 34 |
+
el.update("There is a problem with your credentials<br />You may need to reset them <a id=\"twitterreader_readyreset\" href=\"javascript:void(null)\">here</a>")
|
| 35 |
+
this.resetListener();
|
| 36 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Not required</span>" });
|
| 37 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Invalidated</span>" });
|
| 38 |
+
} else if (this.status == "exceeded") {
|
| 39 |
+
el.update("Maximum requests exceeded<br />This will reset at " + this.reset);
|
| 40 |
+
$("row_twitterreader_configuration_request_token").down("td.value").insert({ top: "<span>Waiting</span>" });
|
| 41 |
+
$("row_twitterreader_configuration_access_token").down("td.value").insert({ top: "<span>Waiting</span>" });
|
| 42 |
+
}
|
| 43 |
+
},
|
| 44 |
+
resetListener: function() {
|
| 45 |
+
$("twitterreader_readyreset").observe("click", function(e) {
|
| 46 |
+
if (confirm("Are you sure?")) {
|
| 47 |
+
window.location = this.reseturl;
|
| 48 |
+
}
|
| 49 |
+
}.bind(this));
|
| 50 |
+
},
|
| 51 |
+
updateListener: function() {
|
| 52 |
+
$("twitterreader_readyupdate").observe("click", function(e) {
|
| 53 |
+
window.location = this.updateurl;
|
| 54 |
+
}.bind(this));
|
| 55 |
+
}
|
| 56 |
+
});
|
| 57 |
+
|
| 58 |
+
document.observe("dom:loaded", function() {
|
| 59 |
+
if (typeof(thistwitterverify) == "object") {
|
| 60 |
+
thistwitterverify.afterInit();
|
| 61 |
+
}
|
| 62 |
+
});
|
skin/frontend/base/default/css/twitterreader.css
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
.twitterreader_footer_start { width:25%; }
|
| 2 |
+
.twitterreader_footer_start .twitterreader_tweets { margin-bottom:10px; }
|
| 3 |
+
.twitterreader_footer_start .twitterreader_tweets a { display:block; padding:5px 0; text-align:left; }
|
| 4 |
+
.twitterreader_footer_end { width:25%; }
|
| 5 |
+
.twitterreader_footer_end .twitterreader_tweets { margin-bottom:10px; }
|
| 6 |
+
.twitterreader_footer_end .twitterreader_tweets a { display:block; padding:5px 0; text-align:left; }
|
