示例#1
0
 /**
  * Creates new instance of the builder for the current project.
  * @return \SocialSharing_Projects_Builder
  */
 protected function instantiateBuilder()
 {
     $builder = null;
     if ('flat' === substr($this->project->get('design', 'flat-1'), 0, 4)) {
         $builder = new SocialSharing_Projects_Builder_Flat($this->project, $this->environment);
     } elseif (class_exists('SocialSharingPro_Projects_Builder_Mono') && 'mono' === substr($this->project->get('design'), 0, 4)) {
         $builder = new SocialSharingPro_Projects_Builder_Mono($this->project, $this->environment);
     } elseif (class_exists('SocialSharingPro_Projects_Builder_Bordered') && 'bordered' === substr($this->project->get('design'), 0, 8)) {
         $builder = new SocialSharingPro_Projects_Builder_Bordered($this->project, $this->environment);
     } elseif (class_exists('SocialSharingPro_Projects_Builder_Livejournal') && 'livejournal' === substr($this->project->get('design'), 0, 11)) {
         $builder = new SocialSharingPro_Projects_Builder_Livejournal($this->project, $this->environment);
     } elseif (class_exists('SocialSharingPro_Projects_Builder_Various') && 'various' === substr($this->project->get('design'), 0, 7)) {
         $builder = new SocialSharingPro_Projects_Builder_Various($this->project, $this->environment);
     } else {
         $this->project->setSettings(array_merge($this->project->getSettings(), array('design' => 'flat-1')));
         $builder = new SocialSharing_Projects_Builder_Flat($this->project, $this->environment);
         add_action('admin_notices', array($this, 'invalidBuilderNotice'));
     }
     /** @var SocialSharing_Networks_Module $networks */
     if ($this->project->has('show_more') && null !== ($networks = $this->environment->getModule('networks'))) {
         $builder = new SocialSharing_Projects_Builder_Decorator_Popup($builder, $networks->getAll());
         /** @var SocialSharing_Ui_Module $ui */
         $ui = $this->environment->getModule('ui');
         $ui->addAsset($ui->create('script', 'social-sharing-builder-popup')->setHookName('before_html_build')->setModuleSource($this->environment->getModule('projects'), 'js/builder/popup.js')->setCachingAllowed($this->environment->isProd()));
         $ui->addAsset($ui->create('style', 'social-sharing-builder-popup')->setHookName('before_html_build')->setModuleSource($this->environment->getModule('projects'), 'css/builder/popup.css')->setCachingAllowed($this->environment->isProd()));
     }
     if ($this->project->has('sidebar_navigation')) {
         $builder = new SocialSharing_Projects_Builder_Decorator_Navigation($builder);
         /** @var SocialSharing_Ui_Module $ui */
         $ui = $this->environment->getModule('ui');
         $ui->addAsset($ui->create('script', 'social-sharing-builder-navigation')->setHookName('before_html_build')->setModuleSource($this->environment->getModule('projects'), 'js/builder/navigation.js')->setCachingAllowed($this->environment->isProd()));
         $ui->addAsset($ui->create('style', 'social-sharing-builder-navigation')->setHookName('before_html_build')->setModuleSource($this->environment->getModule('projects'), 'css/builder/navigation.css')->setCachingAllowed($this->environment->isProd()));
     }
     return $builder;
 }
示例#2
0
 public function build()
 {
     $this->project = $this->dispatcher->apply('before_build', array($this->project));
     $classes = $this->getBaseClasses();
     $buttons = $this->buildButtons();
     $sidebarClasses = array('supsystic-social-sharing-right', 'supsystic-social-sharing-left', 'supsystic-social-sharing-top', 'supsystic-social-sharing-bottom');
     if ((!array_key_exists('action', $_GET) || $_GET['action'] !== 'getPreviewHtml') && $this->project->isShowOnPosts() && !$this->project->isShowAt('popup')) {
         $current = get_post();
         if ($current === null) {
             return '';
         }
         if ($current->post_type === 'post' && (!$this->project->isShowOnAllPosts() && !$this->project->isShowOnSpecificPost($current->ID))) {
             return '';
         }
         if ($current->post_type === 'page' && (!$this->project->isShowOnAllPages() && !$this->project->isShowOnSpecificPost($current->ID))) {
             return '';
         }
         /*For other post types that can't be selected in our list, and if buttons should not be visible on all posts/pages - buttons should be hidden, right?*/
         if (!$this->project->isShowOnAllPosts() && !$this->project->isShowOnAllPages() && !in_array($current->post_type, array('post', 'page'))) {
             return '';
         }
     }
     $container = $this->getBuilder()->createElement('div', array($this->getBuilder()->createAttribute('class', $classes), $this->getBuilder()->createAttribute('data-animation', $this->getProject()->get('buttons_animation', 'no-animation')), $this->getBuilder()->createAttribute('data-icons-animation', $this->getProject()->get('icons_animation', 'no-animation')), $this->getBuilder()->createAttribute('data-overlay', $this->getProject()->get('overlay_with_shadow', false)), $this->getBuilder()->createAttribute('data-change-size', $this->getProject()->get('change_size', false)), $this->getBuilder()->createAttribute('data-buttons-size', $this->getProject()->get('buttons_size', 'normal')), $this->getBuilder()->createAttribute('style', sprintf('font-size: %sem; display: none;', $this->getProject()->get('buttons_size', 1)))));
     if (count($buttons) > 0) {
         foreach ($buttons as $button) {
             $container->addElement($button);
         }
     }
     $settings = $this->project->getSettings();
     $listClasses = array();
     $buttons = $this->buildButtons('all', $listClasses);
     if (isset($settings['show_more']) && $settings['show_more'] == 'on') {
         $this->showMore($container, $buttons, $listClasses);
     }
     foreach ($classes as $class) {
         if (in_array($class, $sidebarClasses) && isset($settings['sidebar_navigation']) && $settings['sidebar_navigation'] == 'on') {
             $navButton = $this->getBuilder()->createElement('div', array($this->getBuilder()->createAttribute('class', 'nav-button hide ' . $settings['where_to_show_extra'])));
             $container->addElement($navButton);
         }
     }
     $this->dispatcher->dispatch('before_html_build');
     return $container->build();
 }