From 87335f41297ba3bd4f72f550441e9662f31b9cc6 Mon Sep 17 00:00:00 2001 From: Magmodules Date: Tue, 17 Jan 2017 18:59:37 +0100 Subject: [PATCH] 1.1.2 --- .gitignore | 3 + README.md | 25 + .../Kiyoh/Block/Adminhtml/Kiyohlog.php | 46 ++ .../Kiyoh/Block/Adminhtml/Kiyohlog/Grid.php | 162 +++++ .../Kiyoh/Block/Adminhtml/Kiyohreviews.php | 46 ++ .../Block/Adminhtml/Kiyohreviews/Grid.php | 196 ++++++ .../Kiyohreviews/Renderer/Experience.php | 44 ++ .../Adminhtml/Widget/Buttons/Process.php | 43 ++ .../Block/Adminhtml/Widget/Buttons/Test.php | 42 ++ .../Block/Adminhtml/Widget/Field/Version.php | 34 + .../Block/Adminhtml/Widget/Form/Heading.php | 38 ++ .../Kiyoh/Block/Adminhtml/Widget/Grid/Log.php | 76 +++ .../Block/Adminhtml/Widget/Grid/Seconds.php | 39 ++ .../Block/Adminhtml/Widget/Grid/Stars.php | 125 ++++ .../Block/Adminhtml/Widget/Info/Info.php | 73 +++ .../local/Magmodules/Kiyoh/Block/Custom.php | 47 ++ .../local/Magmodules/Kiyoh/Block/Reviews.php | 82 +++ .../local/Magmodules/Kiyoh/Block/Sidebar.php | 151 +++++ .../local/Magmodules/Kiyoh/Block/Snippets.php | 70 ++ .../local/Magmodules/Kiyoh/Helper/Data.php | 66 ++ app/code/local/Magmodules/Kiyoh/Model/Api.php | 165 +++++ app/code/local/Magmodules/Kiyoh/Model/Log.php | 85 +++ .../Magmodules/Kiyoh/Model/Mysql4/Log.php | 32 + .../Kiyoh/Model/Mysql4/Log/Collection.php | 33 + .../Magmodules/Kiyoh/Model/Mysql4/Reviews.php | 32 + .../Kiyoh/Model/Mysql4/Reviews/Collection.php | 33 + .../Magmodules/Kiyoh/Model/Mysql4/Stats.php | 32 + .../Kiyoh/Model/Mysql4/Stats/Collection.php | 33 + .../local/Magmodules/Kiyoh/Model/Observer.php | 158 +++++ .../local/Magmodules/Kiyoh/Model/Reviews.php | 151 +++++ .../local/Magmodules/Kiyoh/Model/Stats.php | 150 +++++ .../Kiyoh/Model/System/Config/Flushcache.php | 32 + .../System/Config/Source/Cronfrequency.php | 39 ++ .../Model/System/Config/Source/Kiyoh.php | 35 + .../System/Config/Source/Orderstatus.php | 43 ++ .../Model/System/Config/Source/Position.php | 35 + .../System/Config/Source/Sidebarlink.php | 36 ++ .../Adminhtml/KiyohlogController.php | 99 +++ .../Adminhtml/KiyohreviewsController.php | 199 ++++++ .../Kiyoh/controllers/IndexController.php | 52 ++ .../kiyoh_setup/data-upgrade-1.1.0-1.1.1.php | 37 ++ .../local/Magmodules/Kiyoh/etc/adminhtml.xml | 88 +++ .../local/Magmodules/Kiyoh/etc/config.xml | 243 +++++++ .../local/Magmodules/Kiyoh/etc/system.xml | 608 ++++++++++++++++++ .../sql/kiyoh_setup/mysql4-install-1.0.0.php | 103 +++ .../default/layout/magmodules_kiyoh.xml | 37 ++ .../base/default/layout/magmodules_kiyoh.xml | 63 ++ .../template/magmodules/kiyoh/index.phtml | 154 +++++ .../magmodules/kiyoh/sidebar/left.phtml | 74 +++ .../magmodules/kiyoh/sidebar/right.phtml | 75 +++ .../magmodules/kiyoh/widget/custom.phtml | 37 ++ .../kiyoh/widget/richsnippets.phtml | 32 + app/etc/modules/Magmodules_Kiyoh.xml | 9 + app/locale/en_US/Magmodules_Kiyoh.csv | 126 ++++ app/locale/nl_NL/Magmodules_Kiyoh.csv | 132 ++++ modman | 23 + .../default/default/magmodules/kiyoh/grid.css | 94 +++ .../default/default/magmodules/kiyoh/star.png | Bin 0 -> 1751 bytes .../magmodules/kiyoh/images/5-stars-empty.png | Bin 0 -> 4742 bytes .../magmodules/kiyoh/images/5-stars-full.png | Bin 0 -> 7441 bytes .../magmodules/kiyoh/images/bkg_rating.gif | Bin 0 -> 283 bytes .../magmodules/kiyoh/images/greystar.png | Bin 0 -> 1418 bytes .../default/magmodules/kiyoh/images/logo.png | Bin 0 -> 4945 bytes .../default/magmodules/kiyoh/images/star.png | Bin 0 -> 1555 bytes .../default/magmodules/kiyoh/richsnippets.css | 26 + .../base/default/magmodules/kiyoh/sidebar.css | 181 ++++++ .../base/default/magmodules/kiyoh/style.css | 88 +++ 67 files changed, 5112 insertions(+) create mode 100755 .gitignore create mode 100755 README.md create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog/Grid.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Grid.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Renderer/Experience.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Process.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Test.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Field/Version.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Form/Heading.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Log.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Seconds.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Stars.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Info/Info.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Custom.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Reviews.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Sidebar.php create mode 100755 app/code/local/Magmodules/Kiyoh/Block/Snippets.php create mode 100755 app/code/local/Magmodules/Kiyoh/Helper/Data.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Api.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Log.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log/Collection.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews/Collection.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats/Collection.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Observer.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Reviews.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/Stats.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Flushcache.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Cronfrequency.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Kiyoh.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Orderstatus.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Position.php create mode 100755 app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Sidebarlink.php create mode 100755 app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohlogController.php create mode 100755 app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohreviewsController.php create mode 100755 app/code/local/Magmodules/Kiyoh/controllers/IndexController.php create mode 100755 app/code/local/Magmodules/Kiyoh/data/kiyoh_setup/data-upgrade-1.1.0-1.1.1.php create mode 100755 app/code/local/Magmodules/Kiyoh/etc/adminhtml.xml create mode 100755 app/code/local/Magmodules/Kiyoh/etc/config.xml create mode 100755 app/code/local/Magmodules/Kiyoh/etc/system.xml create mode 100755 app/code/local/Magmodules/Kiyoh/sql/kiyoh_setup/mysql4-install-1.0.0.php create mode 100755 app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml create mode 100755 app/design/frontend/base/default/layout/magmodules_kiyoh.xml create mode 100755 app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml create mode 100755 app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml create mode 100755 app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml create mode 100755 app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml create mode 100755 app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml create mode 100755 app/etc/modules/Magmodules_Kiyoh.xml create mode 100755 app/locale/en_US/Magmodules_Kiyoh.csv create mode 100755 app/locale/nl_NL/Magmodules_Kiyoh.csv create mode 100755 modman create mode 100755 skin/adminhtml/default/default/magmodules/kiyoh/grid.css create mode 100755 skin/adminhtml/default/default/magmodules/kiyoh/star.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/5-stars-empty.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/5-stars-full.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/bkg_rating.gif create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/greystar.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/logo.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/images/star.png create mode 100755 skin/frontend/base/default/magmodules/kiyoh/richsnippets.css create mode 100755 skin/frontend/base/default/magmodules/kiyoh/sidebar.css create mode 100755 skin/frontend/base/default/magmodules/kiyoh/style.css diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..d7615ef --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +*.zip +.DS_Store diff --git a/README.md b/README.md new file mode 100755 index 0000000..9361188 --- /dev/null +++ b/README.md @@ -0,0 +1,25 @@ +# KiyOh Connect for Magento® 1 + +The Magento® KiyOh connector for Magento® 1 integrates KiyOh into your Magento® 1 store. Manage and show your KiyOh reviews and fully automate review invitations all from your Magento® Back-end. + +## Development by Magmodules + +We are a Dutch Magento® Only Agency dedicated to the development of extensions for Magento® 1 and Magento® 2. All our extensions are coded by our own team and our support team is always there to help you out. + +[Visit Magmodules.eu](https://www.magmodules.eu/) + +## About KiyOh + +KiyOh is a specialist in customer ratings and reviews. Companies use KiyOh to ask customers for a rating and review and publish these on their webshop. This has advantages not only for consumers, but also for the company itself. Consumers can read the reviews of previous customers and know better what to expect of a company. Companies can learn from the customer feedback. + +KiyOh started in 2009 and is growing fast. Meanwhile, there are already thousands of online shops that use KiyOh to collect ratings and reviews. + +[Visit KiyOh.com](https://www.kiyoh.com/) + +## Links + +[Knowledgebase](https://www.magmodules.eu/help/webwinkelkeur) + +[Terms and Conditions](https://www.magmodules.eu/terms.html) + +[Contact Us](https://www.magmodules.eu/contact-us.html) diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog.php new file mode 100755 index 0000000..ce744a5 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog.php @@ -0,0 +1,46 @@ +_controller = 'adminhtml_kiyohlog'; + $this->_blockGroup = 'kiyoh'; + $this->_headerText = Mage::helper('kiyoh')->__('Kiyoh Logs'); + + parent::__construct(); + + $this->_removeButton('add'); + $this->_addButton( + 'module_controller', array( + 'label' => Mage::helper('kiyoh')->__('Cleanup Log'), + 'onclick' => "setLocation('{$this->getUrl('adminhtml/kiyohlog/clean')}')", + 'confirm' => Mage::helper('kiyoh')->__('Are you sure you want to cleanup logfiles?'), + ) + ); + + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog/Grid.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog/Grid.php new file mode 100755 index 0000000..99d7c05 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohlog/Grid.php @@ -0,0 +1,162 @@ +setId('kiyohlogGrid'); + $this->setDefaultSort('date'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + /** + * @return mixed + */ + protected function _prepareCollection() + { + $collection = Mage::getModel('kiyoh/log')->getCollection(); + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + /** + * @return mixed + */ + protected function _prepareColumns() + { + $this->addColumn( + 'company', array( + 'header' => Mage::helper('kiyoh')->__('Shop'), + 'index' => 'company', + 'width' => '120px', + ) + ); + + $this->addColumn( + 'type', array( + 'header' => Mage::helper('kiyoh')->__('Type'), + 'align' => 'left', + 'index' => 'type', + 'width' => '120', + 'type' => 'options', + 'options' => array( + 'reviews' => Mage::helper('kiyoh')->__('Reviews'), + 'invitation' => Mage::helper('kiyoh')->__('Invitation Call'), + ), + ) + ); + + if (Mage::app()->getRequest()->getParam('showapiurl')) { + $this->addColumn( + 'api_url', array( + 'header' => Mage::helper('kiyoh')->__('Api URL'), + 'align' => 'left', + 'index' => 'api_url', + 'filter' => false, + 'sortable' => false, + ) + ); + } + + $this->addColumn( + 'qty', array( + 'header' => Mage::helper('kiyoh')->__('Description'), + 'align' => 'left', + 'index' => 'qty', + 'renderer' => 'kiyoh/adminhtml_widget_grid_log', + 'filter' => false, + 'sortable' => false, + ) + ); + + $this->addColumn( + 'cron', array( + 'header' => Mage::helper('kiyoh')->__('Cron'), + 'align' => 'left', + 'index' => 'cron', + 'width' => '120', + 'type' => 'options', + 'options' => array( + '' => Mage::helper('kiyoh')->__('Manual'), + 'stats' => Mage::helper('kiyoh')->__('Stats Cron'), + 'reviews' => Mage::helper('kiyoh')->__('Reviews Cron'), + 'orderupdate' => Mage::helper('kiyoh')->__('Invitation'), + ), + ) + ); + + $this->addColumn( + 'time', array( + 'header' => Mage::helper('kiyoh')->__('Time'), + 'align' => 'left', + 'index' => 'time', + 'width' => '60', + 'renderer' => 'kiyoh/adminhtml_widget_grid_seconds', + ) + ); + + $this->addColumn( + 'date', array( + 'header' => Mage::helper('kiyoh')->__('Date'), + 'align' => 'left', + 'type' => 'datetime', + 'index' => 'date', + 'width' => '140', + ) + ); + + return parent::_prepareColumns(); + } + + /** + * @return $this + */ + protected function _prepareMassaction() + { + $this->setMassactionIdField('id'); + $this->getMassactionBlock()->setFormFieldName('logids'); + + $this->getMassactionBlock()->addItem( + 'hide', array( + 'label' => Mage::helper('kiyoh')->__('Delete'), + 'url' => $this->getUrl('*/*/massDelete'), + ) + ); + return $this; + } + + /** + * @param $row + * + * @return string + */ + public function getRowUrl($row) + { + return false; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews.php new file mode 100755 index 0000000..51ff065 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews.php @@ -0,0 +1,46 @@ +_controller = 'adminhtml_kiyohreviews'; + $this->_blockGroup = 'kiyoh'; + $this->_headerText = Mage::helper('kiyoh')->__('Kiyoh Reviews'); + + parent::__construct(); + + $this->_removeButton('add'); + $this->_addButton( + 'module_controller', array( + 'label' => Mage::helper('kiyoh')->__('Delete all reviews'), + 'onclick' => "setLocation('{$this->getUrl('adminhtml/kiyohreviews/truncate')}')", + 'confirm' => Mage::helper('kiyoh')->__('Are you sure you want to delete all reviews?'), + ) + ); + + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Grid.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Grid.php new file mode 100755 index 0000000..9886fb2 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Grid.php @@ -0,0 +1,196 @@ +setId('reviewsGrid'); + $this->setDefaultSort('date_created'); + $this->setDefaultDir('DESC'); + $this->setSaveParametersInSession(true); + } + + /** + * @return mixed + */ + protected function _prepareCollection() + { + $collection = Mage::getModel('kiyoh/reviews')->getCollection(); + $this->setCollection($collection); + return parent::_prepareCollection(); + } + + /** + * @return mixed + */ + protected function _prepareColumns() + { + + $this->addColumn( + 'company', array( + 'header' => Mage::helper('kiyoh')->__('Shop'), + 'index' => 'company', + 'width' => '120px', + ) + ); + + $this->addColumn( + 'customer_name', array( + 'header' => Mage::helper('kiyoh')->__('User'), + 'align' => 'left', + 'index' => 'customer_name', + ) + ); + + $this->addColumn( + 'customer_place', array( + 'header' => Mage::helper('kiyoh')->__('City'), + 'align' => 'left', + 'index' => 'customer_place', + ) + ); + + $this->addColumn( + 'score', array( + 'header' => Mage::helper('kiyoh')->__('Score'), + 'align' => 'left', + 'index' => 'score', + 'renderer' => 'kiyoh/adminhtml_widget_grid_stars', + 'width' => '110', + 'filter' => false, + 'sortable' => true, + ) + ); + + $this->addColumn( + 'customer_email', array( + 'header' => Mage::helper('kiyoh')->__('Email'), + 'align' => 'left', + 'index' => 'customer_email', + ) + ); + + $this->addColumn( + 'recommendation', array( + 'header' => Mage::helper('kiyoh')->__('Recommendation'), + 'align' => 'left', + 'index' => 'recommendation', + 'width' => '80px', + 'type' => 'options', + 'options' => array( + 0 => Mage::helper('kiyoh')->__('No'), + 1 => Mage::helper('kiyoh')->__('Yes'), + ), + ) + ); + + $this->addColumn( + 'date_created', array( + 'header' => Mage::helper('kiyoh')->__('Date'), + 'align' => 'left', + 'type' => 'date', + 'index' => 'date_created', + 'width' => '140', + ) + ); + + $this->addColumn( + 'sidebar', array( + 'header' => Mage::helper('kiyoh')->__('Sidebar'), + 'align' => 'left', + 'width' => '80px', + 'index' => 'sidebar', + 'type' => 'options', + 'options' => array( + 0 => Mage::helper('kiyoh')->__('No'), + 1 => Mage::helper('kiyoh')->__('Yes'), + ), + ) + ); + + $this->addColumn( + 'status', array( + 'header' => Mage::helper('kiyoh')->__('Active'), + 'align' => 'left', + 'width' => '80px', + 'index' => 'status', + 'type' => 'options', + 'options' => array( + 0 => Mage::helper('kiyoh')->__('No'), + 1 => Mage::helper('kiyoh')->__('Yes'), + ), + ) + ); + + return parent::_prepareColumns(); + } + + /** + * @return $this + */ + protected function _prepareMassaction() + { + $this->setMassactionIdField('review_id'); + $this->getMassactionBlock()->setFormFieldName('reviewids'); + + $this->getMassactionBlock()->addItem( + 'hide', array( + 'label' => Mage::helper('kiyoh')->__('Set to invisible'), + 'url' => $this->getUrl('*/*/massDisable'), + ) + ); + $this->getMassactionBlock()->addItem( + 'visible', array( + 'label' => Mage::helper('kiyoh')->__('Set to visible'), + 'url' => $this->getUrl('*/*/massEnable'), + ) + ); + $this->getMassactionBlock()->addItem( + 'addsidebar', array( + 'label' => Mage::helper('kiyoh')->__('Add to Sidebar'), + 'url' => $this->getUrl('*/*/massEnableSidebar'), + ) + ); + $this->getMassactionBlock()->addItem( + 'removesidebar', array( + 'label' => Mage::helper('kiyoh')->__('Remove from Sidebar'), + 'url' => $this->getUrl('*/*/massDisableSidebar'), + ) + ); + return $this; + } + + /** + * @param $row + * + * @return bool + */ + public function getRowUrl($row) + { + return false; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Renderer/Experience.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Renderer/Experience.php new file mode 100755 index 0000000..3ab4e28 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Kiyohreviews/Renderer/Experience.php @@ -0,0 +1,44 @@ +getData($this->getColumn()->getIndex()); + $charLimit = '100'; + if (strlen($value) > $charLimit) { + $extra = '... ' . $this->__('(more)'); + $contentSmall = Mage::helper('core/string')->truncate($value, $charLimit, $extra); + $content = $contentSmall . '' . $value . ''; + return $content; + } else { + return $value; + } + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Process.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Process.php new file mode 100755 index 0000000..377274e --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Process.php @@ -0,0 +1,43 @@ +setElement($element); + $url = $this->getUrl('*/kiyohreviews/process'); + $html = $this->getLayout()->createBlock('adminhtml/widget_button') + ->setType('button') + ->setClass('scalable') + ->setLabel(Mage::helper('kiyoh')->__('Process Manually')) + ->setOnClick("setLocation('$url')") + ->toHtml(); + + return $html; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Test.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Test.php new file mode 100755 index 0000000..fa88849 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Buttons/Test.php @@ -0,0 +1,42 @@ +setElement($element); + $url = $this->getUrl('*/kiyohreviews/testapi'); + $html = $this->getLayout()->createBlock('adminhtml/widget_button') + ->setType('button') + ->setClass('scalable') + ->setLabel(Mage::helper('kiyoh')->__('Test API')) + ->setOnClick("setLocation('$url')") + ->toHtml(); + return $html; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Field/Version.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Field/Version.php new file mode 100755 index 0000000..e77f091 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Field/Version.php @@ -0,0 +1,34 @@ +getNode()->modules->Magmodules_Kiyoh->version; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Form/Heading.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Form/Heading.php new file mode 100755 index 0000000..e1620f5 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Form/Heading.php @@ -0,0 +1,38 @@ +

%s

', + $element->getHtmlId(), $element->getLabel() + ); + } + +} diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Log.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Log.php new file mode 100755 index 0000000..db64932 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Log.php @@ -0,0 +1,76 @@ +getType(); + $msg = ''; + + if ($type == 'reviews') { + $updates = ''; + if ($row->getReviewNew() > 0) { + $msg .= Mage::helper('kiyoh')->__('%s new review(s)', $row->getReviewNew()); + $updates++; + } + + if ($row->getReviewUpdate() > 0) { + if ($updates > 0) { + $msg .= ', '; + } + + $msg .= Mage::helper('kiyoh')->__('%s review(s) updated', $row->getReviewUpdate()); + $updates++; + } + + if ($updates > 0) { + $msg .= ' & '; + } + + $msg .= Mage::helper('kiyoh')->__('total score updated'); + } + + if ($type == 'invitation') { + if ($row->getOrderId()) { + $order = Mage::getModel('sales/order')->load($row->getOrderId()); + $incrementId = $order->getIncrementId(); + $orderUrl = Mage::helper('adminhtml')->getUrl( + "adminhtml/sales_order/view", + array('order_id' => $row->getOrderId()) + ); + $msg = Mage::helper('kiyoh')->__( + '%s - Repsonse: %s', + '#' . $incrementId . '', + $row->getResponse() + ); + } + } + + return ucfirst($msg); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Seconds.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Seconds.php new file mode 100755 index 0000000..be41318 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Seconds.php @@ -0,0 +1,39 @@ +getData($this->getColumn()->getIndex()); + if ($value > 0) { + $value = number_format($value, 3, '.', ''); + } + + return $value; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Stars.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Stars.php new file mode 100755 index 0000000..41a6959 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Grid/Stars.php @@ -0,0 +1,125 @@ +getData($this->getColumn()->getIndex()); + + if ($value == '0') { + $output = ''; + } else { + $o = 0; + + $shopId = $row->getData('shop_id'); + $reviewStats = Mage::getModel('kiyoh/stats')->load($shopId, 'shop_id'); + + $output = ''; + $output .= '(i)'; + $output .= '' . Mage::helper('kiyoh')->__('Overall') . ': '; + $output .= $row->getData('score') . '/10
'; + + if ($row->getData('score_q2') > 0) { + $output .= '' . $reviewStats->getScoreQ2Title() . ': '; + $output .= $row->getData('score_q2') . '/10
'; + $o++; + } + + if ($row->getData('score_q3') > 0) { + $output .= '' . $reviewStats->getScoreQ3Title() . ' '; + $output .= $row->getData('score_q3') . '/10
'; + $o++; + } + + if ($row->getData('score_q4' > 0)) { + $output .= '' . $reviewStats->getScoreQ4Title() . ' '; + $output .= $row->getData('score_q4') . '/10
'; + $o++; + } + + if ($row->getData('score_q5') > 0) { + $output .= '' . $reviewStats->getScoreQ5Title() . ' '; + $output .= $row->getData('score_q5') . '/10
'; + $o++; + } + + if ($row->getData('score_q6') > 0) { + $output .= '' . $reviewStats->getScoreQ6Title() . ' '; + $output .= $row->getData('score_q6') . '/10
'; + $o++; + } + + if ($row->getData('score_q7') > 0) { + $output .= '' . $reviewStats->getScoreQ7Title() . ' '; + $output .= $row->getData('score_q7') . '/10
'; + $o++; + } + + if ($row->getData('score_q8') > 0) { + $output .= '' . $reviewStats->getScoreQ8Title() . ' '; + $output .= $row->getData('score_q8') . '/10
'; + $o++; + } + + if ($row->getData('score_q9') > 0) { + $output .= '' . $reviewStats->getScoreQ9Title() . ' '; + $output .= $row->getData('score_q9') . '/10
'; + $o++; + } + + if ($row->getData('score_q10') > 0) { + $output .= '' . $reviewStats->getScoreQ10Title() . ' '; + $output .= $row->getData('score_q10') . '/10
'; + $o++; + } + + if ($o > 0) { + $output .= '
'; + } + + if ($row->getData('positive')) { + $output .= '' . Mage::helper('kiyoh')->__('Positive') . ': '; + $output .= $row->getData('positive') . '
'; + } + + if ($row->getData('negative')) { + $output .= '' . Mage::helper('kiyoh')->__('Negative') . ': '; + $output .= $row->getData('negative') . '
'; + } + + if ($row->getData('reaction')) { + $output .= '' . Mage::helper('kiyoh')->__('Reaction') . ': '; + $output .= $row->getData('reaction') . '
'; + } + + $output .= '
'; + } + + return $output; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Info/Info.php b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Info/Info.php new file mode 100755 index 0000000..2df6376 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Adminhtml/Widget/Info/Info.php @@ -0,0 +1,73 @@ +getNode()->modules->Magmodules_Kiyoh->version; + $logoLink = '//www.magmodules.eu/logo/kiyoh/' . $moduleVersion . '/' . $magentoVersion . '/logo.png'; + + $html = '
+

About Magmodules.eu

+

We are a Magento only E-commerce Agency located in the Netherlands.
+
+ + + + + + + + + + + + + + + + + + + +
View more extensions from us: + + Magento Connect + +
Send us an E-mail: + info@magmodules.eu
Visit our website:www.magmodules.eu
  
Need help? + + Online manual + +
+

'; + return $html; + } + +} diff --git a/app/code/local/Magmodules/Kiyoh/Block/Custom.php b/app/code/local/Magmodules/Kiyoh/Block/Custom.php new file mode 100755 index 0000000..962cd03 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Custom.php @@ -0,0 +1,47 @@ +addData( + array( + 'cache_lifetime' => 7200, + 'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG, Magmodules_Kiyoh_Model_Reviews::CACHE_TAG), + 'cache_key' => Mage::app()->getStore()->getStoreId() . '-kiyoh-custom-block', + ) + ); + if (Mage::getStoreConfig('kiyoh/general/enabled')) { + $this->setTemplate('magmodules/kiyoh/widget/custom.phtml'); + } + } + + /** + * @return mixed + */ + public function getKiyohData() + { + return $this->helper('kiyoh')->getTotalScore(); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Reviews.php b/app/code/local/Magmodules/Kiyoh/Block/Reviews.php new file mode 100755 index 0000000..d732dc0 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Reviews.php @@ -0,0 +1,82 @@ +getCollection(); + $collection->setOrder('date_created', 'DESC'); + $collection->addFieldToFilter('status', 1); + $collection->addFieldToFilter('shop_id', Mage::getStoreConfig('kiyoh/general/api_id')); + $this->setReviews($collection); + + $stats = Mage::getModel('kiyoh/stats')->load(Mage::getStoreConfig('kiyoh/general/api_id'), 'shop_id'); + $this->setStats($stats); + } + + /** + * @return $this + */ + public function _prepareLayout() + { + parent::_prepareLayout(); + + $pager = $this->getLayout()->createBlock('page/html_pager', 'kiyoh.pager'); + + if (Mage::getStoreConfig('kiyoh/overview/enable_paging')) { + $fieldPerPage = Mage::getStoreConfig('kiyoh/overview/paging_settings'); + $fieldPerPage = explode(',', $fieldPerPage); + $fieldPerPage = array_combine($fieldPerPage, $fieldPerPage); + $pager->setAvailableLimit($fieldPerPage); + } else { + $pager->setAvailableLimit(array('all' => 'all')); + } + + $pager->setCollection($this->getReviews()); + $this->setChild('pager', $pager); + $this->getReviews()->load(); + + return $this; + } + + /** + * @return mixed + */ + public function getPagerHtml() + { + return $this->getChildHtml('pager'); + } + + /** + * @return mixed + */ + public function getFormUrl() + { + return $this->helper('kiyoh')->getFormUrl(); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Sidebar.php b/app/code/local/Magmodules/Kiyoh/Block/Sidebar.php new file mode 100755 index 0000000..e037679 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Sidebar.php @@ -0,0 +1,151 @@ +getCollection(); + $collection->setOrder('date_created', 'DESC'); + $collection->addFieldToFilter('status', 1); + $collection->addFieldToFilter('sidebar', 1); + $collection->addFieldToFilter('shop_id', array('eq' => array($shopId))); + $collection->setPageSize($qty); + $collection->load(); + return $collection; + } else { + return false; + } + } + + /** + * @param $sidebarreview + * @param string $sidebar + * + * @return string + */ + public function formatContent($sidebarreview, $sidebar = 'left') + { + $content = $sidebarreview->getPositive(); + if ($sidebar == 'left') { + $charLimit = Mage::getStoreConfig('kiyoh/sidebar/left_lenght'); + } + + if ($sidebar == 'right') { + $charLimit = Mage::getStoreConfig('kiyoh/sidebar/right_lenght'); + } + + $content = Mage::helper('core/string')->truncate($content, $charLimit, ' ...'); + if ($content) { + $content = '"' . $content . '"'; + } + + return $content; + } + + /** + * @param string $sidebar + * + * @return bool|string + */ + public function getReviewsUrl($sidebar = 'left') + { + $link = ''; + $url = ''; + $target = ''; + + if ($sidebar == 'left') { + $link = Mage::getStoreConfig('kiyoh/sidebar/left_link'); + } + + if ($sidebar == 'right') { + $link = Mage::getStoreConfig('kiyoh/sidebar/right_link'); + } + + if ($link == 'internal') { + $url = $this->getUrl('kiyoh'); + } + + if ($link == 'external') { + $url = Mage::getStoreConfig('kiyoh/general/url'); + $target = 'target="_blank"'; + } + + if ($url) { + return '' . $this->__('View all reviews') . ''; + } + + return false; + } + + /** + * @param string $sidebar + * + * @return bool + */ + public function getSnippetsEnabled($sidebar = 'left') + { + $enabled = ''; + if ($sidebar == 'left') { + $enabled = Mage::getStoreConfig('kiyoh/sidebar/left_snippets'); + } + + if ($sidebar == 'right') { + $enabled = Mage::getStoreConfig('kiyoh/sidebar/right_snippets'); + } + + if ($enabled) { + return true; + } + + return false; + } + + /** + * @return mixed + */ + public function getTotalScore() + { + return $this->helper('kiyoh')->getTotalScore(); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Block/Snippets.php b/app/code/local/Magmodules/Kiyoh/Block/Snippets.php new file mode 100755 index 0000000..ad35a33 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Block/Snippets.php @@ -0,0 +1,70 @@ +addData( + array( + 'cache_lifetime' => 7200, + 'cache_tags' => array(Mage_Cms_Model_Block::CACHE_TAG, Magmodules_Kiyoh_Model_Reviews::CACHE_TAG), + 'cache_key' => Mage::app()->getStore()->getStoreId() . '-kiyoh-snippets-block', + ) + ); + + if (Mage::getStoreConfig('kiyoh/general/enabled')) { + $this->setTemplate('magmodules/kiyoh/widget/richsnippets.phtml'); + } + + } + + /** + * @return mixed + */ + public function getSnippets() + { + return $this->helper('kiyoh')->getTotalScore(); + } + + /** + * @param $rating + * + * @return mixed + */ + public function getHtmlStars($rating) + { + return $this->helper('kiyoh')->getHtmlStars($rating); + } + + /** + * @return mixed + */ + public function getExternalLink() + { + return $this->helper('kiyoh')->getExternalLink(); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Helper/Data.php b/app/code/local/Magmodules/Kiyoh/Helper/Data.php new file mode 100755 index 0000000..a8e2e8f --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Helper/Data.php @@ -0,0 +1,66 @@ +load($shopId, 'shop_id'); + if ($reviewStats->getScore() > 0) { + $reviewStats->setPercentage($reviewStats->getScore()); + $reviewStats->setStarsQty(number_format(($reviewStats->getScore() / 10), 1, ',', '')); + return $reviewStats; + } + + return false; + } + + /** + * @return bool|string + */ + public function getExternalLink() + { + if (Mage::getStoreConfig('kiyoh/general/url')) { + $url = 'KiyOh'; + return Mage::helper('kiyoh')->__('on') . ' ' . $url; + } + + return false; + } + + /** + * @param $rating + * + * @return string + */ + public function getHtmlStars($rating) + { + $html = '
'; + $html .= '
'; + $html .= '
'; + return $html; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Api.php b/app/code/local/Magmodules/Kiyoh/Model/Api.php new file mode 100755 index 0000000..b39daef --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Api.php @@ -0,0 +1,165 @@ +getFeed($storeId, $type)) { + $results = Mage::getModel('kiyoh/reviews')->processFeed($feed, $storeId, $type); + $results['stats'] = Mage::getModel('kiyoh/stats')->processFeed($feed, $storeId); + return $results; + } else { + return false; + } + } + + /** + * @param $storeId + * @param string $type + * + * @return bool|SimpleXMLElement + */ + public function getFeed($storeId, $type = '') + { + $apiId = Mage::getStoreConfig('kiyoh/general/api_id', $storeId); + $apiKey = Mage::getStoreConfig('kiyoh/general/api_key', $storeId); + $apiUrl = Mage::getStoreConfig('kiyoh/general/api_url', $storeId); + + if ($type == 'stats') { + $apiUrl = 'https://' . $apiUrl . '/xml/recent_company_reviews.xml?'; + $apiUrl .= 'connectorcode=' . $apiKey . '&company_id=' . $apiId . '&reviewcount=10'; + } + + if ($type == 'reviews') { + $apiUrl = 'https://' . $apiUrl . '/xml/recent_company_reviews.xml?'; + $apiUrl .= 'connectorcode=' . $apiKey . '&company_id=' . $apiId . '&reviewcount=10'; + } + + if ($type == 'history') { + $apiUrl = 'https://' . $apiUrl . '/xml/recent_company_reviews.xml?'; + $apiUrl .= 'connectorcode=' . $apiKey . '&company_id=' . $apiId . '&reviewcount=10000'; + } + + if ($apiId) { + $xml = simplexml_load_file($apiUrl); + if ($xml) { + if (empty($xml->error)) { + return $xml; + } else { + $msg = Mage::helper('kiyoh')->__('API: %s (Please check the online manual for suggestions)', (string)$xml->error); + Mage::getSingleton('adminhtml/session')->addError($msg); + return false; + } + } else { + $e = file_get_contents($apiUrl); + $msg = Mage::helper('kiyoh')->__('API: %s (Please check the online manual for suggestions)', $e); + Mage::getSingleton('adminhtml/session')->addError($msg); + return false; + } + } else { + return false; + } + + } + + /** + * @param $order + * + * @return bool + */ + public function sendInvitation($order) + { + $storeId = $order->getStoreId(); + $startTime = microtime(true); + $crontype = 'orderupdate'; + $apiKey = Mage::getStoreConfig('kiyoh/general/api_key', $storeId); + $apiUrl = Mage::getStoreConfig('kiyoh/general/api_url', $storeId); + $apiEmail = Mage::getStoreConfig('kiyoh/invitation/company_email', $storeId); + $delay = Mage::getStoreConfig('kiyoh/invitation/delay', $storeId); + $invStatus = Mage::getStoreConfig('kiyoh/invitation/status', $storeId); + $email = strtolower($order->getCustomerEmail()); + + if ($order->getStatus() == $invStatus) { + $http = new Varien_Http_Adapter_Curl(); + $http->setConfig(array('timeout' => 30, 'maxredirects' => 0)); + + $url = 'https://' . $apiUrl . '/set.php'; + $request = 'action=sendInvitation&connector=' . $apiKey . '&targetMail=' . $email; + $request .= '&delay=' . $delay . '&user=' . $apiEmail; + + $http->write(Zend_Http_Client::POST, $url, '1.1', array(), $request); + $result = $http->read(); + + if ($result) { + $lines = explode("\n", $result); + $responseHtml = $lines[0]; + $lines = array_reverse($lines); + $responseHtml .= ' - ' . $lines[0]; + } else { + $responseHtml = 'No response from ' . $url; + } + + Mage::getModel('kiyoh/log')->add( + 'invitation', + $order->getStoreId(), + '', + $responseHtml, + (microtime(true) - $startTime), + $crontype, + $url . '?' . $request, + $order->getId() + ); + + return true; + } + + return false; + } + + /** + * @return array + */ + public function getStoreIds() + { + $storeIds = array(); + $apiIds = array(); + $stores = Mage::getModel('core/store')->getCollection(); + foreach ($stores as $store) { + if ($store->getIsActive()) { + $apiId = Mage::getStoreConfig('kiyoh/general/api_id', $store->getId()); + if (!in_array($apiId, $apiIds)) { + $apiIds[] = $apiId; + $storeIds[] = $store->getId(); + } + } + } + + return $storeIds; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Log.php b/app/code/local/Magmodules/Kiyoh/Model/Log.php new file mode 100755 index 0000000..36a14c3 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Log.php @@ -0,0 +1,85 @@ +_init('kiyoh/log'); + } + + /** + * @param $type + * @param $storeId + * @param string $review + * @param string $inivation + * @param $time + * @param string $cType + * @param string $apiUrl + * @param string $orderId + * + * @return bool + */ + public function add($type, $storeId, $review = '', $inivation = '', $time, $cType = '', $apiUrl = '', $orderId = '') + { + $enabled = Mage::getStoreConfig('kiyoh/log/enabled'); + if ($enabled) { + $apiId = Mage::getStoreConfig('kiyoh/general/api_id', $storeId); + $company = Mage::getStoreConfig('kiyoh/general/company', $storeId); + $reviewUpdates = ''; + $reviewNew = ''; + if ($review) { + if (!empty($review['review_updates'])) { + $reviewUpdates = $review['review_updates']; + } else { + $reviewUpdates = 0; + } + + if (!empty($review['review_new'])) { + $reviewNew = $review['review_new']; + } else { + $reviewNew = 0; + } + } + + $model = Mage::getModel('kiyoh/log'); + $model->setType($type) + ->setShopId($apiId) + ->setCompany($company) + ->setReviewUpdate($reviewUpdates) + ->setReviewNew($reviewNew) + ->setResponse($inivation) + ->setOrderId($orderId) + ->setCron($cType) + ->setDate(now()) + ->setTime($time) + ->setApiUrl($apiUrl) + ->save(); + } + + return true; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log.php new file mode 100755 index 0000000..75bbb7b --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log.php @@ -0,0 +1,32 @@ +_init('kiyoh/log', 'id'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log/Collection.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log/Collection.php new file mode 100755 index 0000000..1ee5521 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Log/Collection.php @@ -0,0 +1,33 @@ +_init('kiyoh/log'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews.php new file mode 100755 index 0000000..eb0048e --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews.php @@ -0,0 +1,32 @@ +_init('kiyoh/reviews', 'review_id'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews/Collection.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews/Collection.php new file mode 100755 index 0000000..bb760d2 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Reviews/Collection.php @@ -0,0 +1,33 @@ +_init('kiyoh/reviews'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats.php new file mode 100755 index 0000000..78647a5 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats.php @@ -0,0 +1,32 @@ +_init('kiyoh/stats', 'id'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats/Collection.php b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats/Collection.php new file mode 100755 index 0000000..e0c62e6 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Mysql4/Stats/Collection.php @@ -0,0 +1,33 @@ +_init('kiyoh/stats'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Observer.php b/app/code/local/Magmodules/Kiyoh/Model/Observer.php new file mode 100755 index 0000000..fc4df7a --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Observer.php @@ -0,0 +1,158 @@ +getStoreIds(); + foreach ($storeIds as $storeId) { + $enabled = Mage::getStoreConfig('kiyoh/general/enabled', $storeId); + $cronEnabled = Mage::getStoreConfig('kiyoh/reviews/cron', $storeId); + if ($enabled && $cronEnabled) { + $cType = 'stats'; + $startTime = microtime(true); + $feed = Mage::getModel('kiyoh/api')->getFeed($storeId, $cType); + $results = array(); + $results['stats'] = Mage::getModel('kiyoh/stats')->processFeed($feed, $storeId); + $results['company'] = $feed->company; + $time = (microtime(true) - $startTime); + Mage::getModel('kiyoh/log')->add('reviews', $storeId, $results, '', $time, $cType); + } + } + + Mage::getModel('kiyoh/stats')->processOverall(); + } + + /** + * + */ + public function processReviews() + { + $storeIds = Mage::getModel('kiyoh/api')->getStoreIds(); + foreach ($storeIds as $storeId) { + $enabled = Mage::getStoreConfig('kiyoh/general/enabled', $storeId); + $cronEnabled = Mage::getStoreConfig('kiyoh/reviews/cron', $storeId); + if ($enabled && $cronEnabled) { + $cType = 'reviews'; + $startTime = microtime(true); + $feed = Mage::getModel('kiyoh/api')->getFeed($storeId, $cType); + $results = Mage::getModel('kiyoh/reviews')->processFeed($feed, $storeId, $cType); + $results['stats'] = Mage::getModel('kiyoh/stats')->processFeed($feed, $storeId); + $time = (microtime(true) - $startTime); + Mage::getModel('kiyoh/log')->add('reviews', $storeId, $results, '', $time, $cType); + } + } + } + + /** + * + */ + public function processHistory() + { + $storeIds = Mage::getModel('kiyoh/api')->getStoreIds(); + foreach ($storeIds as $storeId) { + $enabled = Mage::getStoreConfig('kiyoh/general/enabled', $storeId); + $cronEnabled = Mage::getStoreConfig('kiyoh/reviews/cron', $storeId); + if ($enabled && $cronEnabled) { + $cType = 'history'; + $startTime = microtime(true); + $storeId = 0; + $feed = Mage::getModel('kiyoh/api')->getFeed($storeId, $cType); + $results = Mage::getModel('kiyoh/reviews')->processFeed($feed, $storeId, $cType); + $results['stats'] = Mage::getModel('kiyoh/stats')->processFeed($feed, $storeId); + $time = (microtime(true) - $startTime); + Mage::getModel('kiyoh/log')->add('reviews', $storeId, $results, '', $time, $cType); + } + } + } + + /** + * + */ + public function cleanLog() + { + $enabled = Mage::getStoreConfig('kiyoh/log/clean', 0); + $days = Mage::getStoreConfig('kiyoh/log/clean_days', 0); + if (($enabled) && ($days > 0)) { + $logModel = Mage::getModel('kiyoh/log'); + $logs = $logModel->getCollection() + ->addFieldToSelect('id') + ->addFieldToFilter('date', array('lteq' => date('Y-m-d', strtotime('-' . $days . ' days')))); + foreach ($logs as $log) { + $logModel->load($log->getId())->delete(); + } + } + } + + /** + * @param $observer + */ + public function processFeedbackInvitationcallAfterShipment($observer) + { + $shipment = $observer->getEvent()->getShipment(); + $order = $shipment->getOrder(); + $invEnabled = Mage::getStoreConfig('kiyoh/invitation/enabled', $order->getStoreId()); + $apiKey = Mage::getStoreConfig('kiyoh/general/api_key', $order->getStoreId()); + if ($invEnabled && $apiKey) { + $status = Mage::getStoreConfig('kiyoh/invitation/status', $order->getStoreId()); + if ($order->getStatus() == $status) { + $backlog = Mage::getStoreConfig('kiyoh/invitation/backlog', $order->getStoreId()); + if ($backlog > 0) { + $dateDiff = floor(time() - strtotime($order->getCreatedAt())) / (60 * 60 * 24); + if ($dateDiff < $backlog) { + Mage::getModel('kiyoh/api')->sendInvitation($order); + } + } else { + Mage::getModel('kiyoh/api')->sendInvitation($order); + } + } + } + } + + /** + * @param $observer + */ + public function processFeedbackInvitationcall($observer) + { + $order = $observer->getEvent()->getOrder(); + $invEnabled = Mage::getStoreConfig('kiyoh/invitation/enabled', $order->getStoreId()); + $apiKey = Mage::getStoreConfig('kiyoh/general/api_key', $order->getStoreId()); + if ($invEnabled && $apiKey) { + $status = Mage::getStoreConfig('kiyoh/invitation/status', $order->getStoreId()); + if ($order->getStatus() == $status) { + $backlog = Mage::getStoreConfig('kiyoh/invitation/backlog', $order->getStoreId()); + if ($backlog > 0) { + $dateDiff = floor(time() - strtotime($order->getCreatedAt())) / (60 * 60 * 24); + if ($dateDiff < $backlog) { + Mage::getModel('kiyoh/api')->sendInvitation($order); + } + } else { + Mage::getModel('kiyoh/api')->sendInvitation($order); + } + } + } + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Reviews.php b/app/code/local/Magmodules/Kiyoh/Model/Reviews.php new file mode 100755 index 0000000..fd20cf9 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Reviews.php @@ -0,0 +1,151 @@ +_init('kiyoh/reviews'); + } + + public function loadbyKiyohId($kiyohId) + { + $this->_getResource()->load($this, $kiyohId, 'kiyoh_id'); + return $this; + } + + /** + * @param $feed + * @param int $storeId + * @param $type + * @return array + */ + public function processFeed($feed, $storeId = 0, $type) + { + + $updates = 0; + $new = 0; + $apiId = Mage::getStoreConfig('kiyoh/general/api_id', $storeId); + $company = $feed->company->name; + + foreach ($feed->review_list->review as $review) { + $kiyohId = $review->id; + $customerName = $review->customer->name; + $customerEmail = $review->customer->email; + $customerPlace = $review->customer->place; + $date = $review->customer->date; + $totalScore = $review->total_score; + + $recommendation = $review->recommendation; + $positive = $review->positive; + $negative = $review->negative; + $purchase = $review->purchase; + $reaction = $review->reaction; + + if (($recommendation == 'Ja') || ($recommendation == 'Yes')) { + $recommendation = 1; + } else { + $recommendation = 0; + } + + $questions = array(); + foreach ($review->questions->question as $question) { + $questions[] = $question->score; + } + + $indatabase = $this->loadbyKiyohId($kiyohId); + + if ($indatabase->getId()) { + if ($type == 'history') { + $reviews = Mage::getModel('kiyoh/reviews'); + $reviews->setReviewId($indatabase->getReviewId()) + ->setShopId($apiId) + ->setCompany($company) + ->setKiyohId($kiyohId) + ->setCustomerName($customerName) + ->setCustomerEmail($customerEmail) + ->setCustomerPlace($customerPlace) + ->setScore($totalScore) + ->setScoreQ2($questions[0]) + ->setScoreQ3($questions[1]) + ->setScoreQ4($questions[2]) + ->setScoreQ5($questions[3]) + ->setScoreQ6($questions[4]) + ->setScoreQ7($questions[5]) + ->setScoreQ8($questions[6]) + ->setScoreQ9($questions[7]) + ->setScoreQ10($questions[8]) + ->setRecommendation($recommendation) + ->setPositive($positive) + ->setNegative($negative) + ->setPurchase($purchase) + ->setReaction($reaction) + ->setDateCreated($date) + ->save(); + $updates++; + } else { + break; + } + } else { + $reviews = Mage::getModel('kiyoh/reviews'); + $reviews->setShopId($apiId) + ->setCompany($company) + ->setKiyohId($kiyohId) + ->setCustomerName($customerName) + ->setCustomerEmail($customerEmail) + ->setCustomerPlace($customerPlace) + ->setScore($totalScore) + ->setScoreQ2($questions[0]) + ->setScoreQ3($questions[1]) + ->setScoreQ4($questions[2]) + ->setScoreQ5($questions[3]) + ->setScoreQ6($questions[4]) + ->setScoreQ7($questions[5]) + ->setScoreQ8($questions[6]) + ->setScoreQ9($questions[7]) + ->setScoreQ10($questions[8]) + ->setRecommendation($recommendation) + ->setPositive($positive) + ->setNegative($negative) + ->setPurchase($purchase) + ->setReaction($reaction) + ->setDateCreated($date) + ->save(); + $new++; + } + } + + $config = Mage::getModel('core/config'); + $config->saveConfig('kiyoh/reviews/lastrun', now(), 'default', 0); + $result = array(); + $result['review_updates'] = $updates; + $result['review_new'] = $new; + $result['company'] = $company; + return $result; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/Stats.php b/app/code/local/Magmodules/Kiyoh/Model/Stats.php new file mode 100755 index 0000000..a16e5b2 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/Stats.php @@ -0,0 +1,150 @@ +_init('kiyoh/stats'); + } + + public function processFeed($feed, $storeId = 0) + { + $shopId = Mage::getStoreConfig('kiyoh/general/api_id', $storeId); + $company = $feed->company->name; + + if ($storeId == 0) { + $config = Mage::getModel('core/config'); + $config->saveConfig('kiyoh/general/url', $feed->company->url, 'default', $storeId); + $config->saveConfig('kiyoh/general/company', $feed->company->name, 'default', $storeId); + } else { + $config = Mage::getModel('core/config'); + $config->saveConfig('kiyoh/general/url', $feed->company->url, 'stores', $storeId); + if (!Mage::getStoreConfig('kiyoh/general/url', 0)) { + $config->saveConfig('kiyoh/general/url', $feed->company->url, 'default', 0); + } + + if (!Mage::getStoreConfig('kiyoh/general/company', 0)) { + $config->saveConfig('kiyoh/general/company', $feed->company->name, 'default', 0); + } + } + + if ($feed->company->total_reviews > 0) { + $score = floatval($feed->company->total_score); + $score = ($score * 10); + $scoremax = '100'; + $votes = $feed->company->total_reviews; + + // Check for update or save + if ($indatabase = $this->loadbyShopId($shopId)) { + $id = $indatabase->getId(); + } else { + $id = ''; + } + + $questions = array(); + foreach ($feed->company->average_scores->questions->question as $question) { + $questions[] = array('title' => $question->title, 'score' => $question->score); + } + + // Save Review Stats + $model = Mage::getModel('kiyoh/stats'); + $model->setId($id) + ->setShopId($shopId) + ->setCompany($company) + ->setScore($score) + ->setScoreQ2($questions[0]['score']) + ->setScoreQ2Title($questions[0]['title']) + ->setScoreQ3($questions[1]['score']) + ->setScoreQ3Title($questions[1]['title']) + ->setScoreQ4($questions[2]['score']) + ->setScoreQ4Title($questions[2]['title']) + ->setScoreQ5($questions[3]['score']) + ->setScoreQ5Title($questions[3]['title']) + ->setScoreQ6($questions[4]['score']) + ->setScoreQ6Title($questions[4]['title']) + ->setScoreQ7($questions[5]['score']) + ->setScoreQ7Title($questions[5]['title']) + ->setScoreQ8($questions[6]['score']) + ->setScoreQ8Title($questions[6]['title']) + ->setScoreQ9($questions[7]['score']) + ->setScoreQ9Title($questions[7]['title']) + ->setScoreQ10($questions[8]['score']) + ->setScoreQ10Title($questions[8]['title']) + ->setScoremax($scoremax) + ->setVotes($votes) + ->save(); + return true; + } else { + return false; + } + } + + /** + * + */ + public function processOverall() + { + $stats = Mage::getModel('kiyoh/stats')->getCollection(); + $stats->addFieldToFilter('shop_id', array('neq' => '0')); + + $score = ''; + $scoremax = ''; + $votes = ''; + $i = 0; + + foreach ($stats as $stat) { + $score += $stat->getScore(); + $scoremax += $stat->getScoremax(); + $votes += $stat->getVotes(); + $i++; + } + + if($i > 0) { + $score = ($score / $i); + $scoremax = ($scoremax / $i); + } + $company = 'Overall'; + + if ($indatabase = $this->loadbyShopId(0)) { + $id = $indatabase->getId(); + } else { + $id = ''; + } + + Mage::getModel('kiyoh/stats') + ->setId($id) + ->setShopId(0) + ->setCompany($company) + ->setScore($score) + ->setScoremax($scoremax) + ->setVotes($votes) + ->save(); + } + + public function loadbyShopId($shopId) + { + $this->_getResource()->load($this, $shopId, 'shop_id'); + return $this; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Flushcache.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Flushcache.php new file mode 100755 index 0000000..da2bc78 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Flushcache.php @@ -0,0 +1,32 @@ +cleanCache(Magmodules_Kiyoh_Model_Reviews::CACHE_TAG); + } + +} diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Cronfrequency.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Cronfrequency.php new file mode 100755 index 0000000..0f9271e --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Cronfrequency.php @@ -0,0 +1,39 @@ + Mage::helper('kiyoh')->__('Every 15 minutes'), + '0 * * * *' => Mage::helper('kiyoh')->__('Every Hour'), + '0 */2 * * *' => Mage::helper('kiyoh')->__('Every other Hour'), + '0 8,20 * * *' => Mage::helper('kiyoh')->__('Twice a Day'), + '0 2 * * *' => Mage::helper('kiyoh')->__('Once a Day'), + '0 2 0 * *' => Mage::helper('kiyoh')->__('Once a Week'), + ); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Kiyoh.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Kiyoh.php new file mode 100755 index 0000000..3b18b46 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Kiyoh.php @@ -0,0 +1,35 @@ + Mage::helper('kiyoh')->__('Kiyoh.nl'), + 'www.kiyoh.com' => Mage::helper('kiyoh')->__('Kihoy.com'), + ); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Orderstatus.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Orderstatus.php new file mode 100755 index 0000000..00e1e8e --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Orderstatus.php @@ -0,0 +1,43 @@ +getStatuses(); + $options = array(); + + $this->_options = array(array('value' => 0, 'label' => Mage::helper('kiyoh')->__('-- none'))); + + foreach ($statuses as $k => $v) { + $options[] = array('label' => $v, 'value' => $k); + } + + $this->_options = array_merge($this->_options, $options); + return $this->_options; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Position.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Position.php new file mode 100755 index 0000000..fffd21a --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Position.php @@ -0,0 +1,35 @@ + 'left', 'label' => Mage::helper('kiyoh')->__('Left')); + $position[] = array('value' => 'right', 'label' => Mage::helper('kiyoh')->__('Right')); + return $position; + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Sidebarlink.php b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Sidebarlink.php new file mode 100755 index 0000000..2ac4d98 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/Model/System/Config/Source/Sidebarlink.php @@ -0,0 +1,36 @@ + Mage::helper('kiyoh')->__('None'), + 'external' => Mage::helper('kiyoh')->__('External (Kiyoh.nl)'), + 'internal' => Mage::helper('kiyoh')->__('Internal (/kiyoh)'), + ); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohlogController.php b/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohlogController.php new file mode 100755 index 0000000..6bbe234 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohlogController.php @@ -0,0 +1,99 @@ +loadLayout() + ->_setActiveMenu('kiyoh/kiyohreviews') + ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager')); + return $this; + } + + /** + * + */ + public function indexAction() + { + $this->_initAction()->renderLayout(); + } + + /** + * + */ + public function massDeleteAction() + { + $logIds = $this->getRequest()->getParam('logids'); + if (!is_array($logIds)) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('kiyoh')->__('Please select item(s)')); + } else { + try { + foreach ($logIds as $id) { + Mage::getModel('kiyoh/log')->load($id)->delete(); + } + + $msg = Mage::helper('kiyoh')->__('Total of %d log record(s) deleted.', count($logIds)); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + + $this->_redirect('*/*/index'); + } + + /** + * + */ + public function cleanAction() + { + $enabled = Mage::getStoreConfig('kiyoh/log/clean'); + $days = Mage::getStoreConfig('kiyoh/log/clean_days'); + $i = 0; + if (($enabled) && ($days > 0)) { + $logmodel = Mage::getModel('kiyoh/log'); + $deldate = date('Y-m-d', strtotime('-' . $days . ' days')); + $logs = $logmodel->getCollection()->addFieldToSelect('id')->addFieldToFilter('date', array('lteq' => $deldate)); + foreach ($logs as $log) { + $logmodel->load($log->getId())->delete(); + $i++; + } + + $msg = Mage::helper('kiyoh')->__('Total of %s log record(s) deleted.', $i); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } + + $this->_redirect('*/*/index'); + } + + /** + * @return mixed + */ + protected function _isAllowed() + { + return Mage::getSingleton('admin/session')->isAllowed('admin/kiyoh/kiyoh_log'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohreviewsController.php b/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohreviewsController.php new file mode 100755 index 0000000..1c72906 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/controllers/Adminhtml/KiyohreviewsController.php @@ -0,0 +1,199 @@ +loadLayout() + ->_setActiveMenu('kiyoh/kiyohreviews') + ->_addBreadcrumb(Mage::helper('adminhtml')->__('Items Manager'), Mage::helper('adminhtml')->__('Item Manager')); + return $this; + } + + /** + * + */ + public function indexAction() + { + $this->_initAction()->renderLayout(); + } + + /** + * + */ + public function processAction() + { + $storeIds = Mage::getModel('kiyoh/api')->getStoreIds(); + $startTime = microtime(true); + + foreach ($storeIds as $storeId) { + $msg = ''; + $apiId = Mage::getStoreConfig('kiyoh/general/api_id', $storeId); + $result = Mage::getModel('kiyoh/api')->processFeed($storeId, 'history'); + $time = (microtime(true) - $startTime); + Mage::getModel('kiyoh/log')->add('reviews', $storeId, $result, '', $time, '', ''); + + if (($result['review_new'] > 0) || ($result['review_updates'] > 0) || ($result['stats'] == true)) { + $msg = Mage::helper('kiyoh')->__('Webwinkel ID %s:', $apiId) . ' '; + $msg .= Mage::helper('kiyoh')->__('%s new review(s)', $result['review_new']) . ', '; + $msg .= Mage::helper('kiyoh')->__('%s review(s) updated', $result['review_updates']) . ' & '; + $msg .= Mage::helper('kiyoh')->__('and total score updated.'); + } + + if ($msg) { + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } + } + + Mage::getModel('kiyoh/stats')->processOverall(); + $this->_redirect('adminhtml/system_config/edit/section/kiyoh'); + } + + /** + * + */ + public function massDisableAction() + { + $reviewIds = $this->getRequest()->getParam('reviewids'); + if (!is_array($reviewIds)) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('kiyoh')->__('Please select item(s)')); + } else { + try { + foreach ($reviewIds as $reviewId) { + $reviews = Mage::getModel('kiyoh/reviews')->load($reviewId); + $reviews->setStatus(0)->save(); + } + + $msg = Mage::helper('kiyoh')->__('Total of %d review(s) were disabled.', count($reviewIds)); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + + $this->_redirect('*/*/index'); + } + + /** + * + */ + public function massEnableAction() + { + $reviewIds = $this->getRequest()->getParam('reviewids'); + if (!is_array($reviewIds)) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('kiyoh')->__('Please select item(s)')); + } else { + try { + foreach ($reviewIds as $reviewId) { + $reviews = Mage::getModel('kiyoh/reviews')->load($reviewId); + $reviews->setStatus(1)->save(); + } + + $msg = Mage::helper('kiyoh')->__('Total of %d review(s) were enabled.', count($reviewIds)); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + + $this->_redirect('*/*/index'); + } + + /** + * + */ + public function massEnableSidebarAction() + { + $reviewIds = $this->getRequest()->getParam('reviewids'); + if (!is_array($reviewIds)) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('kiyoh')->__('Please select item(s)')); + } else { + try { + foreach ($reviewIds as $reviewId) { + $reviews = Mage::getModel('kiyoh/reviews')->load($reviewId); + $reviews->setSidebar(1)->save(); + } + + $msg = Mage::helper('kiyoh')->__('Total of %d review(s) were added to the sidebar.', count($reviewIds)); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + + $this->_redirect('*/*/index'); + } + + /** + * + */ + public function massDisableSidebarAction() + { + $reviewIds = $this->getRequest()->getParam('reviewids'); + if (!is_array($reviewIds)) { + Mage::getSingleton('adminhtml/session')->addError(Mage::helper('kiyoh')->__('Please select item(s)')); + } else { + try { + foreach ($reviewIds as $reviewId) { + $reviews = Mage::getModel('kiyoh/reviews')->load($reviewId); + $reviews->setSidebar(0)->save(); + } + + $msg = Mage::helper('kiyoh')->__('Total of %d review(s) were removed from the sidebar.', count($reviewIds)); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + } catch (Exception $e) { + Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); + } + } + + $this->_redirect('*/*/index'); + } + + /** + * + */ + public function truncateAction() + { + $i = 0; + $collection = Mage::getModel('kiyoh/reviews')->getCollection(); + foreach ($collection as $item) { + $item->delete(); + $i++; + } + + $msg = Mage::helper('kiyoh')->__('Succefully deleted all %s saved review(s).', $i); + Mage::getSingleton('adminhtml/session')->addSuccess($msg); + $this->_redirect('*/*/index'); + } + + /** + * @return mixed + */ + protected function _isAllowed() + { + return Mage::getSingleton('admin/session')->isAllowed('admin/kiyoh/kiyoh_reviews'); + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/controllers/IndexController.php b/app/code/local/Magmodules/Kiyoh/controllers/IndexController.php new file mode 100755 index 0000000..f9eba9e --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/controllers/IndexController.php @@ -0,0 +1,52 @@ +loadLayout(); + $head = $this->getLayout()->getBlock('head'); + + if ($title = Mage::getStoreConfig('kiyoh/overview/meta_title')) { + $head->setTitle($title); + } + + if ($description = Mage::getStoreConfig('kiyoh/overview/meta_description')) { + $head->setDescription($description); + } + + if ($keywords = Mage::getStoreConfig('kiyoh/overview/meta_keywords')) { + $head->setKeywords($keywords); + } + + $this->renderLayout(); + } else { + $this->_redirect('/'); + } + } + +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/data/kiyoh_setup/data-upgrade-1.1.0-1.1.1.php b/app/code/local/Magmodules/Kiyoh/data/kiyoh_setup/data-upgrade-1.1.0-1.1.1.php new file mode 100755 index 0000000..9882575 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/data/kiyoh_setup/data-upgrade-1.1.0-1.1.1.php @@ -0,0 +1,37 @@ +getConnection(); + $table = $installer->getTable('admin/permission_block'); + $blockNames = array( + 'kiyoh/snippets', + 'kiyoh/custom', + ); + foreach ($blockNames as $blockName) { + $connection->insertOnDuplicate( + $table, array( + 'block_name' => $blockName, + 'is_allowed' => 1, + ) + ); + } +} \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/etc/adminhtml.xml b/app/code/local/Magmodules/Kiyoh/etc/adminhtml.xml new file mode 100755 index 0000000..6cc9784 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/etc/adminhtml.xml @@ -0,0 +1,88 @@ + + + + + + Reviews + 71 + + + KiyOh Connect + 11 + + + Manage Reviews + 100 + adminhtml/kiyohreviews/ + + + Manage Log + 110 + adminhtml/kiyohlog/ + + + KiyOh Config + 120 + adminhtml/system_config/edit/section/kiyoh + + + + + + + + + + Allow Everything + + + + + + + + + KiyOh Connect Permission Setting + + + + + + + Kiyoh Connect + 60 + + + Reviews + 100 + adminhtml/kiyohreviews/ + + + Log + 110 + adminhtml/kiyohlog/ + + + + + + + + \ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/etc/config.xml b/app/code/local/Magmodules/Kiyoh/etc/config.xml new file mode 100755 index 0000000..a376b31 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/etc/config.xml @@ -0,0 +1,243 @@ + + + + + + 1.1.2 + + + + + + Magmodules_Kiyoh_Model + kiyoh_mysql4 + + + Magmodules_Kiyoh_Model_Mysql4 + + + kiyoh_reviews
+
+ + kiyoh_stats
+
+ + kiyoh_log
+
+
+
+
+ + + + Magmodules_Kiyoh + + + core_setup + + + + + core_write + + + + + core_read + + + + + + Magmodules_Kiyoh_Helper + + + + + Magmodules_Kiyoh_Block + + + + + + + singleton + kiyoh/observer + processFeedbackInvitationcallAfterShipment + + + + + + + singleton + kiyoh/observer + processFeedbackInvitationcall + + + + +
+ + + + standard + + Magmodules_Kiyoh + kiyoh + + + + + + + magmodules_kiyoh.xml + + + + + + + + Magmodules_Kiyoh.csv + + + + + + + + + + magmodules_kiyoh.xml + + + + + + + + Magmodules_Kiyoh.csv + + + + + + + + + + + Magmodules_Kiyoh_Adminhtml + + + + + + + + + + kiyoh/reviews/cron_stats + + + kiyoh/observer::processStats + + + + + kiyoh/reviews/cron_reviews + + + kiyoh/observer::processReviews + + + + + kiyoh/reviews/cron_all + + + kiyoh/observer::processHistory + + + + + 0 02 * * * + + + kiyoh/observer::cleanLog + + + + + + + + 0 + + + 0 + */15 * * * * + 0 */2 * * * + 0 2 0 * * + + + 0 + 3 + 150 + external + 0 + 3 + 150 + external + + + 1 + + + 1 + 1 + 10,20,30 + KiyOh Reviews + KiyOh overview page + reviews, kiyoh + + + 0 + complete + 5 + 20 + 0 + 1 + + + 0 + 0 + left + 120 + + + 1 + 1 + 14 + + + +
\ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/etc/system.xml b/app/code/local/Magmodules/Kiyoh/etc/system.xml new file mode 100755 index 0000000..9c2e6d1 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/etc/system.xml @@ -0,0 +1,608 @@ + + + + + + + 200 + + + + + + magmodules + text + 40 + 1 + 1 + 1 + + + kiyoh/adminhtml_widget_info_info + 1 + 1 + 1 + 1 + + + + text + 2 + 1 + 1 + 1 + 1 + + + Event.observe(window, 'load', function() { + if ($('kiyoh_reviews_lastrun')) { + $('kiyoh_reviews_lastrun').style.backgroundColor='#f0f0f0'; + $('kiyoh_reviews_lastrun').disable(); + } + if ($('kiyoh_general_url')) { + $('kiyoh_general_url').style.backgroundColor='#f0f0f0'; + $('kiyoh_general_url').disable(); + } + if ($('kiyoh_general_company')) { + $('kiyoh_general_company').style.backgroundColor='#f0f0f0'; + $('kiyoh_general_company').disable(); + } + }); + + ]]> + + + + + text + kiyoh/adminhtml_widget_field_version + 1 + 1 + 0 + 0 + + + + select + adminhtml/system_config_source_yesno + kiyoh/system_config_flushcache + 2 + 1 + 1 + 1 + + + + kiyoh/adminhtml_widget_form_heading + 3 + 1 + 0 + 1 + + + + select + kiyoh/system_config_source_kiyoh + 4 + 1 + 1 + 1 + + + + text + 5 + 1 + 0 + 1 + + + + text + 6 + 1 + 0 + 1 + You can find this information in your Kiyoh account + + + + kiyoh/adminhtml_widget_form_heading + 10 + 1 + 0 + 1 + + + + text + 11 + 1 + 0 + 1 + + + + text + 12 + 1 + 0 + 1 + + + + + + text + 3 + 1 + 1 + 1 + 1 + + + + select + adminhtml/system_config_source_yesno + 1 + 1 + 1 + 1 + + + + select + kiyoh/system_config_source_cronfrequency + 2 + 1 + 1 + 1 + + 1 + + + + + select + kiyoh/system_config_source_cronfrequency + 3 + 1 + 1 + 1 + + 1 + + + + + select + kiyoh/system_config_source_cronfrequency + 4 + 1 + 1 + 1 + + 1 + + + + + text + 100 + 1 + 1 + 1 + + + + button + kiyoh/adminhtml_widget_buttons_process + 101 + 1 + 1 + 1 + + + + + + text + 4 + 1 + 1 + 1 + 1 + + + + kiyoh/adminhtml_widget_form_heading + 50 + 1 + 1 + 1 + + + + select + adminhtml/system_config_source_yesno + 51 + 1 + 1 + 1 + + + + validate-number + text + 52 + 1 + 1 + 1 + + 1 + + + + + validate-number + text + 53 + 1 + 1 + 1 + + 1 + + + + + select + adminhtml/system_config_source_yesno + 56 + 1 + 1 + 1 + + 1 + + When using both sidebars make sure you only activate the Rich Snippets for only one + sidebar + + + + + select + kiyoh/system_config_source_sidebarlink + 55 + 1 + 1 + 1 + + 1 + + + + + kiyoh/adminhtml_widget_form_heading + 60 + 1 + 1 + 1 + + + + select + adminhtml/system_config_source_yesno + 61 + 1 + 1 + 1 + + + + validate-number + text + 62 + 1 + 1 + 1 + + 1 + + + + + validate-number + text + 63 + 1 + 1 + 1 + + 1 + + + + + select + kiyoh/system_config_source_sidebarlink + 65 + 1 + 1 + 1 + + 1 + + + + + select + adminhtml/system_config_source_yesno + 66 + 1 + 1 + 1 + + 1 + + When using both sidebars make sure you only activate the Rich Snippets for only one + sidebar + + + + + + + text + 6 + 1 + 1 + 1 + 1 + + + + select + adminhtml/system_config_source_yesno + 1 + 1 + 1 + 1 + + + + textarea + 2 + 1 + 1 + 1 + + 1 + + + + + select + adminhtml/system_config_source_enabledisable + 3 + 1 + 1 + 1 + + + + text + 4 + 1 + 1 + 1 + Comma Separated, as: 10,20,30 + + 1 + + + + + kiyoh/adminhtml_widget_form_heading + 10 + 1 + 1 + 1 + + + + text + 11 + 1 + 1 + 1 + + 1 + + + + + textarea + 12 + 1 + 1 + 1 + + 1 + + + + + textarea + 13 + 1 + 1 + 1 + + 1 + + + + + + + text + 7 + 1 + 1 + 1 + 1 + + + + select + adminhtml/system_config_source_yesno + 1 + 1 + 1 + 1 + Send invitation? + Send customers automatically receive an invitation to share a customer + experience. + + + + + text + 2 + 1 + 1 + 1 + Use the company email address registered with Kiyoh, this is used as en extra + validation. + + + 1 + + + + + select + kiyoh/system_config_source_orderstatus + 3 + 1 + 1 + 1 + 1 + Invitation e-mail is sent after such status is achieved + Specify at which status you want to send the invitation. Default is "Completed" + + + 1 + + + + + text + 4 + 1 + 1 + 1 + Send the invitation x days after the order is completed + This will ensure that the customer receives the invitation shortly after receiving + the product and not before. This increases the opportunity that the client will share + his experience. + + + 1 + + + + + text + 6 + 1 + 1 + 1 + Change only if necessary + Number of days to complete order may last, if it takes longer then no invitation + will be sent. Read more about this feature on Kiyoh.nl. + + + 1 + + + + + + + text + 9 + 1 + 0 + 0 + 1 + + + + select + adminhtml/system_config_source_yesno + 1 + 1 + 0 + 0 + + + + select + adminhtml/system_config_source_yesno + 2 + 1 + 0 + 0 + + 1 + + + + + validate-number + text + 3 + 1 + 0 + 0 + + 1 + + + + + + + text + 10 + 1 + 1 + 1 + 1 + + The extension comes with two coded blocks.
With this blocks you can add your store rating in a Static block or CMS page.


The Rich Snippets Block.
Show your Store-rating with this block and generate results in the Google Search Engine Results better known as Rich Snippets.
Paste the code below at the desired location using a Static Block or a CMS page.

Code: {{block type="kiyoh/snippets" name="kiyohsnippets"}}


Custom Block.
With this block you can create custom block for footer of header, you can paste the code below at the desired location using a Static Block or a CMS page.
To edit this block you need to edit the .phtml file located in the following path: app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml

Code: {{block type="kiyoh/custom" name="kiyoh"}}

]]>
+
+
+
+
+
\ No newline at end of file diff --git a/app/code/local/Magmodules/Kiyoh/sql/kiyoh_setup/mysql4-install-1.0.0.php b/app/code/local/Magmodules/Kiyoh/sql/kiyoh_setup/mysql4-install-1.0.0.php new file mode 100755 index 0000000..5aa56b0 --- /dev/null +++ b/app/code/local/Magmodules/Kiyoh/sql/kiyoh_setup/mysql4-install-1.0.0.php @@ -0,0 +1,103 @@ +startSetup(); +$installer->run( + " + DROP TABLE IF EXISTS {$this->getTable('kiyoh_reviews')}; + CREATE TABLE IF NOT EXISTS {$this->getTable('kiyoh_reviews')} ( + `review_id` int(10) NOT NULL AUTO_INCREMENT, + `shop_id` int(5) NOT NULL, + `company` varchar(255) DEFAULT NULL, + `kiyoh_id` int(5) NOT NULL, + `score` smallint(6) DEFAULT '0', + `score_q2` smallint(6) DEFAULT '0', + `score_q3` smallint(6) DEFAULT '0', + `score_q4` smallint(6) DEFAULT '0', + `score_q5` smallint(6) DEFAULT '0', + `score_q6` smallint(6) DEFAULT '0', + `score_q7` smallint(6) DEFAULT '0', + `score_q8` smallint(6) DEFAULT '0', + `score_q9` smallint(6) DEFAULT '0', + `score_q10` smallint(6) DEFAULT '0', + `customer_name` varchar(255) DEFAULT NULL, + `customer_email` varchar(255) DEFAULT NULL, + `customer_place` varchar(255) DEFAULT NULL, + `recommendation` tinyint(1) DEFAULT NULL, + `positive` text, + `negative` text, + `purchase` text, + `reaction` text, + `date_created` date NOT NULL, + `date_updated` date NOT NULL, + `sidebar` tinyint(1) NOT NULL DEFAULT '1', + `status` tinyint(5) NOT NULL DEFAULT '1', + PRIMARY KEY (`review_id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + DROP TABLE IF EXISTS {$this->getTable('kiyoh_log')}; + CREATE TABLE IF NOT EXISTS {$this->getTable('kiyoh_log')} ( + `id` int(10) NOT NULL AUTO_INCREMENT, + `type` varchar(255) NOT NULL, + `shop_id` varchar(255) NOT NULL, + `company` varchar(255) DEFAULT NULL, + `review_update` int(5) DEFAULT '0', + `review_new` int(5) DEFAULT '0', + `response` text, + `order_id` int(10) DEFAULT NULL, + `cron` varchar(255) DEFAULT NULL, + `date` datetime NOT NULL, + `time` varchar(255) NOT NULL, + `api_url` text, + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; + + DROP TABLE IF EXISTS {$this->getTable('kiyoh_stats')}; + CREATE TABLE IF NOT EXISTS {$this->getTable('kiyoh_stats')} ( + `id` int(5) NOT NULL AUTO_INCREMENT, + `company` varchar(255) DEFAULT NULL, + `shop_id` int(5) NOT NULL, + `score` smallint(6) DEFAULT '0', + `score_q2` smallint(6) DEFAULT '0', + `score_q2_title` varchar(255) NOT NULL, + `score_q3` smallint(6) DEFAULT '0', + `score_q3_title` varchar(255) NOT NULL, + `score_q4` smallint(6) DEFAULT '0', + `score_q4_title` varchar(255) NOT NULL, + `score_q5` smallint(6) DEFAULT '0', + `score_q5_title` varchar(255) NOT NULL, + `score_q6` smallint(6) DEFAULT '0', + `score_q6_title` varchar(255) NOT NULL, + `score_q7` smallint(6) DEFAULT '0', + `score_q7_title` varchar(255) NOT NULL, + `score_q8` smallint(6) DEFAULT '0', + `score_q8_title` varchar(255) NOT NULL, + `score_q9` smallint(6) DEFAULT '0', + `score_q9_title` varchar(255) NOT NULL, + `score_q10` smallint(6) DEFAULT '0', + `score_q10_title` varchar(255) NOT NULL, + `scoremax` smallint(6) DEFAULT '0', + `votes` int(5) DEFAULT '0', + PRIMARY KEY (`id`) + ) ENGINE=InnoDB DEFAULT CHARSET=utf8; +" +); +$installer->endSetup(); \ No newline at end of file diff --git a/app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml b/app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml new file mode 100755 index 0000000..1cdc5ae --- /dev/null +++ b/app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml @@ -0,0 +1,37 @@ + + + + + + + + magmodules/kiyoh/grid.css + + + + + + + + + + + + \ No newline at end of file diff --git a/app/design/frontend/base/default/layout/magmodules_kiyoh.xml b/app/design/frontend/base/default/layout/magmodules_kiyoh.xml new file mode 100755 index 0000000..0545f1b --- /dev/null +++ b/app/design/frontend/base/default/layout/magmodules_kiyoh.xml @@ -0,0 +1,63 @@ + + + + + + + + magmodules/kiyoh/sidebar.css + + + + + + + + + + + + + + + + + + magmodules/kiyoh/style.css + + + + + + + + + + + + + + + + magmodules/kiyoh/richsnippets.css + + + + \ No newline at end of file diff --git a/app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml b/app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml new file mode 100755 index 0000000..f822b1e --- /dev/null +++ b/app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml @@ -0,0 +1,154 @@ + +getReviews(); + $stats = $this->getStats(); +?> +
+
+

__('Kiyoh'); ?>

+ + + +
+ + getSize()): ?> +
+
+ +
+
+ +
+
+

getCustomerName(); ?> + - formatDate($review->getDateCreated(), 'long', false); ?> + - getCustomerPlace(); ?>

+ getScore()): ?> +
    +
  • + +
  • +
+ +
+
    +
  • + getPositive()): ?> + __('Positive'); ?>: +

    getPositive()); ?>

    + + + getNegative()): ?> + __('Suggestions'); ?>: +

    getNegative()); ?>

    + + + __('Recommend'); ?>: + getRecommendation() == '1') { + echo $this->__('Yes'); + } else { + echo $this->__('No'); + } + ?> +
  • +
+
    + getScoreQ2() > 0): ?> +
  • + getScoreQ2Title(); ?> + +
  • + + getScoreQ3() > 0): ?> +
  • + getScoreQ3Title(); ?> + +
  • + + getScoreQ4() > 0): ?> +
  • + getScoreQ4Title(); ?> + +
  • + + getScoreQ5() > 0): ?> +
  • + getScoreQ5Title(); ?> + +
  • + + getScoreQ6() > 0): ?> +
  • + getScoreQ6Title(); ?> + +
  • + + getScoreQ7() > 0): ?> +
  • + getScoreQ7Title(); ?> + +
  • + + getScoreQ8() > 0): ?> +
  • + getScoreQ8Title(); ?> + +
  • + + getScoreQ9() > 0): ?> +
  • + getScoreQ9Title(); ?> + +
  • + + getScoreQ10() > 0): ?> +
  • + getScoreQ10Title(); ?> + +
  • + +
+
+ + getPagerHtml(); ?> + +

__('No reviews found...'); ?>

+ +
\ No newline at end of file diff --git a/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml b/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml new file mode 100755 index 0000000..0cb363d --- /dev/null +++ b/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml @@ -0,0 +1,74 @@ +getSidebarCollection('left'); +$total = $this->getTotalScore(); +?> + +
+
+ __('Kiyoh') ?> +
+ getPercentage() > 0): ?> + getSnippetsEnabled('left')): ?> +
+
+
+
+

getStarsQty(); ?> / 10

+

__('Based on %s reviews', '' . $total->getVotes() . ''); ?>

+
+
+ +
+
+
+
+

getStarsQty(); ?> / 10

+

__('Based on %s reviews', '' . $total->getVotes() . ''); ?>

+
+
+ + + + formatContent($sidebarreview, 'left'); ?> +
+
+

getCustomerName(); ?>

+ formatDate($sidebarreview->getDateCreated(), 'medium', false); ?> + getScore()): ?> + + +
+
+ + getReviewsUrl('left')): ?> +
+ +
+ +
+
+ +
+ \ No newline at end of file diff --git a/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml b/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml new file mode 100755 index 0000000..01f7cf1 --- /dev/null +++ b/app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml @@ -0,0 +1,75 @@ +getSidebarCollection('right'); +$total = $this->getTotalScore(); +?> + +
+
+ __('Kiyoh') ?> +
+ getPercentage() > 0): ?> + getSnippetsEnabled('right')): ?> +
+
+
+
+

getStarsQty(); ?> / 10

+

__('Based on %s reviews', '' . $total->getVotes() . ''); ?>

+
+
+ +
+
+
+
+

getStarsQty(); ?> / 10

+

__('Based on %s reviews', '' . $total->getVotes() . ''); ?>

+
+
+ + + + formatContent($sidebarreview, 'right'); ?> +
+
+

getCustomerName(); ?>

+ formatDate($sidebarreview->getDateCreated(), 'medium', false); ?> + getScore()): ?> + + +
+
+ + getReviewsUrl('right')): ?> +
+ +
+ +
+
+ +
+ \ No newline at end of file diff --git a/app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml b/app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml new file mode 100755 index 0000000..30aa6d8 --- /dev/null +++ b/app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml @@ -0,0 +1,37 @@ +getKiyohEnabled(); +$data = $this->getKiyohData(); + +$percentage = $data->getPercentage(); +$rating = round(($data->getPercentage() / 10), 1); + +?> +
+ +
+ diff --git a/app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml b/app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml new file mode 100755 index 0000000..7689daa --- /dev/null +++ b/app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml @@ -0,0 +1,32 @@ + +getSnippets()) { ?> +
+ getHtmlStars($snippets->getPercentage()); ?> +
+ +
+ +

__('Rating %s based on %s customer reviews', '' . $snippets->getPercentage() . '%', '' . $snippets->getVotes() . '') ?>getExternalLink(); ?>

+
+
+
+ diff --git a/app/etc/modules/Magmodules_Kiyoh.xml b/app/etc/modules/Magmodules_Kiyoh.xml new file mode 100755 index 0000000..086dd02 --- /dev/null +++ b/app/etc/modules/Magmodules_Kiyoh.xml @@ -0,0 +1,9 @@ + + + + + true + local + + + \ No newline at end of file diff --git a/app/locale/en_US/Magmodules_Kiyoh.csv b/app/locale/en_US/Magmodules_Kiyoh.csv new file mode 100755 index 0000000..9ce3ded --- /dev/null +++ b/app/locale/en_US/Magmodules_Kiyoh.csv @@ -0,0 +1,126 @@ +"%s - Repsonse: %s","%s - Repsonse: %s" +"%s new review(s)","%s new review(s)" +"%s review(s) updated","%s review(s) updated" +"API CREDENTIALS","API CREDENTIALS" +"Activate","Activate" +"Active","Active" +"Add Rich Snippets","Add Rich Snippets" +"Add to Sidebar","Add to Sidebar" +"Add to Sidebar Homepage","Add to Sidebar Homepage" +"Api URL","Api URL" +"Are you sure you want to cleanup logfiles?","Are you sure you want to cleanup logfiles?" +"Are you sure you want to delete all reviews?","Are you sure you want to delete all reviews?" +"Auto Cleaning","Auto Cleaning" +"Based on %s reviews","Based on %s reviews" +"Change only if necessary","Change only if necessary" +"City","City" +"Clean after Days","Clean after Days" +"Cleanup Log","Cleanup Log" +"Comma Separated, as: 10,20,30","Comma Separated, as: 10,20,30" +"Company","Company" +"Company ID","Company ID" +"Company Import","Company Import" +"Connector Code","Connector Code" +"Cron","Cron" +"Date","Date" +"Delay","Delay" +"Delete","Delete" +"Delete all reviews","Delete all reviews" +"Description","Description" +"Email","Email" +"Enable Log Function","Enable Log Function" +"Enabled","Enabled" +"Every 15 minutes","Every 15 minutes" +"Every Hour","Every Hour" +"Every other Hour","Every other Hour" +"External (Kiyoh.nl)","External (Kiyoh.nl)" +"General configuration","General configuration" +"Internal (/kiyoh)","Internal (/kiyoh)" +"Invitation","Invitation" +"Invitation Call","Invitation Call" +"Invitation to write the customer experience","Invitation to write the customer experience" +"Kihoy.com","Kihoy.com" +"KiyOh","KiyOh" +"KiyOh Connect Permission Setting","KiyOh Connect Permission Setting" +"KiyOh Custom Blocks","KiyOh Custom Blocks" +"KiyOh Log Settings","KiyOh Log Settings" +"KiyOh Overview Page","KiyOh Overview Page" +"KiyOh Reviews Sidebar","KiyOh Reviews Sidebar" +"Kiyoh","KiyOh" +"Kiyoh Import Reviews","Kiyoh Import Reviews" +"Kiyoh Logs","Kiyoh Logs" +"Kiyoh Reviews","Kiyoh Reviews" +"Kiyoh.nl","KiyOh.nl" +"Last Update","Last Update" +"Left","Left" +"Left Sidebar","Left Sidebar" +"Length of Reviews","Length of Reviews" +"Link to","Link to" +"Localisation","Localisation" +"Magmodules","Magmodules" +"Manual","Manual" +"Maximum Delay","Maximum Delay" +"Meta Data","Meta Data" +"Meta Keywords","Meta Keywords" +"Negative","Improvement Points" +"No","No" +"No reviews found...","No reviews found..." +"None","None" +"Number of Reviews","Number of Reviews" +"Number of days to complete order may last, if it takes longer then no invitation will be sent. Read more about this feature on Kiyoh.nl.","Number of days to complete order may last, if it takes longer then no invitation will be sent. Read more about this feature on Kiyoh.nl." +"Once a Day","Once a Day" +"Once a Week","Once a Week" +"Overall","Overall" +"Please select item(s)","Please select item(s)" +"Positive","Positive points" +"Process Manually","Process Manually" +"Rating %s based on %s customer reviews","Rating %s based on %s customer reviews" +"Reaction","Reaction" +"Recommend","Recommend" +"Recommendation","Recommendation" +"Remove from Sidebar","Remove from Sidebar" +"Reviews","Reviews" +"Reviews Cron","Reviews Cron" +"Right","Right" +"Right Sidebar","Right Sidebar" +"Score","Score" +"Set to invisible","Set to invisible" +"Set to visible","Set to visible" +"Send customers automatically receive an invitation to share a customer experience.","Send customers automatically receive an invitation to share a customer experience." +"Send the invitation x days after the order is completed","Send the invitation x days after the order is completed" +"Shop","Shop" +"Sidebar",""Sidebar"" +"Stats Cron","Stats Cron" +"Succefully deleted all %s saved review(s).","Succefully deleted all %s saved review(s)." +"Suggestions","Suggestions" +"Specify at which status you want to send the invitation. Default is ""Completed"".","Specify at which status you want to send the invitation. Default is ""Completed""." +"Test API","Test API" +"Time","Time" +"Total of %d log record(s) deleted.","Total of %d log record(s) deleted." +"Total of %d review(s) were added to the sidebar.","Total of %d review(s) were added to the sidebar." +"Total of %d review(s) were disabled.","Total of %d review(s) were disabled." +"Total of %d review(s) were enabled.","Total of %d review(s) were enabled." +"Total of %d review(s) were removed from the sidebar.","Total of %d review(s) were removed from the sidebar." +"Total of %s log record(s) deleted.","Total of %s log record(s) deleted." +"This will ensure that the customer receives the invitation shortly after receiving the product and not before. This increases the opportunity that the client will share his experience.","This will ensure that the customer receives the invitation shortly after receiving the product and not before. This increases the opportunity that the client will share his experience." +"Twice a Day","Twice a Day" +"Type","Type" +"Update Review History","Update Review History" +"Update Reviews","Update Reviews" +"Update Summary","Update Summary" +"Url","Url" +"Use the company email address registered with Kiyoh, this is used as en extra validation.","Use the company email address registered with Kiyoh, this is used as en extra validation." +"Use Cronjob","Use Cronjob" +"User","User" +"View all reviews","View all reviews" +"Webwinkel ID %s:","Webwinkel ID %s:" +"Webwinkel ID %s: no updates found, feed is empty or not found!","Webwinkel ID %s: no updates found, feed is empty or not found!" +"Write review","Write review" +"Yes","Yes" +"You can find this information in your Kiyoh account","You can find this information in your Kiyoh account" +"You can only activate the Rich Snippets when this block is shown on your Homepage only","You can only activate the Rich Snippets when this block is shown on your Homepage only" +"and total score updated.","and total score updated." +"on","on" +"total score updated","total score updated" +"

The extension comes with two coded blocks.
With this blocks you can add your store rating in a Static block or CMS page.


The Rich Snippets Block.
Show your Store-rating with this block and generate results in the Google Search Engine Results better known as Rich Snippets.
Paste the code below at the desired location using a Static Block or a CMS page.

Code: {{block type=""kiyoh/snippets"" name=""kiyohsnippets""}}


Custom Block.
With this block you can create custom block for footer of header, you can paste the code below at the desired location using a Static Block or a CMS page.
To edit this block you need to edit the .phtml file located in the following path: app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml

Code: {{block type=""kiyoh/custom"" name=""kiyoh""}}

","

The extension comes with two coded blocks.
With this blocks you can add your store rating in a Static block or CMS page.


The Rich Snippets Block.
Show your Store-rating with this block and generate results in the Google Search Engine Results better known as Rich Snippets.
Paste the code below at the desired location using a Static Block or a CMS page.

Code: {{block type=""kiyoh/snippets"" name=""kiyohsnippets""}}


Custom Block.
With this block you can create custom block for footer of header, you can paste the code below at the desired location using a Static Block or a CMS page.
To edit this block you need to edit the .phtml file located in the following path: app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml

Code: {{block type=""kiyoh/custom"" name=""kiyoh""}}

" +"When using both sidebars make sure you only activate the Rich Snippets for only one sidebar","When using both sidebars make sure you only activate the Rich Snippets for only one sidebar" \ No newline at end of file diff --git a/app/locale/nl_NL/Magmodules_Kiyoh.csv b/app/locale/nl_NL/Magmodules_Kiyoh.csv new file mode 100755 index 0000000..7b41c47 --- /dev/null +++ b/app/locale/nl_NL/Magmodules_Kiyoh.csv @@ -0,0 +1,132 @@ +"%s - Repsonse: %s","%s - Antwoord: %s" +"%s new review(s)","%s nieuwe beoordeling(en)" +"%s review(s) updated","%s beoordeling(en) geupdate" +"API CREDENTIALS","API Gegevens" +"Activate","Activeren" +"Active","Actief" +"Add Rich Snippets","Voeg Rich Snippets toe" +"Add to Sidebar","Sidebar toevoegen" +"Add to Sidebar Homepage","Voeg toe aan sidebar op Homepage" +"Api URL","Api URL" +"Are you sure you want to cleanup logfiles?","Definitief de logfiles opschonen?" +"Are you sure you want to delete all reviews?","Definitief alle beoordelingen verwijderen?" +"Auto Cleaning","Automatisch opruimen" +"Based on %s reviews","Gebaseerd op %s beoordelingen" +"Change only if necessary","Verander alleen indien noodzakelijk" +"City","Plaats" +"Clean after Days","Opschonen na aantal dagen" +"Cleanup Log","Schoonmaak log" +"Comma Separated, as: 10,20,30","Komma gescheiden als: 10,20,30" +"Company","Bedrijf" +"Company ID","Bedrijfs ID" +"Company Import","Bedrijfs import" +"Connector Code","Connector code" +"Cron","Cron" +"Date","Datum" +"Delay","Vertraging" +"Delete","Verwijder" +"Delete all reviews","Verwijder alle beoordelingen" +"Description","Omschrijving" +"Email","E-mail" +"Enable Log Function","Activeer logfunctie" +"Enabled","Activeer" +"Every 15 minutes","Elke 15 minuten" +"Every Hour","Elk uur" +"Every other Hour","Om het uur" +"External (Kiyoh.nl)","Extern (KiyOh.nl)" +"General configuration","Algemene informatie" +"Internal (/kiyoh)","Intern (/kiyoh)" +"Invitation","Herinnering" +"Invitation Call","Herinnering e-mail" +"Invitation to write the customer experience","Herinnering om een beoordeling te schrijven" +"Kihoy.com","KihOy.com" +"KiyOh","KiyOh" +"KiyOh Connect Permission Setting","KiyOh Connect permissie instellingen" +"KiyOh Custom Blocks","KiyOh elementen" +"KiyOh Log Settings","KiyOh log settings" +"KiyOh Overview Page","KiyOh overzichtpagina" +"KiyOh Reviews Sidebar","KiyOh beoordeling sidebar" +"Kiyoh","KiyOh" +"Kiyoh Import Reviews","KiyOh beoordelingen importeren" +"Kiyoh Logs","KiyOh Logs" +"Kiyoh Reviews","KiyOh beoordelingen" +"Kiyoh.nl","KiyOh.nl" +"Last Update","Laatste Update" +"Left","Links" +"Left Sidebar","Linker sidebar" +"Length of Reviews","Lengte van beoordelingen" +"Link to","Link naar" +"Localisation","Lokalisatie" +"Magmodules","Magmodules" +"Manage Reviews","Beheer Beoordelingen" +"Manage Log","Beheer Log" +"Manual","Handleiding" +"Maximum Delay","Maximale vertraging" +"Meta Data","Meta Data" +"Meta Keywords","Meta zoekwoorden" +"Negative","Verbeterpunten" +"No","Nee" +"No reviews found...","Geen beoordelingen gevonden..." +"None","Geen" +"Number of Reviews","Aantal beoordelingen" +"Number of days to complete order may last, if it takes longer then no invitation will be sent. Read more about this feature on Kiyoh.nl.","Aantal dagen dat een order oud mag zijn alvorens de herinnering wordt verstuurd, als het wijzigen van de orderstatus langer duurt wordt er niks verstuurd." +"Once a Day","Eens per dag" +"Once a Week","Eens per week" +"Overall","Overall" +"Please select item(s)","Selecteer item(s)" +"Positive","Pluspunten" +"Positive points:","Positieve punten:" +"Process Manually","Voer handmatig uit" +"Rating %s based on %s customer reviews","Beoordeling %s gebaseerd op %s klantbeoordelingen" +"Reaction","Reactie" +"Recommend","Aanbevolen" +"Recommend:","Aanbevolen:" +"Recommendation","Aanbeveling" +"Remove from Sidebar","Verwijder van sidebar" +"Reviews","Beoordelingen" +"Reviews Cron","Beoordeling Cron" +"Right","Rechts" +"Right Sidebar","Rechter Sidebar" +"Score","Score" +"Set to invisible","Stel in als niet zichtbaar" +"Set to visible","Maak zichtbaar" +"Send customers automatically receive an invitation to share a customer experience.","Stuur klanten automatisch een e-mail met de herinnering om een beoordeling te schrijven." +"Send the invitation x days after the order is completed","Stuur de herinnering een x aantal dagen nadat de geselecteerde status is bereikt." +"Shop","Winkel" +"Sidebar","Sidebar" +"Stats Cron","Statistieken Cron" +"Succefully deleted all %s saved review(s).","Alle %s opgeslagen beoordelingen zijn succesvol verwijdert." +"Suggestions","Suggesties" +"Suggestions:","Suggesties" +"Specify at which status you want to send the invitation. Default is ""Completed"".","Specificeer vanaf welke status de herinnering verzonden dient te worden. Standaard is ""Completed""." +"Test API","Test API" +"Time","Tijd" +"Total of %d log record(s) deleted.","Een totaal van %d log rij(en) zijn verwijdert." +"Total of %d review(s) were added to the sidebar.","Een totaal van %d beoordeling(en) zijn aan de sidebar toegevoegd." +"Total of %d review(s) were disabled.","Een totaal van %d beoordeling(en) zijn uitgeschakeld." +"Total of %d review(s) were enabled.","Een totaal van %d beoordeling(en) zijn uitgeschakeld." +"Total of %d review(s) were removed from the sidebar.","Een totaal van %d beoordeling(en) zijn verwijdert uit de sidebar" +"Total of %s log record(s) deleted.","Een totaal van %s log rijen(s) verwijdert." +"This will ensure that the customer receives the invitation shortly after receiving the product and not before. This increases the opportunity that the client will share his experience.","Dit zal ervoor zorgen dat de klant na ontvangst van het product nogmaals een uitnodiging ontvangt. Dit vergroot de kans dat de klant zijn ervaring zal delen." +"Twice a Day","Tweemaal per dag" +"Type","Type" +"Update Review History","Update Beoordeling historie" +"Update Reviews","Update beoordelingen" +"Update Summary","Update samenvatting" +"Url","Url" +"Use the company email address registered with Kiyoh, this is used as en extra validation.","Gebruik het e-mail adres waarmee kiyOh geregistreerd staat, dit wordt gebruikt als extra validatie" +"Use Cronjob","Gebruik Cronjob" +"User","Gebruiker" +"View all reviews","Bekijk alle beoordelingen" +"Webwinkel ID %s:","Webwinkel ID %s:" +"Webwinkel ID %s: no updates found, feed is empty or not found!","Webwinkel ID %s: geen updates gevonden, feed is leeg of niet beschikbaar." +"Write review","Schrijf beoordeling" +"Yes","Ja" +"You can find this information in your Kiyoh account","Je kunt deze informatie vinden in je KiyOh account." +"You can only activate the Rich Snippets when this block is shown on your Homepage only","U kunt deze optie enkel activeren wanneer de sidebar op de homepage wordt vertoond. Indien u ook gebruikt maakt van de homepage widget dan raden wij u aan deze optie uit te schakelen om dubbele Rich Snippets te voorkomen." +"and total score updated.","totaal score geüpdate." +"on","via" +"total score updated","totaal score geüpdate" +"

The extension comes with two coded blocks.
With this blocks you can add your store rating in a Static block or CMS page.


The Rich Snippets Block.
Show your Store-rating with this block and generate results in the Google Search Engine Results better known as Rich Snippets.
Paste the code below at the desired location using a Static Block or a CMS page.

Code: {{block type=""kiyoh/snippets"" name=""kiyohsnippets""}}


Custom Block.
With this block you can create custom block for footer of header, you can paste the code below at the desired location using a Static Block or a CMS page.
To edit this block you need to edit the .phtml file located in the following path: app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml

Code: {{block type=""kiyoh/custom"" name=""kiyoh""}}

","

Deze extensie komt met 2 verschillende blokken.
Met deze blokken kan je de winkelbeoordeling in een static-block of CMS pagina plaatsen.


Het Rich Snippets blok.
Toon de webwinkel-waardering met in blok en genereer hiermee de zogenaamde Rich Snippets waarbij de winkelbeoordelingen worden getoond in de Zoekmachine resultaten van bijvoorbeeld Google. Plaat de onderstaande code op de gewenste plaats in een statische blok of een CMS-pagina.

De code: {{block type=""kiyoh/snippets"" name=""kiyohsnippets""}}


Custom blok.
Met dit custom blok is het mogelijk om eenvoudig een eigen blok creëren met daarin verschillende waardes als het aantal klanbeoordelingen, bedrijfsnaam en gemiddelde rating. Plaats de onderstaande code op de gewenste plek in een statisch blok of een CMS-pagina. Om dit blok naar wens te bewerken en eventueel aan te vullen met de geweneste informatie is het mogelijk om het .phtml bestand aan te passen. Deze is te vinden via de volgende path: app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml 

De code: {{block type=""kiyoh/custom"" name=""kiyoh""}}

" +"Rating %s based on %s customer reviews","totaal %s tevreden klanten op basis van %s beoordelingen" +"When using both sidebars make sure you only activate the Rich Snippets for only one sidebar","Zorg ervoor dat er maar 1 Rich Snippet actief is bij gebruik van beide sidebars." \ No newline at end of file diff --git a/modman b/modman new file mode 100755 index 0000000..0a60800 --- /dev/null +++ b/modman @@ -0,0 +1,23 @@ +app/code/local/Magmodules/Kiyoh app/code/local/Magmodules/Kiyoh +app/etc/modules/Magmodules_Kiyoh.xml app/etc/modules/Magmodules_Kiyoh.xml +app/locale/en_US/Magmodules_Kiyoh.csv app/locale/en_US/Magmodules_Kiyoh.csv +app/locale/nl_NL/Magmodules_Kiyoh.csv app/locale/nl_NL/Magmodules_Kiyoh.csv +app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml app/design/adminhtml/default/default/layout/magmodules_kiyoh.xml +app/design/frontend/base/default/layout/magmodules_kiyoh.xml app/design/frontend/base/default/layout/magmodules_kiyoh.xml +app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml app/design/frontend/base/default/template/magmodules/kiyoh/index.phtml +app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/left.phtml +app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml app/design/frontend/base/default/template/magmodules/kiyoh/sidebar/right.phtml +app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml app/design/frontend/base/default/template/magmodules/kiyoh/widget/custom.phtml +app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml app/design/frontend/base/default/template/magmodules/kiyoh/widget/richsnippets.phtml +skin/adminhtml/default/default/magmodules/kiyoh/grid.css skin/adminhtml/default/default/magmodules/kiyoh/grid.css +skin/adminhtml/default/default/magmodules/kiyoh/star.png skin/adminhtml/default/default/magmodules/kiyoh/star.png +skin/frontend/base/default/magmodules/kiyoh/images/5-stars-empty.png skin/frontend/base/default/magmodules/kiyoh/images/5-stars-empty.png +skin/frontend/base/default/magmodules/kiyoh/images/5-stars-full.png skin/frontend/base/default/magmodules/kiyoh/images/5-stars-full.png +skin/frontend/base/default/magmodules/kiyoh/images/bkg_rating.gif skin/frontend/base/default/magmodules/kiyoh/images/bkg_rating.gif +skin/frontend/base/default/magmodules/kiyoh/images/greystar.png skin/frontend/base/default/magmodules/kiyoh/images/greystar.png +skin/frontend/base/default/magmodules/kiyoh/images/logo.png skin/frontend/base/default/magmodules/kiyoh/images/logo.png +skin/frontend/base/default/magmodules/kiyoh/images/star.png skin/frontend/base/default/magmodules/kiyoh/images/star.png +skin/frontend/base/default/magmodules/kiyoh/richsnippets.css skin/frontend/base/default/magmodules/kiyoh/richsnippets.css +skin/frontend/base/default/magmodules/kiyoh/sidebar.css skin/frontend/base/default/magmodules/kiyoh/sidebar.css +skin/frontend/base/default/magmodules/kiyoh/style.css skin/frontend/base/default/magmodules/kiyoh/style.css + diff --git a/skin/adminhtml/default/default/magmodules/kiyoh/grid.css b/skin/adminhtml/default/default/magmodules/kiyoh/grid.css new file mode 100755 index 0000000..7870465 --- /dev/null +++ b/skin/adminhtml/default/default/magmodules/kiyoh/grid.css @@ -0,0 +1,94 @@ +/* + * Magmodules.eu - http://www.magmodules.eu + * + * NOTICE OF LICENSE + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to info@magmodules.eu so we can send you a copy immediately. + * + * @category Magmodules + * @package Magmodules_Kiyoh + * @author Magmodules +^|8E~M;t<1W}CFUX|A%Or10TLt>NuVf73CR*tNH!*mgb-U%u^`GN zq7)Pb)Da3QqfV)%6e;B#z_V1TWr_$Mz$ldg1?&ca_DAW??tb6*&htF)xwF~fVZo-x zcE%VC#+1k9M4+n~`T$02(6@c|bT_)#B7xC}08T(sMJfoxlECp0z>|xlPy{5Br0wm1 zd@vY;Eiz#=63q`~h+#Qiq{rYjawW>fV0`>EN|87TLV$QkDpN4QiCaw|Ad@h`&nSE% zUl{-;%D7q;B+!Nl#o8n>T>|>~0zMiBDjp{$T8%_N|HS*B z!fIif5+X!EYB)tDMjMylsCT7g1gIbp0;_~DoV--U@I)Aa)rqhY2oO*KSH4IrQ|JwD z3k*J=!BeOakwOgdI7|@Lz{_M32Af5pk-bPHB8|)@kpjtd8qqU|MGgogvpj=nEYcE} z1B+ASkOEoaO8((`tjN_5gItMv=0GahK1dRzg5|(M(hS*(u@Hk+)LZ0AR*r?ZBA0*$ zL(sSOU#(s;q4T5PE)OnxSRQ>yfzG=M9qb>R3a_Bw3y;TP2{n(ZPIheB8fgp<1Locbv$8o~B7TN=F>*`u_3cK<_lqgml7 z&-swj-#cU!OvdC<>oULA{?RvkFveqM)u|gS6DoVtbkxo23Pygv?m!N)+bzGZ{>$5x z(Tv{kzLyuO1|5)Q`}SL(vO>NxmJX)d-kE5LyQ!&>(s(^n5BU6jT>&3tZ4SYpgeaBS^(6UA_UJ|?&8`x?T%;B##EHxuAV zS0K-;x-H!G^0*VyY~F7&SwC7({#1M9{6o6WYmM$fMem59fXj)DjC`wYd@>*EeD8F~ zg*Q1lIn~kI>h@%`4P7%h%-$R+5UA_x>J;goc1#;1!y?hQ_eE zX6EM2UbeOS7IzH`siku@)JK-aSSU&;bj{8^KNi}tb>n*Xvh?bj8iNSaO0i7V@#GZd z?h(V7*w~u}*9&oBz0c!_(MA5c?bxyK&8tLfdmMdST6x?{_e4lZk#*;W(uvFQS;zKG zb#{h$XVp{#wP*9+W@ch3G@1)5cCeJ_Dm&Wh%}Gx1-OR|Uyzcytiya@)`IZk0-@T@X z#a!V(=Qj;mc%{aB`cHXHZxlgUabAsQN=h1vLY-ZtQYnre6+o4+{f@TYpPij`?0ml! z>~OFhgU$209s8XUn+v0U{spP4w^`>pa9Gf2p9_}*BovoXE6PMP6QzP$4+U6lUL*bU(iO;o0o|-wdP{1+hEkT_*`W znFYSXRfDwJ-EG&+OOH)fdYnl=&V8deT}Z35642Rn_3CGCa~AKh!Lxp=O)xi#z2=?@ RW;67^8eU)+r;Z(W@NXwIseJ$d literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/images/5-stars-empty.png b/skin/frontend/base/default/magmodules/kiyoh/images/5-stars-empty.png new file mode 100755 index 0000000000000000000000000000000000000000..a7e5a167adf2787632f38d5a69249b5288ee77cc GIT binary patch literal 4742 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 XbWgtp-2&bE`De&j-yBKNyBhO9;P;MN literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/images/5-stars-full.png b/skin/frontend/base/default/magmodules/kiyoh/images/5-stars-full.png new file mode 100755 index 0000000000000000000000000000000000000000..5d9f2a1c63e6f37322e8dcf51004f3e666c287b0 GIT binary patch literal 7441 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 sXyLub;-HewEc=JY^L022hzp8x;= literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/images/bkg_rating.gif b/skin/frontend/base/default/magmodules/kiyoh/images/bkg_rating.gif new file mode 100755 index 0000000000000000000000000000000000000000..fc62fef48b5bfdb4ca5441b9e0c01618aca29f74 GIT binary patch literal 283 zcmZ?wbhEHb+&(|NsAIzy=h5 zvM@3*NHFMtBtdpMu+C6WOA0obH$&4%;MKkYo%1ER_bb-DuX+FffFP5D3Y*CC6RA75 zSTtQ&QR1~WYJCI~(>75_F7;!|PLX~J{2?^6?SVRTl2g)esXE6cQ7uo;QEN!bOXhEM2yI#mZHy*Q{N)enU7n1CyS! Xt1DxIGRuw*4Mrvoc1C7(MFwjCgm{4E literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/images/greystar.png b/skin/frontend/base/default/magmodules/kiyoh/images/greystar.png new file mode 100755 index 0000000000000000000000000000000000000000..6ed0aa970a59ff5e322cb12188fb62eac3f733fc GIT binary patch literal 1418 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 literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/images/star.png b/skin/frontend/base/default/magmodules/kiyoh/images/star.png new file mode 100755 index 0000000000000000000000000000000000000000..774161435416476a28e1f80d836853ca93107423 GIT binary patch literal 1555 zcmeAS@N?(olHy`uVBq!ia0vp^0zj<5!3HFyJAa%3Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=07?@QuLn2Bde0{8v^KDjP)EVYz|dIVz*yhVSl7_V%D~df&{P2mlz_GsrKDK}xwt{?0`hE?GD=Dctn~HE z%ggo3jrH=2()A53EiLs8jP#9+bb%^#i!1X=5-W7`ij`p|xTF>*7iAWdWaj57fJ{tG z$}cUkRRX#c;)UD-UthSvdBxCx0tT6WMPh-zp`L+$ZZ61QVAaJXL8%C5U{zflQdy9y zACy|0Us{w5jE^*Bm}X$u;kO8+5a=2!m;B_?+|;}hPZwJypom^dW{Q=wxq+Ljxs#Kz znT4sLp{t3brJ1R#nWdwVk%76ng^3$XuV-FyNn&1dDok%CLa!rUy;jaesfi`|MIrh5 zIk4CZ$jC3rFV4s>P;d@5Q_%2DOwP;$321@>7wXp3qRg_?6t|-MTm^9GSY={yfrXK? ztAT;5vxSMP5zzIIHiSbPrE>w;6SKF~4xpr}QPYM2l( z{eYP8gbU=rlYVL*FufN66Slbbnp_43rdCfE$B>F!bEbM{1UrhfrRTj`Z6~m6<+WE% zOEvCBWUSckq7f3^8MI=NLI=Nqu7~;2ppUKHy9CRd`Y-s3?fTI8$jRJ^W&VP%ffssL z7`kp*6p-aK`Aga#b=%^(efK;c9XLLBruFmv>F4GcPp_|yICD*N2+$TGSRWVnO-EEbJi(A#g zRO`(Ly>oRmb}0MhdcQh3<@mOQ35luOoEl}@?uy#8osJ6TSKPE!Mo?mY#H(d`zZ_kZ zJj+>Jgm&(^(N=da$%f^zagps!-|7V}YL^~`N}g0r^LerIjp&Vk6AriOFeUf5Z!XQd zJV!I$p~JrE{yg3Nt?uHy#sxoRp6l>fU6DGnYVEndbAD(~Ot9&{G~My@t?%>Wl)qJ1 zo%|JIGGF}ejJkNAITQXjzI5q2{`jch@2qQ_-|bV17nL7vyU6}4?zQsb?a9ri-xuXx zt?fHprZrnqu3}zA_4B%AoX0qg#5P8(ar??I^Lye{b%U9rv#q82^gkp|@KO89F*{cv zhRO5s-XGzHoXt@Wf&zAaT$f_%)tpzQzq%-I>C+hAMOUW(&Rrjppe(uSnyA3yB!TZ2 z4>oye#Wvht)wd@!{+s{9?F`HeyIU1YNHF{qgKboFyt=akR{00fjz A3jhEB literal 0 HcmV?d00001 diff --git a/skin/frontend/base/default/magmodules/kiyoh/richsnippets.css b/skin/frontend/base/default/magmodules/kiyoh/richsnippets.css new file mode 100755 index 0000000..25287dc --- /dev/null +++ b/skin/frontend/base/default/magmodules/kiyoh/richsnippets.css @@ -0,0 +1,26 @@ +/* + * Magmodules.eu - http://www.magmodules.eu + * + * NOTICE OF LICENSE + * This source file is subject to the Open Software License (OSL 3.0) + * that is bundled with this package in the file LICENSE.txt. + * It is also available through the world-wide-web at this URL: + * http://opensource.org/licenses/osl-3.0.php + * If you did not receive a copy of the license and are unable to + * obtain it through the world-wide-web, please send an email + * to info@magmodules.eu so we can send you a copy immediately. + * + * @category Magmodules + * @package Magmodules_Kiyoh + * @author Magmodules