Beispiel #1
0
 /**
  * save aggregated stat-informations
  *
  * @param YiidActivity $pYiidActivity
  * @param User $pUser
  * @author Matthias Pfefferle
  */
 public static function createChartData($pYiidActivity)
 {
     $lHost = parse_url($pYiidActivity->getUrl(), PHP_URL_HOST);
     $lDoc = array('url' => $pYiidActivity->getUrl(), 'date' => new MongoDate(strtotime(date("Y-m-d", $pYiidActivity->getC()))));
     $pUser = $pYiidActivity->getUser();
     $lOptions = array();
     // set gender
     switch ($pUser->getGender()) {
         case "m":
             $lOptions["d.sex.m"] = 1;
             break;
         case "f":
             $lOptions["d.sex.f"] = 1;
             break;
         default:
             $lOptions["d.sex.u"] = 1;
             break;
     }
     // set relationship
     switch ($pUser->getRelationshipState()) {
         case IdentityHelper::USER_RELATIONSHIP_STATUS_COMPLICATED:
             $lOptions["d.rel.compl"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_ENGAGED:
             $lOptions["d.rel.eng"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_IN_OPEN_RELATIONSHIP:
             $lOptions["d.rel.ior"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_IN_RELATIONSHIP:
             $lOptions["d.rel.rel"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_MARRIED:
             $lOptions["d.rel.mar"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_SINGLE:
             $lOptions["d.rel.singl"] = 1;
             break;
         case IdentityHelper::USER_RELATIONSHIP_STATUS_WIDOWED:
             $lOptions["d.rel.wid"] = 1;
             break;
         default:
             $lOptions["d.rel.u"] = 1;
             break;
     }
     // set age
     $a = $pUser->getAge();
     if ($a < 18) {
         $lOptions["d.age.u_18"] = 1;
     } elseif ($a >= 18 && $a <= 24) {
         $lOptions["d.age.b_18_24"] = 1;
     } elseif ($a >= 25 && $a <= 34) {
         $lOptions["d.age.b_25_34"] = 1;
     } elseif ($a >= 35 && $a <= 54) {
         $lOptions["d.age.b_35_54"] = 1;
     } elseif ($a >= 55) {
         $lOptions["d.age.o_55"] = 1;
     } else {
         $lOptions["d.age.u"] = 1;
     }
     // set tags
     if ($lTags = $pYiidActivity->getTags()) {
         // add each tag with counts
         foreach ($lTags as $lTag) {
             $lOptions["t." . $lTag . ".cnt"] = 1;
             // set score
             if ($pYiidActivity->getScore() > 0) {
                 $lOptions["t." . $lTag . ".pos"] = 1;
             } else {
                 $lOptions["t." . $lTag . ".neg"] = 1;
             }
             // clickbacks
             if ($pYiidActivity->isClickback()) {
                 $lOptions["s." . $lTag . ".cb"] = 1;
             }
         }
     }
     $lUpdate = false;
     // add online identities
     foreach ($pYiidActivity->getOiids() as $lId) {
         $lOi = OnlineIdentityTable::getInstance()->retrieveByPk($lId);
         if ($lOi) {
             $lUpdate = true;
             if ($pYiidActivity->getScore() > 0) {
                 $lOptions["s." . $lOi->getCommunity()->getCommunity() . ".pos"] = 1;
             } else {
                 $lOptions["s." . $lOi->getCommunity()->getCommunity() . ".neg"] = 1;
             }
             $lOptions["s." . $lOi->getCommunity()->getCommunity() . ".cnt"] = intval($lOi->getFriendCount());
             // clickbacks
             if ($pYiidActivity->isClickback()) {
                 $lOptions["s." . $pYiidActivity->getCbService() . ".cb"] = 1;
             }
         }
     }
     if ($lUpdate) {
         // check if activity is a deal
         if ($lDealId = $pYiidActivity->getDId()) {
             // add deal id
             $lChart = 'deals';
             $lDoc['d_id'] = intval($lDealId);
         } else {
             $lChart = 'charts';
         }
         // mongo collection
         $lCollection = self::getMongoCollection(str_replace('.', '_', $lHost) . ".analytics." . $lChart);
         // update analytics
         $lCollection->update($lDoc, array('$inc' => $lOptions), array("upsert" => true));
     }
 }