setJson(new Json()); $addThis->setMarkupGenerator(new MarkupGenerator()); self::$instance = $addThis; } return self::$instance; } public function setJson(Json $json) { $this->json = $json; } public function setMarkupGenerator(MarkupGenerator $markupGenerator) { $this->markupGenerator = $markupGenerator; } public function getWidgetTypes() { return array( self::WIDGET_TYPE_DISABLED => t('Disabled'), self::WIDGET_TYPE_COMPACT_BUTTON => t('Compact button'), self::WIDGET_TYPE_LARGE_BUTTON => t('Large button'), self::WIDGET_TYPE_TOOLBOX => t('Toolbox'), self::WIDGET_TYPE_SHARECOUNT => t('Sharecount'), ); } public function getBlockWidgetType() { return variable_get(self::BLOCK_WIDGET_TYPE_KEY, self::WIDGET_TYPE_COMPACT_BUTTON); } public function getWidgetMarkup($widgetType = '', $entity = NULL) { $markup = ''; if (self::WIDGET_TYPE_LARGE_BUTTON == $widgetType) { $markup = $this->getLargeButtonWidgetMarkup($entity); } elseif (self::WIDGET_TYPE_COMPACT_BUTTON == $widgetType) { $markup = $this->getCompactButtonWidgetMarkup($entity); } elseif (self::WIDGET_TYPE_TOOLBOX == $widgetType) { $markup = $this->getToolboxWidgetMarkup($entity); } elseif (self::WIDGET_TYPE_SHARECOUNT == $widgetType) { $markup = $this->getSharecountWidgetMarkup($entity); } return $markup; } public function getProfileId() { return check_plain(variable_get(AddThis::PROFILE_ID_KEY)); } public function getServicesCssUrl() { return check_url(variable_get(AddThis::SERVICES_CSS_URL_KEY, self::DEFAULT_SERVICES_CSS_URL)); } public function getServicesJsonUrl() { return check_url(variable_get(AddThis::SERVICES_JSON_URL_KEY, self::DEFAULT_SERVICES_JSON_URL)); } public function getServices() { $rows = array(); $services = $this->json->decode($this->getServicesJsonUrl()); if ($services != NULL) { foreach ($services['data'] AS $service) { $serviceCode = check_plain($service['code']); $serviceName = check_plain($service['name']); $rows[$serviceCode] = ' ' . $serviceName; } } return $rows; } public function getEnabledServices() { return variable_get(self::ENABLED_SERVICES_KEY, array()); } public function addStylesheets() { drupal_add_css($this->getServicesCssUrl(), 'external'); drupal_add_css($this->getAdminCssFilePath(), 'file'); } public function addConfigurationOptionsJs() { if ($this->isCustomConfigurationCodeEnabled()) { $javascript = $this->getCustomConfigurationCode(); } else { $enabledServices = $this->getServiceNamesAsCommaSeparatedString(); $javascript = "var addthis_config = {services_compact: '" . $enabledServices . "more'" . $this->getUiHeaderColorConfigurationOptions() . '}'; } drupal_add_js($javascript, 'inline'); } public function areLargeIconsEnabled() { return variable_get(self::LARGE_ICONS_ENABLED_KEY, TRUE); } public function getUiHeaderColor() { return check_plain(variable_get(self::UI_HEADER_COLOR_KEY)); } public function getUiHeaderBackgroundColor() { return check_plain(variable_get(self::UI_HEADER_BACKGROUND_COLOR_KEY)); } public function getCustomConfigurationCode() { return variable_get(self::CUSTOM_CONFIGURATION_CODE_KEY, self::DEFAULT_CUSTOM_CONFIGURATION_CODE); } public function isCustomConfigurationCodeEnabled() { return variable_get(self::CUSTOM_CONFIGURATION_CODE_ENABLED_KEY, FALSE); } public function getBaseWidgetJsUrl() { return check_url(variable_get(self::WIDGET_JS_URL_KEY, self::DEFAULT_WIDGET_JS_URL)); } public function getBaseBookmarkUrl() { return check_url(variable_get(self::BOOKMARK_URL_KEY, self::DEFAULT_BOOKMARK_URL)); } public function getNumberOfPreferredServices() { return variable_get(self::NUMBER_OF_PREFERRED_SERVICES_KEY, self::DEFAULT_NUMBER_OF_PREFERRED_SERVICES); } private function getLargeButtonWidgetMarkup($entity) { return 'getAddThisAttributesMarkup($entity) . $this->markupGenerator->generateAttribute('href', self::getFullBookmarkUrl()) . '>'
           . t('Bookmark and Share')
           . '' . self::getWidgetScriptElement(); } private function getCompactButtonWidgetMarkup($entity) { return 'markupGenerator->generateAttribute('href', $this->getFullBookmarkUrl()) . '>'
           . t('Bookmark and Share')
           . '' . $this->getWidgetScriptElement(); } private function getToolboxWidgetMarkup($entity) { $markup = '
getAddThisAttributesMarkup($entity) . '>markupGenerator->generateAttribute('href', $this->getFullBookmarkUrl()) . ' class="addthis_button_compact">'; $numberOfPreferredServices = self::getNumberOfPreferredServices(); for ($i = 1; $i <= $numberOfPreferredServices; $i++) { $markup .= ""; } $markup .= '
' . $this->getWidgetScriptElement(); return $markup; } private function getSharecountWidgetMarkup($entity) { return '
getAddThisAttributesMarkup($entity) . '>
' . $this->getWidgetScriptElement(); } private function getAddThisAttributesMarkup($entity) { if (is_object($entity)) { return $this->getAddThisTitleAttributeMarkup($entity) . ' '; } return ''; } private function getAddThisTitleAttributeMarkup($entity) { return $this->markupGenerator->generateAttribute( self::TITLE_ATTRIBUTE, drupal_get_title() . ' - ' . check_plain($entity->title) ); } private function getWidgetScriptElement() { return ''; } private function getUiHeaderColorConfigurationOptions() { $configurationOptions = ','; $uiHeaderColor = $this->getUiHeaderColor(); $uiHeaderBackgroundColor = $this->getUiHeaderBackgroundColor(); if ($uiHeaderColor != NULL) { $configurationOptions .= "ui_header_color: '$uiHeaderColor'"; } if ($uiHeaderBackgroundColor != NULL) { $configurationOptions .= ", ui_header_background: '$uiHeaderBackgroundColor'"; } return $configurationOptions; } private function getLargeButtonsClass() { return $this->areLargeIconsEnabled() ? ' addthis_32x32_style ' : ''; } private function getServiceNamesAsCommaSeparatedString() { $enabledServiceNames = array_values($this->getEnabledServices()); $enabledServicesAsCommaSeparatedString = ''; foreach ($enabledServiceNames as $enabledServiceName) { if ($enabledServiceName != '0') { $enabledServicesAsCommaSeparatedString .= $enabledServiceName . ','; } } return $enabledServicesAsCommaSeparatedString; } private function getAdminCssFilePath() { return drupal_get_path('module', self::MODULE_NAME) . '/' . self::ADMIN_CSS_FILE; } private function getFullBookmarkUrl() { return check_url($this->getBaseBookmarkUrl() . $this->getProfileIdQueryParameterPrefixedWithAmp()); } private function getProfileIdQueryParameter($prefix) { $profileId = $this->getProfileId(); return $profileId != NULL ? $prefix . self::PROFILE_ID_QUERY_PARAMETER . '=' . $profileId : ''; } private function getProfileIdQueryParameterPrefixedWithAmp() { return $this->getProfileIdQueryParameter('&'); } private function getProfileIdQueryParameterPrefixedWithHash() { return $this->getProfileIdQueryParameter('#'); } private function getWidgetUrl() { return check_url($this->getBaseWidgetJsUrl() . $this->getProfileIdQueryParameterPrefixedWithHash()); } }