Пример #1
0
 function getEventsBarchart($confid, $treatLocalsSeparately = 0)
 {
     $cidcode = "";
     if (is_array($confid)) {
         foreach ($confid as $cid) {
             $cidcode[] = "(E.e_code='" . $cid . "')";
         }
     } else {
         $cidcode[] = "(E.e_code='" . $confid . "')";
     }
     // ------------------------------------------------------
     // Query database
     // ------------------------------------------------------
     //TODO: if multiple $confids same day, add people without duplocation
     $sql = "\n      SELECT\n        E.e_name,\n        A.av_institute,\n        A.av_email,\n        A.av_city,\n        FROM_UNIXTIME(V.v_start,'%Y-%m-%d') AS 'd0',\n        FROM_UNIXTIME(V.v_end,'%Y-%m-%d') AS 'd1'\n      FROM\n        abs_visits AS V\n        LEFT JOIN zzz_avatars AS A ON A.av_id=V.v_avid\n        LEFT JOIN abs_events AS E ON E.e_code=SUBSTRING(V.v_code,1,4)\n      WHERE\n        (" . implode(" OR ", $cidcode) . ") AND (V.v_status <> 'STATUS_NO')\n      ORDER BY\n        V.v_start";
     $res = $this->query($sql, IS_TESTSERVER);
     // includes a call to connect
     // ------------------------------------------------------
     // Assemble $visit[] from resultset
     // ------------------------------------------------------
     $GLOBALS["eventTitle"] = "";
     $visit = array();
     if ($this->num_rows($res)) {
         while ($cell = $this->next_record_assoc($res)) {
             $isLocal = strpos(strtolower($cell["av_city"]), "stockholm") !== false || strpos(strtolower($cell["av_email"]), "kth.se") !== false || strpos(strtolower($cell["av_email"]), "su.se") !== false || strpos(strtolower($cell["av_email"]), "nordita.org") !== false ? 1 : 0;
             $visit[$cell["av_email"]][] = array($cell["d0"], $cell["d1"], $isLocal);
             $GLOBALS["eventTitle"] = $cell["e_name"];
         }
         // end while
     }
     $modvisit = array();
     foreach ($visit as $email => $data) {
         foreach ($data as $b) {
             $b0 = min($b[1], $b[0]);
             for ($i = 0; $i <= functions::date_diff_workaround($b[1], $b[0]); $i++) {
                 $adate = date("Y-m-d", strtotime($b0 . " + " . $i . " day"));
                 $vtype = "any";
                 if ($treatLocalsSeparately) {
                     $vtype = $b[2] ? "local" : "visitor";
                 }
                 $modvisit[$email][$vtype][$adate] = 1;
             }
         }
     }
     // ------------------------------------------------------
     // Assemble $barchart[]
     // ------------------------------------------------------
     $barchart = array();
     foreach ($modvisit as $email => $array) {
         foreach ($array as $vtype => $days) {
             foreach ($days as $adate => $data) {
                 $barchart[$adate][$vtype] = isset($barchart[$adate][$vtype]) ? $barchart[$adate][$vtype] + 1 : 1;
             }
         }
     }
     ksort($barchart);
     /*
         // ------------------------------------------------------
         // Assemble $barchart[]
         // ------------------------------------------------------
     
         $barchart = array();
         foreach ($visit as $b) {
           $b0 = min($b[1],$b[0]);
           for ($i=0; $i<=functions::date_diff_workaround($b[1],$b[0]); $i++) {
             $adate = date("Y-m-d",strtotime($b0 . " + " . $i . " day"));
             if ($treatLocalsSeparately) {
               if ($b[2]) {
                 $barchart[$adate]["local"] = (isset($barchart[$adate]["local"])) ? $barchart[$adate]["local"]+1 : 1;
               } else {
                 $barchart[$adate]["visitor"] = (isset($barchart[$adate]["visitor"])) ? $barchart[$adate]["visitor"]+1 : 1;
               }
             } else {
               $barchart[$adate] = (isset($barchart[$adate])) ? $barchart[$adate]+1 : 1;
             }
           }
         }
         ksort($barchart);
     */
     return $barchart;
 }
Пример #2
0
 private static function calculateVisitors($personData, $yearfrom = VM_START_YEAR, $yearto = "", $mindays = 1)
 {
     if (empty($yearto)) {
         $yearto = date("Y");
     }
     if ($yearfrom > $yearto) {
         $yearfrom = VM_START_YEAR;
         $yearto = date("Y");
     }
     $visits = array();
     foreach ($personData as $data) {
         $yearVisitStart = date("Y", $data["visit_start"]);
         $yearVisitEnd = date("Y", $data["visit_end"]);
         if ($yearVisitStart <= $yearto && $yearfrom <= $yearVisitEnd) {
             if ($yearVisitStart < $yearfrom) {
                 $yearVisitStart = $yearfrom;
                 $data["visit_start"] = mktime(0, 0, 0, 1, 1, $yearfrom);
             }
             if ($yearto < $yearVisitEnd) {
                 $yearVisitEnd = $yearto;
                 $data["visit_end"] = mktime(0, 0, 0, 12, 31, $yearto);
             }
             $thisApp = array();
             // some ad hoc exclusions
             if ($data["firstname"] . " " . $data["lastname"] == 'Larus Thorlacius') {
                 continue;
             }
             if ($data["firstname"] . " " . $data["lastname"] == 'Troels Harmark') {
                 continue;
             }
             if ($data["firstname"] . " " . $data["lastname"] == 'John Hertz') {
                 continue;
             }
             if ($data["firstname"] . " " . $data["lastname"] == 'Dhrubaditya Mitra') {
                 if (date("Y", $data["visit_start"]) > 2008) {
                     continue;
                 }
                 $data["res"] = 'in';
                 $data["nordic"] = 0;
             }
             $name = $data["firstname"] . " " . $data["lastname"];
             if (!isset($visits[$name])) {
                 $visits[$name]["country"] = !empty($data["res"]) ? strtolower($data["res"]) : "";
                 $visits[$name]["totdays"] = 0;
                 $visits[$name]["institute"] = $data["institute"];
             }
             $visits[$name]["interval"][] = functions::readableDateInterval(date("Y-m-d", $data["visit_start"]), date("Y-m-d", $data["visit_end"]), true);
             $days = functions::date_diff_workaround(date("Y-m-d", $data["visit_start"]), date("Y-m-d", $data["visit_end"]));
             if (!$days) {
                 $days = 1;
             }
             // count only nights, but if visitors arrives and leaves the same day, count as one:
             $visits[$name]["totdays"] = $visits[$name]["totdays"] + $days;
             $visits[$name]["days"][] = $days;
         }
     }
     // end foreach
     foreach ($visits as $name => $data) {
         if ($data["totdays"] < $mindays) {
             unset($visits[$name]);
         }
     }
     return $visits;
 }