/**
	 * @param TabTable  $tab
	 * @param UserTable $user
	 * @param int       $ui
	 * @param array     $postdata
	 */
	public function getCBpluginComponent( /** @noinspection PhpUnusedParameterInspection */ $tab, /** @noinspection PhpUnusedParameterInspection */ $user, /** @noinspection PhpUnusedParameterInspection */ $ui, /** @noinspection PhpUnusedParameterInspection */ $postdata )
	{
		$returnUrl					=	$this->input( 'return', null, GetterInterface::BASE64 );

		if ( $returnUrl ) {
			$returnUrl				=	base64_decode( $returnUrl );
		}

		try {
			$hybrid					=	new cbconnectHybrid();
		} catch ( Exception $e ) {
			cbRedirect( ( $returnUrl ? $returnUrl : 'index.php' ), $e->getMessage(), 'error' );
			return;
		}

		$provider					=	$this->input( 'provider', null, GetterInterface::STRING );
		$providerId					=	null;

		if ( ! $provider ) {
			$providerId				=	$this->input( 'hauth_start', null, GetterInterface::STRING );

			if ( ! $providerId ) {
				$providerId			=	$this->input( 'hauth_done', null, GetterInterface::STRING );
			}

			$provider				=	$hybrid->getProviderFromId( $providerId );
		} else {
			$providerId				=	$hybrid->getIdFromProvider( $provider );
		}

		$action						=	$this->input( 'action', null, GetterInterface::STRING );
		$hybridAuth					=	null;
		$error						=	null;

		try {
			$hybridAuth				=	$hybrid->getHybridAuth();

			/** @var Hybrid_Storage $storage */
			$storage				=	$hybridAuth->storage();

			if ( $storage ) {
				if ( ! $returnUrl ) {
					$redirectUrl	=	$storage->get( 'redirect_url' );

					if ( $redirectUrl ) {
						$returnUrl	=	base64_decode( $redirectUrl );
					}
				} else {
					$storage->set( 'redirect_url', base64_encode( $returnUrl ) );
				}
			}
		} catch ( Exception $e ) {
			$error					=	$e->getMessage();
		}

		if ( ! $returnUrl ) {
			$returnUrl				=	'index.php';
		}

		if ( ( ! $hybridAuth ) || ( ! $this->params->get( $provider . '_enabled', false, GetterInterface::BOOLEAN ) ) ) {
			if ( ! $error ) {
				$error				=	CBTxt::T( 'PROVIDER_NOT_AVAILABLE', '[provider] is not available.', array( '[provider]' => $providerId ) );
			}

			cbRedirect( $this->_returnUrl, $error, 'error' );
			return;
		}

		$this->_hybrid				=	$hybrid;
		$this->_hybridAuth			=	$hybridAuth;
		$this->_provider			=	$provider;
		$this->_providerId			=	$providerId;
		$this->_providerField		=	$hybrid->getProviderField( $provider );
		$this->_providerName		=	$hybrid->getProviderName( $provider );
		$this->_returnUrl			=	$returnUrl;

		switch ( $action ) {
			case 'authenticate':
				$this->authenticate();
				break;
			case 'endpoint':
				$this->endpoint();
				break;
		}
	}
Пример #2
0
	/**
	 * Accessor:
	 * Returns a field in specified format
	 *
	 * @param  FieldTable  $field
	 * @param  UserTable   $user
	 * @param  string      $output               'html', 'xml', 'json', 'php', 'csvheader', 'csv', 'rss', 'fieldslist', 'htmledit'
	 * @param  string      $reason               'profile' for user profile view, 'edit' for profile edit, 'register' for registration, 'search' for searches
	 * @param  int         $list_compare_types   IF reason == 'search' : 0 : simple 'is' search, 1 : advanced search with modes, 2 : simple 'any' search
	 * @return mixed
	 */
	public function getField( &$field, &$user, $output, $reason, $list_compare_types )
	{
		$hybrid						=	new cbconnectHybrid();
		$fieldName					=	$field->get( 'name' );
		$provider					=	$hybrid->getProviderFromField( $fieldName );
		$providerName				=	$hybrid->getProviderName( $provider );
		$value						=	$user->get( $fieldName );
		$return						=	null;

		switch( $output ) {
			case 'htmledit':
				if ( $reason == 'search' ) {
					$return			=	$this->_fieldSearchModeHtml( $field, $user, $this->_fieldEditToHtml( $field, $user, $reason, 'input', 'text', $value, null ), 'text', $list_compare_types );
				} else {
					if ( Application::Cms()->getClientId() ) {
						$return		=	$this->_fieldEditToHtml( $field, $user, $reason, 'input', 'text', $value, null );
					} elseif ( $value && ( $user->get( 'id' ) == Application::MyUser()->get( 'id' ) ) ) {
						$values		=	array();
						$values[]	=	moscomprofilerHTML::makeOption( '1', CBTxt::T( 'UNLINK_PROVIDER_ACCOUNT', 'Unlink your [provider] account', array( '[provider]' => $providerName ) ) );

						$return		=	$this->_fieldEditToHtml( $field, $user, $reason, 'input', 'multicheckbox', null, null, $values );
					} elseif ( $value && ( ! Application::MyUser()->get( 'id' ) ) ) {
						$url		=	$hybrid->getProviderProfileURL( $provider, $value );

						if ( $url ) {
							$url	=	'<a href="' . $url . '" target="_blank">'
									.		CBTxt::T( 'PROVIDER_PROFILE', '[provider] profile', array( '[provider]' => $providerName ) )
									.	'</a>';
						}

						if ( ! $url ) {
							$url	=	CBTxt::T( 'PROVIDER_PROFILE_ID', '[provider] profile id [provider_id]', array( '[provider]' => $providerName, '[provider_id]' => $value ) );
						}

						$return		=	CBTxt::T( 'PROVIDER_PROFILE_LINKED_TO_ACCOUNT', 'Your [provider_profile] will be linked to this account.', array( '[provider]' => $providerName, '[provider_profile]' => $url, '[provider_id]' => $value ) )
									.	$this->_fieldEditToHtml( $field, $user, $reason, 'input', 'hidden', $value, null );
					}
				}
				break;
			case 'html':
			case 'rss':
				if ( $value ) {
					$url			=	$hybrid->getProviderProfileURL( $provider, $value );

					if ( $url ) {
						$value		=	'<a href="' . $url . '" target="_blank">'
									.		CBTxt::T( 'VIEW_PROVIDER_PROFILE', 'View [provider] Profile', array( '[provider]' => $providerName ) )
									.	'</a>';
					}
				}

				$return				=	$this->formatFieldValueLayout( $this->_formatFieldOutput( $field->get( 'name' ), $value, $output, false ), $reason, $field, $user, false );
				break;
			default:
				$return				=	$this->_formatFieldOutput( $field->get( 'name' ), $value, $output );
				break;
		}

		return $return;
	}