Пример #1
0
 /**
  *
  * @return array arreglo[tagname]=importancia
  */
 static function getTags($amount, $minRelevance)
 {
     // TODO invocar la api del ecualizador para obtener los tags ecualizados
     // descartar los tags que no cumplan con el "interes" minimo
     // en caso de que la cantidad de tags superen la cantidad maxima especificada
     // descartar los tags de menor importancia (que superen el minimo deseado)
     // hasta que se cumpla con la restriccion de cantidad
     // devolver los tags
     // para evitar errores de tabla no encontrada
     $path = JPATH_ROOT . DS . 'administrator' . DS . 'components' . DS . 'com_eqzonales' . DS . 'tables';
     JTable::addIncludePath($path);
     // recupera los tags del usuario en orden mayor relevancia a menor
     $user = JFactory::getUser();
     $userId = $user->guest ? 0 : $user->id;
     $tagsRaw = HighLevelApi::getTags($userId, true);
     // averigua donde comienzan los tags no deseados
     $length = count($tagsRaw);
     foreach ($tagsRaw as $pos => $currentTag) {
         if ($currentTag->relevance < $minRelevance) {
             $length = $pos;
             break;
         }
     }
     // corta el arreglo para que solo queden los tags mas relevantes
     $onlyRelevants = array_slice($tagsRaw, 0, $length);
     // si la cantidad de tags resultantes supera la cantidad solicitada
     if (count($onlyRelevants) > $amount) {
         // corta el arreglo para que se ajuste a la cantidad solicitada
         $tags = array_slice($onlyRelevants, 0, $amount);
     } else {
         $tags = $onlyRelevants;
     }
     /*
      * convierte el formato de los datos a los esperados por el invocador
      */
     $outTags = array();
     $relevances = array();
     $labels = array();
     foreach ($tags as $tag) {
         $relevances[$tag->name] = $tag->relevance;
         $labels[$tag->name] = $tag->label;
     }
     $outTags[modCloudHelper::RELEVANCES] = $relevances;
     $outTags[modCloudHelper::LABELS] = $labels;
     return $outTags;
 }
Пример #2
0
 function testHLApi()
 {
     $userid = JRequest::getInt('user', 1, 'get');
     //            $tags = HighLevelApi::getTags($userid,true);
     //
     //            foreach ($tags as $tag) {
     //                echo $tag->id;
     //                echo '-';
     //                echo $tag->name;
     //                echo '-';
     //                echo $tag->label;
     //                echo '-';
     //                echo $tag->relevance;
     //                echo '<br/>';
     //            }
     $value = JRequest::getString('value', '', 'get');
     $ancestors = HighLevelApi::getAncestors($userid, $value);
     //  print_r($ancestors);
 }
Пример #3
0
 function getList(&$params)
 {
     $model = modZbannersHelper::getModel();
     // Model Variables
     $vars['cid'] = (int) $params->get('cid');
     $vars['catid'] = (int) $params->get('catid');
     $vars['limit'] = (int) $params->get('count', 1);
     $vars['ordering'] = $params->get('ordering');
     $bannersList = $model->getList($vars);
     if ($params->get('tag_search')) {
         $user =& JFactory::getUser();
         //           $banners = $this->getBanners($user->id, $bannersList);
         #####################3
         $db =& JFactory::getDBO();
         $session = JFactory::getSession();
         $zonal_actual = $session->get('zonales_zonal_name', null);
         $tags = HighLevelApi::getAncestors($user->id, $zonal_actual);
         // suma uno a todos los elementos del array
         // para que hasta los que no tengan valor se tengan en cuenta
         foreach ($tags as $key => $t) {
             $auxA = $key == $zonal_actual ? 1 : 0;
             $tags[$key] = $t + 1 + $auxA;
         }
         $pieces = array_keys($tags);
         $query = 'select cp.content_id as banner_id, cpv.name as tag from #__custom_properties cp, #__custom_properties_fields cpf, #__custom_properties_values cpv where cp.field_id=cpf.id and cp.value_id=cpv.id and cp.ref_table="banner" and cpf.name="root_zonales" and cpv.name in (\'' . implode("','", $pieces) . '\')';
         $db->setQuery($query);
         $dbBanners = $db->loadObjectList();
         // mapeo los banners obtenidos con la relevancia correspondiente
         $bannersW = array();
         foreach ($dbBanners as $bannerTag) {
             $currentTag = $bannerTag->tag;
             foreach ($tags as $tag => $relevance) {
                 if ($tag == $currentTag) {
                     $auxB = isset($bannersW[$bannerTag->banner_id]) ? $bannersW[$bannerTag->banner_id] : 0;
                     $bannersW[$bannerTag->banner_id] = $auxB + $relevance;
                 }
             }
         }
         // solo me interensan los banners que deben ser mostrados
         //        $bannersM = array();
         //        foreach ($bannersList as $banner) {
         //            foreach ($bannersW as $bannerId => $relevanceB) {
         //                if ($bannerId == $banner->bid) {
         //                    $bannersM[$bannerId] = $relevanceB;
         //                }
         //            }
         //        }
         $bannersM = $bannersW;
         // ordeno los banners por relevancia
         $bannersSorted = arsort($bannersM, SORT_NUMERIC);
         /*
          *  ##################
          */
         // normalizo las relevancias
         //        $total = array_sum($tags);
         //        $contributions = array();
         //        foreach ($tags as $name => $value) {
         //            $contributions[$name] = ($value * modZbannersHelper::MAXTOTAL) / $total;
         //        }
         //
         //
         //        $random = rand(0, modZbannersHelper::MAXTOTAL);
         //
         //        $max = max($tags);
         //
         //        // obtengo las posiciones donde cambian los valores
         //        $positions = array();
         //        $positions[] = 0;
         //        $count = count($contributions);
         //        for ($j = 1; $j < $count;$j++){
         //            if ($contributions[$j] != $contributions[$j - 1]){
         //                $positions[] = $j;
         //            }
         //        }
         //
         //        $countP = count($positions);
         //        for ($i = 1;$i < $countP;$i++){
         //            $pos = $positions[$i];
         //            $posPrevius = $positions[$i - 1];
         //            if ($random >= $contributions[$posPrevius] && $random < $contributions[$pos]){
         //                $showMe = $posPrevius;
         //            }
         //        }
         /*
          *  ###################
          */
         // elimino la relevancia. ya no es necesaria
         $bannersIdsRaw = array_keys($bannersM);
         $totalBanners = count($bannersIdsRaw);
         // si tengo mas banners que los solicitados
         if ($totalBanners > $vars['limit']) {
             // elimino los menos relevantes que sobren
             $bannersIds = array_slice($bannersIdsRaw, 0, $vars['limit']);
         } else {
             // si no
             $bannersIds = $bannersIdsRaw;
             // si faltan banners
             if ($totalBanners < $vars['limit']) {
                 // busco en la base de datos banners que no tengan zona asociada
                 // solo la cantidad que faltan
                 $totalBannersNeeded = $vars['limit'] - $totalBanners;
                 $selectNonZone = "SELECT bn.bid FROM #__banner bn where bn.bid not in\n                            (SELECT b.bid FROM #__custom_properties j,\n                                                #__banner b,\n                                                #__custom_properties_fields f\n                                          where j.ref_table='banner'\n                                                and j.content_id=b.bid\n                                                and f.name='root_zonales'\n                                                 and f.id=j.field_id\n                                                ) limit {$totalBannersNeeded}";
                 $db->setQuery($selectNonZone);
                 $noZoneBanners = $db->loadObjectList();
                 if ($bannersSorted) {
                     foreach ($noZoneBanners as $currentBanner) {
                         // los agrego al final porque no son relevantes
                         $bannersIds[] = $currentBanner->bid;
                     }
                 }
             }
         }
         if (count($bannersIds) <= 0) {
             return;
         }
         $case = '';
         foreach ($bannersIds as $pos => $id) {
             $case .= "when {$id} then {$pos} ";
         }
         $catId = $vars['catid'];
         $cId = $vars['cid'];
         $select = "select b.bid, b.impmade, b.imptotal, b.custombannercode, b.name,\n        b.imageurl, b.clickurl, b.params, case b.bid\n            {$case} end as orden from #__banner b  where b.bid in (" . implode(',', $bannersIds) . ") and b.catid={$catId} and b.cid={$cId} and b.showBanner=1 order by orden DESC";
         $db->setQuery($select);
         $banners = $db->loadObjectList();
         ##########################
         //			$document		=& JFactory::getDocument();
         //			$keywords		=  $document->getMetaData( 'keywords' );
         //
         //
         //
         //			$vars['tag_search'] = array($zonal_actual);
     } else {
         $banners = $bannersList;
     }
     $model->impress($banners);
     return $banners;
 }