/**
     * @return bool
     */
    public function htmlBuildResult()
    {
        $ela = array();

        foreach( CacheApplicationTool::clusterApplications() as $app )
        {
            if
            (
                $app->applicationObject->applicationType->attribute('type_identifier') == 'e-learning'
                && $app->getCustomParameter('HasLearningTracker')
                && ApplicationFactory::fetchByUri($app->attribute('url_alias'))->canRead()
            )
            {
                $ela[] = array(
                    'headline' => $app->headline,
                    'url'      => $app->applicationUrl(),
                );
            }
        }
        $this->pushResult( 'ela', $ela );
        $this->pushResult( 'content_service_configuration', $this->applicationObject->configurationContentService );
        $this->pushResult( 'is_mobile', ContextTool::instance()->isMobile() );
		$this->pushResult( 'isApplicationAllowedToUser', MMLimitedApplicationsAllowedUsers::hasCurrentUserAccessToApp(CacheApplicationTool::buildLocalizedApplicationByIdentifier('learning-needs-assessment')->application_id) );

        $uuid = $this->user()->attribute('uuid');
        $this->pushResult( 'userId', $uuid );

        //LNA Dashboard url
        $lmtBaseUrl = SolrSafeOperatorHelper::feature('LearningNeedsAssessment', 'LMTBaseUrl');
        $lmtPrefix = SolrSafeOperatorHelper::feature('LearningNeedsAssessment', 'LMTPrefix');
        $this->pushResult( 'dashboardUrl', $lmtBaseUrl . $lmtPrefix );

        $environment = new MMEnvironment();
        $this->pushResult( 'environment', $environment->env );
        
        $userData = CertificatesWebservice::readUserData();
        $this->pushResult( 'companyCode', $userData['CID'] );

        $countryPrefix = preg_replace( "~cluster|_~", "", ClusterTool::clusterIdentifier() );
        $this->pushResult( 'dashBoardCountryPrefix', strtolower( $countryPrefix ) . '_' );

        parent::htmlBuildResult();

        return true;
    }
    /**
     * @return bool
     */
    public function canRead(array $params)
    {
        $isPublic = $params['isPublic'];
        $isFull = $params['isFull'];

        $restrictionLevel = $this->applicationLocalized->restrictionLevel();

        if( $restrictionLevel == ApplicationObject::RESTRICTION_LEVEL_LIMITED)
        {
            $id = MMUsers::getCurrentUserId();
            $authorizedUsers = MMLimitedApplicationsAllowedUsers::fetchAllowedUsersByApplication($this->applicationLocalized->application_id);
            if(empty($authorizedUsers) || !in_array($id, $authorizedUsers)){
                return false;
            }
            else
            {
                return true;
            }
        }

        $allowsPublicView = $this->getApplicationCustomParamater('allowsPublicView');
        if( $isPublic && $allowsPublicView && MMUserHeader::tokenExists( isset( $_GET['t'] ) ? $_GET['t'] : false ) != null)
        {
            return true;
        }
        elseif( $isPublic )
        {
            return false;
        }

        if( !BlockDefault::user()
            ||                    // or if ToU not validated
            (      (bool)BlockDefault::user()
                && !BlockDefault::user()->toUValidated()
                && BlockDefault::iniMerck()->hasVariable( 'LoginSettings', 'ToUCheck' )
                && BlockDefault::iniMerck()->variable( 'LoginSettings', 'ToUCheck') != 'disabled'
            ) )
        {
            return !$isFull;
        }

        return null;
    }
    private function buildResultList()
    {
        $applications = array();
        $applicationIds = array();
        $applicationsByName = array();
        
        foreach( CountryApplicationLibrary::fetchAuthorizedApplicationIds() as $appId )
        {
            if( $appId == 0 )
                continue;
            
            $applicationLocalized = CacheApplicationTool::buildLocalizedApplicationByApplication( $appId );
            
            if( !($applicationLocalized instanceof ApplicationLocalized) )
                continue;

            // Hack : Temporary patch to override in localized application the mm_application.parent_id
            if ( $applicationLocalized->getCustomParameter('DirectAccessDisable') === true )
                continue;

            if( (bool)$applicationLocalized->applicationObject->attribute('application_library') )
            {
                if($applicationLocalized->restrictionLevel() == ApplicationObject::RESTRICTION_LEVEL_LIMITED)
                {
                    if(MMLimitedApplicationsAllowedUsers::hasCurrentUserAccessToApp($applicationLocalized->application_id))
                    {
                        $applications[] = $applicationLocalized->applicationObject;
                        $applicationIds[] = $appId;
                    }
                }
                else
                {
                    $applications[] = $applicationLocalized->applicationObject;
                    $applicationIds[] = $appId;
                }
            }
        }
        
        /* @var $app ApplicationObject */
        foreach( $applications as $k => $app )
            $applicationsByName[$app->applicationLocalized()->attribute('headline')] = $app;
        uksort( $applicationsByName, function($a, $b){ return strnatcasecmp($a, $b); });

        // display all applications
        $this->pushResult('application_ids'     , $applicationIds);
        $this->pushResult('applications_by_name', $applicationsByName);

        // for anonymous users
        $ids = CountryAppsBar::fetchAppsBarApplicationIds();
        $applications_anonymous = array();
        foreach($ids as $id)
            $applications_anonymous[] = (string)$id;
        $this->pushResult('applications_anonymous', $applications_anonymous);

        // banners
        $banners        = array();
        $base           = $this->applicationLocalized()->applicationUrl().'/';
        
        /* @var $application ApplicationObject */
        /* @var $homepageApplication MMHomePage */
        $homepageApplication = ApplicationFactory::fetchByUri('/');
        foreach( $homepageApplication->getAppsToAdd() as $application )
        {
            $bannerFiles = $application->applicationLocalized()->getBanners();

            if (is_array($bannerFiles) && !is_null($bannerFiles['big']) && !is_null($bannerFiles['small']))
            {
                $banners[] = array(
                    'id'        => $this->applicationLocalized()->attribute('id'),
                    'img'       => SolrSafeOperatorHelper::bannerDecHash('/esibuild/banner/'.$application->attribute( 'identifier' ).'/big/'.ClusterTool::clusterIdentifier().'.png'),
                    'img_small' => SolrSafeOperatorHelper::bannerDecHash('/esibuild/banner/'.$application->attribute( 'identifier' ).'/small/'.ClusterTool::clusterIdentifier().'.png'),
                    'label'     => $application->applicationLocalized()->attribute('headline'),
                    'url'       => $base . $application->applicationLocalized()->attribute('url'),
                );
            }

            if( count($banners) >= self::BANNER_ITEMS_LIMIT )
                break;
        }

        $this->pushResult('banners', $banners);
    }