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; }
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; }