You are here

class Dynamic_Banner_Block in Dynamic Banner 8

Provides a 'Hello' Block.

Plugin annotation


@Block(
  id = "Dynamic Banner",
  admin_label = @Translation("Dynamic Banner"),
  category = @Translation("Dynamic Banner"),
)

Hierarchy

Expanded class hierarchy of Dynamic_Banner_Block

File

src/Plugin/Block/Dynamic_Banner_Block.php, line 19

Namespace

Drupal\dynamic_banner\Plugin\Block
View source
class Dynamic_Banner_Block extends BlockBase {
  public function build() {

    // store the path of the page the block is loading from, this will sead our first searches

    //$path = drupal_strtolower(drupal_get_path_alias($_GET['q']));
    $current_path = \Drupal::service('path.current')
      ->getPath();
    $path = \Drupal::service('path_alias.manager')
      ->getAliasByPath($current_path);
    $path = trim($path, '/');
    do {
      $result = NULL;

      // TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
      // You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
      $query = \Drupal::database()
        ->select('dynamic_banner', 'd');
      $query
        ->condition('d.path', $path, '=')
        ->fields('d');
      $result = $query
        ->execute()
        ->fetchObject();

      // search for that path string exact match
      if ($result) {

        // have to translate if we have fids
        // image should always be in path format (sites/default/banners/pic0.jpg,sites/default/banners/pic1.jpg)
        if (!empty($result->imgurl) || !empty($result->imgfid)) {
          $image = $this
            ->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
        }
        else {
          $image = "";
        }
        $bannerarr = array(
          'url' => $image,
          'text' => $result->text,
          'link' => $result->link,
          'display_setting' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
          'display_errors' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
        );

        // return array('content' => theme('banner_output', $bannerarr));
        return [
          '#theme' => 'banner_output',
          '#bannerarr' => $bannerarr,
        ];
      }

      // wild section //
      $result = NULL;
      $wild_search = $path . '*';

      // create and execute query
      // TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
      // You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
      $query = \Drupal::database()
        ->select('dynamic_banner', 'd');
      $query
        ->condition('d.path', $wild_search, '=')
        ->fields('d');
      $result = $query
        ->execute()
        ->fetchObject();

      // search for the wild card string exact match
      if ($result) {

        // have to translate if we have fids
        // image should always be in path format (sites/default/banners/pic0.jpg,sites/default/banners/pic1.jpg)
        if (!empty($result->imgurl) || !empty($result->imgfid)) {
          $image = $this
            ->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
        }
        else {
          $image = "";
        }
        $bannerarr = array(
          'url' => $image,
          'text' => $result->text,
          'link' => $result->link,
          'display_setting' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
          'display_errors' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
        );

        // return array('content' => theme('banner_output', $bannerarr));
        return [
          '#theme' => 'banner_output',
          '#bannerarr' => $bannerarr,
        ];
      }

      // random section //
      $result = NULL;
      $random_search = $path . '!';

      // create and execute query
      // TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
      // You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
      $query = \Drupal::database()
        ->select('dynamic_banner', 'd');
      $query
        ->condition('d.path', $random_search, '=')
        ->fields('d');
      $result = $query
        ->execute()
        ->fetchObject();

      // search for that random string exact match
      if ($result) {

        // get extra stuff associated with randoms
        if (!empty($result->imgurl) || !empty($result->imgfid)) {
          $images = $this
            ->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
        }
        else {
          $images = "";
        }

        // support for random text if needed
        $texts = $result->text;

        // explode comma seperated images and text
        $image = explode(",", $images);

        // support for random text if needed
        $text = explode(",", $texts);

        // count how many there are
        $count = count($image);

        // handle the random with ints (deal with array start at 0 problems)
        // so if there are 3 elements in the array it is 0-2 not 1-3 so generate random based on that
        $random = $count - rand(0, $count - 1) - 1;

        // remember text is optional
        $bannerarr = array(
          'url' => $image[$random],
          'text' => $text[$random],
          'link' => $result->link,
          'display_setting' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
          'display_errors' => \Drupal::config('dynamic_banner.settings')
            ->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
        );

        // return array('content' => theme('banner_output', $bannerarr));
        return [
          '#theme' => 'banner_output',
          '#bannerarr' => $bannerarr,
        ];
      }

      // chop off more of the string and try again, it is key to not modify the path before this point
      $last_slash_position = strrpos($path, "/");

      // returns false if not found
      if ($last_slash_position !== FALSE) {

        //$path = drupal_substr($path, 0, $last_slash_position);  drupal_substr is undefineed
        $path = mb_substr($path, 0, $last_slash_position);
      }
      else {
        $path = FALSE;
      }
    } while ($path != FALSE);

    // loop until we find the top down hirarchy
    // well no banner was found for this specific page if we have a default banner then display it

    ///////////////////////////// this will soon be stored in the variables table ////////////////// TODO

    // create and execute query
    // TODO: Drupal Rector Notice: Please delete the following comment after you've made any necessary changes.
    // You will need to use `\Drupal\core\Database\Database::getConnection()` if you do not yet have access to the container here.
    $query = \Drupal::database()
      ->select('dynamic_banner', 'd');
    $query
      ->condition('d.path', 'DEFAULT', '=')
      ->fields('d');
    $result = $query
      ->execute()
      ->fetchObject();

    // for the resultant row (SHOULD ALWAYS BE ONE)
    if ($result) {
      if (!empty($result->imgurl) && !empty($result->imgfid)) {
        $image = $this
          ->dynamic_banner_image_handler($result->imgurl, $result->imgfid);
      }
      else {
        $image = "";
      }
      $bannerarr = array(
        'url' => $image,
        'text' => $result->text,
        'link' => $result->link,
        'display_setting' => \Drupal::config('dynamic_banner.settings')
          ->get('dynamic_banner_display_setting', BANNER_DEFAULT_OUTPUT),
        'display_errors' => \Drupal::config('dynamic_banner.settings')
          ->get('dynamic_banner_display_errors', BANNER_DEFAULT_ERROR),
      );

      //return array('content' => theme('banner_output', $bannerarr));
      return [
        '#theme' => 'banner_output',
        '#bannerarr' => $bannerarr,
      ];
    }

    // just encase something went wrong
    // return array('#markup' => 'Hello World');
  }

  /**
   * This function will load imgurl if there is no url for img
   * then it will load the fids into path format
   *
   * Input 1: The imgurl(s) that we are loading [maybe csv]
   * Input 2: The imgfid(s) that we are loading [maybe csv]
   */
  public function dynamic_banner_image_handler($imgurl, $imgfid) {

    // we have found the imgurl already in the right format return it
    if ($imgurl && $imgurl != '') {
      return $imgurl;
    }
    else {
      if (strrpos($imgfid, ',')) {

        // split the plain string into an array
        $all_fids = explode(",", $imgfid);

        // load all files at once

        //$all_files = file_load_multiple($all_fids);
        $all_files = \Drupal\file\Entity\File::loadMultiple($all_fids);
        $retval = "";

        // default the return string
        // go into all the loaded files
        foreach ($all_files as $file) {

          // if this is the first time through do not add a comma to the string
          if ($retval != "") {
            $retval .= ",";
          }

          // have to translate the public string in the uri back into something browsers understand
          if (isset($file)) {
            $fileUrl = file_create_url($file
              ->getFileUri());
          }
          else {
            $fileUrl = '';
          }

          //$retval .= str_replace('public://', file_public_path() . '/', $fileUrl);
          $retval .= str_replace('public://', '/', $fileUrl);
        }
        return $retval;
      }
      else {
        $file = \Drupal::service('entity_type.manager')
          ->getStorage('file')
          ->load((int) $imgfid);

        // have to translate the public string in the uri back into something browsers understand
        if (isset($file)) {
          $fileUrl = file_create_url($file
            ->getFileUri());
        }
        else {
          $fileUrl = '';
        }
        $file_path = str_replace('public://', '/', $fileUrl);
        return $file_path;
      }
    }
  }

  //disable caching in this block
  public function getCacheMaxAge() {
    return 0;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
BlockPluginInterface::BLOCK_LABEL_VISIBLE constant Indicates the block label (title) should be displayed to end users.
BlockPluginTrait::$transliteration protected property The transliteration service.
BlockPluginTrait::access public function
BlockPluginTrait::baseConfigurationDefaults protected function Returns generic default configuration for block plugins.
BlockPluginTrait::blockAccess protected function Indicates whether the block should be shown. 16
BlockPluginTrait::blockForm public function 16
BlockPluginTrait::blockSubmit public function 13
BlockPluginTrait::blockValidate public function 3
BlockPluginTrait::buildConfigurationForm public function Creates a generic configuration form for all block types. Individual block plugins can add elements to this form by overriding BlockBase::blockForm(). Most block plugins should not override this method unless they need to alter the generic form elements. 2
BlockPluginTrait::calculateDependencies public function
BlockPluginTrait::defaultConfiguration public function 19
BlockPluginTrait::getConfiguration public function 1
BlockPluginTrait::getMachineNameSuggestion public function 1
BlockPluginTrait::getPreviewFallbackString public function 3
BlockPluginTrait::label public function
BlockPluginTrait::setConfiguration public function
BlockPluginTrait::setConfigurationValue public function
BlockPluginTrait::setTransliteration public function Sets the transliteration service.
BlockPluginTrait::submitConfigurationForm public function Most block plugins should not override this method. To add submission handling for a specific block type, override BlockBase::blockSubmit().
BlockPluginTrait::transliteration protected function Wraps the transliteration service.
BlockPluginTrait::validateConfigurationForm public function Most block plugins should not override this method. To add validation for a specific block type, override BlockBase::blockValidate(). 1
BlockPluginTrait::__construct public function 22
ContextAwarePluginAssignmentTrait::addContextAssignmentElement protected function Builds a form element for assigning a context to a given slot.
ContextAwarePluginAssignmentTrait::contextHandler protected function Wraps the context handler.
ContextAwarePluginBase::$context protected property The data objects representing the context of this plugin.
ContextAwarePluginBase::$contexts Deprecated private property Data objects representing the contexts passed in the plugin configuration.
ContextAwarePluginBase::createContextFromConfiguration protected function Overrides ContextAwarePluginBase::createContextFromConfiguration
ContextAwarePluginBase::getCacheContexts public function The cache contexts associated with this object. Overrides CacheableDependencyInterface::getCacheContexts 9
ContextAwarePluginBase::getCacheTags public function The cache tags associated with this object. Overrides CacheableDependencyInterface::getCacheTags 4
ContextAwarePluginBase::getContext public function This code is identical to the Component in order to pick up a different Context class. Overrides ContextAwarePluginBase::getContext
ContextAwarePluginBase::getContextDefinition public function Overrides ContextAwarePluginBase::getContextDefinition
ContextAwarePluginBase::getContextDefinitions public function Overrides ContextAwarePluginBase::getContextDefinitions
ContextAwarePluginBase::getContextMapping public function Gets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface::getContextMapping
ContextAwarePluginBase::getContexts public function Gets the defined contexts. Overrides ContextAwarePluginInterface::getContexts
ContextAwarePluginBase::getContextValue public function Gets the value for a defined context. Overrides ContextAwarePluginInterface::getContextValue
ContextAwarePluginBase::getContextValues public function Gets the values for all defined contexts. Overrides ContextAwarePluginInterface::getContextValues
ContextAwarePluginBase::setContext public function Set a context on this plugin. Overrides ContextAwarePluginBase::setContext
ContextAwarePluginBase::setContextMapping public function Sets a mapping of the expected assignment names to their context names. Overrides ContextAwarePluginInterface::setContextMapping
ContextAwarePluginBase::setContextValue public function Sets the value for a defined context. Overrides ContextAwarePluginBase::setContextValue
ContextAwarePluginBase::validateContexts public function Validates the set values for the defined contexts. Overrides ContextAwarePluginInterface::validateContexts
ContextAwarePluginBase::__get public function Implements magic __get() method.
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
Dynamic_Banner_Block::build public function Builds and returns the renderable array for this block plugin. Overrides BlockPluginInterface::build
Dynamic_Banner_Block::dynamic_banner_image_handler public function This function will load imgurl if there is no url for img then it will load the fids into path format
Dynamic_Banner_Block::getCacheMaxAge public function The maximum age for which this object may be cached. Overrides ContextAwarePluginBase::getCacheMaxAge
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginWithFormsTrait::getFormClass public function
PluginWithFormsTrait::hasFormClass public function
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.
TypedDataTrait::$typedDataManager protected property The typed data manager used for creating the data types.
TypedDataTrait::getTypedDataManager public function Gets the typed data manager. 2
TypedDataTrait::setTypedDataManager public function Sets the typed data manager. 2