[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [ocs-webserver] /: update
From:       siyuan dong <null () kde ! org>
Date:       2018-09-12 15:29:57
Message-ID: E1g075Z-0007xU-Ju () code ! kde ! org
[Download RAW message or body]

Git commit e4573ef990165dfbb95f2ee65ef96d7528c3ba66 by siyuan dong.
Committed on 12/09/2018 at 15:29.
Pushed by siyuandong into branch 'master'.

update

M  +11   -2    application/modules/backend/views/scripts/user/index.phtml
M  +8    -12   application/modules/default/controllers/ExploreController.php
M  +1    -1    application/modules/default/controllers/OauthController.php
M  +3    -2    application/modules/default/controllers/PasswordController.php
M  +20   -48   application/modules/default/controllers/ProductController.php
M  +7    -9    application/modules/default/controllers/ProductcommentController.php
M  +16   -3    application/modules/default/controllers/UserController.php
M  +15   -0    application/modules/default/forms/Product.php
M  +13   -9    application/modules/default/forms/Register.php
M  +121  -2    application/modules/default/models/DbTable/ProjectRating.php
M  +23   -2    application/modules/default/models/Member.php
M  +1    -1    application/modules/default/models/OAuth/Github.php
M  +2    -2    application/modules/default/models/OAuth/Ocs.php
M  +218  -49   application/modules/default/models/Ocs/Ident.php
M  +54   -0    application/modules/default/models/Project.php
M  +49   -0    application/modules/default/models/Tags.php
A  +109  -0    application/modules/default/views/helpers/FetchMetaheaderMenuJson.php
A  +36   -0    application/modules/default/views/helpers/IsProjectFeatured.php
A  +36   -0    application/modules/default/views/helpers/IsProjectOriginal.php
M  +1    -1    application/modules/default/views/layout/layout_appimagehub.phtml
M  +3    -1    application/modules/default/views/layout/layout_appimagehub_home.phtml
M  +35   -129  application/modules/default/views/scripts/partials/header/metaheader_react.phtml
M  +24   -12   application/modules/default/views/scripts/product/add.phtml
M  +19   -4    application/modules/default/views/scripts/product/index.phtml
M  +2    -1    application/modules/default/views/scripts/product/partials/productMoreProductsWidgetV1.phtml
 M  +18   -0    application/modules/default/views/scripts/user/aboutme.phtml
M  +1    -1    httpdocs/theme/flatui/css/stylesheet.css
M  +1    -1    httpdocs/theme/flatui/js/script.js
M  +5    -5    httpdocs/theme/flatui/less/stylesheet.less
M  +84   -27   httpdocs/theme/react/all.js
A  +17   -0    httpdocs/theme/react/app-metaheader/_app-helpers.js
A  +281  -0    httpdocs/theme/react/app-metaheader/app.js
M  +22   -1    httpdocs/theme/react/app/__product-helpers.js
M  +7    -3    httpdocs/theme/react/app/_explore.js
M  +54   -23   httpdocs/theme/react/app/_product-page.js
M  +1    -1    httpdocs/theme/react/assets/css/style.css
M  +1    -1    httpdocs/theme/react/assets/css/style.css.map
A  +-    --    httpdocs/theme/react/assets/img/logo-discourse.png
A  +-    --    httpdocs/theme/react/assets/img/logo-gitlab.png
A  +-    --    httpdocs/theme/react/assets/img/logo-opencode.png
A  +-    --    httpdocs/theme/react/assets/img/logo-opendesktop.png
M  +594  -28   httpdocs/theme/react/assets/less/style.less
A  +508  -0    httpdocs/theme/react/metaheader.js

https://commits.kde.org/ocs-webserver/e4573ef990165dfbb95f2ee65ef96d7528c3ba66

diff --git a/application/modules/backend/views/scripts/user/index.phtml \
b/application/modules/backend/views/scripts/user/index.phtml index e79bc599..8192847f 100644
--- a/application/modules/backend/views/scripts/user/index.phtml
+++ b/application/modules/backend/views/scripts/user/index.phtml
@@ -341,8 +341,17 @@
                 data: {'c': elementRecord},
                 url: '/backend/user/export/',
                 type: 'post',
-                error: function () {
-                    alert("<span class='error'>Service is temporarily unavailable. Our engineers are \
working quickly to resolve this issue. <br/>Find out why you may have encountered this error.</span>"); + \
error: function (jqXHR, textStatus, errorThrown) { +                    console.log(jqXHR);
+                    console.log("-------");
+                    console.log(textStatus);
+                    console.log("-------");
+                    console.log(errorThrown);
+                    if (jqXHR.responseText) {
+                        $('#dialog-form').empty().html(jqXHR.responseText).dialog('open');
+                    } else {
+                        alert("<span class='error'>Service is temporarily unavailable. Our engineers are \
working quickly to resolve this issue. <br/>Find out why you may have encountered this error.</span>"); + \
}  return false;
                 },
                 success: function (results) {
diff --git a/application/modules/default/controllers/ExploreController.php \
b/application/modules/default/controllers/ExploreController.php index 1f55e678..0935ecfc 100644
--- a/application/modules/default/controllers/ExploreController.php
+++ b/application/modules/default/controllers/ExploreController.php
@@ -138,17 +138,11 @@ class ExploreController extends Local_Controller_Action_DomainSwitch
         $filter['order'] = preg_replace('/[^-a-zA-Z0-9_]/', '', $this->getParam('ord', \
self::DEFAULT_ORDER));  
         $page = (int)$this->getParam('page', 1);
-        if ($this->hasParam('new') && $this->getParam("new") == 1) {                 
-            $pageLimit = 1000;    
-        }else{
-            $pageLimit = 10;    
-        }
-        
-        $requestedElements = $this->fetchRequestedElements($filter, $pageLimit, ($page - 1) * \
                $pageLimit);        
-       
-        $storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') \
                : null;
-        if($storeConfig->layout_explore && $storeConfig->isRenderReact()){           
                 
+        $storeConfig = Zend_Registry::isRegistered('store_config') ? Zend_Registry::get('store_config') \
: null; +        if($storeConfig->layout_explore && $storeConfig->isRenderReact()){     
+            $pageLimit = 50;         
+            $requestedElements = $this->fetchRequestedElements($filter, $pageLimit, ($page - 1) * \
                $pageLimit);                       
             $this->view->productsJson =Zend_Json::encode($requestedElements['elements']);           
             $this->view->filtersJson = Zend_Json::encode($filter);
             $this->view->cat_idJson = Zend_Json::encode($inputCatId);
@@ -159,8 +153,10 @@ class ExploreController extends Local_Controller_Action_DomainSwitch
             $this->view->commentsJson = Zend_Json::encode($comments);
             $modelCategory = new Default_Model_ProjectCategory();            
             $this->view->categoriesJson = Zend_Json::encode($modelCategory->fetchTreeForView());   
-            $this->_helper->viewRenderer('index-react');              
-          
+            $this->_helper->viewRenderer('index-react');                        
+        }else{
+            $pageLimit = 10;    
+            $requestedElements = $this->fetchRequestedElements($filter, $pageLimit, ($page - 1) * \
$pageLimit);         }
         
         $paginator = Local_Paginator::factory($requestedElements['elements']);
diff --git a/application/modules/default/controllers/OauthController.php \
b/application/modules/default/controllers/OauthController.php index 56b6368b..2a48964f 100644
--- a/application/modules/default/controllers/OauthController.php
+++ b/application/modules/default/controllers/OauthController.php
@@ -126,7 +126,7 @@ class OAuthController extends Zend_Controller_Action
                     //New Github-User was created, now let him set a password
                     $this->redirect('/password/setpassword');
                     
-                    return;
+                    return; 
                     
                 }
                 Zend_Registry::get('logger')->info(__METHOD__ . ' - registration from social provider \
                successful - member_id: '
diff --git a/application/modules/default/controllers/PasswordController.php \
b/application/modules/default/controllers/PasswordController.php index e75e54d6..7cd97af9 100644
--- a/application/modules/default/controllers/PasswordController.php
+++ b/application/modules/default/controllers/PasswordController.php
@@ -250,8 +250,9 @@ class PasswordController extends Local_Controller_Action_DomainSwitch
         $this->_helper->flashMessenger->addMessage('<p class="text-error">Your password is \
changed.</p>');  $this->redirect($this->_helper->url('login', 'authorization'));
     }
-
-    public function setpasswordAction()
+    
+    
+    public function setpasswordAction() 
     {
         $debugMsg = "";
         $this->view->assign('action', '/password/setpassword');
diff --git a/application/modules/default/controllers/ProductController.php \
b/application/modules/default/controllers/ProductController.php index d8429f02..319ba379 100644
--- a/application/modules/default/controllers/ProductController.php
+++ b/application/modules/default/controllers/ProductController.php
@@ -79,54 +79,7 @@ class ProductController extends Local_Controller_Action_DomainSwitch
         $this->_helper->viewRenderer('/partials/pploadajax');
     }
 
-    // public function indexNewAction(){
-    //     // for David react ================ page detail ==============
-    //         if (!empty($this->_collectionId)) {
-    //             $modelProduct = new Default_Model_Project();
-    //             $productInfo = $modelProduct->fetchProductForCollectionId($this->_collectionId);
-    //             $this->_projectId = $productInfo->project_id;
-    //         }
-
-
-    //         if (empty($this->_projectId)) {
-    //             $this->redirect('/explore');
-    //         }
-
-    //         $this->view->paramPageId = (int)$this->getParam('page');
-    //         $this->view->member_id = null;
-    //         if(null != $this->_authMember && null != $this->_authMember->member_id) {
-    //             $this->view->member_id = $this->_authMember->member_id;
-    //         }
-
-    //         $this->initJsonForReact();
-    //         //        $this->fetchDataForIndexView();
-
-    //         $this->view->cat_id = $this->view->product->project_category_id;
-
-    //         //create ppload download hash: secret + collection_id + expire-timestamp
-    //         $salt = PPLOAD_DOWNLOAD_SECRET;
-    //         $collectionID = $this->view->product->ppload_collection_id;
-    //         $timestamp = time() + 3600; // one hour valid
-    //         $hash = md5($salt . $collectionID . $timestamp); // order isn't important at all... just \
                do the same when verifying
-
-    //         $this->view->download_hash = $hash;
-    //         $this->view->download_timestamp = $timestamp;
-
-    //         $helperUserIsOwner = new Default_View_Helper_UserIsOwner();
-    //         $helperIsProjectActive = new Default_View_Helper_IsProjectActive();
-    //         if ((false === \
                $helperIsProjectActive->isProjectActive($this->view->product->project_status))
-    //             AND (false === $helperUserIsOwner->UserIsOwner($this->view->product->member_id))
-    //         ) {
-    //             throw new Zend_Controller_Action_Exception('This page does not exist', 404);
-    //         }
-
-    //         if (APPLICATION_ENV != 'searchbotenv') {
-    //             $tablePageViews = new Default_Model_DbTable_StatPageViews();
-    //             $tablePageViews->savePageView($this->_projectId, $this->getRequest()->getClientIp(),
-    //                 $this->_authMember->member_id);
-    //         }
-
-    // }
+    
 
     public function initJsonForReact(){
             $modelProduct = new Default_Model_Project();
@@ -371,6 +324,9 @@ class ProductController extends Local_Controller_Action_DomainSwitch
             $modelTags->processTagsUser($newProject->project_id, null, \
Default_Model_Tags::TAG_TYPE_PROJECT);  }
 
+        if($values['is_original']){
+                 $modelTags->processTagProductOriginal($newProject->project_id,$values['is_original']);
+        }
 
         //set license, if needed
         $licenseTag = $form->getElement('license_tag_id')->getValue();
@@ -563,6 +519,11 @@ class ProductController extends Local_Controller_Action_DomainSwitch
             }
             $form->getElement('license_tag_id')->setValue($licenseTag);
 
+            $is_original = $modelTags->isProuductOriginal($projectData->project_id);
+            if($is_original){
+                $form->getElement('is_original')->checked= true;                
+            }
+ 
             $this->view->form = $form;
 
             return;
@@ -627,6 +588,9 @@ class ProductController extends Local_Controller_Action_DomainSwitch
         //     $modelTags->processTags($this->_projectId, implode(',',$values['tags']), \
Default_Model_Tags::TAG_TYPE_PROJECT);  // }
 
+        
+        $modelTags->processTagProductOriginal($this->_projectId,$values['is_original']);
+
         if($values['tagsuser']) {
             $modelTags->processTagsUser($this->_projectId,implode(',',$values['tagsuser']), \
Default_Model_Tags::TAG_TYPE_PROJECT);  }else
@@ -1369,6 +1333,14 @@ class ProductController extends Local_Controller_Action_DomainSwitch
         $this->forward('products', 'user', 'default');
     }
 
+   public function loadratingsAction()
+   {
+        $this->_helper->layout->disableLayout();
+        $tableProjectRatings = new Default_Model_DbTable_ProjectRating();            
+        $ratings = $tableProjectRatings->fetchRating($this->_projectId);
+        $this->_helper->json($ratings);
+    }
+
     public function followAction()
     {
         $this->_helper->layout()->disableLayout();
diff --git a/application/modules/default/controllers/ProductcommentController.php \
b/application/modules/default/controllers/ProductcommentController.php index 07ca8e2d..3bc25738 100644
--- a/application/modules/default/controllers/ProductcommentController.php
+++ b/application/modules/default/controllers/ProductcommentController.php
@@ -177,13 +177,11 @@ class ProductcommentController extends Local_Controller_Action_DomainSwitch
             if ($msg != '' && strlen($msg)>0) {
 
                 
-                $data = array();
-                $data['comment_target_id'] = (int)$this->getParam('p');
-                $data['comment_parent_id'] = (int)$this->getParam('i');
-                $data['comment_member_id'] = (int)$this->_authMember->member_id;
-                $data['comment_text'] = Default_Model_HtmlPurify::purify($this->getParam('msg'));
-        
-
+                // $data = array();
+                // $data['comment_target_id'] = (int)$this->getParam('p');
+                // $data['comment_parent_id'] = (int)$this->getParam('i');
+                // $data['comment_member_id'] = (int)$this->_authMember->member_id;
+                // $data['comment_text'] = Default_Model_HtmlPurify::purify($this->getParam('msg'));
              
                 $voteup = (int)$this->getParam('v');
 
@@ -202,13 +200,13 @@ class ProductcommentController extends Local_Controller_Action_DomainSwitch
 
                 if($this->view->product){                    
                     //Send a notification to the owner
-                    $this->sendNotificationToOwner($this->view->product, $data['comment_text']);
+                    $this->sendNotificationToOwner($this->view->product, \
Default_Model_HtmlPurify::purify($this->getParam('msg')));  
                 }
             } 
            
 
-            $this->_helper->json(array('status' => $status, 'message' => $message, 'data' => ''));
+            $this->_helper->json(array('status' => $status, 'message' => $message, 'data' => \
'','laplace_score' =>$this->view->product->laplace_score));  } else {
             $this->_helper->json(array('status' => 'error', 'message' => 'Only registered members with \
an active supporting can vote!', 'data' => ''));  }
diff --git a/application/modules/default/controllers/UserController.php \
b/application/modules/default/controllers/UserController.php index 3ad82aff..fd0976d8 100644
--- a/application/modules/default/controllers/UserController.php
+++ b/application/modules/default/controllers/UserController.php
@@ -91,9 +91,6 @@ class UserController extends Local_Controller_Action_DomainSwitch
 
         $this->view->followedProducts = $tableMember->fetchFollowedProjects($this->_memberId, null);
         $this->view->hits = $tableMember->fetchProjectsSupported($this->_memberId);
-
-
-
         */
         // ajax load more products
         if ($this->getParam('projectpage', null)) {
@@ -120,6 +117,10 @@ class UserController extends Local_Controller_Action_DomainSwitch
             $this->view->userProducts =
                 $tableProject->getUserActiveProjects($this->_memberId, $pageLimit, ($projectpage - 1) * \
$pageLimit);  
+            $this->view->userFeaturedProducts =
+                    $tableProject->fetchAllFeaturedProjectsForMember($this->_memberId);
+
+
             $paginationComments = $tableMember->fetchComments($this->_memberId);
             if ($paginationComments) {
                 $offset = (int)$this->getParam('page');
@@ -159,6 +160,18 @@ class UserController extends Local_Controller_Action_DomainSwitch
 
             $stat = array();
             $stat['cntProducts'] = $total_records;
+            if($this->view->userFeaturedProducts)
+            {                
+                $cnt = 0;
+                foreach ($this->view->userFeaturedProducts as $tmp) {
+                    $cnt++;
+                }
+                $stat['cntFProducts'] = $cnt;
+            }else
+            {
+                $stat['cntFProducts'] = 0;
+            }
+
             $stat['cntComments'] = $paginationComments->getTotalItemCount();
 
             // $cntpv = 0;
diff --git a/application/modules/default/forms/Product.php \
b/application/modules/default/forms/Product.php index 745b8a4a..f3f001d1 100644
--- a/application/modules/default/forms/Product.php
+++ b/application/modules/default/forms/Product.php
@@ -72,6 +72,8 @@ class Default_Form_Product extends Zend_Form
             ->addElement($this->getSubmitElement())
             ->addElement($this->getCancelElement())
             ->addElement($this->getLicenseIdElement())
+            ->addElement($this->getIsOriginal())            
+
             //->addElement($this->getCCAttribution())
             //->addElement($this->getCCComercial())
             //->addElement($this->getCCDerivateWorks())
@@ -576,6 +578,19 @@ class Default_Form_Product extends Zend_Form
         return $this->createElement('checkbox', 'cc_license');
     }
 
+ 
+    private function getIsOriginal()
+    {
+        $element = new Zend_Form_Element_Checkbox('is_original');
+        return $element
+               ->setOptions(array(
+               'label' =>' Product original ',
+               'use_hidden_element' => false,
+               'checked_value' => 1,
+               'unchecked_value' => 0
+               ));       
+    }
+
     private function getTagElement()
     {
         $element = new Zend_Form_Element_Multiselect('tags', array('registerInArrayValidator' => \
                false));
diff --git a/application/modules/default/forms/Register.php \
b/application/modules/default/forms/Register.php index a16ca1ba..fced9fb9 100644
--- a/application/modules/default/forms/Register.php
+++ b/application/modules/default/forms/Register.php
@@ -114,14 +114,6 @@ class Default_Form_Register extends Zend_Form
         $passValid = new Local_Validate_PasswordConfirm($pass2->getValue());
         $pass1->addValidator($passValid, true);
 
-        $this->addPrefixPath('Cgsmith\\Form\\Element', APPLICATION_LIB . '/Cgsmith/Form/Element', \
                Zend_Form::ELEMENT);
-        $this->addElementPrefixPath('Cgsmith\\Validate\\', APPLICATION_LIB . '/Cgsmith/Validate/', \
                Zend_Form_Element::VALIDATE);
-
-        $captcha = $this->createElement('recaptcha', 'g-recaptcha-response', array(
-            'siteKey'   => Zend_Registry::get('config')->recaptcha->sitekey,
-            'secretKey' => Zend_Registry::get('config')->recaptcha->secretkey,
-        ));
-
         $submit = $this->createElement('button', 'login');
         $submit->setLabel('Register');
         $submit->setDecorators(array('ViewHelper'));
@@ -132,9 +124,21 @@ class Default_Form_Register extends Zend_Form
              ->addElement($mail)
              ->addElement($pass1)
              ->addElement($pass2)
-             ->addElement($captcha)
              ->addElement($submit)
         ;
+
+        if (APPLICATION_ENV == 'development') {
+            return;
+        }
+
+        $this->addPrefixPath('Cgsmith\\Form\\Element', APPLICATION_LIB . '/Cgsmith/Form/Element', \
Zend_Form::ELEMENT); +        $this->addElementPrefixPath('Cgsmith\\Validate\\', APPLICATION_LIB . \
'/Cgsmith/Validate/', Zend_Form_Element::VALIDATE); +        $captcha = $this->createElement('recaptcha', \
'g-recaptcha-response', array( +            'siteKey'   => \
Zend_Registry::get('config')->recaptcha->sitekey, +            'secretKey' => \
Zend_Registry::get('config')->recaptcha->secretkey, +        ));
+
+        $this->addElement($captcha);
     }
 
 }
\ No newline at end of file
diff --git a/application/modules/default/models/DbTable/ProjectRating.php \
b/application/modules/default/models/DbTable/ProjectRating.php index 4471fc8c..96fc145a 100644
--- a/application/modules/default/models/DbTable/ProjectRating.php
+++ b/application/modules/default/models/DbTable/ProjectRating.php
@@ -28,7 +28,7 @@ class Default_Model_DbTable_ProjectRating extends Local_Model_Table
     protected $_keyColumnsForRow = array('rating_id');
 
     protected $_key = 'rating_id';
-
+  
 
     /**
      * @param int $project_id
@@ -104,6 +104,124 @@ class Default_Model_DbTable_ProjectRating extends Local_Model_Table
 
         return $result;
     }
+    
+      /**
+     * @param int      $projectId
+     * @param int      $member_id
+     * @param int      $userRating
+     * @param int|null $msg comment    
+     */
+    public function rateForProject($projectId, $member_id, $userRating, $msg )
+    {        
+        $userLikeIt = $userRating == 1 ? 1 : 0;
+        $userDislikeIt = $userRating == 2 ? 1 : 0;        
+        $sql = 'select rating_id,comment_id from project_rating where project_id='.$projectId.'  and \
rating_active=1 and user_like='.$userLikeIt.' and user_dislike='.$userDislikeIt.' and \
member_id='.$member_id;       +        $result = $this->getAdapter()->fetchRow($sql);              
+        $is_upvote=$userRating == 1 ? true : false;
+        $is_exist = (($result!=null) && ($result['rating_id']!=null))?true:false;
+        $modelComments = new Default_Model_ProjectComments();
+    
+        // Zend_Registry::get('logger')->info($msg);
+        if($is_exist){
+            // this do cancel old rating .  remove rating & deactive 
+            $rating_id = $result['rating_id'];
+            $comment_id = $result['comment_id'];                                              
+            $this->update(array('rating_active' => 0), 'rating_id=' . $rating_id);                   
+            $modelComments->deactiveComment($comment_id);   
+            if($is_upvote){
+               $this->rateUpdateProject($projectId,1);
+            }else{
+                $this->rateUpdateProject($projectId,2);
+            }
+        }else{            
+            // this do first rating or change from - to + or + to -
+            // first comment
+            $data = array();
+            $data['comment_target_id'] =$projectId;               
+            $data['comment_member_id'] =$member_id;
+            $data['comment_parent_id'] = 0;
+            $data['comment_text'] = $msg;
+            $tableReplies = new Default_Model_ProjectComments();
+            $result = $tableReplies->save($data);
+            $comment_id =  $result->comment_id;
+
+            // get old rating
+            $sql = 'select rating_id,comment_id,user_like from project_rating where \
project_id='.$projectId.'  and rating_active=1 and member_id='.$member_id; +            $result = \
$this->getAdapter()->fetchRow($sql);             +            if($result!=null && \
$result['rating_id']!=null){ +                 $this->update(array('rating_active' => 0), 'rating_id=' . \
$result['rating_id']); +                $modelComments->deactiveComment($result['comment_id']);   
+            }
+
+            $this->save(array(
+                'project_id'    => $projectId,
+                'member_id'     => $member_id,
+                'user_like'     => $userLikeIt,
+                'user_dislike'  => $userDislikeIt,
+                'rating_active' => 1,
+                'comment_id'    => $comment_id
+            ));    
+
+            // deal with project table ratings
+            if(($result!=null) && ($result['rating_id']!=null)){                
+                if($is_upvote){
+                      $this->rateUpdateProject($projectId,5);
+                }else{
+                     $this->rateUpdateProject($projectId,6);
+                }                 
+            }else{
+                // first time rating
+                if($is_upvote){
+                   $this->rateUpdateProject($projectId,3);
+                }else{
+                    $this->rateUpdateProject($projectId,4);
+                }
+            }
+            
+        }
+
+       
+    }
+
+    private function rateUpdateProject($projectId,$action)
+    {
+        // $action ==1 => $project->count_likes - 1
+        // $action ==2 => $project->count_dislikes - 1
+        // $action ==3 => $project->count_likes + 1
+        // $action ==4 => $project->count_dislikes + 1
+        // $action ==5 => $project->count_likes+1 and $project->count_dislikes - 1
+        // $action ==6 => $project->count_likes-1 and $project->count_dislikes +1
+         $projectTable = new Default_Model_Project();
+         $project = $projectTable->fetchProductInfo($projectId);
+         if($action==1)
+         {
+            $numLikes = (int)$project->count_likes - 1;   
+            $updatearray = array('count_likes' => $numLikes);
+         }else if($action==2)
+         {
+            $numLikes = (int)$project->count_dislikes - 1;   
+            $updatearray = array('count_dislikes' => $numLikes);
+         }else if($action==3)
+         {
+            $numLikes = (int)$project->count_likes +1;   
+            $updatearray = array('count_likes' => $numLikes);
+         }else if($action==4)
+         {
+            $numLikes = (int)$project->count_dislikes +1;   
+            $updatearray = array('count_dislikes' => $numLikes);
+         }else if($action==5)
+         {
+            $numdisLikes = (int)$project->count_dislikes -1;   
+            $numLikes = (int)$project->count_likes +1;   
+            $updatearray = array('count_dislikes' => $numdisLikes,'count_likes' => $numLikes);
+         }else if($action==6)
+         {
+            $numdisLikes = (int)$project->count_dislikes +1;   
+            $numLikes = (int)$project->count_likes -1;   
+            $updatearray = array('count_dislikes' => $numdisLikes,'count_likes' => $numLikes);
+         }                  
+         $projectTable->update($updatearray, 'project_id = ' . $projectId);
+    }
 
     /**
      * @param int      $projectId
@@ -111,8 +229,9 @@ class Default_Model_DbTable_ProjectRating extends Local_Model_Table
      * @param int      $userRating
      * @param int|null $msg comment
      * @TODO: revise this, double check against specification. the source code seems to be too \
complicated. +        @note: replaced by above code
      */
-    public function rateForProject($projectId, $member_id, $userRating, $msg )
+    public function rateForProject_($projectId, $member_id, $userRating, $msg )
     {
 
         $userLikeIt = $userRating == 1 ? 1 : 0;
diff --git a/application/modules/default/models/Member.php \
b/application/modules/default/models/Member.php index 98dd9c47..78950eae 100644
--- a/application/modules/default/models/Member.php
+++ b/application/modules/default/models/Member.php
@@ -286,7 +286,7 @@ class Default_Model_Member extends Default_Model_DbTable_Member
         }
 
         $sql = '
-                SELECT m.*, `member_email`.`email_address` AS `mail`, \
IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked`, `mei`.`external_id` +                \
SELECT m.*, `member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS \
`mail_checked`, `member_email`.`email_address`, `mei`.`external_id`  FROM `member` AS `m`
                 JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND \
                `member_email`.`email_primary` = 1
                 LEFT JOIN `member_external_id` AS `mei` ON `mei`.`member_id` = `m`.`member_id`
@@ -319,9 +319,10 @@ class Default_Model_Member extends Default_Model_DbTable_Member
         }
 
         $sql = "
-                SELECT `m`.*, `member_email`.`email_address` AS `mail`, \
IF(ISNULL(`member_email`.`email_checked`),0,1) AS `mail_checked` +                SELECT `m`.*, \
`member_email`.`email_address` AS `mail`, IF(ISNULL(`member_email`.`email_checked`),0,1) AS \
`mail_checked`, `member_email`.`email_address`, `mei`.`external_id`  FROM `member` AS `m`
                 JOIN `member_email` ON `m`.`member_id` = `member_email`.`email_member_id` AND \
`member_email`.`email_primary` = 1 +                LEFT JOIN `member_external_id` AS `mei` ON \
`mei`.`member_id` = `m`.`member_id`  WHERE `m`.`member_id` = :memberId";
 
         if ($onlyActive) {
@@ -1019,6 +1020,26 @@ class Default_Model_Member extends Default_Model_DbTable_Member
         return $login . '_' . $result['counter'];
     }
 
+    /**
+     * @param int $member_id
+     * @param string $email
+     *
+     * @return bool
+     * @throws Zend_Db_Statement_Exception
+     */
+    public function setActive($member_id, $email)
+    {
+        $sql = "
+            UPDATE `member`
+              STRAIGHT_JOIN `member_email` ON `member`.`member_id` = `member_email`.`email_member_id` \
AND `member_email`.`email_checked` IS NULL AND `member`.`is_deleted` = 0 AND \
`member_email`.`email_deleted` = 0 +            SET `member`.`mail_checked` = 1, `member`.`is_active` = \
1, `member`.`changed_at` = NOW(), `member_email`.`email_checked` = NOW() +            WHERE \
`member`.`member_id` = :memberId AND `member_email`.`email_address` = :mailAddress; +        ";
+        $stmnt = $this->_db->query($sql, array('memberId' => $member_id, 'mailAddress' => $email));
+
+        return $stmnt->rowCount() > 0 ? true : false;
+    }
+
     /**
      * @param int $member_id
      *
diff --git a/application/modules/default/models/OAuth/Github.php \
b/application/modules/default/models/OAuth/Github.php index 386f6642..7d149df5 100644
--- a/application/modules/default/models/OAuth/Github.php
+++ b/application/modules/default/models/OAuth/Github.php
@@ -498,7 +498,7 @@ class Default_Model_OAuth_Github implements Default_Model_OAuth_Interface
      */
     public function registerLocal()
     {
-        $userInfo = $this->getUserInfo();
+        $userInfo = $this->getUserInfo(); 
         $usermail = $this->getUserEmail();
         $userInfo['email'] = $usermail['email'];
         $userInfo['verified'] = $usermail['verified'] ? 1 : 0;
diff --git a/application/modules/default/models/OAuth/Ocs.php \
b/application/modules/default/models/OAuth/Ocs.php index d73a1bf9..612121d1 100644
--- a/application/modules/default/models/OAuth/Ocs.php
+++ b/application/modules/default/models/OAuth/Ocs.php
@@ -34,7 +34,7 @@ class Default_Model_OAuth_Ocs implements Default_Model_OAuth_Interface
     protected $config;
     /** @var Zend_Session_Namespace $session */
     protected $session;
-    /** @var  Zend_Db_Table_Row_Abstract */
+    /** @var  array */
     protected $memberData;
     /** @var  string */
     protected $access_token;
@@ -405,7 +405,7 @@ class Default_Model_OAuth_Ocs implements Default_Model_OAuth_Interface
             'mail'    => $userEmail
         ));
         Zend_Registry::get('logger')->info(__METHOD__ . ' - ResultSet: ' . print_r($resultSet, true));
-        Zend_Registry::get('logger')->info(__METHOD__ . ' - sql take seconds: ' . \
$this->_db->getProfiler()->getLastQueryProfile() +        Zend_Registry::get('logger')->info(__METHOD__ . \
                ' - seconds: ' . $this->_db->getProfiler()->getLastQueryProfile()
                                                                                             \
->getElapsedSecs())  ;
         $this->_db->getProfiler()->setEnabled(false);
diff --git a/application/modules/default/models/Ocs/Ident.php \
b/application/modules/default/models/Ocs/Ident.php index ce16e8d5..f87203ec 100644
--- a/application/modules/default/models/Ocs/Ident.php
+++ b/application/modules/default/models/Ocs/Ident.php
@@ -51,6 +51,7 @@ class Default_Model_Ocs_Ident
     /**
      * @param int $member_id
      *
+     * @return bool
      * @throws Zend_Exception
      * @throws Zend_Ldap_Exception
      */
@@ -58,13 +59,32 @@ class Default_Model_Ocs_Ident
     {
         $connection = $this->getServerConnection();
         $member_data = $this->getMemberData($member_id);
-        $username = strtolower($member_data['username']);
-        $entry = $this->getEntry($member_data, $connection);
+
+        try {
+            $entry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
+
+            return false;
+        }
+        if (empty($entry)) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ldap entry for member does not exists. \
Going to create it.'); +
+            return false;
+        }
+
         $oldUidAttribute = Zend_Ldap_Attribute::getAttribute($entry, 'email');
-        Zend_Ldap_Attribute::removeFromAttribute($entry, 'uid', $oldUidAttribute[0]);
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'uid', $oldUidAttribute);
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'email', $oldUidAttribute);
         Zend_Ldap_Attribute::setAttribute($entry, 'email', $member_data['email_address']);
         Zend_Ldap_Attribute::setAttribute($entry, 'uid', $member_data['email_address'], true);
-        $connection->update("cn={$username},{$this->baseDn}", $entry);
+        $dn = $entry['dn'];
+        $connection->update($dn, $entry);
+        $connection->getLastError($this->errCode, $this->errMessages);
+
+        return true;
     }
 
     /**
@@ -113,6 +133,35 @@ class Default_Model_Ocs_Ident
         return $result;
     }
 
+    /**
+     * @param array     $member_data
+     *
+     * @param Zend_Ldap $ldap
+     *
+     * @return array
+     * @throws Default_Model_Ocs_Exception
+     * @throws Zend_Ldap_Exception
+     */
+    public function getEntry($member_data, $ldap)
+    {
+        if (empty($member_data)) {
+            throw new Default_Model_Ocs_Exception('given member_data empty');
+        }
+
+        $filter = "(uidNumber={$member_data['member_id']})";
+        $entries = $ldap->searchEntries($filter, $this->baseDn);
+
+        if (count($entries) > 1) {
+            throw new Default_Model_Ocs_Exception('found member_id more than once. member_id: ' . \
$member_data['member_id']); +        }
+
+        if (count($entries) == 1) {
+            return $entries[0];
+        }
+
+        return array();
+    }
+
     /**
      * @param array     $member_data
      * @param Zend_Ldap $ldap
@@ -120,7 +169,7 @@ class Default_Model_Ocs_Ident
      * @return mixed
      * @throws Zend_Ldap_Exception
      */
-    private function getEntry($member_data, $ldap)
+    public function getEntryByDN($member_data, $ldap)
     {
         $username = strtolower($member_data['username']);
         $entry = $ldap->getEntry("cn={$username},{$this->baseDn}");
@@ -131,6 +180,7 @@ class Default_Model_Ocs_Ident
     /**
      * @param int $member_id
      *
+     * @return bool
      * @throws Zend_Exception
      * @throws Zend_Ldap_Exception
      */
@@ -138,26 +188,73 @@ class Default_Model_Ocs_Ident
     {
         $connection = $this->getServerConnection();
         $member_data = $this->getMemberData($member_id);
-        $entry = $this->getEntry($member_data, $connection);
+        try {
+            $entry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
+
+            return false;
+        }
+
         if (empty($entry)) {
-            Zend_Registry::get('logger')->info(__METHOD__ . ' - ldap entry for member does not exists. \
                Going to create it.');
-            $this->createUser($member_id);
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ldap entry for member does not exists. \
member_id:' . $member_id);  
-            return;
+            return false;
         }
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'userPassword', \
                Zend_Ldap_Attribute::getAttribute($entry, 'userPassword'));
         $password = '{MD5}' . base64_encode(pack("H*", $member_data['password']));
         Zend_Ldap_Attribute::setAttribute($entry, 'userPassword', $password);
-        //Zend_Ldap_Attribute::setPassword($entry,
-        //        'newPa$$w0rd',
-        //        Zend_Ldap_Attribute::PASSWORD_HASH_MD5);
-        $username = strtolower($member_data['username']);
-        $connection->update("cn={$username},{$this->baseDn}", $entry);
+
+        $connection->update($entry['dn'], $entry);
+        $connection->getLastError($this->errCode, $this->errMessages);
+
+        return true;
+    }
+
+    /**
+     * @param int $member_id
+     *
+     * @return bool
+     * @throws Zend_Exception
+     * @throws Zend_Ldap_Exception
+     */
+    public function updateUser($member_id)
+    {
+        $connection = $this->getServerConnection();
+        $member_data = $this->getMemberData($member_id);
+        try {
+            $oldEntry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
+
+            return false;
+        }
+        if (empty($oldEntry)) {
+            $this->errMessages[] = "user missing. Going to create one.";
+            Zend_Registry::get('logger')->info(__METHOD__ . ' - ldap entry for member does not exists. \
Going to create it.'); +
+            return $this->createUser($member_id);
+        }
+        if (strtolower($member_data['username']) != Zend_Ldap_Attribute::getAttribute($oldEntry, 'cn')) \
{ +            $this->errMessages[] = "Fail. username changed. user should be deleted first and than user \
create."; +
+            return false;
+        }
+
+        $entry = $this->updateIdentEntry($member_data, $oldEntry);
+        $connection->update($oldEntry['dn'], $entry);
         $connection->getLastError($this->errCode, $this->errMessages);
+
+        return true;
     }
 
     /**
      * @param int $member_id
      *
+     * @return bool
      * @throws Zend_Ldap_Exception
      * @throws Zend_Exception
      */
@@ -167,13 +264,27 @@ class Default_Model_Ocs_Ident
         $member_data = $this->getMemberData($member_id);
 
         //Only create, if user do not exisits
-        $entry = $this->getEntry($member_data, $connection);
-        if (empty($entry)) {
-            $entry = $this->createIdentEntry($member_data);
-            $username = strtolower($member_data['username']);
-            $connection->add("cn={$username},{$this->baseDn}", $entry);
-            $connection->getLastError($this->errCode, $this->errMessages);
+        try {
+            $entry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
+
+            return false;
         }
+        if (false === empty($entry)) {
+            $this->errMessages[] = "user already exists.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ldap entry for member does not exists. \
Going to create it.'); +
+            return false;
+        }
+
+        $entry = $this->createIdentEntry($member_data);
+        $username = strtolower($member_data['username']);
+        $connection->add("cn={$username},{$this->baseDn}", $entry);
+        $connection->getLastError($this->errCode, $this->errMessages);
+
+        return true;
     }
 
     /**
@@ -208,25 +319,44 @@ class Default_Model_Ocs_Ident
         return $entry;
     }
 
-    /**
-     * @param int $member_id
-     *
-     * @return bool
-     * @throws Zend_Exception
-     * @throws Zend_Ldap_Exception
-     */
-    public function updateUser($member_id)
+    private function updateIdentEntry($member_data, $oldEntry)
     {
-        $connection = $this->getServerConnection();
-        $member_data = $this->getMemberData($member_id);
-        $username = strtolower($member_data['username']);
-        if (false === $connection->exists("cn={$username},{$this->baseDn}")) {
-            $connection->getLastError($this->errCode, $this->errMessages);
-            return false;
+        $entry = $oldEntry;
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'uidNumber', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'uidNumber')); +        \
Zend_Ldap_Attribute::setAttribute($entry, 'uidNumber', $member_data['member_id']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'memberUid', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'memberUid')); +        \
Zend_Ldap_Attribute::setAttribute($entry, 'memberUid', $member_data['external_id']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'gidNumber', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'gidNumber')); +        \
Zend_Ldap_Attribute::setAttribute($entry, 'gidNumber', $member_data['role_id']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'email', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'email')); +        \
Zend_Ldap_Attribute::setAttribute($entry, 'email', $member_data['email_address']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'cn', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'cn')); +        Zend_Ldap_Attribute::setAttribute($entry, \
'cn', $member_data['username']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'uid', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'uid')); +        Zend_Ldap_Attribute::setAttribute($entry, \
'uid', $member_data['username']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'uid', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'uid')); +        Zend_Ldap_Attribute::setAttribute($entry, \
'uid', $member_data['email']); +
+        Zend_Ldap_Attribute::removeFromAttribute($entry, 'userPassword', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'userPassword')); +        $password = '{MD5}' . \
base64_encode(pack("H*", $member_data['password'])); +        Zend_Ldap_Attribute::setAttribute($entry, \
'userPassword', $password); +
+        if (false === empty(trim($member_data['firstname']))) {
+            Zend_Ldap_Attribute::removeFromAttribute($entry, 'gn', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'gn')); +            \
Zend_Ldap_Attribute::setAttribute($entry, 'gn', $member_data['firstname']);  }
-        $entry = $this->createIdentEntry($member_data);
-        $connection->update("cn={$username},{$this->baseDn}", $entry);
-        $connection->getLastError($this->errCode, $this->errMessages);
+        if (false === empty(trim($member_data['lastname']))) {
+            Zend_Ldap_Attribute::removeFromAttribute($entry, 'sn', \
Zend_Ldap_Attribute::getAttribute($oldEntry, 'sn')); +            \
Zend_Ldap_Attribute::setAttribute($entry, 'sn', $member_data['lastname']); +        }
+
+        return $entry;
     }
 
     /**
@@ -243,13 +373,15 @@ class Default_Model_Ocs_Ident
         }
         $connection = $this->getServerConnection();
         $member_data = $this->getMemberData($member_id, false);
-        $username = strtolower($member_data['username']);
-        if (false === $connection->exists("cn={$username},{$this->baseDn}")) {
-            $connection->getLastError($this->errCode, $this->errMessages);
+        try {
+            $entry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
 
             return false;
         }
-        $connection->delete("cn={$username},{$this->baseDn}");
+        $connection->delete($entry['dn']);
         $connection->getLastError($this->errCode, $this->errMessages);
 
         return true;
@@ -282,6 +414,7 @@ class Default_Model_Ocs_Ident
      *
      * @return array
      * @throws Zend_Ldap_Exception
+     * @throws Default_Model_Ocs_Exception
      */
     public function createUserInLdap($member_data)
     {
@@ -289,35 +422,71 @@ class Default_Model_Ocs_Ident
         $connection = $this->getServerConnection();
         $username = strtolower($member_data['username']);
         $dn = "cn={$username},{$this->baseDn}";
-        if ($connection->exists($dn)) {
+        if ($this->userExists($member_data['member_id'])) {
             $connection->getLastError($this->errCode, $this->errMessages);
+            if (empty($this->errCode)) {
+                $this->errCode = 999;
+                $this->errMessages[] = "user already exists.";
+            }
 
             return array();
         }
+
         $connection->add($dn, $entry);
         $connection->getLastError($this->errCode, $this->errMessages);
 
         return $entry;
     }
 
+    /**
+     * @param int $member_id
+     *
+     * @return mixed
+     * @throws Default_Model_Ocs_Exception
+     * @throws Zend_Ldap_Exception
+     */
+    public function userExists($member_id)
+    {
+        if (empty($member_id)) {
+            throw new Default_Model_Ocs_Exception('given $member_id empty');
+        }
+
+        $ldap = $this->getServerConnection();
+        $filter = "(uidNumber={$member_id})";
+        $entries = $ldap->searchEntries($filter, $this->baseDn);
+
+        if (count($entries) > 1) {
+            throw new Default_Model_Ocs_Exception('found member_id more than once');
+        }
+
+        if (count($entries) == 1) {
+            return true;
+        }
+
+        return false;
+    }
+
     /**
      * @param array $member_data
      *
      * @return array
+     * @throws Zend_Exception
      * @throws Zend_Ldap_Exception
      */
     public function updateUserInLdap($member_data)
     {
-        $entry = $this->createIdentEntry($member_data);
+        $newEntry = $this->createIdentEntry($member_data);
         $connection = $this->getServerConnection();
-        $username = strtolower($member_data['username']);
-        $dn = "cn={$username},{$this->baseDn}";
-        if (false == $connection->exists($dn)) {
-            $connection->getLastError($this->errCode, $this->errMessages);
+        try {
+            $entry = $this->getEntry($member_data, $connection);
+        } catch (Exception $e) {
+            $this->errMessages[] = "Failed.";
+            Zend_Registry::get('logger')->err(__METHOD__ . ' - ' . $e->getMessage());
 
-            return array();
+            return false;
         }
-        $connection->update($dn, $entry);
+        $dn = $entry['dn'];
+        $connection->update($dn, $newEntry);
         $connection->getLastError($this->errCode, $this->errMessages);
 
         return $entry;
diff --git a/application/modules/default/models/Project.php \
b/application/modules/default/models/Project.php index 47ef3c03..a030fd0b 100644
--- a/application/modules/default/models/Project.php
+++ b/application/modules/default/models/Project.php
@@ -249,6 +249,8 @@ class Default_Model_Project extends Default_Model_DbTable_Project
         return $this->generateRowSet($q->query()->fetchAll());
     }
 
+  
+
     /**
      * @param array $data
      *
@@ -928,6 +930,17 @@ class Default_Model_Project extends Default_Model_DbTable_Project
         return (int)$result['count_active_members'];
     }
 
+    public function isProjectFeatured($project_id)
+    {
+            $sql_object= "SELECT project_id FROM project where project_id= :project_id and  status = 100 \
and type_id = 1 and featured = 1"; +            $r = $this->getAdapter()->fetchRow($sql_object, \
array('project_id' => $project_id)); +             if($r){
+                return true;
+            }else
+            {
+                return false;
+            }
+    }
     /**
      * @return mixed
      */
@@ -1448,6 +1461,47 @@ class Default_Model_Project extends Default_Model_DbTable_Project
         }
     }
 
+    public function fetchAllFeaturedProjectsForMember($member_id, $limit = null, $offset = null)
+    {
+           // for member me page
+          $sql = "
+                          SELECT
+                          p.project_id,
+                          p.title,
+                          p.created_at  as project_created_at,
+                          p.changed_at as project_changed_at,
+                          p.count_likes,
+                          p.count_dislikes,
+                          p.laplace_score,
+                          p.member_id,
+                          p.cat_title as catTitle,
+                          p.image_small,
+                          (select count(1) from project_plings l where p.project_id = l.project_id and \
l.is_deleted = 0 and l.is_active = 1 ) countplings +                          FROM stat_projects p
+                          where p.status =100
+                          and featured = 1
+                          and p.member_id = :member_id        
+                          order by p.changed_at DESC
+          ";
+
+          if (isset($limit)) {
+              $sql = $sql.' limit '.$limit;            
+          }
+
+          if (isset($offset)) {
+              $sql = $sql.' offset '.$offset;            
+          }
+        
+          $result = $this->_db->fetchAll($sql, array('member_id' => $member_id));
+            if ($result) {
+              return $this->generateRowClass($result);
+          } else {
+              return null;
+          }
+    }
+
+
+
     
 
 }
\ No newline at end of file
diff --git a/application/modules/default/models/Tags.php b/application/modules/default/models/Tags.php
index c2a743cf..93de603c 100644
--- a/application/modules/default/models/Tags.php
+++ b/application/modules/default/models/Tags.php
@@ -36,6 +36,9 @@ class Default_Model_Tags
     const TAG_ARCHITECTURE_GROUPID = 9;
     const TAG_GHNS_EXCLUDED_GROUPID = 10;
 
+    const TAG_PRODUCT_ORIGINAL_GROUPID = 11;
+    const TAG_PRODUCT_ORIGINAL_ID = 2451;
+
     /**
      * Default_Model_Tags constructor.
      */
@@ -393,6 +396,52 @@ class Default_Model_Tags
         $this->deassignTagsUser($object_id, $tags, $tag_type);
     }
 
+    public function isProuductOriginal($project_id)
+    {
+            $sql_object= "select tag_item_id  from tag_object WHERE tag_id = :tag_id and \
tag_object_id=:tag_object_id and tag_group_id=:tag_group_id   +                                    and \
tag_type_id = :tag_type_id and is_deleted = 0"; +            $r = \
$this->getAdapter()->fetchRow($sql_object, array('tag_id' => self::TAG_PRODUCT_ORIGINAL_ID,  +            \
'tag_object_id' =>$project_id,  +                                                                         \
'tag_group_id' => self::TAG_PRODUCT_ORIGINAL_GROUPID,  +                                                  \
'tag_type_id' => self::TAG_TYPE_PROJECT  +                                                                \
)); +            if($r){
+                return true;
+            }else
+            {
+                return false;
+            }
+    }
+
+    /**
+        * @param int    $object_id
+        * @param string $value        
+        */
+       public function processTagProductOriginal($object_id, $is_original)
+       {
+            $sql_object= "select tag_item_id  from tag_object WHERE tag_id = :tag_id and \
tag_object_id=:tag_object_id and tag_group_id=:tag_group_id   +                                    and \
tag_type_id = :tag_type_id and is_deleted = 0"; +            $r = \
$this->getAdapter()->fetchRow($sql_object, array('tag_id' => self::TAG_PRODUCT_ORIGINAL_ID,  +            \
'tag_object_id' =>$object_id,  +                                                                          \
'tag_group_id' => self::TAG_PRODUCT_ORIGINAL_GROUPID,  +                                                  \
'tag_type_id' => self::TAG_TYPE_PROJECT  +                                                                \
)); +           
+           if($is_original=='1')
+           {            
+                if(!$r){
+                    $sql = "INSERT IGNORE INTO tag_object (tag_id, tag_type_id, tag_object_id, \
tag_group_id) VALUES (:tag_id, :tag_type_id, :tag_object_id, :tag_group_id)"; +                    \
$this->getAdapter()->query($sql, array('tag_id' =>  self::TAG_PRODUCT_ORIGINAL_ID, 'tag_type_id' => \
self::TAG_TYPE_PROJECT , 'tag_object_id' => $object_id, 'tag_group_id' => \
self::TAG_PRODUCT_ORIGINAL_GROUPID));                     +                }
+           }else{
+
+                if($r){
+                        $sql = "UPDATE tag_object set tag_changed = NOW() , is_deleted = 1  WHERE \
tag_item_id = :tagItemId"; +                        $this->getAdapter()->query($sql, array('tagItemId' => \
$r['tag_item_id'])); +                }
+           }
+           
+       }
 
     /**
      * @param int    $object_id
diff --git a/application/modules/default/views/helpers/FetchMetaheaderMenuJson.php \
b/application/modules/default/views/helpers/FetchMetaheaderMenuJson.php new file mode 100755
index 00000000..5f3b8c55
--- /dev/null
+++ b/application/modules/default/views/helpers/FetchMetaheaderMenuJson.php
@@ -0,0 +1,109 @@
+<?php
+/**
+ *  ocs-webserver
+ *
+ *  Copyright 2016 by pling GmbH.
+ *
+ *    This file is part of ocs-webserver.
+ *
+ *    This program is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Affero General Public License as
+ *    published by the Free Software Foundation, either version 3 of the
+ *    License, or (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Affero General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Affero General Public License
+ *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+class Default_View_Helper_FetchMetaheaderMenuJson extends Zend_View_Helper_Abstract
+{
+   
+    public function fetchMetaheaderMenuJson()
+    {        
+
+       $sname = Zend_Registry::get('store_host');
+        /** @var Zend_Cache_Core $cache */
+        $cache = Zend_Registry::get('cache');        
+        $cacheName = __FUNCTION__ . md5($sname);       
+
+        if (false == ($domainobjects = $cache->load($cacheName))) {
+            $tbl = new Default_Model_DbTable_ConfigStore();
+            $result = $tbl->fetchDomainObjects();
+                // sort Desktop manuelly to the front
+            $arrayDesktop = array();
+            $arrayRest =  array();  
+           
+            foreach ($result as $obj) {
+                $o =  $obj['order'];   
+                $curOrder = floor($obj['order']/1000);      
+                if($curOrder<10 or $curOrder>50) continue;
+                $obj['calcOrder'] = $curOrder;              
+
+                $tmp = array();
+                $tmp['order'] = $obj['order'];
+                $tmp['calcOrder'] = $obj['calcOrder'];
+                $tmp['host'] = $obj['host'];
+                $tmp['name'] = $obj['name'];                
+
+                if($curOrder==30) {
+                    // Desktop set calcOrder = 9 manuelly put desktop in front                    
+                    $tmp['calcOrder'] = 9;
+                    $arrayDesktop[] = $tmp;    
+                }else{
+                    $arrayRest[] = $tmp;    
+                }                        
+            }
+            $domainobjects = array_merge($arrayDesktop, $arrayRest);
+
+            
+            $baseurl = Zend_Registry::get('config')->settings->client->default->baseurl;
+            // set group name manully
+            foreach ($domainobjects as &$obj) {
+
+                    if($sname == $obj['host']){
+                        $obj['menuactive'] = 1;
+                    }else{
+                        $obj['menuactive'] = 0;
+                    }
+
+                    $order =  $obj['order'];
+                     // z.b 150001 ende ==1 go real link otherwise /s/$name
+                    $last_char_check = substr($order, -1);
+                    if($last_char_check=='1')
+                    {
+                        $obj['menuhref'] = $obj['host'];
+                    }else{
+                        $obj['menuhref'] = $baseurl.'/s/'.$obj['name'];
+                    }
+
+                    switch ($obj['calcOrder']) {
+                        case 9:
+                            $obj['menugroup']='Desktops';
+                            break;
+                        case 10:
+                            $obj['menugroup']='Applications';
+                            break;
+                        case 20:
+                            $obj['menugroup']='Addons';
+                            break;
+                        case 40:
+                            $obj['menugroup']='Artwork';
+                            break;                       
+                        case 50:
+                        $obj['menugroup']='Other';
+                        break;
+                    }
+                         
+            }
+
+            $cache->save($domainobjects, $cacheName, array(), 28800);
+        }
+        return  Zend_Json::encode($domainobjects);
+    }
+
+}
\ No newline at end of file
diff --git a/application/modules/default/views/helpers/IsProjectFeatured.php \
b/application/modules/default/views/helpers/IsProjectFeatured.php new file mode 100755
index 00000000..e6fe6e07
--- /dev/null
+++ b/application/modules/default/views/helpers/IsProjectFeatured.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ *  ocs-webserver
+ *
+ *  Copyright 2016 by pling GmbH.
+ *
+ *    This file is part of ocs-webserver.
+ *
+ *    This program is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Affero General Public License as
+ *    published by the Free Software Foundation, either version 3 of the
+ *    License, or (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Affero General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Affero General Public License
+ *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+class Default_View_Helper_IsProjectFeatured extends Zend_View_Helper_Abstract
+{
+
+    /**
+     * @param int $project_id
+     * @return bool
+     */
+    public function isProjectFeatured($project_id)
+    {      
+            $tableProject = new Default_Model_Project();
+            return $tableProject->isProjectFeatured($project_id);
+    }
+
+} 
\ No newline at end of file
diff --git a/application/modules/default/views/helpers/IsProjectOriginal.php \
b/application/modules/default/views/helpers/IsProjectOriginal.php new file mode 100755
index 00000000..859afd26
--- /dev/null
+++ b/application/modules/default/views/helpers/IsProjectOriginal.php
@@ -0,0 +1,36 @@
+<?php
+/**
+ *  ocs-webserver
+ *
+ *  Copyright 2016 by pling GmbH.
+ *
+ *    This file is part of ocs-webserver.
+ *
+ *    This program is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU Affero General Public License as
+ *    published by the Free Software Foundation, either version 3 of the
+ *    License, or (at your option) any later version.
+ *
+ *    This program is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU Affero General Public License for more details.
+ *
+ *    You should have received a copy of the GNU Affero General Public License
+ *    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ **/
+
+class Default_View_Helper_IsProjectOriginal extends Zend_View_Helper_Abstract
+{
+
+    /**
+     * @param int $project_id
+     * @return bool
+     */
+    public function isProjectOriginal($project_id)
+    {      
+            $model = new Default_Model_Tags();
+            return $model->isProuductOriginal($project_id);                
+    }
+
+} 
\ No newline at end of file
diff --git a/application/modules/default/views/layout/layout_appimagehub.phtml \
b/application/modules/default/views/layout/layout_appimagehub.phtml index bc48afbf..07fd6c35 100755
--- a/application/modules/default/views/layout/layout_appimagehub.phtml
+++ b/application/modules/default/views/layout/layout_appimagehub.phtml
@@ -72,7 +72,7 @@
 </head>
 <body>
 
-<?php echo $this->render('partials/header/template.phtml'); ?>
+<?php echo $this->render('partials/header/template_react.phtml'); ?>
 <?php echo $this->render('partials/flashMessage.phtml'); ?>
 <?php echo $this->layout()->content; ?>
 <?php echo $this->render('partials/footer/template.phtml'); ?>
diff --git a/application/modules/default/views/layout/layout_appimagehub_home.phtml \
b/application/modules/default/views/layout/layout_appimagehub_home.phtml index 89750a93..addc13c7 100755
--- a/application/modules/default/views/layout/layout_appimagehub_home.phtml
+++ b/application/modules/default/views/layout/layout_appimagehub_home.phtml
@@ -54,6 +54,8 @@
     <script src="/theme/flatui/js/lib/jquery-3.2.1.min.js" ></script>
     <script src="/theme/flatui/js/lib/bootstrap.min.js" ></script>    
     <script type="text/javascript" \
src="/theme/flatui/js/lib/tooltipster/dist/js/tooltipster.bundle.min.js"></script> +    <script \
src="/theme/flatui/js/lib/moment.min.js"></script> +    <script type="text/javascript" \
                src="/tools/fancybox2.1.4/jquery.fancybox.pack.js?v=2.1.4"></script>
     <script type="text/javascript" src="/theme/react/lib/react/react.js"></script>
     <script type="text/javascript" src="/theme/react/lib/react-dom/react-dom.js"></script>
     <script type="text/javascript" src="/theme/react/lib/redux/redux.min.js"></script>
@@ -65,7 +67,7 @@
 
 </head>
 <body>
-<?php echo $this->render('partials/header/template.phtml'); ?>
+<?php echo $this->render('partials/header/template_react.phtml'); ?>
 <?php echo $this->render('partials/flashMessage.phtml'); ?>
 <?php echo $this->layout()->content; ?>
 <?php echo $this->render('partials/footer/template.phtml'); ?>
diff --git a/application/modules/default/views/scripts/partials/header/metaheader_react.phtml \
b/application/modules/default/views/scripts/partials/header/metaheader_react.phtml index \
                52c171b3..49d9c0ce 100755
--- a/application/modules/default/views/scripts/partials/header/metaheader_react.phtml
+++ b/application/modules/default/views/scripts/partials/header/metaheader_react.phtml
@@ -25,140 +25,46 @@
 $baseurl = Zend_Registry::get('config')->settings->client->default->baseurl;
 $url_forum = Zend_Registry::get('config')->settings->client->default->url_forum;
 $url_blog = Zend_Registry::get('config')->settings->client->default->url_blog;
+
+$sname = Zend_Registry::get('store_host');
+$json_menu = $this->fetchMetaheaderMenuJson();
 $loginMember = $this->getAuthUser();
-$username = $loginMember->username;
-$profile_image_url = $loginMember->profile_image_url;
+if($loginMember->member_id)
+{
+    $json_user = Zend_Json::encode($loginMember);
+    $username = $loginMember->username;
+    $profile_image_url = $loginMember->profile_image_url;
+    $loginUrl = null;
+}else{
+    $json_user = Zend_Json::encode(null);
+    $username = null;
+    $profile_image_url = null;
+    $serverUrl = $this->serverUrl();
+    $helperEncryptUrl = new Default_View_Helper_EncryptUrl();
+    $redirectString = '/redirect/' . \
$helperEncryptUrl->EncryptUrl(Zend_Controller_Front::getInstance()->getRequest()->getScheme() . '://' . \
Zend_Controller_Front::getInstance()->getRequest()->getHttpHost().$_SERVER["REQUEST_URI"]); +    \
$loginUrl = $serverUrl.'/login'.(strpos($_SERVER["REQUEST_URI"], 'login')?'':$redirectString); +}
 
 ?>
     <style>
-
-        .nav-divider-pling{
-            color:#E2E2E2;
-        }
-        .nav-pills > li + li {
-                margin-left: 10px;
-            }
-            .dropdown-menu > li > a{
-                font-size: 12px;
-            }
-        .metamenu .dropdown:hover .dropdown-menu {
-            margin-left: -16px;
-        }
-        .metamenu .dropdown-menu li{
-            width: 100%;
-        }
-
-        .metamenu ul.dropdown-menu  li span{ color:#999; }
-        .metamenu ul.dropdown-menu  li.active span{ color:#eee; }
+      .nav-divider-pling{color:#E2E2E2;}
+      .nav-pills > li + li {margin-left: 10px;}
+      .dropdown-menu > li > a{font-size: 12px;}
+      .metamenu .dropdown:hover .dropdown-menu {margin-left: -16px;}
+      .metamenu .dropdown-menu li {width: 100%;}
+      .metamenu ul.dropdown-menu  li span{ color:#999; }
+      .metamenu ul.dropdown-menu  li.active span{ color:#eee; }
     </style>
 
-    <div class="small metamenu" >
-        <?php
-            $domainshelper = new Default_View_Helper_FetchDomains();
-            $this->domainobjects = $domainshelper->fetchDomainObjects();
-            $sname = Zend_Registry::get('store_host');
-
-            echo '<ul class="nav nav-pills meta-nav-top left">';
-            $i = 0;
-
-            echo '<li>test</li><li class="" style="background-color:#eee; -moz-border-radius: 5px; \
border-radius: 5px; "><a href="http://'.$baseurl.'"><img src="/images/system/ocs-logo-rounded-16x16.png" \
                class="logo"/> openDesktop.org :</a> </li>';
-
-            $preOrder = 0;
-            $curOrder = 0;
-            foreach ($this->domainobjects as $obj) {
-                $o =  $obj['order'];
-                //$curOrder = floor($obj['order']/1000);
-                //if($curOrder<10 or $curOrder>50) continue;
-                $curOrder = $obj['calcOrder'];
-                $host =$obj['host'];
-                $name =$obj['name'];
-                if($curOrder!= $preOrder) $i=0;
-
-                if($curOrder > $preOrder && $preOrder !=0){
-                   echo '</ul></li>';
-                }
-                if($i==0 && $preOrder !=0) echo '<li class="nav-divider-pling"> &#149; </li>';
-
-                if($curOrder ==9 && $i ==0){
-                    // Desktops
-                    echo '<li class="dropdown"><a href="#">Desktops</a><ul class="dropdown-menu">';
-                }else if($curOrder==10 && $i==0){
-                    // applications
-                    echo '<li class="dropdown"><a href="#">Applications</a><ul class="dropdown-menu">';
-                }else if($curOrder ==20 && $i ==0){
-                    // artworks
-                    echo '<li class="dropdown"><a href="#">Addons</a><ul class="dropdown-menu">';
-                }/*else if($curOrder ==30 && $i ==0){
-                    // artworks
-                    echo '<li class="dropdown"><a href="#">Desktops</a><ul class="dropdown-menu">';
-                }*/
-                else if($curOrder ==40 && $i ==0){
-                    // multimedia
-                    echo '<li class="dropdown"><a href="#">Artwork</a><ul class="dropdown-menu">';
-                }
-                else if($curOrder ==50 && $i ==0){
-                    // multimedia
-                    echo '<li class="dropdown"><a href="#">Other</a><ul class="dropdown-menu">';
-                }
-                if($sname == $host )
-                {
-                    echo '<li class="active">';
-                }else
-                {
-                    echo '<li>';
-                }
-                /*
-                $keyword = $obj['meta_keywords'];
-
-                if($keyword!='')
-                {
-                    $keyword = ' - '.$keyword;
-                }
-                */
-                 // z.b 150001 ende ==1 go real link otherwise /s/$name
-                $last_char_check = substr($o, -1);
-
-                echo '<a href="http://' . ($last_char_check=='1'?$host:$baseurl.'/s/'.$name) . '">'.  \
                $name .'</a> </li>';
-
-                //$preOrder = floor($obj['order']/1000);
-                $preOrder =$obj['calcOrder'];
-                 $i++;
-            }
-            echo '</ul></li>';
-            echo '</ul>';
+    <div id="metaheader"></div>
 
-                ?>
+    <script>
+      var domains = <?=$json_menu?>;
+      var user = <?= $json_user ?>;
+      var baseUrl = "<?=$baseurl?>";
+      var blogUrl = "<?=$url_blog?>";
+      var loginUrl = "<?=$loginUrl?>";
+      var sName = "<?=$sname?>";
+    </script>
 
-            <ul class="nav nav-pills meta-nav-top right" style="margin-right: 30px;">
-                <li><a href="/community" > Community </a> </li>
-               <li><a href="<?=$url_forum?>" target="_blank"> Forum</a> </li>
-               <li><a href="<?=$url_blog?>" target="_blank"> Blog</a> </li>
-               <li><a  id="plingList" href="/plings" class="popuppanel"> What are Plings? </a> </li>
-               <li><a  id="ocsapiContent" href="/partials/ocsapicontent.phtml" class="popuppanel"> API \
                </a> </li>
-               <li> <a id="aboutContent" href="/partials/about.phtml" class="popuppanel">About </a>   \
                </li>
-               <li id="user-dropdown-container">
-                 <div class="dropdown" id="user-dropdown">
-                   <button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" \
                data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
-                     User
-                     <span class="caret"></span>
-                   </button>
-                   <ul class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu1">
-                     <li id="user-info-menu-item">
-                       <div id="user-info-section">
-                         <div class="user-avatar">
-                           <div class="no-avatar-user-letter">U</div>
-                         </div>
-                         <div class="user-details">
-                           details
-                         </div>
-                       </div>
-                     </li>
-                     <li id="main-seperator" role="separator" class="divider"></li>
-                     <li><a href="#">Another action</a></li>
-                     <li><a href="#">Something else here</a></li>
-                     <li><a href="#">Separated link</a></li>
-                   </ul>
-                 </div>
-               </li>
-            </ul>
-        </div>
+    <script type="text/javascript" src="/theme/react/metaheader.js"></script>
diff --git a/application/modules/default/views/scripts/product/add.phtml \
b/application/modules/default/views/scripts/product/add.phtml index 31e50e7b..3cf2d59d 100644
--- a/application/modules/default/views/scripts/product/add.phtml
+++ b/application/modules/default/views/scripts/product/add.phtml
@@ -123,6 +123,12 @@ $this->inlineScript()->appendScript('
         section.body {
             width: 100% !important;
         }
+
+        #is_original-element
+        {
+            width: 25px;
+            float: left;
+        }
     </style>
     <main class="user-admin-page">
 
@@ -224,14 +230,15 @@ $this->inlineScript()->appendScript('
                                 <?= $this->form->project_sub_subcategory_id ?>
                                 <?= $this->form->description ?>
                                 <?= $this->form->version ?>
-                                <?= $this->form->image_small ?>
-                                <?= $this->form->image_small_upload ?>
-                                <?php //$this->form->image_big ?>
-                                <?php //$this->form->image_big_upload ?>
-                                <?= $this->form->gallery ?>
-                                <?= $this->form->embed_code ?>
 
                                 <?= $this->form->source_url ?>
+
+                                <div class="form-group">
+                                <div class="col-sm-12 margin-top-15">
+                                 <?= $this->form->is_original ?>  Check this box, if this is your own \
original work and not based on something else       +                                </div>
+                                </div>                               
+                                
                                 <?= $this->form->license_tag_id ?>
                                  <?php
                                     if($this->project_id)
@@ -246,19 +253,24 @@ $this->inlineScript()->appendScript('
                                             <label class="form-label"> System Auto Tags</label>
                                         </div>
                                         <div class="col-sm-12">
-                                          <?php
-
-                                                echo $tagscat ;
-                                          ?>
+                                          <?php echo $tagscat ; ?>
                                         </div>
                                     </div>
                                     <?php
-                                    }}
-                                    ?>
+                                        }
+                                    }
+                                ?>
 
                                 <?= $this->form->tagsuser ?>
 
 
+                                <?= $this->form->image_small ?>
+                                <?= $this->form->image_small_upload ?>
+                                <?php //$this->form->image_big ?>
+                                <?php //$this->form->image_big_upload ?>
+                                <?= $this->form->gallery ?>
+                                <?= $this->form->embed_code ?>                               
+
                                 <?= $this->form->link_1 ?>
                                 <?= $this->form->facebook_code ?>
                                 <?= $this->form->twitter_code ?>
diff --git a/application/modules/default/views/scripts/product/index.phtml \
b/application/modules/default/views/scripts/product/index.phtml index 55ec676d..a7614980 100644
--- a/application/modules/default/views/scripts/product/index.phtml
+++ b/application/modules/default/views/scripts/product/index.phtml
@@ -85,6 +85,8 @@ $this->likes = $tableProjectFollower->fetchLikesForProject($this->product->proje
 
 $projectplings = new Default_Model_ProjectPlings();
 $this->projectplings = $projectplings->fetchPlingsForProject($this->product->project_id);
+
+$tagmodel = new Default_Model_Tags();
 ?>
 
     <!-- facebook -->
@@ -277,7 +279,8 @@ $this->projectplings = $projectplings->fetchPlingsForProject($this->product->pro
                                       array('width' => 85, 'height' => 85, 'crop' => 'crop')); ?>"/>
                                 </div>
                                 <div style="margin-left: 95px">
-                                    <p style="margin-bottom: 0px">
+                                    
+                                    <div>
                                     <?php if (false === empty($this->product->link_1)): ?><a
                                         href="<?php echo $this->product->link_1; ?>"
                                         target="_NEW"
@@ -287,6 +290,18 @@ $this->projectplings = $projectplings->fetchPlingsForProject($this->product->pro
                                     <?php else : ?>
                                         <?= $this->product->title; ?>
                                     <?php endif; ?>
+
+                                    <?php                                                  
+                                                if($this->product->featured=='1'){
+                                        ?>
+                                            <span class=" label label-info right" style="font-size: \
13px;padding: .2em .6em .3em;"> Featured</span> +                                    <?php }?>
+
+                                    <?php if($this->isProjectOriginal($this->product->project_id)){?>
+                                    <span class=" label label-info right" style="font-size: \
13px;padding: .2em .6em .3em;"> Original</span> +                                    <?php }?>            \
 +                                                         
+                                    </div>
                                     
                                     
                                     <p class="product_category" style="margin-bottom: 5px">              \
 @@ -296,7 +311,7 @@ $this->projectplings = $projectplings->fetchPlingsForProject($this->product->pro
 
                                     <?php
                                     echo '<span class="topics">';
-                                    $tagmodel = new Default_Model_Tags();
+                                    
                                     $tagsuser = $tagmodel->getTagsUser($this->product->project_id, \
Default_Model_Tags::TAG_TYPE_PROJECT);                                                               echo \
'<span class="topicslink">';  if(false === empty($tagsuser))
@@ -837,7 +852,7 @@ $this->projectplings = $projectplings->fetchPlingsForProject($this->product->pro
 
                         <div>
                             <?php
-                            $this->moreProducts = $tableProject->fetchMoreProjects($this->product, 8);
+                            $this->moreProducts = $tableProject->fetchMoreProjects($this->product, 6);
                             $this->moreProductsTitle = 'More ' . $this->product->cat_title . ' from ' . \
$this->product->username;  
                             if (count($this->moreProducts) > 0) {
@@ -847,7 +862,7 @@ $this->projectplings = $projectplings->fetchPlingsForProject($this->product->pro
 
                         <div>
                             <?php
-                            $this->moreProducts = \
$tableProject->fetchMoreProjectsOfOtherUsr($this->product, 8); +                            \
                $this->moreProducts = $tableProject->fetchMoreProjectsOfOtherUsr($this->product, 6);
                             $this->moreProductsTitle = 'Other ' . $this->product->cat_title;
 
                             if (count($this->moreProducts) > 0) {
diff --git a/application/modules/default/views/scripts/product/partials/productMoreProductsWidgetV1.phtml \
b/application/modules/default/views/scripts/product/partials/productMoreProductsWidgetV1.phtml index \
                a9912df2..639311cd 100644
--- a/application/modules/default/views/scripts/product/partials/productMoreProductsWidgetV1.phtml
+++ b/application/modules/default/views/scripts/product/partials/productMoreProductsWidgetV1.phtml
@@ -54,7 +54,7 @@ $helpBuildProductUrl = new Default_View_Helper_BuildProductUrl();
                         <a
                             href="<?= $helpBuildProductUrl->buildProductUrl($product->project_id) ?>"
                             title="<?= $product->title ?>">
-                            <img src="<?= $helpImage->Image($product->image_small, array('width' => 80, \
'height' => 80)); ?>" +                            <img src="<?= $helpImage->Image($product->image_small, \
array('width' => 200, 'height' => 200)); ?>"  alt="product">
                         </a>
                         <!-- /product thumbnail -->
@@ -66,3 +66,4 @@ $helpBuildProductUrl = new Default_View_Helper_BuildProductUrl();
     </div>
 
 </div>
+
diff --git a/application/modules/default/views/scripts/user/aboutme.phtml \
b/application/modules/default/views/scripts/user/aboutme.phtml index c2f77428..06d4eadc 100644
--- a/application/modules/default/views/scripts/user/aboutme.phtml
+++ b/application/modules/default/views/scripts/user/aboutme.phtml
@@ -251,6 +251,11 @@ $isSupporter = $this->stat['donationIssupporter'];
                                 <a href="#user-aboutme" data-toggle="tab" role="tab"  \
                aria-controls="user-aboutme" >
                                     Products<?=($this->stat['cntProducts']>0?' \
('.$this->stat['cntProducts'].') ':'')?>  </a>
+                            </li>
+                            <li role="presentation">
+                                <a href="#user-featuredproducts" data-toggle="tab" role="tab"  \
aria-controls="user-featuredproducts" > +                                    \
Featured<?=($this->stat['cntFProducts']>0?' ('.$this->stat['cntFProducts'].') ':'')?> +                   \
</a>  </li>
                               <?php /*
                               <li>
@@ -322,6 +327,19 @@ $isSupporter = $this->stat['donationIssupporter'];
                                     </div>
                                 <?php } ?>
                             </div>
+
+                            <div role="tabpanel" class="tab-pane active" id="user-featuredproducts">
+                                <?php 
+                                        if($this->userFeaturedProducts)
+                                        {
+                                                $this->userProducts = $this->userFeaturedProducts;
+                                        }
+                                    if ($this->userProducts) { ?>                                
+                                     <div class="my-products-list" id="my-products-list">                \
 +                                        <?php echo \
$this->render('user/partials/aboutme-products.phtml'); ?>                                        +        \
</div> +                                <?php } ?>
+                            </div>
     <?php /*
                             <div role="tabpanel" class="tab-pane " id="user-supports">
 
diff --git a/httpdocs/theme/flatui/css/stylesheet.css b/httpdocs/theme/flatui/css/stylesheet.css
index fad5af49..34723d5f 100644
--- a/httpdocs/theme/flatui/css/stylesheet.css
+++ b/httpdocs/theme/flatui/css/stylesheet.css
@@ -1 +1 @@
-.bg_sheet{background-image:url(../img/bg_sheet.png)}.bg_sheet_statistics{background-image:url(../img/stat \
istics_sheet.png)}.unstyled_list{list-style-type:none;padding:0;margin:0}.hand-with-coin{display:inline-bl \
ock;background-image:url(../img/new/button/hand-w-coin.png);height:61px;width:61px}.hand-with-coin.v-2{bac \
kground-image:url(../img/new/button/hand-w-coin-2.png)}@font-face{font-family:'Open \
Sans';font-style:normal;font-weight:300;src:local('Open Sans \
Light'),local('OpenSans-Light'),url(../css/fonts/open-sans-v15-latin-300.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-300.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans \
Regular'),local('OpenSans-Regular'),url(../css/fonts/open-sans-v15-latin-regular.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-regular.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans \
SemiBold'),local('OpenSans-SemiBold'),url(../css/fonts/open-sans-v15-latin-600.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-600.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans \
Bold'),local('OpenSans-Bold'),url(../css/fonts/open-sans-v15-latin-700.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-700.woff) \
format('woff')}body{color:#32353d;overflow-y:scroll;font-size:1.5em;line-height:1.231;color:#4e4e4e;font-family:'Open \
Sans',sans-serif;font-size:medium}footer,header,main,section{width:100%;float:left}footer \
section.wrapper,header section.wrapper,main section.wrapper,section \
section.wrapper{margin-left:auto;margin-right:auto;width:95%;float:none;height:auto}a{text-decoration:none;color:#2673b0;-webkit-transition:all \
.2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s \
ease-out}a:hover{text-decoration:none}a:focus{outline:0}button::-moz-focus-inner{border:0}button,input,sel \
ect,textarea{font-family:Lato,sans-serif;font-size:14px}h1{font-size:32px;font-weight:900}h3{font-size:24p \
x;font-weight:700;margin-bottom:4px;margin-top:2px}h5{font-size:16px;font-weight:500;text-transform:uppercase}@media \
(max-width:1200px) and (min-width:992px){footer section.wrapper,header section.wrapper,main \
section.wrapper{width:95%;margin-left:2.5%;margin-right:2.5%}}.btn{background:#bdc3c7 none repeat scroll \
0 0;border:medium none;border-radius:6px;box-shadow:none;color:#fff;line-height:22px;padding:9px 12px \
10px;text-decoration:none;text-shadow:none;-webkit-transition:all .2 ease-out;-moz-transition:all .2 \
ease-out;-ms-transition:all .2 ease-out;-o-transition:all .2 \
ease-out}.btn.btn-large{font-size:17px;line-height:20px;padding:12px 18px \
13px}.btn.btn-native{background-color:#2673b0;color:#fff}.btn.btn-pling-red{background-color:#e84310}.btn. \
btn-pling-green{background-color:green}.btn.btn-purple{background:#9b59b6;padding:10px \
35px}.btn.btn-file-dropzone{font-size:10px;padding:8px 10px \
10px;line-height:10px}.btn.btn-file-action{font-size:12px;padding:8px 10px \
10px;line-height:16px;margin-left:5px}.pling-danger{background:#C9302C none repeat scroll 0 \
0}.standard-form input{height:41px}.standard-form input,.standard-form select,.standard-form \
textarea{border:1px solid \
#bdc3c7;padding:0;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-background-cl \
ip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.standard-form \
.field{margin-bottom:15px}.icon-facebook,.icon-google,.icon-twitter{width:40px;height:40px;cursor:pointer; \
display:inline-block;background-image:url(../img/bg_sheet.png)}.icon-facebook{background-position:0 \
-105px}.icon-twitter{background-position:-40px \
-105px}.lightblue{color:#2673b0}.small{font-size:12px}.large{font-size:18px}.relative{position:relative}.a \
bsolute{position:absolute}.light{font-weight:300}.lightgrey{color:#95a5a6}.center{text-align:center}i.myfa \
v{color:#8e44ad}h1.page-title{color:#34495e;font-weight:700;font-size:32px}.modal{overflow-y:hidden}.right \
{float:right}.left{float:left}em.icon{display:inline-block;background-image:url(../img/bg_sheet.png)}em.icon.info-icon{width:31px;height:30px;background-position:-289px \
-64px}.margin-bottom-10{margin-bottom:10px}.margin-top-15{margin-top:15px}.full-width{width:100%!important \
}.progress{height:8px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip \
:padding-box;-moz-background-clip:padding;background-clip:padding-box;margin-bottom:0}.opendesktopwidgetpa \
ger{display:flex;justify-content:right;align-items:center;justify-content:flex-end}.opendesktopwidgetpager \
ul.opendesktopwidgetpager{display:inline-block;padding-left:0;margin:20px \
0;border-radius:4px}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>li{display:inline}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>li>span{cursor:pointer;position:relative;float:left;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px \
solid #ddd;padding:5px 10px;font-size:12px}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>.active>span{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.metamenu{width:100%;background-color:#fff;height:15px}.metamenu \
a#toggleStoreBtn{float:left;margin-left:20px;text-decoration:none}.metamenu \
a.home-link{float:left}.metamenu a.home-link img.logo{width:16px;height:16px}.meta-nav-top>li>a{padding:0 \
5px;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s \
ease-out;-o-transition:all .2s ease-out}.meta-nav-top>li>a#ocs-stores \
img{width:16px;height:16px}ul.meta-nav-top{list-style:none}ul.meta-nav-top \
li{float:left}ul.meta-nav-top-right{margin:0;margin-right:30px;float:right}ul.meta-nav-top-right \
li{padding:0 10px}ul.meta-nav-top-left{float:left}#toggleStoreContainer{z-index:1000;display:none;width:60%;height:200px;top:12px;left:190px}#toggleStoreContainer \
a{display:block;font-size:16px}#toggleStoreContainer a:hover{color:#6a7686}#toggleStoreContainer \
b{text-decoration:underline;text-align:center;padding-left:20px;font-size:18px;cursor:default}#toggleStoreContainer \
ul{list-style:none;padding:0;padding-top:10px;padding-left:30px}#toggleStoreContainer ul \
li{font-size:14px}#toggleStoreContainer ul li:hover{background-color:transparent}header \
nav{border-bottom:transparent}header#page_header{color:#6a7686;height:auto;font-size:10pt;font-weight:400;width:100%;font-family:Arial,sans-serif}header#page_header \
nav#nav-top{margin-left:130px;width:84%}header \
.dropdown-header{width:175px;height:12px;background-image:url(../img/bg_sheet.png);background-position:-385px \
0}header a{color:#fff}header .pull-left,header .pull-right{padding:0}header ul{margin-bottom:0}header \
ul.menu-icon{float:right;display:none}header ul \
li{list-style:none;display:inline-block;margin:0;cursor:pointer;position:relative;height:40px;line-height:40px;float:left}header \
ul li a{float:left;display:block;height:inherit;line-height:inherit;padding:0 20px}header ul \
li.profile-menu-container{padding-top:0;padding-left:40px}header ul li.profile-menu-container \
.header-profile-image{top:50%;left:10px;height:30px;width:30px;margin-top:-15px}header ul \
li.profile-menu-container .header-profile-image \
.supporter-badge{position:absolute;left:0;bottom:0;background:#EE6E09;text-align:center;border-radius:30px \
30px 30px 30px;color:#fff;padding:5px 10px;font-size:12px}header ul li.profile-menu-container \
.header-profile-image \
img{height:30px;width:30px;float:left;-webkit-border-radius:999px;-moz-border-radius:999px;border-radius:9 \
99px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li.profile-menu-container>a{display:block}header ul li \
ul{width:165px;margin-left:0;position:absolute;left:-9999px;top:45px;border:none;font-size:14px;color:#7f8 \
c8d;font-weight:400;padding:0;z-index:10000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius \
:5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li ul.active{left:0;top:40px}header ul li ul \
li{text-align:left;display:block;width:100%;background:#ecf0f1;margin:0;padding:0;height:40px;border-bottom:1px \
solid #d6d7d9}header ul li ul li.first,header ul li ul li:first-of-type{-webkit-border-radius:5px 5px 0 \
0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 \
0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header ul \
li ul li:last-of-type{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 \
5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li ul li a{color:#6a7686;text-align:left;height:40px;line-height:40px}header \
.container{margin-left:auto;margin-right:auto;float:none;height:auto;width:100%;background-color:#e2e2e2}header \
.container.header{margin-left:auto;margin-right:auto;float:none;width:100%}header .container.header \
section.container{background-color:transparent}header .container.header \
section.container.backLink{background-color:#729ECD!important;height:30px}header .container.header \
section.container.backLink h4 a:hover{color:#1d1d1d}header .container.header section.container \
section.wrapper{height:40px;padding-left:80px;position:relative}header .container.header \
section.container+section.container{background-color:transparent;padding-left:0}header .container.header \
section.container+section.container>section.wrapper{padding-left:242px;height:50px}header \
.container.header nav{border-bottom:transparent}header .container.header nav \
#search{height:25px;padding:0;margin:6.5px 15px;line-height:25px;position:relative}header \
.container.header nav #search input.content-search{width:16em;height:25px;padding:0;border:1px solid \
#fff;margin-bottom:-1px;padding-right:30px;text-indent:5px;color:#6a7686;float:left;border-radius:6px;box-shadow:none}header \
.container.header nav #search \
div.icon-search-input{top:2px;right:0;width:25px;height:25px;background-image:url(/theme/flatui/img/icon-search-input-2.png);background-position:center \
center;position:absolute;cursor:pointer}header .container.header \
ul.menu-nav-tabs{bottom:0;display:inline-table;list-style-type:none;margin:0;padding:0;position:absolute;z \
-index:999}.pling-nav-tabs-a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li{background-color:transparent;margin-bottom:0}.pling-nav-tabs \
ul.nav-tabs>li>a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li>a:hover{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent;color:#2673b0}.pling-nav-tabs \
ul.nav-tabs>li>a:hover svg{fill:#2673b0}.pling-nav-tabs \
ul.nav-tabs>li>a:focus{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li svg{fill:#777}.pling-nav-tabs \
ul.nav-tabs>li.active>a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active>a:hover{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active>a:focus{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active svg{fill:#2673b0}footer{width:100%;float:left;padding:12px 0;border-bottom:5px \
solid #2673b0;border-top:1px solid #a9a9a9;background-color:#dcdcdc;font-size:9pt}footer \
h3{font-weight:400}footer h3#footer-heading{font-size:1.3em;margin:0}footer nav#footer-nav \
ul{margin-top:1em;list-style:none;padding:0;margin-right:1em;float:left;width:auto;margin-bottom:.2em}footer \
nav#footer-nav ul li{display:inline-block;margin-right:0;font-size:1em}footer nav#footer-nav ul li \
a{color:#666;font-weight:400}footer nav#footer-nav ul li+li{margin-left:10px}footer \
h3#footer-social-heading{color:#666;font-size:1em;margin:0 0 .4em 0}footer \
#footer-social{float:right}footer #footer-social a{width:30px;display:block;float:left}footer \
#footer-social a+a{margin-left:2px}footer section.wrapper .pull-left{padding:0}footer section.wrapper \
.pull-right{padding:0}body.home-page main section.wrapper .container{padding:150px \
0;height:auto;float:none;max-width:95%;width:95%}body.home-page main section.wrapper#intro \
.container{padding-bottom:50px}body.home-page main section.wrapper#intro .container \
article{text-align:center;width:100%}body.home-page main section.wrapper#intro .container \
article>*{margin-bottom:40px}body.home-page main section.wrapper#intro .container article \
h2{font-size:40px;font-weight:700;margin-bottom:20px}body.home-page main section.wrapper#intro .container \
article h3{font-size:30px;font-weight:700;margin-top:2px}body.home-page main section.wrapper#intro \
.container article p{margin-bottom:0;text-align:center}body.home-page main \
section#cat-list{border-top:1px solid #cdd7dd}body.home-page main \
.card-wrapper{position:relative;max-width:960px;margin:auto;margin-bottom:2rem;background:#fff}body.home-page \
main .card-wrapper .card-item{position:absolute;padding:1rem;width:31.4%;border:1px solid \
gray;border-radius:7px}body.home-page main .card-wrapper .card-item .category \
a.title{font-size:14pt;font-weight:600;min-height:30px;line-height:30px;padding-right:30px}body.home-page \
main .card-wrapper .card-item .category a.title span.label{padding:2px 3px}body.home-page main \
.card-wrapper .card-item div \
a.title{font-size:11pt;min-height:20px;line-height:20px;padding-right:5px}body.home-page main \
.card-wrapper .card-item div a.title \
span.label{font-size:7pt;font-weight:300;vertical-align:top;margin-left:5px;padding:1px \
3px}.card-item{border:1px solid gray}.card-item .category>a.title{color:#444}.card-item \
div>a.title{color:#6a6a6a}#indeximages{line-height:0;-webkit-column-count:20;-webkit-column-gap:0;-moz-column-count:20;-moz-column-gap:0;column-count:20;column-gap:0}#indeximages \
img{width:100%!important;height:auto!important;opacity:1}@media \
(max-width:1920px){#indeximages{-moz-column-count:20;-webkit-column-count:20;column-count:20}}@media \
(max-width:1200px){#indeximages{-moz-column-count:15;-webkit-column-count:4;column-count:4}}@media \
(max-width:1000px){#indeximages{-moz-column-count:12;-webkit-column-count:3;column-count:3}}@media \
(max-width:800px){#indeximages{-moz-column-count:9;-webkit-column-count:2;column-count:2}}@media \
(max-width:400px){#indeximages{-moz-column-count:7;-webkit-column-count:1;column-count:1}}#products-wrappe \
r{padding-top:20px}.explore-products{padding-left:30px;padding-right:30px;margin-top:-10px}.explore-products \
.product-list{width:100%;float:left;padding:0 10px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 \
0 5px 5px;border-radius:0 0 5px \
5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.explore-products \
.product-list .explore-product{padding:10px 0;font-size:12px;border-top:1px solid #ccc}.explore-products \
.product-list .explore-product .rownum{font-size:12px;float:left}.explore-products .product-list \
.explore-product .explore-product-imgcolumn{padding-left:5px;padding-right:5px}.explore-products \
.product-list .explore-product \
.imageContainer{height:167px;display:flex;justify-content:center;align-items:center}.explore-products \
.product-list .explore-product .explore-product-image{max-width:95%;max-height:167px}.explore-products \
.product-list .explore-product .contentLeft{float:left;padding-right:0;width:270px}.explore-products \
.product-list .explore-product .contentLeft img{max-width:167px;max-height:167px}.explore-products \
.product-list .explore-product .contentLeft div.productimg{width:167px;height:167px}.explore-products \
.product-list .explore-product .explore-product-details{padding-left:20px}.explore-products .product-list \
.explore-product .explore-product-details \
h3{font-size:24px;font-weight:700;color:#2673b0}.explore-products .product-list .explore-product \
.explore-product-details h3 span.version{font-size:smaller;padding-left:20px}.explore-products \
.product-list .explore-product .explore-product-details \
.title{display:block;margin-bottom:8px}.explore-products .product-list .explore-product \
.explore-product-details .title .username{padding-left:20px}.explore-products .product-list \
.explore-product .explore-product-details .description{display:block;margin-bottom:8px}.explore-products \
.product-list .explore-product .explore-product-details \
.packagetypes{display:block;float:left}.explore-products .product-list .explore-product \
.explore-product-details .packagetypes .packagetypeos{width:100px;float:left}.explore-products \
.product-list .explore-product .explore-product-details \
.productInfo{clear:left;padding-top:5px}.explore-products .product-list .explore-product \
.explore-product-details .productInfo span.cntSupporters{padding-right:20px}.explore-products \
.product-list .explore-product .explore-product-plings{padding:0}.explore-products .product-list \
.explore-product .explore-product-plings .rating{width:50%}.explore-products .product-list \
.explore-product .explore-product-plings \
.progress{margin-bottom:10px;padding:3px;opacity:0;margin-bottom:0;height:12px;opacity:1;background-color:transparent;box-shadow:none;padding:2px}.explore-products \
.product-list .explore-product .explore-product-plings .progress \
.bar{width:4px;max-width:100%;height:14px;background-color:#2673b0;-webkit-border-radius:5px;-moz-border-r \
adius:5px;border-radius:5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset \
0 6px 0 rgba(255,255,255,.2);-moz-box-shadow:inset 0 6px 0 rgba(255,255,255,.2);box-shadow:inset 0 6px 0 \
rgba(255,255,255,.2)}.explore-products .product-list .explore-product .explore-product-plings .progress \
.bar.no-goal{width:50%;opacity:0}.explore-products .product-list .explore-product .explore-product-plings \
\ No newline at end of file
+.bg_sheet{background-image:url(../img/bg_sheet.png)}.bg_sheet_statistics{background-image:url(../img/stat \
istics_sheet.png)}.unstyled_list{list-style-type:none;padding:0;margin:0}.hand-with-coin{display:inline-bl \
ock;background-image:url(../img/new/button/hand-w-coin.png);height:61px;width:61px}.hand-with-coin.v-2{bac \
kground-image:url(../img/new/button/hand-w-coin-2.png)}@font-face{font-family:'Open \
Sans';font-style:normal;font-weight:300;src:local('Open Sans \
Light'),local('OpenSans-Light'),url(../css/fonts/open-sans-v15-latin-300.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-300.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:400;src:local('Open Sans \
Regular'),local('OpenSans-Regular'),url(../css/fonts/open-sans-v15-latin-regular.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-regular.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:600;src:local('Open Sans \
SemiBold'),local('OpenSans-SemiBold'),url(../css/fonts/open-sans-v15-latin-600.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-600.woff) \
format('woff')}@font-face{font-family:'Open Sans';font-style:normal;font-weight:700;src:local('Open Sans \
Bold'),local('OpenSans-Bold'),url(../css/fonts/open-sans-v15-latin-700.woff2) \
format('woff2'),url(../css/fonts/open-sans-v15-latin-700.woff) \
format('woff')}body{color:#32353d;overflow-y:scroll;font-size:1.5em;line-height:1.231;color:#4e4e4e;font-family:'Open \
Sans',sans-serif;font-size:medium}footer,header,main,section{width:100%;float:left}footer \
section.wrapper,header section.wrapper,main section.wrapper,section \
section.wrapper{margin-left:auto;margin-right:auto;width:95%;float:none;height:auto}a{text-decoration:none;color:#2673b0;-webkit-transition:all \
.2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s ease-out;-o-transition:all .2s \
ease-out}a:hover{text-decoration:none}a:focus{outline:0}button::-moz-focus-inner{border:0}button,input,sel \
ect,textarea{font-family:Lato,sans-serif;font-size:14px}h1{font-size:32px;font-weight:900}h3{font-size:24p \
x;font-weight:700;margin-bottom:4px;margin-top:2px}h5{font-size:16px;font-weight:500;text-transform:uppercase}@media \
(max-width:1200px) and (min-width:992px){footer section.wrapper,header section.wrapper,main \
section.wrapper{width:95%;margin-left:2.5%;margin-right:2.5%}}.btn{background:#bdc3c7 none repeat scroll \
0 0;border:medium none;border-radius:6px;box-shadow:none;color:#fff;line-height:22px;padding:9px 12px \
10px;text-decoration:none;text-shadow:none;-webkit-transition:all .2 ease-out;-moz-transition:all .2 \
ease-out;-ms-transition:all .2 ease-out;-o-transition:all .2 \
ease-out}.btn.btn-large{font-size:17px;line-height:20px;padding:12px 18px \
13px}.btn.btn-native{background-color:#2673b0;color:#fff}.btn.btn-pling-red{background-color:#e84310}.btn. \
btn-pling-green{background-color:green}.btn.btn-purple{background:#9b59b6;padding:10px \
35px}.btn.btn-file-dropzone{font-size:10px;padding:8px 10px \
10px;line-height:10px}.btn.btn-file-action{font-size:12px;padding:8px 10px \
10px;line-height:16px;margin-left:5px}.pling-danger{background:#C9302C none repeat scroll 0 \
0}.standard-form input{height:41px}.standard-form input,.standard-form select,.standard-form \
textarea{border:1px solid \
#bdc3c7;padding:0;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;-webkit-background-cl \
ip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.standard-form \
.field{margin-bottom:15px}.icon-facebook,.icon-google,.icon-twitter{width:40px;height:40px;cursor:pointer; \
display:inline-block;background-image:url(../img/bg_sheet.png)}.icon-facebook{background-position:0 \
-105px}.icon-twitter{background-position:-40px \
-105px}.lightblue{color:#2673b0}.small{font-size:12px}.large{font-size:18px}.relative{position:relative}.a \
bsolute{position:absolute}.light{font-weight:300}.lightgrey{color:#95a5a6}.center{text-align:center}i.myfa \
v{color:#8e44ad}h1.page-title{color:#34495e;font-weight:700;font-size:32px}.modal{overflow-y:hidden}.right \
{float:right}.left{float:left}em.icon{display:inline-block;background-image:url(../img/bg_sheet.png)}em.icon.info-icon{width:31px;height:30px;background-position:-289px \
-64px}.margin-bottom-10{margin-bottom:10px}.margin-top-15{margin-top:15px}.full-width{width:100%!important \
}.progress{height:8px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-background-clip \
:padding-box;-moz-background-clip:padding;background-clip:padding-box;margin-bottom:0}.opendesktopwidgetpa \
ger{display:flex;justify-content:right;align-items:center;justify-content:flex-end}.opendesktopwidgetpager \
ul.opendesktopwidgetpager{display:inline-block;padding-left:0;margin:20px \
0;border-radius:4px}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>li{display:inline}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>li>span{cursor:pointer;position:relative;float:left;margin-left:-1px;line-height:1.42857143;color:#337ab7;text-decoration:none;background-color:#fff;border:1px \
solid #ddd;padding:5px 10px;font-size:12px}.opendesktopwidgetpager \
ul.opendesktopwidgetpager>.active>span{z-index:2;color:#fff;cursor:default;background-color:#337ab7;border-color:#337ab7}.metamenu{width:100%;background-color:#fff;height:15px}.metamenu \
a#toggleStoreBtn{float:left;margin-left:20px;text-decoration:none}.metamenu \
a.home-link{float:left}.metamenu a.home-link img.logo{width:16px;height:16px}.meta-nav-top>li>a{padding:0 \
5px;-webkit-transition:all .2s ease-out;-moz-transition:all .2s ease-out;-ms-transition:all .2s \
ease-out;-o-transition:all .2s ease-out}.meta-nav-top>li>a#ocs-stores \
img{width:16px;height:16px}ul.meta-nav-top{list-style:none}ul.meta-nav-top \
li{float:left}ul.meta-nav-top-right{margin:0;margin-right:30px;float:right}ul.meta-nav-top-right \
li{padding:0 10px}ul.meta-nav-top-left{float:left}#toggleStoreContainer{z-index:1000;display:none;width:60%;height:200px;top:12px;left:190px}#toggleStoreContainer \
a{display:block;font-size:16px}#toggleStoreContainer a:hover{color:#6a7686}#toggleStoreContainer \
b{text-decoration:underline;text-align:center;padding-left:20px;font-size:18px;cursor:default}#toggleStoreContainer \
ul{list-style:none;padding:0;padding-top:10px;padding-left:30px}#toggleStoreContainer ul \
li{font-size:14px}#toggleStoreContainer ul li:hover{background-color:transparent}header \
nav{border-bottom:transparent}header#page_header{color:#6a7686;height:auto;font-size:10pt;font-weight:400;width:100%;font-family:Arial,sans-serif}header#page_header \
nav#nav-top{margin-left:130px;width:84%}header \
.dropdown-header{width:175px;height:12px;background-image:url(../img/bg_sheet.png);background-position:-385px \
0}header a{color:#fff}header .pull-left,header .pull-right{padding:0}header ul{margin-bottom:0}header \
ul.menu-icon{float:right;display:none}header ul \
li{list-style:none;display:inline-block;margin:0;cursor:pointer;position:relative;height:40px;line-height:40px;float:left}header \
ul li a{float:left;display:block;height:inherit;line-height:inherit;padding:0 20px}header ul \
li.profile-menu-container{padding-top:0;padding-left:40px}header ul li.profile-menu-container \
.header-profile-image{top:50%;left:10px;height:30px;width:30px;margin-top:-15px}header ul \
li.profile-menu-container .header-profile-image \
.supporter-badge{position:absolute;left:0;bottom:0;background:#EE6E09;text-align:center;border-radius:30px \
30px 30px 30px;color:#fff;padding:5px 10px;font-size:12px}header ul li.profile-menu-container \
.header-profile-image \
img{height:30px;width:30px;float:left;-webkit-border-radius:999px;-moz-border-radius:999px;border-radius:9 \
99px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li.profile-menu-container>a{display:block}header ul li \
ul{width:165px;margin-left:0;position:absolute;left:-9999px;top:45px;border:none;font-size:14px;color:#7f8 \
c8d;font-weight:400;padding:0;z-index:10000;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius \
:5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li ul.active{left:0;top:40px}header ul li ul \
li{text-align:left;display:block;width:100%;background:#ecf0f1;margin:0;padding:0;height:40px;border-bottom:1px \
solid #d6d7d9}header ul li ul li.first,header ul li ul li:first-of-type{-webkit-border-radius:5px 5px 0 \
0;-moz-border-radius:5px 5px 0 0;border-radius:5px 5px 0 \
0;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header ul \
li ul li:last-of-type{-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 \
5px 5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}header \
ul li ul li a{color:#6a7686;text-align:left;height:40px;line-height:40px}header \
.container{margin-left:auto;margin-right:auto;float:none;height:auto;width:100%;background-color:#e2e2e2}header \
.container.header{margin-left:auto;margin-right:auto;float:none;width:100%}header .container.header \
section.container{background-color:transparent}header .container.header \
section.container.backLink{background-color:#729ECD!important;height:30px}header .container.header \
section.container.backLink h4 a:hover{color:#1d1d1d}header .container.header section.container \
section.wrapper{height:40px;padding-left:80px;position:relative}header .container.header \
section.container+section.container{background-color:transparent;padding-left:0}header .container.header \
section.container+section.container>section.wrapper{padding-left:242px;height:50px}header \
.container.header nav{border-bottom:transparent}header .container.header nav \
#search{height:25px;padding:0;margin:6.5px 15px;line-height:25px;position:relative}header \
.container.header nav #search input.content-search{width:16em;height:25px;padding:0;border:1px solid \
#fff;margin-bottom:-1px;padding-right:30px;text-indent:5px;color:#6a7686;float:left;border-radius:6px;box-shadow:none}header \
.container.header nav #search \
div.icon-search-input{top:2px;right:0;width:25px;height:25px;background-image:url(/theme/flatui/img/icon-search-input-2.png);background-position:center \
center;position:absolute;cursor:pointer}header .container.header \
ul.menu-nav-tabs{bottom:0;display:inline-table;list-style-type:none;margin:0;padding:0;position:absolute;z \
-index:999}.pling-nav-tabs-a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li{background-color:transparent;margin-bottom:0}.pling-nav-tabs \
ul.nav-tabs>li>a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li>a:hover{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent;color:#2673b0}.pling-nav-tabs \
ul.nav-tabs>li>a:hover svg{fill:#2673b0}.pling-nav-tabs \
ul.nav-tabs>li>a:focus{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;background-color:transparent}.pling-nav-tabs \
ul.nav-tabs>li svg{fill:#777}.pling-nav-tabs \
ul.nav-tabs>li.active>a{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active>a:hover{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active>a:focus{border:0;position:relative;color:#777;font-size:13px;transition:color \
0s;bottom:-1px;border-bottom-width:2px;border-bottom-style:solid;border-bottom-color:transparent;backgroun \
d-color:transparent;color:#2673b0;border-bottom-color:#2673b0;font-weight:700}.pling-nav-tabs \
ul.nav-tabs>li.active svg{fill:#2673b0}footer{width:100%;float:left;padding:12px 0;border-bottom:5px \
solid #2673b0;border-top:1px solid #a9a9a9;background-color:#dcdcdc;font-size:9pt}footer \
h3{font-weight:400}footer h3#footer-heading{font-size:1.3em;margin:0}footer nav#footer-nav \
ul{margin-top:1em;list-style:none;padding:0;margin-right:1em;float:left;width:auto;margin-bottom:.2em}footer \
nav#footer-nav ul li{display:inline-block;margin-right:0;font-size:1em}footer nav#footer-nav ul li \
a{color:#666;font-weight:400}footer nav#footer-nav ul li+li{margin-left:10px}footer \
h3#footer-social-heading{color:#666;font-size:1em;margin:0 0 .4em 0}footer \
#footer-social{float:right}footer #footer-social a{width:30px;display:block;float:left}footer \
#footer-social a+a{margin-left:2px}footer section.wrapper .pull-left{padding:0}footer section.wrapper \
.pull-right{padding:0}body.home-page main section.wrapper .container{padding:150px \
0;height:auto;float:none;max-width:95%;width:95%}body.home-page main section.wrapper#intro \
.container{padding-bottom:50px}body.home-page main section.wrapper#intro .container \
article{text-align:center;width:100%}body.home-page main section.wrapper#intro .container \
article>*{margin-bottom:40px}body.home-page main section.wrapper#intro .container article \
h2{font-size:40px;font-weight:700;margin-bottom:20px}body.home-page main section.wrapper#intro .container \
article h3{font-size:30px;font-weight:700;margin-top:2px}body.home-page main section.wrapper#intro \
.container article p{margin-bottom:0;text-align:center}body.home-page main \
section#cat-list{border-top:1px solid #cdd7dd}body.home-page main \
.card-wrapper{position:relative;max-width:960px;margin:auto;margin-bottom:2rem;background:#fff}body.home-page \
main .card-wrapper .card-item{position:absolute;padding:1rem;width:31.4%;border:1px solid \
gray;border-radius:7px}body.home-page main .card-wrapper .card-item .category \
a.title{font-size:14pt;font-weight:600;min-height:30px;line-height:30px;padding-right:30px}body.home-page \
main .card-wrapper .card-item .category a.title span.label{padding:2px 3px}body.home-page main \
.card-wrapper .card-item div \
a.title{font-size:11pt;min-height:20px;line-height:20px;padding-right:5px}body.home-page main \
.card-wrapper .card-item div a.title \
span.label{font-size:7pt;font-weight:300;vertical-align:top;margin-left:5px;padding:1px \
3px}.card-item{border:1px solid gray}.card-item .category>a.title{color:#444}.card-item \
div>a.title{color:#6a6a6a}#indeximages{line-height:0;-webkit-column-count:20;-webkit-column-gap:0;-moz-column-count:20;-moz-column-gap:0;column-count:20;column-gap:0}#indeximages \
img{width:100%!important;height:auto!important;opacity:1}@media \
(max-width:1920px){#indeximages{-moz-column-count:20;-webkit-column-count:20;column-count:20}}@media \
(max-width:1200px){#indeximages{-moz-column-count:15;-webkit-column-count:4;column-count:4}}@media \
(max-width:1000px){#indeximages{-moz-column-count:12;-webkit-column-count:3;column-count:3}}@media \
(max-width:800px){#indeximages{-moz-column-count:9;-webkit-column-count:2;column-count:2}}@media \
(max-width:400px){#indeximages{-moz-column-count:7;-webkit-column-count:1;column-count:1}}#products-wrappe \
r{padding-top:20px}.explore-products{padding-left:30px;padding-right:30px;margin-top:-10px}.explore-products \
.product-list{width:100%;float:left;padding:0 10px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 \
0 5px 5px;border-radius:0 0 5px \
5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box}.explore-products \
.product-list .explore-product{padding:10px 0;font-size:12px;border-top:1px solid #ccc}.explore-products \
.product-list .explore-product .rownum{font-size:12px;float:left}.explore-products .product-list \
.explore-product .explore-product-imgcolumn{padding-left:5px;padding-right:5px}.explore-products \
.product-list .explore-product \
.imageContainer{height:167px;display:flex;justify-content:center;align-items:center}.explore-products \
.product-list .explore-product .explore-product-image{max-width:95%;max-height:167px}.explore-products \
.product-list .explore-product .contentLeft{float:left;padding-right:0;width:270px}.explore-products \
.product-list .explore-product .contentLeft img{max-width:167px;max-height:167px}.explore-products \
.product-list .explore-product .contentLeft div.productimg{width:167px;height:167px}.explore-products \
.product-list .explore-product .explore-product-details{padding-left:20px}.explore-products .product-list \
.explore-product .explore-product-details \
h3{font-size:24px;font-weight:700;color:#2673b0}.explore-products .product-list .explore-product \
.explore-product-details h3 span.version{font-size:smaller;padding-left:20px}.explore-products \
.product-list .explore-product .explore-product-details \
.title{display:block;margin-bottom:8px}.explore-products .product-list .explore-product \
.explore-product-details .title .username{padding-left:20px}.explore-products .product-list \
.explore-product .explore-product-details .description{display:block;margin-bottom:8px}.explore-products \
.product-list .explore-product .explore-product-details \
.packagetypes{display:block;float:left}.explore-products .product-list .explore-product \
.explore-product-details .packagetypes .packagetypeos{width:100px;float:left}.explore-products \
.product-list .explore-product .explore-product-details \
.productInfo{clear:left;padding-top:5px}.explore-products .product-list .explore-product \
.explore-product-details .productInfo span.cntSupporters{padding-right:20px}.explore-products \
.product-list .explore-product .explore-product-plings{padding:0}.explore-products .product-list \
.explore-product .explore-product-plings .rating{width:50%}.explore-products .product-list \
.explore-product .explore-product-plings \
.progress{margin-bottom:10px;padding:3px;opacity:0;margin-bottom:0;height:12px;opacity:1;background-color:transparent;box-shadow:none;padding:2px}.explore-products \
.product-list .explore-product .explore-product-plings .progress \
.bar{width:4px;max-width:100%;height:14px;background-color:#2673b0;-webkit-border-radius:5px;-moz-border-r \
adius:5px;border-radius:5px;-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;-webkit-box-shadow:inset \
0 6px 0 rgba(255,255,255,.2);-moz-box-shadow:inset 0 6px 0 rgba(255,255,255,.2);box-shadow:inset 0 6px 0 \
rgba(255,255,255,.2)}.explore-products .product-list .explore-product .explore-product-plings .progress \
.bar.no-goal{width:50%;opacity:0}.explore-products .product-list .explore-product .explore-product-plings \
\ No newline at end of file
diff --git a/httpdocs/theme/flatui/js/script.js b/httpdocs/theme/flatui/js/script.js
index 8d7e023d..c0ff1890 100644
--- a/httpdocs/theme/flatui/js/script.js
+++ b/httpdocs/theme/flatui/js/script.js
@@ -891,7 +891,7 @@ var PartialsReview = (function () {
                     } else {
                         $('#review-product-modal').find('input#voteup').val(2);
                         $('#review-product-modal').find('#votelabel').empty()
-                            .append('<a class="btn btn-danger active" style="line-height: 10px;"><span \
class="fa fa-minus"></span></a> Add Comment (min. 5 char): '); +                            .append('<a \
class="btn btn-danger active" style="line-height: 10px;"><span class="fa fa-minus"></span></a> Add \
Comment (min. 5 char) <span style="font-size:10px; display:block"> Please explain the reason for downvote \
                to help the creator to make it better </span> ');
                         $('#review-product-modal').find('#commenttext').val('-');
                         $('#review-product-modal').find('#commenttext').removeAttr("disabled");
                         $('#review-product-modal').find(':submit').removeAttr("disabled").css("display", \
                "block");
diff --git a/httpdocs/theme/flatui/less/stylesheet.less b/httpdocs/theme/flatui/less/stylesheet.less
index 2fca6877..2ec2556c 100644
--- a/httpdocs/theme/flatui/less/stylesheet.less
+++ b/httpdocs/theme/flatui/less/stylesheet.less
@@ -2431,17 +2431,17 @@ span.page-views {
       .product-row {
 
         .product-thumbnail {
-            width: 42px;
-            height: 42px;
-            margin: 10px;
+            width: 75px;
+            height: 77px;
+            margin: 7px;
             padding: 10px;
             position: relative;
 
           img {
               border-radius: 5px;
               border: 1px solid #b2b2b2;
-              height: 50px;
-              width: 50px;
+              height: 75px;
+              width: 75px;
           }
         }
       }
diff --git a/httpdocs/theme/react/all.js b/httpdocs/theme/react/all.js
index 9024eba7..2e1cb6cd 100644
--- a/httpdocs/theme/react/all.js
+++ b/httpdocs/theme/react/all.js
@@ -269,6 +269,26 @@ window.productHelpers = function () {
     return userRating;
   }
 
+  function calculateProductLaplaceScore(ratings) {
+    let laplace_score = 0;
+    let upvotes = 0;
+    let downvotes = 0;
+    ratings.forEach(function (rating, index) {
+      console.log(rating.active);
+      if (rating.rating_active === "1") {
+        console.log(rating.user_like);
+        if (rating.user_like === "1") {
+          upvotes += 1;
+        } else if (rating.user_like === "0") {
+          downvotes += 1;
+        }
+      }
+    });
+    laplace_score = Math.round((upvotes + 6) / (upvotes + downvotes + 12), 2) * 100;
+    console.log(laplace_score);
+    return laplace_score;
+  }
+
   return {
     getNumberOfProducts,
     generatePaginationObject,
@@ -276,7 +296,8 @@ window.productHelpers = function () {
     getActiveRatingsNumber,
     getFilesSummary,
     checkIfLikedByUser,
-    getLoggedUserRatingOnProduct
+    getLoggedUserRatingOnProduct,
+    calculateProductLaplaceScore
   };
 }();
 class ProductGroupScrollWrapper extends React.Component {
@@ -1217,15 +1238,19 @@ class Pagination extends React.Component {
   }
 
   componentDidMount() {
-    const itemsPerPage = 1000;
+    console.log('paginstion - component did mount');
+    console.log(store.getState());
+    const itemsPerPage = 50;
     const numPages = Math.ceil(this.props.pagination.totalcount / itemsPerPage);
     const pagination = productHelpers.generatePaginationObject(numPages, window.location.pathname, \
                this.props.currentCategoy, this.props.filters.order, this.props.pagination.page);
-    this.setState({ pagination: pagination });
+    this.setState({ pagination: pagination }, function () {
+      console.log(pagination);
+    });
   }
 
   render() {
     let paginationDisplay;
-    if (this.state.pagination && this.props.pagination.totalcount > 1000) {
+    if (this.state.pagination && this.props.pagination.totalcount > 50) {
       const pagination = this.state.pagination.map((pi, index) => {
 
         let numberDisplay;
@@ -2189,20 +2214,29 @@ class ProductViewHeaderRatings extends React.Component {
     });
   }
 
-  onRatingFormResponse(response, val) {
+  onRatingFormResponse(modalResponse, val) {
     const self = this;
-    jQuery.ajax({
-      data: {},
-      url: '/p/' + this.props.product.project_id + '/loadratings/',
-      method: 'get',
-      error: function (jqXHR, textStatus, errorThrown) {
-        self.setState({ errorMsg: textStatus + " " + errorThrown });
-        $('#ratings-form-modal').modal('hide');
-      },
-      success: function (response) {
-        store.dispatch(setProductRatings(response));
-        $('#ratings-form-modal').modal('hide');
-      }
+    this.setState({ errorMsg: '' }, function () {
+      jQuery.ajax({
+        data: {},
+        url: '/p/' + this.props.product.project_id + '/loadratings/',
+        method: 'get',
+        error: function (jqXHR, textStatus, errorThrown) {
+          self.setState({ errorMsg: textStatus + " " + errorThrown });
+          $('#ratings-form-modal').modal('hide');
+        },
+        success: function (response) {
+          console.log('on rating form response');
+          console.log(response);
+          // const laplace_score = productHelpers.calculateProductLaplaceScore(response);
+          store.dispatch(setProductRatings(response));
+          if (modalResponse.status !== "ok") self.setState({ errorMsg: modalResponse.status + " - " + \
modalResponse.message }); +          self.setState({ laplace_score: modalResponse.laplace_score }, \
function () { +            console.log(this.state.laplace_score);
+          });
+          $('#ratings-form-modal').modal('hide');
+        }
+      });
     });
   }
 
@@ -2220,10 +2254,7 @@ class ProductViewHeaderRatings extends React.Component {
       });
     }
 
-    let ratingsBarCss;
-    if (this.props.product.laplace_score < 50) {
-      ratingsBarCss = 'red';
-    }
+    console.log(this.state.laplace_score);
 
     return React.createElement(
       'div',
@@ -2240,7 +2271,7 @@ class ProductViewHeaderRatings extends React.Component {
       React.createElement(
         'div',
         { className: 'ratings-bar-holder' },
-        React.createElement('div', { className: ratingsBarCss + " ratings-bar", style: { "width": \
this.state.laplace_score + "%" } }), +        React.createElement('div', { className: 'green \
                ratings-bar', style: { "width": this.state.laplace_score + "%" } }),
         React.createElement('div', { className: 'ratings-bar-empty', style: { "width": 100 - \
this.state.laplace_score + "%" } })  ),
       React.createElement(
@@ -2253,7 +2284,11 @@ class ProductViewHeaderRatings extends React.Component {
         )
       ),
       ratingsFormModalDisplay,
-      this.state.errorMsg
+      React.createElement(
+        'p',
+        { className: 'ratings-bar-error-msg-container' },
+        this.state.errorMsg
+      )
     );
   }
 }
@@ -2265,6 +2300,7 @@ class RatingsFormModal extends React.Component {
       action: this.props.action
     };
     this.submitRatingForm = this.submitRatingForm.bind(this);
+    this.onTextAreaInputChange = this.onTextAreaInputChange.bind(this);
   }
 
   componentDidMount() {
@@ -2279,6 +2315,10 @@ class RatingsFormModal extends React.Component {
     });
   }
 
+  onTextAreaInputChange(e) {
+    this.setState({ text: e.target.value });
+  }
+
   submitRatingForm() {
     this.setState({ loading: true }, function () {
       const self = this;
@@ -2289,6 +2329,8 @@ class RatingsFormModal extends React.Component {
         v = '2';
       }
 
+      console.log(this.state.text);
+
       jQuery.ajax({
         data: {
           p: this.props.product.project_id,
@@ -2303,7 +2345,7 @@ class RatingsFormModal extends React.Component {
         method: 'post',
         error: function () {
           const msg = "Service is temporarily unavailable. Our engineers are working quickly to resolve \
                this issue. <br/>Find out why you may have encountered this error.";
-          this.setState({ msg: msg });
+          self.setState({ msg: msg });
         },
         success: function (response) {
           self.props.onRatingFormResponse(response, v);
@@ -2338,7 +2380,7 @@ class RatingsFormModal extends React.Component {
           'Close'
         );
       } else if (this.state.text) {
-        textAreaDisplay = React.createElement('textarea', { defaultValue: this.state.text, className: \
'form-control' }); +        textAreaDisplay = React.createElement('textarea', { onChange: \
this.onTextAreaInputChange, defaultValue: this.state.text, className: 'form-control' });  if \
(this.state.loading !== true) {  
           if (this.state.msg) {
@@ -2794,7 +2836,7 @@ class ProductViewContent extends React.Component {
         files: this.props.product.r_files
       });
     } else if (this.props.tab === 'ratings') {
-      currentTabDisplay = React.createElement(ProductViewRatingsTab, {
+      currentTabDisplay = React.createElement(ProductViewRatingsTabWrapper, {
         ratings: this.props.product.r_ratings
       });
     } else if (this.props.tab === 'favs') {
@@ -3334,7 +3376,7 @@ class ProductViewRatingsTab extends React.Component {
   }
 
   render() {
-
+    console.log(this.props);
     const ratingsLikes = this.props.ratings.filter(this.filterLikes);
     const ratingsDislikes = this.props.ratings.filter(this.filterDislikes);
     const ratingsActive = this.props.ratings.filter(this.filterActive);
@@ -3422,6 +3464,21 @@ class ProductViewRatingsTab extends React.Component {
   }
 }
 
+const mapStateToProductViewRatingsTabProps = state => {
+  const ratings = state.product.r_ratings;
+  return {
+    ratings
+  };
+};
+
+const mapDispatchToProductViewRatingsTabProps = dispatch => {
+  return {
+    dispatch
+  };
+};
+
+const ProductViewRatingsTabWrapper = ReactRedux.connect(mapStateToProductViewRatingsTabProps, \
mapDispatchToProductViewRatingsTabProps)(ProductViewRatingsTab); +
 class RatingItem extends React.Component {
   constructor(props) {
     super(props);
diff --git a/httpdocs/theme/react/app-metaheader/_app-helpers.js \
b/httpdocs/theme/react/app-metaheader/_app-helpers.js new file mode 100644
index 00000000..59d1b65a
--- /dev/null
+++ b/httpdocs/theme/react/app-metaheader/_app-helpers.js
@@ -0,0 +1,17 @@
+window.appHelpers = (function(){
+
+  function generateMenuGroupsArray(domains){
+    let menuGroups = [];
+    domains.forEach(function(domain,index){
+      if (menuGroups.indexOf(domain.menugroup) === -1){
+        menuGroups.push(domain.menugroup);
+      }
+    });
+    return menuGroups;
+  }
+
+  return {
+    generateMenuGroupsArray
+  }
+
+}());
diff --git a/httpdocs/theme/react/app-metaheader/app.js b/httpdocs/theme/react/app-metaheader/app.js
new file mode 100644
index 00000000..68f72131
--- /dev/null
+++ b/httpdocs/theme/react/app-metaheader/app.js
@@ -0,0 +1,281 @@
+class MetaHeader extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {
+      baseUrl:baseUrl,
+      blogUrl:blogUrl,
+      loginUrl:loginUrl,
+      domains:domains,
+      user:user,
+      sName:sName,
+      loading:false
+    };
+  }
+
+  componentDidMount() {
+    console.log(this.state);
+  }
+
+  render(){
+
+    return (
+      <nav id="metaheader-nav" className="metaheader">
+        <div className="metamenu">
+          <DomainsMenu
+            domains={this.state.domains}
+            baseUrl={this.state.baseUrl}
+            sName={this.state.sName}
+          />
+          <UserMenu
+            user={this.state.user}
+            blogUrl={this.state.blogUrl}
+            loginUrl={this.state.loginUrl}
+          />
+        </div>
+      </nav>
+    )
+  }
+}
+
+class DomainsMenu extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {};
+  }
+
+  componentDidMount() {
+    const menuGroups = appHelpers.generateMenuGroupsArray(this.props.domains);
+    this.setState({menuGroups:menuGroups});
+  }
+
+  render(){
+    let menuGroupsDisplayLeft, menuGroupsDisplayRight;
+    if (this.state.menuGroups){
+      menuGroupsDisplayLeft = this.state.menuGroups.slice(0,2).map((mg,i) => (
+        <DomainsMenuGroup
+          key={i}
+          domains={this.props.domains}
+          menuGroup={mg}
+          sName={this.props.sName}
+        />
+      ));
+      menuGroupsDisplayRight = this.state.menuGroups.slice(2).map((mg,i) => (
+        <DomainsMenuGroup
+          key={i}
+          domains={this.props.domains}
+          menuGroup={mg}
+          sName={this.props.sName}
+        />
+      ));
+    }
+    return (
+      <ul className="metaheader-menu left" id="domains-menu">
+        <li className="active">
+          <a href={"http://"+this.props.baseUrl}>
+            <img src="/images/system/ocs-logo-rounded-16x16.png" className="logo"/>
+            openDesktop.org :
+          </a>
+        </li>
+        <li id="domains-dropdown-menu" className="dropdown">
+          <a id="dropdownMenu3"
+          data-toggle="dropdown"
+          aria-haspopup="true"
+          aria-expanded="true">Themes & Apps</a>
+          <ul className="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu3">
+            <li className="submenu-container">
+              <ul>
+                {menuGroupsDisplayLeft}
+              </ul>
+            </li>
+            <li className="submenu-container">
+              <ul>
+                {menuGroupsDisplayRight}
+              </ul>
+            </li>
+          </ul>
+        </li>
+        <li id="discussion-boards" className="dropdown">
+          <a id="dropdownMenu4"
+          data-toggle="dropdown"
+          aria-haspopup="true"
+          aria-expanded="true">Discussion Boards</a>
+          <ul className="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu4">
+            <li><a href="https://forum.opendesktop.org/c/general">General</a></li>
+            <li><a href="https://forum.opendesktop.org/c/themes-and-apps">Themes & Apps</a></li>
+            <li><a>Coding</a></li>
+          </ul>
+        </li>        
+      </ul>
+    )
+  }
+}
+
+class DomainsMenuGroup extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {};
+    this.filterDomainsByMenuGroup = this.filterDomainsByMenuGroup.bind(this);
+  }
+
+  filterDomainsByMenuGroup(domain){
+    if (domain.menugroup === this.props.menuGroup){
+      return domain;
+    }
+  }
+
+  render(){
+    const domainsDisplay = this.props.domains.filter(this.filterDomainsByMenuGroup).map((domain,index) \
=> ( +      <li key={index}>
+        <a href={"http://" + domain.menuhref}>{domain.name}</a>
+      </li>
+    ));
+
+    return (
+      <li>
+        <a href="#"><b>{this.props.menuGroup}</b></a>
+        <ul className="domains-sub-menu">
+          {domainsDisplay}
+        </ul>
+      </li>
+    )
+  }
+}
+
+class UserMenu extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {};
+  }
+
+  render(){
+    let userDropdownDisplay;
+    if (this.props.user){
+      userDropdownDisplay = (
+        <UserLoginMenuContainer
+          user={this.props.user}
+        />
+      );
+    } else {
+      userDropdownDisplay = (
+        <li id="user-login-container"><a href={this.props.loginUrl} className="btn \
btn-metaheader">Login</a></li> +      )
+    }
+
+    return (
+      <div id="user-menu-container" className="right">
+        <ul className="metaheader-menu" id="user-menu">
+          <li><a href="/community">Community</a></li>
+          <li><a href={this.props.blogUrl} target="_blank">Blog</a></li>
+          <li><a id="plingList" className="popuppanel" href="/plings">What are Plings?</a></li>
+          <li><a id="ocsapiContent" className="popuppanel" \
href="/partials/ocsapicontent.phtml">API</a></li> +          <li><a id="aboutContent" \
className="popuppanel" href="/partials/about.phtml" >About</a></li> +          \
<UserContextMenuContainer/> +          {userDropdownDisplay}
+        </ul>
+      </div>
+    )
+  }
+}
+
+class UserContextMenuContainer extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {};
+  }
+
+  render(){
+    return (
+      <li id="user-context-menu-container">
+        <div className="user-dropdown">
+          <button
+            className="btn btn-default dropdown-toggle"
+            type="button"
+            id="dropdownMenu2"
+            data-toggle="dropdown"
+            aria-haspopup="true"
+            aria-expanded="true">
+            <span className="glyphicon glyphicon-th"></span>
+          </button>
+          <ul className="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenu2">
+            <li id="opendesktop-link-item">
+              <a href="http://www.opendesktop.org">
+                <div className="icon"></div>
+                <span>Themes <br/> & Apps</span>
+              </a>
+            </li>
+            <li id="discourse-link-item">
+              <a href="http://discourse.opendesktop.org/">
+                <div className="icon"></div>
+                <span>Discussion <br/> Boards</span>
+              </a>
+            </li>
+            <li id="opencode-link-item">
+              <a href="https://www.opencode.net/">
+                <div className="icon"></div>
+                <span>Coding <br/> Tools</span>
+              </a>
+            </li>
+          </ul>
+        </div>
+      </li>
+    )
+  }
+}
+
+class UserLoginMenuContainer extends React.Component {
+  constructor(props){
+  	super(props);
+  	this.state = {};
+  }
+
+  render(){
+    return (
+      <li id="user-login-menu-container">
+        <div className="user-dropdown">
+          <button
+            className="btn btn-default dropdown-toggle"
+            type="button"
+            id="userLoginDropdown"
+            data-toggle="dropdown"
+            aria-haspopup="true"
+            aria-expanded="true">
+            <img src={this.props.user.profile_image_url}/>
+          </button>
+          <ul className="dropdown-menu dropdown-menu-right" aria-labelledby="userLoginDropdown">
+            <li id="user-info-menu-item">
+              <div id="user-info-section">
+                <div className="user-avatar">
+                  <div className="no-avatar-user-letter">
+                    <img src={this.props.user.profile_image_url}/>
+                    <a className="change-profile-pic">
+                      Change
+                    </a>
+                  </div>
+                </div>
+                <div className="user-details">
+                  <ul>
+                    <li><b>{this.props.user.username}</b></li>
+                    <li>{this.props.user.mail}</li>
+                    <li></li>
+                    <li><a>Profile</a> - <a>Privacy</a></li>
+                    <li><button className="btn btn-default btn-metaheader">Account</button></li>
+                  </ul>
+                </div>
+              </div>
+            </li>
+            <li id="main-seperator" role="separator" className="divider"></li>
+            <li className="buttons">
+              <button className="btn btn-default btn-metaheader">Add Account</button>
+              <button className="btn btn-default pull-right btn-metaheader"><a href="/register">Sign \
Up</a></button> +            </li>
+          </ul>
+        </div>
+      </li>
+    )
+  }
+}
+
+ReactDOM.render(
+    <MetaHeader />,
+    document.getElementById('metaheader')
+);
diff --git a/httpdocs/theme/react/app/__product-helpers.js \
b/httpdocs/theme/react/app/__product-helpers.js index b80fa0ce..0554d690 100644
--- a/httpdocs/theme/react/app/__product-helpers.js
+++ b/httpdocs/theme/react/app/__product-helpers.js
@@ -123,6 +123,26 @@ window.productHelpers = (function(){
     return userRating;
   }
 
+  function calculateProductLaplaceScore(ratings){
+    let laplace_score = 0;
+    let upvotes = 0;
+    let downvotes = 0;
+    ratings.forEach(function(rating,index){
+      console.log(rating.active);
+      if (rating.rating_active === "1"){
+        console.log(rating.user_like);
+        if (rating.user_like === "1"){
+          upvotes += 1;
+        } else if (rating.user_like === "0") {
+          downvotes += 1;
+        }
+      }
+    });
+    laplace_score = (Math.round(((upvotes + 6) / ((upvotes + downvotes) + 12)),2) * 100);
+    console.log(laplace_score);
+    return laplace_score;
+  }
+
   return {
     getNumberOfProducts,
     generatePaginationObject,
@@ -130,6 +150,7 @@ window.productHelpers = (function(){
     getActiveRatingsNumber,
     getFilesSummary,
     checkIfLikedByUser,
-    getLoggedUserRatingOnProduct
+    getLoggedUserRatingOnProduct,
+    calculateProductLaplaceScore
   }
 }());
diff --git a/httpdocs/theme/react/app/_explore.js b/httpdocs/theme/react/app/_explore.js
index e3ef8603..d84950c1 100644
--- a/httpdocs/theme/react/app/_explore.js
+++ b/httpdocs/theme/react/app/_explore.js
@@ -260,15 +260,19 @@ class Pagination extends React.Component {
   }
 
   componentDidMount() {
-    const itemsPerPage = 1000;
+    console.log('paginstion - component did mount');
+    console.log(store.getState());
+    const itemsPerPage = 50;
     const numPages = Math.ceil(this.props.pagination.totalcount / itemsPerPage);
     const pagination = \
productHelpers.generatePaginationObject(numPages,window.location.pathname,this.props.currentCategoy,this.props.filters.order, \
                this.props.pagination.page);
-    this.setState({pagination:pagination});
+    this.setState({pagination:pagination},function(){
+      console.log(pagination);
+    });
   }
 
   render(){
     let paginationDisplay;
-    if (this.state.pagination && this.props.pagination.totalcount > 1000){
+    if (this.state.pagination && this.props.pagination.totalcount > 50){
       const pagination = this.state.pagination.map((pi,index) => {
 
         let numberDisplay;
diff --git a/httpdocs/theme/react/app/_product-page.js b/httpdocs/theme/react/app/_product-page.js
index d2e4cfb0..5e876a0c 100644
--- a/httpdocs/theme/react/app/_product-page.js
+++ b/httpdocs/theme/react/app/_product-page.js
@@ -264,20 +264,29 @@ class ProductViewHeaderRatings extends React.Component {
     });
   }
 
-  onRatingFormResponse(response,val){
+  onRatingFormResponse(modalResponse,val){
     const self = this;
-    jQuery.ajax({
-      data:{},
-      url:'/p/'+this.props.product.project_id+'/loadratings/',
-      method:'get',
-      error:function(jqXHR,textStatus,errorThrown){
-        self.setState({errorMsg:textStatus + " " + errorThrown});
-        $('#ratings-form-modal').modal('hide');
-      },
-      success: function(response){
-        store.dispatch(setProductRatings(response));
-        $('#ratings-form-modal').modal('hide');
-      }
+    this.setState({errorMsg:''},function(){
+      jQuery.ajax({
+        data:{},
+        url:'/p/'+this.props.product.project_id+'/loadratings/',
+        method:'get',
+        error:function(jqXHR,textStatus,errorThrown){
+          self.setState({errorMsg:textStatus + " " + errorThrown});
+          $('#ratings-form-modal').modal('hide');
+        },
+        success: function(response){
+          console.log('on rating form response');
+          console.log(response);
+          // const laplace_score = productHelpers.calculateProductLaplaceScore(response);
+          store.dispatch(setProductRatings(response));
+          if (modalResponse.status !== "ok") self.setState({errorMsg:modalResponse.status + " - " + \
modalResponse.message}); +          self.setState({laplace_score:modalResponse.laplace_score},function(){
+            console.log(this.state.laplace_score);
+          });
+          $('#ratings-form-modal').modal('hide');
+        }
+      });
     });
   }
 
@@ -297,11 +306,8 @@ class ProductViewHeaderRatings extends React.Component {
       );
     }
 
-    let ratingsBarCss;
-    if (this.props.product.laplace_score < 50){
-      ratingsBarCss = 'red';
-    }
 
+    console.log(this.state.laplace_score);
 
     return (
       <div className="ratings-bar-container">
@@ -309,14 +315,14 @@ class ProductViewHeaderRatings extends React.Component {
           <i className="material-icons">remove</i>
         </div>
         <div className="ratings-bar-holder">
-          <div className={ratingsBarCss + " ratings-bar"} style={{"width":this.state.laplace_score + \
"%"}}></div> +          <div className="green ratings-bar" style={{"width":this.state.laplace_score + \
                "%"}}></div>
           <div className="ratings-bar-empty" style={{"width":(100 - this.state.laplace_score) + \
"%"}}></div>  </div>
         <div className="ratings-bar-right" onClick={() => this.onRatingBtnClick('plus')}>
           <i className="material-icons">add</i>
         </div>
         {ratingsFormModalDisplay}
-        {this.state.errorMsg}
+        <p className="ratings-bar-error-msg-container">{this.state.errorMsg}</p>
       </div>
     )
   }
@@ -329,6 +335,7 @@ class RatingsFormModal extends React.Component {
       action:this.props.action
     };
     this.submitRatingForm = this.submitRatingForm.bind(this);
+    this.onTextAreaInputChange = this.onTextAreaInputChange.bind(this);
   }
 
   componentDidMount() {
@@ -343,6 +350,10 @@ class RatingsFormModal extends React.Component {
     });
   }
 
+  onTextAreaInputChange(e){
+    this.setState({text:e.target.value});
+  }
+
   submitRatingForm(){
     this.setState({loading:true},function(){
       const self = this;
@@ -353,6 +364,8 @@ class RatingsFormModal extends React.Component {
         v = '2';
       }
 
+      console.log(this.state.text);
+
       jQuery.ajax({
         data:{
           p:this.props.product.project_id,
@@ -367,7 +380,7 @@ class RatingsFormModal extends React.Component {
         method:'post',
         error: function(){
           const msg = "Service is temporarily unavailable. Our engineers are working quickly to resolve \
                this issue. <br/>Find out why you may have encountered this error.";
-          this.setState({msg:msg});
+          self.setState({msg:msg});
         },
         success: function(response){
           self.props.onRatingFormResponse(response,v);
@@ -395,7 +408,7 @@ class RatingsFormModal extends React.Component {
         );
       } else if (this.state.text) {
         textAreaDisplay = (
-          <textarea defaultValue={this.state.text} className="form-control"></textarea>
+          <textarea onChange={this.onTextAreaInputChange} defaultValue={this.state.text} \
className="form-control"></textarea>  );
         if (this.state.loading !== true){
 
@@ -754,7 +767,7 @@ class ProductViewContent extends React.Component {
       )
     } else if (this.props.tab === 'ratings'){
       currentTabDisplay = (
-        <ProductViewRatingsTab
+        <ProductViewRatingsTabWrapper
           ratings={this.props.product.r_ratings}
         />
       );
@@ -1154,7 +1167,7 @@ class ProductViewRatingsTab extends React.Component {
   }
 
   render(){
-
+    console.log(this.props);
     const ratingsLikes = this.props.ratings.filter(this.filterLikes);
     const ratingsDislikes = this.props.ratings.filter(this.filterDislikes);
     const ratingsActive = this.props.ratings.filter(this.filterActive);
@@ -1206,6 +1219,24 @@ class ProductViewRatingsTab extends React.Component {
   }
 }
 
+const mapStateToProductViewRatingsTabProps = (state) => {
+  const ratings = state.product.r_ratings;
+  return {
+    ratings
+  }
+}
+
+const mapDispatchToProductViewRatingsTabProps = (dispatch) => {
+  return {
+    dispatch
+  }
+}
+
+const ProductViewRatingsTabWrapper = ReactRedux.connect(
+  mapStateToProductViewRatingsTabProps,
+  mapDispatchToProductViewRatingsTabProps
+)(ProductViewRatingsTab);
+
 class RatingItem extends React.Component {
   constructor(props){
   	super(props);
diff --git a/httpdocs/theme/react/assets/css/style.css b/httpdocs/theme/react/assets/css/style.css
index 4debc219..d8b00d25 100644
--- a/httpdocs/theme/react/assets/css/style.css
+++ b/httpdocs/theme/react/assets/css/style.css
@@ -1 +1 @@
-header div.container.header{height:110px}#user-dropdown \
.dropdown-menu{width:300px;padding-top:0;overflow:hidden}#user-dropdown .dropdown-menu \
#user-info-section{height:100px;padding:10px 20px;background:#f8f8f8}#user-dropdown .dropdown-menu \
#user-info-section .user-avatar{width:40%;height:80px;width:80px;float:left}#user-dropdown .dropdown-menu \
#user-info-section .user-avatar \
.no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:center;line-height:80px;font-size:50px;color:white}#user-dropdown \
.dropdown-menu #user-info-section .user-details{width:175px;padding-left:20px;float:left}#user-dropdown \
.dropdown-menu #main-seperator{margin-top:0}#main-header{background:#4a86cf;width:100%;height:70px;padding-left:275px;position:relative}#main-header \
.logo-header{background-image:none;display:block;height:100px;left:6px;position:absolute;top:-10px;width:265px;z-index:999;overflow:hidden}#main-header \
.user-menu-container{float:right;padding:15px;height:70px;width:auto}#main-header .user-menu-container \
ul{float:right;width:auto;padding:0;margin:0}#main-header #nav-top #nav-left{padding:15px}#main-header \
#nav-top #nav-left form#search{padding:7px;margin-right:7px}#main-header #nav-top #nav-left form#search \
input.content-search{border-radius:10px;border:1px solid #ccc;height:26px;padding:0 \
8px}.products-showcase .products-container \
.square{width:14.28571%;position:relative;float:left;margin-bottom:15px}.products-showcase \
.products-container .square:after{content:"";display:block;padding-bottom:120%}.products-showcase \
.products-container .content{position:absolute;width:100%;height:100%;padding:0 6px}.products-showcase \
.products-container .content a{display:block;width:100%;height:100%;position:relative}.products-showcase \
.products-container .content \
.product-wrapper{position:relative;width:100%;height:100%;background-color:white}.products-showcase \
.products-container .content \
.product-image-container{position:absolute;height:100%;width:100%;overflow:hidden;padding-bottom:60px}.products-showcase \
.products-container .content .product-image-container \
figure{width:100%;height:100%;position:relative}.products-showcase .products-container .content \
.product-image-container figure \
span{position:absolute;bottom:5px;left:0;font-weight:500;color:#636363;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.2;font-weight:500 \
!important;width:100%;padding:0 10px;text-align:center}.products-showcase .products-container .content \
.product-image-container figure \
img{position:absolute;top:50%;left:50%;width:110px;height:110px;margin:-55px 0 0 \
-55px;border-radius:100%}.products-showcase .products-container .content .product-image-container figure \
img.squared{border-radius:0}.products-showcase .products-container .content .product-image-container \
figure img.full{position:relative;width:100%;height:100%;margin:0;border-radius:0;top:0;left:0}.products-showcase \
.products-container .content .product-image-container figure img.padded{border-radius:0;border:10px solid \
white}.products-showcase .products-container .content .product-image-container figure \
img.rounded-corners{border-radius:20%}.products-showcase .products-container .content \
.product-image-container figure img.very-rounded-corners{border-radius:40%}.products-showcase \
.products-container .content .product-info{width:100%;height:60px;color:white;padding:14px \
16px;position:absolute;bottom:0;left:0;background-color:rgba(0,0,0,0.38)}.products-showcase \
.products-container .content .product-info \
span{width:100%;float:left;overflow:hidden;text-overflow:ellipsis;line-height:1.2;font-weight:500 \
!important}.products-showcase .products-container .content .product-info \
span.product-info-title{font-size:90%}.products-showcase .products-container .content .product-info \
span.product-info-description{font-size:70%;height:30px;line-height:15px;overflow:hidden;text-overflow:ell \
ipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.products-showcase \
.products-container .content \
.product-info.music-image{padding-right:40px;padding-left:40px;padding-top:20px;text-align:center}.products-showcase \
.products-container .content .product-info.music-image \
.material-icons{position:absolute;top:18px}.products-showcase .products-container .content \
.product-info.music-image .material-icons.left-icon{left:10px}.products-showcase .products-container \
.content .product-info.music-image .material-icons.right-icon{right:10px}.products-showcase \
.products-container .content:hover .product-wrapper{background-color:#c1c1c1}.explore-products-container \
.product-group-scroll-wrapper .product-group-scroll-loading-container{width:100%;float:left;padding:20px \
0}.explore-products-container .product-group-scroll-wrapper .product-group-scroll-loading-container \
.icon-wrapper{display:table;margin:0 auto}.explore-products-container \
#pagination-container{text-align:center}.explore-products-container #pagination-container \
.wrapper{margin:0 auto;display:table;width:auto}.explore-products-container #pagination-container \
.wrapper ul{padding:0;margin:0;list-style-type:none}.explore-products-container #pagination-container \
.wrapper ul li{float:left;width:auto;margin-right:5px}.explore-products-container #pagination-container \
.wrapper ul li a{font-size:18px}.explore-products-container #pagination-container .wrapper ul li a \
.num-wrap{display:block;float:left}.explore-products-container #pagination-container .wrapper ul li a \
.num-wrap span,.explore-products-container #pagination-container .wrapper ul li a .num-wrap \
i{display:block;float:left}.explore-products-container #pagination-container .wrapper ul li \
a.active{font-weight:500;text-decoration:underline}.explore-top-bar{margin-bottom:20px;border-bottom:2px \
solid #ccc;float:left;width:100%}.explore-top-bar .item{padding:5px 10px;border-bottom:2px solid \
transparent;font-size:14px;margin-bottom:-2px;float:left;cursor:pointer}.explore-top-bar \
.item.active{border-bottom-color:#2673b0}.explore-top-bar \
.item:hover{border-bottom-color:#368ed3}.cards{width:100%;float:left}.cards \
.user-card-item{width:16.6666%;padding:0 5px;float:left}.cards .user-card-item .card-content{border:5px \
solid #ccc;border-radius:10px;padding:5px;font-size:15px;float:left;height:auto;text-align:center}.cards \
.user-card-item .card-content .user-avatar{padding-bottom:5px;margin-bottom:5px}.cards .user-card-item \
.card-content .user-avatar img{max-width:100%;height:auto;border-radius:100%}.cards .user-card-item \
.card-content span{display:block;width:100%;float:left}.cards .user-card-item .card-content span \
i{font-size:20px}.cards .user-card-item .card-content span \
img{width:23px;height:23px;display:table;margin:0 auto;margin-bottom:4px}.modal .modal-dialog \
.modal-content .modal-header{height:70px}.modal .modal-dialog .modal-content .modal-header \
.action-icon-container{position:absolute;left:15px;top:15px;height:40px;width:40px;text-align:center;font-size:40px;line-height:35px;border:1px \
solid;border-radius:5px}.modal .modal-dialog .modal-content .modal-header \
.action-icon-container.minus{color:#fff;background-color:#c9302c;border-color:#ac2925}.modal \
.modal-dialog .modal-content .modal-header \
.action-icon-container.plus{color:#fff;background-color:#449d44;border-color:#398439;line-height:40px}.modal \
.modal-dialog .modal-content .modal-header \
.modal-title{text-transform:initial;padding-left:50px;height:40px;line-height:32px}.modal .modal-dialog \
.modal-content .modal-header .close{position:absolute;top:15px;right:15px}.modal .modal-dialog \
.modal-content .modal-footer{text-align:center}.modal .modal-dialog .modal-content .modal-footer \
.glyphicon{display:table;margin:0 auto;float:none}table thead tr th,table tbody tr th,table thead tr \
td,table tbody tr td{text-align:left !important;font-size:13px !important;font-weight:500 \
!important;padding:12px 8px !important}#app-root{font-family:Source Sans Pro,Source \
Sans,sans-serif;font-size:13pt;font-weight:400;line-height:1.8}#app-root .container{width:100% \
!important;padding:0 10%}#app-root .row{margin-left:-6px;margin-right:-6px}#app-root \
*{font-weight:300}#app-root .mdl-button{text-transform:capitalize !important;font-size:14px \
!important;font-weight:500 !important;font-family:Source Sans Pro,Source Sans,sans-serif \
!important}#app-root .mdl-button#become-a-supporter{width:100%;font-size:20px \
!important;text-transform:none !important;padding-top:15px;padding-bottom:15px;height:auto \
!important;border-radius:8px !important;line-height:1}#app-root .section{padding:20px 0}#app-root \
.section .section-header{position:relative}#app-root .section .section-header \
.actions{position:absolute;top:5px;right:0}#app-root .section h1,#app-root .section h2,#app-root .section \
h3,#app-root .section h4,#app-root .section h5,#app-root .section \
h6{width:100%;margin-top:0;font-weight:300;color:black !important}#app-root .section \
h1{width:100%;margin-top:0;font-weight:300;color:black \
!important;font-size:24px;margin-bottom:15px}#app-root .section \
h2{padding-bottom:0;font-size:40px;margin-bottom:1em}#app-root .section \
h3{font-size:28px;margin-bottom:10px;height:40px}#app-root #homepage .actions \
.mdl-button+.mdl-button{margin-left:3px}#app-root #homepage \
#introduction{padding-top:60px;margin-bottom:30px}#app-root #homepage #introduction \
p{max-width:700px;font-size:14pt;line-height:1.4;margin-bottom:45px}#app-root #homepage #introduction \
.mdl-button img{height:20px;margin-right:5px;margin-top:-3px}#explore-page{padding:20px}#explore-page \
.main-content-container{width:100%;float:left;padding-left:270px;padding-right:70px;position:relative}#explore-page \
.right-sidebar-container{display:none}#explore-page .right-sidebar-container \
.ers-section{float:left;width:100%;padding:10px}#explore-page .right-sidebar-container .ers-section \
h3{font-size:20px;font-weight:500}#explore-page .right-sidebar-container .ers-section \
img#download-app{max-width:100%}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container{background:rgba(0,0,0,0.03);padding:10px;overflow:auto}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container \
ul{padding:0;margin:0;list-style-type:none}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ol{margin:0;padding-left:25px;background-color:white}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li{padding-left:40px \
!important;position:relative}#explore-page .right-sidebar-container .ers-section .sidebar-feed-container \
ol li img{position:absolute;top:5px;left:5px;width:30px;height:30px}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li>a{display:block}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li \
span.cat-name{font-size:12px}#explore-page .right-sidebar-container .ers-section .sidebar-feed-container \
ul,#explore-page .right-sidebar-container .ers-section .sidebar-feed-container ol{border:1px solid \
#ccc}#explore-page .right-sidebar-container .ers-section .sidebar-feed-container ul li,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol \
li{padding:5px;background-color:white}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ul li .cm-userinfo,#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ol li \
.cm-userinfo{background:rgba(0,0,0,0.03);float:right;width:48px;text-align:center;padding:3px}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li .cm-userinfo img,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li .cm-userinfo \
img{width:42px;height:42px;border-radius:100%}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ul li .cm-userinfo .username,#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ol li .cm-userinfo \
.username{display:block;text-align:center;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li .title,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li .title,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li .info-row,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li \
.info-row{display:block;width:100%}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ul li .title,#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ol li .title{font-size:15px}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ul li .content,#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ol li .content{font-size:13px;line-height:1}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li .info-row,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li .info-row{overflow:auto}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li .info-row span,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li .info-row \
span{float:left;display:inline-block;font-size:12px}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container ul li .info-row span.comment-counter,#explore-page .right-sidebar-container \
.ers-section .sidebar-feed-container ol li .info-row span.comment-counter{float:right}#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ul li+li,#explore-page \
.right-sidebar-container .ers-section .sidebar-feed-container ol li+li{border-top:1px solid \
#ccc}#explore-page .right-sidebar-container .ers-section .sidebar-feed-container \
.supporter-list-wrapper{border:1px solid \
#ccc;background-color:white;padding:10px;float:left;width:100%}#explore-page .right-sidebar-container \
.ers-section .sidebar-feed-container .supporter-list-wrapper \
.supporter-item{float:left;padding:3px;height:31px;width:31px}#explore-page .right-sidebar-container \
.ers-section .sidebar-feed-container .supporter-list-wrapper .supporter-item \
a{display:block;width:100%;height:100%;float:left}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container .supporter-list-wrapper .supporter-item a \
img{width:25px;height:25px;float:left}#explore-page .right-sidebar-container .ers-section \
.sidebar-feed-container#top-products-container small{margin-top:-10px;display:block}#explore-page \
.left-sidebar-container{position:absolute;top:0;left:0;width:270px;padding:0 30px 0 15px}#explore-page \
.left-sidebar-container aside.explore-left-sidebar{background:rgba(0,0,0,0.03);padding:15px \
0;overflow:auto}#explore-page .left-sidebar-container aside.explore-left-sidebar ul{margin:0;padding:0 \
10px;list-style-type:none;float:left;width:100%}#explore-page .left-sidebar-container \
aside.explore-left-sidebar ul li{float:left;width:100%}#explore-page .left-sidebar-container \
aside.explore-left-sidebar ul li a{width:100%;float:left;height:25px;padding:0 \
5px;background-color:transparent;-webkit-transition:all .2s ease-out;-moz-transition:all .2s \
ease-out;-o-transition:all .2s ease-out;transition:all .2s ease-out}#explore-page .left-sidebar-container \
aside.explore-left-sidebar ul li a span{display:block;width:auto;float:left}#explore-page \
.left-sidebar-container aside.explore-left-sidebar ul li a span.product-counter{float:right}#explore-page \
.left-sidebar-container aside.explore-left-sidebar ul li a:hover,#explore-page .left-sidebar-container \
aside.explore-left-sidebar ul li a.active{background-color:#60bcff;color:white}#explore-page \
.left-sidebar-container aside.explore-left-sidebar ul li ul{border-left:2px solid #ccc;padding:15px 0 0 \
15px}#explore-page .main-content{padding-left:15px;padding-right:0}#explore-page .main-content \
.explore-page-category-title h2{margin-top:0}#explore-page .main-content .explore-page-category-title \
small{font-weight:500;font-size:17px}#product-page{position:relative}#product-page .container{padding:0 \
20%}#product-page #product-download-section{text-align:center;overflow:hidden;height:0;background:rgba(0,0,0,0.5);z-index:1000;-webkit-transition:all \
.5s ease-out;-moz-transition:all .5s ease-out;-o-transition:all .5s ease-out;transition:all .5s \
ease-out}#product-page #product-download-section #files-tab{display:table;margin:20px auto}#product-page \
#product-view-header{background-color:#f7f7f7;padding-bottom:15px}#product-page #product-view-header \
.container .section{padding-left:150px;position:relative}#product-page #product-view-header \
.image-container{position:absolute;left:0;width:140px}#product-page #product-view-header .image-container \
img{position:absolute;top:0;left:0;height:100%;width:100%}#product-page #product-view-header \
.image-container:after{content:"";display:block;padding-bottom:100%}#product-page #product-view-header \
.details-container{width:100%;position:relative}#product-page #product-view-header .details-container \
.info-row{width:100%;float:left;margin-bottom:15px}#product-page #product-view-header .details-container \
.info-row>a{height:30px;display:block;float:left;position:relative}#product-page #product-view-header \
.details-container .info-row>a \
span{display:block;float:left;height:30px;font-size:15px;font-weight:500}#product-page \
#product-view-header .details-container .info-row>a+a{margin-left:10px}#product-page #product-view-header \
.details-container .info-row a.user{padding-left:40px}#product-page #product-view-header \
.details-container .info-row a.user \
span.avatar{width:30px;height:30px;border-radius:100%;display:block;overflow:hidden;position:absolute;left:0;top:0;border:1px \
solid #ccc}#product-page #product-view-header .details-container .info-row a.user span.avatar \
img{width:100%;height:100%;float:left}#product-page #product-view-header .details-container .info-row \
a.user span.username{display:block}#product-page #product-view-header .details-container .info-row \
.product-tags .mdl-chip{height:30px !important;line-height:30px !important;margin:0;margin-top:0 \
!important;margin-left:10px;float:left;display:block;box-shadow:1px 1px 2px rgba(0,0,0,0.5)}#product-page \
#product-view-header .details-container .info-row .product-tags .mdl-chip span{font-weight:500 \
!important;color:#2773b0;margin-right:5px}#product-page #product-view-header .details-container \
\ No newline at end of file
+#metaheader{float:left;width:100%;height:42px}#metaheader \
#metaheader-nav{width:100%;float:left}#metaheader #metaheader-nav .btn-metaheader{padding:0 12px \
!important;border-radius:2px !important;color:white !important;font-size:12px !important;height:30px \
!important;line-height:30px !important;font-weight:bold;border:1px solid \
#3079ed;background:-webkit-linear-gradient(top, #4387fd, #4683ea)}#metaheader #metaheader-nav \
ul.metaheader-menu{padding:0;margin:0;list-style-type:none}#metaheader #metaheader-nav \
ul.metaheader-menu>li{float:left;padding:9px 5px}#metaheader #metaheader-nav \
ul.metaheader-menu>li>a{color:#6a7686;border-radius:5px;padding:5px}#metaheader #metaheader-nav \
ul.metaheader-menu>li>a:active,#metaheader #metaheader-nav \
ul.metaheader-menu>li>a:hover{background-color:#eee}#metaheader #metaheader-nav \
ul.metaheader-menu>li.active>a{background-color:#eee}#metaheader #metaheader-nav \
ul.metaheader-menu>li.active>a img{margin-right:5px}#metaheader #metaheader-nav ul.metaheader-menu>li \
.dropdown-menu::before{content:"";position:absolute;right:356px;top:-8px;width:0;height:0;border-style:solid;border-width:0 \
8.5px 8.5px;border-color:transparent transparent #b7bcc4 \
transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader \
#metaheader-nav ul.metaheader-menu#domains-menu{margin-left:10px}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li{padding-left:0}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li>a{margin:0 10px 0 5px}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li::after{content:"•";color:#E2E2E2}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li:last-of-type::after{content:""}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li.dropdown>ul.dropdown-menu{margin-left:0;margin-top:-9px}#metaheader \
#metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu{position:relative;cursor:pointer;height:60px;z-index:1000}#metaheader \
#metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu:hover \
.dropdown-menu{display:block}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu \
.dropdown-menu{width:400px;top:60px;right:-250px}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu::before{right:356px}#metaheader \
#metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu \
.submenu-container{width:50%;float:left;height:auto}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container \
ul{list-style-type:none;padding:0;margin:0}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li \
a{padding:3px 20px;font-size:12px;color:black}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li \
ul{margin-bottom:10px}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#domains-dropdown-menu .dropdown-menu .submenu-container ul li ul li \
a{padding:3px 30px}#metaheader #metaheader-nav ul.metaheader-menu#domains-menu>li#domains-dropdown-menu \
.dropdown-menu .submenu-container ul li ul li:hover{background-color:#eee}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#discussion-boards{position:relative;cursor:pointer;height:60px;z-index:1000}#metaheader \
#metaheader-nav ul.metaheader-menu#domains-menu>li#discussion-boards \
.dropdown-menu{width:200px;top:60px;right:-43px}#metaheader #metaheader-nav \
ul.metaheader-menu#domains-menu>li#discussion-boards .dropdown-menu::before{right:156px}#metaheader \
#metaheader-nav ul.metaheader-menu#user-menu{margin-right:10px}#metaheader #metaheader-nav \
ul.metaheader-menu#user-menu>li#user-login-container{padding:5px}#metaheader #metaheader-nav \
.user-dropdown{position:relative}#metaheader #metaheader-nav .user-dropdown \
.dropdown-toggle{padding:0;background-color:white;color:#6a7686}#metaheader #metaheader-nav \
.user-dropdown .dropdown-toggle:active{background-color:white;box-shadow:none;outline:none}#metaheader \
#metaheader-nav .user-dropdown .dropdown-toggle \
.glyphicon{font-size:16px;top:1px;font-style:normal;font-weight:100;margin:0 5px}#metaheader \
#metaheader-nav .user-dropdown \
.dropdown-menu{border-radius:0;padding:0;width:320px;top:40px;background:#fff;border:1px solid \
#ccc;border-color:rgba(0,0,0,0.2);color:#000;box-shadow:0 2px 10px rgba(0,0,0,0.2)}#metaheader \
#metaheader-nav .user-dropdown \
.dropdown-menu::before{content:"";position:absolute;right:6px;top:-8px;width:0;height:0;border-style:solid;border-width:0 \
8.5px 8.5px;border-color:transparent transparent #b7bcc4 \
transparent;border-bottom-color:#fff;border-style:dashed dashed solid;z-index:1}#metaheader \
#metaheader-nav .user-dropdown .dropdown-menu li{float:left}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu{padding:23px 28px;right:-42px}#metaheader \
#metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu::before{right:45px}#metaheader \
#metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu \
li{height:auto;width:86px;border:1px solid white;margin:5px 0}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li \
a{display:block;width:100%;padding:0;height:auto;float:left}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li a .icon{width:55px;height:55px;margin:10px \
auto;background-size:50px;background-position:center center;background-repeat:no-repeat}#metaheader \
#metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li a \
span{float:left;width:100%;text-align:center;display:block;color:rgba(0,0,0,0.87);font-size:13px}#metaheader \
#metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li \
a:active{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown \
.dropdown-menu li#opendesktop-link-item a \
.icon{background-image:url('../img/logo-opendesktop.png')}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li#discourse-link-item a \
.icon{background-image:url('../img/logo-discourse.png');background-size:58px}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li#gitlab-link-item a \
.icon{background-image:url(../img/logo-gitlab.png)}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li#opencode-link-item a \
.icon{background-image:url(../img/logo-opencode.png);background-size:45px}#metaheader #metaheader-nav \
#user-context-menu-container .user-dropdown .dropdown-menu li:hover{border:1px solid #e5e5e5}#metaheader \
#metaheader-nav #user-context-menu-container .user-dropdown .dropdown-menu li:hover \
a{background-color:white}#metaheader #metaheader-nav #user-context-menu-container .user-dropdown \
.dropdown-menu li:active a{background-color:white}#metaheader #metaheader-nav #user-login-menu-container \
.user-dropdown .dropdown-toggle img{height:32px;width:32px;border-radius:100%;margin-top:-4px}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu \
#user-info-section{height:auto;padding:20px;background:white;float:left}#metaheader #metaheader-nav \
#user-login-menu-container .user-dropdown .dropdown-menu #user-info-section \
.user-avatar{height:96px;width:96px;float:left;border-radius:100%;overflow:hidden}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar \
.no-avatar-user-letter{border-radius:100%;height:100%;width:100%;background-color:#c1c1c1;text-align:cente \
r;line-height:80px;font-size:50px;color:white;overflow:hidden;position:relative}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-avatar \
.no-avatar-user-letter img{width:100%}#metaheader #metaheader-nav #user-login-menu-container \
.user-dropdown .dropdown-menu #user-info-section .user-avatar .no-avatar-user-letter \
.change-profile-pic{width:100%;position:absolute;bottom:0;font-size:9px;height:26px;left:0;background-colo \
r:rgba(0,0,0,0.4);line-height:30px;color:white;cursor:pointer;font-weight:bold}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section \
.user-details{width:175px;padding-left:20px;float:left;margin-top:-4px}#metaheader #metaheader-nav \
#user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details \
ul{padding:0;margin:0;list-style-type:none;float:left;width:100%}#metaheader #metaheader-nav \
#user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul \
li{width:100%;float:left;height:auto;line-height:15px;font-size:13px;min-height:8px;color:#6a7686}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details \
ul li a{color:#36c}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu \
#user-info-section .user-details ul li b{color:black}#metaheader #metaheader-nav \
#user-login-menu-container .user-dropdown .dropdown-menu #user-info-section .user-details ul li \
button{margin-top:16px}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown \
.dropdown-menu #main-seperator{margin-top:0;margin-bottom:0;background-color:#ccc}#metaheader \
#metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu li.buttons{padding:10px \
20px;background-color:#f5f5f5}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown \
.dropdown-menu li.buttons .btn{border-radius:2px;padding:0 \
16px;font-size:12px;height:30px;font-weight:normal;color:#666 !important;background:#f8f8f8;border:1px \
solid #c6c6c6}#metaheader #metaheader-nav #user-login-menu-container .user-dropdown .dropdown-menu \
li.buttons .btn:hover{-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px \
rgba(0,0,0,0.1);border-color:#c6c6c6;color:#222;background-color:#fff;background-image:-webkit-gradient(linear, \
left top, left bottom, from(#fff), to(#f8f8f8));background-image:-webkit-linear-gradient(top, #fff, \
#f8f8f8);background-image:linear-gradient(top, #fff, #f8f8f8)}header \
div.container.header{height:110px}.small.metamenu{width:100%;background-color:#fff;height:auto;float:left} \
.small.metamenu>ul.left{margin-left:5px}.small.metamenu>ul>li{margin-top:10px}.metaheader-menu-item{margin:5px \
0;margin-top:0 !important;margin-bottom:0 !important}.metaheader-menu-item \
#user-dropdown{margin-bottom:2px;position:relative;margin:5px \
0;height:32px;width:32px;padding:0}.metaheader-menu-item #user-dropdown \
.dropdown-toggle{padding:0;background-color:white;color:#6a7686;-webkit-transition:all .2s \
ease-out;-moz-transition:all .2s ease-out;-o-transition:all .2s ease-out;transition:all .2s \
ease-out;height:32px;width:32px;overflow:hidden}.metaheader-menu-item #user-dropdown .dropdown-toggle \
.glyphicon{font-size:16px;top:3px;font-style:normal;font-weight:100}.metaheader-menu-item #user-dropdown \
.dropdown-toggle img{width:100%;height:100%;border-radius:100%}.metaheader-menu-item #user-dropdown \
.dropdown-toggle:active{box-shadow:none;outline:none}.metaheader-menu-item #user-dropdown \
.dropdown-menu{border-radius:0;padding:0;width:320px;top:50px;background:#fff;border:1px solid \
#ccc;border-color:rgba(0,0,0,0.2);color:#000;-webkit-box-shadow:0 2px 10px rgba(0,0,0,0.2);box-shadow:0 \
2px 10px rgba(0,0,0,0.2)}.metaheader-menu-item #user-dropdown .dropdown-menu \
.btn-blue{border-radius:2px;padding:0 \
12px;font-size:12px;height:30px;background:#4d90fe;font-weight:bold;border:1px solid \
#3079ed}.metaheader-menu-item #user-dropdown .dropdown-menu \
.btn-blue:hover{background:#357ae8;border-color:#2f5bb7;color:white;box-shadow:0 1px 1px \
rgba(0,0,0,0.2)}.metaheader-menu-item #user-dropdown \
.dropdown-menu::before{content:"";position:absolute;right:6px;top:-8px;width:0;height:0;border-style:solid;border-width:0 \
8.5px 8.5px;border-color:transparent transparent #b7bcc4 \
transparent;border-bottom-color:#fff;border-style:dashed dashed \
solid;z-index:1}.metaheader-menu-item#user-signin-button{padding-top:6px}.metaheader-menu-item#user-signin-button \
a{padding:0;font-size:13px;display:block;height:30px;line-height:30px;color:white}.metaheader-menu-item#user-signin-button \
a .btn-blue{padding:0 \
12px;border-radius:2px;font-size:12px;height:30px;background:#4d90fe;font-weight:bold;border:1px solid \
#3079ed;background:-webkit-linear-gradient(top, #4387fd, \
#4683ea)}.metaheader-menu-item#user-signin-button a \
.btn-blue:hover{color:white}#main-header{background:#4a86cf;width:100%;height:70px;padding-left:275px;position:relative}#main-header \
.logo-header{background-image:none;display:block;height:100px;left:6px;position:absolute;top:-10px;width:265px;z-index:999;overflow:hidden}#main-header \
.user-menu-container{float:right;padding:15px;height:70px;width:auto}#main-header .user-menu-container \
ul{float:right;width:auto;padding:0;margin:0}#main-header #nav-top #nav-left{padding:15px}#main-header \
#nav-top #nav-left form#search{padding:7px;margin-right:7px}#main-header #nav-top #nav-left form#search \
input.content-search{border-radius:10px;border:1px solid #ccc;height:26px;padding:0 \
8px}.products-showcase .products-container \
.square{width:14.28571%;position:relative;float:left;margin-bottom:15px}.products-showcase \
.products-container .square:after{content:"";display:block;padding-bottom:120%}.products-showcase \
.products-container .content{position:absolute;width:100%;height:100%;padding:0 6px}.products-showcase \
.products-container .content a{display:block;width:100%;height:100%;position:relative}.products-showcase \
.products-container .content \
.product-wrapper{position:relative;width:100%;height:100%;background-color:white}.products-showcase \
.products-container .content \
.product-image-container{position:absolute;height:100%;width:100%;overflow:hidden;padding-bottom:60px}.products-showcase \
.products-container .content .product-image-container \
figure{width:100%;height:100%;position:relative}.products-showcase .products-container .content \
.product-image-container figure \
span{position:absolute;bottom:5px;left:0;font-weight:500;color:#636363;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;line-height:1.2;font-weight:500 \
!important;width:100%;padding:0 10px;text-align:center}.products-showcase .products-container .content \
.product-image-container figure \
img{position:absolute;top:50%;left:50%;width:110px;height:110px;margin:-55px 0 0 \
-55px;border-radius:100%}.products-showcase .products-container .content .product-image-container figure \
img.squared{border-radius:0}.products-showcase .products-container .content .product-image-container \
figure img.full{position:relative;width:100%;height:100%;margin:0;border-radius:0;top:0;left:0}.products-showcase \
.products-container .content .product-image-container figure img.padded{border-radius:0;border:10px solid \
white}.products-showcase .products-container .content .product-image-container figure \
img.rounded-corners{border-radius:20%}.products-showcase .products-container .content \
.product-image-container figure img.very-rounded-corners{border-radius:40%}.products-showcase \
.products-container .content .product-info{width:100%;height:60px;color:white;padding:14px \
16px;position:absolute;bottom:0;left:0;background-color:rgba(0,0,0,0.38)}.products-showcase \
.products-container .content .product-info \
span{width:100%;float:left;overflow:hidden;text-overflow:ellipsis;line-height:1.2;font-weight:500 \
!important}.products-showcase .products-container .content .product-info \
span.product-info-title{font-size:90%}.products-showcase .products-container .content .product-info \
span.product-info-description{font-size:70%;height:30px;line-height:15px;overflow:hidden;text-overflow:ell \
ipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}.products-showcase \
.products-container .content \
.product-info.music-image{padding-right:40px;padding-left:40px;padding-top:20px;text-align:center}.products-showcase \
.products-container .content .product-info.music-image \
.material-icons{position:absolute;top:18px}.products-showcase .products-container .content \
.product-info.music-image .material-icons.left-icon{left:10px}.products-showcase .products-container \
.content .product-info.music-image .material-icons.right-icon{right:10px}.products-showcase \
.products-container .content:hover .product-wrapper{background-color:#c1c1c1}.explore-products-container \
.product-group-scroll-wrapper .product-group-scroll-loading-container{width:100%;float:left;padding:20px \
0}.explore-products-container .product-group-scroll-wrapper .product-group-scroll-loading-container \
.icon-wrapper{display:table;margin:0 auto}.explore-products-container \
#pagination-container{text-align:center}.explore-products-container #pagination-container \
.wrapper{margin:0 auto;display:table;width:auto}.explore-products-container #pagination-container \
.wrapper ul{padding:0;margin:0;list-style-type:none}.explore-products-container #pagination-container \
.wrapper ul li{float:left;width:auto;margin-right:5px}.explore-products-container #pagination-container \
.wrapper ul li a{font-size:18px}.explore-products-container #pagination-container .wrapper ul li a \
.num-wrap{display:block;float:left}.explore-products-container #pagination-container .wrapper ul li a \
.num-wrap span,.explore-products-container #pagination-container .wrapper ul li a .num-wrap \
i{display:block;float:left}.explore-products-container #pagination-container .wrapper ul li \
a.active{font-weight:500;text-decoration:underline}.explore-top-bar{margin-bottom:20px;border-bottom:2px \
solid #ccc;float:left;width:100%}.explore-top-bar .item{padding:5px 10px;border-bottom:2px solid \
transparent;font-size:14px;margin-bottom:-2px;float:left;cursor:pointer}.explore-top-bar \
.item.active{border-bottom-color:#2673b0}.explore-top-bar \
\ No newline at end of file
diff --git a/httpdocs/theme/react/assets/css/style.css.map \
b/httpdocs/theme/react/assets/css/style.css.map index 92a702bf..e2a81440 100644
--- a/httpdocs/theme/react/assets/css/style.css.map
+++ b/httpdocs/theme/react/assets/css/style.css.map
@@ -1 +1 @@
-{"version":3,"sources":["style.less","/Users/davidnelband/Sites/git/ocs-webserver/httpdocs/theme/react/as \
sets/less/elements.less"],"names":[],"mappings":"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"}
 \ No newline at end of file
+{"version":3,"sources":["style.less","/Users/davidnelband/Sites/git/ocs-webserver/httpdocs/theme/react/as \
sets/less/elements.less"],"names":[],"mappings":"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"} \ No newline at end of \
                file
diff --git a/httpdocs/theme/react/assets/img/logo-discourse.png \
b/httpdocs/theme/react/assets/img/logo-discourse.png new file mode 100644
index 00000000..294f991e
Binary files /dev/null and b/httpdocs/theme/react/assets/img/logo-discourse.png differ
diff --git a/httpdocs/theme/react/assets/img/logo-gitlab.png \
b/httpdocs/theme/react/assets/img/logo-gitlab.png new file mode 100644
index 00000000..e07de524
Binary files /dev/null and b/httpdocs/theme/react/assets/img/logo-gitlab.png differ
diff --git a/httpdocs/theme/react/assets/img/logo-opencode.png \
b/httpdocs/theme/react/assets/img/logo-opencode.png new file mode 100644
index 00000000..b8a0625d
Binary files /dev/null and b/httpdocs/theme/react/assets/img/logo-opencode.png differ
diff --git a/httpdocs/theme/react/assets/img/logo-opendesktop.png \
b/httpdocs/theme/react/assets/img/logo-opendesktop.png new file mode 100644
index 00000000..26bc6aad
Binary files /dev/null and b/httpdocs/theme/react/assets/img/logo-opendesktop.png differ
diff --git a/httpdocs/theme/react/assets/less/style.less b/httpdocs/theme/react/assets/less/style.less
index 72a6f120..f2644894 100644
--- a/httpdocs/theme/react/assets/less/style.less
+++ b/httpdocs/theme/react/assets/less/style.less
@@ -2,6 +2,474 @@ out: ../css/style.css, sourcemap: true, compress: true
 
 @import "elements.less";
 
+#metaheader {
+  float: left;
+  width: 100%;
+  height: 42px;
+
+  #metaheader-nav {
+    width: 100%;
+    float: left;
+
+    .btn-metaheader {
+      padding: 0 12px !important;
+      border-radius: 2px !important;
+      color: white !important;
+      font-size: 12px !important;
+      height: 30px !important;
+      line-height: 30px !important;
+      font-weight: bold;
+      border: 1px solid #3079ed;
+      background: -webkit-linear-gradient(top, #4387fd, #4683ea);
+    }
+
+    ul.metaheader-menu {
+      padding: 0;
+      margin: 0;
+      list-style-type: none;
+
+      > li {
+        float: left;
+        padding: 9px 5px;
+
+        > a {
+          color: #6a7686;
+          border-radius: 5px;
+          padding: 5px;
+
+          &:active,
+          &:hover {
+            background-color: #eee;
+          }
+        }
+
+        &.active {
+
+          > a {
+            background-color: #eee;
+
+            img {
+              margin-right: 5px;
+            }
+          }
+        }
+
+        .dropdown-menu {
+          &::before {
+            content: "";
+            position: absolute;
+            right: 356px;
+            top: -8px;
+            width: 0;
+            height: 0;
+            border-style: solid;
+            border-width: 0 8.5px 8.5px;
+            border-color: transparent transparent #b7bcc4 transparent;
+            border-bottom-color: #fff;
+            border-style: dashed dashed solid;
+            z-index: 1;
+          }
+        }
+      }
+
+      &#domains-menu {
+        margin-left: 10px;
+
+        > li {
+          padding-left: 0;
+
+          > a {
+            margin: 0 10px 0 5px;
+          }
+
+          &::after {
+            content: "•";
+            color: #E2E2E2;
+          }
+
+          &:last-of-type {
+
+            &::after {
+              content: "";
+            }
+          }
+
+          &.dropdown {
+
+            > ul.dropdown-menu {
+              margin-left: 0;
+              margin-top: -9px;
+            }
+          }
+
+          &#domains-dropdown-menu {
+            position: relative;
+            cursor: pointer;
+            height: 60px;
+            z-index: 1000;
+
+            &:hover {
+              .dropdown-menu {
+                display: block;
+              }
+            }
+
+            .dropdown-menu {
+              width: 400px;
+              top: 60px;
+              right: -250px;
+
+              &::before {
+                right: 356px;
+              }
+
+              .submenu-container {
+                width: 50%;
+                float: left;
+                height: auto;
+                ul {
+                  list-style-type: none;
+                  padding: 0;
+                  margin: 0;
+
+                  li {
+                    a {
+                      padding: 3px 20px;
+                      font-size: 12px;
+                      color: black;
+                    }
+                    ul {
+                      margin-bottom: 10px;
+                      li {
+                        a {
+                          padding: 3px 30px;
+                        }
+                        &:hover {
+                          background-color: #eee;
+                        }
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          }
+
+          &#discussion-boards {
+            position: relative;
+            cursor: pointer;
+            height: 60px;
+            z-index: 1000;
+
+            .dropdown-menu {
+              width: 200px;
+              top: 60px;
+              right: -43px;
+
+              &::before {
+                right: 156px;
+              }
+            }
+          }
+        }
+      }
+
+      &#user-menu {
+        margin-right: 10px;
+
+        > li {
+
+          &#user-login-container {
+            padding: 5px;
+          }
+        }
+      }
+    }
+
+    .user-dropdown {
+      position: relative;
+
+      .dropdown-toggle {
+        padding: 0;
+        background-color: white;
+        color: #6a7686;
+
+        &:active {
+          background-color: white;
+          box-shadow: none;
+          outline: none;
+        }
+
+        .glyphicon {
+          font-size: 16px;
+          top: 1px;
+          font-style: normal;
+          font-weight: 100;
+          margin: 0 5px;
+        }
+      }
+
+      .dropdown-menu  {
+        border-radius: 0;
+        padding: 0;
+        width: 320px;
+        top: 40px;
+        background: #fff;
+        border: 1px solid #ccc;
+        border-color: rgba(0,0,0,0.2);
+        color: #000;
+        box-shadow: 0 2px 10px rgba(0,0,0,0.2);
+
+        &::before {
+          content: "";
+          position: absolute;
+          right: 6px;
+          top: -8px;
+          width: 0;
+          height: 0;
+          border-style: solid;
+          border-width: 0 8.5px 8.5px;
+          border-color: transparent transparent #b7bcc4 transparent;
+          border-bottom-color: #fff;
+          border-style: dashed dashed solid;
+          z-index: 1;
+        }
+
+        li {
+          float: left;
+        }
+      }
+    }
+
+    #user-context-menu-container {
+
+      .user-dropdown {
+
+        .dropdown-menu  {
+          padding: 23px 28px;
+          right: -42px;
+
+          &::before {
+            right: 45px;
+          }
+
+          li {
+            height: auto;
+            width: 86px;
+            border: 1px solid white;
+            margin: 5px 0;
+
+            a {
+              display: block;
+              width: 100%;
+              padding: 0;
+              height: auto;
+              float: left;
+
+              .icon {
+                width: 55px;
+                height: 55px;
+                margin: 10px auto;
+                background-size: 50px;
+                background-position: center center;
+                background-repeat: no-repeat;
+              }
+
+              span {
+                float: left;
+                width: 100%;
+                text-align: center;
+                display: block;
+                color:rgba(0,0,0,0.87);
+                font-size: 13px;
+              }
+
+              &:active {
+                background-color: white;
+              }
+            }
+
+            &#opendesktop-link-item {
+              a {
+                .icon {
+                  background-image: url('../img/logo-opendesktop.png');
+                }
+              }
+            }
+
+            &#discourse-link-item {
+              a {
+                .icon {
+                  background-image: url('../img/logo-discourse.png');
+                  background-size: 58px;
+                }
+              }
+            }
+
+            &#gitlab-link-item {
+              a {
+                .icon {
+                  background-image: url(../img/logo-gitlab.png);
+                }
+              }
+            }
+
+            &#opencode-link-item {
+              a {
+                .icon {
+                  background-image: url(../img/logo-opencode.png);
+                  background-size: 45px;
+                }
+              }
+            }
+
+            &:hover {
+              border:1px solid #e5e5e5;
+              a {
+                background-color: white;
+              }
+            }
+
+            &:active {
+              a {
+                background-color: white;
+              }
+            }
+          }
+        }
+      }
+    }
+
+    #user-login-menu-container {
+      .user-dropdown {
+        .dropdown-toggle {
+          img {
+            height: 32px;
+            width: 32px;
+            border-radius: 100%;
+            margin-top: -4px;
+          }
+        }
+        .dropdown-menu {
+          #user-info-section {
+            height: auto;
+            padding: 20px;
+            background: white;
+            float: left;
+
+            .user-avatar {
+              height: 96px;
+              width: 96px;
+              float: left;
+              border-radius: 100%;
+              overflow: hidden;
+
+              .no-avatar-user-letter {
+                border-radius: 100%;
+                height: 100%;
+                width: 100%;
+                background-color: #c1c1c1;
+                text-align: center;
+                line-height: 80px;
+                font-size: 50px;
+                color: white;
+                overflow: hidden;
+                position: relative;
+
+                img {
+                  width: 100%;
+                }
+
+                .change-profile-pic {
+                  width: 100%;
+                  position: absolute;
+                  bottom: 0;
+                  font-size: 9px;
+                  height: 26px;
+                  left: 0;
+                  background-color: rgba(0,0,0,0.4);
+                  line-height: 30px;
+                  color: white;
+                  cursor: pointer;
+                  font-weight: bold;
+                }
+              }
+            }
+            .user-details {
+              width: 175px;
+              padding-left: 20px;
+              float: left;
+              margin-top: -4px;
+
+              ul {
+                padding: 0;
+                margin: 0;
+                list-style-type: none;
+                float: left;
+                width: 100%;
+
+                li {
+                  width: 100%;
+                  float: left;
+                  height: auto;
+                  line-height: 15px;
+                  font-size: 13px;
+                  min-height: 8px;
+                  color: #6a7686;
+
+                  a {
+                    color: #36c;
+                  }
+
+                  b {
+                    color: black;
+                  }
+
+                  button {
+                    margin-top: 16px;
+                  }
+                }
+              }
+            }
+          }
+          #main-seperator {
+            margin-top: 0;
+            margin-bottom: 0;
+            background-color: #ccc;
+          }
+          li.buttons {
+            padding: 10px 20px;
+            background-color: #f5f5f5;
+
+            .btn {
+              border-radius: 2px;
+              padding: 0 16px;
+              font-size: 12px;
+              height: 30px;
+              font-weight: normal;
+              color: #666 !important;
+              background: #f8f8f8;
+              border: 1px solid #c6c6c6;
+
+              &:hover {
+                -webkit-box-shadow: 0 1px 1px rgba(0,0,0,0.1);
+                box-shadow: 0 1px 1px rgba(0,0,0,0.1);
+                border-color: #c6c6c6;
+                color: #222;
+                background-color: #fff;
+                background-image: -webkit-gradient(linear,left top,left bottom,from(#fff),to(#f8f8f8));
+                background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
+                background-image: -webkit-linear-gradient(top,#fff,#f8f8f8);
+                background-image: linear-gradient(top,#fff,#f8f8f8);
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
 header  {
 
   div.container.header {
@@ -9,44 +477,142 @@ header  {
   }
 }
 
-#user-dropdown {
+.small.metamenu {
+  width: 100%;
+  background-color: #fff;
+  height: auto;
+  float: left;
 
-  .dropdown-menu {
-    width: 300px;
-    padding-top: 0;
-    overflow: hidden;
+  > ul {
+    &.left {
+      margin-left: 5px;
+    }
+    > li {
+      margin-top: 10px;
+    }
+  }
+}
 
-    #user-info-section {
-      height: 100px;
-      padding: 10px 20px;
-      background: #f8f8f8;
+.metaheader-menu-item {
+  margin: 5px 0;
+  margin-top: 0 !important;
+  margin-bottom: 0 !important;
 
-      .user-avatar {
-        width: 40%;
-        height: 80px;
-        width: 80px;
-        float: left;
+  #user-dropdown {
+    margin-bottom: 2px;
+    position: relative;
+    margin: 5px 0;
+    height: 32px;
+    width: 32px;
+    padding: 0;
 
-        .no-avatar-user-letter {
-          border-radius: 100%;
-          height: 100%;
-          width: 100%;
-          background-color: #c1c1c1;
-          text-align: center;
-          line-height: 80px;
-          font-size: 50px;
+    .dropdown-toggle {
+      padding: 0;
+      background-color: white;
+      color: #6a7686;
+      .transition();
+      height: 32px;
+      width: 32px;
+      overflow: hidden;
+
+      .glyphicon {
+        font-size: 16px;
+        top: 3px;
+        font-style: normal;
+        font-weight: 100;
+      }
+
+      img {
+        width: 100%;
+        height: 100%;
+        border-radius: 100%;
+      }
+
+      &:active {
+        box-shadow: none;
+        outline: none;
+      }
+
+    }
+
+    .dropdown-menu {
+      border-radius: 0;
+      padding: 0;
+      width: 320px;
+      top: 50px;
+      background: #fff;
+      border: 1px solid #ccc;
+      border-color: rgba(0,0,0,.2);
+      color: #000;
+      -webkit-box-shadow: 0 2px 10px rgba(0,0,0,.2);
+      box-shadow: 0 2px 10px rgba(0,0,0,.2);
+
+      .btn-blue {
+        border-radius: 2px;
+        padding: 0 12px;
+        font-size: 12px;
+        height: 30px;
+        background: #4d90fe;
+        font-weight: bold;
+        border: 1px solid #3079ed;
+
+        &:hover {
+          background: #357ae8;
+          border-color: #2f5bb7;
           color: white;
+          box-shadow: 0 1px 1px rgba(0,0,0,0.2);
         }
       }
-      .user-details {
-        width: 175px;
-        padding-left: 20px;
-        float: left;
+
+
+      &::before {
+        content: "";
+        position: absolute;
+        right: 6px;
+        top: -8px;
+        width: 0;
+        height: 0;
+        border-style: solid;
+        border-width: 0 8.5px 8.5px;
+        border-color: transparent transparent #b7bcc4 transparent;
+        border-bottom-color: #fff;
+        border-style: dashed dashed solid;
+        z-index: 1;
       }
     }
 
-    #main-seperator {
-      margin-top: 0;
+  }
+
+  &#user-context-dropdown-container {
+
+  }
+
+  &#user-signin-button {
+    padding-top: 6px;
+
+      a {
+        padding: 0;
+        font-size: 13px;
+        display: block;
+        height: 30px;
+        line-height: 30px;
+        color: white;
+
+        .btn-blue {
+          padding: 0 12px;
+          border-radius: 2px;
+          font-size: 12px;
+          height: 30px;
+          background: #4d90fe;
+          font-weight: bold;
+          border: 1px solid #3079ed;
+          background: -webkit-linear-gradient(top,#4387fd,#4683ea);
+
+          &:hover {
+            color: white;
+          }
+
+      }
     }
   }
 }
diff --git a/httpdocs/theme/react/metaheader.js b/httpdocs/theme/react/metaheader.js
new file mode 100644
index 00000000..2b65df81
--- /dev/null
+++ b/httpdocs/theme/react/metaheader.js
@@ -0,0 +1,508 @@
+window.appHelpers = function () {
+
+  function generateMenuGroupsArray(domains) {
+    let menuGroups = [];
+    domains.forEach(function (domain, index) {
+      if (menuGroups.indexOf(domain.menugroup) === -1) {
+        menuGroups.push(domain.menugroup);
+      }
+    });
+    return menuGroups;
+  }
+
+  return {
+    generateMenuGroupsArray
+  };
+}();
+class MetaHeader extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {
+      baseUrl: baseUrl,
+      blogUrl: blogUrl,
+      loginUrl: loginUrl,
+      domains: domains,
+      user: user,
+      sName: sName,
+      loading: false
+    };
+  }
+
+  componentDidMount() {
+    console.log(this.state);
+  }
+
+  render() {
+
+    return React.createElement(
+      "nav",
+      { id: "metaheader-nav", className: "metaheader" },
+      React.createElement(
+        "div",
+        { className: "metamenu" },
+        React.createElement(DomainsMenu, {
+          domains: this.state.domains,
+          baseUrl: this.state.baseUrl,
+          sName: this.state.sName
+        }),
+        React.createElement(UserMenu, {
+          user: this.state.user,
+          blogUrl: this.state.blogUrl,
+          loginUrl: this.state.loginUrl
+        })
+      )
+    );
+  }
+}
+
+class DomainsMenu extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {};
+  }
+
+  componentDidMount() {
+    const menuGroups = appHelpers.generateMenuGroupsArray(this.props.domains);
+    this.setState({ menuGroups: menuGroups });
+  }
+
+  render() {
+    let menuGroupsDisplayLeft, menuGroupsDisplayRight;
+    if (this.state.menuGroups) {
+      menuGroupsDisplayLeft = this.state.menuGroups.slice(0, 2).map((mg, i) => \
React.createElement(DomainsMenuGroup, { +        key: i,
+        domains: this.props.domains,
+        menuGroup: mg,
+        sName: this.props.sName
+      }));
+      menuGroupsDisplayRight = this.state.menuGroups.slice(2).map((mg, i) => \
React.createElement(DomainsMenuGroup, { +        key: i,
+        domains: this.props.domains,
+        menuGroup: mg,
+        sName: this.props.sName
+      }));
+    }
+    return React.createElement(
+      "ul",
+      { className: "metaheader-menu left", id: "domains-menu" },
+      React.createElement(
+        "li",
+        { className: "active" },
+        React.createElement(
+          "a",
+          { href: "http://" + this.props.baseUrl },
+          React.createElement("img", { src: "/images/system/ocs-logo-rounded-16x16.png", className: \
"logo" }), +          "openDesktop.org :"
+        )
+      ),
+      React.createElement(
+        "li",
+        { id: "domains-dropdown-menu", className: "dropdown" },
+        React.createElement(
+          "a",
+          { id: "dropdownMenu3",
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "true" },
+          "Themes & Apps"
+        ),
+        React.createElement(
+          "ul",
+          { className: "dropdown-menu dropdown-menu-right", "aria-labelledby": "dropdownMenu3" },
+          React.createElement(
+            "li",
+            { className: "submenu-container" },
+            React.createElement(
+              "ul",
+              null,
+              menuGroupsDisplayLeft
+            )
+          ),
+          React.createElement(
+            "li",
+            { className: "submenu-container" },
+            React.createElement(
+              "ul",
+              null,
+              menuGroupsDisplayRight
+            )
+          )
+        )
+      ),
+      React.createElement(
+        "li",
+        { id: "discussion-boards", className: "dropdown" },
+        React.createElement(
+          "a",
+          { id: "dropdownMenu4",
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "true" },
+          "Discussion Boards"
+        ),
+        React.createElement(
+          "ul",
+          { className: "dropdown-menu dropdown-menu-right", "aria-labelledby": "dropdownMenu4" },
+          React.createElement(
+            "li",
+            null,
+            React.createElement(
+              "a",
+              { href: "https://forum.opendesktop.org/c/general" },
+              "General"
+            )
+          ),
+          React.createElement(
+            "li",
+            null,
+            React.createElement(
+              "a",
+              { href: "https://forum.opendesktop.org/c/themes-and-apps" },
+              "Themes & Apps"
+            )
+          ),
+          React.createElement(
+            "li",
+            null,
+            React.createElement(
+              "a",
+              null,
+              "Coding"
+            )
+          )
+        )
+      )
+    );
+  }
+}
+
+class DomainsMenuGroup extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {};
+    this.filterDomainsByMenuGroup = this.filterDomainsByMenuGroup.bind(this);
+  }
+
+  filterDomainsByMenuGroup(domain) {
+    if (domain.menugroup === this.props.menuGroup) {
+      return domain;
+    }
+  }
+
+  render() {
+    const domainsDisplay = this.props.domains.filter(this.filterDomainsByMenuGroup).map((domain, index) \
=> React.createElement( +      "li",
+      { key: index },
+      React.createElement(
+        "a",
+        { href: "http://" + domain.menuhref },
+        domain.name
+      )
+    ));
+
+    return React.createElement(
+      "li",
+      null,
+      React.createElement(
+        "a",
+        { href: "#" },
+        React.createElement(
+          "b",
+          null,
+          this.props.menuGroup
+        )
+      ),
+      React.createElement(
+        "ul",
+        { className: "domains-sub-menu" },
+        domainsDisplay
+      )
+    );
+  }
+}
+
+class UserMenu extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {};
+  }
+
+  render() {
+    let userDropdownDisplay;
+    if (this.props.user) {
+      userDropdownDisplay = React.createElement(UserLoginMenuContainer, {
+        user: this.props.user
+      });
+    } else {
+      userDropdownDisplay = React.createElement(
+        "li",
+        { id: "user-login-container" },
+        React.createElement(
+          "a",
+          { href: this.props.loginUrl, className: "btn btn-metaheader" },
+          "Login"
+        )
+      );
+    }
+
+    return React.createElement(
+      "div",
+      { id: "user-menu-container", className: "right" },
+      React.createElement(
+        "ul",
+        { className: "metaheader-menu", id: "user-menu" },
+        React.createElement(
+          "li",
+          null,
+          React.createElement(
+            "a",
+            { href: "/community" },
+            "Community"
+          )
+        ),
+        React.createElement(
+          "li",
+          null,
+          React.createElement(
+            "a",
+            { href: this.props.blogUrl, target: "_blank" },
+            "Blog"
+          )
+        ),
+        React.createElement(
+          "li",
+          null,
+          React.createElement(
+            "a",
+            { id: "plingList", className: "popuppanel", href: "/plings" },
+            "What are Plings?"
+          )
+        ),
+        React.createElement(
+          "li",
+          null,
+          React.createElement(
+            "a",
+            { id: "ocsapiContent", className: "popuppanel", href: "/partials/ocsapicontent.phtml" },
+            "API"
+          )
+        ),
+        React.createElement(
+          "li",
+          null,
+          React.createElement(
+            "a",
+            { id: "aboutContent", className: "popuppanel", href: "/partials/about.phtml" },
+            "About"
+          )
+        ),
+        React.createElement(UserContextMenuContainer, null),
+        userDropdownDisplay
+      )
+    );
+  }
+}
+
+class UserContextMenuContainer extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {};
+  }
+
+  render() {
+    return React.createElement(
+      "li",
+      { id: "user-context-menu-container" },
+      React.createElement(
+        "div",
+        { className: "user-dropdown" },
+        React.createElement(
+          "button",
+          {
+            className: "btn btn-default dropdown-toggle",
+            type: "button",
+            id: "dropdownMenu2",
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "true" },
+          React.createElement("span", { className: "glyphicon glyphicon-th" })
+        ),
+        React.createElement(
+          "ul",
+          { className: "dropdown-menu dropdown-menu-right", "aria-labelledby": "dropdownMenu2" },
+          React.createElement(
+            "li",
+            { id: "opendesktop-link-item" },
+            React.createElement(
+              "a",
+              { href: "http://www.opendesktop.org" },
+              React.createElement("div", { className: "icon" }),
+              React.createElement(
+                "span",
+                null,
+                "Themes ",
+                React.createElement("br", null),
+                " & Apps"
+              )
+            )
+          ),
+          React.createElement(
+            "li",
+            { id: "discourse-link-item" },
+            React.createElement(
+              "a",
+              { href: "http://discourse.opendesktop.org/" },
+              React.createElement("div", { className: "icon" }),
+              React.createElement(
+                "span",
+                null,
+                "Discussion ",
+                React.createElement("br", null),
+                " Boards"
+              )
+            )
+          ),
+          React.createElement(
+            "li",
+            { id: "opencode-link-item" },
+            React.createElement(
+              "a",
+              { href: "https://www.opencode.net/" },
+              React.createElement("div", { className: "icon" }),
+              React.createElement(
+                "span",
+                null,
+                "Coding ",
+                React.createElement("br", null),
+                " Tools"
+              )
+            )
+          )
+        )
+      )
+    );
+  }
+}
+
+class UserLoginMenuContainer extends React.Component {
+  constructor(props) {
+    super(props);
+    this.state = {};
+  }
+
+  render() {
+    return React.createElement(
+      "li",
+      { id: "user-login-menu-container" },
+      React.createElement(
+        "div",
+        { className: "user-dropdown" },
+        React.createElement(
+          "button",
+          {
+            className: "btn btn-default dropdown-toggle",
+            type: "button",
+            id: "userLoginDropdown",
+            "data-toggle": "dropdown",
+            "aria-haspopup": "true",
+            "aria-expanded": "true" },
+          React.createElement("img", { src: this.props.user.profile_image_url })
+        ),
+        React.createElement(
+          "ul",
+          { className: "dropdown-menu dropdown-menu-right", "aria-labelledby": "userLoginDropdown" },
+          React.createElement(
+            "li",
+            { id: "user-info-menu-item" },
+            React.createElement(
+              "div",
+              { id: "user-info-section" },
+              React.createElement(
+                "div",
+                { className: "user-avatar" },
+                React.createElement(
+                  "div",
+                  { className: "no-avatar-user-letter" },
+                  React.createElement("img", { src: this.props.user.profile_image_url }),
+                  React.createElement(
+                    "a",
+                    { className: "change-profile-pic" },
+                    "Change"
+                  )
+                )
+              ),
+              React.createElement(
+                "div",
+                { className: "user-details" },
+                React.createElement(
+                  "ul",
+                  null,
+                  React.createElement(
+                    "li",
+                    null,
+                    React.createElement(
+                      "b",
+                      null,
+                      this.props.user.username
+                    )
+                  ),
+                  React.createElement(
+                    "li",
+                    null,
+                    this.props.user.mail
+                  ),
+                  React.createElement("li", null),
+                  React.createElement(
+                    "li",
+                    null,
+                    React.createElement(
+                      "a",
+                      null,
+                      "Profile"
+                    ),
+                    " - ",
+                    React.createElement(
+                      "a",
+                      null,
+                      "Privacy"
+                    )
+                  ),
+                  React.createElement(
+                    "li",
+                    null,
+                    React.createElement(
+                      "button",
+                      { className: "btn btn-default btn-metaheader" },
+                      "Account"
+                    )
+                  )
+                )
+              )
+            )
+          ),
+          React.createElement("li", { id: "main-seperator", role: "separator", className: "divider" }),
+          React.createElement(
+            "li",
+            { className: "buttons" },
+            React.createElement(
+              "button",
+              { className: "btn btn-default btn-metaheader" },
+              "Add Account"
+            ),
+            React.createElement(
+              "button",
+              { className: "btn btn-default pull-right btn-metaheader" },
+              React.createElement(
+                "a",
+                { href: "/register" },
+                "Sign Up"
+              )
+            )
+          )
+        )
+      )
+    );
+  }
+}
+
+ReactDOM.render(React.createElement(MetaHeader, null), document.getElementById('metaheader'));


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic