getAllVariantsByRef(); $unknowns = $db->getUnknownRefs(); if (count($unknowns) > 0) { foreach ($unknowns as $uref) { $allVars[$uref] = array( 'family' => 'Unknown', 'model' => 'Model', 'variant' => '', ); } } ?>
BlackBerry/TCL Firmware Timeline
getAllFiles($db::FULL_ONLY); foreach ($allfiles as $file) { $updates = $db->getAllUpdatesForFile($file['sha1']); $validRefs = array(); $validDevs = array(); $firstSeen = new DateTime(); $firstSeen->setTimezone(new DateTimeZone('CET')); foreach ($updates as $u) { $dev = $allVars[$u['curef']]; $validRefs[] = $u['curef']; $validDevs[] = $dev['family'] . ' ' . $dev['model']; $firstSeenDate = new DateTime($u['seenDate']); $firstSeenDate->setTimezone(new DateTimeZone('CET')); if ($firstSeenDate < $firstSeen) { $firstSeen = $firstSeenDate; } } $validDevs = array_unique($validDevs); sort($validDevs); $device = $allVars[$updates[0]['curef']]; $date = new DateTime($file['published_first']); $date->setTimezone(new DateTimeZone('CET')); $dateLast = new DateTime($file['published_last']); $dateLast->setTimezone(new DateTimeZone('CET')); echo '
'; echo '
'; echo '
' . $file['tv']; if ($file['fv']) { echo '(OTA from ' . $file['fv'] . ')'; } echo '
'; echo '
' . $date->format('Y-m-d') . ' ' . $date->format('H:i.s') . ' CET
'; echo '
' . implode(' / ', $validDevs) . '
'; echo '
Last released: ' . $dateLast->format('Y-m-d H:i.s') . ' (first seen in the wild: ' . $firstSeen->format('Y-m-d H:i.s') . ')
'; echo '
Valid for (order of release): ' . implode(', ', $validRefs) . '
'; #print_r($file); #print_r($updates); echo '
'; } ?>