'.$langs->trans("Year").' ';
diff --git a/htdocs/expedition/tpl/linkedobjectblock.tpl.php b/htdocs/expedition/tpl/linkedobjectblock.tpl.php
index 4f420957660..8b7066adc09 100644
--- a/htdocs/expedition/tpl/linkedobjectblock.tpl.php
+++ b/htdocs/expedition/tpl/linkedobjectblock.tpl.php
@@ -29,7 +29,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
$langs->load("sendings");
echo ' ';
-print load_fiche_titre($langs->trans('RelatedShippings'));
+print load_fiche_titre($langs->trans('RelatedShippings'), '', '');
?>
diff --git a/htdocs/expensereport/card.php b/htdocs/expensereport/card.php
index f456bc0db8b..aa36b690619 100644
--- a/htdocs/expensereport/card.php
+++ b/htdocs/expensereport/card.php
@@ -51,6 +51,8 @@ $date = dol_mktime(0, 0, 0, GETPOST('datemonth'), GETPOST('dateday'), GETPOST('d
$fk_projet=GETPOST('fk_projet');
$vatrate=GETPOST('vatrate');
$ref=GETPOST("ref",'alpha');
+$comments=GETPOST('comments');
+$fk_c_type_fees=GETPOST('fk_c_type_fees','int');
// If socid provided by ajax company selector
if (! empty($_REQUEST['socid_id']))
@@ -92,7 +94,19 @@ $hideref = (GETPOST('hideref', 'int') ? GETPOST('hideref', 'int') : (! empty($co
* Actions
*/
-if ($cancel) $action='';
+if ($cancel)
+{
+ $action='';
+ $fk_projet='';
+ $date_start='';
+ $date_end='';
+ $date='';
+ $comments='';
+ $vatrate='';
+ $value_unit='';
+ $qty=1;
+ $fk_c_type_fees=-1;
+}
if ($action == 'confirm_delete' && GETPOST("confirm") == "yes" && $id > 0 && $user->rights->expensereport->supprimer)
{
@@ -125,7 +139,7 @@ if ($action == 'add' && $user->rights->expensereport->creer)
if ($object->periode_existe($user,$object->date_debut,$object->date_fin))
{
$error++;
- setEventMessage($langs->trans("ErrorDoubleDeclaration"),'errors');
+ setEventMessages($langs->trans("ErrorDoubleDeclaration"), null, 'errors');
$action='create';
}
@@ -253,7 +267,7 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $
if ($result)
{
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($emailFrom,2),$mailfile->getValidAddress($emailTo,2));
- setEventMessage($mesg);
+ setEventMessages($mesg, null, 'mesgs');
header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit;
}
@@ -265,11 +279,11 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $
$mesg='';
$mesg.=$langs->trans('ErrorFailedToSendMail', $emailFrom, $emailTo);
$mesg.=' '.$mailfile->error;
- setEventMessage($mesg,'errors');
+ setEventMessages($mesg, null, 'errors');
}
else
{
- setEventMessage('No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS', 'warnings');
+ setEventMessages('No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS', null, 'warnings');
}
}
}
@@ -281,7 +295,7 @@ if ($action == "confirm_validate" && GETPOST("confirm") == "yes" && $id > 0 && $
}
else
{
- setEventMessage($langs->trans("NoEmailSentBadSenderOrRecipientEmail"), 'warnings');
+ setEventMessages($langs->trans("NoEmailSentBadSenderOrRecipientEmail"), null, 'warnings');
$action='';
}
}
@@ -476,15 +490,15 @@ if ($action == "confirm_approve" && GETPOST("confirm") == "yes" && $id > 0 && $u
// SEND
$result=$mailfile->sendfile();
if ($result):
- setEventMessage($langs->trans("MailSuccessfulySent",$emailFrom,$emailTo));
+ setEventMessages($langs->trans("MailSuccessfulySent",$emailFrom,$emailTo), null, 'mesgs');
Header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit;
else:
- setEventMessage($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo),'errors');
+ setEventMessages($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo), null, 'errors');
endif;
else:
- setEventMessage($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo),'errors');
+ setEventMessages($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo), null, 'errors');
endif;
// END - Send mail
else : // if ($resultPDF)
@@ -562,13 +576,13 @@ if ($action == "confirm_refuse" && GETPOST('confirm')=="yes" && $id > 0 && $user
$result=$mailfile->sendfile();
if ($result)
{
- setEventMessage($langs->trans("MailSuccessfulySent",$emailFrom,$emailTo));
+ setEventMessages($langs->trans("MailSuccessfulySent",$emailFrom,$emailTo), null, 'mesgs');
Header("Location: ".$_SERVER["PHP_SELF"]."?id=".$id);
exit;
}
else
{
- setEventMessage($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo),'errors');
+ setEventMessages($langs->trans("ErrorFailedToSendMail",$emailFrom,$emailTo), null, 'errors');
$mesg="Impossible d'envoyer l'email.";
}
// END - Send mail
@@ -863,7 +877,7 @@ if ($action == "addline")
if($object_ligne->value_unit==0)
{
$error++;
- setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("UP")), null, 'errors');
+ setEventMessages($langs->trans("ErrorFieldRequired", $langs->transnoentitiesnoconv("PriceUTTC")), null, 'errors');
}
// S'il y'a eu au moins une erreur
@@ -1045,8 +1059,8 @@ else if ($action == 'remove_file')
$upload_dir = $conf->expensereport->dir_output;
$file = $upload_dir . '/' . GETPOST('file');
$ret=dol_delete_file($file,0,0,0,$object);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
$action='';
}
}
@@ -1184,9 +1198,8 @@ else
print $langs->trans('NotUserRightToView');
print '';
- $db->close();
-
llxFooter();
+ $db->close();
exit;
}
@@ -1615,7 +1628,19 @@ else
$sql.= ' LEFT JOIN '.MAIN_DB_PREFIX.'projet as pjt ON fde.fk_projet=pjt.rowid';
$sql.= ' WHERE fde.fk_expensereport = '.$object->id;
- $resql = $db->query($sql);
+ print '';
+
+ $actiontouse='updateligne';
+ if (($object->fk_statut==0 || $object->fk_statut==99) && $action != 'editline') $actiontouse='addline';
+
+ print '
';
+
+ print '
';
+
}
else
{
diff --git a/htdocs/expensereport/class/expensereport.class.php b/htdocs/expensereport/class/expensereport.class.php
index 0dba68b5b5c..b781d4f3dc6 100644
--- a/htdocs/expensereport/class/expensereport.class.php
+++ b/htdocs/expensereport/class/expensereport.class.php
@@ -1503,7 +1503,6 @@ class ExpenseReport extends CommonObject
$this->error=$this->db->error();
return -1;
}
-
}
/**
@@ -1591,7 +1590,7 @@ class ExpenseReportLine
*
* @param DoliDB $db Handlet database
*/
- function ExpenseReportLine($db)
+ function __construct($db)
{
$this->db= $db;
}
@@ -1801,9 +1800,10 @@ class ExpenseReportLine
* @param int $selected preselect status
* @param string $htmlname Name of HTML select
* @param int $useempty 1=Add empty line
+ * @param int $useshortlabel Use short labels
* @return string HTML select with status
*/
-function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempty=1)
+function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempty=1, $useshortlabel=0)
{
global $db, $langs;
@@ -1811,7 +1811,9 @@ function select_expensereport_statut($selected='',$htmlname='fk_statut',$useempt
print '';
if ($useempty) print ' ';
- foreach ($tmpep->statuts as $key => $val)
+ $arrayoflabels=$tmpep->statuts;
+ if ($useshortlabel) $arrayoflabels=$tmpep->statuts_short;
+ foreach ($arrayoflabels as $key => $val)
{
if ($selected != '' && $selected == $key)
{
diff --git a/htdocs/expensereport/document.php b/htdocs/expensereport/document.php
index 86ff064db7d..f16d6ca14e1 100644
--- a/htdocs/expensereport/document.php
+++ b/htdocs/expensereport/document.php
@@ -108,7 +108,7 @@ if ($object->id)
// Ref
print ''.$langs->trans("Ref").' ';
- print $form->showrefnav($object, 'id', $linkback, 1, 'rowid', 'ref', '');
+ print $form->showrefnav($object, 'ref', $linkback, 1, 'ref', 'ref', '');
print ' ';
// Societe
diff --git a/htdocs/expensereport/list.php b/htdocs/expensereport/list.php
index 4a12d25f8f2..502125faf61 100644
--- a/htdocs/expensereport/list.php
+++ b/htdocs/expensereport/list.php
@@ -1,6 +1,6 @@
- * Copyright (C) 2004-2008 Laurent Destailleur
+ * Copyright (C) 2004-2015 Laurent Destailleur
* Copyright (C) 2004 Eric Seigne
* Copyright (C) 2005-2009 Regis Houssin
* Copyright (C) 2015 Alexandre Spangaro
@@ -79,7 +79,7 @@ $fieldstosearchall = array(
* View
*/
-$html = new Form($db);
+$form = new Form($db);
$formother = new FormOther($db);
$expensereporttmp=new ExpenseReport($db);
@@ -177,6 +177,12 @@ if (empty($user->rights->expensereport->readall) && empty($user->rights->expense
}
$sql.= $db->order($sortfield,$sortorder);
+$nbtotalofrecords = 0;
+if (empty($conf->global->MAIN_DISABLE_FULL_SCANLIST))
+{
+ $result = $db->query($sql);
+ $nbtotalofrecords = $db->num_rows($result);
+}
$sql.= $db->plimit($limit+1, $offset);
//print $sql;
@@ -241,7 +247,7 @@ if ($resql)
// User
if ($user->rights->expensereport->readall || $user->rights->expensereport->lire_tous){
print '';
- $html->select_dolusers($search_user,"search_user",1,"",0,'');
+ print $form->select_dolusers($search_user, 'search_user', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
print ' ';
} else {
print ' ';
@@ -257,7 +263,7 @@ if ($resql)
// Status
print '';
- select_expensereport_statut($search_status,'search_status');
+ select_expensereport_statut($search_status,'search_status',1,1);
print ' ';
print '';
diff --git a/htdocs/expensereport/payment/card.php b/htdocs/expensereport/payment/card.php
index eb5314fbd30..19d5b3206f7 100644
--- a/htdocs/expensereport/payment/card.php
+++ b/htdocs/expensereport/payment/card.php
@@ -66,7 +66,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->expensere
}
else
{
- setEventMessage($payment->error, 'errors');
+ setEventMessages($payment->error, $payment->errors, 'errors');
$db->rollback();
}
}
@@ -104,7 +104,7 @@ if ($action == 'confirm_valide' && $confirm == 'yes' && $user->rights->expensere
}
else
{
- setEventMessage($payment->error);
+ setEventMessages($payment->error, $payment->errors, 'errors');
$db->rollback();
}
}
diff --git a/htdocs/expensereport/payment/payment.php b/htdocs/expensereport/payment/payment.php
index 94f37389fc9..b7d40b2e65b 100644
--- a/htdocs/expensereport/payment/payment.php
+++ b/htdocs/expensereport/payment/payment.php
@@ -313,7 +313,5 @@ if (GETPOST("action") == 'create')
print "\n";
}
-
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/expensereport/stats/index.php b/htdocs/expensereport/stats/index.php
index d64cbca648f..80965deebfa 100644
--- a/htdocs/expensereport/stats/index.php
+++ b/htdocs/expensereport/stats/index.php
@@ -224,7 +224,7 @@ print ' ';
print ''.$langs->trans("User").' ';
$include='';
if (empty($user->rights->expensereport->readall) && empty($user->rights->expensereport->lire_tous)) $include='hierarchy';
-print $form->select_dolusers($userid,'userid',1,'',0,$include);
+print $form->select_dolusers($userid, 'userid', 1, '', 0, $include, '', 0, 0, 0, '', 0, '', 'maxwidth300');
print ' ';
// Year
print ''.$langs->trans("Year").' ';
diff --git a/htdocs/exports/export.php b/htdocs/exports/export.php
index e0870411003..34dc813b989 100644
--- a/htdocs/exports/export.php
+++ b/htdocs/exports/export.php
@@ -177,7 +177,7 @@ if ($action=='selectfield')
//print_r($array_selected);
$_SESSION["export_selected_fields"]=$array_selected;
- setEventMessage($warnings, 'warnings');
+ setEventMessages($warnings, null, 'warnings');
}
}
@@ -243,12 +243,12 @@ if ($action == 'builddoc')
$result=$objexport->build_file($user, GETPOST('model','alpha'), $datatoexport, $array_selected, $array_filtervalue);
if ($result < 0)
{
- setEventMessage($objexport->error, 'errors');
+ setEventMessages($objexport->error, $objexport->errors, 'errors');
$sqlusedforexport=$objexport->sqlusedforexport;
}
else
{
- setEventMessage($langs->trans("FileSuccessfullyBuilt"));
+ setEventMessages($langs->trans("FileSuccessfullyBuilt"), null, 'mesgs');
$sqlusedforexport=$objexport->sqlusedforexport;
}
}
@@ -259,8 +259,8 @@ if ($step == 5 && $action == 'confirm_deletefile' && $confirm == 'yes')
$file = $upload_dir . "/" . GETPOST('file'); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$ret=dol_delete_file($file);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('file')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('file')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('file')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('file')), null, 'errors');
header('Location: '.$_SERVER["PHP_SELF"].'?step='.$step.'&datatoexport='.$datatoexport);
exit;
}
@@ -307,15 +307,15 @@ if ($action == 'add_export_model')
$result = $objexport->create($user);
if ($result >= 0)
{
- setEventMessage($langs->trans("ExportModelSaved",$objexport->model_name));
+ setEventMessages($langs->trans("ExportModelSaved",$objexport->model_name), null, 'mesgs');
}
else
{
$langs->load("errors");
if ($objexport->errno == 'DB_ERROR_RECORD_ALREADY_EXISTS')
- setEventMessage($langs->trans("ErrorExportDuplicateProfil"), 'errors');
+ setEventMessages($langs->trans("ErrorExportDuplicateProfil"), null, 'errors');
else
- setEventMessage($objexport->error, 'errors');
+ setEventMessages($objexport->error, $objexport->errors, 'errors');
}
}
else
diff --git a/htdocs/externalsite/admin/externalsite.php b/htdocs/externalsite/admin/externalsite.php
index 90fb5aff9f0..bd0449dc028 100644
--- a/htdocs/externalsite/admin/externalsite.php
+++ b/htdocs/externalsite/admin/externalsite.php
@@ -59,12 +59,12 @@ if ($action == 'update')
if ($i >= 2)
{
$db->commit();
- setEventMessage($langs->trans("SetupSaved"));
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
}
else
{
$db->rollback();
- setEventMessage($db->lasterror(), 'errors');
+ setEventMessages($db->lasterror(), null, 'errors');
}
}
diff --git a/htdocs/fichinter/card.php b/htdocs/fichinter/card.php
index 9dd3577b91d..3fd45013ab5 100644
--- a/htdocs/fichinter/card.php
+++ b/htdocs/fichinter/card.php
@@ -6,6 +6,7 @@
* Copyright (C) 2013 Florian Henry
* Copyright (C) 2014-2015 Ferran Marcet
* Copyright (C) 201 Charlie Benke
+ * Copyright (C) 2015 Abbes Bahfir
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -385,7 +386,7 @@ if (empty($reshook))
$result=$object->update($user);
if ($result<0) {
- setEventMessage($object->error,'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -428,8 +429,8 @@ if (empty($reshook))
$upload_dir = $conf->ficheinter->dir_output;
$file = $upload_dir . '/' . GETPOST('file');
$ret=dol_delete_file($file,0,0,0,$object);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
}
// Set into a project
@@ -450,7 +451,7 @@ if (empty($reshook))
{
$result=$object->delete($user);
if ($result<0) {
- setEventMessage($object->error,'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
header('Location: '.DOL_URL_ROOT.'/fichinter/list.php?leftmenu=ficheinter');
@@ -466,8 +467,8 @@ if (empty($reshook))
// Add line
else if ($action == "addline" && $user->rights->ficheinter->creer)
{
- if (!GETPOST('np_desc'))
- {
+ if (!GETPOST('np_desc') && empty($conf->global->FICHINTER_EMPTY_LINE_DESC) )
+ {
$mesg=''.$langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Description")).'
';
$error++;
}
@@ -801,7 +802,7 @@ if (empty($reshook))
if ($result)
{
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2));
- setEventMessage($mesg);
+ setEventMessages($mesg, null, 'mesgs');
$error=0;
// Initialisation donnees
@@ -1215,7 +1216,7 @@ else if ($id > 0 || ! empty($ref))
if (empty($numref))
{
$error++;
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
else
@@ -1566,16 +1567,18 @@ else if ($id > 0 || ! empty($ref))
$var=true;
- print '\n";
- print '';
- // editeur wysiwyg
- require_once DOL_DOCUMENT_ROOT.'/core/class/doleditor.class.php';
- $doleditor=new DolEditor('np_desc',GETPOST('np_desc','alpha'),'',100,'dolibarr_details','',false,true,$conf->global->FCKEDITOR_ENABLE_DETAILS,ROWS_2,70);
- $doleditor->Create();
- print ' ';
+ print ' \n";
+ print '';
+ // editeur wysiwyg
+ if (empty($conf->global->FICHINTER_EMPTY_LINE_DESC)) {
+ require_once DOL_DOCUMENT_ROOT . '/core/class/doleditor.class.php';
+ $doleditor = new DolEditor('np_desc', GETPOST('np_desc', 'alpha'), '', 100, 'dolibarr_details', '', false, true, $conf->global->FCKEDITOR_ENABLE_DETAILS, ROWS_2, 70);
+ $doleditor->Create();
+ }
+ print ' ';
- // Date intervention
- print '';
+ // Date intervention
+ print ' ';
$now=dol_now();
$timearray=dol_getdate($now);
if (! GETPOST('diday','int')) $timewithnohour=dol_mktime(0,0,0,$timearray['mon'],$timearray['mday'],$timearray['year']);
diff --git a/htdocs/fichinter/contact.php b/htdocs/fichinter/contact.php
index 854428a5ccf..b92c1442d14 100644
--- a/htdocs/fichinter/contact.php
+++ b/htdocs/fichinter/contact.php
@@ -46,7 +46,7 @@ $result = $object->fetch($id,$ref);
/*
- * Ajout d'un nouveau contact
+ * Adding a new contact
*/
if ($action == 'addcontact' && $user->rights->ficheinter->creer)
@@ -71,17 +71,17 @@ if ($action == 'addcontact' && $user->rights->ficheinter->creer)
$mesg = $object->error;
}
- setEventMessage($mesg, 'errors');
+ setEventMessages($mesg, null, 'errors');
}
}
-// bascule du statut d'un contact
+// Toggle the status of a contact
else if ($action == 'swapstatut' && $user->rights->ficheinter->creer)
{
$result=$object->swapContactStatus(GETPOST('ligne','int'));
}
-// Efface un contact
+// Deletes a contact
else if ($action == 'deletecontact' && $user->rights->ficheinter->creer)
{
$result = $object->delete_contact(GETPOST('lineid','int'));
@@ -121,8 +121,8 @@ if ($id > 0 || ! empty($ref))
/*
- * Fiche intervention synthese pour rappel
- */
+ * Fiche intervention synthese pour rappel
+ */
print '';
$linkback = ''.$langs->trans("BackToList").' ';
diff --git a/htdocs/fichinter/info.php b/htdocs/fichinter/info.php
index f577913ebe2..5be4af71d27 100644
--- a/htdocs/fichinter/info.php
+++ b/htdocs/fichinter/info.php
@@ -65,6 +65,5 @@ print '
';
print '';
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php
index 0dc4a66c083..0518d40cd91 100644
--- a/htdocs/fichinter/tpl/linkedobjectblock.tpl.php
+++ b/htdocs/fichinter/tpl/linkedobjectblock.tpl.php
@@ -26,7 +26,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
$langs->load("interventions");
echo ' ';
-print load_fiche_titre($langs->trans('RelatedInterventions'));
+print load_fiche_titre($langs->trans('RelatedInterventions'), '', '');
?>
diff --git a/htdocs/filefunc.inc.php b/htdocs/filefunc.inc.php
index 7abc17b49cd..534ef2587bc 100644
--- a/htdocs/filefunc.inc.php
+++ b/htdocs/filefunc.inc.php
@@ -166,7 +166,11 @@ define('DOL_DOCUMENT_ROOT', $dolibarr_main_document_root); // Filesystem core
$tmp='';
$found=0;
$real_dolibarr_main_document_root=str_replace('\\','/',realpath($dolibarr_main_document_root)); // A) Value found into config file, to say where are store htdocs files. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs
-$pathroot=$_SERVER["DOCUMENT_ROOT"]; // B) Value reported by web server setup, to say where is root of web server instance. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs
+if (!empty($_SERVER["DOCUMENT_ROOT"])) {
+ $pathroot = $_SERVER["DOCUMENT_ROOT"]; // B) Value reported by web server setup, to say where is root of web server instance. Ex: C:/xxx/dolibarr, C:/xxx/dolibarr/htdocs
+} else {
+ $pathroot = 'BOGUS';
+}
$paths=explode('/',str_replace('\\','/',$_SERVER["SCRIPT_NAME"])); // C) Value reported by web server, to say full path on filesystem of a file. Ex: /dolibarr/htdocs/admin/system/phpinfo.php
// Try to detect if $_SERVER["DOCUMENT_ROOT"]+start of $_SERVER["SCRIPT_NAME"] is $dolibarr_main_document_root. If yes, relative url to add before dol files is this start part.
$concatpath='';
diff --git a/htdocs/fourn/card.php b/htdocs/fourn/card.php
index 6613cd8f05c..c19773653c7 100644
--- a/htdocs/fourn/card.php
+++ b/htdocs/fourn/card.php
@@ -375,7 +375,7 @@ if ($object->id > 0)
$orders2invoice = $db->num_rows($resql2);
$db->free($resql2);
} else {
- setEventMessage($db->lasterror(),'errors');
+ setEventMessages($db->lasterror(), null, 'errors');
}
// TODO move to DAO class
diff --git a/htdocs/fourn/class/fournisseur.commande.class.php b/htdocs/fourn/class/fournisseur.commande.class.php
index cfd952da7d5..1888cdc8adc 100644
--- a/htdocs/fourn/class/fournisseur.commande.class.php
+++ b/htdocs/fourn/class/fournisseur.commande.class.php
@@ -63,6 +63,9 @@ class CommandeFournisseur extends CommonOrder
// -> 7=Canceled/Never received -> (reopen) 3=Process runing
// -> 6=Canceled -> (reopen) 2=Approved
// -> 9=Refused -> (reopen) 1=Validated
+ // Note: billed or not is on another field "billed"
+ var $statuts; // List of status
+
var $socid;
var $fourn_id;
var $date;
@@ -138,7 +141,7 @@ class CommandeFournisseur extends CommonOrder
$this->statuts[5] = 'StatusOrderReceivedAll';
$this->statuts[6] = 'StatusOrderCanceled'; // Approved->Canceled
$this->statuts[7] = 'StatusOrderCanceled'; // Process running->canceled
- $this->statuts[8] = 'StatusOrderBilled'; // Everything is finish, order received totally and bill received
+ //$this->statuts[8] = 'StatusOrderBilled'; // Everything is finish, order received totally and bill received
$this->statuts[9] = 'StatusOrderRefused';
}
@@ -510,8 +513,10 @@ class CommandeFournisseur extends CommonOrder
global $langs;
$langs->load('orders');
- if($statut==5 && $this->billed == 1) $statut = 8;
-
+ $billedtext='';
+ //if ($statut==5 && $this->billed == 1) $statut = 8;
+ if ($this->billed == 1) $billedtext=$langs->trans("Billed");
+
// List of language codes for status
$statutshort[0] = 'StatusOrderDraftShort';
$statutshort[1] = 'StatusOrderValidatedShort';
@@ -521,7 +526,7 @@ class CommandeFournisseur extends CommonOrder
$statutshort[5] = 'StatusOrderReceivedAllShort';
$statutshort[6] = 'StatusOrderCanceledShort';
$statutshort[7] = 'StatusOrderCanceledShort';
- $statutshort[8] = 'StatusOrderBilledShort';
+ //$statutshort[8] = 'StatusOrderBilledShort';
$statutshort[9] = 'StatusOrderRefusedShort';
if ($mode == 0)
@@ -550,15 +555,15 @@ class CommandeFournisseur extends CommonOrder
}
if ($mode == 4)
{
- if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==8) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]);
- if ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]);
+ if ($statut==0) return img_picto($langs->trans($this->statuts[$statut]),'statut0').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==1) return img_picto($langs->trans($this->statuts[$statut]),'statut1').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==2) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==3) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==4) return img_picto($langs->trans($this->statuts[$statut]),'statut3').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==5) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==6 || $statut==7) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==8) return img_picto($langs->trans($this->statuts[$statut]),'statut6').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
+ if ($statut==9) return img_picto($langs->trans($this->statuts[$statut]),'statut5').' '.$langs->trans($this->statuts[$statut]).($billedtext?' - '.$billedtext:'');
}
if ($mode == 5)
{
@@ -797,7 +802,8 @@ class CommandeFournisseur extends CommonOrder
if (! $error)
{
- $this->ref=$newref;
+ $this->ref = $this->newref;
+
if ($movetoapprovestatus) $this->statut = 2;
else $this->statut = 1;
if (empty($secondlevel)) // standard or first level approval
diff --git a/htdocs/fourn/class/fournisseur.product.class.php b/htdocs/fourn/class/fournisseur.product.class.php
index d7344787623..424f9ad65d4 100644
--- a/htdocs/fourn/class/fournisseur.product.class.php
+++ b/htdocs/fourn/class/fournisseur.product.class.php
@@ -353,7 +353,7 @@ class ProductFournisseur extends Product
function fetch_product_fournisseur_price($rowid, $ignore_expression = 0)
{
$sql = "SELECT pfp.rowid, pfp.price, pfp.quantity, pfp.unitprice, pfp.remise_percent, pfp.remise, pfp.tva_tx, pfp.fk_availability,";
- $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.unitcharges, pfp.fk_supplier_price_expression, pfp.delivery_time_days"; // , pfp.recuperableonly as fourn_tva_npr"; FIXME this field not exist in llx_product_fournisseur_price
+ $sql.= " pfp.fk_soc, pfp.ref_fourn, pfp.fk_product, pfp.charges, pfp.cost_price, pfp.unitcharges, pfp.fk_supplier_price_expression, pfp.delivery_time_days"; // , pfp.recuperableonly as fourn_tva_npr"; FIXME this field not exist in llx_product_fournisseur_price
$sql.= " FROM ".MAIN_DB_PREFIX."product_fournisseur_price as pfp";
$sql.= " WHERE pfp.rowid = ".$rowid;
@@ -368,12 +368,12 @@ class ProductFournisseur extends Product
$this->fourn_ref = $obj->ref_fourn; // deprecated
$this->ref_supplier = $obj->ref_fourn;
$this->fourn_price = $obj->price;
- $this->fourn_charges = $obj->charges;
+ $this->fourn_charges = $obj->charges; // deprecated
$this->fourn_qty = $obj->quantity;
$this->fourn_remise_percent = $obj->remise_percent;
$this->fourn_remise = $obj->remise;
$this->fourn_unitprice = $obj->unitprice;
- $this->fourn_unitcharges = $obj->unitcharges;
+ $this->fourn_unitcharges = $obj->unitcharges; // deprecated
$this->fourn_tva_tx = $obj->tva_tx;
$this->product_id = $obj->fk_product; // deprecated
$this->fk_product = $obj->fk_product;
@@ -456,9 +456,9 @@ class ProductFournisseur extends Product
$prodfourn->fourn_qty = $record["quantity"];
$prodfourn->fourn_remise_percent = $record["remise_percent"];
$prodfourn->fourn_remise = $record["remise"];
- $prodfourn->fourn_unitprice = $record["unitprice"];
- $prodfourn->fourn_charges = $record["charges"];
- $prodfourn->fourn_unitcharges = $record["unitcharges"];
+ $prodfourn->fourn_unitprice = $record["unitprice"];
+ $prodfourn->fourn_charges = $record["charges"]; // deprecated
+ $prodfourn->fourn_unitcharges = $record["unitcharges"]; // deprecated
$prodfourn->fourn_tva_tx = $record["tva_tx"];
$prodfourn->fourn_id = $record["fourn_id"];
$prodfourn->fourn_name = $record["supplier_name"];
@@ -591,8 +591,8 @@ class ProductFournisseur extends Product
$this->fourn_remise_percent = $record["remise_percent"];
$this->fourn_remise = $record["remise"];
$this->fourn_unitprice = $fourn_unitprice;
- $this->fourn_charges = $record["charges"];
- $this->fourn_unitcharges = $record["unitcharges"];
+ $this->fourn_charges = $record["charges"]; // deprecated
+ $this->fourn_unitcharges = $record["unitcharges"]; // deprecated
$this->fourn_tva_tx = $record["tva_tx"];
$this->fourn_id = $record["fourn_id"];
$this->fourn_name = $record["supplier_name"];
diff --git a/htdocs/fourn/class/paiementfourn.class.php b/htdocs/fourn/class/paiementfourn.class.php
index 98876ab2519..5326bbde85e 100644
--- a/htdocs/fourn/class/paiementfourn.class.php
+++ b/htdocs/fourn/class/paiementfourn.class.php
@@ -128,10 +128,9 @@ class PaiementFourn extends Paiement
$this->total = 0;
foreach ($this->amounts as $key => $value)
{
- $value = price2num($value);
- $val = round($value, 2);
- $this->amounts[$key] = $val;
- $this->total += $val;
+ $newvalue = price2num($value, 'MT');
+ $this->amounts[$key] = $newvalue;
+ $this->total += $newvalue;
}
$this->total = price2num($this->total);
diff --git a/htdocs/fourn/commande/card.php b/htdocs/fourn/commande/card.php
index 9a1a6ec67d4..65394016f6c 100644
--- a/htdocs/fourn/commande/card.php
+++ b/htdocs/fourn/commande/card.php
@@ -4,7 +4,7 @@
* Copyright (C) 2005 Eric Seigne
* Copyright (C) 2005-2012 Regis Houssin
* Copyright (C) 2010-2015 Juanjo Menent
- * Copyright (C) 2011 Philippe Grand
+ * Copyright (C) 2011-2015 Philippe Grand
* Copyright (C) 2012 Marcos García
* Copyright (C) 2013 Florian Henry
* Copyright (C) 2014 Ion Agorria
@@ -95,9 +95,6 @@ $extrafields = new ExtraFields($db);
// fetch optionals attributes and labels
$extralabels=$extrafields->fetch_name_optionals_label($object->table_element);
-//Date prefix
-$date_pf = '';
-
// Load object
if ($id > 0 || ! empty($ref))
{
@@ -153,14 +150,14 @@ if (empty($reshook))
if ($result < 0) setEventMessages($object->error, $object->errors, 'errors');
}
- // conditions de reglement
+ // payment conditions
if ($action == 'setconditions' && $user->rights->fournisseur->commande->creer)
{
$result=$object->setPaymentTerms(GETPOST('cond_reglement_id','int'));
if ($result < 0) setEventMessages($object->error, $object->errors, 'errors');
}
- // mode de reglement
+ // payment mode
if ($action == 'setmode' && $user->rights->fournisseur->commande->creer)
{
$result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int'));
@@ -174,7 +171,7 @@ if (empty($reshook))
if ($result < 0) setEventMessages($object->error, $object->errors, 'errors');
}
- // date de livraison
+ // date of delivery
if ($action == 'setdate_livraison' && $user->rights->fournisseur->commande->creer)
{
$result=$object->set_date_livraison($user,$datelivraison);
@@ -196,7 +193,7 @@ if (empty($reshook))
if ($action == 'reopen') // no test on permission here, permission to use will depends on status
{
- if (in_array($object->statut, array(1, 2, 3, 5, 6, 7, 9)))
+ if (in_array($object->statut, array(1, 2, 3, 5, 6, 7, 9)) || ($object->statut == 4 && $object->billed))
{
if ($object->statut == 1) $newstatus=0; // Validated->Draft
else if ($object->statut == 2) $newstatus=0; // Approved->Draft
@@ -205,13 +202,20 @@ if (empty($reshook))
else if ($object->statut == 6) $newstatus=2; // Canceled->Approved
else if ($object->statut == 7) $newstatus=3; // Canceled->Process running
else if ($object->statut == 9) $newstatus=1; // Refused->Validated
-
+ else $newstatus = 2;
+
$db->begin();
$result = $object->setStatus($user, $newstatus);
if ($result > 0)
{
- if ($newstatus == 0)
+ $sql = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseur';
+ $sql.= ' SET billed = 0';
+ $sql.= ' WHERE rowid = '.$object->id;
+
+ $resql=$db->query($sql);
+
+ if ($newstatus == 0)
{
$sql = 'UPDATE '.MAIN_DB_PREFIX.'commande_fournisseur';
$sql.= ' SET fk_user_approve = null, fk_user_approve2 = null, date_approve = null, date_approve2 = null';
@@ -241,7 +245,7 @@ if (empty($reshook))
{
$ret=$object->classifyBilled();
if ($ret < 0) {
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -256,8 +260,8 @@ if (empty($reshook))
// Set if we used free entry or predefined product
$predef='';
$product_desc=(GETPOST('dp_desc')?GETPOST('dp_desc'):'');
- $date_start=dol_mktime(GETPOST('date_start'.$date_pf.'hour'), GETPOST('date_start'.$date_pf.'min'), 0, GETPOST('date_start'.$date_pf.'month'), GETPOST('date_start'.$date_pf.'day'), GETPOST('date_start'.$date_pf.'year'));
- $date_end=dol_mktime(GETPOST('date_end'.$date_pf.'hour'), GETPOST('date_end'.$date_pf.'min'), 0, GETPOST('date_end'.$date_pf.'month'), GETPOST('date_end'.$date_pf.'day'), GETPOST('date_end'.$date_pf.'year'));
+ $date_start=dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year'));
+ $date_end=dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year'));
if (GETPOST('prod_entry_mode') == 'free')
{
$idprod=0;
@@ -288,27 +292,27 @@ if (empty($reshook))
if (GETPOST('prod_entry_mode')=='free' && GETPOST('price_ht') < 0 && $qty < 0)
{
- setEventMessage($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPrice'), $langs->transnoentitiesnoconv('Qty')), 'errors');
+ setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPrice'), $langs->transnoentitiesnoconv('Qty')), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && ! GETPOST('idprodfournprice') && GETPOST('type') < 0)
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='') // Unit price can be 0 but not ''
{
- setEventMessage($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), 'errors');
+ setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && ! GETPOST('dp_desc'))
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), null, 'errors');
$error++;
}
if (! GETPOST('qty'))
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors');
$error++;
}
@@ -377,7 +381,7 @@ if (empty($reshook))
// Quantity too low
$error++;
$langs->load("errors");
- setEventMessage($langs->trans("ErrorQtyTooLowForThisSupplier"), 'errors');
+ setEventMessages($langs->trans("ErrorQtyTooLowForThisSupplier"), null, 'errors');
}
}
else if((GETPOST('price_ht')!=='' || GETPOST('price_ttc')!=='') && empty($error))
@@ -474,7 +478,7 @@ if (empty($reshook))
}
/*
- * Mise a jour d'une ligne dans la commande
+ * Updating a line in the order
*/
if ($action == 'updateline' && $user->rights->fournisseur->commande->creer && ! GETPOST('cancel'))
{
@@ -499,8 +503,8 @@ if (empty($reshook))
if (!$res) dol_print_error($db);
}
- $date_start=dol_mktime(GETPOST('date_start'.$date_pf.'hour'), GETPOST('date_start'.$date_pf.'min'), 0, GETPOST('date_start'.$date_pf.'month'), GETPOST('date_start'.$date_pf.'day'), GETPOST('date_start'.$date_pf.'year'));
- $date_end=dol_mktime(GETPOST('date_end'.$date_pf.'hour'), GETPOST('date_end'.$date_pf.'min'), 0, GETPOST('date_end'.$date_pf.'month'), GETPOST('date_end'.$date_pf.'day'), GETPOST('date_end'.$date_pf.'year'));
+ $date_start=dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
+ $date_end=dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
$localtax1_tx=get_localtax($tva_tx,1,$mysoc,$object->thirdparty);
$localtax2_tx=get_localtax($tva_tx,2,$mysoc,$object->thirdparty);
@@ -668,7 +672,7 @@ if (empty($reshook))
if (! $idwarehouse || $idwarehouse == -1)
{
$error++;
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("Warehouse")), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("Warehouse")), null, 'errors');
$action='';
}
}
@@ -719,6 +723,14 @@ if (empty($reshook))
if ($result > 0)
{
if (empty($conf->global->MAIN_DISABLE_PDF_AUTOUPDATE)) {
+ $outputlangs = $langs;
+ $newlang = '';
+ if ($conf->global->MAIN_MULTILANGS && empty($newlang) && GETPOST('lang_id')) $newlang = GETPOST('lang_id','alpha');
+ if ($conf->global->MAIN_MULTILANGS && empty($newlang)) $newlang = $object->thirdparty->default_lang;
+ if (! empty($newlang)) {
+ $outputlangs = new Translate("", $conf);
+ $outputlangs->setDefaultLang($newlang);
+ }
$object->generateDocument($object->modelpdf, $outputlangs, $hidedetails, $hidedesc, $hideref);
}
$action = '';
@@ -749,7 +761,7 @@ if (empty($reshook))
{
if (1==0 && ! GETPOST('clone_content') && ! GETPOST('clone_receivers'))
{
- setEventMessage($langs->trans("NoCloneOptionsSpecified"), 'errors');
+ setEventMessages($langs->trans("NoCloneOptionsSpecified"), null, 'errors');
}
else
{
@@ -780,6 +792,7 @@ if (empty($reshook))
$result = $object->Livraison($user, $date_liv, GETPOST("type"), GETPOST("comment"));
if ($result > 0)
{
+ $langs->load("deliveries");
setEventMessages($langs->trans("DeliveryStateSaved"), null);
$action = '';
}
@@ -841,8 +854,8 @@ if (empty($reshook))
$upload_dir = $conf->fournisseur->commande->dir_output;
$file = $upload_dir . '/' . GETPOST('file');
$ret=dol_delete_file($file,0,0,0,$object);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
}
if ($action == 'update_extras')
@@ -894,7 +907,7 @@ if (empty($reshook))
if ($socid <1)
{
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('Supplier')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('Supplier')), null, 'errors');
$action='create';
$error++;
}
@@ -1174,7 +1187,7 @@ if (empty($reshook))
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1);
if ($mailfile->error)
{
- setEventMessage($mailfile->error, 'errors');
+ setEventMessages($mailfile->error, $mailfile->errors, 'errors');
}
else
{
@@ -1182,7 +1195,7 @@ if (empty($reshook))
if ($result)
{
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain "
- setEventMessage($mesg);
+ setEventMessages($mesg, null, 'mesgs');
$error=0;
@@ -1203,7 +1216,7 @@ if (empty($reshook))
if ($error)
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
else
{
@@ -1226,7 +1239,7 @@ if (empty($reshook))
$mesg = 'No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
}
- setEventMessage($mesg, 'errors');
+ setEventMessages($mesg, null, 'errors');
}
}
/* }
@@ -1241,14 +1254,14 @@ if (empty($reshook))
else
{
$langs->load("errors");
- setEventMessage($langs->trans('ErrorCantReadFile',$file), 'errors');
+ setEventMessages($langs->trans('ErrorCantReadFile',$file), null, 'errors');
dol_syslog('Failed to read file: '.$file);
}
}
else
{
$langs->load("other");
- setEventMessage($langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")), 'errors');
+ setEventMessages($langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")), null, 'errors');
dol_syslog('Impossible de lire les donnees de la facture. Le fichier facture n\'a peut-etre pas ete genere.');
}
}
@@ -1274,11 +1287,11 @@ if (empty($reshook))
//Is sync supplier web services module activated? and everything filled?
if (empty($conf->syncsupplierwebservices->enabled)) {
- setEventMessage($langs->trans("WarningModuleNotActive",$langs->transnoentities("Module2650Name")));
+ setEventMessages($langs->trans("WarningModuleNotActive",$langs->transnoentities("Module2650Name")), null, 'mesgs');
} else if (empty($ws_url) || empty($ws_key)) {
- setEventMessage($langs->trans("ErrorWebServicesFieldsRequired"), 'errors');
+ setEventMessages($langs->trans("ErrorWebServicesFieldsRequired"), null, 'errors');
} else if (empty($ws_user) || empty($ws_password) || empty($ws_thirdparty)) {
- setEventMessage($langs->trans("ErrorFieldsRequired"), 'errors');
+ setEventMessages($langs->trans("ErrorFieldsRequired"),null, 'errors');
}
else
{
@@ -1333,15 +1346,15 @@ if (empty($reshook))
if (empty($result_order["result"]["result_code"])) //No result, check error str
{
- setEventMessage($langs->trans("SOAPError")." '".$soapclient_order->error_str."'", 'errors');
+ setEventMessages($langs->trans("SOAPError")." '".$soapclient_order->error_str."'", null, 'errors');
}
else if ($result_order["result"]["result_code"] != "OK") //Something went wrong
{
- setEventMessage($langs->trans("SOAPError")." '".$result_order["result"]["result_code"]."' - '".$result_order["result"]["result_label"]."'", 'errors');
+ setEventMessages($langs->trans("SOAPError")." '".$result_order["result"]["result_code"]."' - '".$result_order["result"]["result_label"]."'", null, 'errors');
}
else
{
- setEventMessage($langs->trans("RemoteOrderRef")." ".$result_order["ref"], 'mesgs');
+ setEventMessages($langs->trans("RemoteOrderRef")." ".$result_order["ref"], null, 'mesgs');
}
}
}
@@ -1366,11 +1379,11 @@ if (empty($reshook))
if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), 'errors');
+ setEventMessages($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), null, 'errors');
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
@@ -2427,11 +2440,11 @@ elseif (! empty($object->id))
//Is everything filled?
if (empty($ws_url) || empty($ws_key)) {
- setEventMessage($langs->trans("ErrorWebServicesFieldsRequired"), 'errors');
+ setEventMessages($langs->trans("ErrorWebServicesFieldsRequired"), null, 'errors');
$mode = "init";
$error_occurred = true; //Don't allow to set the user/pass if thirdparty fields are not filled
} else if ($mode != "init" && (empty($ws_user) || empty($ws_password))) {
- setEventMessage($langs->trans("ErrorFieldsRequired"), 'errors');
+ setEventMessages($langs->trans("ErrorFieldsRequired"), null, 'errors');
$mode = "init";
}
@@ -2495,7 +2508,7 @@ elseif (! empty($object->id))
$ws_thirdparty = $result_user["user"]["fk_thirdparty"];
if (empty($ws_thirdparty))
{
- setEventMessage($langs->trans("RemoteUserMissingAssociatedSoc"), 'errors');
+ setEventMessages($langs->trans("RemoteUserMissingAssociatedSoc"), null, 'errors');
$error_occurred = true;
}
else
@@ -2518,7 +2531,7 @@ elseif (! empty($object->id))
$result_product = $soapclient_product->call("getProductOrService", $ws_parameters, $ws_ns, '');
if (!$result_product)
{
- setEventMessage($line_id.$langs->trans("SOAPError")." ".$soapclient_product->error_str." - ".$soapclient_product->response, 'errors');
+ setEventMessages($line_id.$langs->trans("SOAPError")." ".$soapclient_product->error_str." - ".$soapclient_product->response, null, 'errors');
$error_occurred = true;
break;
}
@@ -2527,17 +2540,17 @@ elseif (! empty($object->id))
$status_code = $result_product["result"]["result_code"];
if (empty($status_code)) //No result, check error str
{
- setEventMessage($langs->trans("SOAPError")." '".$soapclient_order->error_str."'", 'errors');
+ setEventMessages($langs->trans("SOAPError")." '".$soapclient_order->error_str."'", null, 'errors');
}
else if ($status_code != "OK") //Something went wrong
{
if ($status_code == "NOT_FOUND")
{
- setEventMessage($line_id.$langs->trans("SupplierMissingRef")." '".$ref_supplier."'", 'warnings');
+ setEventMessages($line_id.$langs->trans("SupplierMissingRef")." '".$ref_supplier."'", null, 'warnings');
}
else
{
- setEventMessage($line_id.$langs->trans("ResponseNonOK")." '".$status_code."' - '".$result_product["result"]["result_label"]."'", 'errors');
+ setEventMessages($line_id.$langs->trans("ResponseNonOK")." '".$status_code."' - '".$result_product["result"]["result_label"]."'", null, 'errors');
$error_occurred = true;
break;
}
@@ -2562,12 +2575,12 @@ elseif (! empty($object->id))
}
if ($local_price != NULL && $local_price != $supplier_price) {
- setEventMessage($line_id.$langs->trans("RemotePriceMismatch")." ".$supplier_price." - ".$local_price, 'warnings');
+ setEventMessages($line_id.$langs->trans("RemotePriceMismatch")." ".$supplier_price." - ".$local_price, null, 'warnings');
}
// Check if is in sale
if (empty($result_product["product"]["status_tosell"])) {
- setEventMessage($line_id.$langs->trans("ProductStatusNotOnSellShort")." '".$ref_supplier."'", 'warnings');
+ setEventMessages($line_id.$langs->trans("ProductStatusNotOnSellShort")." '".$ref_supplier."'", null, 'warnings');
}
}
}
@@ -2575,17 +2588,17 @@ elseif (! empty($object->id))
}
elseif ($user_status_code == "PERMISSION_DENIED")
{
- setEventMessage($langs->trans("RemoteUserNotPermission"), 'errors');
+ setEventMessages($langs->trans("RemoteUserNotPermission"), null, 'errors');
$error_occurred = true;
}
elseif ($user_status_code == "BAD_CREDENTIALS")
{
- setEventMessage($langs->trans("RemoteUserBadCredentials"), 'errors');
+ setEventMessages($langs->trans("RemoteUserBadCredentials"), null, 'errors');
$error_occurred = true;
}
else
{
- setEventMessage($langs->trans("ResponseNonOK")." '".$user_status_code."'", 'errors');
+ setEventMessages($langs->trans("ResponseNonOK")." '".$user_status_code."'", null, 'errors');
$error_occurred = true;
}
@@ -2725,7 +2738,7 @@ elseif (! empty($object->id))
print 'id.'&action=reopen">'.$langs->trans("Disapprove").' ';
}
}
- if (in_array($object->statut, array(3, 5, 6, 7, 9)))
+ if (in_array($object->statut, array(3, 5, 6, 7, 9)) || ($object->statut == 4 && $object->billed))
{
if ($user->rights->fournisseur->commande->commander)
{
diff --git a/htdocs/fourn/commande/contact.php b/htdocs/fourn/commande/contact.php
index b8eabb9be6c..8ced1e9844c 100644
--- a/htdocs/fourn/commande/contact.php
+++ b/htdocs/fourn/commande/contact.php
@@ -46,7 +46,7 @@ $object = new CommandeFournisseur($db);
/*
- * Ajout d'un nouveau contact
+ * Add a new contact
*/
if ($action == 'addcontact' && $user->rights->fournisseur->commande->creer)
@@ -69,16 +69,16 @@ if ($action == 'addcontact' && $user->rights->fournisseur->commande->creer)
if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), 'errors');
+ setEventMessages($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), null, 'errors');
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
-// bascule du statut d'un contact
+// Toggle the status of a contact
else if ($action == 'swapstatut' && $user->rights->fournisseur->commande->creer)
{
if ($object->fetch($id))
@@ -91,7 +91,7 @@ else if ($action == 'swapstatut' && $user->rights->fournisseur->commande->creer)
}
}
-// Efface un contact
+// Deleting a contact
else if ($action == 'deletecontact' && $user->rights->fournisseur->commande->creer)
{
$object->fetch($id);
@@ -155,7 +155,7 @@ if ($id > 0 || ! empty($ref))
print '';
print '';
- // Fournisseur
+ // Supplier
print ''.$langs->trans("Supplier")." ";
print ''.$soc->getNomUrl(1,'supplier').' ';
print ' ';
@@ -172,7 +172,7 @@ if ($id > 0 || ! empty($ref))
}
else
{
- // Contrat non trouv
+ // Contact not found
print "ErrorRecordNotFound";
}
}
diff --git a/htdocs/fourn/commande/dispatch.php b/htdocs/fourn/commande/dispatch.php
index 57ee36eb8a3..fd44b987f94 100644
--- a/htdocs/fourn/commande/dispatch.php
+++ b/htdocs/fourn/commande/dispatch.php
@@ -148,7 +148,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
{
dol_syslog('No dispatch for line '.$key.' as no warehouse choosed');
$text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').' ' .($numline);
- setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$text), null, 'errors');
$error++;
}
@@ -187,7 +187,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
{
dol_syslog('No dispatch for line '.$key.' as no warehouse choosed');
$text = $langs->transnoentities('Warehouse').', '.$langs->transnoentities('Line').' ' .($numline).'-'.($reg[1]+1);
- setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$text), null, 'errors');
$error++;
}
@@ -195,7 +195,7 @@ if ($action == 'dispatch' && $user->rights->fournisseur->commande->receptionner)
{
dol_syslog('No dispatch for line '.$key.' as serial/eat-by/sellby date are not set');
$text = $langs->transnoentities('atleast1batchfield').', '.$langs->transnoentities('Line').' ' .($numline).'-'.($reg[1]+1);
- setEventMessage($langs->trans('ErrorFieldRequired',$text), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$text), null, 'errors');
$error++;
}
diff --git a/htdocs/fourn/commande/index.php b/htdocs/fourn/commande/index.php
index c9de3c6a340..1bdec7b9a8d 100644
--- a/htdocs/fourn/commande/index.php
+++ b/htdocs/fourn/commande/index.php
@@ -131,7 +131,7 @@ if ($resql)
{
print '';
$data=array('series'=>$dataseries);
- dol_print_graph('stats',300,180,$data,1,'pie',1);
+ dol_print_graph('stats',300,180,$data,1,'pie',1,'',0);
print ' ';
}
//if ($totalinprocess != $total)
diff --git a/htdocs/fourn/commande/list.php b/htdocs/fourn/commande/list.php
index dea0f72b628..a3e0d8c9c33 100644
--- a/htdocs/fourn/commande/list.php
+++ b/htdocs/fourn/commande/list.php
@@ -53,6 +53,8 @@ $socid = GETPOST('socid','int');
$sortorder = GETPOST('sortorder','alpha');
$sortfield = GETPOST('sortfield','alpha');
+$status=GETPOST('statut','alpha');
+$billed=GETPOST('billed','int');
$viewstatut=GETPOST('viewstatut');
// Security check
@@ -70,6 +72,7 @@ if (GETPOST("button_removefilter_x") || GETPOST("button_removefilter")) // Both
$search_ht='';
$search_ttc='';
$search_status='';
+ $billed='';
}
if ($search_status == '') $search_status=-1;
@@ -102,11 +105,13 @@ if ($socid > 0)
$fourn->fetch($socid);
$title .= ' - '.$fourn->name;
}
-if (GETPOST('statut','alpha'))
+if ($status)
{
- if (GETPOST('statut','alpha') == '1,2,3') $title.=' - '.$langs->trans("StatusOrderToProcessShort");
- else $title.=' - '.$langs->trans($commandestatic->statuts[GETPOST('statut','alpha')]);
+ if ($status == '1,2,3') $title.=' - '.$langs->trans("StatusOrderToProcessShort");
+ if ($status == '6,7') $title.=' - '.$langs->trans("StatusOrderCanceled");
+ else $title.=' - '.$langs->trans($commandestatic->statuts[$status]);
}
+if ($billed) $title.=' - '.$langs->trans("Billed");
llxHeader('',$title);
@@ -122,7 +127,7 @@ $offset = $conf->liste_limit * $page ;
*/
$sql = "SELECT s.rowid as socid, s.nom as name, cf.date_commande as dc,";
-$sql.= " cf.rowid,cf.ref, cf.ref_supplier, cf.fk_statut, cf.total_ht, cf.tva as total_tva, cf.total_ttc, cf.fk_user_author,cf.date_livraison,";
+$sql.= " cf.rowid, cf.ref, cf.ref_supplier, cf.fk_statut, cf.billed, cf.total_ht, cf.tva as total_tva, cf.total_ttc, cf.fk_user_author, cf.date_livraison,";
$sql.= " p.rowid as project_id, p.ref as project_ref,";
$sql.= " u.firstname,";
$sql.= " u.lastname,";
@@ -168,9 +173,9 @@ if (GETPOST('statut', 'alpha') !== '')
$sql .= " AND cf.fk_statut IN (".GETPOST('statut', 'alpha').")";
}
-if (GETPOST('billed', 'int') !== '')
+if ($billed !== '')
{
- $sql .= " AND cf.billed IN (".GETPOST('billed', 'int').")";
+ $sql .= " AND cf.billed = ".$billed;
}
if ($search_refsupp)
@@ -209,6 +214,7 @@ if ($resql)
if ($search_refsupp) $param.="&search_refsupp=".$search_refsupp;
if ($socid) $param.="&socid=".$socid;
if ($search_status >= 0) $param.="&search_status=".$search_status;
+ if ($billed != '') $param.="billed=".$billed;
if ($optioncss != '') $param.='&optioncss='.$optioncss;
print_barre_liste($title, $page, $_SERVER["PHP_SELF"], $param, $sortfield, $sortorder, '', $num, $nbtotalofrecords);
@@ -223,7 +229,7 @@ if ($resql)
if ($sall)
{
foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
- print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall));
+ print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
}
print '';
@@ -238,6 +244,7 @@ if ($resql)
print_liste_field_titre($langs->trans("OrderDate"),$_SERVER["PHP_SELF"],"dc","",$param,'align="center"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans('DateDeliveryPlanned'),$_SERVER["PHP_SELF"],'cf.date_livraison','',$param, 'align="right"',$sortfield,$sortorder);
print_liste_field_titre($langs->trans("Status"),$_SERVER["PHP_SELF"],"cf.fk_statut","",$param,'align="right"',$sortfield,$sortorder);
+ print_liste_field_titre($langs->trans('Billed'),$_SERVER["PHP_SELF"],'cf.billed','',$param,'align="center"',$sortfield,$sortorder,'');
print_liste_field_titre('',$_SERVER["PHP_SELF"],"",'','','',$sortfield,$sortorder,'maxwidthsearch ');
print "\n";
@@ -259,6 +266,9 @@ if ($resql)
print '';
$formorder->selectSupplierOrderStatus((strstr($search_status, ',')?-1:$search_status),1,'search_status');
print ' ';
+ print '';
+ print $form->selectyesno('billed', $billed, 1, 0, 1);
+ print ' ';
print ' ';
print ' ';
print " \n";
@@ -344,10 +354,12 @@ if ($resql)
print dol_print_date($db->jdate($obj->date_livraison), 'day');
print '';
-
// Statut
print ''.$commandestatic->LibStatut($obj->fk_statut, 5).' ';
+ // Billed
+ print ''.yn($obj->billed).' ';
+
print ' ';
print "\n";
diff --git a/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
index c72386e3728..96b014e2cab 100644
--- a/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
+++ b/htdocs/fourn/commande/tpl/linkedobjectblock.tpl.php
@@ -29,7 +29,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
$langs->load("orders");
echo ' ';
-print load_fiche_titre($langs->trans('RelatedSupplierOrders'));
+print load_fiche_titre($langs->trans('RelatedSupplierOrders'), '', '');
?>
diff --git a/htdocs/fourn/facture/card.php b/htdocs/fourn/facture/card.php
index fe6582fd355..41837da45c9 100644
--- a/htdocs/fourn/facture/card.php
+++ b/htdocs/fourn/facture/card.php
@@ -5,7 +5,7 @@
* Copyright (C) 2005 Marc Barilley
* Copyright (C) 2005-2013 Regis Houssin
* Copyright (C) 2010-2014 Juanjo Menent
- * Copyright (C) 2013 Philippe Grand
+ * Copyright (C) 2013-2015 Philippe Grand
* Copyright (C) 2013 Florian Henry
* Copyright (C) 2014 Marcos García
*
@@ -128,7 +128,7 @@ if (empty($reshook))
else
{
$langs->load("errors");
- setEventMessage($langs->trans($object->error), 'errors');
+ setEventMessages($langs->trans($object->error), null, 'errors');
$action='';
}
// }
@@ -161,7 +161,7 @@ if (empty($reshook))
if (! $idwarehouse || $idwarehouse == -1)
{
$error++;
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("Warehouse")), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("Warehouse")), null, 'errors');
$action='';
}
}
@@ -188,7 +188,7 @@ if (empty($reshook))
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -219,7 +219,7 @@ if (empty($reshook))
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
/* Fix bug 1485 : Reset action to avoid asking again confirmation on failure */
$action='';
}
@@ -231,7 +231,7 @@ if (empty($reshook))
$result=$object->set_paid($user);
if ($result<0)
{
- setEventMessage($object->error,'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -242,13 +242,13 @@ if (empty($reshook))
if ($result < 0) dol_print_error($db, $object->error);
}
- // conditions de reglement
+ // payments conditions
if ($action == 'setconditions' && $user->rights->fournisseur->commande->creer)
{
$result=$object->setPaymentTerms(GETPOST('cond_reglement_id','int'));
}
- // mode de reglement
+ // payment mode
else if ($action == 'setmode' && $user->rights->fournisseur->commande->creer)
{
$result = $object->setPaymentMethods(GETPOST('mode_reglement_id','int'));
@@ -282,7 +282,7 @@ if (empty($reshook))
if (! empty($object->date_echeance) && $object->date_echeance < $object->date)
{
$object->date_echeance=$object->date;
- setEventMessage($langs->trans("DatePaymentTermCantBeLowerThanObjectDate"),'warnings');
+ setEventMessages($langs->trans("DatePaymentTermCantBeLowerThanObjectDate"), null, 'warnings');
}
$result=$object->update($user);
if ($result < 0) dol_print_error($db,$object->error);
@@ -298,7 +298,7 @@ if (empty($reshook))
$result=$paiementfourn->fetch(GETPOST('paiement_id'));
if ($result > 0) $result=$paiementfourn->delete(); // If fetch ok and found
if ($result < 0) {
- setEventMessage($paiementfourn->error, 'errors');
+ setEventMessages($paiementfourn->error, $paiementfourn->errors, 'errors');
}
}
}
@@ -313,21 +313,21 @@ if (empty($reshook))
if (GETPOST('socid','int')<1)
{
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('Supplier')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('Supplier')), null, 'errors');
$action='create';
$error++;
}
if ($datefacture == '')
{
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('DateInvoice')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('DateInvoice')), null, 'errors');
$action='create';
$_GET['socid']=$_POST['socid'];
$error++;
}
if (! GETPOST('ref_supplier'))
{
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentities('RefSupplier')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentities('RefSupplier')), null, 'errors');
$action='create';
$_GET['socid']=$_POST['socid'];
$error++;
@@ -575,8 +575,8 @@ if (empty($reshook))
$type = $_POST["type"]?$_POST["type"]:0;
}
- $date_start=dol_mktime(GETPOST('date_start'.$date_pf.'hour'), GETPOST('date_start'.$date_pf.'min'), 0, GETPOST('date_start'.$date_pf.'month'), GETPOST('date_start'.$date_pf.'day'), GETPOST('date_start'.$date_pf.'year'));
- $date_end=dol_mktime(GETPOST('date_end'.$date_pf.'hour'), GETPOST('date_end'.$date_pf.'min'), 0, GETPOST('date_end'.$date_pf.'month'), GETPOST('date_end'.$date_pf.'day'), GETPOST('date_end'.$date_pf.'year'));
+ $date_start=dol_mktime(GETPOST('date_starthour'), GETPOST('date_startmin'), GETPOST('date_startsec'), GETPOST('date_startmonth'), GETPOST('date_startday'), GETPOST('date_startyear'));
+ $date_end=dol_mktime(GETPOST('date_endhour'), GETPOST('date_endmin'), GETPOST('date_endsec'), GETPOST('date_endmonth'), GETPOST('date_endday'), GETPOST('date_endyear'));
$localtax1_tx= get_localtax($_POST['tauxtva'], 1, $mysoc,$object->thirdparty);
$localtax2_tx= get_localtax($_POST['tauxtva'], 2, $mysoc,$object->thirdparty);
@@ -602,7 +602,7 @@ if (empty($reshook))
else
{
$db->rollback();
- setEventMessage($object->error,'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -640,6 +640,9 @@ if (empty($reshook))
$qty = GETPOST('qty'.$predef);
$remise_percent=GETPOST('remise_percent'.$predef);
+ $date_start=dol_mktime(GETPOST('date_start'.$predef.'hour'), GETPOST('date_start'.$predef.'min'), GETPOST('date_start' . $predef . 'sec'), GETPOST('date_start'.$predef.'month'), GETPOST('date_start'.$predef.'day'), GETPOST('date_start'.$predef.'year'));
+ $date_end=dol_mktime(GETPOST('date_end'.$predef.'hour'), GETPOST('date_end'.$predef.'min'), GETPOST('date_end' . $predef . 'sec'), GETPOST('date_end'.$predef.'month'), GETPOST('date_end'.$predef.'day'), GETPOST('date_end'.$predef.'year'));
+
// Extrafields
$extrafieldsline = new ExtraFields($db);
$extralabelsline = $extrafieldsline->fetch_name_optionals_label($object->table_element_line);
@@ -654,27 +657,27 @@ if (empty($reshook))
if (GETPOST('prod_entry_mode')=='free' && GETPOST('price_ht') < 0 && $qty < 0)
{
- setEventMessage($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPrice'), $langs->transnoentitiesnoconv('Qty')), 'errors');
+ setEventMessages($langs->trans('ErrorBothFieldCantBeNegative', $langs->transnoentitiesnoconv('UnitPrice'), $langs->transnoentitiesnoconv('Qty')), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && ! GETPOST('idprodfournprice') && GETPOST('type') < 0)
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Type')), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && GETPOST('price_ht')==='' && GETPOST('price_ttc')==='') // Unit price can be 0 but not ''
{
- setEventMessage($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), 'errors');
+ setEventMessages($langs->trans($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('UnitPrice'))), null, 'errors');
$error++;
}
if (GETPOST('prod_entry_mode')=='free' && ! GETPOST('dp_desc'))
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Description')), null, 'errors');
$error++;
}
if (! GETPOST('qty'))
{
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv('Qty')), null, 'errors');
$error++;
}
@@ -710,7 +713,7 @@ if (empty($reshook))
$price_base_type = 'HT';
// TODO Save the product supplier ref into database into field ref_supplier (must rename field ref into ref_supplier first)
- $result=$object->addline($desc, $productsupplier->fourn_pu, $tvatx, $localtax1_tx, $localtax2_tx, $qty, $idprod, $remise_percent, '', '', 0, $npr, $price_base_type, $type, -1, 0, $array_options, $productsupplier->fk_unit);
+ $result=$object->addline($desc, $productsupplier->fourn_pu, $tvatx, $localtax1_tx, $localtax2_tx, $qty, $idprod, $remise_percent, $date_start, $date_end, 0, $npr, $price_base_type, $type, -1, 0, $array_options, $productsupplier->fk_unit);
}
if ($idprod == -2 || $idprod == 0)
{
@@ -724,7 +727,7 @@ if (empty($reshook))
// Quantity too low
$error++;
$langs->load("errors");
- setEventMessage($langs->trans("ErrorQtyTooLowForThisSupplier"), 'errors');
+ setEventMessages($langs->trans("ErrorQtyTooLowForThisSupplier"), null, 'errors');
}
}
else if( GETPOST('price_ht')!=='' || GETPOST('price_ttc')!=='' )
@@ -757,7 +760,7 @@ if (empty($reshook))
$price_base_type = 'HT';
}
- $result=$object->addline($product_desc, $ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $datestart, $dateend, 0, $npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit);
+ $result=$object->addline($product_desc, $ht, $tva_tx, $localtax1_tx, $localtax2_tx, $qty, 0, $remise_percent, $date_start, $date_end, 0, $npr, $price_base_type, $type, -1, 0, $array_options, $fk_unit);
}
//print "xx".$tva_tx; exit;
@@ -817,7 +820,7 @@ if (empty($reshook))
else
{
$db->rollback();
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
$action = '';
@@ -883,7 +886,7 @@ if (empty($reshook))
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
@@ -992,7 +995,7 @@ if (empty($reshook))
$mailfile = new CMailFile($subject,$sendto,$from,$message,$filepath,$mimetype,$filename,$sendtocc,'',$deliveryreceipt,-1);
if ($mailfile->error)
{
- setEventMessage($mailfile->error,'errors');
+ setEventMessages($mailfile->error, $mailfile->errors, 'errors');
}
else
{
@@ -1000,7 +1003,7 @@ if (empty($reshook))
if ($result)
{
$mesg=$langs->trans('MailSuccessfulySent',$mailfile->getValidAddress($from,2),$mailfile->getValidAddress($sendto,2)); // Must not contain "
- setEventMessage($mesg);
+ setEventMessages($mesg, null, 'mesgs');
$error=0;
@@ -1045,7 +1048,7 @@ if (empty($reshook))
{
$mesg.='No mail sent. Feature is disabled by option MAIN_DISABLE_ALL_MAILS';
}
- setEventMessage($mesg, 'errors');
+ setEventMessages($mesg, null, 'errors');
}
}
}
@@ -1053,14 +1056,14 @@ if (empty($reshook))
else
{
$langs->load("other");
- setEventMessage($langs->trans('ErrorMailRecipientIsEmpty'), 'errors');
+ setEventMessages($langs->trans('ErrorMailRecipientIsEmpty'), null, 'errors');
dol_syslog('Recipient email is empty');
}
}
else
{
$langs->load("other");
- setEventMessage($langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")), 'errors');
+ setEventMessages($langs->trans('ErrorFailedToReadEntity',$langs->trans("Invoice")), null, 'errors');
dol_syslog('Unable to read data from the invoice. The invoice file has perhaps not been generated.');
}
@@ -1117,8 +1120,8 @@ if (empty($reshook))
$upload_dir = $conf->fournisseur->facture->dir_output . "/";
$file = $upload_dir . '/' . GETPOST('file');
$ret=dol_delete_file($file,0,0,0,$object);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
}
}
@@ -1182,11 +1185,11 @@ if (empty($reshook))
if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), 'errors');
+ setEventMessages($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), null, 'errors');
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
@@ -1521,7 +1524,7 @@ if ($action == 'create')
$cntinvoice=count($objectsrc->linkedObjects['invoice_supplier']);
if ($cntinvoice>=1)
{
- setEventMessage('WarningBillExist','warnings');
+ setEventMessages('WarningBillExist', null, 'warnings');
echo ' ('.$langs->trans('LatestRelatedBill').end($objectsrc->linkedObjects['invoice_supplier'])->getNomUrl(1).')';
}
echo ' ';
@@ -2338,13 +2341,13 @@ else
$formmail->withto=GETPOST("sendto")?GETPOST("sendto"):$liste;
$formmail->withtocc=$liste;
$formmail->withtoccc=$conf->global->MAIN_EMAIL_USECCC;
- $formmail->withtopic=$outputlangs->trans('SendBillRef','__FACREF__');
+ $formmail->withtopic=$outputlangs->trans('SendBillRef','__REF__');
$formmail->withfile=2;
$formmail->withbody=1;
$formmail->withdeliveryreceipt=1;
$formmail->withcancel=1;
// Tableau des substitutions
- $formmail->substit['__FACREF__']=$object->ref;
+ $formmail->substit['__REF__']=$object->ref;
$formmail->substit['__SIGNATURE__']=$user->signature;
$formmail->substit['__PERSONALIZED__']='';
$formmail->substit['__CONTACTCIVNAME__']='';
diff --git a/htdocs/fourn/facture/contact.php b/htdocs/fourn/facture/contact.php
index 7348f3b7590..664101848a6 100644
--- a/htdocs/fourn/facture/contact.php
+++ b/htdocs/fourn/facture/contact.php
@@ -69,11 +69,11 @@ if ($action == 'addcontact' && $user->rights->fournisseur->facture->creer)
if ($object->error == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), 'errors');
+ setEventMessages($langs->trans("ErrorThisContactIsAlreadyDefinedAsThisType"), null, 'errors');
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
diff --git a/htdocs/fourn/facture/impayees.php b/htdocs/fourn/facture/impayees.php
index ecb6b990a64..ccb6671ba3a 100644
--- a/htdocs/fourn/facture/impayees.php
+++ b/htdocs/fourn/facture/impayees.php
@@ -299,5 +299,5 @@ if ($user->rights->fournisseur->facture->lire)
}
// End of page
-$db->close();
llxFooter();
+$db->close();
diff --git a/htdocs/fourn/facture/list.php b/htdocs/fourn/facture/list.php
index a46c5e6ca38..6b69adceb3e 100644
--- a/htdocs/fourn/facture/list.php
+++ b/htdocs/fourn/facture/list.php
@@ -273,7 +273,7 @@ if ($resql)
if ($search_all)
{
foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
- print $langs->transnoentities("FilterOnInto", $search_all, join(', ',$fieldstosearchall));
+ print $langs->trans("FilterOnInto", $search_all) . join(', ',$fieldstosearchall);
}
print '';
diff --git a/htdocs/fourn/facture/paiement.php b/htdocs/fourn/facture/paiement.php
index 82bccf3df19..599ce879d8e 100644
--- a/htdocs/fourn/facture/paiement.php
+++ b/htdocs/fourn/facture/paiement.php
@@ -117,7 +117,7 @@ if (empty($reshook))
{
$langs->load("errors");
//$error++;
- setEventMessage($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), 'warnings');
+ setEventMessages($langs->transnoentities("WarningPaymentDateLowerThanInvoiceDate", dol_print_date($datepaye,'day'), dol_print_date($tmpinvoice->date, 'day'), $tmpinvoice->ref), null, 'warnings');
}
}
@@ -128,7 +128,7 @@ if (empty($reshook))
// Check parameters
if ($_POST['paiementid'] <= 0)
{
- setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), 'errors');
+ setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('PaymentMode')), null, 'errors');
$error++;
}
@@ -137,20 +137,20 @@ if (empty($reshook))
// If bank module is on, account is required to enter a payment
if (GETPOST('accountid') <= 0)
{
- setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), 'errors');
+ setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('AccountToCredit')), null, 'errors');
$error++;
}
}
if (empty($totalpayment) && empty($atleastonepaymentnotnull))
{
- setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), 'errors');
+ setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->trans('PaymentAmount')), null, 'errors');
$error++;
}
if (empty($datepaye))
{
- setEventMessage($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), 'errors');
+ setEventMessages($langs->transnoentities('ErrorFieldRequired',$langs->transnoentities('Date')), null, 'errors');
$error++;
}
}
@@ -193,7 +193,7 @@ if (empty($reshook))
$paiement_id = $paiement->create($user,(GETPOST('closepaidinvoices')=='on'?1:0));
if ($paiement_id < 0)
{
- setEventMessage($paiement->error, 'errors');
+ setEventMessages($paiement->error, $paiement->errors, 'errors');
$error++;
}
}
@@ -203,7 +203,7 @@ if (empty($reshook))
$result=$paiement->addPaymentToBank($user,'payment_supplier','(SupplierInvoicePayment)',$accountid,'','');
if ($result < 0)
{
- setEventMessage($paiement->error, 'errors');
+ setEventMessages($paiement->error, $paiement->errors, 'errors');
$error++;
}
}
@@ -621,6 +621,5 @@ if (empty($action))
}
}
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
index 29357b49dc3..10a83ade2f9 100644
--- a/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
+++ b/htdocs/fourn/facture/tpl/linkedobjectblock.tpl.php
@@ -30,7 +30,7 @@ $linkedObjectBlock = $GLOBALS['linkedObjectBlock'];
$langs->load("bills");
echo ' ';
-print load_fiche_titre($langs->trans("RelatedSupplierInvoices"));
+print load_fiche_titre($langs->trans("RelatedSupplierInvoices"), '', '');
?>
@@ -65,7 +65,7 @@ foreach($linkedObjectBlock as $key => $objectlink)
}
?>
- trans("TotalHT"); ?>
+ trans("TotalHT"); ?>
rights->fournisseur->facture->lire) {
echo price($total);
diff --git a/htdocs/fourn/paiement/card.php b/htdocs/fourn/paiement/card.php
index de070a2b3b0..f3295bf744c 100644
--- a/htdocs/fourn/paiement/card.php
+++ b/htdocs/fourn/paiement/card.php
@@ -59,7 +59,7 @@ if ($action == 'setnote' && $user->rights->fournisseur->facture->creer)
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
$db->rollback();
}
}
@@ -78,7 +78,7 @@ if ($action == 'confirm_delete' && $confirm == 'yes' && $user->rights->fournisse
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
$db->rollback();
}
}
@@ -99,7 +99,7 @@ if ($action == 'confirm_valide' && $confirm == 'yes' &&
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
$db->rollback();
}
}
@@ -110,11 +110,11 @@ if ($action == 'setnum_paiement' && ! empty($_POST['num_paiement']))
$res = $object->update_num($_POST['num_paiement']);
if ($res === 0)
{
- setEventMessage($langs->trans('PaymentNumberUpdateSucceeded'));
+ setEventMessages($langs->trans('PaymentNumberUpdateSucceeded'), null, 'mesgs');
}
else
{
- setEventMessage($langs->trans('PaymentNumberUpdateFailed'), 'errors');
+ setEventMessages($langs->trans('PaymentNumberUpdateFailed'), null, 'errors');
}
}
@@ -125,11 +125,11 @@ if ($action == 'setdatep' && ! empty($_POST['datepday']))
$res = $object->update_date($datepaye);
if ($res === 0)
{
- setEventMessage($langs->trans('PaymentDateUpdateSucceeded'));
+ setEventMessages($langs->trans('PaymentDateUpdateSucceeded'), null, 'mesgs');
}
else
{
- setEventMessage($langs->trans('PaymentDateUpdateFailed'), 'errors');
+ setEventMessages($langs->trans('PaymentDateUpdateFailed'), null, 'errors');
}
}
diff --git a/htdocs/fourn/product/list.php b/htdocs/fourn/product/list.php
index fc04c6838ab..f21390776d3 100644
--- a/htdocs/fourn/product/list.php
+++ b/htdocs/fourn/product/list.php
@@ -249,7 +249,5 @@ else
dol_print_error($db);
}
-
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/fourn/recap-fourn.php b/htdocs/fourn/recap-fourn.php
index eb976acb4a0..acf4c9400d3 100644
--- a/htdocs/fourn/recap-fourn.php
+++ b/htdocs/fourn/recap-fourn.php
@@ -213,7 +213,5 @@ else
dol_print_error($db);
}
-
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/ftp/index.php b/htdocs/ftp/index.php
index b26e7b96f86..62bb22bf328 100644
--- a/htdocs/ftp/index.php
+++ b/htdocs/ftp/index.php
@@ -108,15 +108,15 @@ if (GETPOST("sendit") && ! empty($conf->global->MAIN_UPLOAD_DOC))
$langs->load("errors");
if ($resupload < 0) // Unknown error
{
- setEventMessage($langs->trans("ErrorFileNotUploaded"), 'errors');
+ setEventMessages($langs->trans("ErrorFileNotUploaded"), null, 'errors');
}
else if (preg_match('/ErrorFileIsInfectedWithAVirus/',$resupload)) // Files infected by a virus
{
- setEventMessage($langs->trans("ErrorFileIsInfectedWithAVirus"), 'errors');
+ setEventMessages($langs->trans("ErrorFileIsInfectedWithAVirus"), null, 'errors');
}
else // Known error
{
- setEventMessage($langs->trans($resupload), 'errors');
+ setEventMessages($langs->trans($resupload), null, 'errors');
}
}
}
@@ -124,7 +124,7 @@ if (GETPOST("sendit") && ! empty($conf->global->MAIN_UPLOAD_DOC))
{
// Echec transfert (fichier depassant la limite ?)
$langs->load("errors");
- setEventMessage($langs->trans("ErrorFailToCreateDir",$upload_dir), 'errors');
+ setEventMessages($langs->trans("ErrorFailToCreateDir",$upload_dir), null, 'errors');
}
}
@@ -143,8 +143,7 @@ if ($action == 'add' && $user->rights->ftp->setup)
}
else
{
- //TODO: Translate
- setEventMessage('Error '.$langs->trans($ecmdir->error));
+ setEventMessages($langs->trans("ErrorFailToCreateDir"), null, 'errors');
$action = "create";
}
}
@@ -176,12 +175,12 @@ if ($action == 'confirm_deletefile' && $_REQUEST['confirm'] == 'yes')
$result=@ftp_delete($conn_id, $newremotefileiso);
if ($result)
{
- setEventMessage($langs->trans("FileWasRemoved",$file));
+ setEventMessages($langs->trans("FileWasRemoved",$file), null, 'mesgs');
}
else
{
dol_syslog("ftp/index.php ftp_delete", LOG_ERR);
- setEventMessage($langs->trans("FTPFailedToRemoveFile",$file), 'errors');
+ setEventMessages($langs->trans("FTPFailedToRemoveFile",$file), null, 'errors');
}
//ftp_close($conn_id); Close later
@@ -226,12 +225,12 @@ if ($_POST["const"] && $_POST["delete"] && $_POST["delete"] == $langs->trans("De
$result=@ftp_delete($conn_id, $newremotefileiso);
if ($result)
{
- setEventMessage($langs->trans("FileWasRemoved",$file));
+ setEventMessages($langs->trans("FileWasRemoved",$file), null, 'mesgs');
}
else
{
dol_syslog("ftp/index.php ftp_delete", LOG_ERR);
- setEventMessage($langs->trans("FTPFailedToRemoveFile",$file), 'errors');
+ setEventMessages($langs->trans("FTPFailedToRemoveFile",$file), null, 'errors');
}
//ftp_close($conn_id); Close later
@@ -270,11 +269,11 @@ if ($action == 'confirm_deletesection' && $confirm == 'yes')
$result=@ftp_rmdir($conn_id, $newremotefileiso);
if ($result)
{
- setEventMessage($langs->trans("DirWasRemoved",$file));
+ setEventMessages($langs->trans("DirWasRemoved",$file), null, 'mesgs');
}
else
{
- setEventMessage($langs->trans("FTPFailedToRemoveDir",$file), 'errors');
+ setEventMessages($langs->trans("FTPFailedToRemoveDir",$file), null, 'errors');
}
//ftp_close($conn_id); Close later
diff --git a/htdocs/holiday/card.php b/htdocs/holiday/card.php
index d9200363f6d..80d06fdb446 100644
--- a/htdocs/holiday/card.php
+++ b/htdocs/holiday/card.php
@@ -60,7 +60,7 @@ if ($action == 'create')
if (($userid == $user->id && empty($user->rights->holiday->write)) || ($userid != $user->id && empty($user->rights->holiday->write_all)))
{
$error++;
- setEventMessage($langs->trans('CantCreateCP'));
+ setEventMessages($langs->trans('CantCreateCP'), null, 'errors');
$action='request';
}
@@ -130,12 +130,18 @@ if ($action == 'create')
// If no validator designated
if ($valideur < 1)
{
- header('Location: card.php?action=request&error=Valideur');
- exit;
+ setEventMessages($langs->transnoentitiesnoconv('InvalidValidatorCP'), null, 'errors');
+ $error++;
}
$result = 0;
-
+
+ if ($type < 1)
+ {
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->transnoentitiesnoconv("Type")), null, 'errors');
+ $error++;
+ }
+
if (! $error)
{
$cp->fk_user = $userid;
@@ -150,7 +156,7 @@ if ($action == 'create')
}
// If no SQL error we redirect to the request card
- if ($result > 0)
+ if (! $error && $result > 0)
{
$db->commit();
@@ -160,10 +166,6 @@ if ($action == 'create')
else
{
$db->rollback();
-
- // Otherwise we display the request form with the SQL error message
- header('Location: card.php?action=request');
- exit;
}
}
}
@@ -721,7 +723,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
break;
}
- setEventMessage($errors, 'errors');
+ setEventMessages($errors, null, 'errors');
}
@@ -793,7 +795,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
print ' ';
if (empty($user->rights->holiday->write_all))
{
- print $form->select_dolusers($userid,'useridbis',0,'',1);
+ print $form->select_dolusers($userid, 'useridbis', 0, '', 1, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
print ' ';
}
else print $form->select_dolusers(GETPOST('userid')?GETPOST('userid'):$user->id,'userid',0,'',0);
@@ -813,6 +815,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
$arraytypeleaves[$val['rowid']]=$labeltoshow;
}
print $form->selectarray('type', $arraytypeleaves, (GETPOST('type')?GETPOST('type'):''), 1);
+ if ($user->admin) print info_admin($langs->trans("YouCanChangeValuesForThisListFromDictionarySetup"),1);
print ' ';
print ' ';
@@ -821,10 +824,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
print ''.$langs->trans("DateDebCP").' ('.$langs->trans("FirstDayOfHoliday").') ';
print '';
// Si la demande ne vient pas de l'agenda
- if(!isset($_GET['datep'])) {
+ if (! GETPOST('date_debut_')) {
$form->select_date(-1,'date_debut_');
} else {
- $tmpdate = dol_mktime(0, 0, 0, GETPOST('datepmonth'), GETPOST('datepday'), GETPOST('datepyear'));
+ $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_debut_month'), GETPOST('date_debut_day'), GETPOST('date_debut_year'));
$form->select_date($tmpdate,'date_debut_');
}
print ' ';
@@ -837,10 +840,10 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
print ' '.$langs->trans("DateFinCP").' ('.$langs->trans("LastDayOfHoliday").') ';
print '';
// Si la demande ne vient pas de l'agenda
- if(!isset($_GET['datep'])) {
+ if (! GETPOST('date_fin_')) {
$form->select_date(-1,'date_fin_');
} else {
- $tmpdate = dol_mktime(0, 0, 0, GETPOST('datefmonth'), GETPOST('datefday'), GETPOST('datefyear'));
+ $tmpdate = dol_mktime(0, 0, 0, GETPOST('date_fin_month'), GETPOST('date_fin_day'), GETPOST('date_fin_year'));
$form->select_date($tmpdate,'date_fin_');
}
print ' ';
@@ -857,7 +860,7 @@ if (empty($id) || $action == 'add' || $action == 'request' || $action == 'create
$valideurarray = array();
foreach($valideurobjects as $val) $valideurarray[$val->id]=$val->id;
print ' ';
- print $form->select_dolusers($user->fk_user, "valideur", 1, "", 0, $valideurarray); // By default, hierarchical parent
+ print $form->select_dolusers((GETPOST('valideur')>0?GETPOST('valideur'):$user->fk_user), "valideur", 1, "", 0, $valideurarray, 0, 0, 0, 0, '', 0, '', '', 1); // By default, hierarchical parent
print ' ';
print '';
@@ -943,7 +946,7 @@ else
break;
}
- setEventMessage($errors, 'errors');
+ setEventMessages($errors, null, 'errors');
}
// On vérifie si l'utilisateur à le droit de lire cette demande
@@ -984,7 +987,6 @@ else
$head=holiday_prepare_head($cp);
- dol_fiche_head($head,'card',$langs->trans("CPTitreMenu"),0,'holiday');
if ($action == 'edit' && $cp->statut == 1)
{
@@ -994,6 +996,8 @@ else
print ' '."\n";
}
+ dol_fiche_head($head,'card',$langs->trans("CPTitreMenu"),0,'holiday');
+
print '';
print '';
@@ -1168,19 +1172,20 @@ else
print ' ';
print '
';
+ dol_fiche_end();
+
if ($action == 'edit' && $cp->statut == 1)
{
- print '';
+ print '
';
if ($canedit && $cp->statut == 1)
{
- print ' ';
+ print ' ';
}
print '
';
print '';
}
- dol_fiche_end();
if (! $edit)
{
diff --git a/htdocs/holiday/define_holiday.php b/htdocs/holiday/define_holiday.php
index 62ad088a5ef..c64e89b342f 100644
--- a/htdocs/holiday/define_holiday.php
+++ b/htdocs/holiday/define_holiday.php
@@ -130,10 +130,15 @@ elseif($action == 'add_event')
$add_holiday = $holiday->getValueEventCp($event);
$new_holiday = $nb_holiday + $add_holiday;
- // On ajoute la modification dans le LOG
- $holiday->addLogCP($user->id,$userCP, $holiday->getNameEventCp($event),$new_holiday);
+ // add event to existing types of vacation
+ foreach ($typeleaves as $key => $leave) {
+ $vacationTypeID = $leave['rowid'];
- $holiday->updateSoldeCP($userCP,$new_holiday);
+ // On ajoute la modification dans le LOG
+ $holiday->addLogCP($user->id,$userCP, $holiday->getNameEventCp($event),$new_holiday, $vacationTypeID);
+
+ $holiday->updateSoldeCP($userCP,$new_holiday, $vacationTypeID);
+ }
setEventMessages('AddEventToUserOkCP', '', 'mesgs');
}
@@ -178,7 +183,7 @@ if ($cp_events == 1)
print $langs->trans('MotifCP').' : ';
print $holiday->selectEventCP();
print ' '.$langs->trans('UserCP').' : ';
- print $form->select_dolusers('',"userCP",1,"",0,'');
+ print $form->select_dolusers('', 'userCP', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
print '
';
print '
';
diff --git a/htdocs/holiday/list.php b/htdocs/holiday/list.php
index 2f008e5ccd1..1c82288973e 100644
--- a/htdocs/holiday/list.php
+++ b/htdocs/holiday/list.php
@@ -275,7 +275,7 @@ print '
';
if ($sall)
{
foreach($fieldstosearchall as $key => $val) $fieldstosearchall[$key]=$langs->trans($val);
- print $langs->trans("FilterOnInto", $sall, join(', ',$fieldstosearchall));
+ print $langs->trans("FilterOnInto", $sall) . join(', ',$fieldstosearchall);
}
print '
';
@@ -419,7 +419,7 @@ if (! empty($holiday->holiday))
if($holiday_payes == '2')
{
print '';
- print ''.$langs->trans('None').' ';
+ print ''.$langs->trans('None').' ';
print ' ';
}
diff --git a/htdocs/hrm/establishment/card.php b/htdocs/hrm/establishment/card.php
index 10a1b42e961..fb6f41f4f39 100644
--- a/htdocs/hrm/establishment/card.php
+++ b/htdocs/hrm/establishment/card.php
@@ -62,7 +62,7 @@ if ($action == 'confirm_delete' && $confirm == "yes")
}
else
{
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
@@ -75,7 +75,7 @@ else if ($action == 'add')
$object->name = GETPOST('name', 'alpha');
if (empty($object->name))
{
- setEventMessage($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")), 'errors');
+ setEventMessages($langs->trans("ErrorFieldRequired",$langs->transnoentitiesnoconv("Name")), null, 'errors');
$error++;
}
@@ -124,7 +124,7 @@ else if ($action == 'update')
$name = GETPOST('name', 'alpha');
if (empty($name)) {
- setEventMessage($langs->trans('ErrorFieldRequired', $langs->trans('Name')), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired', $langs->trans('Name')), null, 'errors');
$error ++;
}
diff --git a/htdocs/hrm/establishment/info.php b/htdocs/hrm/establishment/info.php
index 806bd893fbb..1ef523fa607 100644
--- a/htdocs/hrm/establishment/info.php
+++ b/htdocs/hrm/establishment/info.php
@@ -53,6 +53,5 @@ if ($id)
print '';
}
-$db->close();
-
llxFooter();
+$db->close();
diff --git a/htdocs/imports/import.php b/htdocs/imports/import.php
index 60d57f15103..9e729fb36ac 100644
--- a/htdocs/imports/import.php
+++ b/htdocs/imports/import.php
@@ -139,11 +139,11 @@ if ($action == 'builddoc')
$result=$objimport->build_file($user, GETPOST('model','alpha'), $datatoimport, $array_match_file_to_database);
if ($result < 0)
{
- setEventMessage($objimport->error, 'errors');
+ setEventMessages($objimport->error, $objimport->errors, 'errors');
}
else
{
- setEventMessage($langs->trans("FileSuccessfullyBuilt"));
+ setEventMessages($langs->trans("FileSuccessfullyBuilt"), null, 'mesgs');
}
}
@@ -176,17 +176,17 @@ if ($action == 'add_import_model')
$result = $objimport->create($user);
if ($result >= 0)
{
- setEventMessage($langs->trans("ImportModelSaved",$objimport->model_name));
+ setEventMessages($langs->trans("ImportModelSaved", $objimport->model_name), null, 'mesgs');
}
else
{
$langs->load("errors");
if ($objimport->errno == 'DB_ERROR_RECORD_ALREADY_EXISTS')
{
- setEventMessage($langs->trans("ErrorImportDuplicateProfil"), 'errors');
+ setEventMessages($langs->trans("ErrorImportDuplicateProfil"), null, 'errors');
}
else {
- setEventMessage($objimport->error, 'errors');
+ setEventMessages($objimport->error, null, 'errors');
}
}
}
@@ -211,7 +211,7 @@ if ($step == 3 && $datatoimport)
else
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorFailedToSaveFile"), 'errors');
+ setEventMessages($langs->trans("ErrorFailedToSaveFile"), null, 'errors');
}
}
@@ -225,8 +225,8 @@ if ($step == 3 && $datatoimport)
$file = $conf->import->dir_temp . '/' . GETPOST('urlfile'); // Do not use urldecode here ($_GET and $_REQUEST are already decoded by PHP).
$ret=dol_delete_file($file);
- if ($ret) setEventMessage($langs->trans("FileWasRemoved", GETPOST('urlfile')));
- else setEventMessage($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), 'errors');
+ if ($ret) setEventMessages($langs->trans("FileWasRemoved", GETPOST('urlfile')), null, 'mesgs');
+ else setEventMessages($langs->trans("ErrorFailToDeleteFile", GETPOST('urlfile')), null, 'errors');
Header('Location: '.$_SERVER["PHP_SELF"].'?step='.$step.$param);
exit;
}
@@ -896,8 +896,9 @@ if ($step == 4 && $datatoimport)
}
else
{
- if ($objimport->array_import_convertvalue[0][$code]['rule']=='fetchidfromref') $htmltext.=$langs->trans("SourceExample").': '.$langs->transnoentitiesnoconv("ExampleAnyRefFoundIntoElement",$entitylang).($example?' ('.$langs->transnoentitiesnoconv("Example").': '.$example.')':'').' ';
- if ($objimport->array_import_convertvalue[0][$code]['rule']=='fetchidfromcodeid') $htmltext.=$langs->trans("SourceExample").': '.$langs->trans("ExampleAnyCodeOrIdFoundIntoDictionary",$langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$code]['dict'])).($example?' ('.$langs->transnoentitiesnoconv("Example").': '.$example.')':'').' ';
+ if ($objimport->array_import_convertvalue[0][$code]['rule']=='fetchidfromref') $htmltext.=$langs->trans("SourceExample").': '.$langs->transnoentitiesnoconv("ExampleAnyRefFoundIntoElement",$entitylang).($example?' ('.$langs->transnoentitiesnoconv("Example").': '.$example.')':'').' ';
+ elseif ($objimport->array_import_convertvalue[0][$code]['rule']=='fetchidfromcodeid') $htmltext.=$langs->trans("SourceExample").': '.$langs->trans("ExampleAnyCodeOrIdFoundIntoDictionary",$langs->transnoentitiesnoconv($objimport->array_import_convertvalue[0][$code]['dict'])).($example?' ('.$langs->transnoentitiesnoconv("Example").': '.$example.')':'').' ';
+ elseif ($example) $htmltext.=$langs->trans("SourceExample").': '.$example.' ';
}
// Format control rule
if (! empty($objimport->array_import_regex[0][$code]))
diff --git a/htdocs/includes/firephp/firephp-core/.gitignore b/htdocs/includes/firephp/firephp-core/.gitignore
deleted file mode 100644
index d16386367f7..00000000000
--- a/htdocs/includes/firephp/firephp-core/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-build/
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/CHANGELOG.md b/htdocs/includes/firephp/firephp-core/CHANGELOG.md
deleted file mode 100644
index d8b0f86df5b..00000000000
--- a/htdocs/includes/firephp/firephp-core/CHANGELOG.md
+++ /dev/null
@@ -1,171 +0,0 @@
-
-TODO:
-
- * Fix code indenting in PHP 4 code
- * Port maxDepth option to PHP 4 code
-
-2013-04-23 - Release Version: 0.4.0
-
- * No changes
-
-2011-06-22 - Release Version: 0.4.0rc3
-
- * Build fixes
-
-2011-06-20 - Release Version: 0.4.0rc1
-
- * (Issue 163) PHP5 class_exists() throws Exception without second parameter
- * (Issue 166) Non-utf8 array values replaced with null
- * Cleaned up code formatting [sokolov.innokenty@gmail.com]
- * Ensure JSON keys are never NULL (due to NULL key in some arrays)
- * Better UTF-8 encoding detection
- * Code style cleanup (qbbr)
- * Changed license to MIT
- * Refactored project
-
-2010-10-26 - Release Version: 0.3.2
-
-2010-10-12 - Release Version: 0.3.2rc6
-
- * (Issue 154) getRequestHeader uses "getallheaders" even though it doesn't always exist. [25m]
-
-2010-10-09 - Release Version: 0.3.2rc5
-
- * (Issue 153) FirePHP incorrectly double-encodes UTF8 when mbstring.func_overload is enabled
-
-2010-10-08 - Release Version: 0.3.2rc4
-
- * Trigger upgrade message if part of FirePHP 1.0
- * Removed FirePHP/Init.php inclusion logic and only load FirePHP.class.php if not already loaded
-
-2010-07-19 - Release Version: 0.3.2rc3
-
- * Fixed FirePHP/Init.php inclusion logic
-
-2010-07-19 - Release Version: 0.3.2rc2
-
- * (Issue 145) maxDepth option
- * Changed maxObjectDepth and maxArrayDepth option defaults to 5
- * Fixed code indentation
-
-2010-03-05 - Release Version: 0.3.2rc1
-
- * (Issue 114) Allow options to be passed on to basic logging wrappers
- * (Issue 122) Filter objectStack property of FirePHP class
- * (Issue 123) registerErrorHandler(false) by default
- * Added setOption() and getOption() methods
- * (Issue 117) dump() method argument validation
- * Started adding PHPUnit tests
- * Some refactoring to support unit testing
- * Deprecated setProcessorUrl() and setRendererUrl()
- * Check User-Agent and X-FirePHP-Version header to detect FirePHP on client
- * (Issue 135) FirePHP 0.4.3 with Firebug 1.5 changes user agent on the fly
- * (Issue 112) Error Predefined Constants Not available for PHP 5.x versions
-
-2008-06-14 - Release Version: 0.3.1
-
- * (Issue 108) ignore class name case in object filter
-
-2009-05-11 - Release Version: 0.3
-2009-05-01 - Release Version: 0.3.rc.1
-
- * (Issue 90) PHP4 compatible version of FirePHPCore
- * (Issue 98) Thrown exceptions don't send an HTTP 500 if the FirePHP exception handler is enabled
- * (Issue 85) Support associative arrays in encodeTable method in FirePHP.class.php
- * (Issue 66) Add a new getOptions() public method in API
- * (Issue 82) Define $this->options outside of __construct
- * (Issue 72) Message error if group name is null
- * (Issue 68) registerErrorHandler() and registerExceptionHandler() should returns previous handlers defined
- * (Issue 69) Add the missing register handler in the triumvirate (error, exception, assert)
- * (Issue 75) [Error & Exception Handling] Option to not exit script execution
- * (Issue 83) Exception handler can't throw exceptions
- * (Issue 80) Auto/Pre collapsing groups AND Custom group row colors
-
-2008-11-09 - Release Version: 0.2.1
-
- * (Issue 70) Problem when logging resources
-
-2008-10-21 - Release Version: 0.2.0
-
- * Updated version to 0.2.0
- * Switched to using __sleep instead of __wakeup
- * Added support to exclude object members when encoding
- * Add support to enable/disable logging
-
-2008-10-17 - Release Version: 0.2.b.8
-
- * New implementation for is_utf8()
- * (Issue 55) maxObjectDepth Option not working correctly when using TABLE and EXCEPTION Type
- * Bugfix for max[Object|Array]Depth when encoding nested array/object graphs
- * Bugfix for FB::setOptions()
-
-2008-10-16 - Release Version: 0.2.b.7
-
- * (Issue 45) Truncate dump when string have non utf8 cars
- * (Issue 52) logging will not work when firephp object gets stored in the session.
-
-2008-10-16 - Release Version: 0.2.b.6
-
- * (Issue 37) Display file and line information for each log message
- * (Issue 51) Limit output of object graphs
- * Bugfix for encoding object members set to NULL|false|''
-
-2008-10-14 - Release Version: 0.2.b.5
-
- * Updated JsonStream wildfire protocol to be more robust
- * (Issue 33) PHP error notices running demos
- * (Issue 48) Warning: ReflectionProperty::getValue() expects exactly 1 parameter, 0 given
-
-2008-10-08 - Release Version: 0.2.b.4
-
- * Bugfix for logging objects with recursion
-
-2008-10-08 - Release Version: 0.2.b.3
-
- * (Issue 43) Notice message in 0.2b2
- * Added support for PHP's native json_encode() if available
- * Revised object encoder to detect object recursion
-
-2008-10-07 - Release Version: 0.2.b.2
-
- * (Issue 28) Need solution for logging private and protected object variables
- * Added trace() and table() aliases in FirePHP class
- * (Issue 41) Use PHP doc in FirePHP
- * (Issue 39) Static logging method for object oriented API
-
-2008-10-01 - Release Version: 0.2.b.1
-
- * Added support for error and exception handling
- * Updated min PHP version for PEAR package to 5.2
- * Added version constant for library
- * Gave server library it's own wildfire plugin namespace
- * Migrated communication protocol to Wildfire JsonStream
- * Added support for console groups using "group" and "groupEnd"
- * Added support for log, info, warn and error logging aliases
- * (Issue 29) problem with TRACE when using with error_handler
- * (Issue 33) PHP error notices running demos
- * (Issue 12) undefined index php notice
- * Removed closing ?> php tags
- * (Issue 13) the code in the fb() function has a second return statement that will never be reached
-
-2008-07-30 - Release Version: 0.1.1.3
-
- * Include __className property in JSON string if variable was an object
- * Bugfix - Mis-spelt "Exception" in JSON encoding code
-
-2008-06-13 - Release Version: 0.1.1.1
-
- * Bugfix - Standardize windows paths in stack traces
- * Bugfix - Display correct stack trace info in windows environments
- * Bugfix - Check $_SERVER['HTTP_USER_AGENT'] before returning
-
-2008-06-13 - Release Version: 0.1.1
-
- * Added support for FirePHP::TRACE log style
- * Changed license to New BSD License
-
-2008-06-06 - Release Version: 0.0.2
-
- * Bugfix - Added usleep() to header writing loop to ensure unique index
- * Bugfix - Ensure chunk_split does not generate trailing "\n" with empty data header
- * Added support for FirePHP::TABLE log style
diff --git a/htdocs/includes/firephp/firephp-core/README.md b/htdocs/includes/firephp/firephp-core/README.md
deleted file mode 100644
index b1b32f842ff..00000000000
--- a/htdocs/includes/firephp/firephp-core/README.md
+++ /dev/null
@@ -1,75 +0,0 @@
-FirePHPCore
-===========
-
-**Status: stable**
-
-> **FirePHP is an advanced logging system that can display PHP variables in the browser as an application is navigated.**
-> All communication is out of band to the application meaning that the logging data will not interfere with the normal functioning of the application.
-
-This project contains the *FirePHPCore* PHP server library and provides a development environment (see `./workspace/`) for working on *FirePHPCore*.
-
-
-Usage
-=====
-
-See [Install/Traditional: FirePHPCore](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/Configuration/Traditional) in the
-[FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Testing
-=======
-
- cd tests
- phpunit .
-
-
-Support & Feedback
-==================
-
-See [Support](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#support) in the [FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Contribute
-==========
-
-See [Contribute](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#contribute) in the [FirePHP 1.0 Documentation](http://docs.sourcemint.org/firephp.org/firephp/1/-docs/).
-
-
-Author
-======
-
-This project is authored and maintained by [Christoph Dorn](http://www.christophdorn.com/).
-
-
-Documentation License
-=====================
-
-[Creative Commons Attribution-NonCommercial-ShareAlike 3.0](http://creativecommons.org/licenses/by-nc-sa/3.0/)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-
-Code License
-============
-
-[MIT License](http://www.opensource.org/licenses/mit-license.php)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/htdocs/includes/firephp/firephp-core/composer.json b/htdocs/includes/firephp/firephp-core/composer.json
deleted file mode 100644
index 7cab85a9f8b..00000000000
--- a/htdocs/includes/firephp/firephp-core/composer.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "name": "firephp/firephp-core",
- "description": "Traditional FirePHPCore library for sending PHP variables to the browser.",
- "type": "library",
- "homepage": "https://github.com/firephp/firephp-core",
- "license": "MIT",
- "authors": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "homepage": "http://christophdorn.com"
- }
- ],
- "support": {
- "forum": "http://groups.google.com/group/firephp-dev",
- "issues": "https://github.com/firephp/firephp-core/issues",
- "source": "https://github.com/firephp/firephp-core"
- },
- "autoload": {
- "classmap": [
- "lib/FirePHPCore/FirePHP.class.php",
- "lib/FirePHPCore/fb.php"
- ]
- }
-}
-
diff --git a/htdocs/includes/firephp/firephp-core/examples/oo.php b/htdocs/includes/firephp/firephp-core/examples/oo.php
deleted file mode 100644
index f5f39875c94..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/oo.php
+++ /dev/null
@@ -1,82 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/FirePHP.class.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-
-$firephp = FirePHP::getInstance(true);
-
-
-$firephp->fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-$firephp->fb('Log message' ,FirePHP::LOG);
-$firephp->fb('Info message' ,FirePHP::INFO);
-$firephp->fb('Warn message' ,FirePHP::WARN);
-$firephp->fb('Error message',FirePHP::ERROR);
-
-$firephp->fb('Message with label','Label',FirePHP::LOG);
-
-$firephp->fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP::LOG);
-
-function test($Arg1) {
- throw new Exception('Test Exception');
-}
-try {
- test(array('Hello'=>'World'));
-} catch(Exception $e) {
- /* Log exception including stack trace & variables */
- $firephp->fb($e);
-}
-
-$firephp->fb('Backtrace to here',FirePHP::TRACE);
-
-$firephp->fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP::TABLE);
-
-/* Will show only in "Server" tab for the request */
-$firephp->fb(apache_request_headers(),'RequestHeaders',FirePHP::DUMP);
-
-
-print 'Hello World';
diff --git a/htdocs/includes/firephp/firephp-core/examples/oo.php4 b/htdocs/includes/firephp/firephp-core/examples/oo.php4
deleted file mode 100644
index 75ec1ee3f9e..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/oo.php4
+++ /dev/null
@@ -1,72 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/FirePHP.class.php4');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-
-$firephp =& FirePHP::getInstance(true);
-
-
-$firephp->fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-$firephp->fb('Log message' ,FirePHP_LOG);
-$firephp->fb('Info message' ,FirePHP_INFO);
-$firephp->fb('Warn message' ,FirePHP_WARN);
-$firephp->fb('Error message',FirePHP_ERROR);
-
-$firephp->fb('Message with label','Label',FirePHP_LOG);
-
-$firephp->fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP_LOG);
-
-$firephp->fb('Backtrace to here',FirePHP_TRACE);
-
-$firephp->fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP_TABLE);
-
-/* Will show only in "Server" tab for the request */
-$firephp->fb(apache_request_headers(),'RequestHeaders',FirePHP_DUMP);
-
-
-print 'Hello World';
diff --git a/htdocs/includes/firephp/firephp-core/examples/procedural.php b/htdocs/includes/firephp/firephp-core/examples/procedural.php
deleted file mode 100644
index d1d3920bf4a..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/procedural.php
+++ /dev/null
@@ -1,79 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/fb.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-fb('Log message' ,FirePHP::LOG);
-fb('Info message' ,FirePHP::INFO);
-fb('Warn message' ,FirePHP::WARN);
-fb('Error message',FirePHP::ERROR);
-
-fb('Message with label','Label',FirePHP::LOG);
-
-fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP::LOG);
-
-function test($Arg1) {
- throw new Exception('Test Exception');
-}
-try {
- test(array('Hello'=>'World'));
-} catch(Exception $e) {
- /* Log exception including stack trace & variables */
- fb($e);
-}
-
-fb('Backtrace to here',FirePHP::TRACE);
-
-fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP::TABLE);
-
-/* Will show only in "Server" tab for the request */
-fb(apache_request_headers(),'RequestHeaders',FirePHP::DUMP);
-
-
-print 'Hello World';
-
diff --git a/htdocs/includes/firephp/firephp-core/examples/procedural.php4 b/htdocs/includes/firephp/firephp-core/examples/procedural.php4
deleted file mode 100644
index 28eb7dc17e8..00000000000
--- a/htdocs/includes/firephp/firephp-core/examples/procedural.php4
+++ /dev/null
@@ -1,69 +0,0 @@
-, Copyright 2007, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK ***** */
-
-
-/* NOTE: You must have the FirePHPCore library in your include path */
-
-set_include_path(dirname(dirname(__FILE__)).'/lib'.PATH_SEPARATOR.get_include_path());
-
-
-require('FirePHPCore/fb.php');
-
-/* NOTE: You must have Output Buffering enabled via
- ob_start() or output_buffering ini directive. */
-
-fb('Hello World'); /* Defaults to FirePHP::LOG */
-
-fb('Log message' ,FirePHP_LOG);
-fb('Info message' ,FirePHP_INFO);
-fb('Warn message' ,FirePHP_WARN);
-fb('Error message',FirePHP_ERROR);
-
-fb('Message with label','Label',FirePHP_LOG);
-
-fb(array('key1'=>'val1',
- 'key2'=>array(array('v1','v2'),'v3')),
- 'TestArray',FirePHP_LOG);
-
-fb('Backtrace to here',FirePHP_TRACE);
-
-fb(array('2 SQL queries took 0.06 seconds',array(
- array('SQL Statement','Time','Result'),
- array('SELECT * FROM Foo','0.02',array('row1','row2')),
- array('SELECT * FROM Bar','0.04',array('row1','row2'))
- )),FirePHP_TABLE);
-
-/* Will show only in "Server" tab for the request */
-fb(apache_request_headers(),'RequestHeaders',FirePHP_DUMP);
-
-
-print 'Hello World';
-
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php
deleted file mode 100644
index 65d83b56dca..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php
+++ /dev/null
@@ -1,1828 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Sokolov Innokenty , Copyright 2011, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-/**
- * @see http://code.google.com/p/firephp/issues/detail?id=112
- */
-if (!defined('E_STRICT')) {
- define('E_STRICT', 2048);
-}
-if (!defined('E_RECOVERABLE_ERROR')) {
- define('E_RECOVERABLE_ERROR', 4096);
-}
-if (!defined('E_DEPRECATED')) {
- define('E_DEPRECATED', 8192);
-}
-if (!defined('E_USER_DEPRECATED')) {
- define('E_USER_DEPRECATED', 16384);
-}
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * For more information see: http://www.firephp.org/
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-class FirePHP {
-
- /**
- * FirePHP version
- *
- * @var string
- */
- const VERSION = '0.3'; // @pinf replace '0.3' with '%%VERSION%%'
-
- /**
- * Firebug LOG level
- *
- * Logs a message to firebug console.
- *
- * @var string
- */
- const LOG = 'LOG';
-
- /**
- * Firebug INFO level
- *
- * Logs a message to firebug console and displays an info icon before the message.
- *
- * @var string
- */
- const INFO = 'INFO';
-
- /**
- * Firebug WARN level
- *
- * Logs a message to firebug console, displays an warning icon before the message and colors the line turquoise.
- *
- * @var string
- */
- const WARN = 'WARN';
-
- /**
- * Firebug ERROR level
- *
- * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
- *
- * @var string
- */
- const ERROR = 'ERROR';
-
- /**
- * Dumps a variable to firebug's server panel
- *
- * @var string
- */
- const DUMP = 'DUMP';
-
- /**
- * Displays a stack trace in firebug console
- *
- * @var string
- */
- const TRACE = 'TRACE';
-
- /**
- * Displays an exception in firebug console
- *
- * Increments the firebug error count.
- *
- * @var string
- */
- const EXCEPTION = 'EXCEPTION';
-
- /**
- * Displays an table in firebug console
- *
- * @var string
- */
- const TABLE = 'TABLE';
-
- /**
- * Starts a group in firebug console
- *
- * @var string
- */
- const GROUP_START = 'GROUP_START';
-
- /**
- * Ends a group in firebug console
- *
- * @var string
- */
- const GROUP_END = 'GROUP_END';
-
- /**
- * Singleton instance of FirePHP
- *
- * @var FirePHP
- */
- protected static $instance = null;
-
- /**
- * Flag whether we are logging from within the exception handler
- *
- * @var boolean
- */
- protected $inExceptionHandler = false;
-
- /**
- * Flag whether to throw PHP errors that have been converted to ErrorExceptions
- *
- * @var boolean
- */
- protected $throwErrorExceptions = true;
-
- /**
- * Flag whether to convert PHP assertion errors to Exceptions
- *
- * @var boolean
- */
- protected $convertAssertionErrorsToExceptions = true;
-
- /**
- * Flag whether to throw PHP assertion errors that have been converted to Exceptions
- *
- * @var boolean
- */
- protected $throwAssertionExceptions = false;
-
- /**
- * Wildfire protocol message index
- *
- * @var integer
- */
- protected $messageIndex = 1;
-
- /**
- * Options for the library
- *
- * @var array
- */
- protected $options = array('maxDepth' => 10,
- 'maxObjectDepth' => 5,
- 'maxArrayDepth' => 5,
- 'useNativeJsonEncode' => true,
- 'includeLineNumbers' => true);
-
- /**
- * Filters used to exclude object members when encoding
- *
- * @var array
- */
- protected $objectFilters = array(
- 'firephp' => array('objectStack', 'instance', 'json_objectStack'),
- 'firephp_test_class' => array('objectStack', 'instance', 'json_objectStack')
- );
-
- /**
- * A stack of objects used to detect recursion during object encoding
- *
- * @var object
- */
- protected $objectStack = array();
-
- /**
- * Flag to enable/disable logging
- *
- * @var boolean
- */
- protected $enabled = true;
-
- /**
- * The insight console to log to if applicable
- *
- * @var object
- */
- protected $logToInsightConsole = null;
-
- /**
- * When the object gets serialized only include specific object members.
- *
- * @return array
- */
- public function __sleep()
- {
- return array('options', 'objectFilters', 'enabled');
- }
-
- /**
- * Gets singleton instance of FirePHP
- *
- * @param boolean $autoCreate
- * @return FirePHP
- */
- public static function getInstance($autoCreate = false)
- {
- if ($autoCreate === true && !self::$instance) {
- self::init();
- }
- return self::$instance;
- }
-
- /**
- * Creates FirePHP object and stores it for singleton access
- *
- * @return FirePHP
- */
- public static function init()
- {
- return self::setInstance(new self());
- }
-
- /**
- * Set the instance of the FirePHP singleton
- *
- * @param FirePHP $instance The FirePHP object instance
- * @return FirePHP
- */
- public static function setInstance($instance)
- {
- return self::$instance = $instance;
- }
-
- /**
- * Set an Insight console to direct all logging calls to
- *
- * @param object $console The console object to log to
- * @return void
- */
- public function setLogToInsightConsole($console)
- {
- if (is_string($console)) {
- if (get_class($this) != 'FirePHP_Insight' && !is_subclass_of($this, 'FirePHP_Insight')) {
- throw new Exception('FirePHP instance not an instance or subclass of FirePHP_Insight!');
- }
- $this->logToInsightConsole = $this->to('request')->console($console);
- } else {
- $this->logToInsightConsole = $console;
- }
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @param boolean $enabled TRUE to enable, FALSE to disable
- * @return void
- */
- public function setEnabled($enabled)
- {
- $this->enabled = $enabled;
- }
-
- /**
- * Check if logging is enabled
- *
- * @return boolean TRUE if enabled
- */
- public function getEnabled()
- {
- return $this->enabled;
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @param string $class The class name of the object
- * @param array $filter An array of members to exclude
- * @return void
- */
- public function setObjectFilter($class, $filter)
- {
- $this->objectFilters[strtolower($class)] = $filter;
- }
-
- /**
- * Set some options for the library
- *
- * Options:
- * - maxDepth: The maximum depth to traverse (default: 10)
- * - maxObjectDepth: The maximum depth to traverse objects (default: 5)
- * - maxArrayDepth: The maximum depth to traverse arrays (default: 5)
- * - useNativeJsonEncode: If true will use json_encode() (default: true)
- * - includeLineNumbers: If true will include line numbers and filenames (default: true)
- *
- * @param array $options The options to be set
- * @return void
- */
- public function setOptions($options)
- {
- $this->options = array_merge($this->options, $options);
- }
-
- /**
- * Get options from the library
- *
- * @return array The currently set options
- */
- public function getOptions()
- {
- return $this->options;
- }
-
- /**
- * Set an option for the library
- *
- * @param string $name
- * @param mixed $value
- * @return void
- * @throws Exception
- */
- public function setOption($name, $value)
- {
- if (!isset($this->options[$name])) {
- throw $this->newException('Unknown option: ' . $name);
- }
- $this->options[$name] = $value;
- }
-
- /**
- * Get an option from the library
- *
- * @param string $name
- * @return mixed
- * @throws Exception
- */
- public function getOption($name)
- {
- if (!isset($this->options[$name])) {
- throw $this->newException('Unknown option: ' . $name);
- }
- return $this->options[$name];
- }
-
- /**
- * Register FirePHP as your error handler
- *
- * Will throw exceptions for each php error.
- *
- * @return mixed Returns a string containing the previously defined error handler (if any)
- */
- public function registerErrorHandler($throwErrorExceptions = false)
- {
- //NOTE: The following errors will not be caught by this error handler:
- // E_ERROR, E_PARSE, E_CORE_ERROR,
- // E_CORE_WARNING, E_COMPILE_ERROR,
- // E_COMPILE_WARNING, E_STRICT
-
- $this->throwErrorExceptions = $throwErrorExceptions;
-
- return set_error_handler(array($this, 'errorHandler'));
- }
-
- /**
- * FirePHP's error handler
- *
- * Throws exception for each php error that will occur.
- *
- * @param integer $errno
- * @param string $errstr
- * @param string $errfile
- * @param integer $errline
- * @param array $errcontext
- */
- public function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
- {
- // Don't throw exception if error reporting is switched off
- if (error_reporting() == 0) {
- return;
- }
- // Only throw exceptions for errors we are asking for
- if (error_reporting() & $errno) {
-
- $exception = new ErrorException($errstr, 0, $errno, $errfile, $errline);
- if ($this->throwErrorExceptions) {
- throw $exception;
- } else {
- $this->fb($exception);
- }
- }
- }
-
- /**
- * Register FirePHP as your exception handler
- *
- * @return mixed Returns the name of the previously defined exception handler,
- * or NULL on error.
- * If no previous handler was defined, NULL is also returned.
- */
- public function registerExceptionHandler()
- {
- return set_exception_handler(array($this, 'exceptionHandler'));
- }
-
- /**
- * FirePHP's exception handler
- *
- * Logs all exceptions to your firebug console and then stops the script.
- *
- * @param Exception $exception
- * @throws Exception
- */
- function exceptionHandler($exception)
- {
- $this->inExceptionHandler = true;
-
- header('HTTP/1.1 500 Internal Server Error');
-
- try {
- $this->fb($exception);
- } catch (Exception $e) {
- echo 'We had an exception: ' . $e;
- }
-
- $this->inExceptionHandler = false;
- }
-
- /**
- * Register FirePHP driver as your assert callback
- *
- * @param boolean $convertAssertionErrorsToExceptions
- * @param boolean $throwAssertionExceptions
- * @return mixed Returns the original setting or FALSE on errors
- */
- public function registerAssertionHandler($convertAssertionErrorsToExceptions = true, $throwAssertionExceptions = false)
- {
- $this->convertAssertionErrorsToExceptions = $convertAssertionErrorsToExceptions;
- $this->throwAssertionExceptions = $throwAssertionExceptions;
-
- if ($throwAssertionExceptions && !$convertAssertionErrorsToExceptions) {
- throw $this->newException('Cannot throw assertion exceptions as assertion errors are not being converted to exceptions!');
- }
-
- return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
- }
-
- /**
- * FirePHP's assertion handler
- *
- * Logs all assertions to your firebug console and then stops the script.
- *
- * @param string $file File source of assertion
- * @param integer $line Line source of assertion
- * @param mixed $code Assertion code
- */
- public function assertionHandler($file, $line, $code)
- {
- if ($this->convertAssertionErrorsToExceptions) {
-
- $exception = new ErrorException('Assertion Failed - Code[ ' . $code . ' ]', 0, null, $file, $line);
-
- if ($this->throwAssertionExceptions) {
- throw $exception;
- } else {
- $this->fb($exception);
- }
-
- } else {
- $this->fb($code, 'Assertion Failed', FirePHP::ERROR, array('File' => $file, 'Line' => $line));
- }
- }
-
- /**
- * Start a group for following messages.
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $name
- * @param array $options OPTIONAL Instructions on how to log the group
- * @return true
- * @throws Exception
- */
- public function group($name, $options = null)
- {
-
- if (!$name) {
- throw $this->newException('You must specify a label for the group!');
- }
-
- if ($options) {
- if (!is_array($options)) {
- throw $this->newException('Options must be defined as an array!');
- }
- if (array_key_exists('Collapsed', $options)) {
- $options['Collapsed'] = ($options['Collapsed']) ? 'true' : 'false';
- }
- }
-
- return $this->fb(null, $name, FirePHP::GROUP_START, $options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- public function groupEnd()
- {
- return $this->fb(null, null, FirePHP::GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function log($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::LOG, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function info($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::INFO, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function warn($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::WARN, $options);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function error($object, $label = null, $options = array())
- {
- return $this->fb($object, $label, FirePHP::ERROR, $options);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $key
- * @param mixed $variable
- * @return true
- * @throws Exception
- */
- public function dump($key, $variable, $options = array())
- {
- if (!is_string($key)) {
- throw $this->newException('Key passed to dump() is not a string');
- }
- if (strlen($key) > 100) {
- throw $this->newException('Key passed to dump() is longer than 100 characters');
- }
- if (!preg_match_all('/^[a-zA-Z0-9-_\.:]*$/', $key, $m)) {
- throw $this->newException('Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]');
- }
- return $this->fb($variable, $key, FirePHP::DUMP, $options);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $label
- * @return true
- * @throws Exception
- */
- public function trace($label)
- {
- return $this->fb($label, FirePHP::TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $label
- * @param string $table
- * @return true
- * @throws Exception
- */
- public function table($label, $table, $options = array())
- {
- return $this->fb($table, $label, FirePHP::TABLE, $options);
- }
-
- /**
- * Insight API wrapper
- *
- * @see Insight_Helper::to()
- */
- public static function to()
- {
- $instance = self::getInstance();
- if (!method_exists($instance, '_to')) {
- throw new Exception('FirePHP::to() implementation not loaded');
- }
- $args = func_get_args();
- return call_user_func_array(array($instance, '_to'), $args);
- }
-
- /**
- * Insight API wrapper
- *
- * @see Insight_Helper::plugin()
- */
- public static function plugin()
- {
- $instance = self::getInstance();
- if (!method_exists($instance, '_plugin')) {
- throw new Exception('FirePHP::plugin() implementation not loaded');
- }
- $args = func_get_args();
- return call_user_func_array(array($instance, '_plugin'), $args);
- }
-
- /**
- * Check if FirePHP is installed on client
- *
- * @return boolean
- */
- public function detectClientExtension()
- {
- // Check if FirePHP is installed on client via User-Agent header
- if (@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si', $this->getUserAgent(), $m) &&
- version_compare($m[1][0], '0.0.6', '>=')) {
- return true;
- } else
- // Check if FirePHP is installed on client via X-FirePHP-Version header
- if (@preg_match_all('/^([\.\d]*)$/si', $this->getRequestHeader('X-FirePHP-Version'), $m) &&
- version_compare($m[1][0], '0.0.6', '>=')) {
- return true;
- }
- return false;
- }
-
- /**
- * Log varible to Firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $object The variable to be logged
- * @return boolean Return TRUE if message was added to headers, FALSE otherwise
- * @throws Exception
- */
- public function fb($object)
- {
- if ($this instanceof FirePHP_Insight && method_exists($this, '_logUpgradeClientMessage')) {
- if (!FirePHP_Insight::$upgradeClientMessageLogged) { // avoid infinite recursion as _logUpgradeClientMessage() logs a message
- $this->_logUpgradeClientMessage();
- }
- }
-
- static $insightGroupStack = array();
-
- if (!$this->getEnabled()) {
- return false;
- }
-
- if ($this->headersSent($filename, $linenum)) {
- // If we are logging from within the exception handler we cannot throw another exception
- if ($this->inExceptionHandler) {
- // Simply echo the error out to the page
- echo 'FirePHP ERROR: Headers already sent in ' . $filename . ' on line ' . $linenum . ' . Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.
';
- } else {
- throw $this->newException('Headers already sent in ' . $filename . ' on line ' . $linenum . '. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
- }
- }
-
- $type = null;
- $label = null;
- $options = array();
-
- if (func_num_args() == 1) {
- } else if (func_num_args() == 2) {
- switch (func_get_arg(1)) {
- case self::LOG:
- case self::INFO:
- case self::WARN:
- case self::ERROR:
- case self::DUMP:
- case self::TRACE:
- case self::EXCEPTION:
- case self::TABLE:
- case self::GROUP_START:
- case self::GROUP_END:
- $type = func_get_arg(1);
- break;
- default:
- $label = func_get_arg(1);
- break;
- }
- } else if (func_num_args() == 3) {
- $type = func_get_arg(2);
- $label = func_get_arg(1);
- } else if (func_num_args() == 4) {
- $type = func_get_arg(2);
- $label = func_get_arg(1);
- $options = func_get_arg(3);
- } else {
- throw $this->newException('Wrong number of arguments to fb() function!');
- }
-
- if ($this->logToInsightConsole !== null && (get_class($this) == 'FirePHP_Insight' || is_subclass_of($this, 'FirePHP_Insight'))) {
- $trace = debug_backtrace();
- if (!$trace) return false;
- for ($i = 0; $i < sizeof($trace); $i++) {
- if (isset($trace[$i]['class'])) {
- if ($trace[$i]['class'] == 'FirePHP' || $trace[$i]['class'] == 'FB') {
- continue;
- }
- }
- if (isset($trace[$i]['file'])) {
- $path = $this->_standardizePath($trace[$i]['file']);
- if (substr($path, -18, 18) == 'FirePHPCore/fb.php' || substr($path, -29, 29) == 'FirePHPCore/FirePHP.class.php') {
- continue;
- }
- }
- if (isset($trace[$i]['function']) && $trace[$i]['function'] == 'fb' &&
- isset($trace[$i - 1]['file']) && substr($this->_standardizePath($trace[$i - 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- continue;
- }
- if (isset($trace[$i]['class']) && $trace[$i]['class'] == 'FB' &&
- isset($trace[$i - 1]['file']) && substr($this->_standardizePath($trace[$i - 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- continue;
- }
- break;
- }
- // adjust trace offset
- $msg = $this->logToInsightConsole->option('encoder.trace.offsetAdjustment', $i);
-
- if ($object instanceof Exception) {
- $type = self::EXCEPTION;
- }
- if ($label && $type != self::TABLE && $type != self::GROUP_START) {
- $msg = $msg->label($label);
- }
- switch ($type) {
- case self::DUMP:
- case self::LOG:
- return $msg->log($object);
- case self::INFO:
- return $msg->info($object);
- case self::WARN:
- return $msg->warn($object);
- case self::ERROR:
- return $msg->error($object);
- case self::TRACE:
- return $msg->trace($object);
- case self::EXCEPTION:
- return $this->plugin('error')->handleException($object, $msg);
- case self::TABLE:
- if (isset($object[0]) && !is_string($object[0]) && $label) {
- $object = array($label, $object);
- }
- return $msg->table($object[0], array_slice($object[1], 1), $object[1][0]);
- case self::GROUP_START:
- $insightGroupStack[] = $msg->group(md5($label))->open();
- return $msg->log($label);
- case self::GROUP_END:
- if (count($insightGroupStack) == 0) {
- throw new Error('Too many groupEnd() as opposed to group() calls!');
- }
- $group = array_pop($insightGroupStack);
- return $group->close();
- default:
- return $msg->log($object);
- }
- }
-
- if (!$this->detectClientExtension()) {
- return false;
- }
-
- $meta = array();
- $skipFinalObjectEncode = false;
-
- if ($object instanceof Exception) {
-
- $meta['file'] = $this->_escapeTraceFile($object->getFile());
- $meta['line'] = $object->getLine();
-
- $trace = $object->getTrace();
- if ($object instanceof ErrorException
- && isset($trace[0]['function'])
- && $trace[0]['function'] == 'errorHandler'
- && isset($trace[0]['class'])
- && $trace[0]['class'] == 'FirePHP') {
-
- $severity = false;
- switch ($object->getSeverity()) {
- case E_WARNING:
- $severity = 'E_WARNING';
- break;
-
- case E_NOTICE:
- $severity = 'E_NOTICE';
- break;
-
- case E_USER_ERROR:
- $severity = 'E_USER_ERROR';
- break;
-
- case E_USER_WARNING:
- $severity = 'E_USER_WARNING';
- break;
-
- case E_USER_NOTICE:
- $severity = 'E_USER_NOTICE';
- break;
-
- case E_STRICT:
- $severity = 'E_STRICT';
- break;
-
- case E_RECOVERABLE_ERROR:
- $severity = 'E_RECOVERABLE_ERROR';
- break;
-
- case E_DEPRECATED:
- $severity = 'E_DEPRECATED';
- break;
-
- case E_USER_DEPRECATED:
- $severity = 'E_USER_DEPRECATED';
- break;
- }
-
- $object = array('Class' => get_class($object),
- 'Message' => $severity . ': ' . $object->getMessage(),
- 'File' => $this->_escapeTraceFile($object->getFile()),
- 'Line' => $object->getLine(),
- 'Type' => 'trigger',
- 'Trace' => $this->_escapeTrace(array_splice($trace, 2)));
- $skipFinalObjectEncode = true;
- } else {
- $object = array('Class' => get_class($object),
- 'Message' => $object->getMessage(),
- 'File' => $this->_escapeTraceFile($object->getFile()),
- 'Line' => $object->getLine(),
- 'Type' => 'throw',
- 'Trace' => $this->_escapeTrace($trace));
- $skipFinalObjectEncode = true;
- }
- $type = self::EXCEPTION;
-
- } else if ($type == self::TRACE) {
-
- $trace = debug_backtrace();
- if (!$trace) return false;
- for ($i = 0; $i < sizeof($trace); $i++) {
-
- if (isset($trace[$i]['class'])
- && isset($trace[$i]['file'])
- && ($trace[$i]['class'] == 'FirePHP'
- || $trace[$i]['class'] == 'FB')
- && (substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']), -29, 29) == 'FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if (isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class'] == 'FirePHP'
- && substr($this->_standardizePath($trace[$i + 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if ($trace[$i]['function'] == 'fb'
- || $trace[$i]['function'] == 'trace'
- || $trace[$i]['function'] == 'send') {
-
- $object = array('Class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : '',
- 'Type' => isset($trace[$i]['type']) ? $trace[$i]['type'] : '',
- 'Function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : '',
- 'Message' => $trace[$i]['args'][0],
- 'File' => isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '',
- 'Line' => isset($trace[$i]['line']) ? $trace[$i]['line'] : '',
- 'Args' => isset($trace[$i]['args']) ? $this->encodeObject($trace[$i]['args']) : '',
- 'Trace' => $this->_escapeTrace(array_splice($trace, $i + 1)));
-
- $skipFinalObjectEncode = true;
- $meta['file'] = isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '';
- $meta['line'] = isset($trace[$i]['line']) ? $trace[$i]['line'] : '';
- break;
- }
- }
-
- } else
- if ($type == self::TABLE) {
-
- if (isset($object[0]) && is_string($object[0])) {
- $object[1] = $this->encodeTable($object[1]);
- } else {
- $object = $this->encodeTable($object);
- }
-
- $skipFinalObjectEncode = true;
-
- } else if ($type == self::GROUP_START) {
-
- if (!$label) {
- throw $this->newException('You must specify a label for the group!');
- }
-
- } else {
- if ($type === null) {
- $type = self::LOG;
- }
- }
-
- if ($this->options['includeLineNumbers']) {
- if (!isset($meta['file']) || !isset($meta['line'])) {
-
- $trace = debug_backtrace();
- for ($i = 0; $trace && $i < sizeof($trace); $i++) {
-
- if (isset($trace[$i]['class'])
- && isset($trace[$i]['file'])
- && ($trace[$i]['class'] == 'FirePHP'
- || $trace[$i]['class'] == 'FB')
- && (substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']), -29, 29) == 'FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if (isset($trace[$i]['class'])
- && isset($trace[$i + 1]['file'])
- && $trace[$i]['class'] == 'FirePHP'
- && substr($this->_standardizePath($trace[$i + 1]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if (isset($trace[$i]['file'])
- && substr($this->_standardizePath($trace[$i]['file']), -18, 18) == 'FirePHPCore/fb.php') {
- /* Skip FB::fb() */
- } else {
- $meta['file'] = isset($trace[$i]['file']) ? $this->_escapeTraceFile($trace[$i]['file']) : '';
- $meta['line'] = isset($trace[$i]['line']) ? $trace[$i]['line'] : '';
- break;
- }
- }
- }
- } else {
- unset($meta['file']);
- unset($meta['line']);
- }
-
- $this->setHeader('X-Wf-Protocol-1', 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
- $this->setHeader('X-Wf-1-Plugin-1', 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/' . self::VERSION);
-
- $structureIndex = 1;
- if ($type == self::DUMP) {
- $structureIndex = 2;
- $this->setHeader('X-Wf-1-Structure-2', 'http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
- } else {
- $this->setHeader('X-Wf-1-Structure-1', 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
- }
-
- if ($type == self::DUMP) {
- $msg = '{"' . $label . '":' . $this->jsonEncode($object, $skipFinalObjectEncode) . '}';
- } else {
- $msgMeta = $options;
- $msgMeta['Type'] = $type;
- if ($label !== null) {
- $msgMeta['Label'] = $label;
- }
- if (isset($meta['file']) && !isset($msgMeta['File'])) {
- $msgMeta['File'] = $meta['file'];
- }
- if (isset($meta['line']) && !isset($msgMeta['Line'])) {
- $msgMeta['Line'] = $meta['line'];
- }
- $msg = '[' . $this->jsonEncode($msgMeta) . ',' . $this->jsonEncode($object, $skipFinalObjectEncode) . ']';
- }
-
- $parts = explode("\n", chunk_split($msg, 5000, "\n"));
-
- for ($i = 0; $i < count($parts); $i++) {
-
- $part = $parts[$i];
- if ($part) {
-
- if (count($parts) > 2) {
- // Message needs to be split into multiple parts
- $this->setHeader('X-Wf-1-' . $structureIndex . '-' . '1-' . $this->messageIndex,
- (($i == 0) ? strlen($msg) : '')
- . '|' . $part . '|'
- . (($i < count($parts) - 2) ? '\\' : ''));
- } else {
- $this->setHeader('X-Wf-1-' . $structureIndex . '-' . '1-' . $this->messageIndex,
- strlen($part) . '|' . $part . '|');
- }
-
- $this->messageIndex++;
-
- if ($this->messageIndex > 99999) {
- throw $this->newException('Maximum number (99,999) of messages reached!');
- }
- }
- }
-
- $this->setHeader('X-Wf-1-Index', $this->messageIndex - 1);
-
- return true;
- }
-
- /**
- * Standardizes path for windows systems.
- *
- * @param string $path
- * @return string
- */
- protected function _standardizePath($path)
- {
- return preg_replace('/\\\\+/', '/', $path);
- }
-
- /**
- * Escape trace path for windows systems
- *
- * @param array $trace
- * @return array
- */
- protected function _escapeTrace($trace)
- {
- if (!$trace) return $trace;
- for ($i = 0; $i < sizeof($trace); $i++) {
- if (isset($trace[$i]['file'])) {
- $trace[$i]['file'] = $this->_escapeTraceFile($trace[$i]['file']);
- }
- if (isset($trace[$i]['args'])) {
- $trace[$i]['args'] = $this->encodeObject($trace[$i]['args']);
- }
- }
- return $trace;
- }
-
- /**
- * Escape file information of trace for windows systems
- *
- * @param string $file
- * @return string
- */
- protected function _escapeTraceFile($file)
- {
- /* Check if we have a windows filepath */
- if (strpos($file, '\\')) {
- /* First strip down to single \ */
-
- $file = preg_replace('/\\\\+/', '\\', $file);
-
- return $file;
- }
- return $file;
- }
-
- /**
- * Check if headers have already been sent
- *
- * @param string $filename
- * @param integer $linenum
- */
- protected function headersSent(&$filename, &$linenum)
- {
- return headers_sent($filename, $linenum);
- }
-
- /**
- * Send header
- *
- * @param string $name
- * @param string $value
- */
- protected function setHeader($name, $value)
- {
- return header($name . ': ' . $value);
- }
-
- /**
- * Get user agent
- *
- * @return string|false
- */
- protected function getUserAgent()
- {
- if (!isset($_SERVER['HTTP_USER_AGENT'])) return false;
- return $_SERVER['HTTP_USER_AGENT'];
- }
-
- /**
- * Get all request headers
- *
- * @return array
- */
- public static function getAllRequestHeaders()
- {
- static $_cachedHeaders = false;
- if ($_cachedHeaders !== false) {
- return $_cachedHeaders;
- }
- $headers = array();
- if (function_exists('getallheaders')) {
- foreach (getallheaders() as $name => $value) {
- $headers[strtolower($name)] = $value;
- }
- } else {
- foreach ($_SERVER as $name => $value) {
- if (substr($name, 0, 5) == 'HTTP_') {
- $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value;
- }
- }
- }
- return $_cachedHeaders = $headers;
- }
-
- /**
- * Get a request header
- *
- * @return string|false
- */
- protected function getRequestHeader($name)
- {
- $headers = self::getAllRequestHeaders();
- if (isset($headers[strtolower($name)])) {
- return $headers[strtolower($name)];
- }
- return false;
- }
-
- /**
- * Returns a new exception
- *
- * @param string $message
- * @return Exception
- */
- protected function newException($message)
- {
- return new Exception($message);
- }
-
- /**
- * Encode an object into a JSON string
- *
- * Uses PHP's jeson_encode() if available
- *
- * @param object $object The object to be encoded
- * @param boolean $skipObjectEncode
- * @return string The JSON string
- */
- public function jsonEncode($object, $skipObjectEncode = false)
- {
- if (!$skipObjectEncode) {
- $object = $this->encodeObject($object);
- }
-
- if (function_exists('json_encode')
- && $this->options['useNativeJsonEncode'] != false) {
-
- return json_encode($object);
- } else {
- return $this->json_encode($object);
- }
- }
-
- /**
- * Encodes a table by encoding each row and column with encodeObject()
- *
- * @param array $table The table to be encoded
- * @return array
- */
- protected function encodeTable($table)
- {
- if (!$table) return $table;
-
- $newTable = array();
- foreach ($table as $row) {
-
- if (is_array($row)) {
- $newRow = array();
-
- foreach ($row as $item) {
- $newRow[] = $this->encodeObject($item);
- }
-
- $newTable[] = $newRow;
- }
- }
-
- return $newTable;
- }
-
- /**
- * Encodes an object including members with
- * protected and private visibility
- *
- * @param object $object The object to be encoded
- * @param integer $Depth The current traversal depth
- * @return array All members of the object
- */
- protected function encodeObject($object, $objectDepth = 1, $arrayDepth = 1, $maxDepth = 1)
- {
- if ($maxDepth > $this->options['maxDepth']) {
- return '** Max Depth (' . $this->options['maxDepth'] . ') **';
- }
-
- $return = array();
-
- if (is_resource($object)) {
-
- return '** ' . (string) $object . ' **';
-
- } else if (is_object($object)) {
-
- if ($objectDepth > $this->options['maxObjectDepth']) {
- return '** Max Object Depth (' . $this->options['maxObjectDepth'] . ') **';
- }
-
- foreach ($this->objectStack as $refVal) {
- if ($refVal === $object) {
- return '** Recursion (' . get_class($object) . ') **';
- }
- }
- array_push($this->objectStack, $object);
-
- $return['__className'] = $class = get_class($object);
- $classLower = strtolower($class);
-
- $reflectionClass = new ReflectionClass($class);
- $properties = array();
- foreach ($reflectionClass->getProperties() as $property) {
- $properties[$property->getName()] = $property;
- }
-
- $members = (array)$object;
-
- foreach ($properties as $plainName => $property) {
-
- $name = $rawName = $plainName;
- if ($property->isStatic()) {
- $name = 'static:' . $name;
- }
- if ($property->isPublic()) {
- $name = 'public:' . $name;
- } else if ($property->isPrivate()) {
- $name = 'private:' . $name;
- $rawName = "\0" . $class . "\0" . $rawName;
- } else if ($property->isProtected()) {
- $name = 'protected:' . $name;
- $rawName = "\0" . '*' . "\0" . $rawName;
- }
-
- if (!(isset($this->objectFilters[$classLower])
- && is_array($this->objectFilters[$classLower])
- && in_array($plainName, $this->objectFilters[$classLower]))) {
-
- if (array_key_exists($rawName, $members) && !$property->isStatic()) {
- $return[$name] = $this->encodeObject($members[$rawName], $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- if (method_exists($property, 'setAccessible')) {
- $property->setAccessible(true);
- $return[$name] = $this->encodeObject($property->getValue($object), $objectDepth + 1, 1, $maxDepth + 1);
- } else
- if ($property->isPublic()) {
- $return[$name] = $this->encodeObject($property->getValue($object), $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- $return[$name] = '** Need PHP 5.3 to get value **';
- }
- }
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
-
- // Include all members that are not defined in the class
- // but exist in the object
- foreach ($members as $rawName => $value) {
-
- $name = $rawName;
-
- if ($name{0} == "\0") {
- $parts = explode("\0", $name);
- $name = $parts[2];
- }
-
- $plainName = $name;
-
- if (!isset($properties[$name])) {
- $name = 'undeclared:' . $name;
-
- if (!(isset($this->objectFilters[$classLower])
- && is_array($this->objectFilters[$classLower])
- && in_array($plainName, $this->objectFilters[$classLower]))) {
-
- $return[$name] = $this->encodeObject($value, $objectDepth + 1, 1, $maxDepth + 1);
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
- }
-
- array_pop($this->objectStack);
-
- } elseif (is_array($object)) {
-
- if ($arrayDepth > $this->options['maxArrayDepth']) {
- return '** Max Array Depth (' . $this->options['maxArrayDepth'] . ') **';
- }
-
- foreach ($object as $key => $val) {
-
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if ($key == 'GLOBALS'
- && is_array($val)
- && array_key_exists('GLOBALS', $val)) {
- $val['GLOBALS'] = '** Recursion (GLOBALS) **';
- }
-
- if (!$this->is_utf8($key)) {
- $key = utf8_encode($key);
- }
-
- $return[$key] = $this->encodeObject($val, 1, $arrayDepth + 1, $maxDepth + 1);
- }
- } else {
- if ($this->is_utf8($object)) {
- return $object;
- } else {
- return utf8_encode($object);
- }
- }
- return $return;
- }
-
- /**
- * Returns true if $string is valid UTF-8 and false otherwise.
- *
- * @param mixed $str String to be tested
- * @return boolean
- */
- protected function is_utf8($str)
- {
- if (function_exists('mb_detect_encoding')) {
- return (
- mb_detect_encoding($str, 'UTF-8', true) == 'UTF-8' &&
- ($str === null || $this->jsonEncode($str, true) !== 'null')
- );
- }
- $c = 0;
- $b = 0;
- $bits = 0;
- $len = strlen($str);
- for ($i = 0; $i < $len; $i++) {
- $c = ord($str[$i]);
- if ($c > 128) {
- if (($c >= 254)) return false;
- elseif ($c >= 252) $bits = 6;
- elseif ($c >= 248) $bits = 5;
- elseif ($c >= 240) $bits = 4;
- elseif ($c >= 224) $bits = 3;
- elseif ($c >= 192) $bits = 2;
- else return false;
- if (($i + $bits) > $len) return false;
- while($bits > 1) {
- $i++;
- $b = ord($str[$i]);
- if ($b < 128 || $b > 191) return false;
- $bits--;
- }
- }
- }
- return ($str === null || $this->jsonEncode($str, true) !== 'null');
- }
-
- /**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package Services_JSON
- * @author Michal Migurski
- * @author Matt Knapp
- * @author Brett Stimmerman
- * @author Christoph Dorn
- * @copyright 2005 Michal Migurski
- * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
- * @license http://www.opensource.org/licenses/bsd-license.php
- * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-
- /**
- * Keep a list of objects as we descend into the array so we can detect recursion.
- */
- private $json_objectStack = array();
-
-
- /**
- * convert a string from one UTF-8 char to one UTF-16 char
- *
- * Normally should be handled by mb_convert_encoding, but
- * provides a slower PHP-only method for installations
- * that lack the multibye string extension.
- *
- * @param string $utf8 UTF-8 character
- * @return string UTF-16 character
- * @access private
- */
- private function json_utf82utf16($utf8)
- {
- // oh please oh please oh please oh please oh please
- if (function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
- }
-
- switch (strlen($utf8)) {
- case 1:
- // this case should never be reached, because we are in ASCII range
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return $utf8;
-
- case 2:
- // return a UTF-16 character from a 2-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr(0x07 & (ord($utf8{0}) >> 2))
- . chr((0xC0 & (ord($utf8{0}) << 6))
- | (0x3F & ord($utf8{1})));
-
- case 3:
- // return a UTF-16 character from a 3-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr((0xF0 & (ord($utf8{0}) << 4))
- | (0x0F & (ord($utf8{1}) >> 2)))
- . chr((0xC0 & (ord($utf8{1}) << 6))
- | (0x7F & ord($utf8{2})));
- }
-
- // ignoring UTF-32 for now, sorry
- return '';
- }
-
- /**
- * encodes an arbitrary variable into JSON format
- *
- * @param mixed $var any number, boolean, string, array, or object to be encoded.
- * see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
- * to be in ASCII or UTF-8 format!
- *
- * @return mixed JSON string representation of input var or an error if a problem occurs
- * @access public
- */
- private function json_encode($var)
- {
- if (is_object($var)) {
- if (in_array($var, $this->json_objectStack)) {
- return '"** Recursion **"';
- }
- }
-
- switch (gettype($var)) {
- case 'boolean':
- return $var ? 'true' : 'false';
-
- case 'NULL':
- return 'null';
-
- case 'integer':
- return (int) $var;
-
- case 'double':
- case 'float':
- return (float) $var;
-
- case 'string':
- // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
- $ascii = '';
- $strlen_var = strlen($var);
-
- /*
- * Iterate over every character in the string,
- * escaping with a slash or encoding to UTF-8 where necessary
- */
- for ($c = 0; $c < $strlen_var; ++$c) {
-
- $ord_var_c = ord($var{$c});
-
- switch (true) {
- case $ord_var_c == 0x08:
- $ascii .= '\b';
- break;
- case $ord_var_c == 0x09:
- $ascii .= '\t';
- break;
- case $ord_var_c == 0x0A:
- $ascii .= '\n';
- break;
- case $ord_var_c == 0x0C:
- $ascii .= '\f';
- break;
- case $ord_var_c == 0x0D:
- $ascii .= '\r';
- break;
-
- case $ord_var_c == 0x22:
- case $ord_var_c == 0x2F:
- case $ord_var_c == 0x5C:
- // double quote, slash, slosh
- $ascii .= '\\' . $var{$c};
- break;
-
- case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
- // characters U-00000000 - U-0000007F (same as ASCII)
- $ascii .= $var{$c};
- break;
-
- case (($ord_var_c & 0xE0) == 0xC0):
- // characters U-00000080 - U-000007FF, mask 110XXXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
- $c += 1;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF0) == 0xE0):
- // characters U-00000800 - U-0000FFFF, mask 1110XXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}));
- $c += 2;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF8) == 0xF0):
- // characters U-00010000 - U-001FFFFF, mask 11110XXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}));
- $c += 3;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFC) == 0xF8):
- // characters U-00200000 - U-03FFFFFF, mask 111110XX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}));
- $c += 4;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFE) == 0xFC):
- // characters U-04000000 - U-7FFFFFFF, mask 1111110X
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}),
- ord($var{$c + 5}));
- $c += 5;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
- }
- }
-
- return '"' . $ascii . '"';
-
- case 'array':
- /*
- * As per JSON spec if any array key is not an integer
- * we must treat the the whole array as an object. We
- * also try to catch a sparsely populated associative
- * array with numeric keys here because some JS engines
- * will create an array with empty indexes up to
- * max_index which can cause memory issues and because
- * the keys, which may be relevant, will be remapped
- * otherwise.
- *
- * As per the ECMA and JSON specification an object may
- * have any string as a property. Unfortunately due to
- * a hole in the ECMA specification if the key is a
- * ECMA reserved word or starts with a digit the
- * parameter is only accessible using ECMAScript's
- * bracket notation.
- */
-
- // treat as a JSON object
- if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($var),
- array_values($var));
-
- array_pop($this->json_objectStack);
-
- foreach ($properties as $property) {
- if ($property instanceof Exception) {
- return $property;
- }
- }
-
- return '{' . join(',', $properties) . '}';
- }
-
- $this->json_objectStack[] = $var;
-
- // treat it like a regular array
- $elements = array_map(array($this, 'json_encode'), $var);
-
- array_pop($this->json_objectStack);
-
- foreach ($elements as $element) {
- if ($element instanceof Exception) {
- return $element;
- }
- }
-
- return '[' . join(',', $elements) . ']';
-
- case 'object':
- $vars = self::encodeObject($var);
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($vars),
- array_values($vars));
-
- array_pop($this->json_objectStack);
-
- foreach ($properties as $property) {
- if ($property instanceof Exception) {
- return $property;
- }
- }
-
- return '{' . join(',', $properties) . '}';
-
- default:
- return null;
- }
- }
-
- /**
- * array-walking function for use in generating JSON-formatted name-value pairs
- *
- * @param string $name name of key to use
- * @param mixed $value reference to an array element to be encoded
- *
- * @return string JSON-formatted name-value pair, like '"name":value'
- * @access private
- */
- private function json_name_value($name, $value)
- {
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if ($name == 'GLOBALS'
- && is_array($value)
- && array_key_exists('GLOBALS', $value)) {
- $value['GLOBALS'] = '** Recursion **';
- }
-
- $encodedValue = $this->json_encode($value);
-
- if ($encodedValue instanceof Exception) {
- return $encodedValue;
- }
-
- return $this->json_encode(strval($name)) . ':' . $encodedValue;
- }
-
- /**
- * @deprecated
- */
- public function setProcessorUrl($URL)
- {
- trigger_error('The FirePHP::setProcessorUrl() method is no longer supported', E_USER_DEPRECATED);
- }
-
- /**
- * @deprecated
- */
- public function setRendererUrl($URL)
- {
- trigger_error('The FirePHP::setRendererUrl() method is no longer supported', E_USER_DEPRECATED);
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4 b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4
deleted file mode 100644
index d702cea4a35..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/FirePHP.class.php4
+++ /dev/null
@@ -1,1327 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Michael Day , Copyright 2008, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * *** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * This verion of FirePHPCore is for use with PHP4. If you do not require PHP4
- * compatibility, it is suggested you use FirePHPCore.class.php instead.
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-/**
- * FirePHP version
- *
- * @var string
- */
-define('FirePHP_VERSION', '0.3'); // @pinf replace '0.3' with '%%VERSION%%'
-
-/**
- * Firebug LOG level
- *
- * Logs a message to firebug console
- *
- * @var string
- */
-define('FirePHP_LOG', 'LOG');
-
-/**
- * Firebug INFO level
- *
- * Logs a message to firebug console and displays an info icon before the message
- *
- * @var string
- */
-define('FirePHP_INFO', 'INFO');
-
-/**
- * Firebug WARN level
- *
- * Logs a message to firebug console, displays a warning icon before the message and colors the line turquoise
- *
- * @var string
- */
-define('FirePHP_WARN', 'WARN');
-
-/**
- * Firebug ERROR level
- *
- * Logs a message to firebug console, displays an error icon before the message and colors the line yellow. Also increments the firebug error count.
- *
- * @var string
- */
-define('FirePHP_ERROR', 'ERROR');
-
-/**
- * Dumps a variable to firebug's server panel
- *
- * @var string
- */
-define('FirePHP_DUMP', 'DUMP');
-
-/**
- * Displays a stack trace in firebug console
- *
- * @var string
- */
-define('FirePHP_TRACE', 'TRACE');
-
-/**
- * Displays a table in firebug console
- *
- * @var string
- */
-define('FirePHP_TABLE', 'TABLE');
-
-/**
- * Starts a group in firebug console
- *
- * @var string
- */
-define('FirePHP_GROUP_START', 'GROUP_START');
-
-/**
- * Ends a group in firebug console
- *
- * @var string
- */
-define('FirePHP_GROUP_END', 'GROUP_END');
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * For more information see: http://www.firephp.org/
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-class FirePHP {
- /**
- * Wildfire protocol message index
- *
- * @var int
- */
- var $messageIndex = 1;
-
- /**
- * Options for the library
- *
- * @var array
- */
- var $options = array('maxObjectDepth' => 5,
- 'maxArrayDepth' => 5,
- 'useNativeJsonEncode' => true,
- 'includeLineNumbers' => true);
-
- /**
- * Filters used to exclude object members when encoding
- *
- * @var array
- */
- var $objectFilters = array();
-
- /**
- * A stack of objects used to detect recursion during object encoding
- *
- * @var object
- */
- var $objectStack = array();
-
- /**
- * Flag to enable/disable logging
- *
- * @var boolean
- */
- var $enabled = true;
-
- /**
- * The object constructor
- */
- function FirePHP() {
- }
-
-
- /**
- * When the object gets serialized only include specific object members.
- *
- * @return array
- */
- function __sleep() {
- return array('options','objectFilters','enabled');
- }
-
- /**
- * Gets singleton instance of FirePHP
- *
- * @param boolean $AutoCreate
- * @return FirePHP
- */
- function &getInstance($AutoCreate=false) {
- global $FirePHP_Instance;
-
- if($AutoCreate===true && !$FirePHP_Instance) {
- $FirePHP_Instance = new FirePHP();
- }
-
- return $FirePHP_Instance;
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @param boolean $Enabled TRUE to enable, FALSE to disable
- * @return void
- */
- function setEnabled($Enabled) {
- $this->enabled = $Enabled;
- }
-
- /**
- * Check if logging is enabled
- *
- * @return boolean TRUE if enabled
- */
- function getEnabled() {
- return $this->enabled;
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @param string $Class The class name of the object
- * @param array $Filter An array of members to exclude
- * @return void
- */
- function setObjectFilter($Class, $Filter) {
- $this->objectFilters[strtolower($Class)] = $Filter;
- }
-
- /**
- * Set some options for the library
- *
- * Options:
- * - maxObjectDepth: The maximum depth to traverse objects (default: 5)
- * - maxArrayDepth: The maximum depth to traverse arrays (default: 5)
- * - useNativeJsonEncode: If true will use json_encode() (default: true)
- * - includeLineNumbers: If true will include line numbers and filenames (default: true)
- *
- * @param array $Options The options to be set
- * @return void
- */
- function setOptions($Options) {
- $this->options = array_merge($this->options,$Options);
- }
-
- /**
- * Get options from the library
- *
- * @return array The currently set options
- */
- function getOptions() {
- return $this->options;
- }
-
- /**
- * Register FirePHP as your error handler
- *
- * Will use FirePHP to log each php error.
- *
- * @return mixed Returns a string containing the previously defined error handler (if any)
- */
- function registerErrorHandler()
- {
- //NOTE: The following errors will not be caught by this error handler:
- // E_ERROR, E_PARSE, E_CORE_ERROR,
- // E_CORE_WARNING, E_COMPILE_ERROR,
- // E_COMPILE_WARNING, E_STRICT
-
- return set_error_handler(array($this,'errorHandler'));
- }
-
- /**
- * FirePHP's error handler
- *
- * Logs each php error that will occur.
- *
- * @param int $errno
- * @param string $errstr
- * @param string $errfile
- * @param int $errline
- * @param array $errcontext
- */
- function errorHandler($errno, $errstr, $errfile, $errline, $errcontext)
- {
- global $FirePHP_Instance;
- // Don't log error if error reporting is switched off
- if (error_reporting() == 0) {
- return;
- }
- // Only log error for errors we are asking for
- if (error_reporting() & $errno) {
- $FirePHP_Instance->group($errstr);
- $FirePHP_Instance->error("{$errfile}, line $errline");
- $FirePHP_Instance->groupEnd();
- }
- }
-
- /**
- * Register FirePHP driver as your assert callback
- *
- * @return mixed Returns the original setting
- */
- function registerAssertionHandler()
- {
- return assert_options(ASSERT_CALLBACK, array($this, 'assertionHandler'));
- }
-
- /**
- * FirePHP's assertion handler
- *
- * Logs all assertions to your firebug console and then stops the script.
- *
- * @param string $file File source of assertion
- * @param int $line Line source of assertion
- * @param mixed $code Assertion code
- */
- function assertionHandler($file, $line, $code)
- {
- $this->fb($code, 'Assertion Failed', FirePHP_ERROR, array('File'=>$file,'Line'=>$line));
- }
-
- /**
- * Set custom processor url for FirePHP
- *
- * @param string $URL
- */
- function setProcessorUrl($URL)
- {
- $this->setHeader('X-FirePHP-ProcessorURL', $URL);
- }
-
- /**
- * Set custom renderer url for FirePHP
- *
- * @param string $URL
- */
- function setRendererUrl($URL)
- {
- $this->setHeader('X-FirePHP-RendererURL', $URL);
- }
-
- /**
- * Start a group for following messages.
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $Name
- * @param array $Options OPTIONAL Instructions on how to log the group
- * @return true
- * @throws Exception
- */
- function group($Name, $Options=null) {
-
- if(!$Name) {
- trigger_error('You must specify a label for the group!');
- }
-
- if($Options) {
- if(!is_array($Options)) {
- trigger_error('Options must be defined as an array!');
- }
- if(array_key_exists('Collapsed', $Options)) {
- $Options['Collapsed'] = ($Options['Collapsed'])?'true':'false';
- }
- }
-
- return $this->fb(null, $Name, FirePHP_GROUP_START, $Options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- function groupEnd() {
- return $this->fb(null, null, FirePHP_GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function log($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function info($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function warn($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $Object
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function error($Object, $Label=null) {
- return $this->fb($Object, $Label, FirePHP_ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $Key
- * @param mixed $Variable
- * @return true
- * @throws Exception
- */
- function dump($Key, $Variable) {
- return $this->fb($Variable, $Key, FirePHP_DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $Label
- * @return true
- * @throws Exception
- */
- function trace($Label) {
- return $this->fb($Label, FirePHP_TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $Label
- * @param string $Table
- * @return true
- * @throws Exception
- */
- function table($Label, $Table) {
- return $this->fb($Table, $Label, FirePHP_TABLE);
- }
-
- /**
- * Check if FirePHP is installed on client
- *
- * @return boolean
- */
- function detectClientExtension() {
- // Check if FirePHP is installed on client via User-Agent header
- if(@preg_match_all('/\sFirePHP\/([\.\d]*)\s?/si',$this->getUserAgent(),$m) &&
- version_compare($m[1][0],'0.0.6','>=')) {
- return true;
- } else
- // Check if FirePHP is installed on client via X-FirePHP-Version header
- if(@preg_match_all('/^([\.\d]*)$/si',$this->getRequestHeader("X-FirePHP-Version"),$m) &&
- version_compare($m[1][0],'0.0.6','>=')) {
- return true;
- }
- return false;
- }
-
- /**
- * Log varible to Firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object The variable to be logged
- * @return true Return TRUE if message was added to headers, FALSE otherwise
- * @throws Exception
- */
- function fb($Object) {
-
- if(!$this->enabled) {
- return false;
- }
-
- if (headers_sent($filename, $linenum)) {
- trigger_error('Headers already sent in '.$filename.' on line '.$linenum.'. Cannot send log data to FirePHP. You must have Output Buffering enabled via ob_start() or output_buffering ini directive.');
- }
-
- $Type = null;
- $Label = null;
- $Options = array();
-
- if(func_num_args()==1) {
- } else
- if(func_num_args()==2) {
- switch(func_get_arg(1)) {
- case FirePHP_LOG:
- case FirePHP_INFO:
- case FirePHP_WARN:
- case FirePHP_ERROR:
- case FirePHP_DUMP:
- case FirePHP_TRACE:
- case FirePHP_TABLE:
- case FirePHP_GROUP_START:
- case FirePHP_GROUP_END:
- $Type = func_get_arg(1);
- break;
- default:
- $Label = func_get_arg(1);
- break;
- }
- } else
- if(func_num_args()==3) {
- $Type = func_get_arg(2);
- $Label = func_get_arg(1);
- } else
- if(func_num_args()==4) {
- $Type = func_get_arg(2);
- $Label = func_get_arg(1);
- $Options = func_get_arg(3);
- } else {
- trigger_error('Wrong number of arguments to fb() function!');
- }
-
-
- if(!$this->detectClientExtension()) {
- return false;
- }
-
- $meta = array();
- $skipFinalObjectEncode = false;
-
- if($Type==FirePHP_TRACE) {
-
- $trace = debug_backtrace();
- if(!$trace) return false;
- for( $i=0 ; $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if(isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class']=='FirePHP'
- && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if($trace[$i]['function']=='fb'
- || $trace[$i]['function']=='trace'
- || $trace[$i]['function']=='send') {
- $Object = array('Class'=>isset($trace[$i]['class'])?$trace[$i]['class']:'',
- 'Type'=>isset($trace[$i]['type'])?$trace[$i]['type']:'',
- 'Function'=>isset($trace[$i]['function'])?$trace[$i]['function']:'',
- 'Message'=>$trace[$i]['args'][0],
- 'File'=>isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'',
- 'Line'=>isset($trace[$i]['line'])?$trace[$i]['line']:'',
- 'Args'=>isset($trace[$i]['args'])?$this->encodeObject($trace[$i]['args']):'',
- 'Trace'=>$this->_escapeTrace(array_splice($trace,$i+1)));
-
- $skipFinalObjectEncode = true;
- $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
- $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
- break;
- }
- }
-
- } else
- if($Type==FirePHP_TABLE) {
-
- if(isset($Object[0]) && is_string($Object[0])) {
- $Object[1] = $this->encodeTable($Object[1]);
- } else {
- $Object = $this->encodeTable($Object);
- }
-
- $skipFinalObjectEncode = true;
-
- } else
- if($Type==FirePHP_GROUP_START) {
-
- if(!$Label) {
- trigger_error('You must specify a label for the group!');
- }
- } else {
- if($Type===null) {
- $Type = FirePHP_LOG;
- }
- }
-
- if($this->options['includeLineNumbers']) {
- if(!isset($meta['file']) || !isset($meta['line'])) {
-
- $trace = debug_backtrace();
- for( $i=0 ; $trace && $i_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php'
- || substr($this->_standardizePath($trace[$i]['file']),-29,29)=='FirePHPCore/FirePHP.class.php')) {
- /* Skip - FB::trace(), FB::send(), $firephp->trace(), $firephp->fb() */
- } else
- if(isset($trace[$i]['class'])
- && isset($trace[$i+1]['file'])
- && $trace[$i]['class']=='FirePHP'
- && substr($this->_standardizePath($trace[$i+1]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip fb() */
- } else
- if(isset($trace[$i]['file'])
- && substr($this->_standardizePath($trace[$i]['file']),-18,18)=='FirePHPCore/fb.php') {
- /* Skip FB::fb() */
- } else {
- $meta['file'] = isset($trace[$i]['file'])?$this->_escapeTraceFile($trace[$i]['file']):'';
- $meta['line'] = isset($trace[$i]['line'])?$trace[$i]['line']:'';
- break;
- }
- }
-
- }
- } else {
- unset($meta['file']);
- unset($meta['line']);
- }
-
- $this->setHeader('X-Wf-Protocol-1','http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
- $this->setHeader('X-Wf-1-Plugin-1','http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/'.FirePHP_VERSION);
-
- $structure_index = 1;
- if($Type==FirePHP_DUMP) {
- $structure_index = 2;
- $this->setHeader('X-Wf-1-Structure-2','http://meta.firephp.org/Wildfire/Structure/FirePHP/Dump/0.1');
- } else {
- $this->setHeader('X-Wf-1-Structure-1','http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
- }
-
- if($Type==FirePHP_DUMP) {
- $msg = '{"'.$Label.'":'.$this->jsonEncode($Object, $skipFinalObjectEncode).'}';
- } else {
- $msg_meta = $Options;
- $msg_meta['Type'] = $Type;
- if($Label!==null) {
- $msg_meta['Label'] = $Label;
- }
- if(isset($meta['file']) && !isset($msg_meta['File'])) {
- $msg_meta['File'] = $meta['file'];
- }
- if(isset($meta['line']) && !isset($msg_meta['Line'])) {
- $msg_meta['Line'] = $meta['line'];
- }
- $msg = '['.$this->jsonEncode($msg_meta).','.$this->jsonEncode($Object, $skipFinalObjectEncode).']';
- }
-
- $parts = explode("\n",chunk_split($msg, 5000, "\n"));
-
- for( $i=0 ; $i2) {
- // Message needs to be split into multiple parts
- $this->setHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
- (($i==0)?strlen($msg):'')
- . '|' . $part . '|'
- . (($isetHeader('X-Wf-1-'.$structure_index.'-'.'1-'.$this->messageIndex,
- strlen($part) . '|' . $part . '|');
- }
-
- $this->messageIndex++;
-
- if ($this->messageIndex > 99999) {
- trigger_error('Maximum number (99,999) of messages reached!');
- }
- }
- }
-
- $this->setHeader('X-Wf-1-Index',$this->messageIndex-1);
-
- return true;
- }
-
-
- /**
- * Standardizes path for windows systems.
- *
- * @param string $Path
- * @return string
- */
- function _standardizePath($Path) {
- return preg_replace('/\\\\+/','/',$Path);
- }
-
- /**
- * Escape trace path for windows systems
- *
- * @param array $Trace
- * @return array
- */
- function _escapeTrace($Trace) {
- if(!$Trace) return $Trace;
- for( $i=0 ; $i_escapeTraceFile($Trace[$i]['file']);
- }
- if(isset($Trace[$i]['args'])) {
- $Trace[$i]['args'] = $this->encodeObject($Trace[$i]['args']);
- }
- }
- return $Trace;
- }
-
- /**
- * Escape file information of trace for windows systems
- *
- * @param string $File
- * @return string
- */
- function _escapeTraceFile($File) {
- /* Check if we have a windows filepath */
- if(strpos($File,'\\')) {
- /* First strip down to single \ */
-
- $file = preg_replace('/\\\\+/','\\',$File);
-
- return $file;
- }
- return $File;
- }
-
- /**
- * Send header
- *
- * @param string $Name
- * @param string_type $Value
- */
- function setHeader($Name, $Value) {
- return header($Name.': '.$Value);
- }
-
- /**
- * Get user agent
- *
- * @return string|false
- */
- function getUserAgent() {
- if(!isset($_SERVER['HTTP_USER_AGENT'])) return false;
- return $_SERVER['HTTP_USER_AGENT'];
- }
-
- /**
- * Get all request headers
- *
- * @return array
- */
- function getAllRequestHeaders() {
- $headers = array();
- if(function_exists('getallheaders')) {
- foreach( getallheaders() as $name => $value ) {
- $headers[strtolower($name)] = $value;
- }
- } else {
- foreach($_SERVER as $name => $value) {
- if(substr($name, 0, 5) == 'HTTP_') {
- $headers[strtolower(str_replace(' ', '-', str_replace('_', ' ', substr($name, 5))))] = $value;
- }
- }
- }
- return $headers;
- }
-
- /**
- * Get a request header
- *
- * @return string|false
- */
- function getRequestHeader($Name)
- {
- $headers = $this->getAllRequestHeaders();
- if (isset($headers[strtolower($Name)])) {
- return $headers[strtolower($Name)];
- }
- return false;
- }
-
- /**
- * Encode an object into a JSON string
- *
- * Uses PHP's jeson_encode() if available
- *
- * @param object $Object The object to be encoded
- * @return string The JSON string
- */
- function jsonEncode($Object, $skipObjectEncode=false)
- {
- if(!$skipObjectEncode) {
- $Object = $this->encodeObject($Object);
- }
-
- if(function_exists('json_encode')
- && $this->options['useNativeJsonEncode']!=false) {
-
- return json_encode($Object);
- } else {
- return $this->json_encode($Object);
- }
- }
-
- /**
- * Encodes a table by encoding each row and column with encodeObject()
- *
- * @param array $Table The table to be encoded
- * @return array
- */
- function encodeTable($Table) {
-
- if(!$Table) return $Table;
-
- $new_table = array();
- foreach($Table as $row) {
-
- if(is_array($row)) {
- $new_row = array();
-
- foreach($row as $item) {
- $new_row[] = $this->encodeObject($item);
- }
-
- $new_table[] = $new_row;
- }
- }
-
- return $new_table;
- }
-
- /**
- * Encodes an object
- *
- * @param Object $Object The object to be encoded
- * @param int $Depth The current traversal depth
- * @return array All members of the object
- */
- function encodeObject($Object, $ObjectDepth = 1, $ArrayDepth = 1)
- {
- $return = array();
-
- if (is_resource($Object)) {
-
- return '** '.(string)$Object.' **';
-
- } else
- if (is_object($Object)) {
-
- if ($ObjectDepth > $this->options['maxObjectDepth']) {
- return '** Max Object Depth ('.$this->options['maxObjectDepth'].') **';
- }
-
- foreach ($this->objectStack as $refVal) {
- if ($refVal === $Object) {
- return '** Recursion ('.get_class($Object).') **';
- }
- }
- array_push($this->objectStack, $Object);
-
- $return['__className'] = $class = get_class($Object);
- $class_lower = strtolower($class);
-
- $members = (array)$Object;
-
- // Include all members that are not defined in the class
- // but exist in the object
- foreach( $members as $raw_name => $value ) {
-
- $name = $raw_name;
-
- if ($name{0} == "\0") {
- $parts = explode("\0", $name);
- $name = $parts[2];
- }
-
- if(!isset($properties[$name])) {
- $name = 'undeclared:'.$name;
-
- if(!(isset($this->objectFilters[$class_lower])
- && is_array($this->objectFilters[$class_lower])
- && in_array($raw_name,$this->objectFilters[$class_lower]))) {
-
- $return[$name] = $this->encodeObject($value, $ObjectDepth + 1, 1);
- } else {
- $return[$name] = '** Excluded by Filter **';
- }
- }
- }
-
- array_pop($this->objectStack);
-
- } elseif (is_array($Object)) {
-
- if ($ArrayDepth > $this->options['maxArrayDepth']) {
- return '** Max Array Depth ('.$this->options['maxArrayDepth'].') **';
- }
-
- foreach ($Object as $key => $val) {
-
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if($key=='GLOBALS'
- && is_array($val)
- && array_key_exists('GLOBALS',$val)) {
- $val['GLOBALS'] = '** Recursion (GLOBALS) **';
- }
-
- $return[$key] = $this->encodeObject($val, 1, $ArrayDepth + 1);
- }
- } else {
- if($this->is_utf8($Object)) {
- return $Object;
- } else {
- return utf8_encode($Object);
- }
- }
- return $return;
-
- }
-
- /**
- * Returns true if $string is valid UTF-8 and false otherwise.
- *
- * @param mixed $str String to be tested
- * @return boolean
- */
- function is_utf8($str) {
- $c=0; $b=0;
- $bits=0;
- $len=strlen($str);
- for($i=0; $i<$len; $i++){
- $c=ord($str[$i]);
- if($c > 128){
- if(($c >= 254)) return false;
- elseif($c >= 252) $bits=6;
- elseif($c >= 248) $bits=5;
- elseif($c >= 240) $bits=4;
- elseif($c >= 224) $bits=3;
- elseif($c >= 192) $bits=2;
- else return false;
- if(($i+$bits) > $len) return false;
- while($bits > 1){
- $i++;
- $b=ord($str[$i]);
- if($b < 128 || $b > 191) return false;
- $bits--;
- }
- }
- }
- return true;
- }
-
- /**
- * Converts to and from JSON format.
- *
- * JSON (JavaScript Object Notation) is a lightweight data-interchange
- * format. It is easy for humans to read and write. It is easy for machines
- * to parse and generate. It is based on a subset of the JavaScript
- * Programming Language, Standard ECMA-262 3rd Edition - December 1999.
- * This feature can also be found in Python. JSON is a text format that is
- * completely language independent but uses conventions that are familiar
- * to programmers of the C-family of languages, including C, C++, C#, Java,
- * JavaScript, Perl, TCL, and many others. These properties make JSON an
- * ideal data-interchange language.
- *
- * This package provides a simple encoder and decoder for JSON notation. It
- * is intended for use with client-side Javascript applications that make
- * use of HTTPRequest to perform server communication functions - data can
- * be encoded into JSON notation for use in a client-side javascript, or
- * decoded from incoming Javascript requests. JSON format is native to
- * Javascript, and can be directly eval()'ed with no further parsing
- * overhead
- *
- * All strings should be in ASCII or UTF-8 format!
- *
- * LICENSE: Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met: Redistributions of source code must retain the
- * above copyright notice, this list of conditions and the following
- * disclaimer. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
- * NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
- * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
- * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
- * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
- * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * @category
- * @package Services_JSON
- * @author Michal Migurski
- * @author Matt Knapp
- * @author Brett Stimmerman
- * @author Christoph Dorn
- * @copyright 2005 Michal Migurski
- * @version CVS: $Id: JSON.php,v 1.31 2006/06/28 05:54:17 migurski Exp $
- * @license http://www.opensource.org/licenses/bsd-license.php
- * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
- */
-
-
- /**
- * Keep a list of objects as we descend into the array so we can detect recursion.
- */
- var $json_objectStack = array();
-
-
- /**
- * convert a string from one UTF-8 char to one UTF-16 char
- *
- * Normally should be handled by mb_convert_encoding, but
- * provides a slower PHP-only method for installations
- * that lack the multibye string extension.
- *
- * @param string $utf8 UTF-8 character
- * @return string UTF-16 character
- * @access private
- */
- function json_utf82utf16($utf8)
- {
- // oh please oh please oh please oh please oh please
- if(function_exists('mb_convert_encoding')) {
- return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
- }
-
- switch(strlen($utf8)) {
- case 1:
- // this case should never be reached, because we are in ASCII range
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return $utf8;
-
- case 2:
- // return a UTF-16 character from a 2-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr(0x07 & (ord($utf8{0}) >> 2))
- . chr((0xC0 & (ord($utf8{0}) << 6))
- | (0x3F & ord($utf8{1})));
-
- case 3:
- // return a UTF-16 character from a 3-byte UTF-8 char
- // see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- return chr((0xF0 & (ord($utf8{0}) << 4))
- | (0x0F & (ord($utf8{1}) >> 2)))
- . chr((0xC0 & (ord($utf8{1}) << 6))
- | (0x7F & ord($utf8{2})));
- }
-
- // ignoring UTF-32 for now, sorry
- return '';
- }
-
- /**
- * encodes an arbitrary variable into JSON format
- *
- * @param mixed $var any number, boolean, string, array, or object to be encoded.
- * see argument 1 to Services_JSON() above for array-parsing behavior.
- * if var is a strng, note that encode() always expects it
- * to be in ASCII or UTF-8 format!
- *
- * @return mixed JSON string representation of input var or an error if a problem occurs
- * @access public
- */
- function json_encode($var)
- {
-
- if(is_object($var)) {
- if(in_array($var,$this->json_objectStack)) {
- return '"** Recursion **"';
- }
- }
-
- switch (gettype($var)) {
- case 'boolean':
- return $var ? 'true' : 'false';
-
- case 'NULL':
- return 'null';
-
- case 'integer':
- return (int) $var;
-
- case 'double':
- case 'float':
- return (float) $var;
-
- case 'string':
- // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
- $ascii = '';
- $strlen_var = strlen($var);
-
- /*
- * Iterate over every character in the string,
- * escaping with a slash or encoding to UTF-8 where necessary
- */
- for ($c = 0; $c < $strlen_var; ++$c) {
-
- $ord_var_c = ord($var{$c});
-
- switch (true) {
- case $ord_var_c == 0x08:
- $ascii .= '\b';
- break;
- case $ord_var_c == 0x09:
- $ascii .= '\t';
- break;
- case $ord_var_c == 0x0A:
- $ascii .= '\n';
- break;
- case $ord_var_c == 0x0C:
- $ascii .= '\f';
- break;
- case $ord_var_c == 0x0D:
- $ascii .= '\r';
- break;
-
- case $ord_var_c == 0x22:
- case $ord_var_c == 0x2F:
- case $ord_var_c == 0x5C:
- // double quote, slash, slosh
- $ascii .= '\\'.$var{$c};
- break;
-
- case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
- // characters U-00000000 - U-0000007F (same as ASCII)
- $ascii .= $var{$c};
- break;
-
- case (($ord_var_c & 0xE0) == 0xC0):
- // characters U-00000080 - U-000007FF, mask 110XXXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c, ord($var{$c + 1}));
- $c += 1;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF0) == 0xE0):
- // characters U-00000800 - U-0000FFFF, mask 1110XXXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}));
- $c += 2;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xF8) == 0xF0):
- // characters U-00010000 - U-001FFFFF, mask 11110XXX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}));
- $c += 3;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFC) == 0xF8):
- // characters U-00200000 - U-03FFFFFF, mask 111110XX
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}));
- $c += 4;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
-
- case (($ord_var_c & 0xFE) == 0xFC):
- // characters U-04000000 - U-7FFFFFFF, mask 1111110X
- // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
- $char = pack('C*', $ord_var_c,
- ord($var{$c + 1}),
- ord($var{$c + 2}),
- ord($var{$c + 3}),
- ord($var{$c + 4}),
- ord($var{$c + 5}));
- $c += 5;
- $utf16 = $this->json_utf82utf16($char);
- $ascii .= sprintf('\u%04s', bin2hex($utf16));
- break;
- }
- }
-
- return '"'.$ascii.'"';
-
- case 'array':
- /*
- * As per JSON spec if any array key is not an integer
- * we must treat the the whole array as an object. We
- * also try to catch a sparsely populated associative
- * array with numeric keys here because some JS engines
- * will create an array with empty indexes up to
- * max_index which can cause memory issues and because
- * the keys, which may be relevant, will be remapped
- * otherwise.
- *
- * As per the ECMA and JSON specification an object may
- * have any string as a property. Unfortunately due to
- * a hole in the ECMA specification if the key is a
- * ECMA reserved word or starts with a digit the
- * parameter is only accessible using ECMAScript's
- * bracket notation.
- */
-
- // treat as a JSON object
- if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($var),
- array_values($var));
-
- array_pop($this->json_objectStack);
-
- return '{' . join(',', $properties) . '}';
- }
-
- $this->json_objectStack[] = $var;
-
- // treat it like a regular array
- $elements = array_map(array($this, 'json_encode'), $var);
-
- array_pop($this->json_objectStack);
-
- return '[' . join(',', $elements) . ']';
-
- case 'object':
- $vars = FirePHP::encodeObject($var);
-
- $this->json_objectStack[] = $var;
-
- $properties = array_map(array($this, 'json_name_value'),
- array_keys($vars),
- array_values($vars));
-
- array_pop($this->json_objectStack);
-
- return '{' . join(',', $properties) . '}';
-
- default:
- return null;
- }
- }
-
- /**
- * array-walking function for use in generating JSON-formatted name-value pairs
- *
- * @param string $name name of key to use
- * @param mixed $value reference to an array element to be encoded
- *
- * @return string JSON-formatted name-value pair, like '"name":value'
- * @access private
- */
- function json_name_value($name, $value)
- {
- // Encoding the $GLOBALS PHP array causes an infinite loop
- // if the recursion is not reset here as it contains
- // a reference to itself. This is the only way I have come up
- // with to stop infinite recursion in this case.
- if($name=='GLOBALS'
- && is_array($value)
- && array_key_exists('GLOBALS',$value)) {
- $value['GLOBALS'] = '** Recursion **';
- }
-
- $encoded_value = $this->json_encode($value);
-
- return $this->json_encode(strval($name)) . ':' . $encoded_value;
- }
-}
-
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php
deleted file mode 100644
index 8827ba15d97..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php
+++ /dev/null
@@ -1,275 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Sokolov Innokenty , Copyright 2011, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/**
- * ***** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-if (!class_exists('FirePHP', false)) {
- require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'FirePHP.class.php';
-}
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- * @throws Exception
- */
-function fb()
-{
- $instance = FirePHP::getInstance(true);
-
- $args = func_get_args();
- return call_user_func_array(array($instance, 'fb'), $args);
-}
-
-
-class FB
-{
- /**
- * Set an Insight console to direct all logging calls to
- *
- * @param object $console The console object to log to
- * @return void
- */
- public static function setLogToInsightConsole($console)
- {
- FirePHP::getInstance(true)->setLogToInsightConsole($console);
- }
-
- /**
- * Enable and disable logging to Firebug
- *
- * @see FirePHP->setEnabled()
- * @param boolean $enabled TRUE to enable, FALSE to disable
- * @return void
- */
- public static function setEnabled($enabled)
- {
- FirePHP::getInstance(true)->setEnabled($enabled);
- }
-
- /**
- * Check if logging is enabled
- *
- * @see FirePHP->getEnabled()
- * @return boolean TRUE if enabled
- */
- public static function getEnabled()
- {
- return FirePHP::getInstance(true)->getEnabled();
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @see FirePHP->setObjectFilter()
- * @param string $class The class name of the object
- * @param array $filter An array or members to exclude
- * @return void
- */
- public static function setObjectFilter($class, $filter)
- {
- FirePHP::getInstance(true)->setObjectFilter($class, $filter);
- }
-
- /**
- * Set some options for the library
- *
- * @see FirePHP->setOptions()
- * @param array $options The options to be set
- * @return void
- */
- public static function setOptions($options)
- {
- FirePHP::getInstance(true)->setOptions($options);
- }
-
- /**
- * Get options for the library
- *
- * @see FirePHP->getOptions()
- * @return array The options
- */
- public static function getOptions()
- {
- return FirePHP::getInstance(true)->getOptions();
- }
-
- /**
- * Log object to firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $object
- * @return true
- * @throws Exception
- */
- public static function send()
- {
- $args = func_get_args();
- return call_user_func_array(array(FirePHP::getInstance(true), 'fb'), $args);
- }
-
- /**
- * Start a group for following messages
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $name
- * @param array $options OPTIONAL Instructions on how to log the group
- * @return true
- */
- public static function group($name, $options=null)
- {
- return FirePHP::getInstance(true)->group($name, $options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- * @throws Exception
- */
- public static function groupEnd()
- {
- return self::send(null, null, FirePHP::GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function log($object, $label=null)
- {
- return self::send($object, $label, FirePHP::LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function info($object, $label=null)
- {
- return self::send($object, $label, FirePHP::INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function warn($object, $label=null)
- {
- return self::send($object, $label, FirePHP::WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $object
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function error($object, $label=null)
- {
- return self::send($object, $label, FirePHP::ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $key
- * @param mixed $variable
- * @return true
- * @throws Exception
- */
- public static function dump($key, $variable)
- {
- return self::send($variable, $key, FirePHP::DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $label
- * @return true
- * @throws Exception
- */
- public static function trace($label)
- {
- return self::send($label, FirePHP::TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $label
- * @param string $table
- * @return true
- * @throws Exception
- */
- public static function table($label, $table)
- {
- return self::send($table, $label, FirePHP::TABLE);
- }
-
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4 b/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4
deleted file mode 100644
index eab2f0f681b..00000000000
--- a/htdocs/includes/firephp/firephp-core/lib/FirePHPCore/fb.php4
+++ /dev/null
@@ -1,245 +0,0 @@
-, Copyright 2007, New BSD License
-// - qbbr, Michael Day , Copyright 2008, New BSD License
-// - cadorn, Christoph Dorn , Copyright 2011, MIT License
-
-/* ***** BEGIN LICENSE BLOCK *****
- *
- * [MIT License](http://www.opensource.org/licenses/mit-license.php)
- *
- * Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to deal
- * in the Software without restriction, including without limitation the rights
- * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- * copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- * THE SOFTWARE.
- *
- * ***** END LICENSE BLOCK *****
- *
- * @copyright Copyright (C) 2007+ Christoph Dorn
- * @author Christoph Dorn
- * @author Michael Day
- * @license [MIT License](http://www.opensource.org/licenses/mit-license.php)
- * @package FirePHPCore
- */
-
-require_once dirname(__FILE__).'/FirePHP.class.php4';
-
-/**
- * Sends the given data to the FirePHP Firefox Extension.
- * The data can be displayed in the Firebug Console or in the
- * "Server" request tab.
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- * @throws Exception
- */
-function fb()
-{
- $instance =& FirePHP::getInstance(true);
-
- $args = func_get_args();
- return call_user_func_array(array(&$instance,'fb'),$args);
-}
-
-
-class FB
-{
- /**
- * Enable and disable logging to Firebug
- *
- * @see FirePHP->setEnabled()
- * @param boolean $Enabled TRUE to enable, FALSE to disable
- * @return void
- */
- function setEnabled($Enabled) {
- $instance =& FirePHP::getInstance(true);
- $instance->setEnabled($Enabled);
- }
-
- /**
- * Check if logging is enabled
- *
- * @see FirePHP->getEnabled()
- * @return boolean TRUE if enabled
- */
- function getEnabled() {
- $instance =& FirePHP::getInstance(true);
- return $instance->getEnabled();
- }
-
- /**
- * Specify a filter to be used when encoding an object
- *
- * Filters are used to exclude object members.
- *
- * @see FirePHP->setObjectFilter()
- * @param string $Class The class name of the object
- * @param array $Filter An array or members to exclude
- * @return void
- */
- function setObjectFilter($Class, $Filter) {
- $instance =& FirePHP::getInstance(true);
- $instance->setObjectFilter($Class, $Filter);
- }
-
- /**
- * Set some options for the library
- *
- * @see FirePHP->setOptions()
- * @param array $Options The options to be set
- * @return void
- */
- function setOptions($Options) {
- $instance =& FirePHP::getInstance(true);
- $instance->setOptions($Options);
- }
-
- /**
- * Get options for the library
- *
- * @see FirePHP->getOptions()
- * @return array The options
- */
- function getOptions() {
- $instance =& FirePHP::getInstance(true);
- return $instance->getOptions();
- }
-
- /**
- * Log object to firebug
- *
- * @see http://www.firephp.org/Wiki/Reference/Fb
- * @param mixed $Object
- * @return true
- */
- function send()
- {
- $instance =& FirePHP::getInstance(true);
- $args = func_get_args();
- return call_user_func_array(array(&$instance,'fb'),$args);
- }
-
- /**
- * Start a group for following messages
- *
- * Options:
- * Collapsed: [true|false]
- * Color: [#RRGGBB|ColorName]
- *
- * @param string $Name
- * @param array $Options OPTIONAL Instructions on how to log the group
- * @return true
- */
- function group($Name, $Options=null) {
- $instance =& FirePHP::getInstance(true);
- return $instance->group($Name, $Options);
- }
-
- /**
- * Ends a group you have started before
- *
- * @return true
- */
- function groupEnd() {
- return FB::send(null, null, FirePHP_GROUP_END);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::LOG
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function log($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_LOG);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::INFO
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function info($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_INFO);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::WARN
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function warn($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_WARN);
- }
-
- /**
- * Log object with label to firebug console
- *
- * @see FirePHP::ERROR
- * @param mixes $Object
- * @param string $Label
- * @return true
- */
- function error($Object, $Label=null) {
- return FB::send($Object, $Label, FirePHP_ERROR);
- }
-
- /**
- * Dumps key and variable to firebug server panel
- *
- * @see FirePHP::DUMP
- * @param string $Key
- * @param mixed $Variable
- * @return true
- */
- function dump($Key, $Variable) {
- return FB::send($Variable, $Key, FirePHP_DUMP);
- }
-
- /**
- * Log a trace in the firebug console
- *
- * @see FirePHP::TRACE
- * @param string $Label
- * @return true
- */
- function trace($Label) {
- return FB::send($Label, FirePHP_TRACE);
- }
-
- /**
- * Log a table in the firebug console
- *
- * @see FirePHP::TABLE
- * @param string $Label
- * @param string $Table
- * @return true
- */
- function table($Label, $Table) {
- return FB::send($Table, $Label, FirePHP_TABLE);
- }
-}
diff --git a/htdocs/includes/firephp/firephp-core/package.json b/htdocs/includes/firephp/firephp-core/package.json
deleted file mode 100644
index 291a920223a..00000000000
--- a/htdocs/includes/firephp/firephp-core/package.json
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "uid": "https://github.com/firephp/firephp-core/",
- "name": "firephp-core",
- "version": "0.4.0",
- "label": "FirePHP Server Library",
- "repositories": [
- {
- "type": "git",
- "url": "git://github.com/firephp/firephp-core.git"
- }
- ],
- "maintainers": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "web": "http://www.christophdorn.com/",
- "alias": {
- "github": "cadorn"
- }
- }
- ],
- "contributors": [
- {
- "name": "Christoph Dorn",
- "email": "christoph@christophdorn.com",
- "web": "http://www.christophdorn.com/",
- "alias": {
- "github": "cadorn"
- }
- },
- {
- "name": "Michael Day",
- "email": "manveru.alma@gmail.com"
- },
- {
- "name": "Sokolov Innokenty",
- "email": "sokolov.innokenty@gmail.com",
- "alias": {
- "github": "qbbr"
- }
- }
- ]
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/program.json b/htdocs/includes/firephp/firephp-core/program.json
deleted file mode 100644
index 9889e97a36f..00000000000
--- a/htdocs/includes/firephp/firephp-core/program.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
- "extends": {
- "location": "./workspace/program.json"
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/tests/API/newlines.php b/htdocs/includes/firephp/firephp-core/tests/API/newlines.php
deleted file mode 100644
index 1e5511e544d..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/API/newlines.php
+++ /dev/null
@@ -1,12 +0,0 @@
-dump("key", "value");
- $headers = $firephp->_getHeaders();
- $this->assertEquals('15|{"key":"value"}|', $headers['X-Wf-1-2-1-1']);
- $firephp->_clearHeaders();
-
- $caught = false;
- try {
- $firephp->dump(array(), "value");
- } catch(Exception $e) {
- // Key passed to dump() is not a string
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->dump("key \n\r value", "value");
- } catch(Exception $e) {
- // Key passed to dump() contains invalid characters [a-zA-Z0-9-_\.:]
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->dump("keykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeykkeykeykeyk1", "value");
- } catch(Exception $e) {
- // Key passed to dump() is longer than 100 characters
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=123
- */
- public function testRegisterErrorHandler()
- {
- $firephp = new FirePHP_Test_Class();
- $firephp->setOption("maxObjectDepth", 1);
- $firephp->setOption("maxArrayDepth", 1);
-
- $firephp->registerErrorHandler();
- trigger_error("Hello World");
- $headers = $firephp->_getHeaders();
- if(!isset($headers["X-Wf-1-1-1-1"])) {
- $this->fail("Error not in headers");
- }
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=122
- */
- public function testFirePHPClassInstanceLogging()
- {
- $firephp = new FirePHP_Test_Class();
-
- $firephp->log($firephp);
- $headers = $firephp->_getHeaders();
- if(!preg_match_all('/"protected:objectStack":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("objectStack member contains value");
- }
- if(!preg_match_all('/"protected:static:instance":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("instance member should not be logged");
- }
- if(!preg_match_all('/"undeclared:json_objectStack":"\\*\\* Excluded by Filter \\*\\*"/', $headers['X-Wf-1-1-1-1'], $m)) {
- $this->fail("json_objectStack member should not be logged");
- }
- }
-
- /**
- * @issue http://code.google.com/p/firephp/issues/detail?id=114
- */
- public function testCustomFileLineOptions()
- {
- $firephp = new FirePHP_Test_Class();
-
- $firephp->log("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->info("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->warn("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->error("message", "label", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->dump("key", "value", array("File"=>"/file/path", "Line"=>"1"));
- $firephp->table("label", array(array("header"),array("cell")), array("File"=>"/file/path", "Line"=>"1"));
-
- $headers = $firephp->_getHeaders();
-
- $this->assertEquals('75|[{"File":"\/file\/path","Line":"1","Type":"LOG","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-1']);
- $this->assertEquals('76|[{"File":"\/file\/path","Line":"1","Type":"INFO","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-2']);
- $this->assertEquals('76|[{"File":"\/file\/path","Line":"1","Type":"WARN","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-3']);
- $this->assertEquals('77|[{"File":"\/file\/path","Line":"1","Type":"ERROR","Label":"label"},"message"]|', $headers['X-Wf-1-1-1-4']);
- $this->assertEquals('15|{"key":"value"}|', $headers['X-Wf-1-2-1-5']);
- $this->assertEquals('89|[{"File":"\/file\/path","Line":"1","Type":"TABLE","Label":"label"},[["header"],["cell"]]]|', $headers['X-Wf-1-1-1-6']);
- }
-
- public function testRecursiveEncode()
- {
- $firephp = new FirePHP_Test_Class();
-
- $obj = new FirePHPCore_FirePHPTest__TestObject();
- $obj->child = $obj;
-
- $firephp->log($obj, "label", array("File"=>"/file/path", "Line"=>"1"));
- $headers = $firephp->_getHeaders();
- $this->assertEquals('215|[{"File":"\/file\/path","Line":"1","Type":"LOG","Label":"label"},{"__className":"FirePHPCore_FirePHPTest__TestObject","public:var":"value","undeclared:child":"** Recursion (FirePHPCore_FirePHPTest__TestObject) **"}]|', $headers['X-Wf-1-1-1-1']);
- }
-
- public function testOptions()
- {
- $firephp = new FirePHP_Test_Class();
-
- // defaults
- $this->assertEquals(5, $firephp->getOption("maxObjectDepth"));
- $this->assertEquals(5, $firephp->getOption("maxArrayDepth"));
- $this->assertEquals(true, $firephp->getOption("useNativeJsonEncode"));
- $this->assertEquals(true, $firephp->getOption("includeLineNumbers"));
-
- // modify
- $firephp->setOption("maxObjectDepth", 1);
- $this->assertEquals(1, $firephp->getOption("maxObjectDepth"));
-
- // invalid
- $caught = false;
- try {
- $firephp->setOption("invalidName", 1);
- } catch(Exception $e) {
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
-
- $caught = false;
- try {
- $firephp->getOption("invalidName");
- } catch(Exception $e) {
- $caught = true;
- }
- if(!$caught) $this->fail('No exception thrown');
- }
-
- public function testDeprecatedMethods()
- {
- $firephp = new FirePHP_Test_Class();
-
- $caught = false;
- try {
- $firephp->setProcessorUrl('URL');
- } catch(Exception $e) {
- $caught = true;
- $this->assertEquals(E_USER_DEPRECATED, $e->getCode());
- $this->assertEquals('The FirePHP::setProcessorUrl() method is no longer supported', $e->getMessage());
- }
- if(!$caught) $this->fail('No deprecation error thrown');
-
- $caught = false;
- try {
- $firephp->setRendererUrl('URL');
- } catch(Exception $e) {
- $caught = true;
- $this->assertEquals(E_USER_DEPRECATED, $e->getCode());
- $this->assertEquals('The FirePHP::setRendererUrl() method is no longer supported', $e->getMessage());
- }
- if(!$caught) $this->fail('No deprecation error thrown');
- }
-
-}
-
-
-class FirePHPCore_FirePHPTest__TestObject
-{
- public $var = "value";
-}
diff --git a/htdocs/includes/firephp/firephp-core/tests/TestHelper.php b/htdocs/includes/firephp/firephp-core/tests/TestHelper.php
deleted file mode 100644
index bb65e73202d..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/TestHelper.php
+++ /dev/null
@@ -1,55 +0,0 @@
-_headers;
- }
- public function _clearHeaders() {
- $this->_headers = array();
- }
-
-
- // ######################
- // # Subclassed Methods #
- // ######################
-
- protected function setHeader($Name, $Value) {
- $this->_headers[$Name] = $Value;
- }
-
- protected function headersSent(&$Filename, &$Linenum) {
- return false;
- }
-
- public function detectClientExtension() {
- return true;
- }
-
-}
diff --git a/htdocs/includes/firephp/firephp-core/tests/phpunit.xml b/htdocs/includes/firephp/firephp-core/tests/phpunit.xml
deleted file mode 100644
index b0474e9d627..00000000000
--- a/htdocs/includes/firephp/firephp-core/tests/phpunit.xml
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/README.md b/htdocs/includes/firephp/firephp-core/workspace/README.md
deleted file mode 100644
index 999f09a9418..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/README.md
+++ /dev/null
@@ -1,19 +0,0 @@
-
-The [PINF JavaScript Loader](https://github.com/pinf/loader-js) is used to provide a development environment and package releases for this project.
-
-**NOTE:** It is assumed you have the _PINF JavaScript Loader_ mapped to the `commonjs` command and are using the `node` platform by default as explained [here](https://github.com/pinf/loader-js/blob/master/docs/Setup.md).
-
-
-Publishing
-==========
-
- git tag v...
-
- commonjs -v --script build .
-
- commonjs -v --script publish .
-
-
-TODO: Auto-upload to PEAR channel server at http://pear.firephp.org/
-
-NOTE: For PEAR RC releases: Change release stability to "beta" and capitalize "RC" in release version in package.xml
diff --git a/htdocs/includes/firephp/firephp-core/workspace/lib/project.js b/htdocs/includes/firephp/firephp-core/workspace/lib/project.js
deleted file mode 100644
index 913c6d7c60f..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/lib/project.js
+++ /dev/null
@@ -1,5 +0,0 @@
-
-exports.main = function(options)
-{
-
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/package.json b/htdocs/includes/firephp/firephp-core/workspace/package.json
deleted file mode 100644
index 19e8385ee6f..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/package.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "name": "firephp-core",
- "engine": [
- "node"
- ],
- "main": "lib/project.js",
- "scripts": {
- "build": {
- "location": "./",
- "module": "/scripts/build.js"
- },
- "publish": {
- "location": "./",
- "module": "/scripts/publish.js"
- }
- },
- "mappings": {
- "nodejs": {
- "id": "nodejs.org/"
- },
- "pinf": {
- "id": "pinf.org/loader/"
- },
- "modules": {
- "id": "github.com/pinf/modules-js/"
- }
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/program.json b/htdocs/includes/firephp/firephp-core/workspace/program.json
deleted file mode 100644
index 9628b525c6c..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/program.json
+++ /dev/null
@@ -1,78 +0,0 @@
-{
- "boot": "workspace",
- "engine": [
- "node"
- ],
- "packages": {
- "workspace": {
- "locator": {
- "location": "./"
- }
- },
- "nodejs.org/": {
- "provider": "nodejs.org/"
- },
- "pinf.org/loader/": {
- "provider": "pinf.org/loader/"
- },
- "github.com/pinf/modules-js/": {
- "locator": {
- "archive": "https://github.com/pinf/modules-js/zipball/master"
- }
- },
- "github.com/kriskowal/q/": {
- "locator": {
- "archive": "https://github.com/kriskowal/q/zipball/v0.3.0"
- },
- "descriptor": {
- "uid": "https://github.com/kriskowal/q/",
- "dependencies": [
- {
- "id": "github.com/pinf/modules-js/"
- }
- ]
- }
- },
- "private-registry.appspot.com/cadorn.com/github/com.cadorn.baby/projects/sourcemint/packages/client-js/": {
- "locator": {
- "archive": "https://github.com/cadorn/com.cadorn.baby/zipball/master",
- "path": "projects/sourcemint/packages/client-js"
- }
- },
- "github.com/cadorn/aws-lib/": {
- "locator": {
- "archive": "https://github.com/cadorn/aws-lib/zipball/master"
- },
- "descriptor": {
- "uid": "https://github.com/cadorn/aws-lib/",
- "native": true,
- "dependencies": [
- {
- "id": "registry.npmjs.org/sax/"
- },
- {
- "id": "registry.npmjs.org/xml2js/"
- }
- ]
- }
- },
- "registry.npmjs.org/sax/": {
- "locator": {
- "archive": "http://registry.npmjs.org/sax/-/sax-0.1.2.tgz"
- },
- "descriptor": {
- "uid": "http://registry.npmjs.org/sax/",
- "native": true
- }
- },
- "registry.npmjs.org/xml2js/": {
- "locator": {
- "archive": "http://registry.npmjs.org/xml2js/-/xml2js-0.1.6.tgz"
- },
- "descriptor": {
- "uid": "http://registry.npmjs.org/xml2js/",
- "native": true
- }
- }
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js b/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js
deleted file mode 100644
index 2481d99d381..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/scripts/build.js
+++ /dev/null
@@ -1,164 +0,0 @@
-
-var FILE = require("modules/file"),
- Q = require("modules/q"),
- SYSTEM = require("modules/system"),
- UTIL = require("modules/util"),
- JSON = require("modules/json");
-
-
-var pkgPath = FILE.dirname(FILE.dirname(FILE.dirname(module.id))),
- buildPath = pkgPath + "/build",
- tplPath = pkgPath + "/workspace/tpl",
- version = false;
-
-exports.getBuildPath = function()
-{
- return buildPath;
-}
-
-exports.main = function()
-{
-
- SYSTEM.exec("rm -Rf " + buildPath, function()
- {
- FILE.mkdirs(buildPath, 0775);
-
- SYSTEM.exec("git tag", function(stdout)
- {
- version = UTIL.trim(stdout).split("\n").pop().match(/^v(.*)$/)[1];
-
- // TODO: Compare against version in `../../program.json ~ version` (ensure =)
-
- module.print("\0cyan(Building version: " + version + "\0)\n");
-
- buildZipArchive(function()
- {
- buildPEARArchive(function()
- {
- done();
- });
- });
- });
- });
-
- function done()
- {
- module.print("\0green(Done\0)\n");
- }
-}
-
-function buildZipArchive(callback)
-{
- var targetBasePath = buildPath + "/FirePHPCore-" + version;
-
- FILE.mkdirs(targetBasePath, 0775);
-
- SYSTEM.exec("rsync -r --copy-links --exclude \"- .DS_Store\" --exclude \"- .git/\" --exclude \"- .tmp_*\" " + pkgPath + "/lib " + targetBasePath, function()
- {
- replaceVariablesInFile(targetBasePath + "/lib/FirePHPCore/FirePHP.class.php");
- replaceVariablesInFile(targetBasePath + "/lib/FirePHPCore/FirePHP.class.php4");
-
- SYSTEM.exec("cp -Rf " + pkgPath + "/examples " + targetBasePath, function()
- {
- next1();
- });
- });
-
- function next1()
- {
- var content = FILE.read(tplPath + "/readme.tpl.md");
- content = content.replace(/%%VERSION%%/g, version);
- FILE.write(targetBasePath + "/README.md", content);
-
- var content = FILE.read(tplPath + "/license.tpl.md");
- FILE.write(targetBasePath + "/LICENSE.md", content);
-
- FILE.write(buildPath + "/info.json", JSON.encode({
- version: version
- }));
-
- next2();
- }
-
- function next2()
- {
- SYSTEM.exec("cd " + buildPath + " ; zip -vr FirePHPCore-" + version + ".zip FirePHPCore-" + version, function(stdout)
- {
- console.log(stdout);
-
- callback();
- });
- }
-}
-
-function buildPEARArchive(callback)
-{
- var targetBasePath = buildPath + "/pear";
-
- FILE.mkdirs(targetBasePath, 0775);
-
- SYSTEM.exec("rsync -r --copy-links --exclude \"- .DS_Store\" --exclude \"- .git/\" --exclude \"- .tmp_*\" " + pkgPath + "/lib/FirePHPCore/* " + targetBasePath, function()
- {
- replaceVariablesInFile(targetBasePath + "/FirePHP.class.php");
- replaceVariablesInFile(targetBasePath + "/FirePHP.class.php4");
-
- next1();
- });
-
- function next1()
- {
- var content = FILE.read(tplPath + "/pear.package.tpl.xml");
-
- var date = new Date();
- content = content.replace(/%%DATE%%/g, date.getFullYear() + "-" + UTIL.padBegin(date.getMonth()+1, 2, "0") + "-" + date.getDate());
- content = content.replace(/%%VERSION%%/g, version);
- content = content.replace(/%%STABILITY%%/g, "stable");
-
- FILE.write(targetBasePath + "/package.xml", content);
-
- next2();
- }
-
- function next2()
- {
- SYSTEM.exec("pear channel-discover pear.firephp.org", function(stdout)
- {
- console.log(stdout);
-
- SYSTEM.exec("cd " + targetBasePath + "; pear package package.xml", function(stdout)
- {
- console.log(stdout);
-
- callback();
- });
- });
- }
-}
-
-function replaceVariablesInFile(path)
-{
- var content = FILE.read(path);
-
- // @pinf replace '0.3' with '%%VERSION%%'
- var re1 = /\n(.*)\/\/\s*@pinf\s(.*)\n/g;
- var match1;
- while (match1 = re1.exec(content)) {
- var rule = match1[2].match(/^replace (.*?) with (.*)$/);
- if(rule) {
- // replace variables in rule
- var re2 = /%%([^%]*)%%/g;
- var match2;
- while (match2 = re2.exec(rule[2])) {
- var value;
- if(match2[1]=="VERSION") {
- value = version;
- }
- rule[2] = rule[2].replace(match2[0], value);
- }
- match1[1] = match1[1].replace(rule[1], rule[2]);
- content = content.replace(match1[0], "\n"+match1[1]+"\n");
- }
- }
-
- FILE.write(path, content);
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js b/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js
deleted file mode 100644
index 39106e1b3b3..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/scripts/publish.js
+++ /dev/null
@@ -1,65 +0,0 @@
-
-var PINF_LOADER = require("pinf/loader"),
- SANDBOX = PINF_LOADER.getSandbox(),
- FILE = require("modules/file"),
- Q = require("modules/q"),
- SYSTEM = require("modules/system"),
- BUILD = require("./build"),
- JSON = require("modules/json"),
- SOURCEMINT_CLIENT = false;
-
-exports.main = function()
-{
- module.load({
- id: "private-registry.appspot.com/cadorn.com/github/com.cadorn.baby/projects/sourcemint/packages/client-js/",
- descriptor: {
- main: "lib/client.js"
- }
- }, function(id)
- {
- SOURCEMINT_CLIENT = require(id);
-
- publish();
- });
-}
-
-function publish()
-{
- var buildPath = BUILD.getBuildPath(),
- info = JSON.decode(FILE.read(buildPath + "/info.json")),
- descriptor = JSON.decode(FILE.read(FILE.dirname(FILE.dirname(FILE.dirname(module.id))) + "/package.json"));
-
- var bundles = {};
- bundles["firephp-core.zip"] = {
- "type": "zip",
- "options": {
- "archivePath": buildPath + "/FirePHPCore-" + info.version + ".zip",
- }
- };
-
- var packages = [
- {
- "uid": descriptor.uid,
- "stream": "stable",
- "version": info.version,
- "bundles": bundles
- }
- ];
-
- try
- {
- Q.when(SOURCEMINT_CLIENT.publish(packages), function(info)
- {
- module.print("\0green(Published:\n");
- console.log(info);
- module.print("\0)");
- }, function(e)
- {
- throw e;
- });
- }
- catch(e)
- {
- console.error("Error: " + e);
- }
-}
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md b/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md
deleted file mode 100644
index 1b0aaf26962..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/license.tpl.md
+++ /dev/null
@@ -1,21 +0,0 @@
-[MIT License](http://www.opensource.org/licenses/mit-license.php)
-
-Copyright (c) 2007+ [Christoph Dorn](http://www.christophdorn.com/)
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
\ No newline at end of file
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml b/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml
deleted file mode 100644
index b9f3d65a43d..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/pear.package.tpl.xml
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
- FirePHPCore
- pear.firephp.org
- Log variables from PHP to the browser (Firebug Console)
- Handles all communication between the PHP code on the server and the client. Also implements all core FirePHP features.
-
-
- Christoph Dorn
- cadorn
- christoph@christophdorn.com
- yes
-
-
- %%DATE%%
-
- %%VERSION%%
- 0.3
-
-
-
- %%STABILITY%%
- stable
-
-
- MIT
-
- No Notes
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 4.0
-
-
- 1.4.5
-
-
-
-
-
-
-
diff --git a/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md b/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md
deleted file mode 100644
index 01264662e85..00000000000
--- a/htdocs/includes/firephp/firephp-core/workspace/tpl/readme.tpl.md
+++ /dev/null
@@ -1,17 +0,0 @@
-FirePHPCore Server Library
-==========================
-
-Status: stable
-
-Version: [%%VERSION%%](https://github.com/firephp/firephp-core/tree/v%%VERSION%%)
-
-This archive contains the *FirePHPCore* PHP server library.
-
-Links
------
-
- * Documentation: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/
- * Install: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/Configuration/Traditional
- * Support: http://docs.sourcemint.org/firephp.org/firephp/1/-docs/OpenSource#support
- * Author: [Christoph Dorn](http://www.christophdorn.com/)
- * License: [MIT License](http://www.opensource.org/licenses/mit-license.php)
diff --git a/htdocs/includes/fpdfi/README.txt b/htdocs/includes/fpdfi/README.txt
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js b/htdocs/includes/jquery/plugins/colorpicker/jquery.colorpicker.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jcrop/css/Jcrop.gif b/htdocs/includes/jquery/plugins/jcrop/css/Jcrop.gif
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jcrop/css/jquery.Jcrop.css b/htdocs/includes/jquery/plugins/jcrop/css/jquery.Jcrop.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jcrop/index.html b/htdocs/includes/jquery/plugins/jcrop/index.html
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jcrop/js/jquery.Jcrop.js b/htdocs/includes/jquery/plugins/jcrop/js/jquery.Jcrop.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jcrop/js/jquery.Jcrop.min.js b/htdocs/includes/jquery/plugins/jcrop/js/jquery.Jcrop.min.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jnotify/jquery.jnotify-alt.min.css b/htdocs/includes/jquery/plugins/jnotify/jquery.jnotify-alt.min.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jnotify/jquery.jnotify.css b/htdocs/includes/jquery/plugins/jnotify/jquery.jnotify.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/ChangeLog.txt b/htdocs/includes/jquery/plugins/jpicker/ChangeLog.txt
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/Example.html b/htdocs/includes/jquery/plugins/jpicker/Example.html
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/ReadMe.txt b/htdocs/includes/jquery/plugins/jpicker/ReadMe.txt
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/css/jPicker-1.1.6.css b/htdocs/includes/jquery/plugins/jpicker/css/jPicker-1.1.6.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/css/jPicker-1.1.6.min.css b/htdocs/includes/jquery/plugins/jpicker/css/jPicker-1.1.6.min.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/AlphaBar.png b/htdocs/includes/jquery/plugins/jpicker/images/AlphaBar.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/Bars.png b/htdocs/includes/jquery/plugins/jpicker/images/Bars.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/Maps.png b/htdocs/includes/jquery/plugins/jpicker/images/Maps.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/NoColor.png b/htdocs/includes/jquery/plugins/jpicker/images/NoColor.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/bar-opacity.png b/htdocs/includes/jquery/plugins/jpicker/images/bar-opacity.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/map-opacity.png b/htdocs/includes/jquery/plugins/jpicker/images/map-opacity.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/mappoint.gif b/htdocs/includes/jquery/plugins/jpicker/images/mappoint.gif
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/picker.gif b/htdocs/includes/jquery/plugins/jpicker/images/picker.gif
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/preview-opacity.png b/htdocs/includes/jquery/plugins/jpicker/images/preview-opacity.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/images/rangearrows.gif b/htdocs/includes/jquery/plugins/jpicker/images/rangearrows.gif
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/jPicker.css b/htdocs/includes/jquery/plugins/jpicker/jPicker.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/jpicker-1.1.6.js b/htdocs/includes/jquery/plugins/jpicker/jpicker-1.1.6.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jpicker/jpicker-1.1.6.min.js b/htdocs/includes/jquery/plugins/jpicker/jpicker-1.1.6.min.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/application.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/application.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/code.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/code.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/css.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/css.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/db.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/db.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/directory.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/directory.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/doc.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/doc.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/file.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/file.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/film.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/film.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/flash.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/flash.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/folder_open.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/folder_open.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/html.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/html.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/java.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/java.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/linux.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/linux.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/music.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/music.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/pdf.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/pdf.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/php.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/php.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/picture.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/picture.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/ppt.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/ppt.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/psd.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/psd.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/ruby.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/ruby.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/script.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/script.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/spinner.gif b/htdocs/includes/jquery/plugins/jqueryFileTree/images/spinner.gif
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/txt.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/txt.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/xls.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/xls.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/images/zip.png b/htdocs/includes/jquery/plugins/jqueryFileTree/images/zip.png
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/jqueryFileTree.css b/htdocs/includes/jquery/plugins/jqueryFileTree/jqueryFileTree.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/jqueryFileTree/jqueryFileTree.js b/htdocs/includes/jquery/plugins/jqueryFileTree/jqueryFileTree.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/tiptip/jquery.tipTip.js b/htdocs/includes/jquery/plugins/tiptip/jquery.tipTip.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/tiptip/jquery.tipTip.min.js b/htdocs/includes/jquery/plugins/tiptip/jquery.tipTip.min.js
old mode 100755
new mode 100644
diff --git a/htdocs/includes/jquery/plugins/tiptip/tipTip.css b/htdocs/includes/jquery/plugins/tiptip/tipTip.css
old mode 100755
new mode 100644
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/.gitignore b/htdocs/includes/mobiledetect/mobiledetectlib/.gitignore
index 5e9bd942345..48b35e71455 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/.gitignore
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/.gitignore
@@ -6,4 +6,6 @@ nbproject/
/error.log
/export/nicejson
.idea/
-*.iml
\ No newline at end of file
+*.iml
+/coverage
+/phpunit.phar
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/.travis.yml b/htdocs/includes/mobiledetect/mobiledetectlib/.travis.yml
index 7c5ebf36c2a..29af5249f0d 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/.travis.yml
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/.travis.yml
@@ -1,14 +1,17 @@
language: php
php:
- "5.2"
- - "hhvm"
+ - "5.3"
+ - "5.4"
+ - "5.5"
+ - "5.6"
branches:
only:
- devel
script:
- - phpunit --configuration tests/phpunit.xml
+ - phpunit -v -c tests/phpunit.xml
notifications:
email: false
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt b/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt
index 101abf8be5f..90e632a7875 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/LICENSE.txt
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) <2011-2014>
+Copyright (c) <2011-2015> Serban Ghita, Nick Ilyin and contributors.
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.json b/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.json
index 7d61f6f9dee..323b1e2a50a 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.json
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.json
@@ -1,189 +1 @@
-{
- "version": "2.8.3",
- "headerMatch": {
- "HTTP_ACCEPT": {
- "matches": [
- "application\/x-obml2d",
- "application\/vnd.rim.html",
- "text\/vnd.wap.wml",
- "application\/vnd.wap.xhtml+xml"
- ]
- },
- "HTTP_X_WAP_PROFILE": null,
- "HTTP_X_WAP_CLIENTID": null,
- "HTTP_WAP_CONNECTION": null,
- "HTTP_PROFILE": null,
- "HTTP_X_OPERAMINI_PHONE_UA": null,
- "HTTP_X_NOKIA_GATEWAY_ID": null,
- "HTTP_X_ORANGE_ID": null,
- "HTTP_X_VODAFONE_3GPDPCONTEXT": null,
- "HTTP_X_HUAWEI_USERID": null,
- "HTTP_UA_OS": null,
- "HTTP_X_MOBILE_GATEWAY": null,
- "HTTP_X_ATT_DEVICEID": null,
- "HTTP_UA_CPU": {
- "matches": [
- "ARM"
- ]
- }
- },
- "uaHttpHeaders": [
- "HTTP_USER_AGENT",
- "HTTP_X_OPERAMINI_PHONE_UA",
- "HTTP_X_DEVICE_USER_AGENT",
- "HTTP_X_ORIGINAL_USER_AGENT",
- "HTTP_X_SKYFIRE_PHONE",
- "HTTP_X_BOLT_PHONE_UA",
- "HTTP_DEVICE_STOCK_UA",
- "HTTP_X_UCBROWSER_DEVICE_UA"
- ],
- "uaMatch": {
- "phones": {
- "iPhone": "\\biPhone.*(Mobile|PhoneGap)|\\biPod",
- "BlackBerry": "BlackBerry|\\bBB10\\b|rim[0-9]+",
- "HTC": "HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m",
- "Nexus": "Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile",
- "Dell": "Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b",
- "Motorola": "Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925",
- "Samsung": "Samsung|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E",
- "LG": "\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)",
- "Sony": "SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i",
- "Asus": "Asus.*Galaxy|PadFone.*Mobile",
- "Micromax": "Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b",
- "Palm": "PalmSource|Palm",
- "Vertu": "Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature",
- "Pantech": "PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790",
- "Fly": "IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250",
- "iMobile": "i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)",
- "SimValley": "\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b",
- "GenericPhone": "Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"
- },
- "tablets": {
- "iPad": "iPad|iPad.*Mobile",
- "NexusTablet": "Android.*Nexus[\\s]+(7|10)|^.*Android.*Nexus(?:(?!Mobile).)*$",
- "SamsungTablet": "SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-I9205|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705C|SM-T535|SM-T331",
- "Kindle": "Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE)\\b",
- "SurfaceTablet": "Windows NT [0-9.]+; ARM;",
- "HPTablet": "HP Slate 7|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8",
- "AsusTablet": "^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|TX201LA",
- "BlackBerryTablet": "PlayBook|RIM Tablet",
- "HTCtablet": "HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200",
- "MotorolaTablet": "xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617",
- "NookTablet": "Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2",
- "AcerTablet": "Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-830)\\b|W3-810|\\bA3-A10\\b",
- "ToshibaTablet": "Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO",
- "LGTablet": "\\bL-06C|LG-V900|LG-V500|LG-V909|LG-V500|LG-V510|LG-VK810\\b",
- "FujitsuTablet": "Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b",
- "PrestigioTablet": "PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD",
- "LenovoTablet": "IdeaTab|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A1000|A2107|A2109|A1107|B6000|B8000|B8080-F)",
- "YarvikTablet": "Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b",
- "MedionTablet": "Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB",
- "ArnovaTablet": "AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT",
- "IntensoTablet": "INM8002KP|INM1010FP|INM805ND|Intenso Tab",
- "IRUTablet": "M702pro",
- "MegafonTablet": "MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b",
- "EbodaTablet": "E-Boda (Supreme|Impresspeed|Izzycomm|Essential)",
- "AllViewTablet": "Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)",
- "ArchosTablet": "\\b(101G9|80G9|A101IT)\\b|Qilive 97R|ARCHOS 101G10|Archos 101 Neon",
- "AinolTablet": "NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark",
- "SonyTablet": "Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551",
- "CubeTablet": "Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT",
- "CobyTablet": "MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010",
- "MIDTablet": "M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733",
- "SMiTTablet": "Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)",
- "RockChipTablet": "Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A",
- "FlyTablet": "IQ310|Fly Vision",
- "bqTablet": "bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus",
- "HuaweiTablet": "MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim",
- "NecTablet": "\\bN-06D|\\bN-08D",
- "PantechTablet": "Pantech.*P4100",
- "BronchoTablet": "Broncho.*(N701|N708|N802|a710)",
- "VersusTablet": "TOUCHPAD.*[78910]|\\bTOUCHTAB\\b",
- "ZyncTablet": "z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900",
- "PositivoTablet": "TB07STA|TB10STA|TB07FTA|TB10FTA",
- "NabiTablet": "Android.*\\bNabi",
- "KoboTablet": "Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build",
- "DanewTablet": "DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b",
- "TexetTablet": "NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE",
- "PlaystationTablet": "Playstation.*(Portable|Vita)",
- "TrekstorTablet": "ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A",
- "PyleAudioTablet": "\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b",
- "AdvanTablet": "Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ",
- "DanyTechTablet": "Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1",
- "GalapadTablet": "Android.*\\bG1\\b",
- "MicromaxTablet": "Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b",
- "KarbonnTablet": "Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b",
- "AllFineTablet": "Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide",
- "PROSCANTablet": "\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b",
- "YONESTablet": "BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026",
- "ChangJiaTablet": "TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503",
- "GUTablet": "TX-A1301|TX-M9002|Q702|kf026",
- "PointOfViewTablet": "TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10",
- "OvermaxTablet": "OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)",
- "HCLTablet": "HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync",
- "DPSTablet": "DPS Dream 9|DPS Dual 7",
- "VistureTablet": "V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10",
- "CrestaTablet": "CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989",
- "MediatekTablet": "\\bMT8125|MT8389|MT8135|MT8377\\b",
- "ConcordeTablet": "Concorde([ ]+)?Tab|ConCorde ReadMan",
- "GoCleverTablet": "GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042",
- "ModecomTablet": "FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003",
- "VoninoTablet": "\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b",
- "ECSTablet": "V07OT2|TM105A|S10OT1|TR10CS1",
- "StorexTablet": "eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab",
- "VodafoneTablet": "SmartTab([ ]+)?[0-9]+|SmartTabII10",
- "EssentielBTablet": "Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2",
- "RossMoorTablet": "RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711",
- "iMobileTablet": "i-mobile i-note",
- "TolinoTablet": "tolino tab [0-9.]+|tolino shine",
- "AudioSonicTablet": "\\bC-22Q|T7-QC|T-17B|T-17P\\b",
- "AMPETablet": "Android.* A78 ",
- "SkkTablet": "Android.* (SKYPAD|PHOENIX|CYCLOPS)",
- "TecnoTablet": "TECNO P9",
- "JXDTablet": "Android.*\\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b",
- "iJoyTablet": "Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)",
- "FX2Tablet": "FX2 PAD7|FX2 PAD10",
- "XoroTablet": "KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151",
- "ViewsonicTablet": "ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a",
- "OdysTablet": "LOOX|XENO10|ODYS Space",
- "CaptivaTablet": "CAPTIVA PAD",
- "IconbitTablet": "NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S",
- "Hudl": "Hudl HT7S3",
- "TelstraTablet": "T-Hub2",
- "GenericTablet": "Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4"
- },
- "browsers": {
- "Chrome": "\\bCrMo\\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?",
- "Dolfin": "\\bDolfin\\b",
- "Opera": "Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+|Coast\/[0-9.]+",
- "Skyfire": "Skyfire",
- "IE": "IEMobile|MSIEMobile",
- "Firefox": "fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile",
- "Bolt": "bolt",
- "TeaShark": "teashark",
- "Blazer": "Blazer",
- "Safari": "Version.*Mobile.*Safari|Safari.*Mobile",
- "Tizen": "Tizen",
- "UCBrowser": "UC.*Browser|UCWEB",
- "DiigoBrowser": "DiigoBrowser",
- "Puffin": "Puffin",
- "Mercury": "\\bMercury\\b",
- "GenericBrowser": "NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger"
- },
- "os": {
- "AndroidOS": "Android",
- "BlackBerryOS": "blackberry|\\bBB10\\b|rim tablet os",
- "PalmOS": "PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino",
- "SymbianOS": "Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b",
- "WindowsMobileOS": "Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;",
- "WindowsPhoneOS": "Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7",
- "iOS": "\\biPhone.*Mobile|\\biPod|\\biPad",
- "MeeGoOS": "MeeGo",
- "MaemoOS": "Maemo",
- "JavaOS": "J2ME\/|\\bMIDP\\b|\\bCLDC\\b",
- "webOS": "webOS|hpwOS",
- "badaOS": "\\bBada\\b",
- "BREWOS": "BREW"
- }
- }
-}
\ No newline at end of file
+{"version":"2.8.17","headerMatch":{"HTTP_ACCEPT":{"matches":["application\/x-obml2d","application\/vnd.rim.html","text\/vnd.wap.wml","application\/vnd.wap.xhtml+xml"]},"HTTP_X_WAP_PROFILE":null,"HTTP_X_WAP_CLIENTID":null,"HTTP_WAP_CONNECTION":null,"HTTP_PROFILE":null,"HTTP_X_OPERAMINI_PHONE_UA":null,"HTTP_X_NOKIA_GATEWAY_ID":null,"HTTP_X_ORANGE_ID":null,"HTTP_X_VODAFONE_3GPDPCONTEXT":null,"HTTP_X_HUAWEI_USERID":null,"HTTP_UA_OS":null,"HTTP_X_MOBILE_GATEWAY":null,"HTTP_X_ATT_DEVICEID":null,"HTTP_UA_CPU":{"matches":["ARM"]}},"uaHttpHeaders":["HTTP_USER_AGENT","HTTP_X_OPERAMINI_PHONE_UA","HTTP_X_DEVICE_USER_AGENT","HTTP_X_ORIGINAL_USER_AGENT","HTTP_X_SKYFIRE_PHONE","HTTP_X_BOLT_PHONE_UA","HTTP_DEVICE_STOCK_UA","HTTP_X_UCBROWSER_DEVICE_UA"],"uaMatch":{"phones":{"iPhone":"\\biPhone\\b|\\biPod\\b","BlackBerry":"BlackBerry|\\bBB10\\b|rim[0-9]+","HTC":"HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\\bEVO\\b|T-Mobile G1|Z520m","Nexus":"Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6","Dell":"Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\\b001DL\\b|\\b101DL\\b|\\bGS01\\b","Motorola":"Motorola|DROIDX|DROID BIONIC|\\bDroid\\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\\bMoto E\\b","Samsung":"Samsung|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205","LG":"\\bLG\\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)","Sony":"SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533","Asus":"Asus.*Galaxy|PadFone.*Mobile","Micromax":"Micromax.*\\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\\b","Palm":"PalmSource|Palm","Vertu":"Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature","Pantech":"PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790","Fly":"IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250","Wiko":"KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM","iMobile":"i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)","SimValley":"\\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\\b","Wolfgang":"AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q","Alcatel":"Alcatel","Nintendo":"Nintendo 3DS","Amoi":"Amoi","INQ":"INQ","GenericPhone":"Tapatalk|PDA;|SAGEM|\\bmmp\\b|pocket|\\bpsp\\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\\bwap\\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser"},"tablets":{"iPad":"iPad|iPad.*Mobile","NexusTablet":"Android.*Nexus[\\s]+(7|9|10)","SamsungTablet":"SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T360","Kindle":"Kindle|Silk.*Accelerated|Android.*\\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI)\\b","SurfaceTablet":"Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)","HPTablet":"HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10","AsusTablet":"^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\\bK00F\\b|\\bK00C\\b|\\bK00E\\b|\\bK00L\\b|TX201LA|ME176C|ME102A|\\bM80TA\\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K017 |ME572C|ME103K|ME170C|ME171C|\\bME70C\\b|ME581C|ME581CL|ME8510C|ME181C","BlackBerryTablet":"PlayBook|RIM Tablet","HTCtablet":"HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410","MotorolaTablet":"xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617","NookTablet":"Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2","AcerTablet":"Android.*; \\b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\\b|W3-810|\\bA3-A10\\b|\\bA3-A11\\b","ToshibaTablet":"Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO","LGTablet":"\\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\\b","FujitsuTablet":"Android.*\\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\\b","PrestigioTablet":"PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002","LenovoTablet":"Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)","DellTablet":"Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7","YarvikTablet":"Android.*\\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\\b","MedionTablet":"Android.*\\bOYO\\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB","ArnovaTablet":"AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2","IntensoTablet":"INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004","IRUTablet":"M702pro","MegafonTablet":"MegaFon V9|\\bZTE V9\\b|Android.*\\bMT7A\\b","EbodaTablet":"E-Boda (Supreme|Impresspeed|Izzycomm|Essential)","AllViewTablet":"Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)","ArchosTablet":"\\b(101G9|80G9|A101IT)\\b|Qilive 97R|Archos5|\\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\\b","AinolTablet":"NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark","SonyTablet":"Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31","PhilipsTablet":"\\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\\b","CubeTablet":"Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT","CobyTablet":"MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010","MIDTablet":"M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733","MSITablet":"MSI \\b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\\b","SMiTTablet":"Android.*(\\bMID\\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)","RockChipTablet":"Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A","FlyTablet":"IQ310|Fly Vision","bqTablet":"Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris E10)|Maxwell.*Lite|Maxwell.*Plus","HuaweiTablet":"MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim","NecTablet":"\\bN-06D|\\bN-08D","PantechTablet":"Pantech.*P4100","BronchoTablet":"Broncho.*(N701|N708|N802|a710)","VersusTablet":"TOUCHPAD.*[78910]|\\bTOUCHTAB\\b","ZyncTablet":"z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900","PositivoTablet":"TB07STA|TB10STA|TB07FTA|TB10FTA","NabiTablet":"Android.*\\bNabi","KoboTablet":"Kobo Touch|\\bK080\\b|\\bVox\\b Build|\\bArc\\b Build","DanewTablet":"DSlide.*\\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\\b","TexetTablet":"NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE","PlaystationTablet":"Playstation.*(Portable|Vita)","TrekstorTablet":"ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab","PyleAudioTablet":"\\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\\b","AdvanTablet":"Android.* \\b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\\b ","DanyTechTablet":"Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1","GalapadTablet":"Android.*\\bG1\\b","MicromaxTablet":"Funbook|Micromax.*\\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\\b","KarbonnTablet":"Android.*\\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\\b","AllFineTablet":"Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide","PROSCANTablet":"\\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\\b","YONESTablet":"BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026","ChangJiaTablet":"TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503","GUTablet":"TX-A1301|TX-M9002|Q702|kf026","PointOfViewTablet":"TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10","OvermaxTablet":"OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)","HCLTablet":"HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync","DPSTablet":"DPS Dream 9|DPS Dual 7","VistureTablet":"V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10","CrestaTablet":"CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989","MediatekTablet":"\\bMT8125|MT8389|MT8135|MT8377\\b","ConcordeTablet":"Concorde([ ]+)?Tab|ConCorde ReadMan","GoCleverTablet":"GOCLEVER TAB|A7GOCLEVER|M1042|M7841|M742|R1042BK|R1041|TAB A975|TAB A7842|TAB A741|TAB A741L|TAB M723G|TAB M721|TAB A1021|TAB I921|TAB R721|TAB I720|TAB T76|TAB R70|TAB R76.2|TAB R106|TAB R83.2|TAB M813G|TAB I721|GCTA722|TAB I70|TAB I71|TAB S73|TAB R73|TAB R74|TAB R93|TAB R75|TAB R76.1|TAB A73|TAB A93|TAB A93.2|TAB T72|TAB R83|TAB R974|TAB R973|TAB A101|TAB A103|TAB A104|TAB A104.2|R105BK|M713G|A972BK|TAB A971|TAB R974.2|TAB R104|TAB R83.3|TAB A1042","ModecomTablet":"FreeTAB 9000|FreeTAB 7.4|FreeTAB 7004|FreeTAB 7800|FreeTAB 2096|FreeTAB 7.5|FreeTAB 1014|FreeTAB 1001 |FreeTAB 8001|FreeTAB 9706|FreeTAB 9702|FreeTAB 7003|FreeTAB 7002|FreeTAB 1002|FreeTAB 7801|FreeTAB 1331|FreeTAB 1004|FreeTAB 8002|FreeTAB 8014|FreeTAB 9704|FreeTAB 1003","VoninoTablet":"\\b(Argus[ _]?S|Diamond[ _]?79HD|Emerald[ _]?78E|Luna[ _]?70C|Onyx[ _]?S|Onyx[ _]?Z|Orin[ _]?HD|Orin[ _]?S|Otis[ _]?S|SpeedStar[ _]?S|Magnet[ _]?M9|Primus[ _]?94[ _]?3G|Primus[ _]?94HD|Primus[ _]?QS|Android.*\\bQ8\\b|Sirius[ _]?EVO[ _]?QS|Sirius[ _]?QS|Spirit[ _]?S)\\b","ECSTablet":"V07OT2|TM105A|S10OT1|TR10CS1","StorexTablet":"eZee[_']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab","VodafoneTablet":"SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7","EssentielBTablet":"Smart[ ']?TAB[ ]+?[0-9]+|Family[ ']?TAB2","RossMoorTablet":"RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711","iMobileTablet":"i-mobile i-note","TolinoTablet":"tolino tab [0-9.]+|tolino shine","AudioSonicTablet":"\\bC-22Q|T7-QC|T-17B|T-17P\\b","AMPETablet":"Android.* A78 ","SkkTablet":"Android.* (SKYPAD|PHOENIX|CYCLOPS)","TecnoTablet":"TECNO P9","JXDTablet":"Android.*\\b(F3000|A3300|JXD5000|JXD3000|JXD2000|JXD300B|JXD300|S5800|S7800|S602b|S5110b|S7300|S5300|S602|S603|S5100|S5110|S601|S7100a|P3000F|P3000s|P101|P200s|P1000m|P200m|P9100|P1000s|S6600b|S908|P1000|P300|S18|S6600|S9100)\\b","iJoyTablet":"Tablet (Spirit 7|Essentia|Galatea|Fusion|Onix 7|Landa|Titan|Scooby|Deox|Stella|Themis|Argon|Unique 7|Sygnus|Hexen|Finity 7|Cream|Cream X2|Jade|Neon 7|Neron 7|Kandy|Scape|Saphyr 7|Rebel|Biox|Rebel|Rebel 8GB|Myst|Draco 7|Myst|Tab7-004|Myst|Tadeo Jones|Tablet Boing|Arrow|Draco Dual Cam|Aurix|Mint|Amity|Revolution|Finity 9|Neon 9|T9w|Amity 4GB Dual Cam|Stone 4GB|Stone 8GB|Andromeda|Silken|X2|Andromeda II|Halley|Flame|Saphyr 9,7|Touch 8|Planet|Triton|Unique 10|Hexen 10|Memphis 4GB|Memphis 8GB|Onix 10)","FX2Tablet":"FX2 PAD7|FX2 PAD10","XoroTablet":"KidsPAD 701|PAD[ ]?712|PAD[ ]?714|PAD[ ]?716|PAD[ ]?717|PAD[ ]?718|PAD[ ]?720|PAD[ ]?721|PAD[ ]?722|PAD[ ]?790|PAD[ ]?792|PAD[ ]?900|PAD[ ]?9715D|PAD[ ]?9716DR|PAD[ ]?9718DR|PAD[ ]?9719QR|PAD[ ]?9720QR|TelePAD1030|Telepad1032|TelePAD730|TelePAD731|TelePAD732|TelePAD735Q|TelePAD830|TelePAD9730|TelePAD795|MegaPAD 1331|MegaPAD 1851|MegaPAD 2151","ViewsonicTablet":"ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a","OdysTablet":"LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\\bXELIO\\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10","CaptivaTablet":"CAPTIVA PAD","IconbitTablet":"NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S","TeclastTablet":"T98 4G|\\bP80\\b|\\bX90HD\\b|X98 Air|X98 Air 3G|\\bX89\\b|P80 3G|\\bX80h\\b|P98 Air|\\bX89HD\\b|P98 3G|\\bP90HD\\b|P89 3G|X98 3G|\\bP70h\\b|P79HD 3G|G18d 3G|\\bP79HD\\b|\\bP89s\\b|\\bA88\\b|\\bP10HD\\b|\\bP19HD\\b|G18 3G|\\bP78HD\\b|\\bA78\\b|\\bP75\\b|G17s 3G|G17h 3G|\\bP85t\\b|\\bP90\\b|\\bP11\\b|\\bP98t\\b|\\bP98HD\\b|\\bG18d\\b|\\bP85s\\b|\\bP11HD\\b|\\bP88s\\b|\\bA80HD\\b|\\bA80se\\b|\\bA10h\\b|\\bP89\\b|\\bP78s\\b|\\bG18\\b|\\bP85\\b|\\bA70h\\b|\\bA70\\b|\\bG17\\b|\\bP18\\b|\\bA80s\\b|\\bA11s\\b|\\bP88HD\\b|\\bA80h\\b|\\bP76s\\b|\\bP76h\\b|\\bP98\\b|\\bA10HD\\b|\\bP78\\b|\\bP88\\b|\\bA11\\b|\\bA10t\\b|\\bP76a\\b|\\bP76t\\b|\\bP76e\\b|\\bP85HD\\b|\\bP85a\\b|\\bP86\\b|\\bP75HD\\b|\\bP76v\\b|\\bA12\\b|\\bP75a\\b|\\bA15\\b|\\bP76Ti\\b|\\bP81HD\\b|\\bA10\\b|\\bT760VE\\b|\\bT720HD\\b|\\bP76\\b|\\bP73\\b|\\bP71\\b|\\bP72\\b|\\bT720SE\\b|\\bC520Ti\\b|\\bT760\\b|\\bT720VE\\b|T720-3GE|T720-WiFi","OndaTablet":"\\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\\b[\\s]+","JaytechTablet":"TPC-PA762","BlaupunktTablet":"Endeavour 800NG|Endeavour 1010","DigmaTablet":"\\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\\b","EvolioTablet":"ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\\bEvotab\\b|\\bNeura\\b","LavaTablet":"QPAD E704|\\bIvoryS\\b|E-TAB IVORY|\\bE-TAB\\b","CelkonTablet":"CT695|CT888|CT[\\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\\bCT-1\\b","WolderTablet":"miTab \\b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\\b","MiTablet":"\\bMI PAD\\b|\\bHM NOTE 1W\\b","NibiruTablet":"Nibiru M1|Nibiru Jupiter One","NexoTablet":"NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI","LeaderTablet":"TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100","UbislateTablet":"UbiSlate[\\s]?7C","PocketBookTablet":"Pocketbook","Hudl":"Hudl HT7S3","TelstraTablet":"T-Hub2","GenericTablet":"Android.*\\b97D\\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\\bA7EB\\b|CatNova8|A1_07|CT704|CT1002|\\bM721\\b|rk30sdk|\\bEVOTAB\\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\\bM6pro\\b|CT1020W|arc 10HD|\\bJolla\\b|\\bTP750\\b"},"browsers":{"Chrome":"\\bCrMo\\b|CriOS|Android.*Chrome\/[.0-9]* (Mobile)?","Dolfin":"\\bDolfin\\b","Opera":"Opera.*Mini|Opera.*Mobi|Android.*Opera|Mobile.*OPR\/[0-9.]+|Coast\/[0-9.]+","Skyfire":"Skyfire","IE":"IEMobile|MSIEMobile","Firefox":"fennec|firefox.*maemo|(Mobile|Tablet).*Firefox|Firefox.*Mobile","Bolt":"bolt","TeaShark":"teashark","Blazer":"Blazer","Safari":"Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari","Tizen":"Tizen","UCBrowser":"UC.*Browser|UCWEB","baiduboxapp":"baiduboxapp","baidubrowser":"baidubrowser","DiigoBrowser":"DiigoBrowser","Puffin":"Puffin","Mercury":"\\bMercury\\b","ObigoBrowser":"Obigo","NetFront":"NF-Browser","GenericBrowser":"NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger"},"os":{"AndroidOS":"Android","BlackBerryOS":"blackberry|\\bBB10\\b|rim tablet os","PalmOS":"PalmOS|avantgo|blazer|elaine|hiptop|palm|plucker|xiino","SymbianOS":"Symbian|SymbOS|Series60|Series40|SYB-[0-9]+|\\bS60\\b","WindowsMobileOS":"Windows CE.*(PPC|Smartphone|Mobile|[0-9]{3}x[0-9]{3})|Window Mobile|Windows Phone [0-9.]+|WCE;","WindowsPhoneOS":"Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;","iOS":"\\biPhone.*Mobile|\\biPod|\\biPad","MeeGoOS":"MeeGo","MaemoOS":"Maemo","JavaOS":"J2ME\/|\\bMIDP\\b|\\bCLDC\\b","webOS":"webOS|hpwOS","badaOS":"\\bBada\\b","BREWOS":"BREW"},"utilities":{"Bot":"Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom","MobileBot":"Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker\/M1A1-R2D2","DesktopMode":"WPDesktop","TV":"SonyDTV|HbbTV","WebKit":"(webkit)[ \/]([\\w.]+)","Console":"\\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\\b","Watch":"SM-V700"}}}
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.php b/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.php
index b6eb0da21b3..fe55d7fedc9 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/Mobile_Detect.php
@@ -8,7 +8,9 @@
* Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
* It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
*
- * @author Current authors: Serban Ghita , Nick Ilyin
+ * @author Current authors: Serban Ghita
+ * Nick Ilyin
+ *
* Original author: Victor Stanciu
*
* @license Code and contributions have 'MIT License'
@@ -20,7 +22,7 @@
* README: https://github.com/serbanghita/Mobile-Detect/blob/master/README.md
* HOWTO: https://github.com/serbanghita/Mobile-Detect/wiki/Code-examples
*
- * @version 2.8.3
+ * @version 2.8.17
*/
class Mobile_Detect
@@ -64,7 +66,7 @@ class Mobile_Detect
/**
* Stores the version number of the current release.
*/
- const VERSION = '2.8.3';
+ const VERSION = '2.8.17';
/**
* A type for the version() method indicating a string return value.
@@ -76,6 +78,12 @@ class Mobile_Detect
*/
const VERSION_TYPE_FLOAT = 'float';
+ /**
+ * A cache for resolved matches
+ * @var array
+ */
+ protected $cache = array();
+
/**
* The User-Agent HTTP header is stored in here.
* @var string
@@ -88,6 +96,26 @@ class Mobile_Detect
*/
protected $httpHeaders = array();
+ /**
+ * CloudFront headers. E.g. CloudFront-Is-Desktop-Viewer, CloudFront-Is-Mobile-Viewer & CloudFront-Is-Tablet-Viewer.
+ * @var array
+ */
+ protected $cloudfrontHeaders = array();
+
+ /**
+ * The matching Regex.
+ * This is good for debug.
+ * @var string
+ */
+ protected $matchingRegex = null;
+
+ /**
+ * The matches extracted from the regex expression.
+ * This is good for debug.
+ * @var string
+ */
+ protected $matchesArray = null;
+
/**
* The detection type, using self::DETECTION_TYPE_MOBILE or self::DETECTION_TYPE_EXTENDED.
*
@@ -127,7 +155,7 @@ class Mobile_Detect
'HTTP_UA_OS' => null,
// Reported by Verizon, Vodafone proxy system.
'HTTP_X_MOBILE_GATEWAY' => null,
- // Seend this on HTC Sensation. @ref: SensationXE_Beats_Z715e.
+ // Seen this on HTC Sensation. SensationXE_Beats_Z715e.
'HTTP_X_ATT_DEVICEID' => null,
// Seen this on a HTC.
'HTTP_UA_CPU' => array('matches' => array('ARM')),
@@ -139,33 +167,45 @@ class Mobile_Detect
* @var array
*/
protected static $phoneDevices = array(
- 'iPhone' => '\biPhone.*(Mobile|PhoneGap)|\biPod', // |\biTunes
+ 'iPhone' => '\biPhone\b|\biPod\b', // |\biTunes
'BlackBerry' => 'BlackBerry|\bBB10\b|rim[0-9]+',
'HTC' => 'HTC|HTC.*(Sensation|Evo|Vision|Explorer|6800|8100|8900|A7272|S510e|C110e|Legend|Desire|T8282)|APX515CKT|Qtek9090|APA9292KT|HD_mini|Sensation.*Z710e|PG86100|Z715e|Desire.*(A8181|HD)|ADR6200|ADR6400L|ADR6425|001HT|Inspire 4G|Android.*\bEVO\b|T-Mobile G1|Z520m',
- 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile',
+ 'Nexus' => 'Nexus One|Nexus S|Galaxy.*Nexus|Android.*Nexus.*Mobile|Nexus 4|Nexus 5|Nexus 6',
// @todo: Is 'Dell Streak' a tablet or a phone? ;)
'Dell' => 'Dell.*Streak|Dell.*Aero|Dell.*Venue|DELL.*Venue Pro|Dell Flash|Dell Smoke|Dell Mini 3iX|XCD28|XCD35|\b001DL\b|\b101DL\b|\bGS01\b',
- 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925',
- 'Samsung' => 'Samsung|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E',
- 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)',
- 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i',
+ 'Motorola' => 'Motorola|DROIDX|DROID BIONIC|\bDroid\b.*Build|Android.*Xoom|HRI39|MOT-|A1260|A1680|A555|A853|A855|A953|A955|A956|Motorola.*ELECTRIFY|Motorola.*i1|i867|i940|MB200|MB300|MB501|MB502|MB508|MB511|MB520|MB525|MB526|MB611|MB612|MB632|MB810|MB855|MB860|MB861|MB865|MB870|ME501|ME502|ME511|ME525|ME600|ME632|ME722|ME811|ME860|ME863|ME865|MT620|MT710|MT716|MT720|MT810|MT870|MT917|Motorola.*TITANIUM|WX435|WX445|XT300|XT301|XT311|XT316|XT317|XT319|XT320|XT390|XT502|XT530|XT531|XT532|XT535|XT603|XT610|XT611|XT615|XT681|XT701|XT702|XT711|XT720|XT800|XT806|XT860|XT862|XT875|XT882|XT883|XT894|XT901|XT907|XT909|XT910|XT912|XT928|XT926|XT915|XT919|XT925|XT1021|\bMoto E\b',
+ 'Samsung' => 'Samsung|SM-G9250|GT-19300|SGH-I337|BGT-S5230|GT-B2100|GT-B2700|GT-B2710|GT-B3210|GT-B3310|GT-B3410|GT-B3730|GT-B3740|GT-B5510|GT-B5512|GT-B5722|GT-B6520|GT-B7300|GT-B7320|GT-B7330|GT-B7350|GT-B7510|GT-B7722|GT-B7800|GT-C3010|GT-C3011|GT-C3060|GT-C3200|GT-C3212|GT-C3212I|GT-C3262|GT-C3222|GT-C3300|GT-C3300K|GT-C3303|GT-C3303K|GT-C3310|GT-C3322|GT-C3330|GT-C3350|GT-C3500|GT-C3510|GT-C3530|GT-C3630|GT-C3780|GT-C5010|GT-C5212|GT-C6620|GT-C6625|GT-C6712|GT-E1050|GT-E1070|GT-E1075|GT-E1080|GT-E1081|GT-E1085|GT-E1087|GT-E1100|GT-E1107|GT-E1110|GT-E1120|GT-E1125|GT-E1130|GT-E1160|GT-E1170|GT-E1175|GT-E1180|GT-E1182|GT-E1200|GT-E1210|GT-E1225|GT-E1230|GT-E1390|GT-E2100|GT-E2120|GT-E2121|GT-E2152|GT-E2220|GT-E2222|GT-E2230|GT-E2232|GT-E2250|GT-E2370|GT-E2550|GT-E2652|GT-E3210|GT-E3213|GT-I5500|GT-I5503|GT-I5700|GT-I5800|GT-I5801|GT-I6410|GT-I6420|GT-I7110|GT-I7410|GT-I7500|GT-I8000|GT-I8150|GT-I8160|GT-I8190|GT-I8320|GT-I8330|GT-I8350|GT-I8530|GT-I8700|GT-I8703|GT-I8910|GT-I9000|GT-I9001|GT-I9003|GT-I9010|GT-I9020|GT-I9023|GT-I9070|GT-I9082|GT-I9100|GT-I9103|GT-I9220|GT-I9250|GT-I9300|GT-I9305|GT-I9500|GT-I9505|GT-M3510|GT-M5650|GT-M7500|GT-M7600|GT-M7603|GT-M8800|GT-M8910|GT-N7000|GT-S3110|GT-S3310|GT-S3350|GT-S3353|GT-S3370|GT-S3650|GT-S3653|GT-S3770|GT-S3850|GT-S5210|GT-S5220|GT-S5229|GT-S5230|GT-S5233|GT-S5250|GT-S5253|GT-S5260|GT-S5263|GT-S5270|GT-S5300|GT-S5330|GT-S5350|GT-S5360|GT-S5363|GT-S5369|GT-S5380|GT-S5380D|GT-S5560|GT-S5570|GT-S5600|GT-S5603|GT-S5610|GT-S5620|GT-S5660|GT-S5670|GT-S5690|GT-S5750|GT-S5780|GT-S5830|GT-S5839|GT-S6102|GT-S6500|GT-S7070|GT-S7200|GT-S7220|GT-S7230|GT-S7233|GT-S7250|GT-S7500|GT-S7530|GT-S7550|GT-S7562|GT-S7710|GT-S8000|GT-S8003|GT-S8500|GT-S8530|GT-S8600|SCH-A310|SCH-A530|SCH-A570|SCH-A610|SCH-A630|SCH-A650|SCH-A790|SCH-A795|SCH-A850|SCH-A870|SCH-A890|SCH-A930|SCH-A950|SCH-A970|SCH-A990|SCH-I100|SCH-I110|SCH-I400|SCH-I405|SCH-I500|SCH-I510|SCH-I515|SCH-I600|SCH-I730|SCH-I760|SCH-I770|SCH-I830|SCH-I910|SCH-I920|SCH-I959|SCH-LC11|SCH-N150|SCH-N300|SCH-R100|SCH-R300|SCH-R351|SCH-R400|SCH-R410|SCH-T300|SCH-U310|SCH-U320|SCH-U350|SCH-U360|SCH-U365|SCH-U370|SCH-U380|SCH-U410|SCH-U430|SCH-U450|SCH-U460|SCH-U470|SCH-U490|SCH-U540|SCH-U550|SCH-U620|SCH-U640|SCH-U650|SCH-U660|SCH-U700|SCH-U740|SCH-U750|SCH-U810|SCH-U820|SCH-U900|SCH-U940|SCH-U960|SCS-26UC|SGH-A107|SGH-A117|SGH-A127|SGH-A137|SGH-A157|SGH-A167|SGH-A177|SGH-A187|SGH-A197|SGH-A227|SGH-A237|SGH-A257|SGH-A437|SGH-A517|SGH-A597|SGH-A637|SGH-A657|SGH-A667|SGH-A687|SGH-A697|SGH-A707|SGH-A717|SGH-A727|SGH-A737|SGH-A747|SGH-A767|SGH-A777|SGH-A797|SGH-A817|SGH-A827|SGH-A837|SGH-A847|SGH-A867|SGH-A877|SGH-A887|SGH-A897|SGH-A927|SGH-B100|SGH-B130|SGH-B200|SGH-B220|SGH-C100|SGH-C110|SGH-C120|SGH-C130|SGH-C140|SGH-C160|SGH-C170|SGH-C180|SGH-C200|SGH-C207|SGH-C210|SGH-C225|SGH-C230|SGH-C417|SGH-C450|SGH-D307|SGH-D347|SGH-D357|SGH-D407|SGH-D415|SGH-D780|SGH-D807|SGH-D980|SGH-E105|SGH-E200|SGH-E315|SGH-E316|SGH-E317|SGH-E335|SGH-E590|SGH-E635|SGH-E715|SGH-E890|SGH-F300|SGH-F480|SGH-I200|SGH-I300|SGH-I320|SGH-I550|SGH-I577|SGH-I600|SGH-I607|SGH-I617|SGH-I627|SGH-I637|SGH-I677|SGH-I700|SGH-I717|SGH-I727|SGH-i747M|SGH-I777|SGH-I780|SGH-I827|SGH-I847|SGH-I857|SGH-I896|SGH-I897|SGH-I900|SGH-I907|SGH-I917|SGH-I927|SGH-I937|SGH-I997|SGH-J150|SGH-J200|SGH-L170|SGH-L700|SGH-M110|SGH-M150|SGH-M200|SGH-N105|SGH-N500|SGH-N600|SGH-N620|SGH-N625|SGH-N700|SGH-N710|SGH-P107|SGH-P207|SGH-P300|SGH-P310|SGH-P520|SGH-P735|SGH-P777|SGH-Q105|SGH-R210|SGH-R220|SGH-R225|SGH-S105|SGH-S307|SGH-T109|SGH-T119|SGH-T139|SGH-T209|SGH-T219|SGH-T229|SGH-T239|SGH-T249|SGH-T259|SGH-T309|SGH-T319|SGH-T329|SGH-T339|SGH-T349|SGH-T359|SGH-T369|SGH-T379|SGH-T409|SGH-T429|SGH-T439|SGH-T459|SGH-T469|SGH-T479|SGH-T499|SGH-T509|SGH-T519|SGH-T539|SGH-T559|SGH-T589|SGH-T609|SGH-T619|SGH-T629|SGH-T639|SGH-T659|SGH-T669|SGH-T679|SGH-T709|SGH-T719|SGH-T729|SGH-T739|SGH-T746|SGH-T749|SGH-T759|SGH-T769|SGH-T809|SGH-T819|SGH-T839|SGH-T919|SGH-T929|SGH-T939|SGH-T959|SGH-T989|SGH-U100|SGH-U200|SGH-U800|SGH-V205|SGH-V206|SGH-X100|SGH-X105|SGH-X120|SGH-X140|SGH-X426|SGH-X427|SGH-X475|SGH-X495|SGH-X497|SGH-X507|SGH-X600|SGH-X610|SGH-X620|SGH-X630|SGH-X700|SGH-X820|SGH-X890|SGH-Z130|SGH-Z150|SGH-Z170|SGH-ZX10|SGH-ZX20|SHW-M110|SPH-A120|SPH-A400|SPH-A420|SPH-A460|SPH-A500|SPH-A560|SPH-A600|SPH-A620|SPH-A660|SPH-A700|SPH-A740|SPH-A760|SPH-A790|SPH-A800|SPH-A820|SPH-A840|SPH-A880|SPH-A900|SPH-A940|SPH-A960|SPH-D600|SPH-D700|SPH-D710|SPH-D720|SPH-I300|SPH-I325|SPH-I330|SPH-I350|SPH-I500|SPH-I600|SPH-I700|SPH-L700|SPH-M100|SPH-M220|SPH-M240|SPH-M300|SPH-M305|SPH-M320|SPH-M330|SPH-M350|SPH-M360|SPH-M370|SPH-M380|SPH-M510|SPH-M540|SPH-M550|SPH-M560|SPH-M570|SPH-M580|SPH-M610|SPH-M620|SPH-M630|SPH-M800|SPH-M810|SPH-M850|SPH-M900|SPH-M910|SPH-M920|SPH-M930|SPH-N100|SPH-N200|SPH-N240|SPH-N300|SPH-N400|SPH-Z400|SWC-E100|SCH-i909|GT-N7100|GT-N7105|SCH-I535|SM-N900A|SGH-I317|SGH-T999L|GT-S5360B|GT-I8262|GT-S6802|GT-S6312|GT-S6310|GT-S5312|GT-S5310|GT-I9105|GT-I8510|GT-S6790N|SM-G7105|SM-N9005|GT-S5301|GT-I9295|GT-I9195|SM-C101|GT-S7392|GT-S7560|GT-B7610|GT-I5510|GT-S7582|GT-S7530E|GT-I8750|SM-G9006V|SM-G9008V|SM-G9009D|SM-G900A|SM-G900D|SM-G900F|SM-G900H|SM-G900I|SM-G900J|SM-G900K|SM-G900L|SM-G900M|SM-G900P|SM-G900R4|SM-G900S|SM-G900T|SM-G900V|SM-G900W8|SHV-E160K|SCH-P709|SCH-P729|SM-T2558|GT-I9205',
+ 'LG' => '\bLG\b;|LG[- ]?(C800|C900|E400|E610|E900|E-900|F160|F180K|F180L|F180S|730|855|L160|LS740|LS840|LS970|LU6200|MS690|MS695|MS770|MS840|MS870|MS910|P500|P700|P705|VM696|AS680|AS695|AX840|C729|E970|GS505|272|C395|E739BK|E960|L55C|L75C|LS696|LS860|P769BK|P350|P500|P509|P870|UN272|US730|VS840|VS950|LN272|LN510|LS670|LS855|LW690|MN270|MN510|P509|P769|P930|UN200|UN270|UN510|UN610|US670|US740|US760|UX265|UX840|VN271|VN530|VS660|VS700|VS740|VS750|VS910|VS920|VS930|VX9200|VX11000|AX840A|LW770|P506|P925|P999|E612|D955|D802)',
+ 'Sony' => 'SonyST|SonyLT|SonyEricsson|SonyEricssonLT15iv|LT18i|E10i|LT28h|LT26w|SonyEricssonMT27i|C5303|C6902|C6903|C6906|C6943|D2533',
'Asus' => 'Asus.*Galaxy|PadFone.*Mobile',
- // @ref: http://www.micromaxinfo.com/mobiles/smartphones
+ // http://www.micromaxinfo.com/mobiles/smartphones
// Added because the codes might conflict with Acer Tablets.
'Micromax' => 'Micromax.*\b(A210|A92|A88|A72|A111|A110Q|A115|A116|A110|A90S|A26|A51|A35|A54|A25|A27|A89|A68|A65|A57|A90)\b',
- 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ; @todo - complete the regex.
+ // @todo Complete the regex.
+ 'Palm' => 'PalmSource|Palm', // avantgo|blazer|elaine|hiptop|plucker|xiino ;
'Vertu' => 'Vertu|Vertu.*Ltd|Vertu.*Ascent|Vertu.*Ayxta|Vertu.*Constellation(F|Quest)?|Vertu.*Monika|Vertu.*Signature', // Just for fun ;)
- // @ref: http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
+ // http://www.pantech.co.kr/en/prod/prodList.do?gbrand=VEGA (PANTECH)
// Most of the VEGA devices are legacy. PANTECH seem to be newer devices based on Android.
'Pantech' => 'PANTECH|IM-A850S|IM-A840S|IM-A830L|IM-A830K|IM-A830S|IM-A820L|IM-A810K|IM-A810S|IM-A800S|IM-T100K|IM-A725L|IM-A780L|IM-A775C|IM-A770K|IM-A760S|IM-A750K|IM-A740S|IM-A730S|IM-A720L|IM-A710K|IM-A690L|IM-A690S|IM-A650S|IM-A630K|IM-A600S|VEGA PTL21|PT003|P8010|ADR910L|P6030|P6020|P9070|P4100|P9060|P5000|CDM8992|TXT8045|ADR8995|IS11PT|P2030|P6010|P8000|PT002|IS06|CDM8999|P9050|PT001|TXT8040|P2020|P9020|P2000|P7040|P7000|C790',
- // @ref: http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
+ // http://www.fly-phone.com/devices/smartphones/ ; Included only smartphones.
'Fly' => 'IQ230|IQ444|IQ450|IQ440|IQ442|IQ441|IQ245|IQ256|IQ236|IQ255|IQ235|IQ245|IQ275|IQ240|IQ285|IQ280|IQ270|IQ260|IQ250',
- 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
+ // http://fr.wikomobile.com
+ 'Wiko' => 'KITE 4G|HIGHWAY|GETAWAY|STAIRWAY|DARKSIDE|DARKFULL|DARKNIGHT|DARKMOON|SLIDE|WAX 4G|RAINBOW|BLOOM|SUNSET|GOA|LENNY|BARRY|IGGY|OZZY|CINK FIVE|CINK PEAX|CINK PEAX 2|CINK SLIM|CINK SLIM 2|CINK +|CINK KING|CINK PEAX|CINK SLIM|SUBLIM',
+ 'iMobile' => 'i-mobile (IQ|i-STYLE|idea|ZAA|Hitz)',
// Added simvalley mobile just for fun. They have some interesting devices.
- // @ref: http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
+ // http://www.simvalley.fr/telephonie---gps-_22_telephonie-mobile_telephones_.html
'SimValley' => '\b(SP-80|XT-930|SX-340|XT-930|SX-310|SP-360|SP60|SPT-800|SP-120|SPT-800|SP-140|SPX-5|SPX-8|SP-100|SPX-8|SPX-12)\b',
- // @Tapatalk is a mobile app; @ref: http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
- 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser'
+ // Wolfgang - a brand that is sold by Aldi supermarkets.
+ // http://www.wolfgangmobile.com/
+ 'Wolfgang' => 'AT-B24D|AT-AS50HD|AT-AS40W|AT-AS55HD|AT-AS45q2|AT-B26D|AT-AS50Q',
+ 'Alcatel' => 'Alcatel',
+ 'Nintendo' => 'Nintendo 3DS',
+ // http://en.wikipedia.org/wiki/Amoi
+ 'Amoi' => 'Amoi',
+ // http://en.wikipedia.org/wiki/INQ
+ 'INQ' => 'INQ',
+ // @Tapatalk is a mobile app; http://support.tapatalk.com/threads/smf-2-0-2-os-and-browser-detection-plugin-and-tapatalk.15565/#post-79039
+ 'GenericPhone' => 'Tapatalk|PDA;|SAGEM|\bmmp\b|pocket|\bpsp\b|symbian|Smartphone|smartfon|treo|up.browser|up.link|vodafone|\bwap\b|nokia|Series40|Series60|S60|SonyEricsson|N900|MAUI.*WAP.*Browser',
);
/**
@@ -174,78 +214,94 @@ class Mobile_Detect
* @var array
*/
protected static $tabletDevices = array(
- 'iPad' => 'iPad|iPad.*Mobile', // @todo: check for mobile friendly emails topic.
- 'NexusTablet' => 'Android.*Nexus[\s]+(7|10)|^.*Android.*Nexus(?:(?!Mobile).)*$',
- 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-I9205|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705C|SM-T535|SM-T331', // SCH-P709|SCH-P729|SM-T2558 - Samsung Mega - treat them like a regular phone.
- // @reference: http://www.labnol.org/software/kindle-user-agent-string/20378/
- 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE)\b',
+ // @todo: check for mobile friendly emails topic.
+ 'iPad' => 'iPad|iPad.*Mobile',
+ // Removed |^.*Android.*Nexus(?!(?:Mobile).)*$
+ // @see #442
+ 'NexusTablet' => 'Android.*Nexus[\s]+(7|9|10)',
+ 'SamsungTablet' => 'SAMSUNG.*Tablet|Galaxy.*Tab|SC-01C|GT-P1000|GT-P1003|GT-P1010|GT-P3105|GT-P6210|GT-P6800|GT-P6810|GT-P7100|GT-P7300|GT-P7310|GT-P7500|GT-P7510|SCH-I800|SCH-I815|SCH-I905|SGH-I957|SGH-I987|SGH-T849|SGH-T859|SGH-T869|SPH-P100|GT-P3100|GT-P3108|GT-P3110|GT-P5100|GT-P5110|GT-P6200|GT-P7320|GT-P7511|GT-N8000|GT-P8510|SGH-I497|SPH-P500|SGH-T779|SCH-I705|SCH-I915|GT-N8013|GT-P3113|GT-P5113|GT-P8110|GT-N8010|GT-N8005|GT-N8020|GT-P1013|GT-P6201|GT-P7501|GT-N5100|GT-N5105|GT-N5110|SHV-E140K|SHV-E140L|SHV-E140S|SHV-E150S|SHV-E230K|SHV-E230L|SHV-E230S|SHW-M180K|SHW-M180L|SHW-M180S|SHW-M180W|SHW-M300W|SHW-M305W|SHW-M380K|SHW-M380S|SHW-M380W|SHW-M430W|SHW-M480K|SHW-M480S|SHW-M480W|SHW-M485W|SHW-M486W|SHW-M500W|GT-I9228|SCH-P739|SCH-I925|GT-I9200|GT-P5200|GT-P5210|GT-P5210X|SM-T311|SM-T310|SM-T310X|SM-T210|SM-T210R|SM-T211|SM-P600|SM-P601|SM-P605|SM-P900|SM-P901|SM-T217|SM-T217A|SM-T217S|SM-P6000|SM-T3100|SGH-I467|XE500|SM-T110|GT-P5220|GT-I9200X|GT-N5110X|GT-N5120|SM-P905|SM-T111|SM-T2105|SM-T315|SM-T320|SM-T320X|SM-T321|SM-T520|SM-T525|SM-T530NU|SM-T230NU|SM-T330NU|SM-T900|XE500T1C|SM-P605V|SM-P905V|SM-T337V|SM-T537V|SM-T707V|SM-T807V|SM-P600X|SM-P900X|SM-T210X|SM-T230|SM-T230X|SM-T325|GT-P7503|SM-T531|SM-T330|SM-T530|SM-T705|SM-T705C|SM-T535|SM-T331|SM-T800|SM-T700|SM-T537|SM-T807|SM-P907A|SM-T337A|SM-T537A|SM-T707A|SM-T807A|SM-T237|SM-T807P|SM-P607T|SM-T217T|SM-T337T|SM-T807T|SM-T116NQ|SM-P550|SM-T350|SM-T550|SM-T9000|SM-P9000|SM-T705Y|SM-T805|GT-P3113|SM-T710|SM-T810|SM-T360', // SCH-P709|SCH-P729|SM-T2558|GT-I9205 - Samsung Mega - treat them like a regular phone.
+ // http://docs.aws.amazon.com/silk/latest/developerguide/user-agent.html
+ 'Kindle' => 'Kindle|Silk.*Accelerated|Android.*\b(KFOT|KFTT|KFJWI|KFJWA|KFOTE|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|WFJWAE|KFSAWA|KFSAWI|KFASWI)\b',
// Only the Surface tablets with Windows RT are considered mobile.
- // @ref: http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
- 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;',
- // @ref: http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
- 'HPTablet' => 'HP Slate 7|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8',
- // @note: watch out for PadFone, see #132
- 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|TX201LA',
+ // http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx
+ 'SurfaceTablet' => 'Windows NT [0-9.]+; ARM;.*(Tablet|ARMBJS)',
+ // http://shopping1.hp.com/is-bin/INTERSHOP.enfinity/WFS/WW-USSMBPublicStore-Site/en_US/-/USD/ViewStandardCatalog-Browse?CatalogCategoryID=JfIQ7EN5lqMAAAEyDcJUDwMT
+ 'HPTablet' => 'HP Slate (7|8|10)|HP ElitePad 900|hp-tablet|EliteBook.*Touch|HP 8|Slate 21|HP SlateBook 10',
+ // Watch out for PadFone, see #132.
+ // http://www.asus.com/de/Tablets_Mobile/Memo_Pad_Products/
+ 'AsusTablet' => '^.*PadFone((?!Mobile).)*$|Transformer|TF101|TF101G|TF300T|TF300TG|TF300TL|TF700T|TF700KL|TF701T|TF810C|ME171|ME301T|ME302C|ME371MG|ME370T|ME372MG|ME172V|ME173X|ME400C|Slider SL101|\bK00F\b|\bK00C\b|\bK00E\b|\bK00L\b|TX201LA|ME176C|ME102A|\bM80TA\b|ME372CL|ME560CG|ME372CG|ME302KL| K010 | K017 |ME572C|ME103K|ME170C|ME171C|\bME70C\b|ME581C|ME581CL|ME8510C|ME181C',
'BlackBerryTablet' => 'PlayBook|RIM Tablet',
- 'HTCtablet' => 'HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200',
+ 'HTCtablet' => 'HTC_Flyer_P512|HTC Flyer|HTC Jetstream|HTC-P715a|HTC EVO View 4G|PG41200|PG09410',
'MotorolaTablet' => 'xoom|sholest|MZ615|MZ605|MZ505|MZ601|MZ602|MZ603|MZ604|MZ606|MZ607|MZ608|MZ609|MZ615|MZ616|MZ617',
'NookTablet' => 'Android.*Nook|NookColor|nook browser|BNRV200|BNRV200A|BNTV250|BNTV250A|BNTV400|BNTV600|LogicPD Zoom2',
- // @ref: http://www.acer.ro/ac/ro/RO/content/drivers
- // @ref: http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
- // @ref: http://us.acer.com/ac/en/US/content/group/tablets
- // @note: Can conflict with Micromax and Motorola phones codes.
- 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-830)\b|W3-810|\bA3-A10\b',
- // @ref: http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
- // @ref: http://us.toshiba.com/tablets/tablet-finder
- // @ref: http://www.toshiba.co.jp/regza/tablet/
+ // http://www.acer.ro/ac/ro/RO/content/drivers
+ // http://www.packardbell.co.uk/pb/en/GB/content/download (Packard Bell is part of Acer)
+ // http://us.acer.com/ac/en/US/content/group/tablets
+ // http://www.acer.de/ac/de/DE/content/models/tablets/
+ // Can conflict with Micromax and Motorola phones codes.
+ 'AcerTablet' => 'Android.*; \b(A100|A101|A110|A200|A210|A211|A500|A501|A510|A511|A700|A701|W500|W500P|W501|W501P|W510|W511|W700|G100|G100W|B1-A71|B1-710|B1-711|A1-810|A1-811|A1-830)\b|W3-810|\bA3-A10\b|\bA3-A11\b',
+ // http://eu.computers.toshiba-europe.com/innovation/family/Tablets/1098744/banner_id/tablet_footerlink/
+ // http://us.toshiba.com/tablets/tablet-finder
+ // http://www.toshiba.co.jp/regza/tablet/
'ToshibaTablet' => 'Android.*(AT100|AT105|AT200|AT205|AT270|AT275|AT300|AT305|AT1S5|AT500|AT570|AT700|AT830)|TOSHIBA.*FOLIO',
- // @ref: http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
- // @ref: http://www.lg.com/us/tablets
- 'LGTablet' => '\bL-06C|LG-V900|LG-V500|LG-V909|LG-V500|LG-V510|LG-VK810\b',
+ // http://www.nttdocomo.co.jp/english/service/developer/smart_phone/technical_info/spec/index.html
+ // http://www.lg.com/us/tablets
+ 'LGTablet' => '\bL-06C|LG-V909|LG-V900|LG-V700|LG-V510|LG-V500|LG-V410|LG-V400|LG-VK810\b',
'FujitsuTablet' => 'Android.*\b(F-01D|F-02F|F-05E|F-10D|M532|Q572)\b',
// Prestigio Tablets http://www.prestigio.com/support
- 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD',
- // @ref: http://support.lenovo.com/en_GB/downloads/default.page?#
- 'LenovoTablet' => 'IdeaTab|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A1000|A2107|A2109|A1107|B6000|B8000|B8080-F)',
- // @ref: http://www.yarvik.com/en/matrix/tablets/
+ 'PrestigioTablet' => 'PMP3170B|PMP3270B|PMP3470B|PMP7170B|PMP3370B|PMP3570C|PMP5870C|PMP3670B|PMP5570C|PMP5770D|PMP3970B|PMP3870C|PMP5580C|PMP5880D|PMP5780D|PMP5588C|PMP7280C|PMP7280C3G|PMP7280|PMP7880D|PMP5597D|PMP5597|PMP7100D|PER3464|PER3274|PER3574|PER3884|PER5274|PER5474|PMP5097CPRO|PMP5097|PMP7380D|PMP5297C|PMP5297C_QUAD|PMP812E|PMP812E3G|PMP812F|PMP810E|PMP880TD|PMT3017|PMT3037|PMT3047|PMT3057|PMT7008|PMT5887|PMT5001|PMT5002',
+ // http://support.lenovo.com/en_GB/downloads/default.page?#
+ 'LenovoTablet' => 'Idea(Tab|Pad)( A1|A10| K1|)|ThinkPad([ ]+)?Tablet|Lenovo.*(S2109|S2110|S5000|S6000|K3011|A3000|A3500|A1000|A2107|A2109|A1107|A5500|A7600|B6000|B8000|B8080)(-|)(FL|F|HV|H|)',
+ // http://www.dell.com/support/home/us/en/04/Products/tab_mob/tablets
+ 'DellTablet' => 'Venue 11|Venue 8|Venue 7|Dell Streak 10|Dell Streak 7',
+ // http://www.yarvik.com/en/matrix/tablets/
'YarvikTablet' => 'Android.*\b(TAB210|TAB211|TAB224|TAB250|TAB260|TAB264|TAB310|TAB360|TAB364|TAB410|TAB411|TAB420|TAB424|TAB450|TAB460|TAB461|TAB464|TAB465|TAB467|TAB468|TAB07-100|TAB07-101|TAB07-150|TAB07-151|TAB07-152|TAB07-200|TAB07-201-3G|TAB07-210|TAB07-211|TAB07-212|TAB07-214|TAB07-220|TAB07-400|TAB07-485|TAB08-150|TAB08-200|TAB08-201-3G|TAB08-201-30|TAB09-100|TAB09-211|TAB09-410|TAB10-150|TAB10-201|TAB10-211|TAB10-400|TAB10-410|TAB13-201|TAB274EUK|TAB275EUK|TAB374EUK|TAB462EUK|TAB474EUK|TAB9-200)\b',
'MedionTablet' => 'Android.*\bOYO\b|LIFE.*(P9212|P9514|P9516|S9512)|LIFETAB',
- 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT',
+ 'ArnovaTablet' => 'AN10G2|AN7bG3|AN7fG3|AN8G3|AN8cG3|AN7G3|AN9G3|AN7dG3|AN7dG3ST|AN7dG3ChildPad|AN10bG3|AN10bG3DT|AN9G2',
// http://www.intenso.de/kategorie_en.php?kategorie=33
// @todo: http://www.nbhkdz.com/read/b8e64202f92a2df129126bff.html - investigate
- 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab',
+ 'IntensoTablet' => 'INM8002KP|INM1010FP|INM805ND|Intenso Tab|TAB1004',
// IRU.ru Tablets http://www.iru.ru/catalog/soho/planetable/
'IRUTablet' => 'M702pro',
'MegafonTablet' => 'MegaFon V9|\bZTE V9\b|Android.*\bMT7A\b',
- // @ref: http://www.e-boda.ro/tablete-pc.html
+ // http://www.e-boda.ro/tablete-pc.html
'EbodaTablet' => 'E-Boda (Supreme|Impresspeed|Izzycomm|Essential)',
- // @ref: http://www.allview.ro/produse/droseries/lista-tablete-pc/
+ // http://www.allview.ro/produse/droseries/lista-tablete-pc/
'AllViewTablet' => 'Allview.*(Viva|Alldro|City|Speed|All TV|Frenzy|Quasar|Shine|TX1|AX1|AX2)',
- // @reference: http://wiki.archosfans.com/index.php?title=Main_Page
- 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|ARCHOS 101G10|Archos 101 Neon',
- // @ref: http://www.ainol.com/plugin.php?identifier=ainol&module=product
+ // http://wiki.archosfans.com/index.php?title=Main_Page
+ 'ArchosTablet' => '\b(101G9|80G9|A101IT)\b|Qilive 97R|Archos5|\bARCHOS (70|79|80|90|97|101|FAMILYPAD|)(b|)(G10| Cobalt| TITANIUM(HD|)| Xenon| Neon|XSK| 2| XS 2| PLATINUM| CARBON|GAMEPAD)\b',
+ // http://www.ainol.com/plugin.php?identifier=ainol&module=product
'AinolTablet' => 'NOVO7|NOVO8|NOVO10|Novo7Aurora|Novo7Basic|NOVO7PALADIN|novo9-Spark',
// @todo: inspect http://esupport.sony.com/US/p/select-system.pl?DIRECTOR=DRIVER
- // @ref: Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
- // @ref: http://www.sony.jp/support/tablet/
- 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551',
- // @ref: db + http://www.cube-tablet.com/buy-products.html
+ // Readers http://www.atsuhiro-me.net/ebook/sony-reader/sony-reader-web-browser
+ // http://www.sony.jp/support/tablet/
+ 'SonyTablet' => 'Sony.*Tablet|Xperia Tablet|Sony Tablet S|SO-03E|SGPT12|SGPT13|SGPT114|SGPT121|SGPT122|SGPT123|SGPT111|SGPT112|SGPT113|SGPT131|SGPT132|SGPT133|SGPT211|SGPT212|SGPT213|SGP311|SGP312|SGP321|EBRD1101|EBRD1102|EBRD1201|SGP351|SGP341|SGP511|SGP512|SGP521|SGP541|SGP551|SGP621|SGP612|SOT31',
+ // http://www.support.philips.com/support/catalog/worldproducts.jsp?userLanguage=en&userCountry=cn&categoryid=3G_LTE_TABLET_SU_CN_CARE&title=3G%20tablets%20/%20LTE%20range&_dyncharset=UTF-8
+ 'PhilipsTablet' => '\b(PI2010|PI3000|PI3100|PI3105|PI3110|PI3205|PI3210|PI3900|PI4010|PI7000|PI7100)\b',
+ // db + http://www.cube-tablet.com/buy-products.html
'CubeTablet' => 'Android.*(K8GT|U9GT|U10GT|U16GT|U17GT|U18GT|U19GT|U20GT|U23GT|U30GT)|CUBE U8GT',
- // @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
+ // http://www.cobyusa.com/?p=pcat&pcat_id=3001
'CobyTablet' => 'MID1042|MID1045|MID1125|MID1126|MID7012|MID7014|MID7015|MID7034|MID7035|MID7036|MID7042|MID7048|MID7127|MID8042|MID8048|MID8127|MID9042|MID9740|MID9742|MID7022|MID7010',
- // @ref: http://www.match.net.cn/products.asp
+ // http://www.match.net.cn/products.asp
'MIDTablet' => 'M9701|M9000|M9100|M806|M1052|M806|T703|MID701|MID713|MID710|MID727|MID760|MID830|MID728|MID933|MID125|MID810|MID732|MID120|MID930|MID800|MID731|MID900|MID100|MID820|MID735|MID980|MID130|MID833|MID737|MID960|MID135|MID860|MID736|MID140|MID930|MID835|MID733',
- // @ref: http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
- // @ref: http://www.imp3.net/14/show.php?itemid=20454
+ // http://www.msi.com/support
+ // @todo Research the Windows Tablets.
+ 'MSITablet' => 'MSI \b(Primo 73K|Primo 73L|Primo 81L|Primo 77|Primo 93|Primo 75|Primo 76|Primo 73|Primo 81|Primo 91|Primo 90|Enjoy 71|Enjoy 7|Enjoy 10)\b',
+ // @todo http://www.kyoceramobile.com/support/drivers/
+ // 'KyoceraTablet' => null,
+ // @todo http://intexuae.com/index.php/category/mobile-devices/tablets-products/
+ // 'IntextTablet' => null,
+ // http://pdadb.net/index.php?m=pdalist&list=SMiT (NoName Chinese Tablets)
+ // http://www.imp3.net/14/show.php?itemid=20454
'SMiTTablet' => 'Android.*(\bMID\b|MID-560|MTV-T1200|MTV-PND531|MTV-P1101|MTV-PND530)',
- // @ref: http://www.rock-chips.com/index.php?do=prod&pid=2
+ // http://www.rock-chips.com/index.php?do=prod&pid=2
'RockChipTablet' => 'Android.*(RK2818|RK2808A|RK2918|RK3066)|RK2738|RK2808A',
- // @ref: http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
+ // http://www.fly-phone.com/devices/tablets/ ; http://www.fly-phone.com/service/
'FlyTablet' => 'IQ310|Fly Vision',
- // @ref: http://www.bqreaders.com/gb/tablets-prices-sale.html
- 'bqTablet' => 'bq.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant)|Maxwell.*Lite|Maxwell.*Plus',
- // @ref: http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
- // @ref: http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
+ // http://www.bqreaders.com/gb/tablets-prices-sale.html
+ 'bqTablet' => 'Android.*(bq)?.*(Elcano|Curie|Edison|Maxwell|Kepler|Pascal|Tesla|Hypatia|Platon|Newton|Livingstone|Cervantes|Avant|Aquaris E10)|Maxwell.*Lite|Maxwell.*Plus',
+ // http://www.huaweidevice.com/worldwide/productFamily.do?method=index&directoryId=5011&treeId=3290
+ // http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index&directoryId=3372&treeId=0&tb=1&type=software (including legacy tablets)
'HuaweiTablet' => 'MediaPad|MediaPad 7 Youth|IDEOS S7|S7-201c|S7-202u|S7-101|S7-103|S7-104|S7-105|S7-106|S7-201|S7-Slim',
// Nec or Medias Tab
'NecTablet' => '\bN-06D|\bN-08D',
@@ -253,63 +309,63 @@ class Mobile_Detect
'PantechTablet' => 'Pantech.*P4100',
// Broncho Tablets: http://www.broncho.cn/ (hard to find)
'BronchoTablet' => 'Broncho.*(N701|N708|N802|a710)',
- // @ref: http://versusuk.com/support.html
+ // http://versusuk.com/support.html
'VersusTablet' => 'TOUCHPAD.*[78910]|\bTOUCHTAB\b',
- // @ref: http://www.zync.in/index.php/our-products/tablet-phablets
+ // http://www.zync.in/index.php/our-products/tablet-phablets
'ZyncTablet' => 'z1000|Z99 2G|z99|z930|z999|z990|z909|Z919|z900',
- // @ref: http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
+ // http://www.positivoinformatica.com.br/www/pessoal/tablet-ypy/
'PositivoTablet' => 'TB07STA|TB10STA|TB07FTA|TB10FTA',
- // @ref: https://www.nabitablet.com/
+ // https://www.nabitablet.com/
'NabiTablet' => 'Android.*\bNabi',
'KoboTablet' => 'Kobo Touch|\bK080\b|\bVox\b Build|\bArc\b Build',
// French Danew Tablets http://www.danew.com/produits-tablette.php
'DanewTablet' => 'DSlide.*\b(700|701R|702|703R|704|802|970|971|972|973|974|1010|1012)\b',
// Texet Tablets and Readers http://www.texet.ru/tablet/
'TexetTablet' => 'NaviPad|TB-772A|TM-7045|TM-7055|TM-9750|TM-7016|TM-7024|TM-7026|TM-7041|TM-7043|TM-7047|TM-8041|TM-9741|TM-9747|TM-9748|TM-9751|TM-7022|TM-7021|TM-7020|TM-7011|TM-7010|TM-7023|TM-7025|TM-7037W|TM-7038W|TM-7027W|TM-9720|TM-9725|TM-9737W|TM-1020|TM-9738W|TM-9740|TM-9743W|TB-807A|TB-771A|TB-727A|TB-725A|TB-719A|TB-823A|TB-805A|TB-723A|TB-715A|TB-707A|TB-705A|TB-709A|TB-711A|TB-890HD|TB-880HD|TB-790HD|TB-780HD|TB-770HD|TB-721HD|TB-710HD|TB-434HD|TB-860HD|TB-840HD|TB-760HD|TB-750HD|TB-740HD|TB-730HD|TB-722HD|TB-720HD|TB-700HD|TB-500HD|TB-470HD|TB-431HD|TB-430HD|TB-506|TB-504|TB-446|TB-436|TB-416|TB-146SE|TB-126SE',
- // @note: Avoid detecting 'PLAYSTATION 3' as mobile.
+ // Avoid detecting 'PLAYSTATION 3' as mobile.
'PlaystationTablet' => 'Playstation.*(Portable|Vita)',
- // @ref: http://www.trekstor.de/surftabs.html
- 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A',
- // @ref: http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
+ // http://www.trekstor.de/surftabs.html
+ 'TrekstorTablet' => 'ST10416-1|VT10416-1|ST70408-1|ST702xx-1|ST702xx-2|ST80208|ST97216|ST70104-2|VT10416-2|ST10216-2A|SurfTab',
+ // http://www.pyleaudio.com/Products.aspx?%2fproducts%2fPersonal-Electronics%2fTablets
'PyleAudioTablet' => '\b(PTBL10CEU|PTBL10C|PTBL72BC|PTBL72BCEU|PTBL7CEU|PTBL7C|PTBL92BC|PTBL92BCEU|PTBL9CEU|PTBL9CUK|PTBL9C)\b',
- // @ref: http://www.advandigital.com/index.php?link=content-product&jns=JP001
- // @Note: because of the short codenames we have to include whitespaces to reduce the possible conflicts.
+ // http://www.advandigital.com/index.php?link=content-product&jns=JP001
+ // because of the short codenames we have to include whitespaces to reduce the possible conflicts.
'AdvanTablet' => 'Android.* \b(E3A|T3X|T5C|T5B|T3E|T3C|T3B|T1J|T1F|T2A|T1H|T1i|E1C|T1-E|T5-A|T4|E1-B|T2Ci|T1-B|T1-D|O1-A|E1-A|T1-A|T3A|T4i)\b ',
- // @ref: http://www.danytech.com/category/tablet-pc
+ // http://www.danytech.com/category/tablet-pc
'DanyTechTablet' => 'Genius Tab G3|Genius Tab S2|Genius Tab Q3|Genius Tab G4|Genius Tab Q4|Genius Tab G-II|Genius TAB GII|Genius TAB GIII|Genius Tab S1',
- // @ref: http://www.galapad.net/product.html
+ // http://www.galapad.net/product.html
'GalapadTablet' => 'Android.*\bG1\b',
- // @ref: http://www.micromaxinfo.com/tablet/funbook
+ // http://www.micromaxinfo.com/tablet/funbook
'MicromaxTablet' => 'Funbook|Micromax.*\b(P250|P560|P360|P362|P600|P300|P350|P500|P275)\b',
// http://www.karbonnmobiles.com/products_tablet.php
'KarbonnTablet' => 'Android.*\b(A39|A37|A34|ST8|ST10|ST7|Smart Tab3|Smart Tab2)\b',
- // @ref: http://www.myallfine.com/Products.asp
+ // http://www.myallfine.com/Products.asp
'AllFineTablet' => 'Fine7 Genius|Fine7 Shine|Fine7 Air|Fine8 Style|Fine9 More|Fine10 Joy|Fine11 Wide',
- // @ref: http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
+ // http://www.proscanvideo.com/products-search.asp?itemClass=TABLET&itemnmbr=
'PROSCANTablet' => '\b(PEM63|PLT1023G|PLT1041|PLT1044|PLT1044G|PLT1091|PLT4311|PLT4311PL|PLT4315|PLT7030|PLT7033|PLT7033D|PLT7035|PLT7035D|PLT7044K|PLT7045K|PLT7045KB|PLT7071KG|PLT7072|PLT7223G|PLT7225G|PLT7777G|PLT7810K|PLT7849G|PLT7851G|PLT7852G|PLT8015|PLT8031|PLT8034|PLT8036|PLT8080K|PLT8082|PLT8088|PLT8223G|PLT8234G|PLT8235G|PLT8816K|PLT9011|PLT9045K|PLT9233G|PLT9735|PLT9760G|PLT9770G)\b',
- // @ref: http://www.yonesnav.com/products/products.php
+ // http://www.yonesnav.com/products/products.php
'YONESTablet' => 'BQ1078|BC1003|BC1077|RK9702|BC9730|BC9001|IT9001|BC7008|BC7010|BC708|BC728|BC7012|BC7030|BC7027|BC7026',
- // @ref: http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
+ // http://www.cjshowroom.com/eproducts.aspx?classcode=004001001
// China manufacturer makes tablets for different small brands (eg. http://www.zeepad.net/index.html)
'ChangJiaTablet' => 'TPC7102|TPC7103|TPC7105|TPC7106|TPC7107|TPC7201|TPC7203|TPC7205|TPC7210|TPC7708|TPC7709|TPC7712|TPC7110|TPC8101|TPC8103|TPC8105|TPC8106|TPC8203|TPC8205|TPC8503|TPC9106|TPC9701|TPC97101|TPC97103|TPC97105|TPC97106|TPC97111|TPC97113|TPC97203|TPC97603|TPC97809|TPC97205|TPC10101|TPC10103|TPC10106|TPC10111|TPC10203|TPC10205|TPC10503',
- // @ref: http://www.gloryunion.cn/products.asp
- // @ref: http://www.allwinnertech.com/en/apply/mobile.html
- // @ref: http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
+ // http://www.gloryunion.cn/products.asp
+ // http://www.allwinnertech.com/en/apply/mobile.html
+ // http://www.ptcl.com.pk/pd_content.php?pd_id=284 (EVOTAB)
// @todo: Softwiner tablets?
// aka. Cute or Cool tablets. Not sure yet, must research to avoid collisions.
'GUTablet' => 'TX-A1301|TX-M9002|Q702|kf026', // A12R|D75A|D77|D79|R83|A95|A106C|R15|A75|A76|D71|D72|R71|R73|R77|D82|R85|D92|A97|D92|R91|A10F|A77F|W71F|A78F|W78F|W81F|A97F|W91F|W97F|R16G|C72|C73E|K72|K73|R96G
- // @ref: http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
+ // http://www.pointofview-online.com/showroom.php?shop_mode=product_listing&category_id=118
'PointOfViewTablet' => 'TAB-P506|TAB-navi-7-3G-M|TAB-P517|TAB-P-527|TAB-P701|TAB-P703|TAB-P721|TAB-P731N|TAB-P741|TAB-P825|TAB-P905|TAB-P925|TAB-PR945|TAB-PL1015|TAB-P1025|TAB-PI1045|TAB-P1325|TAB-PROTAB[0-9]+|TAB-PROTAB25|TAB-PROTAB26|TAB-PROTAB27|TAB-PROTAB26XL|TAB-PROTAB2-IPS9|TAB-PROTAB30-IPS9|TAB-PROTAB25XXL|TAB-PROTAB26-IPS10|TAB-PROTAB30-IPS10',
- // @ref: http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
+ // http://www.overmax.pl/pl/katalog-produktow,p8/tablety,c14/
// @todo: add more tests.
'OvermaxTablet' => 'OV-(SteelCore|NewBase|Basecore|Baseone|Exellen|Quattor|EduTab|Solution|ACTION|BasicTab|TeddyTab|MagicTab|Stream|TB-08|TB-09)',
- // @ref: http://hclmetablet.com/India/index.php
+ // http://hclmetablet.com/India/index.php
'HCLTablet' => 'HCL.*Tablet|Connect-3G-2.0|Connect-2G-2.0|ME Tablet U1|ME Tablet U2|ME Tablet G1|ME Tablet X1|ME Tablet Y2|ME Tablet Sync',
- // @ref: http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
+ // http://www.edigital.hu/Tablet_es_e-book_olvaso/Tablet-c18385.html
'DPSTablet' => 'DPS Dream 9|DPS Dual 7',
- // @ref: http://www.visture.com/index.asp
+ // http://www.visture.com/index.asp
'VistureTablet' => 'V97 HD|i75 3G|Visture V4( HD)?|Visture V5( HD)?|Visture V10',
- // @ref: http://www.mijncresta.nl/tablet
+ // http://www.mijncresta.nl/tablet
'CrestaTablet' => 'CTP(-)?810|CTP(-)?818|CTP(-)?828|CTP(-)?838|CTP(-)?888|CTP(-)?978|CTP(-)?980|CTP(-)?987|CTP(-)?988|CTP(-)?989',
// MediaTek - http://www.mediatek.com/_en/01_products/02_proSys.php?cata_sn=1&cata1_sn=1&cata2_sn=309
'MediatekTablet' => '\bMT8125|MT8389|MT8135|MT8377\b',
@@ -327,7 +383,7 @@ class Mobile_Detect
// @note: no need to add all the tablet codes since they are guided by the first regex.
'StorexTablet' => 'eZee[_\']?(Tab|Go)[0-9]+|TabLC7|Looney Tunes Tab',
// Generic Vodafone tablets.
- 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10',
+ 'VodafoneTablet' => 'SmartTab([ ]+)?[0-9]+|SmartTabII10|SmartTabII7',
// French tablets - Essentiel B http://www.boulanger.fr/tablette_tactile_e-book/tablette_tactile_essentiel_b/cl_68908.htm?multiChoiceToDelete=brand&mc_brand=essentielb
// Aka: http://www.essentielb.fr/
'EssentielBTablet' => 'Smart[ \']?TAB[ ]+?[0-9]+|Family[ \']?TAB2',
@@ -335,7 +391,7 @@ class Mobile_Detect
'RossMoorTablet' => 'RM-790|RM-997|RMD-878G|RMD-974R|RMT-705A|RMT-701|RME-601|RMT-501|RMT-711',
// i-mobile http://product.i-mobilephone.com/Mobile_Device
'iMobileTablet' => 'i-mobile i-note',
- // @ref: http://www.tolino.de/de/vergleichen/
+ // http://www.tolino.de/de/vergleichen/
'TolinoTablet' => 'tolino tab [0-9.]+|tolino shine',
// AudioSonic - a Kmart brand
// http://www.kmart.com.au/webapp/wcs/stores/servlet/Search?langId=-1&storeId=10701&catalogId=10001&categoryId=193001&pageSize=72¤tPage=1&searchCategory=193001%2b4294965664&sortBy=p_MaxPrice%7c1
@@ -359,16 +415,48 @@ class Mobile_Detect
// http://www1.viewsonic.com/products/computing/tablets/
'ViewsonicTablet' => 'ViewPad 10pi|ViewPad 10e|ViewPad 10s|ViewPad E72|ViewPad7|ViewPad E100|ViewPad 7e|ViewSonic VB733|VB100a',
// http://www.odys.de/web/internet-tablet_en.html
- 'OdysTablet' => 'LOOX|XENO10|ODYS Space',
+ 'OdysTablet' => 'LOOX|XENO10|ODYS[ -](Space|EVO|Xpress|NOON)|\bXELIO\b|Xelio10Pro|XELIO7PHONETAB|XELIO10EXTREME|XELIOPT2|NEO_QUAD10',
// http://www.captiva-power.de/products.html#tablets-en
'CaptivaTablet' => 'CAPTIVA PAD',
// IconBIT - http://www.iconbit.com/products/tablets/
'IconbitTablet' => 'NetTAB|NT-3702|NT-3702S|NT-3702S|NT-3603P|NT-3603P|NT-0704S|NT-0704S|NT-3805C|NT-3805C|NT-0806C|NT-0806C|NT-0909T|NT-0909T|NT-0907S|NT-0907S|NT-0902S|NT-0902S',
- // @ref: http://www.tesco.com/direct/hudl/
+ // http://www.teclast.com/topic.php?channelID=70&topicID=140&pid=63
+ 'TeclastTablet' => 'T98 4G|\bP80\b|\bX90HD\b|X98 Air|X98 Air 3G|\bX89\b|P80 3G|\bX80h\b|P98 Air|\bX89HD\b|P98 3G|\bP90HD\b|P89 3G|X98 3G|\bP70h\b|P79HD 3G|G18d 3G|\bP79HD\b|\bP89s\b|\bA88\b|\bP10HD\b|\bP19HD\b|G18 3G|\bP78HD\b|\bA78\b|\bP75\b|G17s 3G|G17h 3G|\bP85t\b|\bP90\b|\bP11\b|\bP98t\b|\bP98HD\b|\bG18d\b|\bP85s\b|\bP11HD\b|\bP88s\b|\bA80HD\b|\bA80se\b|\bA10h\b|\bP89\b|\bP78s\b|\bG18\b|\bP85\b|\bA70h\b|\bA70\b|\bG17\b|\bP18\b|\bA80s\b|\bA11s\b|\bP88HD\b|\bA80h\b|\bP76s\b|\bP76h\b|\bP98\b|\bA10HD\b|\bP78\b|\bP88\b|\bA11\b|\bA10t\b|\bP76a\b|\bP76t\b|\bP76e\b|\bP85HD\b|\bP85a\b|\bP86\b|\bP75HD\b|\bP76v\b|\bA12\b|\bP75a\b|\bA15\b|\bP76Ti\b|\bP81HD\b|\bA10\b|\bT760VE\b|\bT720HD\b|\bP76\b|\bP73\b|\bP71\b|\bP72\b|\bT720SE\b|\bC520Ti\b|\bT760\b|\bT720VE\b|T720-3GE|T720-WiFi',
+ // Onda - http://www.onda-tablet.com/buy-android-onda.html?dir=desc&limit=all&order=price
+ 'OndaTablet' => '\b(V975i|Vi30|VX530|V701|Vi60|V701s|Vi50|V801s|V719|Vx610w|VX610W|V819i|Vi10|VX580W|Vi10|V711s|V813|V811|V820w|V820|Vi20|V711|VI30W|V712|V891w|V972|V819w|V820w|Vi60|V820w|V711|V813s|V801|V819|V975s|V801|V819|V819|V818|V811|V712|V975m|V101w|V961w|V812|V818|V971|V971s|V919|V989|V116w|V102w|V973|Vi40)\b[\s]+',
+ 'JaytechTablet' => 'TPC-PA762',
+ 'BlaupunktTablet' => 'Endeavour 800NG|Endeavour 1010',
+ // http://www.digma.ru/support/download/
+ // @todo: Ebooks also (if requested)
+ 'DigmaTablet' => '\b(iDx10|iDx9|iDx8|iDx7|iDxD7|iDxD8|iDsQ8|iDsQ7|iDsQ8|iDsD10|iDnD7|3TS804H|iDsQ11|iDj7|iDs10)\b',
+ // http://www.evolioshop.com/ro/tablete-pc.html
+ // http://www.evolio.ro/support/downloads_static.html?cat=2
+ // @todo: Research some more
+ 'EvolioTablet' => 'ARIA_Mini_wifi|Aria[ _]Mini|Evolio X10|Evolio X7|Evolio X8|\bEvotab\b|\bNeura\b',
+ // @todo http://www.lavamobiles.com/tablets-data-cards
+ 'LavaTablet' => 'QPAD E704|\bIvoryS\b|E-TAB IVORY|\bE-TAB\b',
+ // https://www.celkonmobiles.com/?_a=categoryphones&sid=2
+ 'CelkonTablet' => 'CT695|CT888|CT[\s]?910|CT7 Tab|CT9 Tab|CT3 Tab|CT2 Tab|CT1 Tab|C820|C720|\bCT-1\b',
+ // http://www.wolderelectronics.com/productos/manuales-y-guias-rapidas/categoria-2-miTab
+ 'WolderTablet' => 'miTab \b(DIAMOND|SPACE|BROOKLYN|NEO|FLY|MANHATTAN|FUNK|EVOLUTION|SKY|GOCAR|IRON|GENIUS|POP|MINT|EPSILON|BROADWAY|JUMP|HOP|LEGEND|NEW AGE|LINE|ADVANCE|FEEL|FOLLOW|LIKE|LINK|LIVE|THINK|FREEDOM|CHICAGO|CLEVELAND|BALTIMORE-GH|IOWA|BOSTON|SEATTLE|PHOENIX|DALLAS|IN 101|MasterChef)\b',
+ // http://www.mi.com/en
+ 'MiTablet' => '\bMI PAD\b|\bHM NOTE 1W\b',
+ // http://www.nbru.cn/index.html
+ 'NibiruTablet' => 'Nibiru M1|Nibiru Jupiter One',
+ // http://navroad.com/products/produkty/tablety/
+ 'NexoTablet' => 'NEXO NOVA|NEXO 10|NEXO AVIO|NEXO FREE|NEXO GO|NEXO EVO|NEXO 3G|NEXO SMART|NEXO KIDDO|NEXO MOBI',
+ // http://leader-online.com/new_site/product-category/tablets/
+ // http://www.leader-online.net.au/List/Tablet
+ 'LeaderTablet' => 'TBLT10Q|TBLT10I|TBL-10WDKB|TBL-10WDKBO2013|TBL-W230V2|TBL-W450|TBL-W500|SV572|TBLT7I|TBA-AC7-8G|TBLT79|TBL-8W16|TBL-10W32|TBL-10WKB|TBL-W100',
+ // http://www.datawind.com/ubislate/
+ 'UbislateTablet' => 'UbiSlate[\s]?7C',
+ // http://www.pocketbook-int.com/ru/support
+ 'PocketBookTablet' => 'Pocketbook',
+ // http://www.tesco.com/direct/hudl/
'Hudl' => 'Hudl HT7S3',
- // @ref: http://www.telstra.com.au/home-phone/thub-2/
+ // http://www.telstra.com.au/home-phone/thub-2/
'TelstraTablet' => 'T-Hub2',
- 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4',
+ 'GenericTablet' => 'Android.*\b97D\b|Tablet(?!.*PC)|BNTV250A|MID-WCDMA|LogicPD Zoom2|\bA7EB\b|CatNova8|A1_07|CT704|CT1002|\bM721\b|rk30sdk|\bEVOTAB\b|M758A|ET904|ALUMIUM10|Smartfren Tab|Endeavour 1010|Tablet-PC-4|Tagi Tab|\bM6pro\b|CT1020W|arc 10HD|\bJolla\b|\bTP750\b'
);
/**
@@ -386,7 +474,8 @@ class Mobile_Detect
// @reference: http://en.wikipedia.org/wiki/Windows_Phone
// http://wifeng.cn/?r=blog&a=view&id=106
// http://nicksnettravels.builttoroam.com/post/2011/01/10/Bogus-Windows-Phone-7-User-Agent-String.aspx
- 'WindowsPhoneOS' => 'Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7',
+ // http://msdn.microsoft.com/library/ms537503.aspx
+ 'WindowsPhoneOS' => 'Windows Phone 8.1|Windows Phone 8.0|Windows Phone OS|XBLWP7|ZuneWP7|Windows NT 6.[23]; ARM;',
'iOS' => '\biPhone.*Mobile|\biPod|\biPad',
// http://en.wikipedia.org/wiki/MeeGo
// @todo: research MeeGo in UAs
@@ -417,20 +506,26 @@ class Mobile_Detect
'TeaShark' => 'teashark',
'Blazer' => 'Blazer',
// @reference: http://developer.apple.com/library/safari/#documentation/AppleApplications/Reference/SafariWebContent/OptimizingforSafarioniPhone/OptimizingforSafarioniPhone.html#//apple_ref/doc/uid/TP40006517-SW3
- 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile',
- // @ref: http://en.wikipedia.org/wiki/Midori_(web_browser)
+ 'Safari' => 'Version.*Mobile.*Safari|Safari.*Mobile|MobileSafari',
+ // http://en.wikipedia.org/wiki/Midori_(web_browser)
//'Midori' => 'midori',
'Tizen' => 'Tizen',
'UCBrowser' => 'UC.*Browser|UCWEB',
- // @ref: https://github.com/serbanghita/Mobile-Detect/issues/7
+ 'baiduboxapp' => 'baiduboxapp',
+ 'baidubrowser' => 'baidubrowser',
+ // https://github.com/serbanghita/Mobile-Detect/issues/7
'DiigoBrowser' => 'DiigoBrowser',
// http://www.puffinbrowser.com/index.php
'Puffin' => 'Puffin',
- // @ref: http://mercury-browser.com/index.html
+ // http://mercury-browser.com/index.html
'Mercury' => '\bMercury\b',
+ // http://en.wikipedia.org/wiki/Obigo_Browser
+ 'ObigoBrowser' => 'Obigo',
+ // http://en.wikipedia.org/wiki/NetFront
+ 'NetFront' => 'NF-Browser',
// @reference: http://en.wikipedia.org/wiki/Minimo
// http://en.wikipedia.org/wiki/Vision_Mobile_Browser
- 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger'
+ 'GenericBrowser' => 'NokiaBrowser|OviBrowser|OneBrowser|TwonkyBeamBrowser|SEMC.*Browser|FlyFlow|Minimo|NetFront|Novarra-Vision|MQQBrowser|MicroMessenger',
);
/**
@@ -440,15 +535,16 @@ class Mobile_Detect
*/
protected static $utilities = array(
// Experimental. When a mobile device wants to switch to 'Desktop Mode'.
- // @ref: http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
- // @ref: https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
+ // http://scottcate.com/technology/windows-phone-8-ie10-desktop-or-mobile/
+ // https://github.com/serbanghita/Mobile-Detect/issues/57#issuecomment-15024011
+ // https://developers.facebook.com/docs/sharing/best-practices
+ 'Bot' => 'Googlebot|facebookexternalhit|AdsBot-Google|Google Keyword Suggestion|Facebot|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|Exabot|MJ12bot|YandexImages|TurnitinBot|Pingdom',
+ 'MobileBot' => 'Googlebot-Mobile|AdsBot-Google-Mobile|YahooSeeker/M1A1-R2D2',
'DesktopMode' => 'WPDesktop',
'TV' => 'SonyDTV|HbbTV', // experimental
'WebKit' => '(webkit)[ /]([\w.]+)',
- 'Bot' => 'Googlebot|DoCoMo|YandexBot|bingbot|ia_archiver|AhrefsBot|Ezooms|GSLFbot|WBSearchBot|Twitterbot|TweetmemeBot|Twikle|PaperLiBot|Wotbox|UnwindFetchor|facebookexternalhit',
- 'MobileBot' => 'Googlebot-Mobile|DoCoMo|YahooSeeker/M1A1-R2D2',
// @todo: Include JXD consoles.
- 'Console' => '\b(Nintendo|Nintendo WiiU|PLAYSTATION|Xbox)\b',
+ 'Console' => '\b(Nintendo|Nintendo WiiU|Nintendo 3DS|PLAYSTATION|Xbox)\b',
'Watch' => 'SM-V700',
);
@@ -500,8 +596,9 @@ class Mobile_Detect
// @reference: https://developer.mozilla.org/en-US/docs/User_Agent_Strings_Reference
'Firefox' => 'Firefox/[VER]',
'Fennec' => 'Fennec/[VER]',
- // @reference: http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
- 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];'),
+ // http://msdn.microsoft.com/en-us/library/ms537503(v=vs.85).aspx
+ // https://msdn.microsoft.com/en-us/library/ie/hh869301(v=vs.85).aspx
+ 'IE' => array('IEMobile/[VER];', 'IEMobile [VER]', 'MSIE [VER];', 'Trident/[0-9.]+;.*rv:[VER]'),
// http://en.wikipedia.org/wiki/NetFront
'NetFront' => 'NetFront/[VER]',
'NokiaBrowser' => 'NokiaBrowser/[VER]',
@@ -511,6 +608,9 @@ class Mobile_Detect
'UC Browser' => 'UC Browser[VER]',
'MQQBrowser' => 'MQQBrowser/[VER]',
'MicroMessenger' => 'MicroMessenger/[VER]',
+ 'baiduboxapp' => 'baiduboxapp/[VER]',
+ 'baidubrowser' => 'baidubrowser/[VER]',
+ 'Iron' => 'Iron/[VER]',
// @note: Safari 7534.48.3 is actually Version 5.1.
// @note: On BlackBerry the Version is overwriten by the OS.
'Safari' => array( 'Version/[VER]', 'Safari/[VER]' ),
@@ -524,7 +624,7 @@ class Mobile_Detect
'Presto' => 'Presto/[VER]',
// OS
- 'iOS' => ' \bOS\b [VER] ',
+ 'iOS' => ' \bi?OS\b [VER][ ;]{1}',
'Android' => 'Android [VER]',
'BlackBerry' => array('BlackBerry[\w]+/[VER]', 'BlackBerry.*Version/[VER]', 'Version/[VER]'),
'BREW' => 'BREW [VER]',
@@ -543,15 +643,15 @@ class Mobile_Detect
/**
* Construct an instance of this class.
*
- * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
- * If left empty, will use the global _SERVER['HTTP_*'] vars instead.
+ * @param array $headers Specify the headers as injection. Should be PHP _SERVER flavored.
+ * If left empty, will use the global _SERVER['HTTP_*'] vars instead.
* @param string $userAgent Inject the User-Agent header. If null, will use HTTP_USER_AGENT
* from the $headers array instead.
*/
public function __construct(
array $headers = null,
$userAgent = null
- ){
+ ) {
$this->setHttpHeaders($headers);
$this->setUserAgent($userAgent);
}
@@ -577,21 +677,24 @@ class Mobile_Detect
*/
public function setHttpHeaders($httpHeaders = null)
{
- //use global _SERVER if $httpHeaders aren't defined
+ // use global _SERVER if $httpHeaders aren't defined
if (!is_array($httpHeaders) || !count($httpHeaders)) {
$httpHeaders = $_SERVER;
}
- //clear existing headers
+ // clear existing headers
$this->httpHeaders = array();
- //Only save HTTP headers. In PHP land, that means only _SERVER vars that
- //start with HTTP_.
+ // Only save HTTP headers. In PHP land, that means only _SERVER vars that
+ // start with HTTP_.
foreach ($httpHeaders as $key => $value) {
- if (substr($key,0,5) == 'HTTP_') {
+ if (substr($key, 0, 5) === 'HTTP_') {
$this->httpHeaders[$key] = $value;
}
}
+
+ // In case we're dealing with CloudFront, we need to know.
+ $this->setCfHeaders($httpHeaders);
}
/**
@@ -616,13 +719,13 @@ class Mobile_Detect
*/
public function getHttpHeader($header)
{
- //are we using PHP-flavored headers?
+ // are we using PHP-flavored headers?
if (strpos($header, '_') === false) {
$header = str_replace('-', '_', $header);
$header = strtoupper($header);
}
- //test the alternate, too
+ // test the alternate, too
$altHeader = 'HTTP_' . $header;
//Test both the regular and the HTTP_ prefix
@@ -651,6 +754,47 @@ class Mobile_Detect
return self::$uaHttpHeaders;
}
+
+ /**
+ * Set CloudFront headers
+ * http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/header-caching.html#header-caching-web-device
+ *
+ * @param array $cfHeaders List of HTTP headers
+ *
+ * @return boolean If there were CloudFront headers to be set
+ */
+ public function setCfHeaders($cfHeaders = null) {
+ // use global _SERVER if $cfHeaders aren't defined
+ if (!is_array($cfHeaders) || !count($cfHeaders)) {
+ $cfHeaders = $_SERVER;
+ }
+
+ // clear existing headers
+ $this->cloudfrontHeaders = array();
+
+ // Only save CLOUDFRONT headers. In PHP land, that means only _SERVER vars that
+ // start with cloudfront-.
+ $response = false;
+ foreach ($cfHeaders as $key => $value) {
+ if (substr(strtolower($key), 0, 16) === 'http_cloudfront_') {
+ $this->cloudfrontHeaders[strtoupper($key)] = $value;
+ $response = true;
+ }
+ }
+
+ return $response;
+ }
+
+ /**
+ * Retrieves the cloudfront headers.
+ *
+ * @return array
+ */
+ public function getCfHeaders()
+ {
+ return $this->cloudfrontHeaders;
+ }
+
/**
* Set the User-Agent to be used.
*
@@ -660,21 +804,28 @@ class Mobile_Detect
*/
public function setUserAgent($userAgent = null)
{
- if (!empty($userAgent)) {
+ // Invalidate cache due to #375
+ $this->cache = array();
+
+ if (false === empty($userAgent)) {
return $this->userAgent = $userAgent;
} else {
-
$this->userAgent = null;
-
- foreach($this->getUaHttpHeaders() as $altHeader){
- if(!empty($this->httpHeaders[$altHeader])){ // @todo: should use getHttpHeader(), but it would be slow. (Serban)
+ foreach ($this->getUaHttpHeaders() as $altHeader) {
+ if (false === empty($this->httpHeaders[$altHeader])) { // @todo: should use getHttpHeader(), but it would be slow. (Serban)
$this->userAgent .= $this->httpHeaders[$altHeader] . " ";
}
}
- return $this->userAgent = (!empty($this->userAgent) ? trim($this->userAgent) : null);
-
+ if (!empty($this->userAgent)) {
+ return $this->userAgent = trim($this->userAgent);
+ }
}
+
+ if (count($this->getCfHeaders()) > 0) {
+ return $this->userAgent = 'Amazon CloudFront';
+ }
+ return $this->userAgent = null;
}
/**
@@ -702,13 +853,23 @@ class Mobile_Detect
$type = self::DETECTION_TYPE_MOBILE;
}
- if ($type != self::DETECTION_TYPE_MOBILE && $type != self::DETECTION_TYPE_EXTENDED) {
+ if ($type !== self::DETECTION_TYPE_MOBILE && $type !== self::DETECTION_TYPE_EXTENDED) {
return;
}
$this->detectionType = $type;
}
+ public function getMatchingRegex()
+ {
+ return $this->matchingRegex;
+ }
+
+ public function getMatchesArray()
+ {
+ return $this->matchesArray;
+ }
+
/**
* Retrieve the list of known phone devices.
*
@@ -847,14 +1008,15 @@ class Mobile_Detect
public function checkHttpHeadersForMobile()
{
- foreach($this->getMobileHeaders() as $mobileHeader => $matchType){
- if( isset($this->httpHeaders[$mobileHeader]) ){
- if( is_array($matchType['matches']) ){
- foreach($matchType['matches'] as $_match){
- if( strpos($this->httpHeaders[$mobileHeader], $_match) !== false ){
+ foreach ($this->getMobileHeaders() as $mobileHeader => $matchType) {
+ if (isset($this->httpHeaders[$mobileHeader])) {
+ if (is_array($matchType['matches'])) {
+ foreach ($matchType['matches'] as $_match) {
+ if (strpos($this->httpHeaders[$mobileHeader], $_match) !== false) {
return true;
}
}
+
return false;
} else {
return true;
@@ -877,8 +1039,8 @@ class Mobile_Detect
*/
public function __call($name, $arguments)
{
- //make sure the name starts with 'is', otherwise
- if (substr($name, 0, 2) != 'is') {
+ // make sure the name starts with 'is', otherwise
+ if (substr($name, 0, 2) !== 'is') {
throw new BadMethodCallException("No such method exists: $name");
}
@@ -892,7 +1054,7 @@ class Mobile_Detect
/**
* Find a detection rule that matches the current User-agent.
*
- * @param null $userAgent deprecated
+ * @param null $userAgent deprecated
* @return boolean
*/
protected function matchDetectionRulesAgainstUA($userAgent = null)
@@ -902,6 +1064,7 @@ class Mobile_Detect
if (empty($_regex)) {
continue;
}
+
if ($this->match($_regex, $userAgent)) {
return true;
}
@@ -913,36 +1076,38 @@ class Mobile_Detect
/**
* Search for a certain key in the rules array.
* If the key is found the try to match the corresponding
- * regex agains the User-Agent.
+ * regex against the User-Agent.
*
* @param string $key
- * @param null $userAgent deprecated
- * @return mixed
+ *
+ * @return boolean
*/
- protected function matchUAAgainstKey($key, $userAgent = null)
+ protected function matchUAAgainstKey($key)
{
// Make the keys lowercase so we can match: isIphone(), isiPhone(), isiphone(), etc.
$key = strtolower($key);
+ if (false === isset($this->cache[$key])) {
- //change the keys to lower case
- $_rules = array_change_key_case($this->getRules());
+ // change the keys to lower case
+ $_rules = array_change_key_case($this->getRules());
- if (array_key_exists($key, $_rules)) {
- if (empty($_rules[$key])) {
- return null;
+ if (false === empty($_rules[$key])) {
+ $this->cache[$key] = $this->match($_rules[$key]);
}
- return $this->match($_rules[$key], $userAgent);
+ if (false === isset($this->cache[$key])) {
+ $this->cache[$key] = false;
+ }
}
- return false;
+ return $this->cache[$key];
}
/**
* Check if the device is mobile.
* Returns true if any type of mobile device detected, including special ones
- * @param null $userAgent deprecated
- * @param null $httpHeaders deprecated
+ * @param null $userAgent deprecated
+ * @param null $httpHeaders deprecated
* @return bool
*/
public function isMobile($userAgent = null, $httpHeaders = null)
@@ -956,6 +1121,14 @@ class Mobile_Detect
$this->setUserAgent($userAgent);
}
+ // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
+ if ($this->getUserAgent() === 'Amazon CloudFront') {
+ $cfHeaders = $this->getCfHeaders();
+ if(array_key_exists('HTTP_CLOUDFRONT_IS_MOBILE_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_MOBILE_VIEWER'] === 'true') {
+ return true;
+ }
+ }
+
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
if ($this->checkHttpHeadersForMobile()) {
@@ -976,6 +1149,14 @@ class Mobile_Detect
*/
public function isTablet($userAgent = null, $httpHeaders = null)
{
+ // Check specifically for cloudfront headers if the useragent === 'Amazon CloudFront'
+ if ($this->getUserAgent() === 'Amazon CloudFront') {
+ $cfHeaders = $this->getCfHeaders();
+ if(array_key_exists('HTTP_CLOUDFRONT_IS_TABLET_VIEWER', $cfHeaders) && $cfHeaders['HTTP_CLOUDFRONT_IS_TABLET_VIEWER'] === 'true') {
+ return true;
+ }
+ }
+
$this->setDetectionType(self::DETECTION_TYPE_MOBILE);
foreach (self::$tabletDevices as $_regex) {
@@ -992,9 +1173,9 @@ class Mobile_Detect
* userAgent.
* @todo: The httpHeaders part is not yet used.
*
- * @param string $key
- * @param string $userAgent deprecated
- * @param string $httpHeaders deprecated
+ * @param string $key
+ * @param string $userAgent deprecated
+ * @param string $httpHeaders deprecated
* @return bool|int|null
*/
public function is($key, $userAgent = null, $httpHeaders = null)
@@ -1030,10 +1211,14 @@ class Mobile_Detect
*/
public function match($regex, $userAgent = null)
{
- // Escape the special character which is the delimiter.
- $regex = str_replace('/', '\/', $regex);
+ $match = (bool) preg_match(sprintf('#%s#is', $regex), (false === empty($userAgent) ? $userAgent : $this->userAgent), $matches);
+ // If positive match is found, store the results for debug.
+ if ($match) {
+ $this->matchingRegex = $regex;
+ $this->matchesArray = $matches;
+ }
- return (bool) preg_match('/'.$regex.'/is', (!empty($userAgent) ? $userAgent : $this->userAgent));
+ return $match;
}
/**
@@ -1072,11 +1257,11 @@ class Mobile_Detect
* Will return a float number. (eg. 2_0 will return 2.0, 4.3.1 will return 4.31)
*
* @param string $propertyName The name of the property. See self::getProperties() array
- * keys for all possible properties.
- * @param string $type Either self::VERSION_TYPE_STRING to get a string value or
- * self::VERSION_TYPE_FLOAT indicating a float value. This parameter
- * is optional and defaults to self::VERSION_TYPE_STRING. Passing an
- * invalid parameter will default to the this type as well.
+ * keys for all possible properties.
+ * @param string $type Either self::VERSION_TYPE_STRING to get a string value or
+ * self::VERSION_TYPE_FLOAT indicating a float value. This parameter
+ * is optional and defaults to self::VERSION_TYPE_STRING. Passing an
+ * invalid parameter will default to the this type as well.
*
* @return string|float The version of the property we are trying to extract.
*/
@@ -1086,15 +1271,15 @@ class Mobile_Detect
return false;
}
- //set the $type to the default if we don't recognize the type
- if ($type != self::VERSION_TYPE_STRING && $type != self::VERSION_TYPE_FLOAT) {
+ // set the $type to the default if we don't recognize the type
+ if ($type !== self::VERSION_TYPE_STRING && $type !== self::VERSION_TYPE_FLOAT) {
$type = self::VERSION_TYPE_STRING;
}
$properties = self::getProperties();
// Check if the property exists in the properties array.
- if (array_key_exists($propertyName, $properties)) {
+ if (true === isset($properties[$propertyName])) {
// Prepare the pattern to be matched.
// Make sure we always deal with an array (string is converted).
@@ -1104,14 +1289,11 @@ class Mobile_Detect
$propertyPattern = str_replace('[VER]', self::VER, $propertyMatchString);
- // Escape the special character which is the delimiter.
- $propertyPattern = str_replace('/', '\/', $propertyPattern);
-
// Identify and extract the version.
- preg_match('/'.$propertyPattern.'/is', $this->userAgent, $match);
+ preg_match(sprintf('#%s#is', $propertyPattern), $this->userAgent, $match);
- if (!empty($match[1])) {
- $version = ( $type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1] );
+ if (false === empty($match[1])) {
+ $version = ($type == self::VERSION_TYPE_FLOAT ? $this->prepareVersionNo($match[1]) : $match[1]);
return $version;
}
@@ -1133,10 +1315,10 @@ class Mobile_Detect
$isMobile = $this->isMobile();
if (
- // Apple iOS 3.2-5.1 - Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3), iPad 3 (5.1), original iPhone (3.1), iPhone 3 (3.2), 3GS (4.3), 4 (4.3 / 5.0), and 4S (5.1)
- $this->isIOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)>=4.3 ||
- $this->isIOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)>=3.1 ||
- $this->isIOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)>=3.1 ||
+ // Apple iOS 4-7.0 – Tested on the original iPad (4.3 / 5.0), iPad 2 (4.3 / 5.1 / 6.1), iPad 3 (5.1 / 6.0), iPad Mini (6.1), iPad Retina (7.0), iPhone 3GS (4.3), iPhone 4 (4.3 / 5.1), iPhone 4S (5.1 / 6.0), iPhone 5 (6.0), and iPhone 5S (7.0)
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) >= 4.3 ||
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) >= 4.3 ||
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) >= 4.3 ||
// Android 2.1-2.3 - Tested on the HTC Incredible (2.2), original Droid (2.2), HTC Aria (2.1), Google Nexus S (2.3). Functional on 1.5 & 1.6 but performance may be sluggish, tested on Google G1 (1.5)
// Android 3.1 (Honeycomb) - Tested on the Samsung Galaxy Tab 10.1 and Motorola XOOM
@@ -1144,31 +1326,30 @@ class Mobile_Detect
// Android 4.1 (Jelly Bean) - Tested on a Galaxy Nexus and Galaxy 7
( $this->version('Android', self::VERSION_TYPE_FLOAT)>2.1 && $this->is('Webkit') ) ||
- // Windows Phone 7-7.5 - Tested on the HTC Surround (7.0) HTC Trophy (7.5), LG-E900 (7.5), Nokia Lumia 800
- $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT)>=7.0 ||
+ // Windows Phone 7.5-8 - Tested on the HTC Surround (7.5), HTC Trophy (7.5), LG-E900 (7.5), Nokia 800 (7.8), HTC Mazaa (7.8), Nokia Lumia 520 (8), Nokia Lumia 920 (8), HTC 8x (8)
+ $this->version('Windows Phone OS', self::VERSION_TYPE_FLOAT) >= 7.5 ||
- // Blackberry 7 - Tested on BlackBerry Torch 9810
- // Blackberry 6.0 - Tested on the Torch 9800 and Style 9670
- $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=6.0 ||
+ // Tested on the Torch 9800 (6) and Style 9670 (6), BlackBerry® Torch 9810 (7), BlackBerry Z10 (10)
+ $this->is('BlackBerry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 6.0 ||
// Blackberry Playbook (1.0-2.0) - Tested on PlayBook
$this->match('Playbook.*Tablet') ||
- // Palm WebOS (1.4-2.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0)
- ( $this->version('webOS', self::VERSION_TYPE_FLOAT)>=1.4 && $this->match('Palm|Pre|Pixi') ) ||
+ // Palm WebOS (1.4-3.0) - Tested on the Palm Pixi (1.4), Pre (1.4), Pre 2 (2.0), HP TouchPad (3.0)
+ ( $this->version('webOS', self::VERSION_TYPE_FLOAT) >= 1.4 && $this->match('Palm|Pre|Pixi') ) ||
// Palm WebOS 3.0 - Tested on HP TouchPad
$this->match('hp.*TouchPad') ||
- // Firefox Mobile (12 Beta) - Tested on Android 2.3 device
- ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT)>=12 ) ||
+ // Firefox Mobile 18 - Tested on Android 2.3 and 4.1 devices
+ ( $this->is('Firefox') && $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 18 ) ||
// Chrome for Android - Tested on Android 4.0, 4.1 device
- ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=4.0 ) ||
+ ( $this->is('Chrome') && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 4.0 ) ||
// Skyfire 4.1 - Tested on Android 2.3 device
- ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT)>=4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
+ ( $this->is('Skyfire') && $this->version('Skyfire', self::VERSION_TYPE_FLOAT) >= 4.1 && $this->is('AndroidOS') && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
// Opera Mobile 11.5-12: Tested on Android 2.3
- ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>11 && $this->is('AndroidOS') ) ||
+ ( $this->is('Opera') && $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11.5 && $this->is('AndroidOS') ) ||
// Meego 1.2 - Tested on Nokia 950 and N9
$this->is('MeeGoOS') ||
@@ -1178,71 +1359,76 @@ class Mobile_Detect
// Samsung Bada 2.0 - Tested on a Samsung Wave 3, Dolphin browser
// @todo: more tests here!
- $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT)>=2.0 ||
+ $this->is('Dolfin') && $this->version('Bada', self::VERSION_TYPE_FLOAT) >= 2.0 ||
// UC Browser - Tested on Android 2.3 device
- ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 ) ||
+ ( ($this->is('UC Browser') || $this->is('Dolfin')) && $this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 ) ||
// Kindle 3 and Fire - Tested on the built-in WebKit browser for each
( $this->match('Kindle Fire') ||
- $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT)>=3.0 ) ||
+ $this->is('Kindle') && $this->version('Kindle', self::VERSION_TYPE_FLOAT) >= 3.0 ) ||
// Nook Color 1.4.1 - Tested on original Nook Color, not Nook Tablet
$this->is('AndroidOS') && $this->is('NookTablet') ||
- // Chrome Desktop 11-21 - Tested on OS X 10.7 and Windows 7
- $this->version('Chrome', self::VERSION_TYPE_FLOAT)>=11 && !$isMobile ||
+ // Chrome Desktop 16-24 - Tested on OS X 10.7 and Windows 7
+ $this->version('Chrome', self::VERSION_TYPE_FLOAT) >= 16 && !$isMobile ||
- // Safari Desktop 4-5 - Tested on OS X 10.7 and Windows 7
- $this->version('Safari', self::VERSION_TYPE_FLOAT)>=5.0 && !$isMobile ||
+ // Safari Desktop 5-6 - Tested on OS X 10.7 and Windows 7
+ $this->version('Safari', self::VERSION_TYPE_FLOAT) >= 5.0 && !$isMobile ||
- // Firefox Desktop 4-13 - Tested on OS X 10.7 and Windows 7
- $this->version('Firefox', self::VERSION_TYPE_FLOAT)>=4.0 && !$isMobile ||
+ // Firefox Desktop 10-18 - Tested on OS X 10.7 and Windows 7
+ $this->version('Firefox', self::VERSION_TYPE_FLOAT) >= 10.0 && !$isMobile ||
// Internet Explorer 7-9 - Tested on Windows XP, Vista and 7
- $this->version('MSIE', self::VERSION_TYPE_FLOAT)>=7.0 && !$isMobile ||
+ $this->version('IE', self::VERSION_TYPE_FLOAT) >= 7.0 && !$isMobile ||
// Opera Desktop 10-12 - Tested on OS X 10.7 and Windows 7
- // @reference: http://my.opera.com/community/openweb/idopera/
- $this->version('Opera', self::VERSION_TYPE_FLOAT)>=10 && !$isMobile
-
+ $this->version('Opera', self::VERSION_TYPE_FLOAT) >= 10 && !$isMobile
){
return self::MOBILE_GRADE_A;
}
if (
- $this->isIOS() && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
- $this->isIOS() && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<3.1 ||
- $this->isIOS() && $this->version('iPod', self::VERSION_TYPE_FLOAT)<3.1 ||
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT)<4.3 ||
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT)<4.3 ||
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT)<4.3 ||
// Blackberry 5.0: Tested on the Storm 2 9550, Bold 9770
- $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)>=5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
+ $this->is('Blackberry') && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) >= 5 && $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<6 ||
//Opera Mini (5.0-6.5) - Tested on iOS 3.2/4.3 and Android 2.3
- ( $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)>=5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT)<=6.5 &&
- ($this->version('Android', self::VERSION_TYPE_FLOAT)>=2.3 || $this->is('iOS')) ) ||
+ ($this->version('Opera Mini', self::VERSION_TYPE_FLOAT) >= 5.0 && $this->version('Opera Mini', self::VERSION_TYPE_FLOAT) <= 7.0 &&
+ ($this->version('Android', self::VERSION_TYPE_FLOAT) >= 2.3 || $this->is('iOS')) ) ||
// Nokia Symbian^3 - Tested on Nokia N8 (Symbian^3), C7 (Symbian^3), also works on N97 (Symbian^1)
$this->match('NokiaN8|NokiaC7|N97.*Series60|Symbian/3') ||
// @todo: report this (tested on Nokia N71)
- $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT)>=11 && $this->is('SymbianOS')
+ $this->version('Opera Mobi', self::VERSION_TYPE_FLOAT) >= 11 && $this->is('SymbianOS')
){
return self::MOBILE_GRADE_B;
}
if (
// Blackberry 4.x - Tested on the Curve 8330
- $this->version('BlackBerry', self::VERSION_TYPE_FLOAT)<5.0 ||
+ $this->version('BlackBerry', self::VERSION_TYPE_FLOAT) <= 5.0 ||
// Windows Mobile - Tested on the HTC Leo (WinMo 5.2)
- $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT)<=5.2
+ $this->match('MSIEMobile|Windows CE.*Mobile') || $this->version('Windows Mobile', self::VERSION_TYPE_FLOAT) <= 5.2 ||
+ // Tested on original iPhone (3.1), iPhone 3 (3.2)
+ $this->is('iOS') && $this->version('iPad', self::VERSION_TYPE_FLOAT) <= 3.2 ||
+ $this->is('iOS') && $this->version('iPhone', self::VERSION_TYPE_FLOAT) <= 3.2 ||
+ $this->is('iOS') && $this->version('iPod', self::VERSION_TYPE_FLOAT) <= 3.2 ||
+
+ // Internet Explorer 7 and older - Tested on Windows XP
+ $this->version('IE', self::VERSION_TYPE_FLOAT) <= 7.0 && !$isMobile
){
return self::MOBILE_GRADE_C;
}
- //All older smartphone platforms and featurephones - Any device that doesn't support media queries
- //will receive the basic, C grade experience.
+ // All older smartphone platforms and featurephones - Any device that doesn't support media queries
+ // will receive the basic, C grade experience.
return self::MOBILE_GRADE_C;
}
}
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/README.md b/htdocs/includes/mobiledetect/mobiledetectlib/README.md
index acc861a1927..d96db2dea3d 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/README.md
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/README.md
@@ -1,38 +1,66 @@
-
+[](https://travis-ci.org/serbanghita/Mobile-Detect) [](https://packagist.org/packages/mobiledetect/mobiledetectlib) [](https://packagist.org/packages/mobiledetect/mobiledetectlib) [](https://packagist.org/packages/mobiledetect/mobiledetectlib) [](https://packagist.org/packages/mobiledetect/mobiledetectlib)
+[](https://gitter.im/serbanghita/Mobile-Detect?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+
+
> Motto: "Every business should have a mobile detection script to detect mobile readers."
-Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
-It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.
+*Mobile_Detect is a lightweight PHP class for detecting mobile devices (including tablets).
+It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.*
-Nowadays web site/app content strategy matters, this is why you need all the tools to deliver the best and the fastest experience for the small screens. Mobile_Detect class is a [server-side detection](http://www.w3.org/TR/mwabp/#bp-devcap-detection) tool, it is not a replacement for Responsive Web Design (media queries) or other forms of client-side feature detection.
+We're committed to make Mobile_Detect the best open-source mobile detection resource and this is why before
+each release we're running [unit tests](./tests), we also research and update the detection rules on **daily**
+and **weekly** basis.
-We're commited to make Mobile_Detect the best open-source mobile detection resource and this is why before each release we're running [unit tests](./tests), we also research and update the detection rules on daily and weekly basis.
+Your website's _content strategy_ is important! You need a complete toolkit to deliver an experience that is _optimized_, _fast_ and _relevant_ to your users. Mobile_Detect class is a [server-side detection](http://www.w3.org/TR/mwabp/#bp-devcap-detection) tool that can help you with your RWD strategy, it is not a replacement for CSS3 media queries or other forms of client-side feature detection.
-
-
-Thanks ImpressPages CMS for showing us some love!
+##### This month updates
+**THANK YOU** for your continuous support and feedback!
+Still working on `3.0.0` branch to provide you with device detection! We're really excited on this one!
+We would like to speed this up, but life and family gets in the way ;)
+
+Special thanks to **JetBrains** for providing licenses for **PHPStorm**. In case you never heard or tried PHPStorm, you're
+clearly missing out! [Check PHPStorm](https://www.jetbrains.com/phpstorm/) out!
##### Download and demo
-Latest releases , Latest dev branch , composer package
+|Download|Docs|Examples|
+|-------------|-------------|-------------|
+|[Go to releases](../../tags)|[Become a contributor](../../wiki/Become-a-contributor)|[Code examples](../../wiki/Code-examples)
+|[Mobile_Detect.php](./Mobile_Detect.php)|[History](../../wiki/History)|[:iphone: Live demo!](http://is.gd/mobiletest)
+|[Composer package](https://packagist.org/packages/mobiledetect/mobiledetectlib)|
-See also: :bulb: Become a contributor / :coffee: History / :point_right: Code examples /
-:iphone: Live demo! (point your device browser to this URL)
+#### Continuous updates
+
+You can use [composer](https://getcomposer.org/doc/00-intro.md) in your release and update process to make sure you have the latest Mobile_Detect version.
+
+```
+composer require mobiledetect/mobiledetectlib
+```
+
+```json
+{
+ "require": {
+ "mobiledetect/mobiledetectlib": "^2.8"
+ }
+}
+```
##### Help
-
-
+|Pledgie|Paypal|
+|-------|------|
+|[Donate :+1:](http://pledgie.com/campaigns/21856)|[Donate :beer:](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=mobiledetectlib%40gmail%2ecom&lc=US&item_name=Mobile%20Detect¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif%3aNonHosted)|
-I'm currently paying for hosting and spend a lot of my family time :family: to maintain the project and planning the future releases.
+
+I'm currently paying for hosting and spend a lot of my family time to maintain the project and planning the future releases.
I would highly appreciate any money donations that will keep the research going.
Special thanks to the community :+1: for donations, [BrowserStack](http://browserstack.com) - for providing access to their great platform, [Zend](http://zend.com) - for donating licenses, [Dragos Gavrila](https://twitter.com/grafician) who contributed with the logo.
-##### 3rd party modules / [Submit new](https://github.com/serbanghita/Mobile-Detect/issues/new?title=New%203rd%20party%20module&body=Name, Link and Description of the module.)
+##### 3rd party modules / [Submit new](../../issues/new?title=New%203rd%20party%20module&body=Name, Link and Description of the module.)
:point_right: Keep `Mobile_Detect.php` class in a separate `module` and do NOT include it in your script core because of the high frequency of updates.
:point_right: When including the class into you `web application` or `module` always use `include_once '../path/to/Mobile_Detect.php` to prevent conflicts.
@@ -40,20 +68,23 @@ Special thanks to the community :+1: for donations, [BrowserStack](http://browse
-Varnish Cache
-Varnish Mobile Detect - Drop-in varnish solution to mobile user detection based on the Mobile-Detect library. Made by willemk
+ Varnish Cache
+
+ Varnish Mobile Detect - Drop-in varnish solution to mobile user detection based on the Mobile-Detect library. Made by willemk
+ mobiledetect2vcl - Python script to transform the Mobile Detect JSON database into an UA-based mobile detection VCL subroutine easily integrable in any Varnish Cache configuration. Made by Carlos Abalde
+
WordPress
- WordPress Mobile Detect - Gives you the ability to wrap that infographic in a [notdevice][/notdevice] shortcode so at the server level WordPress will decide to show that content only if the user is NOT on a phone or tablet. Made by Jesse Friedman .
+ WordPress Mobile Detect - Gives you the ability to wrap that infographic in a [notdevice][/notdevice] shortcode so at the server level WordPress will decide to show that content only if the user is NOT on a phone or tablet. Made by Jesse Friedman .
mobble - provides mobile related conditional functions for your site. e.g. is_iphone(), is_mobile() and is_tablet(). Made by Scott Evans.
WordPress Responsage - A small WordPress theme plugin that allows you to make your images responsive. Made by Adrian Ciaschetti .
-
- Social PopUP - This plugin will display a popup or splash screen when a new user visit your site showing a Google+, Twitter and Facebook follow links. It uses Mobile_Detect to detect mobile devices.
+
+ WP247 Body Classes - Add unique classes to the body tag for easy styling based on various attributes (archive, user, post, mobile) and various WordPress "is" functions. Mobile attributes include type of device, Operating System, Browser, etc. Examples: .is-mobile, .is-not-mobile, .is-tablet, .is-ios, .is-not-ios, .is-androidos, .is-chromebrowser. Made by wescleveland56
@@ -63,16 +94,23 @@ Special thanks to the community :+1: for donations, [BrowserStack](http://browse
Drupal Mobile Switch - The Mobile Switch Drupal module provides a automatic theme switch functionality for mobile devices,
detected by Browscap or Mobile Detect. Made by Siegfried Neumann .
- Drupal Context Mobile Detect - This is a Drupal context module which integrates Context and PHP Mobile Detect library.
+
Drupal Context Mobile Detect - This is a Drupal context module which integrates Context and PHP Mobile Detect library.
Created by Artem Shymko .
- Drupal Mobile Detect - Lightweight mobile detect module for Drupal created by Matthew Donadio
+ Drupal Mobile Detect - Lightweight mobile detect module for Drupal created by Matthew Donadio
Joomla
- yagendoo Joomla! Mobile Detection Plugin - Lightweight PHP plugin for Joomla! that detects a mobile browser using the Mobile Detect class. Made by yagendoo media .
+
+ yagendoo Joomla! Mobile Detection Plugin - Lightweight PHP plugin for Joomla!
+ that detects a mobile browser using the Mobile Detect class. Made by yagendoo media .
+
+ User Agent Detector plugin by @ReneKreijveld. This system plugin detects the user agent of your
+ website visitor and sets a session variable accordingly. Based on the user agent, the plugin detects if the site is running on a desktop pc, tablet or smartphone.
+ It can also detect if the visitor is a spider bot (search engine). Session variable that is set: ualayout. Possible values: desktop, tablet, mobile, bot..
+
@@ -91,7 +129,7 @@ Special thanks to the community :+1: for donations, [BrowserStack](http://browse
ZF2 Mobile-Detect - Zend Framework 2 module that provides Mobile-Detect features (Mobile_Detect class as a service, helper for views and plugin controllers). Made by neilime
- ZF2 MobileDetectModule - Facilitates integration of a PHP MobileDetect class with some ZF2-based application. Has similar idea like the existing ZF2 Mobile-Detect module, but differs in initialization and provision routine of the actual Mobile_Detect class. Appropriate view helper and controller plugin also have different conceptions. Made by Nikola Posa
+ ZF2 MobileDetectModule - Facilitates integration of a PHP MobileDetect class with some ZF2-based application. Has similar idea like the existing ZF2 Mobile-Detect module, but differs in initialization and provision routine of the actual Mobile_Detect class. Appropriate view helper and controller plugin also have different conceptions. Made by Nikola Posa
@@ -107,7 +145,7 @@ Special thanks to the community :+1: for donations, [BrowserStack](http://browse
Laravel
Laravel-Agent a user agent class for Laravel, based on Mobile Detect with some additional functionality. Made by Jens Segers .
- BrowserDetect is a browser & mobile detection package, collects and wrap together the best user-agent identifiers for Laravel. Created by Varga Zsolt .
+ BrowserDetect is a browser & mobile detection package, collects and wrap together the best user-agent identifiers for Laravel. Created by Varga Zsolt .
@@ -118,7 +156,13 @@ Special thanks to the community :+1: for donations, [BrowserStack](http://browse
Yii Framework
- Yii Extension - Mobile detect plugin for Yii framework. Made by Alexey Salnikov .
+
+ Yii Extension - Mobile detect plugin for Yii framework.
+ Made by Alexey Salnikov .
+
+ Yii2 Device Detect - Yii2 extension for Mobile-Detect library. Made by Alexander Nestorov
+
+
@@ -139,7 +183,12 @@ It overrides the Fuelphp Agent class its methods. Made by Statamic CMS Mobile Detect - plugin. Made by Sergei Filippov of Haiku Lab .
+ Statamic CMS Mobile Detect - plugin. Made by Sergei Filippov of Haiku Lab .
+
+
+
+ Kohana
+ Kohana Mobile Detect - an example of implementation of Mobile_Detect class with Kohana framework. Written by Luiz Alberto S. Ribeiro .
@@ -147,14 +196,29 @@ It overrides the Fuelphp Agent class its methods. Made by JavaScript port of Mobile-Detect class. Made by Heinrich Goebl
+
+ Perl
+ MobileDetect.pm - Perl module for Mobile Detect. Made by Sebastian Enger .
+
+
python
pymobiledetect - Mobile detect python package. Made by Bas van Oostveen.
+
+
+ Ruby
+ mobile_detect.rb - A Ruby gem using the JSON data exposed by the php project and implementing a basic subset of the API (as much as can be done by the exposed data). Made by Karthik T .
+
GoMobileDetect
- GoMobileDetect - Go port of Mobile Detect class. Made by Shaked .
+ GoMobileDetect - Go port of Mobile Detect class. Made by Shaked .
+
+
+
+ LUA
+ ua-lua is a small lib written in LUA providing device type detection. ua-lua is detecting mobile or tablet devices based on user-agent inside nginx daemon. Made by Frédéric Robinet .
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/composer.json b/htdocs/includes/mobiledetect/mobiledetectlib/composer.json
index 0131e4937ec..c56611fb6b7 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/composer.json
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/composer.json
@@ -17,7 +17,9 @@
"php": ">=5.0.0"
},
"require-dev": {
- "phpunit/phpunit": "*"
+ "phpunit/phpunit": "*",
+ "johnkary/phpunit-speedtrap": "~1.0@dev",
+ "codeclimate/php-test-reporter": "dev-master"
},
"autoload": {
"classmap": ["Mobile_Detect.php"],
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/composer.lock b/htdocs/includes/mobiledetect/mobiledetectlib/composer.lock
deleted file mode 100644
index 2b214625190..00000000000
--- a/htdocs/includes/mobiledetect/mobiledetectlib/composer.lock
+++ /dev/null
@@ -1,439 +0,0 @@
-{
- "_readme": [
- "This file locks the dependencies of your project to a known state",
- "Read more about it at http://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file"
- ],
- "hash": "5b2d87ea9e6c115194bd355b7b697cec",
- "packages": [
-
- ],
- "packages-dev": [
- {
- "name": "phpunit/php-code-coverage",
- "version": "1.2.12",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
- "reference": "1.2.12"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/1.2.12",
- "reference": "1.2.12",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "phpunit/php-file-iterator": ">=1.3.0@stable",
- "phpunit/php-text-template": ">=1.1.1@stable",
- "phpunit/php-token-stream": ">=1.1.3@stable"
- },
- "require-dev": {
- "phpunit/phpunit": "3.7.*@dev"
- },
- "suggest": {
- "ext-dom": "*",
- "ext-xdebug": ">=2.0.5"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "PHP/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
- "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
- "keywords": [
- "coverage",
- "testing",
- "xunit"
- ],
- "time": "2013-07-06 06:26:16"
- },
- {
- "name": "phpunit/php-file-iterator",
- "version": "1.3.3",
- "source": {
- "type": "git",
- "url": "git://github.com/sebastianbergmann/php-file-iterator.git",
- "reference": "1.3.3"
- },
- "dist": {
- "type": "zip",
- "url": "https://github.com/sebastianbergmann/php-file-iterator/zipball/1.3.3",
- "reference": "1.3.3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "File/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "FilterIterator implementation that filters files based on a list of suffixes.",
- "homepage": "http://www.phpunit.de/",
- "keywords": [
- "filesystem",
- "iterator"
- ],
- "time": "2012-10-11 04:44:38"
- },
- {
- "name": "phpunit/php-text-template",
- "version": "1.1.4",
- "source": {
- "type": "git",
- "url": "git://github.com/sebastianbergmann/php-text-template.git",
- "reference": "1.1.4"
- },
- "dist": {
- "type": "zip",
- "url": "https://github.com/sebastianbergmann/php-text-template/zipball/1.1.4",
- "reference": "1.1.4",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "Text/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Simple template engine.",
- "homepage": "https://github.com/sebastianbergmann/php-text-template/",
- "keywords": [
- "template"
- ],
- "time": "2012-10-31 11:15:28"
- },
- {
- "name": "phpunit/php-timer",
- "version": "1.0.5",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-timer.git",
- "reference": "1.0.5"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/1.0.5",
- "reference": "1.0.5",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "PHP/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Utility class for timing",
- "homepage": "https://github.com/sebastianbergmann/php-timer/",
- "keywords": [
- "timer"
- ],
- "time": "2013-08-02 07:42:54"
- },
- {
- "name": "phpunit/php-token-stream",
- "version": "1.2.0",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/php-token-stream.git",
- "reference": "1.2.0"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1.2.0",
- "reference": "1.2.0",
- "shasum": ""
- },
- "require": {
- "ext-tokenizer": "*",
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.2-dev"
- }
- },
- "autoload": {
- "classmap": [
- "PHP/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Wrapper around PHP's tokenizer extension.",
- "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
- "keywords": [
- "tokenizer"
- ],
- "time": "2013-08-04 05:57:48"
- },
- {
- "name": "phpunit/phpunit",
- "version": "3.7.23",
- "source": {
- "type": "git",
- "url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "3.7.23"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3.7.23",
- "reference": "3.7.23",
- "shasum": ""
- },
- "require": {
- "ext-dom": "*",
- "ext-pcre": "*",
- "ext-reflection": "*",
- "ext-spl": "*",
- "php": ">=5.3.3",
- "phpunit/php-code-coverage": "~1.2.1",
- "phpunit/php-file-iterator": ">=1.3.1",
- "phpunit/php-text-template": ">=1.1.1",
- "phpunit/php-timer": ">=1.0.4",
- "phpunit/phpunit-mock-objects": "~1.2.0",
- "symfony/yaml": "~2.0"
- },
- "require-dev": {
- "pear-pear/pear": "1.9.4"
- },
- "suggest": {
- "ext-json": "*",
- "ext-simplexml": "*",
- "ext-tokenizer": "*",
- "phpunit/php-invoker": ">=1.1.0,<1.2.0"
- },
- "bin": [
- "composer/bin/phpunit"
- ],
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.7.x-dev"
- }
- },
- "autoload": {
- "classmap": [
- "PHPUnit/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- "",
- "../../symfony/yaml/"
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
- }
- ],
- "description": "The PHP Unit Testing framework.",
- "homepage": "http://www.phpunit.de/",
- "keywords": [
- "phpunit",
- "testing",
- "xunit"
- ],
- "time": "2013-08-02 19:14:44"
- },
- {
- "name": "phpunit/phpunit-mock-objects",
- "version": "1.2.3",
- "source": {
- "type": "git",
- "url": "git://github.com/sebastianbergmann/phpunit-mock-objects.git",
- "reference": "1.2.3"
- },
- "dist": {
- "type": "zip",
- "url": "https://github.com/sebastianbergmann/phpunit-mock-objects/archive/1.2.3.zip",
- "reference": "1.2.3",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "phpunit/php-text-template": ">=1.1.1@stable"
- },
- "suggest": {
- "ext-soap": "*"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "PHPUnit/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "include-path": [
- ""
- ],
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
- }
- ],
- "description": "Mock Object library for PHPUnit",
- "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
- "keywords": [
- "mock",
- "xunit"
- ],
- "time": "2013-01-13 10:24:48"
- },
- {
- "name": "symfony/yaml",
- "version": "v2.3.2",
- "target-dir": "Symfony/Component/Yaml",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/Yaml.git",
- "reference": "v2.3.2"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/Yaml/zipball/v2.3.2",
- "reference": "v2.3.2",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.3-dev"
- }
- },
- "autoload": {
- "psr-0": {
- "Symfony\\Component\\Yaml\\": ""
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "http://symfony.com/contributors"
- }
- ],
- "description": "Symfony Yaml Component",
- "homepage": "http://symfony.com",
- "time": "2013-07-11 19:36:36"
- }
- ],
- "aliases": [
-
- ],
- "minimum-stability": "stable",
- "stability-flags": [
-
- ],
- "platform": {
- "php": ">=5.0.0"
- },
- "platform-dev": [
-
- ]
-}
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/examples/demo.php b/htdocs/includes/mobiledetect/mobiledetectlib/examples/demo.php
index 82fec6cdb3e..38dad6b2879 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/examples/demo.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/examples/demo.php
@@ -34,6 +34,7 @@
require_once '../Mobile_Detect.php';
$detect = new Mobile_Detect;
+
$deviceType = ($detect->isMobile() ? ($detect->isTablet() ? 'tablet' : 'phone') : 'computer');
$scriptVersion = $detect->getScriptVersion();
@@ -157,7 +158,7 @@ $scriptVersion = $detect->getScriptVersion();
This is a . Your UA is
Please help us improve the mobile detection by choosing the correct answer.
- Before sending an answer double check if you are using the browser in 'Desktop mode'.
+ Before sending an answer double check that you are using the browser in its normal mode, not in 'Desktop mode'.
You can contribute by:
1. forking the project
2. submiting an issue
@@ -250,6 +251,19 @@ $scriptVersion = $detect->getScriptVersion();
isWhateverYouWant()); ?>
+
+
+ Debug
+
+
+ Matching Regex
+ getMatchingRegex()); ?>
+
+
+ Matching Array
+ getMatchesArray()); ?>
+
+
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/examples/test.php b/htdocs/includes/mobiledetect/mobiledetectlib/examples/test.php
new file mode 100644
index 00000000000..85f3c2c0b07
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/examples/test.php
@@ -0,0 +1,29 @@
+setUserAgent('Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/38.0.2125.59 Mobile/12A405 Safari/600.1.4');
+var_dump($detect->version('Chrome'));
+var_dump($detect->version('iPhone'));
+*/
+
+/*
+$user_agents = array(
+ 'android' => 'Mozilla/5.0 (Linux; Android 4.2; Nexus 7 Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19',
+ 'iphone6' => 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25',
+ 'blackberry' => 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+'
+);
+$mobile_detect = new Mobile_Detect;
+
+foreach($user_agents as $user_agent)
+{
+ $mobile_detect->setUserAgent($user_agent);
+ var_dump($mobile_detect->isAndroidOS());
+}
+*/
+
+$detect = new Mobile_Detect;
+//$detect->setUserAgent('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko');
+//var_dump($detect->version('IE'));
+$detect->setUserAgent('Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko');
+var_dump($detect->version('IE'));
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/export/exportToJSON.php b/htdocs/includes/mobiledetect/mobiledetectlib/export/exportToJSON.php
index f7735de7bf7..88ff6a10991 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/export/exportToJSON.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/export/exportToJSON.php
@@ -47,7 +47,9 @@ $json = array(
// If match is found, triggers 'isMobile' to be true.
'browsers' => $detect->getBrowsers(),
// If match is found, triggers 'isMobile' to be true.
- 'os' => $detect->getOperatingSystems()
+ 'os' => $detect->getOperatingSystems(),
+ // Various utilities. To be further discussed.
+ 'utilities' => $detect->getUtilities()
)
);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/BasicsTest.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/BasicsTest.php
old mode 100644
new mode 100755
index 897a3ec764c..5519665ee7a
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/BasicsTest.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/BasicsTest.php
@@ -1,29 +1,5 @@
* @license MIT License https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
* @link http://mobiledetect.net
*/
@@ -177,7 +153,8 @@ class BasicTest extends PHPUnit_Framework_TestCase
/**
* @dataProvider userAgentProvider
- * @covers Mobile_Detect::setUserAgent, Mobile_Detect::getUserAgent
+ * @covers Mobile_Detect::setUserAgent
+ * @covers Mobile_Detect::getUserAgent
*/
public function testGetUserAgent($headers, $expectedUserAgent)
{
@@ -203,7 +180,56 @@ class BasicTest extends PHPUnit_Framework_TestCase
}
/**
- * @covers Mobile_Detect::setUserAgent, Mobile_Detect::getUserAgent
+ * Read response from cloudfront, if the cloudfront headers are detected
+ * @covers Mobile_Detect::setCfHeaders
+ */
+ public function testSetCfHeaders()
+ {
+ // Test mobile detected
+ $header1 = array(
+ 'HTTP_CLOUDFRONT_IS_DESKTOP_VIEWER' => 'false',
+ 'HTTP_CLOUDFRONT_IS_MOBILE_VIEWER' => 'true',
+ 'HTTP_CLOUDFRONT_IS_TABLET_VIEWER' => 'false'
+ );
+ $md = new Mobile_Detect($header1);
+ $this->assertSame($md->getCfHeaders(), $header1);
+ $this->assertSame($md->getUserAgent(), 'Amazon CloudFront');
+ $this->assertSame($md->isTablet(), false);
+ $this->assertSame($md->isMobile(), true);
+
+ // Test neither mobile nor tablet (desktop)
+ $header2 = array(
+ 'HTTP_CLOUDFRONT_IS_DESKTOP_VIEWER' => 'true',
+ 'HTTP_CLOUDFRONT_IS_MOBILE_VIEWER' => 'false',
+ 'HTTP_CLOUDFRONT_IS_TABLET_VIEWER' => 'false'
+ );
+ $md->setHttpHeaders($header2);
+ $this->assertSame($md->getCfHeaders(), $header2);
+ $this->assertSame($md->getUserAgent(), 'Amazon CloudFront');
+ $this->assertSame($md->isTablet(), false);
+ $this->assertSame($md->isMobile(), false);
+
+ // Test tablet detected
+ $header3 = array(
+ 'HTTP_CLOUDFRONT_IS_DESKTOP_VIEWER' => 'false',
+ 'HTTP_CLOUDFRONT_IS_MOBILE_VIEWER' => 'false',
+ 'HTTP_CLOUDFRONT_IS_TABLET_VIEWER' => 'true'
+ );
+ $md->setCfHeaders($header3);
+ $this->assertSame($md->getCfHeaders(), $header3);
+ $this->assertSame($md->getUserAgent(), 'Amazon CloudFront');
+ $this->assertSame($md->isTablet(), true);
+ $this->assertSame($md->isMobile(), false);
+
+ // Check if the headers are cleared
+ $header4 = array();
+ $md->setHttpHeaders($header4);
+ $this->assertSame($md->getCfHeaders(), $header4);
+ }
+
+ /**
+ * @covers Mobile_Detect::setUserAgent
+ * @covers Mobile_Detect::getUserAgent
*/
public function testSetUserAgent()
{
@@ -461,7 +487,7 @@ class BasicTest extends PHPUnit_Framework_TestCase
public function testScriptVersion()
{
$v = Mobile_Detect::getScriptVersion();
- $formatCheck = (bool)preg_match('/^[0-9]+\.[0-9]+\.[0-9](-[a-zA-Z0-9])?$/', $v);
+ $formatCheck = (bool)preg_match('/^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9])?$/', $v);
$this->assertTrue($formatCheck, "Fails the semantic version test. The version " . var_export($v, true)
. ' does not match X.Y.Z pattern');
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/UA_List.inc.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/UA_List.inc.php
index dc87bfb2b14..5c4df79b9a4 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/UA_List.inc.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/UA_List.inc.php
@@ -1,1220 +1,27 @@
- *
* @license MIT License https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
* @link http://mobiledetect.net
*
- * This file is updated weekly.
+ * Compile the providers list.
+ * The providers list is updated weekly.
* You can contribute by adding new user agents and tests.
- *
*/
-return array(
-
- 'Acer' => array(
- 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; A100 Build/HTK55D) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; A110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'IML74K'), 'model' => 'A200' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; A701 Build/JRO03H) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; B1-A71 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; B1-710 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; A1-810 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; A1-810 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Acer; Allegro)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; A3-A10 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.36', 'Chrome' => '32.0.1700.99')),
- 'Mozilla/5.0 (Linux; Android 4.2.2; A1-830 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'AdvanDigital' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; E1C Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; id-id; T3C Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Ainol' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Ainol Novo8 Advanced Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; Novo10 Hero Build/20121115) AppleWebKit/535.19 (KHTML like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; novo9-Spark Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
- 'AllFine' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; FINE7 GENIUS Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'ASUS' => array(
- 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '3.2.1', 'Webkit' => '534.13', 'Safari' => '4.0'), 'model' => 'Transformer TF101' ),
- 'Mozilla/5.0 (Linux; Android 4.1.1; Transformer Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; asus_laptop Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03L', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; Android 4.2.1; ME301T Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.1', 'Build' => 'JOP40D') ),
- 'Mozilla/5.0 (Linux; Android 4.2.1; ME173X Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.1', 'Build' => 'JOP40D') ),
- 'Mozilla/5.0 (Linux; Android 4.2.2; TF300T Build/JDQ39E) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39E') ),
- ),
-
- 'Alcatel' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-in; MB525 Build/GWK74; CyanogenMod-7.2.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; it-it; ALCATEL ONE TOUCH 918D Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '2.3.5', 'Webkit' => '533.1', 'Safari' => '4.0', 'Build' => 'GRJ90'), 'model' => 'ONE TOUCH 918D' ),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; ALCATEL ONE TOUCH 991 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '2.3.6', 'Webkit' => '533.1', 'Safari' => '4.0', 'Build' => 'GRJ90'), 'model' => 'ONE TOUCH 991' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; ALCATEL ONE TOUCH 993D Build/ICECREAM) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'ICECREAM'), 'model' => 'ONE TOUCH 993D' ),
- ),
-
- 'Allview' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ALLVIEW P5 Build/IML74K) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us ; ALLVIEW SPEEDI Build/IMM76D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.5.3.246/145/355' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; AllviewCity Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ALLVIEWSPEED Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'Amazon' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated=true' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600x800; rotate)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Webkit' => '528.5+', 'Kindle' => '3.0', 'Safari' => '4.0'), 'model' => 'Kindle' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Apple' => array(
- 'iTunes/9.1.1' => array('isMobile' => false, 'isTablet' => false),
- 'iTunes/11.0.2 (Windows; Microsoft Windows 8 x64 Business Edition (Build 9200)) AppleWebKit/536.27.1' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '420+', 'Safari' => '3.0') ),
- 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '3_0', 'Webkit' => '528.18', 'Safari' => '4.0'), 'model' => 'iPhone', 'mobileGrade' => 'B' ),
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '5_1_1', 'Webkit' => '534.46', 'Mobile' => '9B206', 'Safari' => '5.1'), 'model' => 'iPhone' ),
- 'Mozilla/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0', 'Webkit' => '536.26', 'Mobile' => '10A403', 'Safari' => '6.0'), 'model' => 'iPod'),
- 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.80 Mobile/9B206 Safari/7534.48.3 (6FF046A0-1BC4-4E7D-8A9D-6BF17622A123)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '5_1_1', 'Webkit' => '534.46.0', 'Chrome' => '21.0.1180.80', 'Mobile' => '9B206'), 'model' => 'iPad' ),
- 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '6_0', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10A403'), 'model' => 'iPad' ),
- 'Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '4_2_1', 'Webkit' => '533.17.9', 'Safari' => '5.0.2', 'Mobile' => '8C148'), 'model' => 'iPad', 'mobileGrade' => 'B' ),
- 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '3_2', 'Webkit' => '531.21.10', 'Safari' => '4.0.4', 'Mobile' => '7B334b'), 'model' => 'iPad', 'mobileGrade' => 'B' ),
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.82 Mobile/10A523 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0_1', 'Webkit' => '534.46.0', 'Chrome' => '21.0.1180.82', 'Mobile' => '10A523'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0_1', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10A523'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X; ru-ru) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/23.0.1271.100 Mobile/10B142 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_1', 'Webkit' => '536.26', 'Chrome' => '23.0.1271.100', 'Mobile' => '10B142'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
- 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_1_3', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10B329'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
- 'Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Coast/1.0.2.62956 Mobile/10B329 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Coast' => '1.0.2.62956')),
- ),
-
- 'Archos' => array(
-
- 'Mozilla/5.0 (Linux; Android 4.2.2; Qilive 97R Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; Archos 50 Platinum Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; ARCHOS 80G9 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; A101IT Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 101 Neon Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
- 'isMobile' => true, 'isTablet' => true
- ),
- ),
-
- 'AudioSonic' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-au; T-17B Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'BlackBerry' => array(
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9300; en) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.546 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '534.8+', 'BlackBerry' => '6.0.0.546'), 'model' => 'BlackBerry 9300' ),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9360; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.400 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; he) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.723 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; en-US) AppleWebKit/534.8 (KHTML, like Gecko) Version/6.0.0.448 Mobile Safari/534.8' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9790; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.714 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '534.11+', 'BlackBerry' => '7.1.0.714'), 'model' => 'BlackBerry 9790' ),
- 'Opera/9.80 (BlackBerry; Opera Mini/7.0.29990/28.2504; U; en) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9981; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.342 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-GB) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.546 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9780; es) AppleWebKit/534.8 (KHTML, like Gecko) Version/6.0.0.480 Mobile Safari/534.8' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9810; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Version/7.0.0.583 Mobile Safari/534.11' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9860; es) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.576 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Version/7.1.0.523 Mobile Safari/534.11' => array('isMobile' => true, 'isTablet' => false),
- 'BlackBerry8520/5.0.0.592 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/136' => array('isMobile' => true, 'isTablet' => false),
- 'BlackBerry8520/5.0.0.1067 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/603' => array('isMobile' => true, 'isTablet' => false),
- 'BlackBerry8520/5.0.0.1036 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/611' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('BlackBerry' => '5.0.0.1036', 'VendorID' => '611'), 'model' => 'BlackBerry8520' ),
- 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9220; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.337 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (BB10; Touch) /537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('BlackBerry' => '10.0.9.2372') ),
- 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '3.2.1', 'Webkit' => '534.13', 'Safari' => '4.0'), 'model' => 'Transformer TF101' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A200' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A500' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A501' ),
- 'Mozilla/5.0 (Linux; Android 4.1.1; Transformer Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'Transformer' ),
- 'Mozilla/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'Transformer Pad TF300T' ),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'JZO54K'), 'model' => 'Transformer' ),
- 'Mozilla/5.0 (Linux; Android 4.1.2; B1-A71 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'B1-A71' ),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Acer; Allegro)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Windows Phone OS' => '7.5', 'Trident' => '5.0', 'IE' => '9.0'), 'model' => 'Allegro' ),
- ),
-
- 'Broncho' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- // @ref: http://www.bqreaders.com/gb/tablets-prices-sale.html
- 'bq' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; bq Livingstone 2 Build/1.1.7 20121018-10:33) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; bq Edison Build/1.1.10-1015 20121230-18:00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.3; Maxwell Lite Build/v1.0.0.ICS.maxwell.20120920) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-tw; bq Maxwell Plus Build/1.0.0 20120913-10:39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Captiva' => array(
- 'Opera/9.80 (X11; Linux zvav; U; de) Presto/2.8.119 Version/11.10 Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; CAPTIVA PAD 10.1 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
- 'isMobile' => true, 'isTablet' => true,
- ),
- ),
-
- 'Casio' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build/C771M120) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- 'ChangJia' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; TPC97113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; TPC7102 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
-
- ),
-
- // @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
- 'Coby' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; MID7010 Build/FRF85B) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Concorde' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde Tab T10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde tab PLAY Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Cresta' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; nl-nl; CRESTA.CTP888 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Cube' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; CUBE U9GT 2 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Danew' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; Dslide 700 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array( 'Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0' ), 'model' => 'Dslide 700' )
-
- ),
-
- 'DanyTech' => array(
- 'Mozilla/5.0 (Linux; Android 4.2.2; Genius Tab Q4 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Dell' => array(
- 'Mozilla/5.0 (Linux; U; Android 1.6; en-gb; Dell Streak Build/Donut AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/ 525.20.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; hd-us; Dell Venue Build/GWK74; CyanogenMod-7.2.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; DELL; Venue Pro)' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- 'DPS' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; DPS Dream 9 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'ECS' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; TM105A Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30'))
- ),
-
- 'Eboda' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme Dual Core X190 Build/JRO03C) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '534.30', 'Safari' => '4.0')),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Essential A160 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.3; E-Boda Supreme X80 Dual Core Build/ICS.g12refM806A1YBD.20120925) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-boda essential smile Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Fly' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; Fly IQ440; Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; FLY IQ256 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- 'Fujitsu' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ja-jp; F-10D Build/V21R48A) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'V21R48A', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; M532 Build/IML74K) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0') ),
-
- ),
-
- 'FX2' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; FX2 PAD7 RK Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- // @ref: http://www.galapad.net/product.html
- 'Galapad' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-tw; G1 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'JRO03C') ),
-
- ),
-
- 'GoClever' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; el-gr; GOCLEVER TAB A103 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; zh-tw; A7GOCLEVER Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.4; GOCLEVER TAB A104 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; cs-cz; GOCLEVER TAB A93.2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; sk-sk; GOCLEVER TAB A971 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; lv-lv; GOCLEVER TAB A972BK Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-fr; GOCLEVER TAB A104.2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; pt-pt; GOCLEVER TAB T76 Build/MID) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Google' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; Nexus 4 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.40 Mobile Safari/537.31 OPR/14.0.1074.54070' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.31', 'Opera' => '14.0.1074.54070') ),
- 'Mozilla/5.0 (Linux; Android 4.2.2; Nexus 4 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.2.2', 'Chrome' => '26.0.1410.58')),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Google Nexus 4 - 4.1.1 - API 16 - 768x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Google Galaxy Nexus - 4.1.1 - API 16 - 720x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2; Nexus 7 Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Chrome' => '18.0.1025.166') ),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; cs-cz; Nexus S Build/JZO54K; CyanogenMod-10.0.0) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android; en_us; Nexus 7 Build/) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 NetFrontLifeBrowser/2.3 Mobile (Dragonfruit)' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'GU' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; vi-vn; TX-A1301 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30', 'Safari' => '4.0')),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; da-dk; Q702 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0')),
-
- ),
-
- 'HCL' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build/HCL ME Tablet U1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build/HCL ME Tablet U1) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; Connect-3G-2.0 Build/HCL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; pt-br; X1 Build/HCL ME Tablet X1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'HP' => array(
- 'Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.5; U; en-GB) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.83 Safari/534.6 TouchPad/1.0' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; HP Slate 7 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; HP Slate 7 Build/JRO03H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; HP 8 Build/1.0.7_WW-FIR-13) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'HTC' => array(
- 'Mozilla/5.0 (X11; Linux x86_64; Z520m; en-ca) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24' => array('isMobile' => true, 'isTablet' => false),
- 'HTC_Touch_HD_T8282 Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 1.5; en-us; ADR6200 Build/CUPCAKE) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1; xx-xx; Desire_A8181 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; en-gb; HTC Desire Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-dk; Desire_A8181 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2; xx-xx; 001HT Build/FRF91) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2; xx-xx; HTCA8180/1.0 Android/2.2 release/06.23.2010 Browser/WAP 2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.2; de-at; HTC Desire Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.2; en-sk; Desire_A8181 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3; xx-xx; HTC/DesireS/1.07.163.1 Build/GRH78C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-lv; HTC_DesireZ_A7272 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC/DesireS/2.10.161.3 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC_DesireS_S510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Inspire 4G Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; de-de; HTC Explorer A310e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_ChaCha_A810e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; nl-nl; HTC_DesireHD_A9191 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC Desire S Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; de-de; HTC_DesireHD Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ua; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; HTC Vision Build/GRI40; ILWT-CM7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; HTC_GOF_U/1.05.161.1 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; hu-hu; HTC Sensation Z710e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; pl-pl; EVO3D_X515m Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC_A320e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-tw; HTC Desire V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.3; PG86100 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-nl; SensationXE_Beats_Z715e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; cs-ee; Sensation_Z710e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HTC Evo 4G Build/MIUI) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; Desire HD Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-my; HTC_One_X Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; IncredibleS_S710e Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-fr; HTC_Desire_S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.1; HTC Butterfly Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.1; EVO Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; HTCSensation Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
-
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC 7 Mozart T8698; QSD8x50)' => array(
- 'isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '9.0', 'Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => '7 Mozart T8698',
- ),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 HTC MOZART)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mondrian T8788)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Pro T7576)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Pro)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Schubert T9292)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Surround)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Trophy T8686)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Trophy)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Eternity)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Gold)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD2 LEO)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD2)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD7 T9292)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD7)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; iPad 3)' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; LEO)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mazaa)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mondrian)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mozart)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; mwp6985)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PC40100)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PC40200)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PD67100)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PI39100)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PI86100)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar 4G)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 1.08.164.02)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 2.05.164.01)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 2.05.168.02)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schuber)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schubert T9292)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schubert)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Spark)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Surround)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T7575)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T8697)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T8788)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T9295)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T9296)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; TITAN X310e)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Torphy T8686)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; X310e)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC_blocked; T8788)' => array(
- 'isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '9.0', 'Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => 'T8788',
- ),
-
- ),
-
- 'Hudl' => array(
- 'Mozilla/5.0 (Linux; Android 4.2.2; Hudl HT7S3 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Huwaei' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; bg-bg; Ideos S7 Build/ERE27) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Ideos S7 Build/ERE27) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; lt-lt; U8660 Build/HuaweiU8660) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; ru-ru; HUAWEI-U8850 Build/HuaweiU8850) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 3.2; pl-pl; MediaPad Build/HuaweiMediaPad) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.2; nl-nl; HUAWEI MediaPad Build/HuaweiMediaPad) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'HUAWEI_T8951_TD/1.0 Android/4.0.4 (Linux; U; Android 4.0.4; zh-cn) Release/05.31.2012 Browser/WAP2.0 (AppleWebKit/534.30) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; ar-eg; MediaPad 7 Youth Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_C8815/C8815V100R001C541B135; 540*960; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_C8813D/C8813DV100R001C92B172; 480*854; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_Y300C/Y300CV100R001C92B168; 480*800; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false)
- ),
-
- 'Iconbit' => array(
- 'Mozilla/5.0 (Linux; Android 4.1.1; NT-3702M Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36 OPR/16.0.1212.65583' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; NetTAB SPACE II Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'iJoy' => array('Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; Tablet Planet II-v3 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)),
-
- 'Intenso' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1.;de-de; INM8002KP Build/JR003H) AppleWebKit/534.30 (KHTML, like Gecko)Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1.', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- ),
-
- 'IRU' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; M702pro Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'JXD' => array('Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; F3000 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
- ),
-
- 'Karbonn' => array(
- 'Mozilla/5.0 (Linux; Android 4.1.1; ST10 Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Kobo' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 (Kobo Touch)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.0', 'Webkit' => '533.1', 'Safari' => '4.0') ),
- ),
-
- 'Lenovo' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-au; ThinkPad Tablet Build/ThinkPadTablet_A400_03) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.3697; en-US; IdeaTabA1000-G) U2/1.0.0 UCBrowser/9.2.0.419 Mobile' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; IdeaTabA1000-F Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.1; Lenovo A3000-H Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.117 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; IdeaTab A3000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.360' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1; zh-cn; Lenovo-A3000-H/S100) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.300' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; IdeaTab A3000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; IdeaTab A2107A-H Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; IdeaTabA2109A Build/JRO03R) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; nl-nl; IdeaTabA2109A Build/JRO03R) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.300' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; IdeaTab S6000-H Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; Lenovo B8000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2;it-it; Lenovo B8000-F/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; Lenovo B6000-F/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; Lenovo B6000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'LG' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.2; pt-br; LG-P350f Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LG-P500 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; LG-E510 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; VS910 4G Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-P700 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; LG-F160S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-E610v/V10f Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; LG-E612 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; LG-F180K Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; LG-V500 Build/JDQ39B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; LG-V510 Build/KOT49H.L004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
-
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG E-900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-C900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-C900k)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900h)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-Optimus 7)' => array('isMobile' => true, 'isTablet' => false),
- // @ref: http://ja.wikipedia.org/wiki/L-06C
- 'Mozilla/5.0 (Linux; U; Android 3.0.1; ja-jp; L-06C Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; LG-V900 Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Megafon' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; MegaFon V9 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; MT7A Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'MediaTek' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; MT8377 Build/JRO03C) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30/4.05d.1002.m7' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Micromax' => array(
-
- 'Mozilla/5.0 (Linux; Android 4.1.1; Micromax A110 Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03C', 'Webkit' => '537.22', 'Chrome' => '25.0.1364.169') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Micromax P250(Funbook) Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Webkit' => '534.30', 'Android' => '4.0', 'Build' => 'IMM76D', 'Safari' => '4.0') ),
-
- ),
-
- 'Microsoft' => array(
-
- // Surface tablet
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('IE' => '10.0', 'Windows NT' => '6.2', 'Trident' => '6.0') ),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0)' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; ARMBJS)' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
-
- // Thanks to Jonathan Donzallaz!
- // Firefox (nightly) in metro mode on Dell XPS 12
- 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20130626 Firefox/25.0' => array('isMobile' => false, 'isTablet' => false),
- // Firefox in desktop mode on Dell XPS 12
- 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0' => array('isMobile' => false, 'isTablet' => false),
- // IE10 in metro mode on Dell XPS 12
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MDDCJS)' => array('isMobile' => false, 'isTablet' => false),
- // IE10 in desktop mode on Dell XPS 12
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MDDCJS)' => array('isMobile' => false, 'isTablet' => false),
- // Opera on Dell XPS 12
- 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130' => array('isMobile' => false, 'isTablet' => false),
- // Chrome on Dell XPS 12
- 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
- // Google search app from Windows Store
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MDDCJS; WebView/1.0)' => array('isMobile' => false, 'isTablet' => false),
- ),
-
- 'Modecom' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; pl-pl; FreeTAB 1014 IPS X4+ Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Motorola' => array(
- 'MOT-W510/08.11.05R MIB/BER2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 EGE/1.0 UP.Link/6.3.0.0.0' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.2; zh-cn; ME722 Build/MLS2GC_2.6.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build/4.5.1_57_DX8-51) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build/4.5.1A-1_SUN-254_13) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; es-us; MB526 Build/4.5.2-51_DFL-50) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-ca; MB860 Build/4.5.2A-51_OLL-17.8) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; MOT-XT535 Build/V1.540) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; ko-kr; A853 Build/SHOLS_U2_05.26.3; CyanogenMod-7.1.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build/6.7.2-180_DHD-16_M4-31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; XT687 Build/V2.27D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'XT687' ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; MOT-XT910 Build/6.7.2-180_SPU-19-TA-11.6) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT910 Build/9.8.2O-124_SPUL-17) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT915 Build/2_32A_2031) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT919 Build/2_290_2017) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT925 Build/9.8.2Q-50-XT925_VQLM-20) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT907 Build/9.8.1Q-66) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; XT901 Build/9.8.2Q-50_SLS-13) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; DROID BIONIC Build/9.8.2O-72_VZW-22) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- // @ref: https://www.nabitablet.com/
- 'Nabi' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; NABI-A Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'NEC' => array(
- // @ref: http://www.n-keitai.com/n-08d/?from=mediasnet
- // @ref: http://devlog.dcm-gate.com/2012/03/medias-tab-n-06duseragnet.html
- // @ref: http://keitaiall.jp/N-08D.html aka MEDIAS TAB
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ja-jp; N-08D Build/A5001911) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android AAA; BBB; N-06D Build/CCC) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'Nook' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; NOOK BNRV200 Build/ERD79 1.4.3) Apple WebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.2.1', 'Webkit' => '533.1', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; NOOK BNTV400 Build/ICS) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'ICS', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; Android 4.0.4; BNTV600 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36 Hughes-PFB/CID5391275.AID1376709964' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76L', 'Webkit' => '537.36', 'Chrome' => '28.0.1500.94') ),
-
- ),
-
- 'Nokia' => array(
- 'Nokia200/2.0 (12.04) Profile/MIDP-2.1 Configuration/CLDC-1.1 UCWEB/2.0 (Java; U; MIDP-2.0; en-US; nokia200) U2/1.0.0 UCBrowser/8.9.0.251 U2/1.0.0 Mobile UNTRUSTED/1.0' => array('isMobile' => true, 'isTablet' => false),
- 'Nokia6303iclassic/5.0 (06.61) Profile/MIDP-2.1 Configuration/CLDC-1.1 Mozilla/5.0 AppleWebKit/420+ (KHTML, like Gecko) Safari/420+' => array('isMobile' => true, 'isTablet' => false),
- 'nokian73-1/UC Browser7.8.0.95/69/400 UNTRUSTED/1.0' => array('isMobile' => true, 'isTablet' => false),
- 'Nokia2760/2.0 (06.82) Profile/MIDP-2.1 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0' => array('isMobile' => true, 'isTablet' => false),
- 'NokiaN70-1/5.0737.3.0.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1/UC Browser7.8.0.95/27/352' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (S60V3; U; ru; NokiaN73) AppleWebKit/530.13 (KHTML, like Gecko) UCBrowser/8.6.0.199/28/444/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (S60V3; U; ru; NokiaC5-00.2)/UC Browser8.5.0.183/28/444/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (S60V3; U; ru; NokiaC5-00.2) AppleWebKit/530.13 (KHTML, like Gecko) UCBrowser/8.7.0.218/28/352/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Series40; NokiaC3-00/08.63; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/2.2.0.0.33' => array('isMobile' => true, 'isTablet' => false),
- 'Opera/9.80 (Series 60; Opera Mini/7.0.31380/28.2725; U; es) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Opera Mini' => '7.0.31380', 'Presto' => '2.8.119')),
- 'Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC7-00/025.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/022.014; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaE6-00/111.140.0058; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaC6-01/111.040.1511; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaC6-01; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia700/111.030.0609; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia700/111.020.0308; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.1.14 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaN8-00/111.040.1511; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia701/111.030.0609; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.83; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120ci/7.02; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/7.10; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE66-1/510.21.009; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE71-1/110.07.127; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95-3/20.2.011 Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE51-1/200.34.36; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE63-1/500.21.009; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN82/10.0.046; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE52-1/052.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.2' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE52-1/@version@; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.26 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00/031.022; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.3.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00.2/081.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.32 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaN79-1/32.001; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 Nokia6220c-1/06.101; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00.2/071.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.26 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE72-1/081.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.32 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00/061.005; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.2 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaX6-00/40.0.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gb' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5800d-1/60.0.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaC5-03/12.0.023; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.9 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5228/40.1.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5230/51.0.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5530c-2/32.0.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.9 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/21.0.045; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.4' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-4/30.0.004; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.28 3gpp-gba' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Symbian' => '9.4', 'Webkit' => '533.4', 'NokiaBrowser' => '7.3.1.28'), 'model' => 'NokiaN97-4' ),
-
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 7 Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; 710)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800C)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800C; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; HD7 T9292)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; LG E-900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 610)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; T-Mobile)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; Vodafone)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800) UP.Link/5.1.2.6' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; SFR)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; T-Mobile)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; vodafone)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Lumia 800c)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Lumia 920)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '10.0', 'Windows Phone OS' => '8.0', 'Trident' => '6.0'), 'model' => 'Lumia 920' ),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; lumia800)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 610)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 710)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 800)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 800C)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 900)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Nokia)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; TITAN X310e)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => 'TITAN X310e' ),
- ),
-
- 'Odys' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Plus Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.X; de-de; XENO10 Build/ODYS XENO 10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2.2; de-de; ODYS Space Build/I700T_P7_T04_TSCL_FT_R_0_03_1010_110623) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'OverMax' => array(
- 'OV-SteelCore(B) Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; OV-SteelCore Build/ICS.g08refem611.20121010) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'YONESTablet' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; BC1077 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- // @todo: Research http://www.pantech.com/
- 'Pantech' => array(
- 'PANTECH-C790/JAUS08312009 Browser/Obigo/Q05A Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; ko-kr; SKY IM-A600S Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build/GRI40) AppleWebKit/533.1 (KHTML like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Philips' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; W732 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
-
- ),
-
- 'PointOfView' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; POV_TAB-PROTAB30-IPS10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Prestigio' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; PMP5297C_QUAD Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; sk-sk; PMP7100D3G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'PMP7100D3G' ),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; sk-sk; PMP7280C3G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 MobilSafari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'PROSCAN' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; PLT8088 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- ),
-
- 'PyleAudio' => array(
- 'Mozilla/5.0 (Linux; Android 4.0.4; PTBL92BC Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '537.36', 'Chrome' => '31.0.1650.59')),
-
- ),
-
- 'RockChip' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; hu-hu; RK2818, Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android Android 2.1-RK2818-1.0.0; zh-cn; MD701 Build/ECLAIR) AppleWebKit/530.17 (KHTML like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'RossMoor' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.1; ru-ru; RM-790 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
-
- ),
-
- // @ref: http://www.qmobile.com.pk/complete_range.php#
- 'QMobile' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; A2 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- 'Samsung' => array(
- 'MQQBrowser/4.0/Mozilla/5.0 (Linux; U; Android 3.2; zh-cn; GT-P6800 Build/HTJ85B) AppleWebKit/533.1 (KHTML, like Gecko) Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('MQQBrowser' => '4.0')),
- 'SAMSUNG-SGH-P250-ORANGE/P250BVHH8 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0' => array('isMobile' => true, 'isTablet' => false),
- 'SAMSUNG-GT-B2710/B271MCXKF1 SHP/VPP/R5 Dolfin/2.0 QTV/5.3 SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 OPN-B' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Dolfin' => '2.0') ),
- 'SAMSUNG-SGH-D900i/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0' => array('isMobile' => true, 'isTablet' => false),
- 'SAMSUNG-GT-S5233T/S5233TXEJE3 SHP/VPP/R5 Jasmine/0.8 Qtv5.3 SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5380D/S5380FXXKL3; U; Bada/2.0; ru-ru) AppleWebKit/534.20 (KHTML, like Gecko) Dolfin/3.0 Mobile HVGA SMM-MMS/1.2.0 OPN-B' => array('isMobile' => true, 'isTablet' => false),
- 'SAMSUNG-GT-C3312/1.0 NetFront/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
- 'SAMSUNG-GT-S3650/S3650XEII3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'JUC (Linux; U; 2.3.6; zh-cn; GT-S5360; 240*320) UCWEB7.9.0.94/140/352' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5250/S5250XEKJ3; U; Bada/1.0; ru-ru) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WQVGA SMM-MMS/1.2.0 NexPlayer/3.0 profile/MIDP-2.1 configuration/CLDC-1.1 OPN-B' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8530/S8530XXJKA; U; Bada/1.2; cs-cz) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.2 Mobile WVGA SMM-MMS/1.2.0 OPN-B' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 1.6; ru-ru; Galaxy Build/Donut) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; ru-ru; GT-I5500 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; GALAXY_Tab Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2; ja-jp; SC-01C Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- // @about FROYO: http://gizmodo.com/5543853/what-is-froyo
- 'Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; SCH-i909 Build/FROYO) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; ja-jp; SC-01C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; el-gr; GT-I9001 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-ca; SGH-I896 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5660L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.261' => array('isMobile' => true, 'isTablet' => false, 'version' => array('MicroMessenger' => '4.5.1.261')),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; pl-pl; GT-I9001-ORANGE/I9001BVKPC Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6802 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; ru-ru; GT-S5830 Build/GRWK74; LeWa_ROM_Cooper_12.09.21) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-N7000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.2; he-il; GT-P7300 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; GT-P5100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('Chrome' => '16.0.912.75') ),
- 'Mozilla/5.0 (Linux; Android 4.0.3; SGH-T989 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Chrome' => '18.0.1025.166') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P5100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.4; GT-I9300 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; SPH-D710 Build/IMM76I) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300-ORANGE/I9300BVBLG2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; th-th; GT-I9300T Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-I9100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us ; GT-I9100 Build/IMM76D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.4.1.204/145/355' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; th-th; GT-P6800 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I747 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; GT-P5110 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.4; GT-P5110 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; SAMSUNG-GT-S7568_TD/1.0 Android/4.0.4 Release/07.15.2012 Browser/AppleWebKit534.30 Build/IMM76D) ApplelWebkit/534.30 (KHTML,like Gecko) Version/4.0 Mobile Safari/534.30' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4') ),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P3100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; tr-tr; GT-P3105 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-N8010 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-S7562 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; GT-N7100 Build/JZO54K) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22 OPR/14.0.1025.52315' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array( 'Build' => 'JZO54K', 'Webkit' => '537.22', 'Opera' => '14.0.1025.52315' ) ),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-hk; GT-N7105 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; GT-N8000 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.1; SGH-i747M Build/JRO03L) AppleWebKit/535.19(KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Galaxy Nexus - 4.1.1 - with Google Apps - API 16 - 720x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; GT-I8262 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; Galaxy Nexus Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-I777 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-S7710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9082 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; GT-P5210 Build/JDQ39) AppleWebKit/537.36 (KHTML, Like Gecko) Chrome/27.0.1453.90 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG GT-I9200 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; zh-cn; SCH-I959 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-P600 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
-
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-N5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
-
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; CETUS)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Focus I917 By TC)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Focus i917)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; FOCUS S)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-I8350)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-i8700)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-S7530)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Hljchm\'s Wp)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; I917)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA 7)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7 By MWP_HS)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i677)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917.)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917R)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i937)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SMG-917R)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG_blocked_blocked_blocked; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG_blocked_blocked_blocked_blocked; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SUMSUNG; OMNIA 7)' => array('isMobile' => true, 'isTablet' => false),
-
- ),
-
- 'simvalley' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; de-de; SP-80 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
-
- ),
-
- 'Sony' => array(
- 'SonyEricssonK800i/R1AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; es-ar; SonyEricssonE15a Build/2.0.1.A.0.47) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.1-update1; pt-br; SonyEricssonU20a Build/2.1.1.A.0.6) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; SonyEricssonX10i Build/3.0.1.G.0.75) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; SonyEricssonST18i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; hr-hr; SonyEricssonST15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; sk-sk; SonyEricssonLT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; th-th; SonyEricssonST27i Build/6.0.B.3.184) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; SonyEricssonST25i Build/6.0.B.3.184) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; Xperia Tablet S Build/TID0092) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'TID0092', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; Android 4.0.3; LT18i Build/4.1.A.0.562) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.3; Sony Tablet S Build/TISU0R0110) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; SonyEricssonLT18i Build/4.1.B.0.587) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-ch; SonyEricssonSK17i Build/4.1.B.0.587) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SonyEricssonLT26i Build/6.1.A.2.45) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; LT22i Build/6.1.B.0.544) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; vi-vn; SonyEricssonLT22i Build/6.1.B.0.544) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; ST23i Build/11.0.A.5.5) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; ST23i Build/11.0.A.2.10) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.0.4; LT28h Build/6.1.E.3.7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SGPT13 Build/TJDS0170) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; ja-jp; SonySO-03E Build/10.1.E.0.265) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Build' => '10.1.E.0.265', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- 'Mozilla/5.0 (Linux; Android 4.1.2; LT26w Build/6.2.B.1.96) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; SGP321 Build/10.3.1.A.0.33) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => '10.3.1.A.0.33', 'Webkit' => '537.31', 'Chrome' => '26.0.1410.58') ),
-
- 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; XL39h Build/14.2.A.1.136) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; sv-se; C5503 Build/10.1.1.A.1.273) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C5502 Build/10.1.1.A.1.310) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; SonyL39t Build/14.1.M.0.202) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; L39u Build/14.1.n.0.63) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; M35c Build/12.0.B.5.37) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.1.2; M35c Build/12.0.B.2.42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-CN; M35t Build/12.0.C.2.42) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.3.2.349 U3/0.8.0 Mobile Safari/534.31' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; D6502 Build/17.1.A.2.69) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; D6503 Build/17.1.A.0.504) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; D6543 Build/17.1.A.2.55) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2004 Build/20.0.A.0.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; en-gb; D2005 Build/20.0.A.1.12) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2104 Build/20.0.B.0.84) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2105 Build/20.0.B.0.74) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; pt-br; D2114 Build/20.0.B.0.85) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2302 Build/18.0.B.1.23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; S50h Build/18.0.b.1.23) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.6.3.413 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2303 Build/18.0.C.1.13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2305 Build/18.0.A.1.30) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D2306 Build/18.0.C.1.7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D5303 Build/19.0.1.A.0.207) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; D5306 Build/19.1.A.0.264) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; zh-CN; XM50h Build/19.0.D.0.269) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.7.6.428 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; XM50t Build/19.0.C.2.59) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; D5322 Build/19.0.D.0.253) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; M51w Build/14.2.A.1.146) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.3; M51w Build/14.2.A.1.146) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.1; D5102 Build/18.2.A.0.9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.1; D5103 Build/18.1.A.0.11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.1; D5106 Build/18.1.A.0.11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.3; en-gb; C6902 Build/14.2.A.1.136) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 GSA/3.2.17.1009776.arm' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; C6943 Build/14.1.G.2.257) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.4.2; C6943 Build/14.3.A.0.681) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; Android 4.2.2; SGP412 Build/14.1.B.3.320) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
-
- 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; SonySGP321 Build/10.2.C.0.143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.1.2; SGP351 Build/10.1.1.A.1.307) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.3; SGP341 Build/10.4.B.0.569) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.4.2; SGP511 Build/17.1.A.2.36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.4.2; SGP512 Build/17.1.A.2.36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-ch; SGP311 Build/10.1.C.0.344) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGP312 Build/10.1.C.0.344) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; SGP521 Build/17.1.A.2.69) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Safari/537.16' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn; SGP541 Build/17.1.A.2.36) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.4.2; SGP551 Build/17.1.A.2.72) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
-
- 'SonyEricssonU5i/R2CA; Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525' => array('isMobile' => true, 'isTablet' => false),
- 'SonyEricssonU5i/R2AA; Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.0' => array('isMobile' => true, 'isTablet' => false),
- 'Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC/BEL; en) Presto/2.7.61 Version/11.00' => array('isMobile' => false, 'isTablet' => false),
- 'Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
- ),
-
- 'Skk' => array('Mozilla/5.0 (Linux; U; Android 4.1; en-us; CYCLOPS Build/F10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)),
-
- 'Storex' => array(
- 'Mozilla/5.0 (Linux; Android 4.1.1; eZee_Tab903 Build/JRO03H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '537.36')),
- "Mozilla/5.0 (Linux; Android 4.1.1; eZee'Tab785 Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36" => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03C', 'Webkit' => '537.36')),
- "Mozilla/5.0 (Linux; Android 4.0.3; eZee'Tab971 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19" => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '535.19')),
- ),
-
- 'Tecno' => array('Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P9 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)),
-
- 'Telstra' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-au; T-Hub2 Build/TVA301TELBG3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- // @info: http://www.texet.ru/tablet/
- 'texet' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; TM-7021 Build/GB.m1ref.20120116) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.3.4', 'Webkit' => '533.1', 'Safari' => '4.0'), 'model' => 'TM-7021' ),
-
- ),
-
- 'Tolino' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '534.30', 'Safari' => '4.0')),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 8.9 Build/JDQ39) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '534.30', 'Safari' => '4.0')),
- 'Mozilla/5.0 (Linux; Android 4.2.2; tolino tab 7 Build/JDQ39) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1290.67495' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build/JDQ39) AppleWebkit/537.36 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Toshiba' => array(
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; TOSHIBA; TSUNAGI)' => array('isMobile' => true, 'isTablet' => false),
- // @ref: http://www.toshiba.co.uk/discontinued-products/folio-100/
- 'Mozilla/5.0 (Linux; U; Android 2.2; it-it; TOSHIBA_FOLIO_AND_A Build/TOSHIBA_FOLIO_AND_A) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.2', 'Webkit' => '533.1', 'Safari' => '4.0') ),
- ),
-
- 'Trekstor' => array(
- 'Mozilla/5.0 (Linux; Android 4.2.2; ST70408-1 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.31', 'Chrome' => '26.0.1410.58')),
- 'Mozilla/5.0 (Linux; Android 4.2.2; VT10416-2 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
- 'isMobile' => true, 'isTablet' => true
- ),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ST10216-2A Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30;SurfTab_10.1' => array(
- 'isMobile' => true, 'isTablet' => true
- ),
- ),
-
- 'Visture' => array(
-
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; V97 HD Build/LR-97JC) Apple WebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Visture V4 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V4 HD Build/Visture V4 HD) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; Visture V5 HD Build/Visture V5 HD) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Versus' => array(
- 'Mozilla/5.0 (Linux; Android 4.0.4; VS-TOUCHPAD 9 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; Versus Touchpad 9.7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; CnM-TOUCHPAD7 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 BMID/E67A45B1AB' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; CnM TouchPad 7DC Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 TwonkyBeamBrowser/3.3.5-95 (Android 4.1.1; rockchip CnM TouchPad 7DC Build/meizhi_V2.80.wifi8723.20121225.b11c800)' => array('isMobile' => true, 'isTablet' => true),
- 'OneBrowser/3.5/Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; TOUCHTAB Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '534.30', 'Safari' => '4.0') ),
- ),
-
- 'Viewsonic' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; ViewPad 10e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2; it-it; ViewPad7 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' =>array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; ViewSonic VB733 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 3.2; en-gb; ViewPad7X Build/HTJ85B) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 2.2; pt-br; ViewPad 10S Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; VB100a Pro Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Vodafone' => array(
- 'Mozilla/5.0 (Linux; U; Android 3.2; hu-hu; SmartTab10-MSM8260-V02d-Dec022011-Vodafone-HU) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.0.3; SmartTabII10 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; SmartTAB 1002 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Vonino' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Sirius_Evo_QS Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Q8 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- ),
-
- 'Xoro' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; PAD 9720QR Build/PAD 9719QR) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; Android 4.2.2; PAD720 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true)
- ),
-
- 'ZTE' => array(
- 'Mozilla/5.0 (Linux; U; Android 4.2.1;zh-cn; ZTE V987 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30;' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 2.3.5; pt-pt; Blade Build/tejosunhsine) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; N880e_Dawoer_Fulllock; China Telecom)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; V965W)' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; Windows Phone - Internet 7; SFR)' => array('isMobile' => true, 'isTablet' => false),
- ),
-
- 'Zync' => array(
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us ; Z909 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.4.1.204/145/444' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Console' => array(
-
- //Nintendo Wii:
- 'Mozilla/5.0 (Nintendo WiiU) AppleWebKit/534.52 (KHTML, like Gecko) NX/{Version No} NintendoBrowser/{Version No}.US' => array('isMobile' => false, 'isTablet' => false),
-
- //Sony PlayStation:
- 'Mozilla/5.0 (PLAYSTATION 3 4.21) AppleWebKit/531.22.8 (KHTML, like Gecko)' => array('isMobile' => false, 'isTablet' => false),
-
- //Microsoft Xbox:
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox)' => array('isMobile' => false, 'isTablet' => false),
- // WTF? Must investigate.
- //'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Xbox)' => array('isMobile' => false, 'isTablet' => false),
-
- ),
-
- 'Other' => array(
- 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.102 Chrome/32.0.1700.102 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0 AlexaToolbar/psPCtGhf-2.2' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (X11; Linux ppc; rv:17.0) Gecko/20130626 Firefox/17.0 Iceweasel/17.0.7' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (X11; Linux) AppleWebKit/535.22+ Midori/0.4' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.20+ Midori/0.4' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36 OPR/15.0.1147.18 (Edition Next)' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 5.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0' => array('isMobile' => false, 'isTablet' => false),
- 'Opera/9.80 (Windows NT 5.2; WOW64) Presto/2.12.388 Version/12.14' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (X11; FreeBSD amd64; rv:14.0) Gecko/20100101 Firefox/14.0.1' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Tablet PC 2.0; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MANMJS)' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
- 'Opera/9.80 (Windows NT 6.2; WOW64; MRA 8.0 (build 5784)) Presto/2.12.388 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
- // IE 10
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)' => array('isMobile' => false, 'isTablet' => false),
- // IE 11 @todo: Trident(.*)rv.(\d+)\.(\d+)
- 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko' => array('isMobile' => false, 'isTablet' => false),
- 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko' => array('isMobile' => false, 'isTablet' => false),
-
- // TV
- 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)' => array('isMobile' => false, 'isTablet' => false),
- 'HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)' => array('isMobile' => false, 'isTablet' => false),
- 'Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
- ),
-
- 'Generic' => array(
-
- 'Mozilla/5.0 (Linux; Android 4.0.3; ALUMIUM10 Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
- 'Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; JY-G3 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; M758A Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
-
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; EVOTAB Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- 'Java/1.6.0_22' => array('isMobile' => false, 'isTablet' => false, 'version' => array('Java' => '1.6.0_22') ),
- 'Opera/9.80 (Series 60; Opera Mini/6.5.29260/29.3417; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
- 'Opera/9.80 (Android; Opera Mini/6.5.27452/29.3417; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
- // New Opera
- 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17 OPR/14.0.1025.52315' => array('isMobile' => false, 'isTablet' => false),
- // Unknown yet
- // Looks like Chromebook
- 'Mozilla/5.0 (X11; CrOS armv7l 4920.83.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.103 Safari/537.36',
- 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5',
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-I9070 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
- 'Opera/9.80 (Android 2.3.7; Linux; Opera Mobi/46154) Presto/2.11.355 Version/12.10',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; it-it; DATAM819HD_C Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; SGPT12 Build/TID0142) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; cm_tenderloin Build/IMM76L; CyanogenMod-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
-
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; A210 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30', // Acer Iconia Tab
- 'Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25',
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mercury/7.2 Mobile/10A523 Safari/8536.25', // Mercurio Browser
- 'Opera/9.80 (Android 2.3.7; Linux; Opera Tablet/46154) Presto/2.11.355 Version/12.10',
- 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build/MASTER) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30', // sdk
- 'Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/JB_MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', // sdk
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
- 'Opera/9.80 (X11; Linux zbov) Presto/2.11.355 Version/12.10',
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', // 7" Verso Android tablet
- 'Mozilla/5.0 (iPhone; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit/532.9 (KHTML, like Gecko) Version/5.0.3 Mobile/8B5097d Safari/6531.22.7',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; SGPT12 Build/TID0142) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30', // sony xperia tablet s unforts
- 'Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7498.US',
- 'Mozilla/5.0 (Linux; U; Android 2.0.6_b1; ru-ru Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17', // PocketBook IQ701 (tablet)
- 'Mozilla/5.0 (Linux; Android 4.0.4; z1000 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19', // It is a tablet with calling
- 'Mozilla/5.0 (Linux; Android 4.0.3; cm_tenderloin Build/GWK74) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19', // HP touch pad running android cyanogenmod
- 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; Android for Techvision TV1T808 Board Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', // My device is tablet but its detected as phone
- 'BlackBerry8520/5.0.0.592 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/136',
- 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17', // its a lenovo tablet 2 with windows 8 pro
- 'Mozilla/5.0 (Linux; U; Android 3.1; ru-ru; LG-V900 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13',
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; HTC; Windows Phone 8S by HTC)',
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)', // MS Surface RT tablet actually!
- 'Mozilla/5.0 (PLAYSTATION 3 4.11) AppleWebKit/531.22.8 (KHTML, like Gecko)',
- 'Mozilla/5.0 (Linux; U; Android 3.2; ru-ru; V9S_V1.4) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13', // Wrong detection - 7-inch tablet was detected as a phone. Android 3.2.1, native browser
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)', // Nope, its a Microsoft Surface tablet running Windows RT (8) with MSIE 10
- 'Mozilla/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1', // Tablet!
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)', // its a Microsoft surface rt (tablet)
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; WebView/1.0)',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Next7P12 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30', // Nextbook 7SE Tablet
- 'Opera/9.80 (X11; Linux zbov) Presto/2.11.355 Version/12.10', // allview alldro speed tablet, android ics, opera mobile
- 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)', // Its a surface in portrait
- 'Mozilla/5.0 (Linux; U; Android 2.3.6; es-es; SAMSUNG GT-S5830/S5830BUKT2 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1',
- 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-gb;HTC_Flyer_P512 Build/HTK75C) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13',
- // Am ramas la pozitia: 207
-
- // Android on Windows :) www.socketeq.com
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; full Android on Microsoft Windows, pad, pc, n*books Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
-
- // TV
- 'Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC/BEL; en) Presto/2.7.61 Version/11.00',
-
- 'Mozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0',
- // Maxthon
- 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.0 Chrome/18.0.966.0 Safari/535.12',
- 'Opera/9.80 (Windows NT 5.1; U; Edition Yx; ru) Presto/2.10.289 Version/12.02',
- 'Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/JB_MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
- 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)',
- 'PalmCentro/v0001 Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/Palm-D061; Blazer/4.5) 16;320x320',
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)',
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator)',
- // @todo: research N880E
- 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; MAL; N880E; China Telecom)',
- 'Opera/9.80 (Series 60; Opera Mini/7.0.29482/28.2859; U; ru) Presto/2.8.119 Version/11.10',
- 'Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1202242143; U; en-GB) Presto/2.10.254 Version/12.00',
- 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-au; 97D Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30',
- 'Opera/9.80 (Android; Opera Mini/7.0.29952/28.2647; U; ru) Presto/2.8.119 Version/11.10',
- 'Opera/9.80 (Android; Opera Mini/6.1.25375/28.2555; U; en) Presto/2.8.119 Version/11.10',
- 'Opera/9.80 (Mac OS X; Opera Tablet/35779; U; en) Presto/2.10.254 Version/12.00',
- 'Mozilla/5.0 (Android; Tablet; rv:10.0.4) Gecko/10.0.4 Firefox/10.0.4 Fennec/10.0.4',
- 'Mozilla/5.0 (Android; Tablet; rv:18.0) Gecko/18.0 Firefox/18.0',
- 'Opera/9.80 (Linux armv7l; Maemo; Opera Mobi/14; U; en) Presto/2.9.201 Version/11.50',
- 'Opera/9.80 (Android 2.2.1; Linux; Opera Mobi/ADR-1207201819; U; en) Presto/2.10.254 Version/12.00' => array('isMobile' => true, 'isTablet' => false),
- 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; sdk Build/JRO03E) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30',
- 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; Endeavour 1010 Build/ONDA_MID) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true), // Blaupunkt Endeavour 1010
- 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; Tablet-PC-4 Build/ICS.g08refem618.20121102) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
- ),
-
- 'Bot' => array(
- 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
- 'grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
- 'Googlebot-Image/1.0' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
- 'Python-urllib/2.5' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
- 'facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/)
- ),
-
-);
+// Setup.
+$includeBasePath = dirname(__FILE__) . '/providers/vendors';
+$list = array();
+
+// Scan.
+$dir = new DirectoryIterator($includeBasePath);
+foreach ($dir as $fileInfo) {
+ if ($fileInfo->isDot()) {
+ continue;
+ }
+ $listNew = include $includeBasePath . '/' . $fileInfo->getFilename();
+ if (is_array($listNew)) {
+ $list = array_merge($list, $listNew);
+ }
+}
+
+return $list;
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/UserAgentTest.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/UserAgentTest.php
index 77cbc753858..6aca913ae66 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/UserAgentTest.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/UserAgentTest.php
@@ -1,37 +1,19 @@
* @license MIT License https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
* @link http://mobiledetect.net
*/
class UserAgentTest extends PHPUnit_Framework_TestCase
{
+ protected $detect;
protected static $ualist = array();
protected static $json;
+ public function setUp()
+ {
+ $this->detect = new Mobile_Detect;
+ }
+
public static function generateJson()
{
//in case this gets run multiple times
@@ -43,6 +25,9 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
$jsonFile = dirname(__FILE__) . '/ualist.json';
$phpFile = dirname(__FILE__) . '/UA_List.inc.php';
+ //currently stored as a PHP array
+ $list = include $phpFile;
+
//check recency of the file
if (file_exists($jsonFile) && is_readable($jsonFile)) {
//read the json file
@@ -51,7 +36,7 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
//check that the hash matches
$hash = isset($json['hash']) ? $json['hash'] : null;
- if ($hash == sha1_file($phpFile)) {
+ if ($hash == sha1(serialize($list))) {
//file is up to date, just read the json file
self::$json = $json['user_agents'];
@@ -59,6 +44,7 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
}
}
+
//uses the UA_List.inc.php to generate a json file
if (file_exists($jsonFile) && !is_writable($jsonFile)) {
throw new RuntimeException("Need to be able to create/update $jsonFile from UA_List.inc.php.");
@@ -68,8 +54,9 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
throw new RuntimeException("Insufficient permissions to create this file: $jsonFile");
}
- //currently stored as a PHP array
- $list = include $phpFile;
+
+
+ //print_r($list['Acer']); exit;
$json = array();
@@ -107,7 +94,7 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
}
//save the hash
- $hash = sha1_file($phpFile);
+ $hash = sha1(serialize($list));
$json = array(
'hash' => $hash,
'user_agents' => $json
@@ -149,8 +136,9 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
public function userAgentData()
{
- if (!count(self::$ualist))
+ if (!count(self::$ualist)) {
self::setUpBeforeClass();
+ }
return self::$ualist;
}
@@ -169,25 +157,24 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
}
//setup
- $md = new Mobile_Detect;
- $md->setUserAgent($userAgent);
+ $this->detect->setUserAgent($userAgent);
//is mobile?
- $this->assertEquals($md->isMobile(), $isMobile);
+ $this->assertEquals($this->detect->isMobile(), $isMobile);
//is tablet?
- $this->assertEquals($md->isTablet(), $isTablet);
+ $this->assertEquals($this->detect->isTablet(), $isTablet, 'FAILED: ' . $userAgent . ' isTablet: ' . $isTablet);
if (isset($version)) {
foreach ($version as $condition => $assertion) {
- $this->assertEquals($assertion, $md->version($condition), 'FAILED UA (version("'.$condition.'")): '.$userAgent);
+ $this->assertEquals($assertion, $this->detect->version($condition), 'FAILED UA (version("'.$condition.'")): '.$userAgent);
}
}
//version property tests
if (isset($version)) {
foreach ($version as $property => $stringVersion) {
- $v = $md->version($property);
+ $v = $this->detect->version($property);
$this->assertSame($stringVersion, $v);
}
}
@@ -196,7 +183,7 @@ class UserAgentTest extends PHPUnit_Framework_TestCase
//@todo: vendor test. The below is theoretical, but fails 50% of the tests...
/*if (isset($vendor)) {
$method = "is$vendor";
- $this->assertTrue($md->{$method}(), "Expected Mobile_Detect::{$method}() to be true.");
+ $this->assertTrue($this->detect->{$method}(), "Expected Mobile_Detect::{$method}() to be true.");
}*/
}
}
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest_tmp.php
similarity index 60%
rename from htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest.php
rename to htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest_tmp.php
index 06724144505..b2d7bf215d8 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest.php
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/VendorsTest_tmp.php
@@ -1,29 +1,5 @@
* @license MIT License https://github.com/serbanghita/Mobile-Detect/blob/master/LICENSE.txt
* @link http://mobiledetect.net
*/
@@ -49,21 +25,21 @@ class VendorsTest extends PHPUnit_Framework_TestCase
public function testisMobileIsTablet()
{
foreach (self::$items as $brand => $deviceArr) {
-
foreach ($deviceArr as $userAgent => $conditions) {
-
- if (!is_array($conditions)) { continue; }
+ if (!is_array($conditions)) {
+ continue;
+ }
$this->detect->setUserAgent($userAgent);
foreach ($conditions as $condition => $assert) {
-
// Currently not supporting version and model here.
// @todo: I need to split this tests!
- if ( in_array($condition, array('model') ) ) { continue; } // 'version',
+ if (in_array($condition, array('model'))) {
+ continue;
+ } // 'version',
switch ($condition) {
-
case 'version':
// Android, iOS, Chrome, Build, etc.
foreach ($assert as $assertKey => $assertValue) {
@@ -72,13 +48,11 @@ class VendorsTest extends PHPUnit_Framework_TestCase
//}
$this->assertTrue( $this->detect->$condition( $assertKey ) == $assertValue, 'UA ('.$condition.'('.$assertKey.') === '.$assertValue.'): '.$userAgent);
}
-
- break;
+ break;
default:
- $this->assertTrue( $this->detect->$condition() === $assert, 'UA ('.$condition.'): '.$userAgent);
- break;
-
+ $this->assertTrue($this->detect->$condition() === $assert, 'UA ('.$condition.'): '.$userAgent);
+ break;
}
}
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/phpunit.xml b/htdocs/includes/mobiledetect/mobiledetectlib/tests/phpunit.xml
index c780cebe223..2b10958d550 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/phpunit.xml
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/phpunit.xml
@@ -1,15 +1,15 @@
+ mapTestClassNameToCoveredClassName="true">
@@ -17,9 +17,11 @@
- ./
+ ./
-
+
+
+
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Acer.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Acer.php
new file mode 100644
index 00000000000..d8fc582085f
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Acer.php
@@ -0,0 +1,28 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; A100 Build/HTK55D) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; A110 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'IML74K'), 'model' => 'A200' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; A701 Build/JRO03H) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; B1-A71 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; B1-710 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; A1-810 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; A1-810 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Acer; Allegro)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; A3-A10 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true, 'version' => array(
+ 'Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.36', 'Chrome' => '32.0.1700.99',
+ ),
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; A1-811 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; A1-830 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; A3-A11 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36'=> array('isMobile' => true, 'isTablet' => true)
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Alcatel.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Alcatel.php
new file mode 100644
index 00000000000..96a36ac35e0
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Alcatel.php
@@ -0,0 +1,49 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-in; MB525 Build/GWK74; CyanogenMod-7.2.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; it-it; ALCATEL ONE TOUCH 918D Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '2.3.5', 'Webkit' => '533.1', 'Safari' => '4.0', 'Build' => 'GRJ90'), 'model' => 'ONE TOUCH 918D' ),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; ALCATEL ONE TOUCH 991 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '2.3.6', 'Webkit' => '533.1', 'Safari' => '4.0', 'Build' => 'GRJ90'), 'model' => 'ONE TOUCH 991' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; ALCATEL ONE TOUCH 993D Build/ICECREAM) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'ICECREAM'), 'model' => 'ONE TOUCH 993D' ),
+ 'ALCATEL_A392G/1.0 ObigoInternetBrowser/Q05A[TF013513002719521000000013182904148]' => array('isMobile' => true, 'isTablet' => false, 'model' => 'A392G'),
+ 'ALCATEL_3020D/1.0 ObigoInternetBrowser/Q03C' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2; ALCATEL ONE TOUCH 5037A Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'ALCATEL_3020G/1.0 ObigoInternetBrowser/Q03C' => array('isMobile' => true, 'isTablet' => false),
+ 'ALCATEL_3041D/1.0 ObigoInternetBrowser/Q03C' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 5037E Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 5037X Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 5037X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012A Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-nz; ONE TOUCH 6012A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012D Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; ONE TOUCH 6012D Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; En-us; ONE TOUCH 6012E Build/JDQ39) AppleWebKit/534.30 (KHTML, Like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12975 YaBrowser/13.12.1599.12975 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; bg-bg; ONE TOUCH 6012X Build/JDQ39) AppleWebKit/534.30 (KHTML like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 6012X_orange Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; fr-fr; ALCATEL ONE TOUCH 6012X_orange Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; fr-fr; 6016E Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; ALCATEL ONE TOUCH 6016E Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; 6016X Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; ALCATEL ONE TOUCH 6016X Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; ru-ru; 6016X Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 6032A Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; ru-ru; ALCATEL ONE TOUCH 6032X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-nz; ALCATEL ONE TOUCH 7040A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; th-th; ALCATEL ONE TOUCH 7040D Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7040D Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7040E Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; ALCATEL ONE TOUCH 7041D Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7041D Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7041X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; pt-pt; ALCATEL ONE TOUCH 7041X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020A Build/JDQ39) AppleWebKit/537.36 (KHTML, Like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020A Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020D Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; ALCATEL ONE TOUCH 8020D Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020E Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020E Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Allview.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Allview.php
new file mode 100644
index 00000000000..7bbcb5ea25d
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Allview.php
@@ -0,0 +1,11 @@
+ array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; ALLVIEW P5 Build/IML74K) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us ; ALLVIEW SPEEDI Build/IMM76D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.5.3.246/145/355' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; AllviewCity Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ALLVIEWSPEED Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Amazon.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Amazon.php
new file mode 100644
index 00000000000..82fa5ac44d2
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Amazon.php
@@ -0,0 +1,14 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.4 Mobile Safari/535.19 Silk-Accelerated =true' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600x800; rotate)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Webkit' => '528.5+', 'Kindle' => '3.0', 'Safari' => '4.0'), 'model' => 'Kindle' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; en-us; KFTT Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.21 Safari/535.19 Silk-Accelerated=true' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; en-us; KFTHWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.21 Safari/535.19 Silk-Accelerated=true' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; en-us; KFJWI Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.21 Safari/535.19 Silk-Accelerated=true' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; en-us; KFSOWI Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Silk/3.21 Safari/535.19 Silk-Accelerated=true' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.1; xx-xx; T720-WIFI Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Apple.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Apple.php
new file mode 100644
index 00000000000..931de962eba
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Apple.php
@@ -0,0 +1,27 @@
+ array(
+ 'iTunes/9.1.1' => array('isMobile' => false, 'isTablet' => false),
+ 'iTunes/11.0.2 (Windows; Microsoft Windows 8 x64 Business Edition (Build 9200)) AppleWebKit/536.27.1' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A4449d Safari/9537.53' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '420+', 'Safari' => '3.0') ),
+ 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '3_0', 'Webkit' => '528.18', 'Safari' => '4.0'), 'model' => 'iPhone', 'mobileGrade' => 'B' ),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9B206 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '5_1_1', 'Webkit' => '534.46', 'Mobile' => '9B206', 'Safari' => '5.1'), 'model' => 'iPhone' ),
+ 'Mozilla/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0', 'Webkit' => '536.26', 'Mobile' => '10A403', 'Safari' => '6.0'), 'model' => 'iPod'),
+ 'Mozilla/5.0 (iPad; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.80 Mobile/9B206 Safari/7534.48.3 (6FF046A0-1BC4-4E7D-8A9D-6BF17622A123)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '5_1_1', 'Webkit' => '534.46.0', 'Chrome' => '21.0.1180.80', 'Mobile' => '9B206'), 'model' => 'iPad' ),
+ 'Mozilla/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A403 Safari/8536.25' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '6_0', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10A403'), 'model' => 'iPad' ),
+ 'Mozilla/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '4_2_1', 'Webkit' => '533.17.9', 'Safari' => '5.0.2', 'Mobile' => '8C148'), 'model' => 'iPad', 'mobileGrade' => 'B' ),
+ 'Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10' => array('isMobile' => true, 'isTablet' => true, 'version' => array('iOS' => '3_2', 'Webkit' => '531.21.10', 'Safari' => '4.0.4', 'Mobile' => '7B334b'), 'model' => 'iPad', 'mobileGrade' => 'B' ),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; da-dk) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/21.0.1180.82 Mobile/10A523 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0_1', 'Webkit' => '534.46.0', 'Chrome' => '21.0.1180.82', 'Mobile' => '10A523'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10A523 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_0_1', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10A523'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X; ru-ru) AppleWebKit/536.26 (KHTML, like Gecko) CriOS/23.0.1271.100 Mobile/10B142 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_1', 'Webkit' => '536.26', 'Chrome' => '23.0.1271.100', 'Mobile' => '10B142'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '6_1_3', 'Webkit' => '536.26', 'Safari' => '6.0', 'Mobile' => '10B329'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
+ 'Mozilla/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Coast/1.0.2.62956 Mobile/10B329 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Coast' => '1.0.2.62956')),
+ 'CheckMyBus iOS mobile App 0.9.0 (iPhone; iPhone OS/7.1.1)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit/537.51.1 (KHTML, like Gecko) Version/7.0 Mobile/11A465 Safari/9537.53' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) CriOS/38.0.2125.59 Mobile/12A405 Safari/600.1.4' => array('isMobile' => true, 'isTablet' => false),
+ 'VendorAppName/1.7.0 (iPhone; iOS 8.1.2; Scale/3.00)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('iOS' => '8.1.2'), 'model' => 'iPhone', 'mobileGrade' => 'A' ),
+ 'Mozilla/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit/601.1.17 (KHTML, like Gecko) Version/8.0 Mobile/13A175 Safari/600.1.4' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit/601.1.37 (KHTML, like Gecko) Version/8.0 Mobile/13A4293g Safari/600.1.4' => array('isMobile' => true, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Archos.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Archos.php
new file mode 100644
index 00000000000..3fda3c9ab9c
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Archos.php
@@ -0,0 +1,67 @@
+ array(
+
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Qilive 97R Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; Archos 50 Platinum Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; ARCHOS 80G9 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; fr-fr; A101IT Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 101 Neon Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 101 Cobalt Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 80 TITANIUM Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; ARCHOS 101 Titanium Build/JRO03H) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 70b TITANIUM Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; Archos 80 Xenon Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 79 Xenon Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 101 Titanium Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 80XSK Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS FAMILYPAD 2 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; ARCHOS 97B TITANIUM Build/JRO03H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ARCHOS 101 XS 2 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; ARCHOS 80b PLATINUM Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 70 Xenon Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; ARCHOS 97 CARBON Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 97 TITANIUMHD Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Archos 90 Neon Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 1.6; de-de; Archos5 Build/Donut) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS GAMEPAD Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Asus.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Asus.php
new file mode 100644
index 00000000000..5d817e34a94
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Asus.php
@@ -0,0 +1,22 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '3.2.1', 'Webkit' => '534.13', 'Safari' => '4.0'), 'model' => 'Transformer TF101' ),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Transformer Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; asus_laptop Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03L', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; Android 4.2.1; ME301T Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.1', 'Build' => 'JOP40D') ),
+ 'Mozilla/5.0 (Linux; Android 4.2.1; ME173X Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.1', 'Build' => 'JOP40D') ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; TF300T Build/JDQ39E) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39E') ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; K00C Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; K00E Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; K00F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; K00L Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ME302KL Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; K010 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; K017 Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Blackberry.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Blackberry.php
new file mode 100644
index 00000000000..7f1c106e47d
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Blackberry.php
@@ -0,0 +1,35 @@
+ array(
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9300; en) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.546 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '534.8+', 'BlackBerry' => '6.0.0.546'), 'model' => 'BlackBerry 9300' ),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9360; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.400 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; he) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.723 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9700; en-US) AppleWebKit/534.8 (KHTML, like Gecko) Version/6.0.0.448 Mobile Safari/534.8' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9790; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.714 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Webkit' => '534.11+', 'BlackBerry' => '7.1.0.714'), 'model' => 'BlackBerry 9790' ),
+ 'Opera/9.80 (BlackBerry; Opera Mini/7.0.29990/28.2504; U; en) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9981; en-GB) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.342 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9800; en-GB) AppleWebKit/534.8+ (KHTML, like Gecko) Version/6.0.0.546 Mobile Safari/534.8+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9780; es) AppleWebKit/534.8 (KHTML, like Gecko) Version/6.0.0.480 Mobile Safari/534.8' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9810; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Version/7.0.0.583 Mobile Safari/534.11' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9860; es) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.0.0.576 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit/534.11 (KHTML, like Gecko) Version/7.1.0.523 Mobile Safari/534.11' => array('isMobile' => true, 'isTablet' => false),
+ 'BlackBerry8520/5.0.0.592 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/136' => array('isMobile' => true, 'isTablet' => false),
+ 'BlackBerry8520/5.0.0.1067 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/603' => array('isMobile' => true, 'isTablet' => false),
+ 'BlackBerry8520/5.0.0.1036 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/611' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('BlackBerry' => '5.0.0.1036', 'VendorID' => '611'), 'model' => 'BlackBerry8520' ),
+ 'Mozilla/5.0 (BlackBerry; U; BlackBerry 9220; en) AppleWebKit/534.11+ (KHTML, like Gecko) Version/7.1.0.337 Mobile Safari/534.11+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit/536.2+ (KHTML, like Gecko) Version/7.2.1.0 Safari/536.2+' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.1+ (KHTML, like Gecko) Version/10.0.0.1337 Mobile Safari/537.1+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BB10; Touch) AppleWebKit/537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (BB10; Touch) /537.10+ (KHTML, like Gecko) Version/10.0.9.2372 Mobile Safari/537.10+' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('BlackBerry' => '10.0.9.2372') ),
+ 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '3.2.1', 'Webkit' => '534.13', 'Safari' => '4.0'), 'model' => 'Transformer TF101' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A200' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A500' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'A501' ),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Transformer Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'Transformer' ),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'Transformer Pad TF300T' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build/JZO54K; CyanogenMod-10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'JZO54K'), 'model' => 'Transformer' ),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; B1-A71 Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Webkit' => '535.19', 'Chrome' => '18.0.1025.166'), 'model' => 'B1-A71' ),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Acer; Allegro)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Windows Phone OS' => '7.5', 'Trident' => '5.0', 'IE' => '9.0'), 'model' => 'Allegro' ),
+ ),
+
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Dell.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Dell.php
new file mode 100644
index 00000000000..2c94b9728a1
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Dell.php
@@ -0,0 +1,13 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 1.6; en-gb; Dell Streak Build/Donut AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/ 525.20.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; hd-us; Dell Venue Build/GWK74; CyanogenMod-7.2.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; DELL; Venue Pro)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; Venue 8 3830 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; Venue 7 3730 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; Venue 7 HSPA+ Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; Venue 8 3830 Build/JSS15Q) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; zh-cn; Dell Streak 10 Pro Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Google.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Google.php
new file mode 100644
index 00000000000..688653304cd
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Google.php
@@ -0,0 +1,18 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Nexus 4 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.40 Mobile Safari/537.31 OPR/14.0.1074.54070' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.31', 'Opera' => '14.0.1074.54070') ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Nexus 4 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.2.2', 'Chrome' => '26.0.1410.58')),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Google Nexus 4 - 4.1.1 - API 16 - 768x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Google Galaxy Nexus - 4.1.1 - API 16 - 720x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Nexus 7 Build/JRO03D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2; Nexus 7 Build/JOP40C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; Nexus 7 Build/JZ054K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Chrome' => '18.0.1025.166') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; cs-cz; Nexus S Build/JZO54K; CyanogenMod-10.0.0) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android; en_us; Nexus 7 Build/) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 NetFrontLifeBrowser/2.3 Mobile (Dragonfruit)' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 5.1; Nexus 5 Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36 momoWebView/6.3.1 android/404(Nexus 5;android 5.1;zh_CN;10;netType/1)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JWR66Y) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HP.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HP.php
new file mode 100644
index 00000000000..4f8b14a8217
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HP.php
@@ -0,0 +1,21 @@
+ array(
+ 'Mozilla/5.0 (hp-tablet; Linux; hpwOS/3.0.5; U; en-GB) AppleWebKit/534.6 (KHTML, like Gecko) wOSBrowser/234.83 Safari/534.6 TouchPad/1.0' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; HP Slate 7 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HP Slate 7 Build/JRO03H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; HP 8 Build/1.0.7_WW-FIR-13) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HP Slate 10 HD Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HP Slate 8 Pro Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Slate 21 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36 OPR/22.0.1485.78487' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.3; HP SlateBook 10 x2 PC Build/4.3-17r20-03-23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HTC.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HTC.php
new file mode 100644
index 00000000000..cf6caebacc1
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/HTC.php
@@ -0,0 +1,363 @@
+ array(
+ 'Mozilla/5.0 (X11; Linux x86_64; Z520m; en-ca) AppleWebKit/534.24 (KHTML, like Gecko) Chrome/11.0.696.34 Safari/534.24' => array('isMobile' => true, 'isTablet' => false),
+ 'HTC_Touch_HD_T8282 Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 1.5; en-us; ADR6200 Build/CUPCAKE) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1; xx-xx; Desire_A8181 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; en-gb; HTC Desire Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; HTC Desire Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; en-dk; Desire_A8181 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; xx-xx; 001HT Build/FRF91) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; xx-xx; HTCA8180/1.0 Android/2.2 release/06.23.2010 Browser/WAP 2.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.2; de-at; HTC Desire Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.2; en-sk; Desire_A8181 Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3; xx-xx; HTC/DesireS/1.07.163.1 Build/GRH78C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-lv; HTC_DesireZ_A7272 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC/DesireS/2.10.161.3 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC_DesireS_S510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; Inspire 4G Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; de-de; HTC Explorer A310e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_ChaCha_A810e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; nl-nl; HTC_DesireHD_A9191 Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC Desire S Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; HTC Desire Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; de-de; HTC_DesireHD Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ua; HTC_WildfireS_A510e Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; HTC Vision Build/GRI40; ILWT-CM7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; HTC_GOF_U/1.05.161.1 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; hu-hu; HTC Sensation Z710e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC Sensation XE with Beats Audio Z715e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; pl-pl; EVO3D_X515m Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC_A320e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-tw; HTC Desire V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; PG86100 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-nl; SensationXE_Beats_Z715e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; cs-ee; Sensation_Z710e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HTC Evo 4G Build/MIUI) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; Desire HD Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-my; HTC_One_X Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; IncredibleS_S710e Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-fr; HTC_Desire_S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC Butterfly Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; EVO Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTCSensation Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-S6312 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC 7 Mozart T8698; QSD8x50)' => array(
+ 'isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '9.0', 'Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => '7 Mozart T8698',
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-gb;HTC_Flyer_P512 Build/HTK75C) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+
+ 'Mozilla/5.0 (Linux; U; Android 3.1; zh-tw; HTC PG09410 Build/HMJ15) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 HTC MOZART)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mondrian T8788)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Mozart; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Pro T7576)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Pro)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Schubert T9292)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Surround)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Trophy T8686)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; 7 Trophy)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Eternity)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Gold)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD2 LEO)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD2)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD7 T9292)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; HD7)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; iPad 3)' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; LEO)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mazaa)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mondrian)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Mozart)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; mwp6985)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PC40100)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PC40200)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PD67100)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PI39100)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; PI86100)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar 4G)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 1.08.164.02)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 2.05.164.01)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar C110e; 2.05.168.02)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Radar; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schuber)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schubert T9292)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Schubert)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Spark)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Surround)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T7575)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T8697)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T8788)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T9295)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; T9296)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; TITAN X310e)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Titan)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; Torphy T8686)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC; X310e)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; HTC_blocked; T8788)' => array(
+ 'isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '9.0', 'Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => 'T8788',
+ ),
+
+ 'Mozilla/5.0 (Linux; Android 4.0.4; HTC One S Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; HTC One X Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-th; HTC One V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; HTC One X Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-id; HTC One X Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One S Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-at; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03L) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One X Build/JZO54K) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-pe; HTC One V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; HTC One X Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 Maxthon/4.0.4.1000' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19 AlexaToolbar/alxf-2.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One S Build/IML74K) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; de-de; HTC One Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31 OPR/14.0.1074.58201' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39E) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One XL Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Mobile Safari/537.36 OPR/15.0.1162.60140' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.24 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'HTC One X Linux/3.0.13 Android/4.1.9 Release/10.12.2012 Browser/AppleWebKit534.30 Profile/MIDP-2.0 Configuration/CLDC-1.1 Mobile Safari/534.30 Android 4.0.1;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One 801e Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; HTC One X Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.63 Mobile Safari/537.36 OPR/15.0.1162.61541' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One XL Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X+ Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC One X Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30/4.05d.1002.m7' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-in; HTC One V Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; HTC One X Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.0.1.352' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; HTC One X Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; HTC One Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One SV Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One mini Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; HTC One Build/IMM76D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One 801e Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-ch; HTC One Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; HTC One X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC One S Build/IML74K) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17 T5/2.0 baidubrowser/3.1.6.4 (Baidu; P1 4.0.3)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X+ Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; HTC One 801e Build/JSS15J) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.4.1.362 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4; HTC One Build/KRT16S.H5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One SV Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1; ru-ru; HTC One Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; ru-ru; HTC One 801e Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One 801e Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One mini Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.12975 YaBrowser/13.12.1599.12975 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4; HTC One Build/KRT16S) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; HTC One Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One X Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One X Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JWR66Y.H1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; de-at; HTC One Build/JSS15J) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One dual sim Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; HTC One S Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One max Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.132 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One mini Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One 801e Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; HTC One Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/5.2.380' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.133 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.132 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; HTC One X Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; HTC One S Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-kw; HTC One X+ Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One max Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.3.0.49_r693790.420' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru; HTC One V Build/IML74K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.7.5.418 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 MicroMessenger/5.2.1.381' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One mini Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; ru-ru; HTC One mini Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru; HTC One V Build/IML74K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.8.0.435 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One 801e Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HTC One X - 4.2.2 - API 17 - 720x1280 Build/JDQ39E) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.128 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.128 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.128 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One_M8 Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; HTC One VX Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.76 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One V Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One dual sim Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One dual sim Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36 OPR/22.0.1485.78487' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One_M8 Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One 801e Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One 801e Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; HTC One X Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36 OPR/22.0.1485.81203' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One 801e Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; HTC One S Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-tw; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One_M8 Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; HTC One V Build/IML74K) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.9.2.467 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One mini Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; HTC One_M8 Build/KOT49H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One dual sim Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.117 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.72 Mobile Safari/537.36 OPR/19.0.1340.69721' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One_M8 Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One SV Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 ACHEETAHI/2100050056' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One_M8 Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JWR66Y.H1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One SV Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FBAN/FB4A;FBAV/21.0.0.23.12;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; ru-si; HTC One X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 MicroMessenger/6.0.0.67_r853700.483 NetType/WIFI' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 [FBAN/FB4A;FBAV/22.0.0.15.13;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-US; HTC One X Build/JRO03C) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/10.0.1.512 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One Build/KTU84P.H1) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FBAN/FB4A;FBAV/22.0.0.15.13;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 [FBAN/FB4A;FBAV/22.0.0.15.13;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One SV Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FBAN/FB4A;FBAV/22.0.0.15.13;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-tw; HTC One X+ Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 BingWeb/5.2.0.20140710' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; HTC One Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-mx; HTC One S Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FBAN/FB4A;FBAV/23.0.0.22.14;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.3; es-es; HTC One 801e Build/KTU84L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X+ Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.69 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; HTC One S Build/JRO03C) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-th; HTC One Build/KOT49H) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-ar; HTC One X Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One_M8 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-us; HTC One X+ Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-mx; HTC One S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/24.0.0.30.15;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; HTC One Build/KTU84L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One dual sim Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/25.0.0.19.30;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 5.0.1; HTC One_M8 Build/LRX22C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/25.0.0.19.30;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.89 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; HTC One_M8 Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; HTC One X Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; HTC One mini Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 5.0.1; HTC One_M8 Build/LRX22C.H5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.109 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Huawei.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Huawei.php
new file mode 100644
index 00000000000..f5ffca8e568
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Huawei.php
@@ -0,0 +1,17 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; bg-bg; Ideos S7 Build/ERE27) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.1; en-us; Ideos S7 Build/ERE27) AppleWebKit/525.10+ (KHTML, like Gecko) Version/3.0.4 Mobile Safari/523.12.2' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; lt-lt; U8660 Build/HuaweiU8660) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; ru-ru; HUAWEI-U8850 Build/HuaweiU8850) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; pl-pl; MediaPad Build/HuaweiMediaPad) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; nl-nl; HUAWEI MediaPad Build/HuaweiMediaPad) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'HUAWEI_T8951_TD/1.0 Android/4.0.4 (Linux; U; Android 4.0.4; zh-cn) Release/05.31.2012 Browser/WAP2.0 (AppleWebKit/534.30) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; ar-eg; MediaPad 7 Youth Build/HuaweiMediaPad) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_C8815/C8815V100R001C541B135; 540*960; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_C8813D/C8813DV100R001C92B172; 480*854; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_Y300C/Y300CV100R001C92B168; 480*800; CTC/2.0) AppleWebKit/534.30 (KHTML, like Gecko) Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false)
+ ),
+
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/LG.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/LG.php
new file mode 100644
index 00000000000..1b0bc7dd767
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/LG.php
@@ -0,0 +1,35 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; LG-VS410PP Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.2; pt-br; LG-P350f Build/FRG83G) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LG-P500 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; LG-E510 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MMS/LG-Android-MMS-V1.0/1.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; VS910 4G Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-P700 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build/IML74K) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; LG-F160S Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-E610v/V10f Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; LG-E612 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; LG-F180K Build/JZO54K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; LG-V500 Build/JDQ39B) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; LG-V510 Build/KOT49H.L004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG E-900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-C900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-C900k)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-E900h)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; LG; LG-Optimus 7)' => array('isMobile' => true, 'isTablet' => false),
+ // @ref: http://ja.wikipedia.org/wiki/L-06C
+ 'Mozilla/5.0 (Linux; U; Android 3.0.1; ja-jp; L-06C Build/HRI66) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; LG-V900 Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-gb; LG-V700 Build/KOT49I.A1403851714) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; LG-V500 Build/KOT49I.V50020d) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.102 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; en-us; LG-V410/V41010d Build/KOT49I.V41010d) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.1599.103 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lava.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lava.php
new file mode 100644
index 00000000000..95c37868842
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lava.php
@@ -0,0 +1,23 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; Iris 349 Build/MocorDroid2.3.5) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; iris402+ Build/iris402+) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; IRIS402 Build/LAVAIRIS402) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; iris405 Build/LAVAIRIS405) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; IRIS_501 Build/LAVAIRIS501) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; iris402e Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; iris503e Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.3697; en-US; IRIS402) U2/1.0.0 UCBrowser/9.1.1.420 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'UCWEB/2.0 (MIDP-2.0; U; Adr 4.2.2; en-US; IRIS402) U2/1.0.0 UCBrowser/9.1.1.420 U2/1.0.0 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.3697; en-US; IRIS355) U2/1.0.0 UCBrowser/9.1.1.420 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; iris356 Build/irisIRIS356) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.5.0.360 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.3697; en-US; iris356) U2/1.0.0 UCBrowser/9.0.2.389 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; iris500 Build/iris500) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; iris700 Build/iris700) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; QPAD E704 Build/JDQ39) AppleWebKit/537.36 (KHTML like Gecko) Chrome/36.0.1985.131 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2; xx-xx; IvoryS Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-US; E-TAB IVORY Build/E702) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.3.0.321 U3/0.8.0 Mobile Safari/534.31' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; tr-tr; E-TAB Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true)
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Leader.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Leader.php
new file mode 100644
index 00000000000..fbdf4b5cdc1
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Leader.php
@@ -0,0 +1,6 @@
+ array('isMobile' => true, 'isTablet' => true)
+ )
+);
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lenovo.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lenovo.php
new file mode 100644
index 00000000000..d4f6e6fd53e
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Lenovo.php
@@ -0,0 +1,46 @@
+ array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-au; ThinkPad Tablet Build/ThinkPadTablet_A400_03) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'UCWEB/2.0 (Linux; U; Opera Mini/7.1.32052/30.3697; en-US; IdeaTabA1000-G) U2/1.0.0 UCBrowser/9.2.0.419 Mobile' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; IdeaTabA1000-F Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.1; Lenovo A3000-H Build/JOP40D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.117 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; IdeaTab A3000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.360' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1; zh-cn; Lenovo-A3000-H/S100) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.300' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-us; IdeaTab A3000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; IdeaTab A2107A-H Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; IdeaTabA2109A Build/JRO03R) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; nl-nl; IdeaTabA2109A Build/JRO03R) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.300' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; IdeaTab S6000-H Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Lenovo B8000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2;it-it; Lenovo B8000-F/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; it-it; Lenovo B6000-F/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.2.2 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Lenovo B6000-F Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; IdeaPadA10 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; Ideapad K1 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; IdeaPad A1 Build/GRK393; CyanogenMod-7) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.3; Lenovo B8080-H Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; hu-hu; Lenovo A3500-FL Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; Lenovo A7600-F Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; Lenovo A5500-F Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.131 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Lenovo A390 Linux/3.0.13 Android/4.4.2 Release/04.03.2013 Browser/AppleWebKit534.30 Profile/MIDP-2.0 Configuration/CLDC-1.1 Mobile Safari/534.30 Android 4.0.1;' => array('isMobile' => true, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Mi.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Mi.php
new file mode 100644
index 00000000000..4cd332fcdd2
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Mi.php
@@ -0,0 +1,22 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2; xx-xx; HM NOTE 1W Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 MobilSafari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.1; zh-cn; MI-ONE Plus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.1; zh-cn; MI-ONE Plus Build/ITL41D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2SC Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build/JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; MI 1S Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.8; zh-cn; xiaomi2 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko)Version/4.0 MQQBrowser/4.4 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; MI 2A Build/miui.es JRO03L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1; zh-cn; MI 3 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; MI 1S Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; MI 3W Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; HM 1SC Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; HM 1SW Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.0.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; HM NOTE 1W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.0.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; MI-ONE C1 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.4; en-us; MI 4W Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36 XiaoMi/MiuiBrowser/2.0.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4; MI PAD Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Microsoft.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Microsoft.php
new file mode 100644
index 00000000000..e46edc0904b
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Microsoft.php
@@ -0,0 +1,30 @@
+ array(
+ // Surface tablet
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('IE' => '10.0', 'Windows NT' => '6.2', 'Trident' => '6.0') ),
+ // Ambiguos.
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0)' => array('isMobile' => true, 'isTablet' => false),
+ // Ambiguos.
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => array('isMobile' => true, 'isTablet' => false),
+ // http://www.whatismybrowser.com/developers/unknown-user-agent-fragments
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; ARMBJS)' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
+
+ // Thanks to Jonathan Donzallaz!
+ // Firefox (nightly) in metro mode on Dell XPS 12
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko/20130626 Firefox/25.0' => array('isMobile' => false, 'isTablet' => false),
+ // Firefox in desktop mode on Dell XPS 12
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko/20100101 Firefox/22.0' => array('isMobile' => false, 'isTablet' => false),
+ // IE10 in metro mode on Dell XPS 12
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MDDCJS)' => array('isMobile' => false, 'isTablet' => false),
+ // IE10 in desktop mode on Dell XPS 12
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MDDCJS)' => array('isMobile' => false, 'isTablet' => false),
+ // Opera on Dell XPS 12
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36 OPR/15.0.1147.130' => array('isMobile' => false, 'isTablet' => false),
+ // Chrome on Dell XPS 12
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+ // Google search app from Windows Store
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; MDDCJS; WebView/1.0)' => array('isMobile' => false, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Motorola.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Motorola.php
new file mode 100644
index 00000000000..d322660d1f3
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Motorola.php
@@ -0,0 +1,52 @@
+ array(
+ 'MOT-W510/08.11.05R MIB/BER2.2 Profile/MIDP-2.0 Configuration/CLDC-1.1 EGE/1.0 UP.Link/6.3.0.0.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.2; zh-cn; ME722 Build/MLS2GC_2.6.0) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build/4.5.1_57_DX8-51) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build/4.5.1A-1_SUN-254_13) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; es-us; MB526 Build/4.5.2-51_DFL-50) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-ca; MB860 Build/4.5.2A-51_OLL-17.8) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-us; MOT-XT535 Build/V1.540) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; ko-kr; A853 Build/SHOLS_U2_05.26.3; CyanogenMod-7.1.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 3.0; en-us; Xoom Build/HRI39) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build/6.7.2-180_DHD-16_M4-31) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build/IMM76L) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; XT687 Build/V2.27D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'XT687' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; MOT-XT910 Build/6.7.2-180_SPU-19-TA-11.6) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT910 Build/9.8.2O-124_SPUL-17) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT915 Build/2_32A_2031) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT919 Build/2_290_2017) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT925 Build/9.8.2Q-50-XT925_VQLM-20) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT907 Build/9.8.1Q-66) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT901 Build/9.8.2Q-50_SLS-13) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; DROID BIONIC Build/9.8.2O-72_VZW-22) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT1022 Build/KXC20.82-14) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.4; en-in; XT1022 Build/KXC21.5-40) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16'=> array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT1025 Build/KXC20.82-13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT1052 Build/KLA20.16-2.16.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; XT1052 Build/13.9.0Q2.X_83) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; XT1053 Build/13.9.0Q2.X_61) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Mobile Safari/537.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; XT1053 Build/13.9.0Q2.X_55) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; XT1056 Build/13.9.0Q2.X-116-MX-17-6-2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.64 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT1031 Build/KXB20.9-1.10-1.18-1.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; XT1032 Build/KXB21.14-L1.40) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; XT1032 Build/KLB20.9-1.10-1.24-1.1) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.16' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT1034 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-us; XT1034 Build/14.10.0Q3.X-84-16) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; XT1035 Build/14.10.0Q3.X-23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.3; XT1039 Build/KXB21.14-L1.31) AppleWebKit/537.36 (KHTML like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; XT919 Build/2_290_2002) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT919 Build/2_290_2004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; XT920 Build/2_290_2014) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; XT920 Build/2_310_2014) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; XT905 Build/7.7.1Q_GCIRD-16) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; XT908 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; XT897 Build/7.7.1Q-6_SPR-ASANTI_LE-18) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 5.0.2; XT1032 Build/LXB22.46-28.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 5.1.1; Moto E Build/LMY47V) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/39.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; XT1021 Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/33.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Nokia.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Nokia.php
new file mode 100644
index 00000000000..99cf9d9bb62
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Nokia.php
@@ -0,0 +1,84 @@
+ array(
+ 'Nokia200/2.0 (12.04) Profile/MIDP-2.1 Configuration/CLDC-1.1 UCWEB/2.0 (Java; U; MIDP-2.0; en-US; nokia200) U2/1.0.0 UCBrowser/8.9.0.251 U2/1.0.0 Mobile UNTRUSTED/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Nokia6303iclassic/5.0 (06.61) Profile/MIDP-2.1 Configuration/CLDC-1.1 Mozilla/5.0 AppleWebKit/420+ (KHTML, like Gecko) Safari/420+' => array('isMobile' => true, 'isTablet' => false),
+ 'nokian73-1/UC Browser7.8.0.95/69/400 UNTRUSTED/1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Nokia2760/2.0 (06.82) Profile/MIDP-2.1 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Nokia3650/1.0 SymbianOS/6.1 Series60/1.2 Profile/MIDP-1.0 Configuration/CLDC-1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'NokiaN70-1/5.0737.3.0.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1/UC Browser7.8.0.95/27/352' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (S60V3; U; ru; NokiaN73) AppleWebKit/530.13 (KHTML, like Gecko) UCBrowser/8.6.0.199/28/444/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (S60V3; U; ru; NokiaC5-00.2)/UC Browser8.5.0.183/28/444/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (S60V3; U; ru; NokiaC5-00.2) AppleWebKit/530.13 (KHTML, like Gecko) UCBrowser/8.7.0.218/28/352/UCWEB Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Series40; NokiaC3-00/08.63; Profile/MIDP-2.1 Configuration/CLDC-1.1) Gecko/20100401 S40OviBrowser/2.2.0.0.33' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Series 60; Opera Mini/7.0.31380/28.2725; U; es) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Opera Mini' => '7.0.31380', 'Presto' => '2.8.119')),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaC7-00/025.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.2 NokiaX7-00/022.014; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.37 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaE6-00/111.140.0058; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaC6-01/111.040.1511; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaC6-01; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia700/111.030.0609; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia700/111.020.0308; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.1.14 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 NokiaN8-00/111.040.1511; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/535.1 (KHTML, like Gecko) NokiaBrowser/8.3.1.4 Mobile Safari/535.1 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Symbian/3; Series60/5.3 Nokia701/111.030.0609; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.4.2.6 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/3.83; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120ci/7.02; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 Nokia6120c/7.10; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE66-1/510.21.009; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE71-1/110.07.127; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN95-3/20.2.011 Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE51-1/200.34.36; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaE63-1/500.21.009; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.2; U; Series60/3.1 NokiaN82/10.0.046; Profile/MIDP-2.0 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE52-1/052.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.2' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE52-1/@version@; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.26 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00/031.022; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.3.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00.2/081.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.32 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 NokiaN79-1/32.001; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; U; Series60/3.2 Nokia6220c-1/06.101; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/413 (KHTML, like Gecko) Safari/413' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00.2/071.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.26 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaE72-1/081.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.32 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.3; Series60/3.2 NokiaC5-00/061.005; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.2 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaX6-00/40.0.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gb' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5800d-1/60.0.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaC5-03/12.0.023; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.9 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5228/40.1.003; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.7.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5230/51.0.002; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.33 Mobile Safari/533.4 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 Nokia5530c-2/32.0.007; Profile/MIDP-2.1 Configuration/CLDC-1.1 ) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 BrowserNG/7.2.6.9 3gpp-gba' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-1/21.0.045; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) BrowserNG/7.1.4' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SymbianOS/9.4; Series60/5.0 NokiaN97-4/30.0.004; Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/533.4 (KHTML, like Gecko) NokiaBrowser/7.3.1.28 3gpp-gba' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Symbian' => '9.4', 'Webkit' => '533.4', 'NokiaBrowser' => '7.3.1.28'), 'model' => 'NokiaN97-4' ),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 7 Mozart T8698)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; 710)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800C)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 800C; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; 900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; HD7 T9292)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; LG E-900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 610)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; T-Mobile)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 710; Vodafone)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800) UP.Link/5.1.2.6' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; SFR)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; T-Mobile)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 800; vodafone)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Lumia 800c)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Lumia 900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Lumia 920)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; NOKIA; Lumia 920)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('IE' => '10.0', 'Windows Phone OS' => '8.0', 'Trident' => '6.0'), 'model' => 'Lumia 920' ),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; lumia800)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 610)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 710)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 800)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 800C)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; NOKIA; Nokia 900)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; Nokia)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Nokia; TITAN X310e)' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Windows Phone OS' => '7.5', 'Trident' => '5.0'), 'model' => 'TITAN X310e' ),
+ 'Mozilla/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident/7.0; Touch; rv:11.0; IEMobile/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit/537 (KHTML, like Gecko) Mobile Safari/537' => array('isMobile' => true, 'isTablet' => false),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Onda.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Onda.php
new file mode 100644
index 00000000000..3887f5d8018
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Onda.php
@@ -0,0 +1,12 @@
+ array(
+ 'Mozilla/5.0 (Linux; Android 4.2.2; V975i Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.108 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Android; Tablet; rv:37.0) Gecko/37.0 Firefox/37.0' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; V975m Core4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; fr-fr; V975m Core4 Build/JSS15J) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Safari/537.16' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.3; V975m Core4 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; V812 Core4 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ )
+
+);
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Others.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Others.php
new file mode 100644
index 00000000000..56d64079ca2
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Others.php
@@ -0,0 +1,531 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; E1C Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; id-id; T3C Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Ainol' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Ainol Novo8 Advanced Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Novo10 Hero Build/20121115) AppleWebKit/535.19 (KHTML like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; novo9-Spark Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+ 'AllFine' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; FINE7 GENIUS Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Amoi' => array(
+ 'Amoi 8512/R18.0 NF-Browser/3.3' => array('isMobile' => true, 'isTablet' => false, 'model' => '8512'),
+ ),
+
+ 'Arnova' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; fr-fr; AN9G2I Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'AudioSonic' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-au; T-17B Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+
+ 'Blaupunkt' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; Endeavour 800NG Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+
+ 'Broncho' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+
+ // @ref: http://www.bqreaders.com/gb/tablets-prices-sale.html
+ 'bq' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; bq Livingstone 2 Build/1.1.7 20121018-10:33) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-es; bq Edison Build/1.1.10-1015 20121230-18:00) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; Maxwell Lite Build/v1.0.0.ICS.maxwell.20120920) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-tw; bq Maxwell Plus Build/1.0.0 20120913-10:39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; Aquaris E10 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Captiva' => array(
+ 'Opera/9.80 (X11; Linux zvav; U; de) Presto/2.8.119 Version/11.10 Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; CAPTIVA PAD 10.1 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+
+ 'Casio' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build/C771M120) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'ChangJia' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; pt-br; TPC97113 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; TPC7102 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
+
+ ),
+
+
+ 'Celkon' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; Celkon CT 910+ Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-in; CT-1 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'CELKON.C64/R2AE SEMC-Browser/4.0.3 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Celkon A125 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-US; Celkon*A86 Build/Celkon_A86) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 UCBrowser/8.7.0.315 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Celkon A.R 40 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ // @ref: http://www.cobyusa.com/?p=pcat&pcat_id=3001
+ 'Coby' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; MID7010 Build/FRF85B) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Concorde' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde Tab T10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde tab PLAY Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Cresta' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; nl-nl; CRESTA.CTP888 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Cube' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; CUBE U9GT 2 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Danew' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; Dslide 700 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array( 'Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0' ), 'model' => 'Dslide 700' )
+
+ ),
+
+ 'DanyTech' => array(
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Genius Tab Q4 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+
+
+ 'Digma' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; iDx10 3G Build/ICS.b02ref.20120331) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'DPS' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; DPS Dream 9 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'ECS' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; TM105A Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30'))
+ ),
+
+ 'Eboda' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme Dual Core X190 Build/JRO03C) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '534.30', 'Safari' => '4.0')),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Essential A160 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; E-Boda Supreme X80 Dual Core Build/ICS.g12refM806A1YBD.20120925) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-boda essential smile Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme X80 Dual Core Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme XL200IPS Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Evolio' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Evolio X7 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ro-ro; ARIA_Mini_wifi Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Fly' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; Fly IQ440; Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; FLY IQ256 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'Fujitsu' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ja-jp; F-10D Build/V21R48A) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'V21R48A', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; ru-ru; M532 Build/IML74K) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+
+ ),
+
+ 'FX2' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; FX2 PAD7 RK Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+
+ // @ref: http://www.galapad.net/product.html
+ 'Galapad' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-tw; G1 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Webkit' => '534.30', 'Safari' => '4.0', 'Build' => 'JRO03C') ),
+
+ ),
+
+ 'GoClever' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; el-gr; GOCLEVER TAB A103 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; zh-tw; A7GOCLEVER Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; GOCLEVER TAB A104 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; cs-cz; GOCLEVER TAB A93.2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; sk-sk; GOCLEVER TAB A971 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; lv-lv; GOCLEVER TAB A972BK Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-fr; GOCLEVER TAB A104.2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; pt-pt; GOCLEVER TAB T76 Build/MID) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'GU' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; vi-vn; TX-A1301 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30', 'Safari' => '4.0')),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; da-dk; Q702 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '534.30', 'Safari' => '4.0')),
+
+ ),
+
+ 'HCL' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build/HCL ME Tablet U1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build/HCL ME Tablet U1) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; Connect-3G-2.0 Build/HCL) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; pt-br; X1 Build/HCL ME Tablet X1) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+
+
+ 'Hudl' => array(
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Hudl HT7S3 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.82 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+
+ 'Iconbit' => array(
+ 'Mozilla/5.0 (Linux; Android 4.1.1; NT-3702M Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Safari/537.36 OPR/16.0.1212.65583' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; NetTAB SPACE II Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'iJoy' => array('Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; Tablet Planet II-v3 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)),
+
+ 'Intenso' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1.;de-de; INM8002KP Build/JR003H) AppleWebKit/534.30 (KHTML, like Gecko)Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true, 'version' => array(
+ 'Android' => '4.1.1.', 'Webkit' => '534.30', 'Safari' => '4.0'
+ ),
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; TAB1004 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+
+ 'INQ' => array(
+ 'INQ1/R3.9.12 NF-Browser/3.5' => array('isMobile' => true, 'isTablet' => false, 'model' => 'INQ1'),
+ ),
+
+ // @todo: Test this
+ 'Intex' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3; en-US; Cloud_X2 Build/MocorDroid4.0.1) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1 UCBrowser/9.2.0.419 Mobile' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Cloud Y2 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-in; Cloud X5 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'IRU' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; M702pro Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+
+ 'JXD' => array('Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; F3000 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
+ ),
+
+ 'Karbonn' => array(
+ 'Mozilla/5.0 (Linux; Android 4.1.1; ST10 Build/JRO03C) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Kobo' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 (Kobo Touch)' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.0', 'Webkit' => '533.1', 'Safari' => '4.0') ),
+ ),
+
+ 'Megafon' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; ru-ru; MegaFon V9 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; MT7A Build/JRO03C) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'MediaTek' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; MT8377 Build/JRO03C) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30/4.05d.1002.m7' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Micromax' => array(
+
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Micromax A110 Build/JRO03C) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.169 Mobile Safari/537.22' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03C', 'Webkit' => '537.22', 'Chrome' => '25.0.1364.169') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; Micromax P250(Funbook) Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Webkit' => '534.30', 'Android' => '4.0', 'Build' => 'IMM76D', 'Safari' => '4.0') ),
+
+ ),
+
+ 'Modecom' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; pl-pl; FreeTAB 1014 IPS X4+ Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'MSI' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; el-gr; MSI Enjoy 10 Plus Build/1.2) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ // @ref: https://www.nabitablet.com/
+ 'Nabi' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; NABI-A Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'NEC' => array(
+ // @ref: http://www.n-keitai.com/n-08d/?from=mediasnet
+ // @ref: http://devlog.dcm-gate.com/2012/03/medias-tab-n-06duseragnet.html
+ // @ref: http://keitaiall.jp/N-08D.html aka MEDIAS TAB
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ja-jp; N-08D Build/A5001911) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android AAA; BBB; N-06D Build/CCC) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+
+ 'Nexo' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; pl-pl; NEXO 3G Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 ACHEETAHI/2100050074' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Nibiru' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-tw; Nibiru H1 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 XiaoMi/MiuiBrowser/1.0' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'Nook' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; NOOK BNRV200 Build/ERD79 1.4.3) Apple WebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.2.1', 'Webkit' => '533.1', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; NOOK BNTV400 Build/ICS) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'ICS', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; BNTV600 Build/IMM76L) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36 Hughes-PFB/CID5391275.AID1376709964' => array( 'isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76L', 'Webkit' => '537.36', 'Chrome' => '28.0.1500.94') ),
+
+ ),
+
+ 'Oneplus' => array(
+ 'Mozilla/5.0 (Linux; Android 4.3; A0001 Build/JLS36C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; xx-xx; A0001 Build/JLS36C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'Odys' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Plus Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.X; de-de; XENO10 Build/ODYS XENO 10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.2; de-de; ODYS Space Build/I700T_P7_T04_TSCL_FT_R_0_03_1010_110623) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; ODYS-EVO Build/ODYS-EVO) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.X; de-de; Xelio 10 Pro Build/ODYS_Xelio) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; NEO_QUAD10 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.X; de-de; Xelio10Pro Build/ODYS_Xelio) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.1; en-us; ODYS-Xpress Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; XELIO7PHONETAB Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; XELIO10EXTREME Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; XELIO Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 Mobile UCBrowser/3.2.1.441' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; XELIOPT2 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; nl-nl; ODYS-NOON Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'OverMax' => array(
+ 'OV-SteelCore(B) Mozilla/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; OV-SteelCore Build/ICS.g08refem611.20121010) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'YONESTablet' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; pl-pl; BC1077 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ // @todo: Research http://www.pantech.com/
+ 'Pantech' => array(
+ 'PANTECH-C790/JAUS08312009 Browser/Obigo/Q05A Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; ko-kr; SKY IM-A600S Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build/GRI40) AppleWebKit/533.1 (KHTML like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build/HTK75) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array(
+ 'isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Philips' => array(
+ 'Mozilla/5.0 (Linux; Android 4.0.4; Philips W336 Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.45 Mobile Safari/537.36 OPR/15.0.1162.59192' => array('isMobile' => true, 'isTablet' => false),
+ 'Philips_T3500/V1 Linux/3.4.5 Android/4.2.2 Release/03.26.2013 Browser/AppleWebKit534.30 Mobile Safari/534.30 MBBMS/2.2 System/Android 4.2.2;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Philips W3568 Build/Philips_W3568) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; Philips W832 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux;U;Android 4.2.2;es-us;Philips S388 Build/JDQ39) AppleWebkit/534.30 (HTML,like Gecko) Version/4.0 Mobile Safari/534.30;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; Philips W536 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux;U;Android 4.2.2;es-us;Philips S308 Build/JDQ39) AppleWebkit/534.30 (HTML,like Gecko) Version/4.0 Mobile Safari/534.30;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; ru-ru; Philips-W8500 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; ru; Philips W8510 Build/JDQ39) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.8.9.457 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; ru-RU; Philips W3568 Build/Philips W3568) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.1 Mobile Safari/534.30;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; Philips S388 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; Build/PI3100.00.00.24) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; W732 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.1; PI7100_93 Build/PI7100.C.00.00.11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'PocketBook' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-ru; PocketBook A10 3G Build/GRJ90) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'PointOfView' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; POV_TAB-PROTAB30-IPS10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Praktica' => array(
+ 'Mozilla/5.0 (Linux; Android 4.0.4; TP750 3GGSM Build/IMM76I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Safari/537.36' => array('isMobile' => true, 'isTablet' => true)
+ ),
+
+ 'PROSCAN' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; PLT8088 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ ),
+
+ 'PyleAudio' => array(
+ 'Mozilla/5.0 (Linux; Android 4.0.4; PTBL92BC Build/IMM76D) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '537.36', 'Chrome' => '31.0.1650.59')),
+
+ ),
+
+ 'RockChip' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; hu-hu; RK2818, Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android Android 2.1-RK2818-1.0.0; zh-cn; MD701 Build/ECLAIR) AppleWebKit/530.17 (KHTML like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'RossMoor' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1; ru-ru; RM-790 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
+
+ ),
+
+ // @ref: http://www.qmobile.com.pk/complete_range.php#
+ 'QMobile' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; A2 Build/GRK39F) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'simvalley' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; de-de; SP-80 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'Skk' => array('Mozilla/5.0 (Linux; U; Android 4.1; en-us; CYCLOPS Build/F10) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)),
+
+ 'Storex' => array(
+ 'Mozilla/5.0 (Linux; Android 4.1.1; eZee_Tab903 Build/JRO03H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '537.36')),
+ "Mozilla/5.0 (Linux; Android 4.1.1; eZee'Tab785 Build/JRO03C) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.59 Safari/537.36" => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03C', 'Webkit' => '537.36')),
+ "Mozilla/5.0 (Linux; Android 4.0.3; eZee'Tab971 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19" => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'IML74K', 'Webkit' => '535.19')),
+ ),
+
+ 'Teclast' => array(
+ 'Mozilla/5.0 (Linux; Android 4.4.2; P98 3G\xE5\x85\xAB\xE6\xA0\xB8(A3HY) Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'QQ\xe9\x9f\xb3\xe4\xb9\x90HD 4.0.1 (iPad; iPhone OS 8.0; zh_CN)' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0; xx-xx; A15(E6C2) Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3; xx-xx; A10 Build/GRJ22) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Teclast A10T Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; Teclast P85(A9D3) Build/IMM76D) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; A70H Build/JDQ39) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.8.0.435 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Tecno' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P9 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
+ ),
+
+ 'Telstra' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; en-au; T-Hub2 Build/TVA301TELBG3) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ // @info: http://www.texet.ru/tablet/
+ 'texet' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; TM-7021 Build/GB.m1ref.20120116) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.3.4', 'Webkit' => '533.1', 'Safari' => '4.0'), 'model' => 'TM-7021' ),
+ ),
+
+ 'Tolino' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '534.30', 'Safari' => '4.0')),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 8.9 Build/JDQ39) AppleWebKit/534.30 (KHTML like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '534.30', 'Safari' => '4.0')),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; tolino tab 7 Build/JDQ39) AppleWebkit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36 OPR/18.0.1290.67495' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build/JDQ39) AppleWebkit/537.36 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Toshiba' => array(
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; TOSHIBA; TSUNAGI)' => array('isMobile' => true, 'isTablet' => false),
+ // @ref: http://www.toshiba.co.uk/discontinued-products/folio-100/
+ 'Mozilla/5.0 (Linux; U; Android 2.2; it-it; TOSHIBA_FOLIO_AND_A Build/TOSHIBA_FOLIO_AND_A) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '2.2', 'Webkit' => '533.1', 'Safari' => '4.0') ),
+ ),
+
+ 'Trekstor' => array(
+ 'Mozilla/5.0 (Linux; Android 4.2.2; ST70408-1 Build/JDQ39) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => 'JDQ39', 'Webkit' => '537.31', 'Chrome' => '26.0.1410.58')),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; engb; Build/IMM76D) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A405 Safari/7534.48.3 SurfTab_7.0' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; VT10416-2 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; ST10216-2A Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30;SurfTab_10.1' => array(
+ 'isMobile' => true, 'isTablet' => true
+ ),
+ ),
+
+ 'Ubislate' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; UBISLATE7C+ Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true)
+ ),
+
+ 'Visture' => array(
+
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; V97 HD Build/LR-97JC) Apple WebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; Visture V4 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V4 HD Build/Visture V4 HD) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; es-es; Visture V5 HD Build/Visture V5 HD) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V10 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Versus' => array(
+ 'Mozilla/5.0 (Linux; Android 4.0.4; VS-TOUCHPAD 9 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; Versus Touchpad 9.7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; CnM-TOUCHPAD7 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 BMID/E67A45B1AB' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; CnM TouchPad 7DC Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30 TwonkyBeamBrowser/3.3.5-95 (Android 4.1.1; rockchip CnM TouchPad 7DC Build/meizhi_V2.80.wifi8723.20121225.b11c800)' => array('isMobile' => true, 'isTablet' => true),
+ 'OneBrowser/3.5/Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; TOUCHTAB Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.1', 'Build' => 'JRO03H', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ ),
+
+ 'Viewsonic' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; de-de; ViewPad 10e Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; it-it; ViewPad7 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' =>array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; en-ca; ViewSonic VB733 Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; en-gb; ViewPad7X Build/HTJ85B) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; pt-br; ViewPad 10S Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; VB100a Pro Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Vonino' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-us; Sirius_Evo_QS Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Q8 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ ),
+
+ 'Wolder' => array(
+ 'Mozilla/5.0 (Linux; Android 4.4; miTab LIVE Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; pt-pt; miTab FUNK Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+
+ 'Wolfgang' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1; nl-nl; AT-AS45q2 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false)
+ ),
+
+ 'Xoro' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; PAD 9720QR Build/PAD 9719QR) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; PAD720 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true)
+ ),
+
+ 'ZTE' => array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1;zh-cn; ZTE V987 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30;' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.5; pt-pt; Blade Build/tejosunhsine) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; N880e_Dawoer_Fulllock; China Telecom)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; V965W)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; ZTE; Windows Phone - Internet 7; SFR)' => array('isMobile' => true, 'isTablet' => false),
+ ),
+
+ 'Zync' => array(
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us ; Z909 Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.4.1.204/145/444' => array('isMobile' => true, 'isTablet' => true)
+ )
+
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Prestigio.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Prestigio.php
new file mode 100644
index 00000000000..c86e3b192eb
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Prestigio.php
@@ -0,0 +1,12 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; PMP5297C_QUAD Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; sk-sk; PMP7100D3G Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.4', 'Build' => 'IMM76D', 'Webkit' => '534.30', 'Safari' => '4.0'), 'model' => 'PMP7100D3G' ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; sk-sk; PMP7280C3G Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 MobilSafari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; PMT3017_WI Build/KVT49L) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; PMT3037_3G Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; PMT5002_Wi Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.93 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; el-gr; PMT5887_3G Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Samsung.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Samsung.php
new file mode 100644
index 00000000000..e7099c5efc2
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Samsung.php
@@ -0,0 +1,131 @@
+ array(
+ 'MQQBrowser/4.0/Mozilla/5.0 (Linux; U; Android 3.2; zh-cn; GT-P6800 Build/HTJ85B) AppleWebKit/533.1 (KHTML, like Gecko) Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true, 'version' => array('MQQBrowser' => '4.0')),
+ 'SAMSUNG-SGH-P250-ORANGE/P250BVHH8 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0' => array('isMobile' => true, 'isTablet' => false),
+ 'SAMSUNG-GT-B2710/B271MCXKF1 SHP/VPP/R5 Dolfin/2.0 QTV/5.3 SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1 OPN-B' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Dolfin' => '2.0') ),
+ 'SAMSUNG-SGH-D900i/1.0 Profile/MIDP-2.0 Configuration/CLDC-1.1 UP.Browser/6.2.3.3.c.1.101 (GUI) MMP/2.0' => array('isMobile' => true, 'isTablet' => false),
+ 'SAMSUNG-GT-S5233T/S5233TXEJE3 SHP/VPP/R5 Jasmine/0.8 Qtv5.3 SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5380D/S5380FXXKL3; U; Bada/2.0; ru-ru) AppleWebKit/534.20 (KHTML, like Gecko) Dolfin/3.0 Mobile HVGA SMM-MMS/1.2.0 OPN-B' => array('isMobile' => true, 'isTablet' => false),
+ 'SAMSUNG-GT-C3312/1.0 NetFront/4.2 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build/CUPCAKE) AppleWebKit/528.5 (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
+ 'SAMSUNG-GT-S3650/S3650XEII3 SHP/VPP/R5 Jasmine/1.0 Nextreaming SMM-MMS/1.2.0 profile/MIDP-2.1 configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'JUC (Linux; U; 2.3.6; zh-cn; GT-S5360; 240*320) UCWEB7.9.0.94/140/352' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S5250/S5250XEKJ3; U; Bada/1.0; ru-ru) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.0 Mobile WQVGA SMM-MMS/1.2.0 NexPlayer/3.0 profile/MIDP-2.1 configuration/CLDC-1.1 OPN-B' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident/3.1; IEMobile/7.0; SAMSUNG; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (SAMSUNG; SAMSUNG-GT-S8530/S8530XXJKA; U; Bada/1.2; cs-cz) AppleWebKit/533.1 (KHTML, like Gecko) Dolfin/2.2 Mobile WVGA SMM-MMS/1.2.0 OPN-B' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 1.6; ru-ru; Galaxy Build/Donut) AppleWebKit/528.5+ (KHTML, like Gecko) Version/3.1.2 Mobile Safari/525.20.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; ru-ru; GT-I5500 Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; en-us; GALAXY_Tab Build/MASTER) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.2; ja-jp; SC-01C Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ // @about FROYO: http://gizmodo.com/5543853/what-is-froyo
+ 'Mozilla/5.0 (Linux; U; Android 2.2; fr-fr; GT-I9000 Build/FROYO) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.2.1; zh-cn; SCH-i909 Build/FROYO) UC AppleWebKit/534.31 (KHTML, like Gecko) Mobile Safari/534.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; ja-jp; SC-01C Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; el-gr; GT-I9001 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-ca; SGH-I896 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5660L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.261' => array('isMobile' => true, 'isTablet' => false, 'version' => array('MicroMessenger' => '4.5.1.261')),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6102 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; pl-pl; GT-I9001-ORANGE/I9001BVKPC Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-I9070 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-I8160 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6802 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; ru-ru; GT-S5830 Build/GRWK74; LeWa_ROM_Cooper_12.09.21) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-N7000 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build/HRI83) AppleWebkit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; he-il; GT-P7300 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build/HTJ85B) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100G Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; GT-P5100 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build/IML74K) AppleWebKit/535.7 (KHTML, like Gecko) CrMo/16.0.912.75 Mobile Safari/535.7' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('Chrome' => '16.0.912.75') ),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; SGH-T989 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false, 'version' => array('Chrome' => '18.0.1025.166') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P5100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; GT-I9300 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; SPH-D710 Build/IMM76I) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; GT-I9300 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300-ORANGE/I9300BVBLG2 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; th-th; GT-I9300T Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-I9100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us ; GT-I9100 Build/IMM76D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1/UCBrowser/8.4.1.204/145/355' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; th-th; GT-P6800 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I747 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; GT-P5110 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; GT-P5110 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; zh-cn; SAMSUNG-GT-S7568_TD/1.0 Android/4.0.4 Release/07.15.2012 Browser/AppleWebKit534.30 Build/IMM76D) ApplelWebkit/534.30 (KHTML,like Gecko) Version/4.0 Mobile Safari/534.30' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array('Android' => '4.0.4') ),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P3100 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; tr-tr; GT-P3105 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-ca; GT-N8010 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-S7562 Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; GT-N7100 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; GT-N7100 Build/JZO54K) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.123 Mobile Safari/537.22 OPR/14.0.1025.52315' => array( 'isMobile' => true, 'isTablet' => false, 'version' => array( 'Build' => 'JZO54K', 'Webkit' => '537.22', 'Opera' => '14.0.1025.52315' ) ),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; zh-hk; GT-N7105 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; ru-ru; GT-N8000 Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.1; SGH-i747M Build/JRO03L) AppleWebKit/535.19(KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-gb; Galaxy Nexus - 4.1.1 - with Google Apps - API 16 - 720x1280 Build/JRO03S) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; GT-I8262 Build/JZO54K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; it-it; Galaxy Nexus Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-I777 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-S7710 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9082 Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build/JZO54K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; GT-P5210 Build/JDQ39) AppleWebKit/537.36 (KHTML, Like Gecko) Chrome/27.0.1453.90 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG GT-I9200 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; zh-cn; SCH-I959 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T310 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-P600 Build/JSS15J) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; en-gb; GT-N5100 Build/JDQ39) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SM-T800 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; fr-fr; SAMSUNG SM-T800 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SM-T700 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.517 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; CETUS)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Focus I917 By TC)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Focus i917)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; FOCUS S)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-I8350)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-i8700)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; GT-S7530)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; Hljchm\'s Wp)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; I917)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA 7)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7 By MWP_HS)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i677)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917.)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i917R)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SGH-i937)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG; SMG-917R)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG_blocked_blocked_blocked; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SAMSUNG_blocked_blocked_blocked_blocked; OMNIA7; Orange)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; SUMSUNG; OMNIA 7)' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; SAMSUNG; GT-I8750) like Gecko' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.2; ARM; Trident/7.0; Touch; rv:11.0; WPDesktop; GT-I8750) like Gecko' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; en-gb; SAMSUNG GT-I9205 Build/JDQ39) AppleWebKit/535.19 (KHTML, like Gecko) Version/1.0 Chrome/18.0.1025.308 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SHV-E160K/VI10.1802 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Mozilla/5.0 (Linux; Android 5.0.2; SM-T805 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; SM-T116NQ Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.92 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 5.0.2; SM-G9250 Build/LRX22G; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/43.0.2357.121 Mobile Safari/537.36 [FB_IAB/FB4A;FBAV/35.0.0.48.273;]' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SM-T705Y Build/KOT49H) AppleWebKit/537.36(KHTML, like Gecko) Chrome/42.0.2311.111 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; GT-I9505 Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SM-T705 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.45 Safari/537.36' => array('isMobile' => true, 'isTablet' => true)
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Sony.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Sony.php
new file mode 100644
index 00000000000..4155daf0496
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Sony.php
@@ -0,0 +1,85 @@
+ array(
+ 'SonyEricssonK800i/R1AA Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; es-ar; SonyEricssonE15a Build/2.0.1.A.0.47) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.1-update1; pt-br; SonyEricssonU20a Build/2.1.1.A.0.6) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.3; en-au; SonyEricssonX10i Build/3.0.1.G.0.75) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; ru-ru; SonyEricssonST18i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; hr-hr; SonyEricssonST15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.4; sk-sk; SonyEricssonLT15i Build/4.0.2.A.0.62) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; th-th; SonyEricssonST27i Build/6.0.B.3.184) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 2.3.7; de-de; SonyEricssonST25i Build/6.0.B.3.184) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; pt-br; Xperia Tablet S Build/TID0092) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.0.3', 'Build' => 'TID0092', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; LT18i Build/4.1.A.0.562) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; Sony Tablet S Build/TISU0R0110) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build/TISU0143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; SonyEricssonLT18i Build/4.1.B.0.587) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; fr-ch; SonyEricssonSK17i Build/4.1.B.0.587) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; SonyEricssonLT26i Build/6.1.A.2.45) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; LT22i Build/6.1.B.0.544) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; vi-vn; SonyEricssonLT22i Build/6.1.B.0.544) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; ST23i Build/11.0.A.5.5) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; ST23i Build/11.0.A.2.10) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.0.4; LT28h Build/6.1.E.3.7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; SGPT13 Build/TJDS0170) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; ja-jp; SonySO-03E Build/10.1.E.0.265) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.1.2', 'Build' => '10.1.E.0.265', 'Webkit' => '534.30', 'Safari' => '4.0') ),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; LT26w Build/6.2.B.1.96) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.72 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; SGP321 Build/10.3.1.A.0.33) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.58 Safari/537.31' => array('isMobile' => true, 'isTablet' => true, 'version' => array('Android' => '4.2.2', 'Build' => '10.3.1.A.0.33', 'Webkit' => '537.31', 'Chrome' => '26.0.1410.58') ),
+ 'Mozilla/5.0 (Linux; Android 4.3; C5303 Build/12.1.A.1.205) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/36.0.1985.135 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; XL39h Build/14.2.A.1.136) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; sv-se; C5503 Build/10.1.1.A.1.273) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; C5502 Build/10.1.1.A.1.310) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; SonyL39t Build/14.1.M.0.202) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; zh-cn; L39u Build/14.1.n.0.63) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-tw; M35c Build/12.0.B.5.37) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; M35c Build/12.0.B.2.42) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.90 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; zh-CN; M35t Build/12.0.C.2.42) AppleWebKit/534.31 (KHTML, like Gecko) UCBrowser/9.3.2.349 U3/0.8.0 Mobile Safari/534.31' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; D6502 Build/17.1.A.2.69) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; D6503 Build/17.1.A.0.504) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; D6543 Build/17.1.A.2.55) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2004 Build/20.0.A.0.29) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-gb; D2005 Build/20.0.A.1.12) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2104 Build/20.0.B.0.84) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2105 Build/20.0.B.0.74) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.170 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; pt-br; D2114 Build/20.0.B.0.85) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2302 Build/18.0.B.1.23) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; S50h Build/18.0.b.1.23) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.6.3.413 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2303 Build/18.0.C.1.13) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2305 Build/18.0.A.1.30) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.138 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D2306 Build/18.0.C.1.7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D5303 Build/19.0.1.A.0.207) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; D5306 Build/19.1.A.0.264) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-CN; XM50h Build/19.0.D.0.269) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 UCBrowser/9.7.6.428 U3/0.8.0 Mobile Safari/533.1' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; XM50t Build/19.0.C.2.59) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; D5322 Build/19.0.D.0.253) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.131' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; zh-cn; M51w Build/14.2.A.1.146) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.3; M51w Build/14.2.A.1.146) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.136 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.1; D5102 Build/18.2.A.0.9) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.1; D5103 Build/18.1.A.0.11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.92 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.1; D5106 Build/18.1.A.0.11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.3; en-gb; C6902 Build/14.2.A.1.136) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30 GSA/3.2.17.1009776.arm' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; es-es; C6943 Build/14.1.G.2.257) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; C6943 Build/14.3.A.0.681) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.2.2; SGP412 Build/14.1.B.3.320) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1; en-us; SonySGP321 Build/10.2.C.0.143) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.1.2; SGP351 Build/10.1.1.A.1.307) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.3; SGP341 Build/10.4.B.0.569) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SGP511 Build/17.1.A.2.36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SGP512 Build/17.1.A.2.36) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.122 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; fr-ch; SGP311 Build/10.1.C.0.344) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; SGP312 Build/10.1.C.0.344) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; de-de; SGP521 Build/17.1.A.2.69) AppleWebKit/537.16 (KHTML, like Gecko) Version/4.0 Safari/537.16' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.4.2; zh-cn; SGP541 Build/17.1.A.2.36) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; SGP551 Build/17.1.A.2.72) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.114 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'SonyEricssonU5i/R2CA; Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525' => array('isMobile' => true, 'isTablet' => false),
+ 'SonyEricssonU5i/R2AA; Mozilla/5.0 (SymbianOS/9.4; U; Series60/5.0 Profile/MIDP-2.1 Configuration/CLDC-1.1) AppleWebKit/525 (KHTML, like Gecko) Version/3.0 Safari/525' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/4.0 (PDA; PalmOS/sony/model prmr/Revision:1.1.54 (en)) NetFront/3.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC/BEL; en) Presto/2.7.61 Version/11.00' => array('isMobile' => false, 'isTablet' => false),
+ 'Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; es-ve; SonyST21a2 Build/11.0.A.6.5) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.2; D2533 Build/19.2.A.0.391) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/30.0.0.0 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; Android 4.4.4; Xperia SP Build/KTU84Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.96 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla / 5.0 (Linux; Android 5.0.2; SOT31 Build / 28.0.D.6.71) AppleWebKit / 537.36 (KHTML, like Gecko) Chrome / 39.0.2171.93 Safari / 537.36' => array('isMobile' => true, 'isTablet' => true),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/SpecialCases.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/SpecialCases.php
new file mode 100644
index 00000000000..363aac9fcc1
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/SpecialCases.php
@@ -0,0 +1,206 @@
+ array(
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; Avant Browser; rv:11.0) like Gecko' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; Avant TriCore) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 5.1; rv:27.0; Avant TriCore) Gecko/20100101 Firefox/27.0' => array('isMobile' => false, 'isTablet' => false),
+ ),
+ 'Console' => array(
+
+ //Nintendo Wii:
+ 'Mozilla/5.0 (Nintendo WiiU) AppleWebKit/536.28 (KHTML, like Gecko) NX/3.0.3.12.14 NintendoBrowser/3.1.1.9577.EU' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Nintendo WiiU) AppleWebKit/534.52 (KHTML, like Gecko) NX/{Version No} NintendoBrowser/{Version No}.US' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7567.US' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Nintendo 3DS; U; ; en) Version/1.7498.US' => array('isMobile' => true, 'isTablet' => false),
+ //Sony PlayStation:
+ 'Mozilla/5.0 (PLAYSTATION 3 4.21) AppleWebKit/531.22.8 (KHTML, like Gecko)' => array('isMobile' => false, 'isTablet' => false),
+ //Microsoft Xbox:
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Xbox)' => array('isMobile' => false, 'isTablet' => false),
+ // WTF? Must investigate.
+ //'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Xbox)' => array('isMobile' => false, 'isTablet' => false),
+
+ ),
+
+ 'Other' => array(
+ // Unknown
+ 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SV1; [eburo v4.0]; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)' => array('isMobile' => false, 'isTablet' => false),
+
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit/600.1.25 (KHTML, like Gecko) Version/8.0 Safari/600.1.25' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+
+ // @todo 3Q - http://3q-int.com/en/download/tablets7/
+ //'Mozilla/5.0 (Linux; U; Android 4.0.4; it-it; MT0729B Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.4; uk-us; RC9716B Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+
+ // Sogou Explorer (Browser)
+ //'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.63 Safari/537.36 SE 2.X MetaSr 1.0' => null,
+ //'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1; SV1; SE 2.x)' => null,
+
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Iron/37.0.2000.0 Chrome/37.0.2000.0 Safari/537.36' => array('isMobile' => false, 'isTablet' => false, 'version' => array('Iron' => '37.0.2000.0')),
+ // Liebao Browser
+ //'Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.137 Safari/537.36 LBBROWSER',
+ 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/32.0.1700.102 Chrome/32.0.1700.102 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0 AlexaToolbar/psPCtGhf-2.2' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (X11; Linux ppc; rv:17.0) Gecko/20130626 Firefox/17.0 Iceweasel/17.0.7' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (X11; Linux) AppleWebKit/535.22+ Midori/0.4' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit/535+ (KHTML, like Gecko) Version/5.0 Safari/535.20+ Midori/0.4' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.20 Safari/537.36 OPR/15.0.1147.18 (Edition Next)' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 5.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 5.2; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0' => array('isMobile' => false, 'isTablet' => false),
+ 'Opera/9.80 (Windows NT 5.2; WOW64) Presto/2.12.388 Version/12.14' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko/20100101 Firefox/19.0' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (X11; FreeBSD amd64; rv:14.0) Gecko/20100101 Firefox/14.0.1' => array('isMobile' => false, 'isTablet' => false),
+ // @todo Inspect https://gist.githubusercontent.com/pongacm/b7775bebf2b26c09e1f8/raw/0aff83747959386663f3a5c68d7f7150764a8e2d/Varnish%20-%20Tablet%20PC%20(TAB)
+ // https://github.com/varnish/varnish-devicedetect/issues/19
+ 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Tablet PC 2.0; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; MANMJS)' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0; Touch; MASMJS)' => array('isMobile' => false, 'isTablet' => false),
+ 'Opera/9.80 (Windows NT 6.2; WOW64; MRA 8.0 (build 5784)) Presto/2.12.388 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
+ // IE 10
+ 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)' => array('isMobile' => false, 'isTablet' => false),
+ // IE 11 @todo: Trident(.*)rv.(\d+)\.(\d+)
+ 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv 11.0) like Gecko' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko' => array('isMobile' => false, 'isTablet' => false),
+
+ // TV
+ 'Mozilla/5.0 (Unknown; Linux armv7l) AppleWebKit/537.1+ (KHTML, like Gecko) Safari/537.1+ HbbTV/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)' => array('isMobile' => false, 'isTablet' => false),
+ 'HbbTV/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)' => array('isMobile' => false, 'isTablet' => false),
+ 'Opera/9.80 (Linux armv7l; HbbTV/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto/2.12.362 Version/12.11' => array('isMobile' => false, 'isTablet' => false),
+ ),
+
+ 'TV' => array(
+ //'Opera/9.80 (Linux mips ; U; HbbTV/1.1.1 (; Philips; ; ; ; ) CE-HTML/1.0 NETTV/3.2.1; en) Presto/2.6.33 Version/10.70' => null
+ ),
+
+ 'Generic' => array(
+
+ 'Mozilla/5.0 (Linux; U; Jolla; Sailfish; Mobile; rv:20.0) Gecko/20.0 Firefox/20.0 Sailfish Browser/1.0 like Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+
+ // Generic Firefox User-agents
+ // https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference#Firefox_OS
+ 'Mozilla/5.0 (Mobile; rv:26.0) Gecko/26.0 Firefox/26.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Tablet; rv:26.0) Gecko/26.0 Firefox/26.0' => array('isMobile' => true, 'isTablet' => true),
+
+ // Facebook WebView
+ //'Mozilla/5.0 (iPhone; CPU iPhone OS 7_1_1 like Mac OS X) AppleWebKit/537.51.2 (KHTML, like Gecko) Mobile/11D201 [FBAN/FBIOS;FBAV/12.1.0.24.20;FBBV/3214247;FBDV/iPhone6,1;FBMD/iPhone;FBSN/iPhone OS;FBSV/7.1.1;FBSS/2; FBCR/AT&T;FBID/phone;FBLC/en_US;FBOP/5]' => null,
+
+ // Outlook
+ //'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; InfoPath.3; IM-2014-026; IM-2014-043; Microsoft Outlook 14.0.7113; ms-office; MSOffice 14)' => null,
+
+ // Carrefour tablet
+ 'Mozilla/5.0 (Linux; Android 4.2.2; CT1020W Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.94 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+
+ // @comment: Pipo m6pro tablet
+ 'Mozilla/5.0 (Linux; Android 4.2.2; M6pro Build/JDQ39) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.141 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+
+ // https://github.com/varnish/varnish-devicedetect/issues/17
+ // To be researched.
+ 'MobileSafari/9537.53 CFNetwork/672.1.13 Darwin/13.1.0' => array('isMobile' => true, 'isTablet' => false),
+ 'Appcelerator Titanium/3.2.2.GA (iPod touch/6.1.6; iPhone OS; en_US;)' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Opera Coast/3.0.3.78307 CFNetwork/672.1.15 Darwin/14.0.0' => array('isMobile' => true, 'isTablet' => false),
+
+ 'Mozilla/5.0 (Linux; Android 4.0.3; ALUMIUM10 Build/IML74K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.99 Safari/537.36' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.1; en-us; JY-G3 Build/JOP40D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; hu-hu; M758A Build/JRO03C) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; EVOTAB Build/IMM76I) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Java/1.6.0_22' => array('isMobile' => false, 'isTablet' => false, 'version' => array('Java' => '1.6.0_22') ),
+ 'Opera/9.80 (Series 60; Opera Mini/6.5.29260/29.3417; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Android; Opera Mini/6.5.27452/29.3417; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (iPhone; Opera Mini/7.1.32694/27.1407; U; en) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ // New Opera
+ 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.60 Safari/537.17 OPR/14.0.1025.52315' => array('isMobile' => false, 'isTablet' => false),
+ // Unknown yet
+ // Looks like Chromebook
+ //'Mozilla/5.0 (X11; CrOS armv7l 4920.83.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.103 Safari/537.36' => null,
+ 'Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8H7 Safari/6533.18.5' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Android 2.3.7; Linux; Opera Mobi/46154) Presto/2.11.355 Version/12.10' => array('isMobile' => true, 'isTablet' => false),
+ //'Mozilla/5.0 (Linux; U; Android 4.0.3; it-it; DATAM819HD_C Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.3; nl-nl; SGPT12 Build/TID0142) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.4; en-us; cm_tenderloin Build/IMM76L; CyanogenMod-9) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+
+ //'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; A210 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null, // Acer Iconia Tab
+ 'Mozilla/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B141 Safari/8536.25' => array('isMobile' => true, 'isTablet' => true),
+ //'Mozilla/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8150 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => null,
+ //'Mozilla/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mercury/7.2 Mobile/10A523 Safari/8536.25' => null, // Mercurio Browser
+ //'Opera/9.80 (Android 2.3.7; Linux; Opera Tablet/46154) Presto/2.11.355 Version/12.10' => null,
+ 'Mozilla/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build/MASTER) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => false), // sdk
+ 'Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/JB_MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false), // sdk
+
+ //'Opera/9.80 (X11; Linux zbov) Presto/2.11.355 Version/12.10' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build/IMM76D) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => null, // 7" Verso Android tablet
+ //'Mozilla/5.0 (iPhone; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit/532.9 (KHTML, like Gecko) Version/5.0.3 Mobile/8B5097d Safari/6531.22.7' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.3; en-gb; SGPT12 Build/TID0142) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null, // sony xperia tablet s unforts
+ //'Mozilla/5.0 (Linux; U; Android 2.0.6_b1; ru-ru Build/ECLAIR) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' => null, // PocketBook IQ701 (tablet)
+ //'Mozilla/5.0 (Linux; Android 4.0.4; z1000 Build/IMM76D) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => null, // It is a tablet with calling
+ //'Mozilla/5.0 (Linux; Android 4.0.3; cm_tenderloin Build/GWK74) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => null, // HP touch pad running android cyanogenmod
+ //'Mozilla/5.0 (Linux; U; Android 2.3.3; en-us; Android for Techvision TV1T808 Board Build/GRI40) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => null, // My device is tablet but its detected as phone
+ //'BlackBerry8520/5.0.0.592 Profile/MIDP-2.1 Configuration/CLDC-1.1 VendorID/136' => null,
+ //'Mozilla/5.0 (Windows NT 6.2) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.56 Safari/537.17' => null, // its a lenovo tablet 2 with windows 8 pro
+ //'Mozilla/5.0 (Linux; U; Android 3.1; ru-ru; LG-V900 Build/HMJ37) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => null,
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident/6.0; IEMobile/10.0; ARM; Touch; HTC; Windows Phone 8S by HTC)' => null,
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => null, // MS Surface RT tablet actually!
+ //'Mozilla/5.0 (PLAYSTATION 3 4.11) AppleWebKit/531.22.8 (KHTML, like Gecko)' => null,
+ //'Mozilla/5.0 (Linux; U; Android 3.2; ru-ru; V9S_V1.4) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0 Safari/534.13' => null, // Wrong detection - 7-inch tablet was detected as a phone. Android 3.2.1, native browser
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => null, // Nope, its a Microsoft Surface tablet running Windows RT (8) with MSIE 10
+ //'Mozilla/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1' => null, // Tablet!
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => null, // its a Microsoft surface rt (tablet)
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch; WebView/1.0)' => null,
+ //'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; Next7P12 Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => null, // Nextbook 7SE Tablet
+ //'Opera/9.80 (X11; Linux zbov) Presto/2.11.355 Version/12.10' => null, // allview alldro speed tablet, android ics, opera mobile
+ //'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident/6.0; Touch)' => null, // Its a surface in portrait
+ // Am ramas la pozitia: 207
+
+ // Android on Windows :) www.socketeq.com
+ //'Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; full Android on Microsoft Windows, pad, pc, n*books Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => null,
+
+ // TV
+ //'Opera/9.80 (Linux mips; U; InettvBrowser/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC/BEL; en) Presto/2.7.61 Version/11.00' => null,
+
+ 'Mozilla/5.0 (Android; Mobile; rv:18.0) Gecko/18.0 Firefox/18.0' => array('isMobile' => true, 'isTablet' => false),
+ // Maxthon
+ 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.12 (KHTML, like Gecko) Maxthon/3.0 Chrome/18.0.966.0 Safari/535.12' => array('isMobile' => false, 'isTablet' => false),
+ 'Opera/9.80 (Windows NT 5.1; U; Edition Yx; ru) Presto/2.10.289 Version/12.02' => array('isMobile' => false, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2; en-us; sdk Build/JB_MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)' => array('isMobile' => true, 'isTablet' => false),
+ 'PalmCentro/v0001 Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/Palm-D061; Blazer/4.5) 16;320x320' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0)' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; Microsoft; XDeviceEmulator)' => array('isMobile' => true, 'isTablet' => false),
+ // ZTE phone
+ 'Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; MAL; N880E; China Telecom)' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Series 60; Opera Mini/7.0.29482/28.2859; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (S60; SymbOS; Opera Mobi/SYB-1202242143; U; en-GB) Presto/2.10.254 Version/12.00' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.3; en-au; 97D Build/IML74K) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Opera/9.80 (Android; Opera Mini/7.0.29952/28.2647; U; ru) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Android; Opera Mini/6.1.25375/28.2555; U; en) Presto/2.8.119 Version/11.10' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Mac OS X; Opera Tablet/35779; U; en) Presto/2.10.254 Version/12.00' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Android; Tablet; rv:10.0.4) Gecko/10.0.4 Firefox/10.0.4 Fennec/10.0.4' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Android; Tablet; rv:18.0) Gecko/18.0 Firefox/18.0' => array('isMobile' => true, 'isTablet' => true),
+ 'Opera/9.80 (Linux armv7l; Maemo; Opera Mobi/14; U; en) Presto/2.9.201 Version/11.50' => array('isMobile' => true, 'isTablet' => false),
+ 'Opera/9.80 (Android 2.2.1; Linux; Opera Mobi/ADR-1207201819; U; en) Presto/2.10.254 Version/12.00' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; en-us; sdk Build/JRO03E) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30' => array('isMobile' => true, 'isTablet' => false),
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; Endeavour 1010 Build/ONDA_MID) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true), // Blaupunkt Endeavour 1010
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de; Tablet-PC-4 Build/ICS.g08refem618.20121102) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ // Tagi tablets
+ 'Mozilla/5.0 (Linux; U; Android 4.2.2; de-de; Tagi Tab S10 Build/8089) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+
+ 'Bot' => array(
+ 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http://grub.org)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'Googlebot-Image/1.0' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'Python-urllib/2.5' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'facebookexternalhit/1.0 (+http://www.facebook.com/externalhit_uatext.php)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'AdsBot-Google (+http://www.google.com/adsbot.html)' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'AdsBot-Google-Mobile (+http://www.google.com/mobile/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari' => array('isMobile' => true, 'isTablet' => false, /*'isBot' => true*/),
+ 'Mozilla/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit/534.16 (KHTML, like Gecko, Google Keyword Suggestion) Chrome/10.0.648.127 Safari/534.16' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/),
+ 'Facebot' => array('isMobile' => false, 'isTablet' => false, /*'isBot' => true*/)
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Vodafone.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Vodafone.php
new file mode 100644
index 00000000000..2074a041de0
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/Vodafone.php
@@ -0,0 +1,11 @@
+ array(
+ 'Mozilla/5.0 (Linux; U; Android 3.2; hu-hu; SmartTab10-MSM8260-V02d-Dec022011-Vodafone-HU) AppleWebKit/534.13 (KHTML, like Gecko) Version/4.0' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; Android 4.0.3; SmartTabII10 Build/IML74K) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.1.1; fr-fr; SmartTAB 1002 Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array('isMobile' => true, 'isTablet' => true),
+ 'Mozilla/5.0 (Linux; U; Android 4.0.4; de-de, SmartTabII7 Build/A2107A_A404_107_055_130124_VODA) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30' => array(
+ 'isMobile' => true, 'isTablet' => true,
+ ),
+ ),
+);
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/ZTE.php b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/ZTE.php
new file mode 100644
index 00000000000..4f29b7a633b
--- /dev/null
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/providers/vendors/ZTE.php
@@ -0,0 +1,6 @@
+ array(
+ 'Mozilla/5.0 (Linux; Android 4.0.4; V8200plus Build/IMM76I) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.166 Mobile Safari/537.36' => array('isMobile' => true, 'isTablet' => false)
+ )
+);
\ No newline at end of file
diff --git a/htdocs/includes/mobiledetect/mobiledetectlib/tests/ualist.json b/htdocs/includes/mobiledetect/mobiledetectlib/tests/ualist.json
index c8b6db5b3ee..165832d6e6f 100644
--- a/htdocs/includes/mobiledetect/mobiledetectlib/tests/ualist.json
+++ b/htdocs/includes/mobiledetect/mobiledetectlib/tests/ualist.json
@@ -1 +1,8196 @@
-{"hash":"0f2ce8fdb263e38dc366cecd67ec5ac87ad4c637","user_agents":[{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; A100 Build\/HTK55D) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1; en-us; A110 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Webkit":"534.30","Safari":"4.0","Build":"IML74K"},"model":"A200"},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; A701 Build\/JRO03H) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; B1-A71 Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; B1-710 Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; A1-810 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; nl-nl; A1-810 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Acer; Allegro)","mobile":true,"tablet":false},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; A3-A10 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"JDQ39","Webkit":"537.36","Chrome":"32.0.1700.99"}},{"vendor":"Acer","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; A1-830 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"AdvanDigital","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; E1C Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"AdvanDigital","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; id-id; T3C Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Ainol","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; Ainol Novo8 Advanced Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Ainol","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; Novo10 Hero Build\/20121115) AppleWebKit\/535.19 (KHTML like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Ainol","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; es-es; novo9-Spark Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"AllFine","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; FINE7 GENIUS Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true,"version":{"Android":"3.2.1","Webkit":"534.13","Safari":"4.0"},"model":"Transformer TF101"},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; Transformer Build\/JRO03L) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build\/JZO54K; CyanogenMod-10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; asus_laptop Build\/IMM76L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":false},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Build":"JRO03L","Webkit":"534.30","Safari":"4.0"}},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.1; ME301T Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.2.1","Build":"JOP40D"}},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.1; ME173X Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.2.1","Build":"JOP40D"}},{"vendor":"ASUS","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; TF300T Build\/JDQ39E) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"JDQ39E"}},{"vendor":"Alcatel","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; en-in; MB525 Build\/GWK74; CyanogenMod-7.2.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Alcatel","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; it-it; ALCATEL ONE TOUCH 918D Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false,"version":{"Android":"2.3.5","Webkit":"533.1","Safari":"4.0","Build":"GRJ90"},"model":"ONE TOUCH 918D"},{"vendor":"Alcatel","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; ALCATEL ONE TOUCH 991 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false,"version":{"Android":"2.3.6","Webkit":"533.1","Safari":"4.0","Build":"GRJ90"},"model":"ONE TOUCH 991"},{"vendor":"Alcatel","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; ALCATEL ONE TOUCH 993D Build\/ICECREAM) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false,"version":{"Android":"4.0.4","Webkit":"534.30","Safari":"4.0","Build":"ICECREAM"},"model":"ONE TOUCH 993D"},{"vendor":"Allview","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; ALLVIEW P5 Build\/IML74K) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Allview","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us ; ALLVIEW SPEEDI Build\/IMM76D) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.5.3.246\/145\/355","mobile":true,"tablet":true},{"vendor":"Allview","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; AllviewCity Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Allview","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; ALLVIEWSPEED Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Amazon","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.4 Mobile Safari\/535.19 Silk-Accelerated=true","mobile":true,"tablet":true},{"vendor":"Amazon","user_agent":"Mozilla\/5.0 (Linux; U; en-US) AppleWebKit\/528.5+ (KHTML, like Gecko, Safari\/528.5+) Version\/4.0 Kindle\/3.0 (screen 600x800; rotate)","mobile":true,"tablet":true,"version":{"Webkit":"528.5+","Kindle":"3.0","Safari":"4.0"},"model":"Kindle"},{"vendor":"Amazon","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"IML74K","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Amazon","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Apple","user_agent":"iTunes\/9.1.1","mobile":false,"tablet":false},{"vendor":"Apple","user_agent":"iTunes\/11.0.2 (Windows; Microsoft Windows 8 x64 Business Edition (Build 9200)) AppleWebKit\/536.27.1","mobile":false,"tablet":false},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\/537.51.1 (KHTML, like Gecko) Version\/7.0 Mobile\/11A4449d Safari\/9537.53","mobile":true,"tablet":false},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\/420+ (KHTML, like Gecko) Version\/3.0 Mobile\/1A543 Safari\/419.3","mobile":true,"tablet":false,"version":{"Webkit":"420+","Safari":"3.0"}},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\/528.18 (KHTML, like Gecko) Version\/4.0 Mobile\/7A341 Safari\/528.16","mobile":true,"tablet":false,"version":{"iOS":"3_0","Webkit":"528.18","Safari":"4.0"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\/534.46 (KHTML, like Gecko) Version\/5.1 Mobile\/9B206 Safari\/7534.48.3","mobile":true,"tablet":false,"version":{"iOS":"5_1_1","Webkit":"534.46","Mobile":"9B206","Safari":"5.1"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A403 Safari\/8536.25","mobile":true,"tablet":false,"version":{"iOS":"6_0","Webkit":"536.26","Mobile":"10A403","Safari":"6.0"},"model":"iPod"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPad; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit\/534.46.0 (KHTML, like Gecko) CriOS\/21.0.1180.80 Mobile\/9B206 Safari\/7534.48.3 (6FF046A0-1BC4-4E7D-8A9D-6BF17622A123)","mobile":true,"tablet":true,"version":{"iOS":"5_1_1","Webkit":"534.46.0","Chrome":"21.0.1180.80","Mobile":"9B206"},"model":"iPad"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A403 Safari\/8536.25","mobile":true,"tablet":true,"version":{"iOS":"6_0","Webkit":"536.26","Safari":"6.0","Mobile":"10A403"},"model":"iPad"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit\/533.17.9 (KHTML, like Gecko) Version\/5.0.2 Mobile\/8C148 Safari\/6533.18.5","mobile":true,"tablet":true,"version":{"iOS":"4_2_1","Webkit":"533.17.9","Safari":"5.0.2","Mobile":"8C148"},"model":"iPad"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\/531.21.10 (KHTML, like Gecko) Version\/4.0.4 Mobile\/7B334b Safari\/531.21.10","mobile":true,"tablet":true,"version":{"iOS":"3_2","Webkit":"531.21.10","Safari":"4.0.4","Mobile":"7B334b"},"model":"iPad"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; da-dk) AppleWebKit\/534.46.0 (KHTML, like Gecko) CriOS\/21.0.1180.82 Mobile\/10A523 Safari\/7534.48.3","mobile":true,"tablet":false,"version":{"iOS":"6_0_1","Webkit":"534.46.0","Chrome":"21.0.1180.82","Mobile":"10A523"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A523 Safari\/8536.25","mobile":true,"tablet":false,"version":{"iOS":"6_0_1","Webkit":"536.26","Safari":"6.0","Mobile":"10A523"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X; ru-ru) AppleWebKit\/536.26 (KHTML, like Gecko) CriOS\/23.0.1271.100 Mobile\/10B142 Safari\/8536.25","mobile":true,"tablet":false,"version":{"iOS":"6_1","Webkit":"536.26","Chrome":"23.0.1271.100","Mobile":"10B142"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10B329 Safari\/8536.25","mobile":true,"tablet":false,"version":{"iOS":"6_1_3","Webkit":"536.26","Safari":"6.0","Mobile":"10B329"},"model":"iPhone"},{"vendor":"Apple","user_agent":"Mozilla\/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Coast\/1.0.2.62956 Mobile\/10B329 Safari\/7534.48.3","mobile":true,"tablet":true,"version":{"Coast":"1.0.2.62956"}},{"vendor":"Archos","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Qilive 97R Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Archos","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; Archos 50 Platinum Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Archos","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; ARCHOS 80G9 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Archos","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; fr-fr; A101IT Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Archos","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Archos 101 Neon Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"AudioSonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-au; T-17B Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9300; en) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.546 Mobile Safari\/534.8+","mobile":true,"tablet":false,"version":{"Webkit":"534.8+","BlackBerry":"6.0.0.546"},"model":"BlackBerry 9300"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9360; en-US) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.0.0.400 Mobile Safari\/534.11+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9700; he) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.723 Mobile Safari\/534.8+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9700; en-US) AppleWebKit\/534.8 (KHTML, like Gecko) Version\/6.0.0.448 Mobile Safari\/534.8","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9790; en-GB) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.714 Mobile Safari\/534.11+","mobile":true,"tablet":false,"version":{"Webkit":"534.11+","BlackBerry":"7.1.0.714"},"model":"BlackBerry 9790"},{"vendor":"BlackBerry","user_agent":"Opera\/9.80 (BlackBerry; Opera Mini\/7.0.29990\/28.2504; U; en) Presto\/2.8.119 Version\/11.10","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9981; en-GB) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.342 Mobile Safari\/534.11+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9800; en-GB) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.546 Mobile Safari\/534.8+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9780; es) AppleWebKit\/534.8 (KHTML, like Gecko) Version\/6.0.0.480 Mobile Safari\/534.8","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9810; en-US) AppleWebKit\/534.11 (KHTML, like Gecko) Version\/7.0.0.583 Mobile Safari\/534.11","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9860; es) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.0.0.576 Mobile Safari\/534.11+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit\/534.11 (KHTML, like Gecko) Version\/7.1.0.523 Mobile Safari\/534.11","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"BlackBerry8520\/5.0.0.592 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/136","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"BlackBerry8520\/5.0.0.1067 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/603","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"BlackBerry8520\/5.0.0.1036 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/611","mobile":true,"tablet":false,"version":{"BlackBerry":"5.0.0.1036","VendorID":"611"},"model":"BlackBerry8520"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BlackBerry; U; BlackBerry 9220; en) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.337 Mobile Safari\/534.11+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit\/536.2+ (KHTML, like Gecko) Version\/7.2.1.0 Safari\/536.2+","mobile":true,"tablet":true},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BB10; Touch) AppleWebKit\/537.1+ (KHTML, like Gecko) Version\/10.0.0.1337 Mobile Safari\/537.1+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BB10; Touch) AppleWebKit\/537.10+ (KHTML, like Gecko) Version\/10.0.9.2372 Mobile Safari\/537.10+","mobile":true,"tablet":false},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (BB10; Touch) \/537.10+ (KHTML, like Gecko) Version\/10.0.9.2372 Mobile Safari\/537.10+","mobile":true,"tablet":false,"version":{"BlackBerry":"10.0.9.2372"}},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true,"version":{"Android":"3.2.1","Webkit":"534.13","Safari":"4.0"},"model":"Transformer TF101"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Webkit":"534.30","Safari":"4.0"},"model":"A200"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Webkit":"534.30","Safari":"4.0"},"model":"A500"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Webkit":"534.30","Safari":"4.0"},"model":"A501"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; Transformer Build\/JRO03L) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Webkit":"535.19","Chrome":"18.0.1025.166"},"model":"Transformer"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Webkit":"535.19","Chrome":"18.0.1025.166"},"model":"Transformer Pad TF300T"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build\/JZO54K; CyanogenMod-10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.2","Webkit":"534.30","Safari":"4.0","Build":"JZO54K"},"model":"Transformer"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; B1-A71 Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.1.2","Webkit":"535.19","Chrome":"18.0.1025.166"},"model":"B1-A71"},{"vendor":"BlackBerry","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Acer; Allegro)","mobile":true,"tablet":false,"version":{"Windows Phone OS":"7.5","Trident":"5.0","IE":"9.0"},"model":"Allegro"},{"vendor":"Broncho","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"bq","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; bq Livingstone 2 Build\/1.1.7 20121018-10:33) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"bq","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; bq Edison Build\/1.1.10-1015 20121230-18:00) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"bq","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; Maxwell Lite Build\/v1.0.0.ICS.maxwell.20120920) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"bq","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-tw; bq Maxwell Plus Build\/1.0.0 20120913-10:39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Captiva","user_agent":"Opera\/9.80 (X11; Linux zvav; U; de) Presto\/2.8.119 Version\/11.10 Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; CAPTIVA PAD 10.1 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Casio","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build\/C771M120) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"ChangJia","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; pt-br; TPC97113 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"ChangJia","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; TPC7102 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Coby","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; en-us; MID7010 Build\/FRF85B) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Coby","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Coby","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Concorde","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde Tab T10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Concorde","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde tab PLAY Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Cresta","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; nl-nl; CRESTA.CTP888 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Cube","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; CUBE U9GT 2 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Danew","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; Dslide 700 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"IML74K","Webkit":"534.30","Safari":"4.0"},"model":"Dslide 700"},{"vendor":"DanyTech","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Genius Tab Q4 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Dell","user_agent":"Mozilla\/5.0 (Linux; U; Android 1.6; en-gb; Dell Streak Build\/Donut AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/ 525.20.1","mobile":true,"tablet":false},{"vendor":"Dell","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; hd-us; Dell Venue Build\/GWK74; CyanogenMod-7.2.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Dell","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; DELL; Venue Pro)","mobile":true,"tablet":false},{"vendor":"DPS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; DPS Dream 9 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"ECS","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; it-it; TM105A Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"IMM76D","Webkit":"534.30"}},{"vendor":"Eboda","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme Dual Core X190 Build\/JRO03C) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Eboda","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Essential A160 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Eboda","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; E-Boda Supreme X80 Dual Core Build\/ICS.g12refM806A1YBD.20120925) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Eboda","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-boda essential smile Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Fly","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; Fly IQ440; Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Fly","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; FLY IQ256 Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Fujitsu","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ja-jp; F-10D Build\/V21R48A) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"V21R48A","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Fujitsu","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; M532 Build\/IML74K) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"IML74K","Webkit":"534.30","Safari":"4.0"}},{"vendor":"FX2","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; FX2 PAD7 RK Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Galapad","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-tw; G1 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Webkit":"534.30","Safari":"4.0","Build":"JRO03C"}},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; el-gr; GOCLEVER TAB A103 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; zh-tw; A7GOCLEVER Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; GOCLEVER TAB A104 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; cs-cz; GOCLEVER TAB A93.2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; sk-sk; GOCLEVER TAB A971 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; lv-lv; GOCLEVER TAB A972BK Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-fr; GOCLEVER TAB A104.2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"GoClever","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; pt-pt; GOCLEVER TAB T76 Build\/MID) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Nexus 4 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.40 Mobile Safari\/537.31 OPR\/14.0.1074.54070","mobile":true,"tablet":false,"version":{"Android":"4.2.2","Build":"JDQ39","Webkit":"537.31","Opera":"14.0.1074.54070"}},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Nexus 4 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31","mobile":true,"tablet":false,"version":{"Android":"4.2.2","Chrome":"26.0.1410.58"}},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Google Nexus 4 - 4.1.1 - API 16 - 768x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Google Galaxy Nexus - 4.1.1 - API 16 - 720x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; Nexus 7 Build\/JRO03D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.2; Nexus 7 Build\/JOP40C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; Nexus 7 Build\/JZ054K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.1.2","Chrome":"18.0.1025.166"}},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; cs-cz; Nexus S Build\/JZO54K; CyanogenMod-10.0.0) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; Nexus 10 Build\/JWR66Y) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Google","user_agent":"Mozilla\/5.0 (Linux; U; Android; en_us; Nexus 7 Build\/) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 NetFrontLifeBrowser\/2.3 Mobile (Dragonfruit)","mobile":true,"tablet":true},{"vendor":"GU","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; vi-vn; TX-A1301 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"IMM76D","Webkit":"534.30","Safari":"4.0"}},{"vendor":"GU","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; da-dk; Q702 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"IML74K","Webkit":"534.30","Safari":"4.0"}},{"vendor":"HCL","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build\/HCL ME Tablet U1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"HCL","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build\/HCL ME Tablet U1) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"HCL","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; Connect-3G-2.0 Build\/HCL) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"HCL","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; pt-br; X1 Build\/HCL ME Tablet X1) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"HP","user_agent":"Mozilla\/5.0 (hp-tablet; Linux; hpwOS\/3.0.5; U; en-GB) AppleWebKit\/534.6 (KHTML, like Gecko) wOSBrowser\/234.83 Safari\/534.6 TouchPad\/1.0","mobile":true,"tablet":true},{"vendor":"HP","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; HP Slate 7 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"HP","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; HP Slate 7 Build\/JRO03H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"HP","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; HP 8 Build\/1.0.7_WW-FIR-13) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (X11; Linux x86_64; Z520m; en-ca) AppleWebKit\/534.24 (KHTML, like Gecko) Chrome\/11.0.696.34 Safari\/534.24","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"HTC_Touch_HD_T8282 Mozilla\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 1.5; en-us; ADR6200 Build\/CUPCAKE) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1; xx-xx; Desire_A8181 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; en-gb; HTC Desire Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; fr-fr; HTC Desire Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; en-dk; Desire_A8181 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; xx-xx; 001HT Build\/FRF91) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; xx-xx; HTCA8180\/1.0 Android\/2.2 release\/06.23.2010 Browser\/WAP 2.0 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.2; de-at; HTC Desire Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.2; en-sk; Desire_A8181 Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3; xx-xx; HTC\/DesireS\/1.07.163.1 Build\/GRH78C) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-lv; HTC_DesireZ_A7272 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC\/DesireS\/2.10.161.3 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC_DesireS_S510e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; en-us; Inspire 4G Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; de-de; HTC Explorer A310e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_ChaCha_A810e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; nl-nl; HTC_DesireHD_A9191 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC Desire S Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-au; HTC Desire Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; de-de; HTC_DesireHD Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ua; HTC_WildfireS_A510e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; en-us; HTC Vision Build\/GRI40; ILWT-CM7) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0; xx-xx; HTC_GOF_U\/1.05.161.1 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; hu-hu; HTC Sensation Z710e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; pl-pl; EVO3D_X515m Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC_A320e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-tw; HTC Desire V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; PG86100 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-nl; SensationXE_Beats_Z715e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; cs-ee; Sensation_Z710e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; HTC Evo 4G Build\/MIUI) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; Desire HD Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-my; HTC_One_X Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; it-it; IncredibleS_S710e Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-fr; HTC_Desire_S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; HTC Butterfly Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; EVO Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; HTCSensation Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC 7 Mozart T8698; QSD8x50)","mobile":true,"tablet":false,"version":{"IE":"9.0","Windows Phone OS":"7.5","Trident":"5.0"},"model":"7 Mozart T8698"},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 HTC MOZART)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mondrian T8788)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart T8698)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart; Orange)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Pro T7576)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Pro)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Schubert T9292)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Surround)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Trophy T8686)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Trophy)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Eternity)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Gold)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD2 LEO)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD2)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD7 T9292)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD7)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; iPad 3)","mobile":true,"tablet":true},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; LEO)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mazaa)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mondrian)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mozart T8698)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mozart)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; mwp6985)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PC40100)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PC40200)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PD67100)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PI39100)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PI86100)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar 4G)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 1.08.164.02)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 2.05.164.01)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 2.05.168.02)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar; Orange)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schuber)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schubert T9292)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schubert)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Spark)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Surround)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T7575)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T8697)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T8788)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T9295)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T9296)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; TITAN X310e)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Titan)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Torphy T8686)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; X310e)","mobile":true,"tablet":false},{"vendor":"HTC","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC_blocked; T8788)","mobile":true,"tablet":false,"version":{"IE":"9.0","Windows Phone OS":"7.5","Trident":"5.0"},"model":"T8788"},{"vendor":"Hudl","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Hudl HT7S3 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; bg-bg; Ideos S7 Build\/ERE27) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1; en-us; Ideos S7 Build\/ERE27) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; lt-lt; U8660 Build\/HuaweiU8660) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; ru-ru; HUAWEI-U8850 Build\/HuaweiU8850) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; pl-pl; MediaPad Build\/HuaweiMediaPad) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; nl-nl; HUAWEI MediaPad Build\/HuaweiMediaPad) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"HUAWEI_T8951_TD\/1.0 Android\/4.0.4 (Linux; U; Android 4.0.4; zh-cn) Release\/05.31.2012 Browser\/WAP2.0 (AppleWebKit\/534.30) Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; ar-eg; MediaPad 7 Youth Build\/HuaweiMediaPad) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_C8815\/C8815V100R001C541B135; 540*960; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_C8813D\/C8813DV100R001C92B172; 480*854; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Huwaei","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_Y300C\/Y300CV100R001C92B168; 480*800; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Iconbit","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; NT-3702M Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36 OPR\/16.0.1212.65583","mobile":true,"tablet":true},{"vendor":"Iconbit","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; NetTAB SPACE II Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"iJoy","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; Tablet Planet II-v3 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Intenso","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1.;de-de; INM8002KP Build\/JR003H) AppleWebKit\/534.30 (KHTML, like Gecko)Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1.","Webkit":"534.30","Safari":"4.0"}},{"vendor":"IRU","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; M702pro Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"JXD","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; F3000 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Karbonn","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; ST10 Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Kobo","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 (Kobo Touch)","mobile":true,"tablet":true,"version":{"Android":"2.0","Webkit":"533.1","Safari":"4.0"}},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build\/MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-au; ThinkPad Tablet Build\/ThinkPadTablet_A400_03) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"UCWEB\/2.0 (Linux; U; Opera Mini\/7.1.32052\/30.3697; en-US; IdeaTabA1000-G) U2\/1.0.0 UCBrowser\/9.2.0.419 Mobile","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; IdeaTabA1000-F Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.1; Lenovo A3000-H Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.117 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; IdeaTab A3000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.360","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1; zh-cn; Lenovo-A3000-H\/S100) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.1 Mobile Safari\/534.300","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; es-us; IdeaTab A3000-F Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; IdeaTabA2109A Build\/JRO03R) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; nl-nl; IdeaTabA2109A Build\/JRO03R) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build\/MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.300","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; IdeaTab S6000-H Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Lenovo B8000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2;it-it; Lenovo B8000-F\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2.2 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; it-it; Lenovo B6000-F\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2.2 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Lenovo","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; Lenovo B6000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.2; pt-br; LG-P350f Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; LG-P500 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; LG-E510 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; VS910 4G Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-P700 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build\/IML74K) AppleWebkit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; LG-F160S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-E610v\/V10f Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; LG-E612 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; LG-F180K Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; LG-V500 Build\/JDQ39B) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; LG-V510 Build\/KOT49H.L004) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG E-900)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-C900)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-C900k)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900; Orange)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900h)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-Optimus 7)","mobile":true,"tablet":false},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.0.1; ja-jp; L-06C Build\/HRI66) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"LG","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.0; en-us; LG-V900 Build\/HRI39) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Megafon","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; MegaFon V9 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Megafon","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; MT7A Build\/JRO03C) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31","mobile":true,"tablet":true},{"vendor":"MediaTek","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; MT8377 Build\/JRO03C) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30\/4.05d.1002.m7","mobile":true,"tablet":true},{"vendor":"Micromax","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; Micromax A110 Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22","mobile":true,"tablet":false,"version":{"Android":"4.1.1","Build":"JRO03C","Webkit":"537.22","Chrome":"25.0.1364.169"}},{"vendor":"Micromax","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0; xx-xx; Micromax P250(Funbook) Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Webkit":"534.30","Android":"4.0","Build":"IMM76D","Safari":"4.0"}},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)","mobile":true,"tablet":true,"version":{"IE":"10.0","Windows NT":"6.2","Trident":"6.0"}},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0)","mobile":true,"tablet":true},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)","mobile":true,"tablet":true},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch; ARMBJS)","mobile":true,"tablet":true},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; MASMJS)","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko\/20130626 Firefox\/25.0","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko\/20100101 Firefox\/22.0","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; MDDCJS)","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; MDDCJS)","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.52 Safari\/537.36 OPR\/15.0.1147.130","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.116 Safari\/537.36","mobile":false,"tablet":false},{"vendor":"Microsoft","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; MDDCJS; WebView\/1.0)","mobile":false,"tablet":false},{"vendor":"Modecom","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; pl-pl; FreeTAB 1014 IPS X4+ Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Motorola","user_agent":"MOT-W510\/08.11.05R MIB\/BER2.2 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 EGE\/1.0 UP.Link\/6.3.0.0.0","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.2; zh-cn; ME722 Build\/MLS2GC_2.6.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build\/4.5.1_57_DX8-51) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build\/4.5.1A-1_SUN-254_13) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; es-us; MB526 Build\/4.5.2-51_DFL-50) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-ca; MB860 Build\/4.5.2A-51_OLL-17.8) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; en-us; MOT-XT535 Build\/V1.540) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; ko-kr; A853 Build\/SHOLS_U2_05.26.3; CyanogenMod-7.1.2) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\/HRI39) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.1; en-us; Xoom Build\/HMJ25) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build\/6.7.2-180_DHD-16_M4-31) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build\/IMM76L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; pt-br; XT687 Build\/V2.27D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false,"version":{"Android":"4.0.4","Webkit":"534.30","Safari":"4.0"},"model":"XT687"},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; MOT-XT910 Build\/6.7.2-180_SPU-19-TA-11.6) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT910 Build\/9.8.2O-124_SPUL-17) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT915 Build\/2_32A_2031) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT919 Build\/2_290_2017) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT925 Build\/9.8.2Q-50-XT925_VQLM-20) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT907 Build\/9.8.1Q-66) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; XT901 Build\/9.8.2Q-50_SLS-13) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Motorola","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; DROID BIONIC Build\/9.8.2O-72_VZW-22) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Nabi","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; en-us; NABI-A Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"NEC","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ja-jp; N-08D Build\/A5001911) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"NEC","user_agent":"Mozilla\/5.0 (Linux; U; Android AAA; BBB; N-06D Build\/CCC) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Nook","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; en-us; NOOK BNRV200 Build\/ERD79 1.4.3) Apple WebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true,"version":{"Android":"2.2.1","Webkit":"533.1","Safari":"4.0"}},{"vendor":"Nook","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; NOOK BNTV400 Build\/ICS) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"ICS","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Nook","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; BNTV600 Build\/IMM76L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36 Hughes-PFB\/CID5391275.AID1376709964","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"IMM76L","Webkit":"537.36","Chrome":"28.0.1500.94"}},{"vendor":"Nokia","user_agent":"Nokia200\/2.0 (12.04) Profile\/MIDP-2.1 Configuration\/CLDC-1.1 UCWEB\/2.0 (Java; U; MIDP-2.0; en-US; nokia200) U2\/1.0.0 UCBrowser\/8.9.0.251 U2\/1.0.0 Mobile UNTRUSTED\/1.0","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Nokia6303iclassic\/5.0 (06.61) Profile\/MIDP-2.1 Configuration\/CLDC-1.1 Mozilla\/5.0 AppleWebKit\/420+ (KHTML, like Gecko) Safari\/420+","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"nokian73-1\/UC Browser7.8.0.95\/69\/400 UNTRUSTED\/1.0","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Nokia2760\/2.0 (06.82) Profile\/MIDP-2.1 Configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Nokia3650\/1.0 SymbianOS\/6.1 Series60\/1.2 Profile\/MIDP-1.0 Configuration\/CLDC-1.0","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"NokiaN70-1\/5.0737.3.0.1 Series60\/2.8 Profile\/MIDP-2.0 Configuration\/CLDC-1.1\/UC Browser7.8.0.95\/27\/352","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (S60V3; U; ru; NokiaN73) AppleWebKit\/530.13 (KHTML, like Gecko) UCBrowser\/8.6.0.199\/28\/444\/UCWEB Mobile","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (S60V3; U; ru; NokiaC5-00.2)\/UC Browser8.5.0.183\/28\/444\/UCWEB Mobile","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (S60V3; U; ru; NokiaC5-00.2) AppleWebKit\/530.13 (KHTML, like Gecko) UCBrowser\/8.7.0.218\/28\/352\/UCWEB Mobile","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Series40; NokiaC3-00\/08.63; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) Gecko\/20100401 S40OviBrowser\/2.2.0.0.33","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Opera\/9.80 (Series 60; Opera Mini\/7.0.31380\/28.2725; U; es) Presto\/2.8.119 Version\/11.10","mobile":true,"tablet":false,"version":{"Opera Mini":"7.0.31380","Presto":"2.8.119"}},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.2 NokiaC7-00\/025.007; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.37 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.2 NokiaX7-00\/022.014; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.37 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaE6-00\/111.140.0058; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaC6-01\/111.040.1511; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaC6-01; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia700\/111.030.0609; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia700\/111.020.0308; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.1.14 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaN8-00\/111.040.1511; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia701\/111.030.0609; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120c\/3.83; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120ci\/7.02; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120c\/7.10; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE66-1\/510.21.009; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE71-1\/110.07.127; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaN95-3\/20.2.011 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE51-1\/200.34.36; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE63-1\/500.21.009; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaN82\/10.0.046; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE52-1\/052.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.2","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE52-1\/@version@; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.26 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00\/031.022; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.3.1","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00.2\/081.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.32 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; U; Series60\/3.2 NokiaN79-1\/32.001; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; U; Series60\/3.2 Nokia6220c-1\/06.101; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00.2\/071.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.26 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE72-1\/081.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.32 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00\/061.005; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.2 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaX6-00\/40.0.002; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gb","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5800d-1\/60.0.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaC5-03\/12.0.023; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.9 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5228\/40.1.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.7.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5230\/51.0.002; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5530c-2\/32.0.007; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.9 3gpp-gba","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaN97-1\/21.0.045; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) BrowserNG\/7.1.4","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaN97-4\/30.0.004; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.28 3gpp-gba","mobile":true,"tablet":false,"version":{"Symbian":"9.4","Webkit":"533.4","NokiaBrowser":"7.3.1.28"},"model":"NokiaN97-4"},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 7 Mozart T8698)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; 710)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800C)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800C; Orange)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 900)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; HD7 T9292)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; LG E-900)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 610)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; Orange)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; T-Mobile)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; Vodafone)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800) UP.Link\/5.1.2.6","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; Orange)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; SFR)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; T-Mobile)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; vodafone)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Lumia 800c)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 900)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Lumia 920)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\/6.0; IEMobile\/10.0; ARM; Touch; NOKIA; Lumia 920)","mobile":true,"tablet":false,"version":{"IE":"10.0","Windows Phone OS":"8.0","Trident":"6.0"},"model":"Lumia 920"},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; lumia800)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 610)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 710)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 800)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 800C)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 900)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Nokia)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; SGH-i917)","mobile":true,"tablet":false},{"vendor":"Nokia","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; TITAN X310e)","mobile":true,"tablet":false,"version":{"Windows Phone OS":"7.5","Trident":"5.0"},"model":"TITAN X310e"},{"vendor":"Odys","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Odys","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Plus Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Odys","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.X; de-de; XENO10 Build\/ODYS XENO 10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Odys","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.2; de-de; ODYS Space Build\/I700T_P7_T04_TSCL_FT_R_0_03_1010_110623) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"OverMax","user_agent":"OV-SteelCore(B) Mozilla\/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit\/534.46 (KHTML, like Gecko) Version\/5.1 Mobile\/9A405 Safari\/7534.48.3","mobile":true,"tablet":true},{"vendor":"OverMax","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; pl-pl; OV-SteelCore Build\/ICS.g08refem611.20121010) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"YONESTablet","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; pl-pl; BC1077 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Pantech","user_agent":"PANTECH-C790\/JAUS08312009 Browser\/Obigo\/Q05A Profile\/MIDP-2.0 Configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Pantech","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; ko-kr; SKY IM-A600S Build\/FRG83) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Pantech","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build\/GRI40) AppleWebKit\/533.1 (KHTML like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Pantech","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Philips","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; W732 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"PointOfView","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; POV_TAB-PROTAB30-IPS10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Prestigio","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; PMP5297C_QUAD Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Prestigio","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; sk-sk; PMP7100D3G Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"IMM76D","Webkit":"534.30","Safari":"4.0"},"model":"PMP7100D3G"},{"vendor":"Prestigio","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; sk-sk; PMP7280C3G Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 MobilSafari\/534.30","mobile":true,"tablet":true},{"vendor":"PROSCAN","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; PLT8088 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Build":"JRO03H","Webkit":"534.30","Safari":"4.0"}},{"vendor":"PyleAudio","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; PTBL92BC Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.0.4","Build":"IMM76D","Webkit":"537.36","Chrome":"31.0.1650.59"}},{"vendor":"RockChip","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; hu-hu; RK2818, Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"RockChip","user_agent":"Mozilla\/5.0 (Linux; U; Android Android 2.1-RK2818-1.0.0; zh-cn; MD701 Build\/ECLAIR) AppleWebKit\/530.17 (KHTML like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":true},{"vendor":"RossMoor","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.1; ru-ru; RM-790 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"QMobile","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; A2 Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"MQQBrowser\/4.0\/Mozilla\/5.0 (Linux; U; Android 3.2; zh-cn; GT-P6800 Build\/HTJ85B) AppleWebKit\/533.1 (KHTML, like Gecko) Mobile Safari\/533.1","mobile":true,"tablet":true,"version":{"MQQBrowser":"4.0"}},{"vendor":"Samsung","user_agent":"SAMSUNG-SGH-P250-ORANGE\/P250BVHH8 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 UP.Browser\/6.2.3.3.c.1.101 (GUI) MMP\/2.0","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"SAMSUNG-GT-B2710\/B271MCXKF1 SHP\/VPP\/R5 Dolfin\/2.0 QTV\/5.3 SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1 OPN-B","mobile":true,"tablet":false,"version":{"Dolfin":"2.0"}},{"vendor":"Samsung","user_agent":"SAMSUNG-SGH-D900i\/1.0 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 UP.Browser\/6.2.3.3.c.1.101 (GUI) MMP\/2.0","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"SAMSUNG-GT-S5233T\/S5233TXEJE3 SHP\/VPP\/R5 Jasmine\/0.8 Qtv5.3 SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S5380D\/S5380FXXKL3; U; Bada\/2.0; ru-ru) AppleWebKit\/534.20 (KHTML, like Gecko) Dolfin\/3.0 Mobile HVGA SMM-MMS\/1.2.0 OPN-B","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"SAMSUNG-GT-C3312\/1.0 NetFront\/4.2 Profile\/MIDP-2.0 Configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build\/CUPCAKE) AppleWebKit\/528.5 (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"SAMSUNG-GT-S3650\/S3650XEII3 SHP\/VPP\/R5 Jasmine\/1.0 Nextreaming SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"JUC (Linux; U; 2.3.6; zh-cn; GT-S5360; 240*320) UCWEB7.9.0.94\/140\/352","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S5250\/S5250XEKJ3; U; Bada\/1.0; ru-ru) AppleWebKit\/533.1 (KHTML, like Gecko) Dolfin\/2.0 Mobile WQVGA SMM-MMS\/1.2.0 NexPlayer\/3.0 profile\/MIDP-2.1 configuration\/CLDC-1.1 OPN-B","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\/3.1; IEMobile\/7.0; SAMSUNG; SGH-i917)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S8530\/S8530XXJKA; U; Bada\/1.2; cs-cz) AppleWebKit\/533.1 (KHTML, like Gecko) Dolfin\/2.2 Mobile WVGA SMM-MMS\/1.2.0 OPN-B","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 1.6; ru-ru; Galaxy Build\/Donut) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; ru-ru; GT-I5500 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; en-us; GALAXY_Tab Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; ja-jp; SC-01C Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; fr-fr; GT-I9000 Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; zh-cn; SCH-i909 Build\/FROYO) UC AppleWebKit\/534.31 (KHTML, like Gecko) Mobile Safari\/534.31","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; ja-jp; SC-01C Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; el-gr; GT-I9001 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-ca; SGH-I896 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5660L Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MicroMessenger\/4.5.1.261","mobile":true,"tablet":false,"version":{"MicroMessenger":"4.5.1.261"}},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5660 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6102 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; pl-pl; GT-I9001-ORANGE\/I9001BVKPC Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-I8150 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-I9070 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-I8160 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6802 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; ru-ru; GT-S5830 Build\/GRWK74; LeWa_ROM_Cooper_12.09.21) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-N7000 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build\/HRI83) AppleWebkit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; he-il; GT-P7300 Build\/HTJ85B) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build\/HTJ85B) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100G Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; GT-P5100 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build\/IML74K) AppleWebKit\/535.7 (KHTML, like Gecko) CrMo\/16.0.912.75 Mobile Safari\/535.7","mobile":true,"tablet":false,"version":{"Chrome":"16.0.912.75"}},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; SGH-T989 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false,"version":{"Chrome":"18.0.1025.166"}},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P5100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; GT-I9300 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; SPH-D710 Build\/IMM76I) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-cn; GT-I9300 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300-ORANGE\/I9300BVBLG2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; th-th; GT-I9300T Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-I9100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us ; GT-I9100 Build\/IMM76D) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.4.1.204\/145\/355","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; th-th; GT-P6800 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I747 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; GT-P5110 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; GT-P5110 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-cn; SAMSUNG-GT-S7568_TD\/1.0 Android\/4.0.4 Release\/07.15.2012 Browser\/AppleWebKit534.30 Build\/IMM76D) ApplelWebkit\/534.30 (KHTML,like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false,"version":{"Android":"4.0.4"}},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P3100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; tr-tr; GT-P3105 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-N8010 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-S7562 Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; GT-N7100 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; GT-N7100 Build\/JZO54K) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.123 Mobile Safari\/537.22 OPR\/14.0.1025.52315","mobile":true,"tablet":false,"version":{"Build":"JZO54K","Webkit":"537.22","Opera":"14.0.1025.52315"}},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-hk; GT-N7105 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; GT-N8000 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; SGH-i747M Build\/JRO03L) AppleWebKit\/535.19(KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; Galaxy Nexus - 4.1.1 - with Google Apps - API 16 - 720x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; GT-I8262 Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; it-it; Galaxy Nexus Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-I777 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; GT-S7710 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9082 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; GT-P5210 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, Like Gecko) Chrome\/27.0.1453.90 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG GT-I9200 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Version\/1.0 Chrome\/18.0.1025.308 Mobile Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; zh-cn; SCH-I959 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Version\/1.0 Chrome\/18.0.1025.308 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T310 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-P600 Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-N5100 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; CETUS)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Focus I917 By TC)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Focus i917)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; FOCUS S)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-I8350)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-i8700)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-S7530)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Hljchm's Wp)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; I917)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA 7)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7 By MWP_HS)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7; Orange)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i677)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917.)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917R)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i937)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SMG-917R)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG_blocked_blocked_blocked; OMNIA7; Orange)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG_blocked_blocked_blocked_blocked; OMNIA7; Orange)","mobile":true,"tablet":false},{"vendor":"Samsung","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SUMSUNG; OMNIA 7)","mobile":true,"tablet":false},{"vendor":"simvalley","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; de-de; SP-80 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"SonyEricssonK800i\/R1AA Browser\/NetFront\/3.3 Profile\/MIDP-2.0 Configuration\/CLDC-1.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; es-ar; SonyEricssonE15a Build\/2.0.1.A.0.47) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.1-update1; pt-br; SonyEricssonU20a Build\/2.1.1.A.0.6) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-au; SonyEricssonX10i Build\/3.0.1.G.0.75) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; SonyEricssonST18i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; hr-hr; SonyEricssonST15i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; sk-sk; SonyEricssonLT15i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; th-th; SonyEricssonST27i Build\/6.0.B.3.184) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; de-de; SonyEricssonST25i Build\/6.0.B.3.184) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; pt-br; Xperia Tablet S Build\/TID0092) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"TID0092","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; LT18i Build\/4.1.A.0.562) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; Sony Tablet S Build\/TISU0R0110) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build\/TISU0143) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; SonyEricssonLT18i Build\/4.1.B.0.587) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-ch; SonyEricssonSK17i Build\/4.1.B.0.587) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; SonyEricssonLT26i Build\/6.1.A.2.45) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; LT22i Build\/6.1.B.0.544) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; vi-vn; SonyEricssonLT22i Build\/6.1.B.0.544) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; ST23i Build\/11.0.A.5.5) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; ST23i Build\/11.0.A.2.10) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; LT28h Build\/6.1.E.3.7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; SGPT13 Build\/TJDS0170) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; ja-jp; SonySO-03E Build\/10.1.E.0.265) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.2","Build":"10.1.E.0.265","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; LT26w Build\/6.2.B.1.96) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; SGP321 Build\/10.3.1.A.0.33) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"10.3.1.A.0.33","Webkit":"537.31","Chrome":"26.0.1410.58"}},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; XL39h Build\/14.2.A.1.136) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; sv-se; C5503 Build\/10.1.1.A.1.273) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; C5502 Build\/10.1.1.A.1.310) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-cn; SonyL39t Build\/14.1.M.0.202) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-cn; L39u Build\/14.1.n.0.63) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-tw; M35c Build\/12.0.B.5.37) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; M35c Build\/12.0.B.2.42) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-CN; M35t Build\/12.0.C.2.42) AppleWebKit\/534.31 (KHTML, like Gecko) UCBrowser\/9.3.2.349 U3\/0.8.0 Mobile Safari\/534.31","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; D6502 Build\/17.1.A.2.69) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; D6503 Build\/17.1.A.0.504) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; D6543 Build\/17.1.A.2.55) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2004 Build\/20.0.A.0.29) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; en-gb; D2005 Build\/20.0.A.1.12) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2104 Build\/20.0.B.0.84) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2105 Build\/20.0.B.0.74) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.170 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; pt-br; D2114 Build\/20.0.B.0.85) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2302 Build\/18.0.B.1.23) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; S50h Build\/18.0.b.1.23) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.6.3.413 U3\/0.8.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2303 Build\/18.0.C.1.13) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2305 Build\/18.0.A.1.30) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D2306 Build\/18.0.C.1.7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D5303 Build\/19.0.1.A.0.207) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; D5306 Build\/19.1.A.0.264) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; zh-CN; XM50h Build\/19.0.D.0.269) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.7.6.428 U3\/0.8.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; XM50t Build\/19.0.C.2.59) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; D5322 Build\/19.0.D.0.253) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.131","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; M51w Build\/14.2.A.1.146) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; M51w Build\/14.2.A.1.146) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.1; D5102 Build\/18.2.A.0.9) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.1; D5103 Build\/18.1.A.0.11) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.1; D5106 Build\/18.1.A.0.11) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.3; en-gb; C6902 Build\/14.2.A.1.136) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 GSA\/3.2.17.1009776.arm","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; es-es; C6943 Build\/14.1.G.2.257) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; C6943 Build\/14.3.A.0.681) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; SGP412 Build\/14.1.B.3.320) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1; en-us; SonySGP321 Build\/10.2.C.0.143) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.2; SGP351 Build\/10.1.1.A.1.307) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.3; SGP341 Build\/10.4.B.0.569) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; SGP511 Build\/17.1.A.2.36) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; SGP512 Build\/17.1.A.2.36) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-ch; SGP311 Build\/10.1.C.0.344) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGP312 Build\/10.1.C.0.344) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.4.2; de-de; SGP521 Build\/17.1.A.2.69) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Safari\/537.16","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.4.2; zh-cn; SGP541 Build\/17.1.A.2.36) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"Mozilla\/5.0 (Linux; Android 4.4.2; SGP551 Build\/17.1.A.2.72) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Sony","user_agent":"SonyEricssonU5i\/R2CA; Mozilla\/5.0 (SymbianOS\/9.4; U; Series60\/5.0 Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 Safari\/525","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"SonyEricssonU5i\/R2AA; Mozilla\/5.0 (SymbianOS\/9.4; U; Series60\/5.0 Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 Safari\/525","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Mozilla\/4.0 (PDA; PalmOS\/sony\/model prmr\/Revision:1.1.54 (en)) NetFront\/3.0","mobile":true,"tablet":false},{"vendor":"Sony","user_agent":"Opera\/9.80 (Linux mips; U; InettvBrowser\/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC\/BEL; en) Presto\/2.7.61 Version\/11.00","mobile":false,"tablet":false},{"vendor":"Sony","user_agent":"Opera\/9.80 (Linux armv7l; HbbTV\/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto\/2.12.362 Version\/12.11","mobile":false,"tablet":false},{"vendor":"Skk","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1; en-us; CYCLOPS Build\/F10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Storex","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; eZee_Tab903 Build\/JRO03H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Build":"JRO03H","Webkit":"537.36"}},{"vendor":"Storex","user_agent":"Mozilla\/5.0 (Linux; Android 4.1.1; eZee'Tab785 Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Build":"JRO03C","Webkit":"537.36"}},{"vendor":"Storex","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; eZee'Tab971 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true,"version":{"Android":"4.0.3","Build":"IML74K","Webkit":"535.19"}},{"vendor":"Tecno","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P9 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Telstra","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.7; en-au; T-Hub2 Build\/TVA301TELBG3) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"texet","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; TM-7021 Build\/GB.m1ref.20120116) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true,"version":{"Android":"2.3.4","Webkit":"533.1","Safari":"4.0"},"model":"TM-7021"},{"vendor":"Tolino","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"JDQ39","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Tolino","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 8.9 Build\/JDQ39) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"JDQ39","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Tolino","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; tolino tab 7 Build\/JDQ39) AppleWebkit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.57 Safari\/537.36 OPR\/18.0.1290.67495","mobile":true,"tablet":true},{"vendor":"Tolino","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build\/JDQ39) AppleWebkit\/537.36 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Toshiba","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; TOSHIBA; TSUNAGI)","mobile":true,"tablet":false},{"vendor":"Toshiba","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; it-it; TOSHIBA_FOLIO_AND_A Build\/TOSHIBA_FOLIO_AND_A) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true,"version":{"Android":"2.2","Webkit":"533.1","Safari":"4.0"}},{"vendor":"Trekstor","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; ST70408-1 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31","mobile":true,"tablet":true,"version":{"Android":"4.2.2","Build":"JDQ39","Webkit":"537.31","Chrome":"26.0.1410.58"}},{"vendor":"Trekstor","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; VT10416-2 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Trekstor","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ST10216-2A Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30;SurfTab_10.1","mobile":true,"tablet":true},{"vendor":"Visture","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; V97 HD Build\/LR-97JC) Apple WebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Visture","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Visture V4 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Visture","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V4 HD Build\/Visture V4 HD) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Visture","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; Visture V5 HD Build\/Visture V5 HD) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Visture","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; VS-TOUCHPAD 9 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; Versus Touchpad 9.7 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-gb; CnM-TOUCHPAD7 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 BMID\/E67A45B1AB","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; CnM TouchPad 7DC Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 TwonkyBeamBrowser\/3.3.5-95 (Android 4.1.1; rockchip CnM TouchPad 7DC Build\/meizhi_V2.80.wifi8723.20121225.b11c800)","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"OneBrowser\/3.5\/Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Versus","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; TOUCHTAB Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true,"version":{"Android":"4.1.1","Build":"JRO03H","Webkit":"534.30","Safari":"4.0"}},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; ViewPad 10e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; it-it; ViewPad7 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2.1; en-ca; ViewSonic VB733 Build\/FRG83) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; en-gb; ViewPad7X Build\/HTJ85B) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; pt-br; ViewPad 10S Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":true},{"vendor":"Viewsonic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; VB100a Pro Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Vodafone","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; hu-hu; SmartTab10-MSM8260-V02d-Dec022011-Vodafone-HU) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0","mobile":true,"tablet":true},{"vendor":"Vodafone","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; SmartTabII10 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19","mobile":true,"tablet":true},{"vendor":"Vodafone","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; SmartTAB 1002 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Vonino","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Sirius_Evo_QS Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Vonino","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; Q8 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Xoro","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; PAD 9720QR Build\/PAD 9719QR) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Xoro","user_agent":"Mozilla\/5.0 (Linux; Android 4.2.2; PAD720 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19","mobile":true,"tablet":true},{"vendor":"ZTE","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.1;zh-cn; ZTE V987 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30;","mobile":true,"tablet":false},{"vendor":"ZTE","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.5; pt-pt; Blade Build\/tejosunhsine) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1","mobile":true,"tablet":false},{"vendor":"ZTE","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; ZTE; N880e_Dawoer_Fulllock; China Telecom)","mobile":true,"tablet":false},{"vendor":"ZTE","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; ZTE; V965W)","mobile":true,"tablet":false},{"vendor":"ZTE","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; ZTE; Windows Phone - Internet 7; SFR)","mobile":true,"tablet":false},{"vendor":"Zync","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us ; Z909 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.4.1.204\/145\/444","mobile":true,"tablet":true},{"vendor":"Console","user_agent":"Mozilla\/5.0 (Nintendo WiiU) AppleWebKit\/534.52 (KHTML, like Gecko) NX\/{Version No} NintendoBrowser\/{Version No}.US","mobile":false,"tablet":false},{"vendor":"Console","user_agent":"Mozilla\/5.0 (PLAYSTATION 3 4.21) AppleWebKit\/531.22.8 (KHTML, like Gecko)","mobile":false,"tablet":false},{"vendor":"Console","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\/5.0; Xbox)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (X11; Linux i686) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/32.0.1700.102 Chrome\/32.0.1700.102 Safari\/537.36","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko\/20100101 Firefox\/24.0","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko\/20100101 Firefox\/18.0 AlexaToolbar\/psPCtGhf-2.2","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko\/20100101 Firefox\/22.0","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (X11; Linux ppc; rv:17.0) Gecko\/20130626 Firefox\/17.0 Iceweasel\/17.0.7","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (X11; Linux) AppleWebKit\/535.22+ Midori\/0.4","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit\/535+ (KHTML, like Gecko) Version\/5.0 Safari\/535.20+ Midori\/0.4","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.20 Safari\/537.36 OPR\/15.0.1147.18 (Edition Next)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.2) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.94 Safari\/537.36","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 5.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.94 Safari\/537.36","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 5.2; WOW64; rv:21.0) Gecko\/20100101 Firefox\/21.0","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Opera\/9.80 (Windows NT 5.2; WOW64) Presto\/2.12.388 Version\/12.14","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko\/20100101 Firefox\/19.0","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (X11; FreeBSD amd64; rv:14.0) Gecko\/20100101 Firefox\/14.0.1","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Tablet PC 2.0; MASMJS)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; MANMJS)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; MASMJS)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; Touch; MASMJS)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Opera\/9.80 (Windows NT 6.2; WOW64; MRA 8.0 (build 5784)) Presto\/2.12.388 Version\/12.11","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\/6.0)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.3; Trident\/7.0; rv 11.0) like Gecko","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Windows NT 6.3; WOW64; Trident\/7.0; Touch; rv:11.0) like Gecko","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Mozilla\/5.0 (Unknown; Linux armv7l) AppleWebKit\/537.1+ (KHTML, like Gecko) Safari\/537.1+ HbbTV\/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"HbbTV\/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)","mobile":false,"tablet":false},{"vendor":"Other","user_agent":"Opera\/9.80 (Linux armv7l; HbbTV\/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto\/2.12.362 Version\/12.11","mobile":false,"tablet":false},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; ALUMIUM10 Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36","mobile":true,"tablet":true},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.1; en-us; JY-G3 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":false},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; M758A Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; EVOTAB Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Generic","user_agent":"Java\/1.6.0_22","mobile":false,"tablet":false,"version":{"Java":"1.6.0_22"}},{"vendor":"Generic","user_agent":"Opera\/9.80 (Series 60; Opera Mini\/6.5.29260\/29.3417; U; ru) Presto\/2.8.119 Version\/11.10","mobile":true,"tablet":false},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android; Opera Mini\/6.5.27452\/29.3417; U; ru) Presto\/2.8.119 Version\/11.10","mobile":true,"tablet":false},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.17 (KHTML, like Gecko) Chrome\/24.0.1312.60 Safari\/537.17 OPR\/14.0.1025.52315","mobile":false,"tablet":false},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (X11; CrOS armv7l 4920.83.0) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.103 Safari\/537.36"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\/533.17.9 (KHTML, like Gecko) Version\/5.0.2 Mobile\/8H7 Safari\/6533.18.5"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-fr; GT-I9070 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android 2.3.7; Linux; Opera Mobi\/46154) Presto\/2.11.355 Version\/12.10"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; it-it; DATAM819HD_C Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; SGPT12 Build\/TID0142) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; cm_tenderloin Build\/IMM76L; CyanogenMod-9) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; A210 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10B141 Safari\/8536.25"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-I8150 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (iPad; CPU OS 6_0_1 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Mercury\/7.2 Mobile\/10A523 Safari\/8536.25"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android 2.3.7; Linux; Opera Tablet\/46154) Presto\/2.11.355 Version\/12.10"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build\/MASTER) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2; en-us; sdk Build\/JB_MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Opera\/9.80 (X11; Linux zbov) Presto\/2.11.355 Version\/12.10"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (iPhone; U; CPU OS 4_2_1 like Mac OS X) AppleWebKit\/532.9 (KHTML, like Gecko) Version\/5.0.3 Mobile\/8B5097d Safari\/6531.22.7"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-gb; SGPT12 Build\/TID0142) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Nintendo 3DS; U; ; en) Version\/1.7498.US"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.0.6_b1; ru-ru Build\/ECLAIR) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.4; z1000 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; Android 4.0.3; cm_tenderloin Build\/GWK74) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; Android for Techvision TV1T808 Board Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1"},{"vendor":"Generic","user_agent":"BlackBerry8520\/5.0.0.592 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/136"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Windows NT 6.2) AppleWebKit\/537.17 (KHTML, like Gecko) Chrome\/24.0.1312.56 Safari\/537.17"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.1; ru-ru; LG-V900 Build\/HMJ37) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\/6.0; IEMobile\/10.0; ARM; Touch; HTC; Windows Phone 8S by HTC)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (PLAYSTATION 3 4.11) AppleWebKit\/531.22.8 (KHTML, like Gecko)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2; ru-ru; V9S_V1.4) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch; WebView\/1.0)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; Next7P12 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Opera\/9.80 (X11; Linux zbov) Presto\/2.11.355 Version\/12.10"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 2.3.6; es-es; SAMSUNG GT-S5830\/S5830BUKT2 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 3.2.1; en-gb;HTC_Flyer_P512 Build\/HTK75C) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; full Android on Microsoft Windows, pad, pc, n*books Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Linux mips; U; InettvBrowser\/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC\/BEL; en) Presto\/2.7.61 Version\/11.00"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Android; Mobile; rv:18.0) Gecko\/18.0 Firefox\/18.0"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Windows NT 6.1) AppleWebKit\/535.12 (KHTML, like Gecko) Maxthon\/3.0 Chrome\/18.0.966.0 Safari\/535.12"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Windows NT 5.1; U; Edition Yx; ru) Presto\/2.10.289 Version\/12.02"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2; en-us; sdk Build\/JB_MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)"},{"vendor":"Generic","user_agent":"PalmCentro\/v0001 Mozilla\/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource\/Palm-D061; Blazer\/4.5) 16;320x320"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Microsoft; XDeviceEmulator)"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; MAL; N880E; China Telecom)"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Series 60; Opera Mini\/7.0.29482\/28.2859; U; ru) Presto\/2.8.119 Version\/11.10"},{"vendor":"Generic","user_agent":"Opera\/9.80 (S60; SymbOS; Opera Mobi\/SYB-1202242143; U; en-GB) Presto\/2.10.254 Version\/12.00"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.3; en-au; 97D Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android; Opera Mini\/7.0.29952\/28.2647; U; ru) Presto\/2.8.119 Version\/11.10"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android; Opera Mini\/6.1.25375\/28.2555; U; en) Presto\/2.8.119 Version\/11.10"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Mac OS X; Opera Tablet\/35779; U; en) Presto\/2.10.254 Version\/12.00"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Android; Tablet; rv:10.0.4) Gecko\/10.0.4 Firefox\/10.0.4 Fennec\/10.0.4"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Android; Tablet; rv:18.0) Gecko\/18.0 Firefox\/18.0"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Linux armv7l; Maemo; Opera Mobi\/14; U; en) Presto\/2.9.201 Version\/11.50"},{"vendor":"Generic","user_agent":"Opera\/9.80 (Android 2.2.1; Linux; Opera Mobi\/ADR-1207201819; U; en) Presto\/2.10.254 Version\/12.00","mobile":true,"tablet":false},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; sdk Build\/JRO03E) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30"},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; Endeavour 1010 Build\/ONDA_MID) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Generic","user_agent":"Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de; Tablet-PC-4 Build\/ICS.g08refem618.20121102) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30","mobile":true,"tablet":true},{"vendor":"Bot","user_agent":"Mozilla\/5.0 (compatible; Googlebot\/2.1; +http:\/\/www.google.com\/bot.html)","mobile":false,"tablet":false},{"vendor":"Bot","user_agent":"grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http:\/\/grub.org)","mobile":false,"tablet":false},{"vendor":"Bot","user_agent":"Googlebot-Image\/1.0","mobile":false,"tablet":false},{"vendor":"Bot","user_agent":"Python-urllib\/2.5","mobile":false,"tablet":false},{"vendor":"Bot","user_agent":"facebookexternalhit\/1.0 (+http:\/\/www.facebook.com\/externalhit_uatext.php)","mobile":false,"tablet":false}]}
\ No newline at end of file
+{
+ "hash": "169521cbf4b919b69880fa76746cd4f78bbc99f5",
+ "user_agents": [
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; A100 Build\/HTK55D) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1; en-us; A110 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Webkit": "534.30",
+ "Safari": "4.0",
+ "Build": "IML74K"
+ },
+ "model": "A200"
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; A701 Build\/JRO03H) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; B1-A71 Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; B1-710 Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; A1-810 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; nl-nl; A1-810 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Acer; Allegro)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; A3-A10 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39",
+ "Webkit": "537.36",
+ "Chrome": "32.0.1700.99"
+ }
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; A1-811 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; A1-830 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Acer",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; A3-A11 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; en-in; MB525 Build\/GWK74; CyanogenMod-7.2.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; it-it; ALCATEL ONE TOUCH 918D Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "2.3.5",
+ "Webkit": "533.1",
+ "Safari": "4.0",
+ "Build": "GRJ90"
+ },
+ "model": "ONE TOUCH 918D"
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; ALCATEL ONE TOUCH 991 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "2.3.6",
+ "Webkit": "533.1",
+ "Safari": "4.0",
+ "Build": "GRJ90"
+ },
+ "model": "ONE TOUCH 991"
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; ALCATEL ONE TOUCH 993D Build\/ICECREAM) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.0.4",
+ "Webkit": "534.30",
+ "Safari": "4.0",
+ "Build": "ICECREAM"
+ },
+ "model": "ONE TOUCH 993D"
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "ALCATEL_A392G\/1.0 ObigoInternetBrowser\/Q05A[TF013513002719521000000013182904148]",
+ "mobile": true,
+ "tablet": false,
+ "model": "A392G"
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "ALCATEL_3020D\/1.0 ObigoInternetBrowser\/Q03C",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2; ALCATEL ONE TOUCH 5037A Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "ALCATEL_3020G\/1.0 ObigoInternetBrowser\/Q03C",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "ALCATEL_3041D\/1.0 ObigoInternetBrowser\/Q03C",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 5037E Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 5037X Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 5037X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012A Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-nz; ONE TOUCH 6012A Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012D Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; ONE TOUCH 6012D Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; En-us; ONE TOUCH 6012E Build\/JDQ39) AppleWebKit\/534.30 (KHTML, Like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ONE TOUCH 6012X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.12975 YaBrowser\/13.12.1599.12975 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; bg-bg; ONE TOUCH 6012X Build\/JDQ39) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 6012X_orange Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; fr-fr; ALCATEL ONE TOUCH 6012X_orange Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; fr-fr; 6016E Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; ALCATEL ONE TOUCH 6016E Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; 6016X Build\/JLS36C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; ALCATEL ONE TOUCH 6016X Build\/JLS36C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; ru-ru; 6016X Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 6032A Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.170 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; ru-ru; ALCATEL ONE TOUCH 6032X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-nz; ALCATEL ONE TOUCH 7040A Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; th-th; ALCATEL ONE TOUCH 7040D Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7040D Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7040E Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; it-it; ALCATEL ONE TOUCH 7041D Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7041D Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 7041X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; pt-pt; ALCATEL ONE TOUCH 7041X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020A Build\/JDQ39) AppleWebKit\/537.36 (KHTML, Like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020A Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020D Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; es-es; ALCATEL ONE TOUCH 8020D Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020E Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020E Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ALCATEL ONE TOUCH 8020X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Alcatel",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; ALCATEL ONE TOUCH 8020X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Allview",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; ALLVIEW P5 Build\/IML74K) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Allview",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us ; ALLVIEW SPEEDI Build\/IMM76D) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.5.3.246\/145\/355",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Allview",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; AllviewCity Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Allview",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; ALLVIEWSPEED Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; KFTT Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.4 Mobile Safari\/535.19 Silk-Accelerated =true",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; en-US) AppleWebKit\/528.5+ (KHTML, like Gecko, Safari\/528.5+) Version\/4.0 Kindle\/3.0 (screen 600x800; rotate)",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Webkit": "528.5+",
+ "Kindle": "3.0",
+ "Safari": "4.0"
+ },
+ "model": "Kindle"
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; KFOTE Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "IML74K",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; WFJWAE Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; en-us; KFTT Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.21 Safari\/535.19 Silk-Accelerated=true",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; en-us; KFTHWI Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.21 Safari\/535.19 Silk-Accelerated=true",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; en-us; KFJWI Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.21 Safari\/535.19 Silk-Accelerated=true",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; en-us; KFSOWI Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Silk\/3.21 Safari\/535.19 Silk-Accelerated=true",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amazon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1; xx-xx; T720-WIFI Build\/ECLAIR) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "iTunes\/9.1.1",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "iTunes\/11.0.2 (Windows; Microsoft Windows 8 x64 Business Edition (Build 9200)) AppleWebKit\/536.27.1",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPod touch; CPU iPhone OS 7_0 like Mac OS X) AppleWebKit\/537.51.1 (KHTML, like Gecko) Version\/7.0 Mobile\/11A4449d Safari\/9537.53",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit\/420+ (KHTML, like Gecko) Version\/3.0 Mobile\/1A543 Safari\/419.3",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Webkit": "420+",
+ "Safari": "3.0"
+ }
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit\/528.18 (KHTML, like Gecko) Version\/4.0 Mobile\/7A341 Safari\/528.16",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "3_0",
+ "Webkit": "528.18",
+ "Safari": "4.0"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 5_1_1 like Mac OS X) AppleWebKit\/534.46 (KHTML, like Gecko) Version\/5.1 Mobile\/9B206 Safari\/7534.48.3",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "5_1_1",
+ "Webkit": "534.46",
+ "Mobile": "9B206",
+ "Safari": "5.1"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPod; CPU iPhone OS 6_0 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A403 Safari\/8536.25",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "6_0",
+ "Webkit": "536.26",
+ "Mobile": "10A403",
+ "Safari": "6.0"
+ },
+ "model": "iPod"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 5_1_1 like Mac OS X; en-us) AppleWebKit\/534.46.0 (KHTML, like Gecko) CriOS\/21.0.1180.80 Mobile\/9B206 Safari\/7534.48.3 (6FF046A0-1BC4-4E7D-8A9D-6BF17622A123)",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "iOS": "5_1_1",
+ "Webkit": "534.46.0",
+ "Chrome": "21.0.1180.80",
+ "Mobile": "9B206"
+ },
+ "model": "iPad"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 6_0 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A403 Safari\/8536.25",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "iOS": "6_0",
+ "Webkit": "536.26",
+ "Safari": "6.0",
+ "Mobile": "10A403"
+ },
+ "model": "iPad"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; U; CPU OS 4_2_1 like Mac OS X; en-us) AppleWebKit\/533.17.9 (KHTML, like Gecko) Version\/5.0.2 Mobile\/8C148 Safari\/6533.18.5",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "iOS": "4_2_1",
+ "Webkit": "533.17.9",
+ "Safari": "5.0.2",
+ "Mobile": "8C148"
+ },
+ "model": "iPad"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit\/531.21.10 (KHTML, like Gecko) Version\/4.0.4 Mobile\/7B334b Safari\/531.21.10",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "iOS": "3_2",
+ "Webkit": "531.21.10",
+ "Safari": "4.0.4",
+ "Mobile": "7B334b"
+ },
+ "model": "iPad"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X; da-dk) AppleWebKit\/534.46.0 (KHTML, like Gecko) CriOS\/21.0.1180.82 Mobile\/10A523 Safari\/7534.48.3",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "6_0_1",
+ "Webkit": "534.46.0",
+ "Chrome": "21.0.1180.82",
+ "Mobile": "10A523"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 6_0_1 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10A523 Safari\/8536.25",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "6_0_1",
+ "Webkit": "536.26",
+ "Safari": "6.0",
+ "Mobile": "10A523"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 6_1 like Mac OS X; ru-ru) AppleWebKit\/536.26 (KHTML, like Gecko) CriOS\/23.0.1271.100 Mobile\/10B142 Safari\/8536.25",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "6_1",
+ "Webkit": "536.26",
+ "Chrome": "23.0.1271.100",
+ "Mobile": "10B142"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10B329 Safari\/8536.25",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "6_1_3",
+ "Webkit": "536.26",
+ "Safari": "6.0",
+ "Mobile": "10B329"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 6_1_3 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Coast\/1.0.2.62956 Mobile\/10B329 Safari\/7534.48.3",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Coast": "1.0.2.62956"
+ }
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "CheckMyBus iOS mobile App 0.9.0 (iPhone; iPhone OS\/7.1.1)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 7_0 like Mac OS X) AppleWebKit\/537.51.1 (KHTML, like Gecko) Version\/7.0 Mobile\/11A465 Safari\/9537.53",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 8_0_2 like Mac OS X) AppleWebKit\/600.1.4 (KHTML, like Gecko) CriOS\/38.0.2125.59 Mobile\/12A405 Safari\/600.1.4",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "VendorAppName\/1.7.0 (iPhone; iOS 8.1.2; Scale\/3.00)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "iOS": "8.1.2"
+ },
+ "model": "iPhone"
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 9_0 like Mac OS X) AppleWebKit\/601.1.17 (KHTML, like Gecko) Version\/8.0 Mobile\/13A175 Safari\/600.1.4",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Apple",
+ "user_agent": "Mozilla\/5.0 (iPhone; CPU iPhone OS 9_0 like Mac OS X) AppleWebKit\/601.1.37 (KHTML, like Gecko) Version\/8.0 Mobile\/13A4293g Safari\/600.1.4",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Qilive 97R Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; Archos 50 Platinum Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; ARCHOS 80G9 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; fr-fr; A101IT Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Archos 101 Neon Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Archos 101 Cobalt Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 80 TITANIUM Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; ARCHOS 101 Titanium Build\/JRO03H) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 70b TITANIUM Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; de-de; Archos 80 Xenon Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Archos 79 Xenon Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 101 Titanium Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 80XSK Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS FAMILYPAD 2 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; ARCHOS 97B TITANIUM Build\/JRO03H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ARCHOS 101 XS 2 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; ARCHOS 80b PLATINUM Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Archos 70 Xenon Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; ARCHOS 97 CARBON Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS 97 TITANIUMHD Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Archos 90 Neon Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 1.6; de-de; Archos5 Build\/Donut) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Archos",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ARCHOS GAMEPAD Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "3.2.1",
+ "Webkit": "534.13",
+ "Safari": "4.0"
+ },
+ "model": "Transformer TF101"
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Transformer Build\/JRO03L) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build\/JZO54K; CyanogenMod-10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; asus_laptop Build\/IMM76L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; PadFone 2 Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03L",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.1; ME301T Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.1",
+ "Build": "JOP40D"
+ }
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.1; ME173X Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.1",
+ "Build": "JOP40D"
+ }
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; TF300T Build\/JDQ39E) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39E"
+ }
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; K00C Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; K00E Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; K00F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; K00L Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ME302KL Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; K010 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.111 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ASUS",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; K017 Build\/KVT49L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.111 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9300; en) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.546 Mobile Safari\/534.8+",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Webkit": "534.8+",
+ "BlackBerry": "6.0.0.546"
+ },
+ "model": "BlackBerry 9300"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9360; en-US) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.0.0.400 Mobile Safari\/534.11+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9700; he) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.723 Mobile Safari\/534.8+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9700; en-US) AppleWebKit\/534.8 (KHTML, like Gecko) Version\/6.0.0.448 Mobile Safari\/534.8",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9790; en-GB) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.714 Mobile Safari\/534.11+",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Webkit": "534.11+",
+ "BlackBerry": "7.1.0.714"
+ },
+ "model": "BlackBerry 9790"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Opera\/9.80 (BlackBerry; Opera Mini\/7.0.29990\/28.2504; U; en) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9981; en-GB) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.342 Mobile Safari\/534.11+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9800; en-GB) AppleWebKit\/534.8+ (KHTML, like Gecko) Version\/6.0.0.546 Mobile Safari\/534.8+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9780; es) AppleWebKit\/534.8 (KHTML, like Gecko) Version\/6.0.0.480 Mobile Safari\/534.8",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9810; en-US) AppleWebKit\/534.11 (KHTML, like Gecko) Version\/7.0.0.583 Mobile Safari\/534.11",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9860; es) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.0.0.576 Mobile Safari\/534.11+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9900; en-US) AppleWebKit\/534.11 (KHTML, like Gecko) Version\/7.1.0.523 Mobile Safari\/534.11",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "BlackBerry8520\/5.0.0.592 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/136",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "BlackBerry8520\/5.0.0.1067 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/603",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "BlackBerry8520\/5.0.0.1036 Profile\/MIDP-2.1 Configuration\/CLDC-1.1 VendorID\/611",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "BlackBerry": "5.0.0.1036",
+ "VendorID": "611"
+ },
+ "model": "BlackBerry8520"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BlackBerry; U; BlackBerry 9220; en) AppleWebKit\/534.11+ (KHTML, like Gecko) Version\/7.1.0.337 Mobile Safari\/534.11+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (PlayBook; U; RIM Tablet OS 2.1.0; en-US) AppleWebKit\/536.2+ (KHTML, like Gecko) Version\/7.2.1.0 Safari\/536.2+",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BB10; Touch) AppleWebKit\/537.1+ (KHTML, like Gecko) Version\/10.0.0.1337 Mobile Safari\/537.1+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BB10; Touch) AppleWebKit\/537.10+ (KHTML, like Gecko) Version\/10.0.9.2372 Mobile Safari\/537.10+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (BB10; Touch) \/537.10+ (KHTML, like Gecko) Version\/10.0.9.2372 Mobile Safari\/537.10+",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "BlackBerry": "10.0.9.2372"
+ }
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; Transformer TF101 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "3.2.1",
+ "Webkit": "534.13",
+ "Safari": "4.0"
+ },
+ "model": "Transformer TF101"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; A200 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "A200"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A500 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "A500"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; A501 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "A501"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Transformer Build\/JRO03L) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Webkit": "535.19",
+ "Chrome": "18.0.1025.166"
+ },
+ "model": "Transformer"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; ASUS Transformer Pad TF300T Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Webkit": "535.19",
+ "Chrome": "18.0.1025.166"
+ },
+ "model": "Transformer Pad TF300T"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-fr; Transformer Build\/JZO54K; CyanogenMod-10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.2",
+ "Webkit": "534.30",
+ "Safari": "4.0",
+ "Build": "JZO54K"
+ },
+ "model": "Transformer"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; B1-A71 Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.2",
+ "Webkit": "535.19",
+ "Chrome": "18.0.1025.166"
+ },
+ "model": "B1-A71"
+ },
+ {
+ "vendor": "BlackBerry",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Acer; Allegro)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Windows Phone OS": "7.5",
+ "Trident": "5.0",
+ "IE": "9.0"
+ },
+ "model": "Allegro"
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 1.6; en-gb; Dell Streak Build\/Donut AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/ 525.20.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; hd-us; Dell Venue Build\/GWK74; CyanogenMod-7.2.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; DELL; Venue Pro)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; Venue 8 3830 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; Venue 7 3730 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; Venue 7 HSPA+ Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; Venue 8 3830 Build\/JSS15Q) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Dell",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; zh-cn; Dell Streak 10 Pro Build\/HTJ85B) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; en-us; Nexus One Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Nexus 4 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.40 Mobile Safari\/537.31 OPR\/14.0.1074.54070",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39",
+ "Webkit": "537.31",
+ "Opera": "14.0.1074.54070"
+ }
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Nexus 4 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.2.2",
+ "Chrome": "26.0.1410.58"
+ }
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Google Nexus 4 - 4.1.1 - API 16 - 768x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Google Galaxy Nexus - 4.1.1 - API 16 - 720x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Nexus 7 Build\/JRO03D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2; Nexus 7 Build\/JOP40C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; Nexus 7 Build\/JZ054K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.2",
+ "Chrome": "18.0.1025.166"
+ }
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; cs-cz; Nexus S Build\/JZO54K; CyanogenMod-10.0.0) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; Nexus 10 Build\/JWR66Y) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android; en_us; Nexus 7 Build\/) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 NetFrontLifeBrowser\/2.3 Mobile (Dragonfruit)",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.1; Nexus 5 Build\/LMY47D) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/39.0.0.0 Mobile Safari\/537.36 momoWebView\/6.3.1 android\/404(Nexus 5;android 5.1;zh_CN;10;netType\/1)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Google",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; Nexus 10 Build\/JWR66Y) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (hp-tablet; Linux; hpwOS\/3.0.5; U; en-GB) AppleWebKit\/534.6 (KHTML, like Gecko) wOSBrowser\/234.83 Safari\/534.6 TouchPad\/1.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; HP Slate 7 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HP Slate 7 Build\/JRO03H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; HP 8 Build\/1.0.7_WW-FIR-13) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HP Slate 10 HD Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HP Slate 8 Pro Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Slate 21 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Safari\/537.36 OPR\/22.0.1485.78487",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HP",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HP SlateBook 10 x2 PC Build\/4.3-17r20-03-23) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (X11; Linux x86_64; Z520m; en-ca) AppleWebKit\/534.24 (KHTML, like Gecko) Chrome\/11.0.696.34 Safari\/534.24",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "HTC_Touch_HD_T8282 Mozilla\/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.11)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 1.5; en-us; ADR6200 Build\/CUPCAKE) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1; xx-xx; Desire_A8181 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; de-de; HTC Desire 1.19.161.5 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; en-gb; HTC Desire Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; fr-fr; HTC Desire Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; en-dk; Desire_A8181 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; xx-xx; 001HT Build\/FRF91) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; xx-xx; HTCA8180\/1.0 Android\/2.2 release\/06.23.2010 Browser\/WAP 2.0 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.2; de-at; HTC Desire Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.2; en-sk; Desire_A8181 Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3; xx-xx; HTC\/DesireS\/1.07.163.1 Build\/GRH78C) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-lv; HTC_DesireZ_A7272 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; ADR6300 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC\/DesireS\/2.10.161.3 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC_DesireS_S510e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; en-us; Inspire 4G Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; de-de; HTC Explorer A310e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; en-gb; HTC_ChaCha_A810e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; nl-nl; HTC_DesireHD_A9191 Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; HTC Desire S Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-au; HTC Desire Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; de-de; HTC_DesireHD Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ua; HTC_WildfireS_A510e Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; en-us; HTC Vision Build\/GRI40; ILWT-CM7) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0; xx-xx; HTC_GOF_U\/1.05.161.1 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; hu-hu; HTC Sensation Z710e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC Sensation XE with Beats Audio Z715e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; pl-pl; EVO3D_X515m Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; HTC_One_V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC_A320e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-tw; HTC Desire V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; PG86100 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-nl; SensationXE_Beats_Z715e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; ADR6425LVW 4G Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; cs-ee; Sensation_Z710e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; HTC Evo 4G Build\/MIUI) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; Desire HD Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-my; HTC_One_X Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; it-it; IncredibleS_S710e Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-fr; HTC_Desire_S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC Butterfly Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; EVO Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTCSensation Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; GT-S6312 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC 7 Mozart T8698; QSD8x50)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "IE": "9.0",
+ "Windows Phone OS": "7.5",
+ "Trident": "5.0"
+ },
+ "model": "7 Mozart T8698"
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2.1; en-gb;HTC_Flyer_P512 Build\/HTK75C) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.1; zh-tw; HTC PG09410 Build\/HMJ15) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 HTC MOZART)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mondrian T8788)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart T8698)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Mozart; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Pro T7576)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Pro)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Schubert T9292)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Surround)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Trophy T8686)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; 7 Trophy)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Eternity)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Gold)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD2 LEO)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD2)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD7 T9292)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; HD7)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; iPad 3)",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; LEO)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mazaa)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mondrian)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mozart T8698)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Mozart)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; mwp6985)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PC40100)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PC40200)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PD67100)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PI39100)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; PI86100)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar 4G)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 1.08.164.02)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 2.05.164.01)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar C110e; 2.05.168.02)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Radar; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schuber)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schubert T9292)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Schubert)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Spark)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Surround)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T7575)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T8697)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T8788)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T9295)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; T9296)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; TITAN X310e)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Titan)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; Torphy T8686)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC; X310e)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; HTC_blocked; T8788)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "IE": "9.0",
+ "Windows Phone OS": "7.5",
+ "Trident": "5.0"
+ },
+ "model": "T8788"
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; HTC One S Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de; HTC One X Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-th; HTC One V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; HTC One X Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-id; HTC One X Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One S Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One X Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-at; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03L) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.123 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.123 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One X Build\/JZO54K) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; es-pe; HTC One V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; HTC One X Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 Maxthon\/4.0.4.1000",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One X Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.133 Mobile Safari\/535.19 AlexaToolbar\/alxf-2.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One S Build\/IML74K) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; de-de; HTC One Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31 OPR\/14.0.1074.58201",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39E) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One XL Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.63 Mobile Safari\/537.36 OPR\/15.0.1162.60140",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One X Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.24 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "HTC One X Linux\/3.0.13 Android\/4.1.9 Release\/10.12.2012 Browser\/AppleWebKit534.30 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 Mobile Safari\/534.30 Android 4.0.1;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One 801e Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; HTC One X Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.63 Mobile Safari\/537.36 OPR\/15.0.1162.61541",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One XL Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X+ Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; HTC One X Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30\/4.05d.1002.m7",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-in; HTC One V Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; HTC One X Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 MicroMessenger\/5.0.1.352",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; HTC One X Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; HTC One Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One SV Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One mini Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; HTC One Build\/IMM76D) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One 801e Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-ch; HTC One Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; nl-nl; HTC One X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; zh-cn; HTC One S Build\/IML74K) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17 T5\/2.0 baidubrowser\/3.1.6.4 (Baidu; P1 4.0.3)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X+ Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; HTC One 801e Build\/JSS15J) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.4.1.362 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4; HTC One Build\/KRT16S.H5) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One SV Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.1; ru-ru; HTC One Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; ru-ru; HTC One 801e Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One 801e Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One mini Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.12975 YaBrowser\/13.12.1599.12975 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4; HTC One Build\/KRT16S) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; HTC One Build\/JSS15J) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One X Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One X Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JWR66Y.H1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; de-at; HTC One Build\/JSS15J) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X+ Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One dual sim Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; HTC One S Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One max Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.132 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One mini Build\/JSS15Q) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One 801e Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-cn; HTC One Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 MicroMessenger\/5.2.380",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One X Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.133 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X+ Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.132 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; HTC One X Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; it-it; HTC One S Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-kw; HTC One X+ Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One max Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 MicroMessenger\/5.3.0.49_r693790.420",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru; HTC One V Build\/IML74K) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.7.5.418 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 MicroMessenger\/5.2.1.381",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One mini Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; ru-ru; HTC One mini Build\/KOT49H) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.16",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru; HTC One V Build\/IML74K) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.8.0.435 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One 801e Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; HTC One X - 4.2.2 - API 17 - 720x1280 Build\/JDQ39E) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X+ Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.128 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.128 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.128 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One_M8 Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; HTC One VX Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.76 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One V Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One dual sim Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One dual sim Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36 OPR\/22.0.1485.78487",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X+ Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One_M8 Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One 801e Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One 801e Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; HTC One X Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36 OPR\/22.0.1485.81203",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One 801e Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; HTC One S Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-tw; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One_M8 Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; HTC One V Build\/IML74K) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.9.2.467 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One mini Build\/JSS15Q) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; en-us; HTC One_M8 Build\/KOT49H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One dual sim Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/37.0.2062.117 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.72 Mobile Safari\/537.36 OPR\/19.0.1340.69721",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One_M8 Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One SV Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 ACHEETAHI\/2100050056",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One_M8 Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JWR66Y.H1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One SV Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 [FBAN\/FB4A;FBAV\/21.0.0.23.12;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-tw; HTC One X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; ru-si; HTC One X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 MicroMessenger\/6.0.0.67_r853700.483 NetType\/WIFI",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 [FBAN\/FB4A;FBAV\/22.0.0.15.13;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-US; HTC One X Build\/JRO03C) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/10.0.1.512 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One Build\/KTU84P.H1) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 [FBAN\/FB4A;FBAV\/22.0.0.15.13;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 [FBAN\/FB4A;FBAV\/22.0.0.15.13;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One SV Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 [FBAN\/FB4A;FBAV\/22.0.0.15.13;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-tw; HTC One X+ Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 BingWeb\/5.2.0.20140710",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; HTC One Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-mx; HTC One S Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 [FBAN\/FB4A;FBAV\/23.0.0.22.14;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.3; es-es; HTC One 801e Build\/KTU84L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X+ Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.69 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; HTC One S Build\/JRO03C) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.16",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; en-th; HTC One Build\/KOT49H) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.16",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; es-ar; HTC One X Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One_M8 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-us; HTC One X+ Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; es-mx; HTC One S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/24.0.0.30.15;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; HTC One Build\/KTU84L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.89 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One dual sim Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.89 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/25.0.0.19.30;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.0.1; HTC One_M8 Build\/LRX22C) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/37.0.0.0 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/25.0.0.19.30;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.89 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; HTC One_M8 Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.109 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; HTC One X Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; HTC One mini Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.109 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "HTC",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.0.1; HTC One_M8 Build\/LRX22C.H5) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/40.0.2214.109 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; bg-bg; Ideos S7 Build\/ERE27) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1; en-us; Ideos S7 Build\/ERE27) AppleWebKit\/525.10+ (KHTML, like Gecko) Version\/3.0.4 Mobile Safari\/523.12.2",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; lt-lt; U8660 Build\/HuaweiU8660) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; ru-ru; HUAWEI-U8850 Build\/HuaweiU8850) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; pl-pl; MediaPad Build\/HuaweiMediaPad) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; nl-nl; HUAWEI MediaPad Build\/HuaweiMediaPad) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "HUAWEI_T8951_TD\/1.0 Android\/4.0.4 (Linux; U; Android 4.0.4; zh-cn) Release\/05.31.2012 Browser\/WAP2.0 (AppleWebKit\/534.30) Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; ar-eg; MediaPad 7 Youth Build\/HuaweiMediaPad) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-cn; HW-HUAWEI_C8815\/C8815V100R001C541B135; 540*960; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_C8813D\/C8813DV100R001C92B172; 480*854; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Huwaei",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; HW-HUAWEI_Y300C\/Y300CV100R001C92B168; 480*800; CTC\/2.0) AppleWebKit\/534.30 (KHTML, like Gecko) Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; Iris 349 Build\/MocorDroid2.3.5) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; iris402+ Build\/iris402+) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; IRIS402 Build\/LAVAIRIS402) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; iris405 Build\/LAVAIRIS405) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; IRIS_501 Build\/LAVAIRIS501) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; iris402e Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; iris503e Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "UCWEB\/2.0 (Linux; U; Opera Mini\/7.1.32052\/30.3697; en-US; IRIS402) U2\/1.0.0 UCBrowser\/9.1.1.420 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "UCWEB\/2.0 (MIDP-2.0; U; Adr 4.2.2; en-US; IRIS402) U2\/1.0.0 UCBrowser\/9.1.1.420 U2\/1.0.0 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "UCWEB\/2.0 (Linux; U; Opera Mini\/7.1.32052\/30.3697; en-US; IRIS355) U2\/1.0.0 UCBrowser\/9.1.1.420 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; iris356 Build\/irisIRIS356) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.5.0.360 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "UCWEB\/2.0 (Linux; U; Opera Mini\/7.1.32052\/30.3697; en-US; iris356) U2\/1.0.0 UCBrowser\/9.0.2.389 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; iris500 Build\/iris500) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; iris700 Build\/iris700) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; QPAD E704 Build\/JDQ39) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/36.0.1985.131 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2; xx-xx; IvoryS Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-US; E-TAB IVORY Build\/E702) AppleWebKit\/534.31 (KHTML, like Gecko) UCBrowser\/9.3.0.321 U3\/0.8.0 Mobile Safari\/534.31",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lava",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; tr-tr; E-TAB Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": 0,
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-au; TBLT10Q-32GB Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build\/MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-au; ThinkPad Tablet Build\/ThinkPadTablet_A400_03) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "UCWEB\/2.0 (Linux; U; Opera Mini\/7.1.32052\/30.3697; en-US; IdeaTabA1000-G) U2\/1.0.0 UCBrowser\/9.2.0.419 Mobile",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; IdeaTabA1000-F Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.1; Lenovo A3000-H Build\/JOP40D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.117 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; IdeaTab A3000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.360",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1; zh-cn; Lenovo-A3000-H\/S100) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.1 Mobile Safari\/534.300",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; es-us; IdeaTab A3000-F Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; IdeaTab A2107A-H Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; IdeaTabA2109A Build\/JRO03R) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; nl-nl; IdeaTabA2109A Build\/JRO03R) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; IdeaTab_A1107 Build\/MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.300",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; IdeaTab S6000-H Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; IdeaTab S6000-F Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Lenovo B8000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2;it-it; Lenovo B8000-F\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; it-it; Lenovo B6000-F\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.2.2 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Lenovo B6000-F Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; IdeaPadA10 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; Ideapad K1 Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; de-de; IdeaPad A1 Build\/GRK393; CyanogenMod-7) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; Lenovo B8080-H Build\/JLS36C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; hu-hu; Lenovo A3500-FL Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; Lenovo A7600-F Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; Lenovo A5500-F Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.131 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Lenovo",
+ "user_agent": "Lenovo A390 Linux\/3.0.13 Android\/4.4.2 Release\/04.03.2013 Browser\/AppleWebKit534.30 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 Mobile Safari\/534.30 Android 4.0.1;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; LG-VS410PP Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; en-us; LG-P509 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.2; pt-br; LG-P350f Build\/FRG83G) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; LG-P500 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; LS670 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; LG-E510 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MMS\/LG-Android-MMS-V1.0\/1.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; VS910 4G Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-P700 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ko-kr; LG-L160L Build\/IML74K) AppleWebkit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; LG-F160S Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; LG-E610v\/V10f Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; LG-E612 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; LG-F180K Build\/JZO54K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; LG-V500 Build\/JDQ39B) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; LG-LW770 Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; LG-V510 Build\/KOT49H.L004) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG E-900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-C900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-C900k)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-E900h)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; LG; LG-Optimus 7)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.0.1; ja-jp; L-06C Build\/HRI66) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.0; en-us; LG-V900 Build\/HRI39) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; en-gb; LG-V700 Build\/KOT49I.A1403851714) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.1599.103 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; LG-V500 Build\/KOT49I.V50020d) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.102 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "LG",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; en-us; LG-V410\/V41010d Build\/KOT49I.V41010d) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.1599.103 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2; xx-xx; HM NOTE 1W Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 MobilSafari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.1; zh-cn; MI-ONE Plus Build\/ITL41D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2SC Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-cn; MI 2S Build\/JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-tw; MI 1S Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.8; zh-cn; xiaomi2 Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko)Version\/4.0 MQQBrowser\/4.4 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; MI 2A Build\/miui.es JRO03L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.1; zh-cn; MI 3 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; MI 1S Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; MI 3W Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; HM 1SC Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; HM 1SW Build\/JLS36C) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.36 XiaoMi\/MiuiBrowser\/2.0.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; HM NOTE 1W Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.36 XiaoMi\/MiuiBrowser\/2.0.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; MI-ONE C1 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.4; en-us; MI 4W Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.36 XiaoMi\/MiuiBrowser\/2.0.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Mi",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4; MI PAD Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch; .NET4.0E; .NET4.0C; Tablet PC 2.0)",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "IE": "10.0",
+ "Windows NT": "6.2",
+ "Trident": "6.0"
+ }
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; ARM; Trident\/6.0; Touch; ARMBJS)",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; MASMJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; WOW64; rv:25.0) Gecko\/20130626 Firefox\/25.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; WOW64; rv:22.0) Gecko\/20100101 Firefox\/22.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; MDDCJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; MDDCJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.52 Safari\/537.36 OPR\/15.0.1147.130",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.116 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Microsoft",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; MDDCJS; WebView\/1.0)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "MOT-W510\/08.11.05R MIB\/BER2.2 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 EGE\/1.0 UP.Link\/6.3.0.0.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.2; zh-cn; ME722 Build\/MLS2GC_2.6.0) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; DROIDX Build\/4.5.1_57_DX8-51) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; en-us; MB855 Build\/4.5.1A-1_SUN-254_13) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; es-us; MB526 Build\/4.5.2-51_DFL-50) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-ca; MB860 Build\/4.5.2A-51_OLL-17.8) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; en-us; MOT-XT535 Build\/V1.540) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; ko-kr; A853 Build\/SHOLS_U2_05.26.3; CyanogenMod-7.1.2) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.0; en-us; Xoom Build\/HRI39) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.1; en-us; Xoom Build\/HMJ25) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; DROID RAZR 4G Build\/6.7.2-180_DHD-16_M4-31) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; Xoom Build\/IMM76L) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; pt-br; XT687 Build\/V2.27D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.0.4",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "XT687"
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; MOT-XT910 Build\/6.7.2-180_SPU-19-TA-11.6) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT910 Build\/9.8.2O-124_SPUL-17) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT915 Build\/2_32A_2031) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT919 Build\/2_290_2017) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT925 Build\/9.8.2Q-50-XT925_VQLM-20) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT907 Build\/9.8.1Q-66) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT901 Build\/9.8.2Q-50_SLS-13) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; DROID BIONIC Build\/9.8.2O-72_VZW-22) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT1022 Build\/KXC20.82-14) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.4; en-in; XT1022 Build\/KXC21.5-40) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.16",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT1025 Build\/KXC20.82-13) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT1052 Build\/KLA20.16-2.16.2) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; XT1052 Build\/13.9.0Q2.X_83) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; XT1053 Build\/13.9.0Q2.X_61) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Mobile Safari\/537.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; XT1053 Build\/13.9.0Q2.X_55) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; XT1056 Build\/13.9.0Q2.X-116-MX-17-6-2) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.64 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT1031 Build\/KXB20.9-1.10-1.18-1.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; XT1032 Build\/KXB21.14-L1.40) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; de-de; XT1032 Build\/KLB20.9-1.10-1.24-1.1) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.16",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT1034 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-us; XT1034 Build\/14.10.0Q3.X-84-16) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; XT1035 Build\/14.10.0Q3.X-23) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.3; XT1039 Build\/KXB21.14-L1.31) AppleWebKit\/537.36 (KHTML like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; XT919 Build\/2_290_2002) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT919 Build\/2_290_2004) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; XT920 Build\/2_290_2014) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; XT920 Build\/2_310_2014) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; XT905 Build\/7.7.1Q_GCIRD-16) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; XT908 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; XT897 Build\/7.7.1Q-6_SPR-ASANTI_LE-18) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.0.2; XT1032 Build\/LXB22.46-28.1) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/43.0.2357.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.1.1; Moto E Build\/LMY47V) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/39.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Motorola",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; XT1021 Build\/KTU84Q) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/33.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Nokia200\/2.0 (12.04) Profile\/MIDP-2.1 Configuration\/CLDC-1.1 UCWEB\/2.0 (Java; U; MIDP-2.0; en-US; nokia200) U2\/1.0.0 UCBrowser\/8.9.0.251 U2\/1.0.0 Mobile UNTRUSTED\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Nokia6303iclassic\/5.0 (06.61) Profile\/MIDP-2.1 Configuration\/CLDC-1.1 Mozilla\/5.0 AppleWebKit\/420+ (KHTML, like Gecko) Safari\/420+",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "nokian73-1\/UC Browser7.8.0.95\/69\/400 UNTRUSTED\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Nokia2760\/2.0 (06.82) Profile\/MIDP-2.1 Configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Nokia3650\/1.0 SymbianOS\/6.1 Series60\/1.2 Profile\/MIDP-1.0 Configuration\/CLDC-1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "NokiaN70-1\/5.0737.3.0.1 Series60\/2.8 Profile\/MIDP-2.0 Configuration\/CLDC-1.1\/UC Browser7.8.0.95\/27\/352",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (S60V3; U; ru; NokiaN73) AppleWebKit\/530.13 (KHTML, like Gecko) UCBrowser\/8.6.0.199\/28\/444\/UCWEB Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (S60V3; U; ru; NokiaC5-00.2)\/UC Browser8.5.0.183\/28\/444\/UCWEB Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (S60V3; U; ru; NokiaC5-00.2) AppleWebKit\/530.13 (KHTML, like Gecko) UCBrowser\/8.7.0.218\/28\/352\/UCWEB Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Series40; NokiaC3-00\/08.63; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) Gecko\/20100401 S40OviBrowser\/2.2.0.0.33",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Opera\/9.80 (Series 60; Opera Mini\/7.0.31380\/28.2725; U; es) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Opera Mini": "7.0.31380",
+ "Presto": "2.8.119"
+ }
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.2 NokiaC7-00\/025.007; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.37 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.2 NokiaX7-00\/022.014; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.37 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaE6-00\/111.140.0058; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaC6-01\/111.040.1511; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaC6-01; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia700\/111.030.0609; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia700\/111.020.0308; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.1.14 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 NokiaN8-00\/111.040.1511; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/535.1 (KHTML, like Gecko) NokiaBrowser\/8.3.1.4 Mobile Safari\/535.1 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Symbian\/3; Series60\/5.3 Nokia701\/111.030.0609; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.4.2.6 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120c\/3.83; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120ci\/7.02; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 Nokia6120c\/7.10; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE66-1\/510.21.009; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE71-1\/110.07.127; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaN95-3\/20.2.011 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE51-1\/200.34.36; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaE63-1\/500.21.009; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.2; U; Series60\/3.1 NokiaN82\/10.0.046; Profile\/MIDP-2.0 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE52-1\/052.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.2",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE52-1\/@version@; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.26 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00\/031.022; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.3.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00.2\/081.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.32 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; U; Series60\/3.2 NokiaN79-1\/32.001; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; U; Series60\/3.2 Nokia6220c-1\/06.101; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/413 (KHTML, like Gecko) Safari\/413",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00.2\/071.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.26 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaE72-1\/081.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.32 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.3; Series60\/3.2 NokiaC5-00\/061.005; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.2 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaX6-00\/40.0.002; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gb",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5800d-1\/60.0.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaC5-03\/12.0.023; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.9 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5228\/40.1.003; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.7.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5230\/51.0.002; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.33 Mobile Safari\/533.4 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 Nokia5530c-2\/32.0.007; Profile\/MIDP-2.1 Configuration\/CLDC-1.1 ) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 BrowserNG\/7.2.6.9 3gpp-gba",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaN97-1\/21.0.045; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) BrowserNG\/7.1.4",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (SymbianOS\/9.4; Series60\/5.0 NokiaN97-4\/30.0.004; Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/533.4 (KHTML, like Gecko) NokiaBrowser\/7.3.1.28 3gpp-gba",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Symbian": "9.4",
+ "Webkit": "533.4",
+ "NokiaBrowser": "7.3.1.28"
+ },
+ "model": "NokiaN97-4"
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 7 Mozart T8698)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; 710)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800C)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 800C; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; 900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; HD7 T9292)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; LG E-900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 610)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; T-Mobile)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 710; Vodafone)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800) UP.Link\/5.1.2.6",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; SFR)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; T-Mobile)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 800; vodafone)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Lumia 800c)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Lumia 900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Lumia 920)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows Phone 8.0; Trident\/6.0; IEMobile\/10.0; ARM; Touch; NOKIA; Lumia 920)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "IE": "10.0",
+ "Windows Phone OS": "8.0",
+ "Trident": "6.0"
+ },
+ "model": "Lumia 920"
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; lumia800)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 610)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 710)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 800)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 800C)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; NOKIA; Nokia 900)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; Nokia)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; SGH-i917)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Nokia; TITAN X310e)",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Windows Phone OS": "7.5",
+ "Trident": "5.0"
+ },
+ "model": "TITAN X310e"
+ },
+ {
+ "vendor": "Nokia",
+ "user_agent": "Mozilla\/5.0 (Mobile; Windows Phone 8.1; Android 4.0; ARM; Trident\/7.0; Touch; rv:11.0; IEMobile\/11.0; NOKIA; Lumia 520) like iPhone OS 7_0_3 Mac OS X AppleWebKit\/537 (KHTML, like Gecko) Mobile Safari\/537",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; V975i Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.108 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Android; Tablet; rv:37.0) Gecko\/37.0 Firefox\/37.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; V975m Core4 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; fr-fr; V975m Core4 Build\/JSS15J) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Safari\/537.16",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; V975m Core4 Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/41.0.2272.96 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Onda",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; V812 Core4 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "AdvanDigital",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; E1C Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "AdvanDigital",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; id-id; T3C Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Ainol",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; en-us; Ainol Novo8 Advanced Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Ainol",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Novo10 Hero Build\/20121115) AppleWebKit\/535.19 (KHTML like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Ainol",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; es-es; novo9-Spark Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "AllFine",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; FINE7 GENIUS Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Amoi",
+ "user_agent": "Amoi 8512\/R18.0 NF-Browser\/3.3",
+ "mobile": true,
+ "tablet": false,
+ "model": "8512"
+ },
+ {
+ "vendor": "Arnova",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; fr-fr; AN9G2I Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "AudioSonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-au; T-17B Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Blaupunkt",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; Endeavour 800NG Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Broncho",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; es-es; Broncho N701 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "bq",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; bq Livingstone 2 Build\/1.1.7 20121018-10:33) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "bq",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-es; bq Edison Build\/1.1.10-1015 20121230-18:00) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "bq",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; Maxwell Lite Build\/v1.0.0.ICS.maxwell.20120920) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "bq",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-tw; bq Maxwell Plus Build\/1.0.0 20120913-10:39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "bq",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; Aquaris E10 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Captiva",
+ "user_agent": "Opera\/9.80 (X11; Linux zvav; U; de) Presto\/2.8.119 Version\/11.10 Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; CAPTIVA PAD 10.1 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Casio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; C771 Build\/C771M120) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "ChangJia",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; pt-br; TPC97113 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ChangJia",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; TPC7102 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; Celkon CT 910+ Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-in; CT-1 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "CELKON.C64\/R2AE SEMC-Browser\/4.0.3 Profile\/MIDP-2.0 Configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Celkon A125 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-US; Celkon*A86 Build\/Celkon_A86) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1 UCBrowser\/8.7.0.315 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Celkon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Celkon A.R 40 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Coby",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; en-us; MID7010 Build\/FRF85B) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Coby",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; MID7048 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Coby",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; MID8042 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Concorde",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde Tab T10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Concorde",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; ConCorde tab PLAY Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Cresta",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; nl-nl; CRESTA.CTP888 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Cube",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; CUBE U9GT 2 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Danew",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; Dslide 700 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "IML74K",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "Dslide 700"
+ },
+ {
+ "vendor": "DanyTech",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Genius Tab Q4 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Digma",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; iDx10 3G Build\/ICS.b02ref.20120331) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "DPS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; DPS Dream 9 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ECS",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; it-it; TM105A Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "IMM76D",
+ "Webkit": "534.30"
+ }
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme Dual Core X190 Build\/JRO03C) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Essential A160 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; E-Boda Supreme X80 Dual Core Build\/ICS.g12refM806A1YBD.20120925) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-boda essential smile Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme X80 Dual Core Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Eboda",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; E-Boda Supreme XL200IPS Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Evolio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Evolio X7 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Evolio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ro-ro; ARIA_Mini_wifi Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Fly",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; Fly IQ440; Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Fly",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; FLY IQ256 Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Fujitsu",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ja-jp; F-10D Build\/V21R48A) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "V21R48A",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Fujitsu",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; ru-ru; M532 Build\/IML74K) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "IML74K",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "FX2",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; FX2 PAD7 RK Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Galapad",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-tw; G1 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Webkit": "534.30",
+ "Safari": "4.0",
+ "Build": "JRO03C"
+ }
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; el-gr; GOCLEVER TAB A103 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; zh-tw; A7GOCLEVER Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; GOCLEVER TAB A104 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; cs-cz; GOCLEVER TAB A93.2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; sk-sk; GOCLEVER TAB A971 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; lv-lv; GOCLEVER TAB A972BK Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-fr; GOCLEVER TAB A104.2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GoClever",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; pt-pt; GOCLEVER TAB T76 Build\/MID) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "GU",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; vi-vn; TX-A1301 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "IMM76D",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "GU",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; da-dk; Q702 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "IML74K",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "HCL",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build\/HCL ME Tablet U1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HCL",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; U1 Build\/HCL ME Tablet U1) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HCL",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; Connect-3G-2.0 Build\/HCL) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "HCL",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; pt-br; X1 Build\/HCL ME Tablet X1) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Hudl",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Hudl HT7S3 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.82 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Iconbit",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; NT-3702M Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Safari\/537.36 OPR\/16.0.1212.65583",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Iconbit",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; NetTAB SPACE II Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "iJoy",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; Tablet Planet II-v3 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Intenso",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1.;de-de; INM8002KP Build\/JR003H) AppleWebKit\/534.30 (KHTML, like Gecko)Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1.",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Intenso",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; TAB1004 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "INQ",
+ "user_agent": "INQ1\/R3.9.12 NF-Browser\/3.5",
+ "mobile": true,
+ "tablet": false,
+ "model": "INQ1"
+ },
+ {
+ "vendor": "Intex",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3; en-US; Cloud_X2 Build\/MocorDroid4.0.1) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1 UCBrowser\/9.2.0.419 Mobile",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Intex",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Cloud Y2 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Intex",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-in; Cloud X5 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "IRU",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; M702pro Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "JXD",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; F3000 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Karbonn",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; ST10 Build\/JRO03C) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Kobo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.0; en-us;) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 (Kobo Touch)",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "2.0",
+ "Webkit": "533.1",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Megafon",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; ru-ru; MegaFon V9 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Megafon",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; MT7A Build\/JRO03C) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "MediaTek",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; MT8377 Build\/JRO03C) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30\/4.05d.1002.m7",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Micromax",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Micromax A110 Build\/JRO03C) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.169 Mobile Safari\/537.22",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03C",
+ "Webkit": "537.22",
+ "Chrome": "25.0.1364.169"
+ }
+ },
+ {
+ "vendor": "Micromax",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0; xx-xx; Micromax P250(Funbook) Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Webkit": "534.30",
+ "Android": "4.0",
+ "Build": "IMM76D",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Modecom",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; pl-pl; FreeTAB 1014 IPS X4+ Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "MSI",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.5; el-gr; MSI Enjoy 10 Plus Build\/1.2) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Nabi",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; en-us; NABI-A Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "NEC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ja-jp; N-08D Build\/A5001911) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "NEC",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android AAA; BBB; N-06D Build\/CCC) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Nexo",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; pl-pl; NEXO 3G Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 ACHEETAHI\/2100050074",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Nibiru",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-tw; Nibiru H1 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 XiaoMi\/MiuiBrowser\/1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Nook",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; en-us; NOOK BNRV200 Build\/ERD79 1.4.3) Apple WebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "2.2.1",
+ "Webkit": "533.1",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Nook",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; NOOK BNTV400 Build\/ICS) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "ICS",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Nook",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; BNTV600 Build\/IMM76L) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36 Hughes-PFB\/CID5391275.AID1376709964",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "IMM76L",
+ "Webkit": "537.36",
+ "Chrome": "28.0.1500.94"
+ }
+ },
+ {
+ "vendor": "Oneplus",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; A0001 Build\/JLS36C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Oneplus",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; xx-xx; A0001 Build\/JLS36C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; LOOX Plus Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.X; de-de; XENO10 Build\/ODYS XENO 10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.2; de-de; ODYS Space Build\/I700T_P7_T04_TSCL_FT_R_0_03_1010_110623) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; ODYS-EVO Build\/ODYS-EVO) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.X; de-de; Xelio 10 Pro Build\/ODYS_Xelio) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; NEO_QUAD10 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.X; de-de; Xelio10Pro Build\/ODYS_Xelio) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.1; en-us; ODYS-Xpress Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de; XELIO7PHONETAB Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; XELIO10EXTREME Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de; XELIO Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 Mobile UCBrowser\/3.2.1.441",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; XELIOPT2 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Odys",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; nl-nl; ODYS-NOON Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "OverMax",
+ "user_agent": "OV-SteelCore(B) Mozilla\/5.0 (iPad; CPU OS 5_0_1 like Mac OS X) AppleWebKit\/534.46 (KHTML, like Gecko) Version\/5.1 Mobile\/9A405 Safari\/7534.48.3",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "OverMax",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; pl-pl; OV-SteelCore Build\/ICS.g08refem611.20121010) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "YONESTablet",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; pl-pl; BC1077 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Pantech",
+ "user_agent": "PANTECH-C790\/JAUS08312009 Browser\/Obigo\/Q05A Profile\/MIDP-2.0 Configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Pantech",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; ko-kr; SKY IM-A600S Build\/FRG83) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Pantech",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us; ADR8995 4G Build\/GRI40) AppleWebKit\/533.1 (KHTML like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Pantech",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2.1; en-us; PantechP4100 Build\/HTK75) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; Philips W336 Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.45 Mobile Safari\/537.36 OPR\/15.0.1162.59192",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Philips_T3500\/V1 Linux\/3.4.5 Android\/4.2.2 Release\/03.26.2013 Browser\/AppleWebKit534.30 Mobile Safari\/534.30 MBBMS\/2.2 System\/Android 4.2.2;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Philips W3568 Build\/Philips_W3568) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; Philips W832 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux;U;Android 4.2.2;es-us;Philips S388 Build\/JDQ39) AppleWebkit\/534.30 (HTML,like Gecko) Version\/4.0 Mobile Safari\/534.30;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; Philips W536 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux;U;Android 4.2.2;es-us;Philips S308 Build\/JDQ39) AppleWebkit\/534.30 (HTML,like Gecko) Version\/4.0 Mobile Safari\/534.30;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; ru-ru; Philips-W8500 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; ru; Philips W8510 Build\/JDQ39) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.8.9.457 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; ru-RU; Philips W3568 Build\/Philips W3568) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.1 Mobile Safari\/534.30;",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; Philips S388 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; Build\/PI3100.00.00.24) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; W732 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Philips",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.1; PI7100_93 Build\/PI7100.C.00.00.11) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "PocketBook",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; en-ru; PocketBook A10 3G Build\/GRJ90) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "PointOfView",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; POV_TAB-PROTAB30-IPS10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Praktica",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; TP750 3GGSM Build\/IMM76I) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "PROSCAN",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; PLT8088 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03H",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "PyleAudio",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; PTBL92BC Build\/IMM76D) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "IMM76D",
+ "Webkit": "537.36",
+ "Chrome": "31.0.1650.59"
+ }
+ },
+ {
+ "vendor": "RockChip",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; hu-hu; RK2818, Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "RockChip",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android Android 2.1-RK2818-1.0.0; zh-cn; MD701 Build\/ECLAIR) AppleWebKit\/530.17 (KHTML like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "RossMoor",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.1; ru-ru; RM-790 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "QMobile",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; A2 Build\/GRK39F) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "simvalley",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; de-de; SP-80 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Skk",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1; en-us; CYCLOPS Build\/F10) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Storex",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; eZee_Tab903 Build\/JRO03H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03H",
+ "Webkit": "537.36"
+ }
+ },
+ {
+ "vendor": "Storex",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; eZee'Tab785 Build\/JRO03C) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.59 Safari\/537.36",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03C",
+ "Webkit": "537.36"
+ }
+ },
+ {
+ "vendor": "Storex",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; eZee'Tab971 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "IML74K",
+ "Webkit": "535.19"
+ }
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; P98 3G\\xE5\\x85\\xAB\\xE6\\xA0\\xB8(A3HY) Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "QQ\\xe9\\x9f\\xb3\\xe4\\xb9\\x90HD 4.0.1 (iPad; iPhone OS 8.0; zh_CN)",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0; xx-xx; A15(E6C2) Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3; xx-xx; A10 Build\/GRJ22) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; Teclast A10T Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-cn; Teclast P85(A9D3) Build\/IMM76D) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Teclast",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; A70H Build\/JDQ39) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.8.0.435 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Tecno",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; TECNO P9 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Telstra",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; en-au; T-Hub2 Build\/TVA301TELBG3) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "texet",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; TM-7021 Build\/GB.m1ref.20120116) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "2.3.4",
+ "Webkit": "533.1",
+ "Safari": "4.0"
+ },
+ "model": "TM-7021"
+ },
+ {
+ "vendor": "Tolino",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Tolino",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 8.9 Build\/JDQ39) AppleWebKit\/534.30 (KHTML like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Tolino",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; tolino tab 7 Build\/JDQ39) AppleWebkit\/537.36 (KHTML, like Gecko) Chrome\/31.0.1650.57 Safari\/537.36 OPR\/18.0.1290.67495",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Tolino",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; tolino tab 7 Build\/JDQ39) AppleWebkit\/537.36 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Toshiba",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; TOSHIBA; TSUNAGI)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Toshiba",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; it-it; TOSHIBA_FOLIO_AND_A Build\/TOSHIBA_FOLIO_AND_A) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "2.2",
+ "Webkit": "533.1",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Trekstor",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; ST70408-1 Build\/JDQ39) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "JDQ39",
+ "Webkit": "537.31",
+ "Chrome": "26.0.1410.58"
+ }
+ },
+ {
+ "vendor": "Trekstor",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; engb; Build\/IMM76D) AppleWebKit\/534.46 (KHTML, like Gecko) Version\/5.1 Mobile\/9A405 Safari\/7534.48.3 SurfTab_7.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Trekstor",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; VT10416-2 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Trekstor",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; de-de; ST10216-2A Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30;SurfTab_10.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Ubislate",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; UBISLATE7C+ Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Visture",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; V97 HD Build\/LR-97JC) Apple WebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Visture",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; Visture V4 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Visture",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V4 HD Build\/Visture V4 HD) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Visture",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; es-es; Visture V5 HD Build\/Visture V5 HD) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Visture",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; Visture V10 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; VS-TOUCHPAD 9 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; Versus Touchpad 9.7 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-gb; CnM-TOUCHPAD7 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 BMID\/E67A45B1AB",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; CnM TouchPad 7DC Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30 TwonkyBeamBrowser\/3.3.5-95 (Android 4.1.1; rockchip CnM TouchPad 7DC Build\/meizhi_V2.80.wifi8723.20121225.b11c800)",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "OneBrowser\/3.5\/Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; TOUCHPAD 7 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Versus",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; TOUCHTAB Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.1",
+ "Build": "JRO03H",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; de-de; ViewPad 10e Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; it-it; ViewPad7 Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; en-ca; ViewSonic VB733 Build\/FRG83) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; en-gb; ViewPad7X Build\/HTJ85B) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; pt-br; ViewPad 10S Build\/FRF91) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Viewsonic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; VB100a Pro Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Vonino",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-us; Sirius_Evo_QS Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Vonino",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; Q8 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Wolder",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4; miTab LIVE Build\/KVT49L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Wolder",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; pt-pt; miTab FUNK Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Wolfgang",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.1; nl-nl; AT-AS45q2 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Xoro",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; PAD 9720QR Build\/PAD 9719QR) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Xoro",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; PAD720 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "ZTE",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; V8200plus Build\/IMM76I) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.166 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Zync",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-us ; Z909 Build\/GRI40) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.4.1.204\/145\/444",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; PMP5297C_QUAD Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; sk-sk; PMP7100D3G Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.4",
+ "Build": "IMM76D",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ },
+ "model": "PMP7100D3G"
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; sk-sk; PMP7280C3G Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 MobilSafari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; PMT3017_WI Build\/KVT49L) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; PMT3037_3G Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; PMT5002_Wi Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/39.0.2171.93 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Prestigio",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; el-gr; PMT5887_3G Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "MQQBrowser\/4.0\/Mozilla\/5.0 (Linux; U; Android 3.2; zh-cn; GT-P6800 Build\/HTJ85B) AppleWebKit\/533.1 (KHTML, like Gecko) Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "MQQBrowser": "4.0"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-SGH-P250-ORANGE\/P250BVHH8 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 UP.Browser\/6.2.3.3.c.1.101 (GUI) MMP\/2.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-GT-B2710\/B271MCXKF1 SHP\/VPP\/R5 Dolfin\/2.0 QTV\/5.3 SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1 OPN-B",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Dolfin": "2.0"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-SGH-D900i\/1.0 Profile\/MIDP-2.0 Configuration\/CLDC-1.1 UP.Browser\/6.2.3.3.c.1.101 (GUI) MMP\/2.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-GT-S5233T\/S5233TXEJE3 SHP\/VPP\/R5 Jasmine\/0.8 Qtv5.3 SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S5380D\/S5380FXXKL3; U; Bada\/2.0; ru-ru) AppleWebKit\/534.20 (KHTML, like Gecko) Dolfin\/3.0 Mobile HVGA SMM-MMS\/1.2.0 OPN-B",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-GT-C3312\/1.0 NetFront\/4.2 Profile\/MIDP-2.0 Configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 1.5; de-de; Galaxy Build\/CUPCAKE) AppleWebKit\/528.5 (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "SAMSUNG-GT-S3650\/S3650XEII3 SHP\/VPP\/R5 Jasmine\/1.0 Nextreaming SMM-MMS\/1.2.0 profile\/MIDP-2.1 configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "JUC (Linux; U; 2.3.6; zh-cn; GT-S5360; 240*320) UCWEB7.9.0.94\/140\/352",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S5250\/S5250XEKJ3; U; Bada\/1.0; ru-ru) AppleWebKit\/533.1 (KHTML, like Gecko) Dolfin\/2.0 Mobile WQVGA SMM-MMS\/1.2.0 NexPlayer\/3.0 profile\/MIDP-2.1 configuration\/CLDC-1.1 OPN-B",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/4.0 (compatible; MSIE 7.0; Windows Phone OS 7.0; Trident\/3.1; IEMobile\/7.0; SAMSUNG; SGH-i917)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (SAMSUNG; SAMSUNG-GT-S8530\/S8530XXJKA; U; Bada\/1.2; cs-cz) AppleWebKit\/533.1 (KHTML, like Gecko) Dolfin\/2.2 Mobile WVGA SMM-MMS\/1.2.0 OPN-B",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 1.6; ru-ru; Galaxy Build\/Donut) AppleWebKit\/528.5+ (KHTML, like Gecko) Version\/3.1.2 Mobile Safari\/525.20.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; ru-ru; GT-I5500 Build\/ERE27) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; en-us; GALAXY_Tab Build\/MASTER) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; ja-jp; SC-01C Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2; fr-fr; GT-I9000 Build\/FROYO) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.2.1; zh-cn; SCH-i909 Build\/FROYO) UC AppleWebKit\/534.31 (KHTML, like Gecko) Mobile Safari\/534.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; ja-jp; SC-01C Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-gb; GT-P1000 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; el-gr; GT-I9001 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-ca; SGH-I896 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; es-us; GT-S5660L Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1 MicroMessenger\/4.5.1.261",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "MicroMessenger": "4.5.1.261"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5660 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6102 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; pt-br; GT-S5367 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; fr-fr; GT-S5839i Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S7500 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5830 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; es-us; GT-B5510L Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; pl-pl; GT-I9001-ORANGE\/I9001BVKPC Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-I8150 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; nl-nl; GT-I9070 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-gb; GT-S5360 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; es-us; GT-S6102B Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; en-us; GT-S5830i Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-I8160 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-S6802 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; ru-ru; GT-S5830 Build\/GRWK74; LeWa_ROM_Cooper_12.09.21) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.6; ru-ru; GT-N7000 Build\/GINGERBREAD) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.0.1; en-us; GT-P7100 Build\/HRI83) AppleWebkit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; he-il; GT-P7300 Build\/HTJ85B) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; en-gb; GT-P6200 Build\/HTJ85B) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0 Safari\/534.13",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-gb; GT-I9100 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-us; GT-I9100G Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; nl-nl; GT-P5100 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android-4.0.3; en-us; Galaxy Nexus Build\/IML74K) AppleWebKit\/535.7 (KHTML, like Gecko) CrMo\/16.0.912.75 Mobile Safari\/535.7",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Chrome": "16.0.912.75"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; SGH-T989 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Chrome": "18.0.1025.166"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P5100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; GT-I9300 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; SPH-D710 Build\/IMM76I) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-cn; GT-I9300 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-I9300-ORANGE\/I9300BVBLG2 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; th-th; GT-I9300T Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-I9100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us ; GT-I9100 Build\/IMM76D) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1\/UCBrowser\/8.4.1.204\/145\/355",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; GT-N7000 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; th-th; GT-P6800 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; SAMSUNG-SGH-I747 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; GT-P5110 Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; GT-P5110 Build\/IMM76D) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; zh-cn; SAMSUNG-GT-S7568_TD\/1.0 Android\/4.0.4 Release\/07.15.2012 Browser\/AppleWebKit534.30 Build\/IMM76D) ApplelWebkit\/534.30 (KHTML,like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Android": "4.0.4"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-P3100 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; tr-tr; GT-P3105 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-ca; GT-N8010 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; ru-ru; GT-S7562 Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; GT-N7100 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; GT-N7100 Build\/JZO54K) AppleWebKit\/537.22 (KHTML, like Gecko) Chrome\/25.0.1364.123 Mobile Safari\/537.22 OPR\/14.0.1025.52315",
+ "mobile": true,
+ "tablet": false,
+ "version": {
+ "Build": "JZO54K",
+ "Webkit": "537.22",
+ "Opera": "14.0.1025.52315"
+ }
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; zh-hk; GT-N7105 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; ru-ru; GT-N8000 Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.1; SGH-i747M Build\/JRO03L) AppleWebKit\/535.19(KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-gb; Galaxy Nexus - 4.1.1 - with Google Apps - API 16 - 720x1280 Build\/JRO03S) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; GT-I8262 Build\/JZO54K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; it-it; Galaxy Nexus Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-I777 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; GT-S7710 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; GT-I9082 Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGH-T999L Build\/JZO54K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; GT-P5210 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, Like Gecko) Chrome\/27.0.1453.90 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; en-us; SAMSUNG GT-I9200 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Version\/1.0 Chrome\/18.0.1025.308 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; zh-cn; SCH-I959 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Version\/1.0 Chrome\/18.0.1025.308 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; nl-nl; SM-T310 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; en-us; SAMSUNG SM-P600 Build\/JSS15J) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; en-gb; GT-N5100 Build\/JDQ39) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; en-us; SAMSUNG SM-T530NU Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SM-T800 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; fr-fr; SAMSUNG SM-T800 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SM-T700 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.517 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; CETUS)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Focus I917 By TC)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Focus i917)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; FOCUS S)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-I8350)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-i8700)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; GT-S7530)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; Hljchm's Wp)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; I917)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA 7)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7 By MWP_HS)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; OMNIA7; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i677)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917.)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i917R)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SGH-i937)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG; SMG-917R)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG_blocked_blocked_blocked; OMNIA7; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SAMSUNG_blocked_blocked_blocked_blocked; OMNIA7; Orange)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; SUMSUNG; OMNIA 7)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; ARM; Trident\/7.0; Touch; rv:11.0; WPDesktop; SAMSUNG; GT-I8750) like Gecko",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; ARM; Trident\/7.0; Touch; rv:11.0; WPDesktop; GT-I8750) like Gecko",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; en-gb; SAMSUNG GT-I9205 Build\/JDQ39) AppleWebKit\/535.19 (KHTML, like Gecko) Version\/1.0 Chrome\/18.0.1025.308 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; GT-P7510 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; SHV-E160K\/VI10.1802 Build\/IMM76D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.0.2; SM-T805 Build\/LRX22G) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/43.0.2357.92 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; SM-T116NQ Build\/KTU84P) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/43.0.2357.92 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 5.0.2; SM-G9250 Build\/LRX22G; wv) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/43.0.2357.121 Mobile Safari\/537.36 [FB_IAB\/FB4A;FBAV\/35.0.0.48.273;]",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SM-T705Y Build\/KOT49H) AppleWebKit\/537.36(KHTML, like Gecko) Chrome\/42.0.2311.111 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; GT-I9505 Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/1.5 Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Samsung",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SM-T705 Build\/KOT49H) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/41.0.2272.45 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "SonyEricssonK800i\/R1AA Browser\/NetFront\/3.3 Profile\/MIDP-2.0 Configuration\/CLDC-1.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; es-ar; SonyEricssonE15a Build\/2.0.1.A.0.47) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.1-update1; pt-br; SonyEricssonU20a Build\/2.1.1.A.0.6) AppleWebKit\/530.17 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/530.17",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.3; en-au; SonyEricssonX10i Build\/3.0.1.G.0.75) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; ru-ru; SonyEricssonST18i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; hr-hr; SonyEricssonST15i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.4; sk-sk; SonyEricssonLT15i Build\/4.0.2.A.0.62) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; th-th; SonyEricssonST27i Build\/6.0.B.3.184) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 2.3.7; de-de; SonyEricssonST25i Build\/6.0.B.3.184) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; pt-br; Xperia Tablet S Build\/TID0092) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.0.3",
+ "Build": "TID0092",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; LT18i Build\/4.1.A.0.562) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; Sony Tablet S Build\/TISU0R0110) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; es-es; Sony Tablet S Build\/TISU0143) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-gb; SonyEricssonLT18i Build\/4.1.B.0.587) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; fr-ch; SonyEricssonSK17i Build\/4.1.B.0.587) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; SonyEricssonLT26i Build\/6.1.A.2.45) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; LT22i Build\/6.1.B.0.544) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; vi-vn; SonyEricssonLT22i Build\/6.1.B.0.544) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; ST23i Build\/11.0.A.5.5) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; ST23i Build\/11.0.A.2.10) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Mobile Safari\/535.19",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.4; LT28h Build\/6.1.E.3.7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; SGPT13 Build\/TJDS0170) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; ja-jp; SonySO-03E Build\/10.1.E.0.265) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.1.2",
+ "Build": "10.1.E.0.265",
+ "Webkit": "534.30",
+ "Safari": "4.0"
+ }
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; LT26w Build\/6.2.B.1.96) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/29.0.1547.72 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; SGP321 Build\/10.3.1.A.0.33) AppleWebKit\/537.31 (KHTML, like Gecko) Chrome\/26.0.1410.58 Safari\/537.31",
+ "mobile": true,
+ "tablet": true,
+ "version": {
+ "Android": "4.2.2",
+ "Build": "10.3.1.A.0.33",
+ "Webkit": "537.31",
+ "Chrome": "26.0.1410.58"
+ }
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; C5303 Build\/12.1.A.1.205) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/36.0.1985.135 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; XL39h Build\/14.2.A.1.136) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; sv-se; C5503 Build\/10.1.1.A.1.273) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; C5502 Build\/10.1.1.A.1.310) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-cn; SonyL39t Build\/14.1.M.0.202) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; zh-cn; L39u Build\/14.1.n.0.63) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-tw; M35c Build\/12.0.B.5.37) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; M35c Build\/12.0.B.2.42) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.90 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; zh-CN; M35t Build\/12.0.C.2.42) AppleWebKit\/534.31 (KHTML, like Gecko) UCBrowser\/9.3.2.349 U3\/0.8.0 Mobile Safari\/534.31",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; D6502 Build\/17.1.A.2.69) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; D6503 Build\/17.1.A.0.504) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; D6543 Build\/17.1.A.2.55) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2004 Build\/20.0.A.0.29) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-gb; D2005 Build\/20.0.A.1.12) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2104 Build\/20.0.B.0.84) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2105 Build\/20.0.B.0.74) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.170 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; pt-br; D2114 Build\/20.0.B.0.85) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2302 Build\/18.0.B.1.23) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; S50h Build\/18.0.b.1.23) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.6.3.413 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2303 Build\/18.0.C.1.13) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2305 Build\/18.0.A.1.30) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.138 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D2306 Build\/18.0.C.1.7) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D5303 Build\/19.0.1.A.0.207) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; D5306 Build\/19.1.A.0.264) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-CN; XM50h Build\/19.0.D.0.269) AppleWebKit\/533.1 (KHTML, like Gecko) Version\/4.0 UCBrowser\/9.7.6.428 U3\/0.8.0 Mobile Safari\/533.1",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; XM50t Build\/19.0.C.2.59) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; D5322 Build\/19.0.D.0.253) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.131",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; zh-cn; M51w Build\/14.2.A.1.146) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; M51w Build\/14.2.A.1.146) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/33.0.1750.136 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.1; D5102 Build\/18.2.A.0.9) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.1; D5103 Build\/18.1.A.0.11) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.92 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.1; D5106 Build\/18.1.A.0.11) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.3; en-gb; C6902 Build\/14.2.A.1.136) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30 GSA\/3.2.17.1009776.arm",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; es-es; C6943 Build\/14.1.G.2.257) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; C6943 Build\/14.3.A.0.681) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; SGP412 Build\/14.1.B.3.320) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1; en-us; SonySGP321 Build\/10.2.C.0.143) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.1.2; SGP351 Build\/10.1.1.A.1.307) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.3; SGP341 Build\/10.4.B.0.569) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SGP511 Build\/17.1.A.2.36) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SGP512 Build\/17.1.A.2.36) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.122 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; fr-ch; SGP311 Build\/10.1.C.0.344) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; SGP312 Build\/10.1.C.0.344) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; de-de; SGP521 Build\/17.1.A.2.69) AppleWebKit\/537.16 (KHTML, like Gecko) Version\/4.0 Safari\/537.16",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.4.2; zh-cn; SGP541 Build\/17.1.A.2.36) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; SGP551 Build\/17.1.A.2.72) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/34.0.1847.114 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "SonyEricssonU5i\/R2CA; Mozilla\/5.0 (SymbianOS\/9.4; U; Series60\/5.0 Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 Safari\/525",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "SonyEricssonU5i\/R2AA; Mozilla\/5.0 (SymbianOS\/9.4; U; Series60\/5.0 Profile\/MIDP-2.1 Configuration\/CLDC-1.1) AppleWebKit\/525 (KHTML, like Gecko) Version\/3.0 Safari\/525",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/4.0 (PDA; PalmOS\/sony\/model prmr\/Revision:1.1.54 (en)) NetFront\/3.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Opera\/9.80 (Linux mips; U; InettvBrowser\/2.2 (00014A;SonyDTV115;0002;0100) KDL40EX720; CC\/BEL; en) Presto\/2.7.61 Version\/11.00",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Opera\/9.80 (Linux armv7l; HbbTV\/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto\/2.12.362 Version\/12.11",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; es-ve; SonyST21a2 Build\/11.0.A.6.5) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.2; D2533 Build\/19.2.A.0.391) AppleWebKit\/537.36 (KHTML, like Gecko) Version\/4.0 Chrome\/30.0.0.0 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.4.4; Xperia SP Build\/KTU84Q) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/41.0.2272.96 Mobile Safari\/537.36",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Sony",
+ "user_agent": "Mozilla \/ 5.0 (Linux; Android 5.0.2; SOT31 Build \/ 28.0.D.6.71) AppleWebKit \/ 537.36 (KHTML, like Gecko) Chrome \/ 39.0.2171.93 Safari \/ 537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Avant",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64; Trident\/7.0; Avant Browser; rv:11.0) like Gecko",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Avant",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64; Avant TriCore) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/30.0.1599.101 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Avant",
+ "user_agent": "Mozilla\/5.0 (Windows NT 5.1; rv:27.0; Avant TriCore) Gecko\/20100101 Firefox\/27.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (Nintendo WiiU) AppleWebKit\/536.28 (KHTML, like Gecko) NX\/3.0.3.12.14 NintendoBrowser\/3.1.1.9577.EU",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (Nintendo WiiU) AppleWebKit\/534.52 (KHTML, like Gecko) NX\/{Version No} NintendoBrowser\/{Version No}.US",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (Nintendo 3DS; U; ; en) Version\/1.7567.US",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (Nintendo 3DS; U; ; en) Version\/1.7498.US",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (PLAYSTATION 3 4.21) AppleWebKit\/531.22.8 (KHTML, like Gecko)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Console",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident\/5.0; Xbox)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident\/4.0; SV1; [eburo v4.0]; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; InfoPath.3; .NET4.0C; .NET4.0E)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10) AppleWebKit\/600.1.25 (KHTML, like Gecko) Version\/8.0 Safari\/600.1.25",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/38.0.2125.111 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1) AppleWebKit\/537.36 (KHTML, like Gecko) Iron\/37.0.2000.0 Chrome\/37.0.2000.0 Safari\/537.36",
+ "mobile": false,
+ "tablet": false,
+ "version": {
+ "Iron": "37.0.2000.0"
+ }
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (X11; Linux i686) AppleWebKit\/537.36 (KHTML, like Gecko) Ubuntu Chromium\/32.0.1700.102 Chrome\/32.0.1700.102 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko\/20100101 Firefox\/24.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko\/20100101 Firefox\/18.0 AlexaToolbar\/psPCtGhf-2.2",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko\/20100101 Firefox\/22.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (X11; Linux ppc; rv:17.0) Gecko\/20130626 Firefox\/17.0 Iceweasel\/17.0.7",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (X11; Linux) AppleWebKit\/535.22+ Midori\/0.4",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Macintosh; U; Intel Mac OS X; en-us) AppleWebKit\/535+ (KHTML, like Gecko) Version\/5.0 Safari\/535.20+ Midori\/0.4",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.20 Safari\/537.36 OPR\/15.0.1147.18 (Edition Next)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.2) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.94 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 5.2; WOW64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/27.0.1453.94 Safari\/537.36",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 5.2; WOW64; rv:21.0) Gecko\/20100101 Firefox\/21.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Opera\/9.80 (Windows NT 5.2; WOW64) Presto\/2.12.388 Version\/12.14",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:19.0) Gecko\/20100101 Firefox\/19.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (X11; FreeBSD amd64; rv:14.0) Gecko\/20100101 Firefox\/14.0.1",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/4.0 (compatible; MSIE 7.0; Windows NT 6.2; Win64; x64; Trident\/6.0; Touch; .NET4.0E; .NET4.0C; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Tablet PC 2.0; MASMJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; MANMJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident\/6.0; MASMJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident\/6.0; Touch; MASMJS)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Opera\/9.80 (Windows NT 6.2; WOW64; MRA 8.0 (build 5784)) Presto\/2.12.388 Version\/12.11",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident\/6.0)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.3; Trident\/7.0; rv 11.0) like Gecko",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.3; WOW64; Trident\/7.0; Touch; rv:11.0) like Gecko",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Mozilla\/5.0 (Unknown; Linux armv7l) AppleWebKit\/537.1+ (KHTML, like Gecko) Safari\/537.1+ HbbTV\/1.1.1 ( ;LGE ;NetCast 4.0 ;03.20.30 ;1.0M ;)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "HbbTV\/1.1.1 (;Panasonic;VIERA 2012;1.261;0071-3103 2000-0000;)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Other",
+ "user_agent": "Opera\/9.80 (Linux armv7l; HbbTV\/1.1.1 (; Sony; KDL32W650A; PKG3.211EUA; 2013;); ) Presto\/2.12.362 Version\/12.11",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Jolla; Sailfish; Mobile; rv:20.0) Gecko\/20.0 Firefox\/20.0 Sailfish Browser\/1.0 like Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Mobile; rv:26.0) Gecko\/26.0 Firefox\/26.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Tablet; rv:26.0) Gecko\/26.0 Firefox\/26.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; CT1020W Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/28.0.1500.94 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.2.2; M6pro Build\/JDQ39) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/35.0.1916.141 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "MobileSafari\/9537.53 CFNetwork\/672.1.13 Darwin\/13.1.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Appcelerator Titanium\/3.2.2.GA (iPod touch\/6.1.6; iPhone OS; en_US;)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera Coast\/3.0.3.78307 CFNetwork\/672.1.15 Darwin\/14.0.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; ALUMIUM10 Build\/IML74K) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/32.0.1700.99 Safari\/537.36",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.1; en-us; JY-G3 Build\/JOP40D) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; hu-hu; M758A Build\/JRO03C) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; en-us; EVOTAB Build\/IMM76I) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Java\/1.6.0_22",
+ "mobile": false,
+ "tablet": false,
+ "version": {
+ "Java": "1.6.0_22"
+ }
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Series 60; Opera Mini\/6.5.29260\/29.3417; U; ru) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Android; Opera Mini\/6.5.27452\/29.3417; U; ru) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (iPhone; Opera Mini\/7.1.32694\/27.1407; U; en) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1; WOW64) AppleWebKit\/537.17 (KHTML, like Gecko) Chrome\/24.0.1312.60 Safari\/537.17 OPR\/14.0.1025.52315",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (iPhone; U; CPU iPhone OS 4_3_2 like Mac OS X; en-us) AppleWebKit\/533.17.9 (KHTML, like Gecko) Version\/5.0.2 Mobile\/8H7 Safari\/6533.18.5",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Android 2.3.7; Linux; Opera Mobi\/46154) Presto\/2.11.355 Version\/12.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (iPad; CPU OS 6_1 like Mac OS X) AppleWebKit\/536.26 (KHTML, like Gecko) Version\/6.0 Mobile\/10B141 Safari\/8536.25",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.2; en-us; sdk Build\/MASTER) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2; en-us; sdk Build\/JB_MR1) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Android; Mobile; rv:18.0) Gecko\/18.0 Firefox\/18.0",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Windows NT 6.1) AppleWebKit\/535.12 (KHTML, like Gecko) Maxthon\/3.0 Chrome\/18.0.966.0 Safari\/535.12",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Windows NT 5.1; U; Edition Yx; ru) Presto\/2.10.289 Version\/12.02",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Windows Phone 6.5.3.5)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "PalmCentro\/v0001 Mozilla\/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource\/Palm-D061; Blazer\/4.5) 16;320x320",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; Microsoft; XDeviceEmulator)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident\/5.0; IEMobile\/9.0; MAL; N880E; China Telecom)",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Series 60; Opera Mini\/7.0.29482\/28.2859; U; ru) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (S60; SymbOS; Opera Mobi\/SYB-1202242143; U; en-GB) Presto\/2.10.254 Version\/12.00",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.3; en-au; 97D Build\/IML74K) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Android; Opera Mini\/7.0.29952\/28.2647; U; ru) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Android; Opera Mini\/6.1.25375\/28.2555; U; en) Presto\/2.8.119 Version\/11.10",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Mac OS X; Opera Tablet\/35779; U; en) Presto\/2.10.254 Version\/12.00",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Android; Tablet; rv:10.0.4) Gecko\/10.0.4 Firefox\/10.0.4 Fennec\/10.0.4",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Android; Tablet; rv:18.0) Gecko\/18.0 Firefox\/18.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Linux armv7l; Maemo; Opera Mobi\/14; U; en) Presto\/2.9.201 Version\/11.50",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Opera\/9.80 (Android 2.2.1; Linux; Opera Mobi\/ADR-1207201819; U; en) Presto\/2.10.254 Version\/12.00",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; en-us; sdk Build\/JRO03E) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Mobile Safari\/534.30",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; Endeavour 1010 Build\/ONDA_MID) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de; Tablet-PC-4 Build\/ICS.g08refem618.20121102) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Generic",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.2.2; de-de; Tagi Tab S10 Build\/8089) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "Mozilla\/5.0 (compatible; Googlebot\/2.1; +http:\/\/www.google.com\/bot.html)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "grub-client-1.5.3; (grub-client-1.5.3; Crawl your own stuff with http:\/\/grub.org)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "Googlebot-Image\/1.0",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "Python-urllib\/2.5",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "facebookexternalhit\/1.0 (+http:\/\/www.facebook.com\/externalhit_uatext.php)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "AdsBot-Google (+http:\/\/www.google.com\/adsbot.html)",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "AdsBot-Google-Mobile (+http:\/\/www.google.com\/mobile\/adsbot.html) Mozilla (iPhone; U; CPU iPhone OS 3 0 like Mac OS X) AppleWebKit (KHTML, like Gecko) Mobile Safari",
+ "mobile": true,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "Mozilla\/5.0 (X11; U; Linux x86_64; en-US) AppleWebKit\/534.16 (KHTML, like Gecko, Google Keyword Suggestion) Chrome\/10.0.648.127 Safari\/534.16",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Bot",
+ "user_agent": "Facebot",
+ "mobile": false,
+ "tablet": false
+ },
+ {
+ "vendor": "Vodafone",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 3.2; hu-hu; SmartTab10-MSM8260-V02d-Dec022011-Vodafone-HU) AppleWebKit\/534.13 (KHTML, like Gecko) Version\/4.0",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Vodafone",
+ "user_agent": "Mozilla\/5.0 (Linux; Android 4.0.3; SmartTabII10 Build\/IML74K) AppleWebKit\/535.19 (KHTML, like Gecko) Chrome\/18.0.1025.166 Safari\/535.19",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Vodafone",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.1.1; fr-fr; SmartTAB 1002 Build\/JRO03H) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ },
+ {
+ "vendor": "Vodafone",
+ "user_agent": "Mozilla\/5.0 (Linux; U; Android 4.0.4; de-de, SmartTabII7 Build\/A2107A_A404_107_055_130124_VODA) AppleWebKit\/534.30 (KHTML, like Gecko) Version\/4.0 Safari\/534.30",
+ "mobile": true,
+ "tablet": true
+ }
+ ]
+}
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/.gitignore b/htdocs/includes/phpoffice/phpexcel/Examples/.gitignore
deleted file mode 100644
index 1888a98fa19..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-
-*.xls
-*.xlsx
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01pharSimple.php b/htdocs/includes/phpoffice/phpexcel/Examples/01pharSimple.php
deleted file mode 100644
index a8804770129..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01pharSimple.php
+++ /dev/null
@@ -1,112 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once '../Build/PHPExcel.phar';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel5 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-ods.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-ods.php
deleted file mode 100644
index 574fb0113eb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-ods.php
+++ /dev/null
@@ -1,89 +0,0 @@
-getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-// Rename worksheet
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Redirect output to a client’s web browser (OpenDocument)
-header('Content-Type: application/vnd.oasis.opendocument.spreadsheet');
-header('Content-Disposition: attachment;filename="01simple.ods"');
-header('Cache-Control: max-age=0');
-// If you're serving to IE 9, then the following may be needed
-header('Cache-Control: max-age=1');
-
-// If you're serving to IE over SSL, then the following may be needed
-header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
-header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
-header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
-header ('Pragma: public'); // HTTP/1.0
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'OpenDocument');
-$objWriter->save('php://output');
-exit;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-pdf.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-pdf.php
deleted file mode 100644
index 287b0e891bd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-pdf.php
+++ /dev/null
@@ -1,104 +0,0 @@
-getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PDF Test Document")
- ->setSubject("PDF Test Document")
- ->setDescription("Test document for PDF, generated using PHP classes.")
- ->setKeywords("pdf php")
- ->setCategory("Test result file");
-
-
-// Add some data
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-// Rename worksheet
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-$objPHPExcel->getActiveSheet()->setShowGridLines(false);
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-if (!PHPExcel_Settings::setPdfRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- ' ' .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-// Redirect output to a client’s web browser (PDF)
-header('Content-Type: application/pdf');
-header('Content-Disposition: attachment;filename="01simple.pdf"');
-header('Cache-Control: max-age=0');
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
-$objWriter->save('php://output');
-exit;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xls.php
deleted file mode 100644
index 60fc901bf8d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xls.php
+++ /dev/null
@@ -1,89 +0,0 @@
-getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-// Rename worksheet
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Redirect output to a client’s web browser (Excel5)
-header('Content-Type: application/vnd.ms-excel');
-header('Content-Disposition: attachment;filename="01simple.xls"');
-header('Cache-Control: max-age=0');
-// If you're serving to IE 9, then the following may be needed
-header('Cache-Control: max-age=1');
-
-// If you're serving to IE over SSL, then the following may be needed
-header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
-header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
-header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
-header ('Pragma: public'); // HTTP/1.0
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save('php://output');
-exit;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xlsx.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xlsx.php
deleted file mode 100644
index 538888ea735..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simple-download-xlsx.php
+++ /dev/null
@@ -1,89 +0,0 @@
-getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-// Rename worksheet
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Redirect output to a client’s web browser (Excel2007)
-header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
-header('Content-Disposition: attachment;filename="01simple.xlsx"');
-header('Cache-Control: max-age=0');
-// If you're serving to IE 9, then the following may be needed
-header('Cache-Control: max-age=1');
-
-// If you're serving to IE over SSL, then the following may be needed
-header ('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
-header ('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT'); // always modified
-header ('Cache-Control: cache, must-revalidate'); // HTTP/1.1
-header ('Pragma: public'); // HTTP/1.0
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save('php://output');
-exit;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simple.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simple.php
deleted file mode 100644
index 965fefafebc..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simple.php
+++ /dev/null
@@ -1,118 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld");
-$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
-$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/01simplePCLZip.php b/htdocs/includes/phpoffice/phpexcel/Examples/01simplePCLZip.php
deleted file mode 100644
index 0b7a46c17d5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/01simplePCLZip.php
+++ /dev/null
@@ -1,106 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld");
-$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
-$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-// Use PCLZip rather than ZipArchive to create the Excel2007 OfficeOpenXML file
-PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/02types-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/02types-xls.php
deleted file mode 100644
index cc1dc3744f9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/02types-xls.php
+++ /dev/null
@@ -1,183 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-// Set default font
-echo date('H:i:s') , " Set default font" , EOL;
-$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial')
- ->setSize(10);
-
-// Add some data, resembling some different data types
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String')
- ->setCellValue('B1', 'Simple')
- ->setCellValue('C1', 'PHPExcel');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A2', 'String')
- ->setCellValue('B2', 'Symbols')
- ->setCellValue('C2', '!+&=()~§±æþ');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A3', 'String')
- ->setCellValue('B3', 'UTF-8')
- ->setCellValue('C3', 'Создать MS Excel Книги из PHP скриптов');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Number')
- ->setCellValue('B4', 'Integer')
- ->setCellValue('C4', 12);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Number')
- ->setCellValue('B5', 'Float')
- ->setCellValue('C5', 34.56);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A6', 'Number')
- ->setCellValue('B6', 'Negative')
- ->setCellValue('C6', -7.89);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Boolean')
- ->setCellValue('B7', 'True')
- ->setCellValue('C7', true);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8', 'Boolean')
- ->setCellValue('B8', 'False')
- ->setCellValue('C8', false);
-
-$dateTimeNow = time();
-$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Date/Time')
- ->setCellValue('B9', 'Date')
- ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C9')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Date/Time')
- ->setCellValue('B10', 'Time')
- ->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A11', 'Date/Time')
- ->setCellValue('B11', 'Date and Time')
- ->setCellValue('C11', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C11')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A12', 'NULL')
- ->setCellValue('C12', NULL);
-
-$objRichText = new PHPExcel_RichText();
-$objRichText->createText('你好 ');
-$objPayable = $objRichText->createTextRun('你 好 吗?');
-$objPayable->getFont()->setBold(true);
-$objPayable->getFont()->setItalic(true);
-$objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
-
-$objRichText->createText(', unless specified otherwise on the invoice.');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A13', 'Rich Text')
- ->setCellValue('C13', $objRichText);
-
-
-$objRichText2 = new PHPExcel_RichText();
-$objRichText2->createText("black text\n");
-
-$objRed = $objRichText2->createTextRun("red text");
-$objRed->getFont()->setColor( new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_RED ) );
-
-$objPHPExcel->getActiveSheet()->getCell("C14")->setValue($objRichText2);
-$objPHPExcel->getActiveSheet()->getStyle("C14")->getAlignment()->setWrapText(true);
-
-
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Datatypes');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Reload workbook from saved file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcel = PHPExcel_IOFactory::load(str_replace('.php', '.xls', __FILE__));
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to reload Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-var_dump($objPHPExcel->getActiveSheet()->toArray());
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done testing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/02types.php b/htdocs/includes/phpoffice/phpexcel/Examples/02types.php
deleted file mode 100644
index ff5421e4bba..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/02types.php
+++ /dev/null
@@ -1,183 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-// Set default font
-echo date('H:i:s') , " Set default font" , EOL;
-$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial')
- ->setSize(10);
-
-// Add some data, resembling some different data types
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String')
- ->setCellValue('B1', 'Simple')
- ->setCellValue('C1', 'PHPExcel');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A2', 'String')
- ->setCellValue('B2', 'Symbols')
- ->setCellValue('C2', '!+&=()~§±æþ');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A3', 'String')
- ->setCellValue('B3', 'UTF-8')
- ->setCellValue('C3', 'Создать MS Excel Книги из PHP скриптов');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Number')
- ->setCellValue('B4', 'Integer')
- ->setCellValue('C4', 12);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Number')
- ->setCellValue('B5', 'Float')
- ->setCellValue('C5', 34.56);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A6', 'Number')
- ->setCellValue('B6', 'Negative')
- ->setCellValue('C6', -7.89);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Boolean')
- ->setCellValue('B7', 'True')
- ->setCellValue('C7', true);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8', 'Boolean')
- ->setCellValue('B8', 'False')
- ->setCellValue('C8', false);
-
-$dateTimeNow = time();
-$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Date/Time')
- ->setCellValue('B9', 'Date')
- ->setCellValue('C9', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C9')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Date/Time')
- ->setCellValue('B10', 'Time')
- ->setCellValue('C10', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C10')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_TIME4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A11', 'Date/Time')
- ->setCellValue('B11', 'Date and Time')
- ->setCellValue('C11', PHPExcel_Shared_Date::PHPToExcel( $dateTimeNow ));
-$objPHPExcel->getActiveSheet()->getStyle('C11')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DATETIME);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A12', 'NULL')
- ->setCellValue('C12', NULL);
-
-$objRichText = new PHPExcel_RichText();
-$objRichText->createText('你好 ');
-
-$objPayable = $objRichText->createTextRun('你 好 吗?');
-$objPayable->getFont()->setBold(true);
-$objPayable->getFont()->setItalic(true);
-$objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
-
-$objRichText->createText(', unless specified otherwise on the invoice.');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A13', 'Rich Text')
- ->setCellValue('C13', $objRichText);
-
-
-$objRichText2 = new PHPExcel_RichText();
-$objRichText2->createText("black text\n");
-
-$objRed = $objRichText2->createTextRun("red text");
-$objRed->getFont()->setColor( new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_RED ) );
-
-$objPHPExcel->getActiveSheet()->getCell("C14")->setValue($objRichText2);
-$objPHPExcel->getActiveSheet()->getStyle("C14")->getAlignment()->setWrapText(true);
-
-
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setAutoSize(true);
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Datatypes');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Reload workbook from saved file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcel = PHPExcel_IOFactory::load(str_replace('.php', '.xlsx', __FILE__));
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to reload Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-var_dump($objPHPExcel->getActiveSheet()->toArray());
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done testing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/03formulas.php b/htdocs/includes/phpoffice/phpexcel/Examples/03formulas.php
deleted file mode 100644
index 1396717d79d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/03formulas.php
+++ /dev/null
@@ -1,149 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data, we will use some formulas here
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Sum:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Range #1')
- ->setCellValue('B2', 3)
- ->setCellValue('B3', 7)
- ->setCellValue('B4', 13)
- ->setCellValue('B5', '=SUM(B2:B4)');
-echo date('H:i:s') , " Sum of Range #1 is " ,
- $objPHPExcel->getActiveSheet()->getCell('B5')->getCalculatedValue() , EOL;
-
-$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Range #2')
- ->setCellValue('C2', 5)
- ->setCellValue('C3', 11)
- ->setCellValue('C4', 17)
- ->setCellValue('C5', '=SUM(C2:C4)');
-echo date('H:i:s') , " Sum of Range #2 is " ,
- $objPHPExcel->getActiveSheet()->getCell('C5')->getCalculatedValue() , EOL;
-
-$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Total of both ranges:');
-$objPHPExcel->getActiveSheet()->setCellValue('B7', '=SUM(B5:C5)');
-echo date('H:i:s') , " Sum of both Ranges is " ,
- $objPHPExcel->getActiveSheet()->getCell('B7')->getCalculatedValue() , EOL;
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8', 'Minimum of both ranges:');
-$objPHPExcel->getActiveSheet()->setCellValue('B8', '=MIN(B2:C4)');
-echo date('H:i:s') , " Minimum value in either Range is " ,
- $objPHPExcel->getActiveSheet()->getCell('B8')->getCalculatedValue() , EOL;
-
-$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Maximum of both ranges:');
-$objPHPExcel->getActiveSheet()->setCellValue('B9', '=MAX(B2:C4)');
-echo date('H:i:s') , " Maximum value in either Range is " ,
- $objPHPExcel->getActiveSheet()->getCell('B9')->getCalculatedValue() , EOL;
-
-$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Average of both ranges:');
-$objPHPExcel->getActiveSheet()->setCellValue('B10', '=AVERAGE(B2:C4)');
-echo date('H:i:s') , " Average value of both Ranges is " ,
- $objPHPExcel->getActiveSheet()->getCell('B10')->getCalculatedValue() , EOL;
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Formulas');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-
-//
-// If we set Pre Calculated Formulas to true then PHPExcel will calculate all formulae in the
-// workbook before saving. This adds time and memory overhead, and can cause some problems with formulae
-// using functions or features (such as array formulae) that aren't yet supported by the calculation engine
-// If the value is false (the default) for the Excel2007 Writer, then MS Excel (or the application used to
-// open the file) will need to recalculate values itself to guarantee that the correct results are available.
-//
-//$objWriter->setPreCalculateFormulas(true);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/04printing.php b/htdocs/includes/phpoffice/phpexcel/Examples/04printing.php
deleted file mode 100644
index 14358b05e74..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/04printing.php
+++ /dev/null
@@ -1,125 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data, we will use printing features
-echo date('H:i:s') , " Add some data" , EOL;
-for ($i = 1; $i < 200; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, $i);
- $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, 'Test value');
-}
-
-// Set header and footer. When no different headers for odd/even are used, odd header is assumed.
-echo date('H:i:s') , " Set header/footer" , EOL;
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&G&C&HPlease treat this document as confidential!');
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
-
-// Add a drawing to the header
-echo date('H:i:s') , " Add a drawing to the header" , EOL;
-$objDrawing = new PHPExcel_Worksheet_HeaderFooterDrawing();
-$objDrawing->setName('PHPExcel logo');
-$objDrawing->setPath('./images/phpexcel_logo.gif');
-$objDrawing->setHeight(36);
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->addImage($objDrawing, PHPExcel_Worksheet_HeaderFooter::IMAGE_HEADER_LEFT);
-
-// Set page orientation and size
-echo date('H:i:s') , " Set page orientation and size" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
-$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Printing');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.inc.php b/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.inc.php
deleted file mode 100644
index b543ca46bb7..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.inc.php
+++ /dev/null
@@ -1,394 +0,0 @@
-getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet, representing sales data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Invoice');
-$objPHPExcel->getActiveSheet()->setCellValue('D1', PHPExcel_Shared_Date::PHPToExcel( gmmktime(0,0,0,date('m'),date('d'),date('Y')) ));
-$objPHPExcel->getActiveSheet()->getStyle('D1')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15);
-$objPHPExcel->getActiveSheet()->setCellValue('E1', '#12566');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A3', 'Product Id');
-$objPHPExcel->getActiveSheet()->setCellValue('B3', 'Description');
-$objPHPExcel->getActiveSheet()->setCellValue('C3', 'Price');
-$objPHPExcel->getActiveSheet()->setCellValue('D3', 'Amount');
-$objPHPExcel->getActiveSheet()->setCellValue('E3', 'Total');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A4', '1001');
-$objPHPExcel->getActiveSheet()->setCellValue('B4', 'PHP for dummies');
-$objPHPExcel->getActiveSheet()->setCellValue('C4', '20');
-$objPHPExcel->getActiveSheet()->setCellValue('D4', '1');
-$objPHPExcel->getActiveSheet()->setCellValue('E4', '=IF(D4<>"",C4*D4,"")');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A5', '1012');
-$objPHPExcel->getActiveSheet()->setCellValue('B5', 'OpenXML for dummies');
-$objPHPExcel->getActiveSheet()->setCellValue('C5', '22');
-$objPHPExcel->getActiveSheet()->setCellValue('D5', '2');
-$objPHPExcel->getActiveSheet()->setCellValue('E5', '=IF(D5<>"",C5*D5,"")');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E6', '=IF(D6<>"",C6*D6,"")');
-$objPHPExcel->getActiveSheet()->setCellValue('E7', '=IF(D7<>"",C7*D7,"")');
-$objPHPExcel->getActiveSheet()->setCellValue('E8', '=IF(D8<>"",C8*D8,"")');
-$objPHPExcel->getActiveSheet()->setCellValue('E9', '=IF(D9<>"",C9*D9,"")');
-
-$objPHPExcel->getActiveSheet()->setCellValue('D11', 'Total excl.:');
-$objPHPExcel->getActiveSheet()->setCellValue('E11', '=SUM(E4:E9)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('D12', 'VAT:');
-$objPHPExcel->getActiveSheet()->setCellValue('E12', '=E11*0.21');
-
-$objPHPExcel->getActiveSheet()->setCellValue('D13', 'Total incl.:');
-$objPHPExcel->getActiveSheet()->setCellValue('E13', '=E11+E12');
-
-// Add comment
-echo date('H:i:s') , " Add comments" , EOL;
-
-$objPHPExcel->getActiveSheet()->getComment('E11')->setAuthor('PHPExcel');
-$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('PHPExcel:');
-$objCommentRichText->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun("\r\n");
-$objPHPExcel->getActiveSheet()->getComment('E11')->getText()->createTextRun('Total amount on the current invoice, excluding VAT.');
-
-$objPHPExcel->getActiveSheet()->getComment('E12')->setAuthor('PHPExcel');
-$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E12')->getText()->createTextRun('PHPExcel:');
-$objCommentRichText->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getComment('E12')->getText()->createTextRun("\r\n");
-$objPHPExcel->getActiveSheet()->getComment('E12')->getText()->createTextRun('Total amount of VAT on the current invoice.');
-
-$objPHPExcel->getActiveSheet()->getComment('E13')->setAuthor('PHPExcel');
-$objCommentRichText = $objPHPExcel->getActiveSheet()->getComment('E13')->getText()->createTextRun('PHPExcel:');
-$objCommentRichText->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getComment('E13')->getText()->createTextRun("\r\n");
-$objPHPExcel->getActiveSheet()->getComment('E13')->getText()->createTextRun('Total amount on the current invoice, including VAT.');
-$objPHPExcel->getActiveSheet()->getComment('E13')->setWidth('100pt');
-$objPHPExcel->getActiveSheet()->getComment('E13')->setHeight('100pt');
-$objPHPExcel->getActiveSheet()->getComment('E13')->setMarginLeft('150pt');
-$objPHPExcel->getActiveSheet()->getComment('E13')->getFillColor()->setRGB('EEEEEE');
-
-
-// Add rich-text string
-echo date('H:i:s') , " Add rich-text string" , EOL;
-$objRichText = new PHPExcel_RichText();
-$objRichText->createText('This invoice is ');
-
-$objPayable = $objRichText->createTextRun('payable within thirty days after the end of the month');
-$objPayable->getFont()->setBold(true);
-$objPayable->getFont()->setItalic(true);
-$objPayable->getFont()->setColor( new PHPExcel_Style_Color( PHPExcel_Style_Color::COLOR_DARKGREEN ) );
-
-$objRichText->createText(', unless specified otherwise on the invoice.');
-
-$objPHPExcel->getActiveSheet()->getCell('A18')->setValue($objRichText);
-
-// Merge cells
-echo date('H:i:s') , " Merge cells" , EOL;
-$objPHPExcel->getActiveSheet()->mergeCells('A18:E22');
-$objPHPExcel->getActiveSheet()->mergeCells('A28:B28'); // Just to test...
-$objPHPExcel->getActiveSheet()->unmergeCells('A28:B28'); // Just to test...
-
-// Protect cells
-echo date('H:i:s') , " Protect cells" , EOL;
-$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // Needs to be set to true in order to enable any worksheet protection!
-$objPHPExcel->getActiveSheet()->protectCells('A3:E13', 'PHPExcel');
-
-// Set cell number formats
-echo date('H:i:s') , " Set cell number formats" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('E4:E13')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
-
-// Set column widths
-echo date('H:i:s') , " Set column widths" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setAutoSize(true);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(12);
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth(12);
-
-// Set fonts
-echo date('H:i:s') , " Set fonts" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setName('Candara');
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setSize(20);
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
-
-$objPHPExcel->getActiveSheet()->getStyle('D1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
-$objPHPExcel->getActiveSheet()->getStyle('E1')->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_WHITE);
-
-$objPHPExcel->getActiveSheet()->getStyle('D13')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('E13')->getFont()->setBold(true);
-
-// Set alignments
-echo date('H:i:s') , " Set alignments" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('D11')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
-$objPHPExcel->getActiveSheet()->getStyle('D12')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
-$objPHPExcel->getActiveSheet()->getStyle('D13')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
-
-$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_JUSTIFY);
-$objPHPExcel->getActiveSheet()->getStyle('A18')->getAlignment()->setVertical(PHPExcel_Style_Alignment::VERTICAL_CENTER);
-
-$objPHPExcel->getActiveSheet()->getStyle('B5')->getAlignment()->setShrinkToFit(true);
-
-// Set thin black border outline around column
-echo date('H:i:s') , " Set thin black border outline around column" , EOL;
-$styleThinBlackBorderOutline = array(
- 'borders' => array(
- 'outline' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THIN,
- 'color' => array('argb' => 'FF000000'),
- ),
- ),
-);
-$objPHPExcel->getActiveSheet()->getStyle('A4:E10')->applyFromArray($styleThinBlackBorderOutline);
-
-
-// Set thick brown border outline around "Total"
-echo date('H:i:s') , " Set thick brown border outline around Total" , EOL;
-$styleThickBrownBorderOutline = array(
- 'borders' => array(
- 'outline' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THICK,
- 'color' => array('argb' => 'FF993300'),
- ),
- ),
-);
-$objPHPExcel->getActiveSheet()->getStyle('D13:E13')->applyFromArray($styleThickBrownBorderOutline);
-
-// Set fills
-echo date('H:i:s') , " Set fills" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
-$objPHPExcel->getActiveSheet()->getStyle('A1:E1')->getFill()->getStartColor()->setARGB('FF808080');
-
-// Set style for header row using alternative method
-echo date('H:i:s') , " Set style for header row using alternative method" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A3:E3')->applyFromArray(
- array(
- 'font' => array(
- 'bold' => true
- ),
- 'alignment' => array(
- 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_RIGHT,
- ),
- 'borders' => array(
- 'top' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THIN
- )
- ),
- 'fill' => array(
- 'type' => PHPExcel_Style_Fill::FILL_GRADIENT_LINEAR,
- 'rotation' => 90,
- 'startcolor' => array(
- 'argb' => 'FFA0A0A0'
- ),
- 'endcolor' => array(
- 'argb' => 'FFFFFFFF'
- )
- )
- )
-);
-
-$objPHPExcel->getActiveSheet()->getStyle('A3')->applyFromArray(
- array(
- 'alignment' => array(
- 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
- ),
- 'borders' => array(
- 'left' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THIN
- )
- )
- )
-);
-
-$objPHPExcel->getActiveSheet()->getStyle('B3')->applyFromArray(
- array(
- 'alignment' => array(
- 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_LEFT,
- )
- )
-);
-
-$objPHPExcel->getActiveSheet()->getStyle('E3')->applyFromArray(
- array(
- 'borders' => array(
- 'right' => array(
- 'style' => PHPExcel_Style_Border::BORDER_THIN
- )
- )
- )
-);
-
-// Unprotect a cell
-echo date('H:i:s') , " Unprotect a cell" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('B1')->getProtection()->setLocked(PHPExcel_Style_Protection::PROTECTION_UNPROTECTED);
-
-// Add a hyperlink to the sheet
-echo date('H:i:s') , " Add a hyperlink to an external website" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('E26', 'www.phpexcel.net');
-$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setUrl('http://www.phpexcel.net');
-$objPHPExcel->getActiveSheet()->getCell('E26')->getHyperlink()->setTooltip('Navigate to website');
-$objPHPExcel->getActiveSheet()->getStyle('E26')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
-
-echo date('H:i:s') , " Add a hyperlink to another cell on a different worksheet within the workbook" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('E27', 'Terms and conditions');
-$objPHPExcel->getActiveSheet()->getCell('E27')->getHyperlink()->setUrl("sheet://'Terms and conditions'!A1");
-$objPHPExcel->getActiveSheet()->getCell('E27')->getHyperlink()->setTooltip('Review terms and conditions');
-$objPHPExcel->getActiveSheet()->getStyle('E27')->getAlignment()->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
-
-// Add a drawing to the worksheet
-echo date('H:i:s') , " Add a drawing to the worksheet" , EOL;
-$objDrawing = new PHPExcel_Worksheet_Drawing();
-$objDrawing->setName('Logo');
-$objDrawing->setDescription('Logo');
-$objDrawing->setPath('./images/officelogo.jpg');
-$objDrawing->setHeight(36);
-$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
-
-// Add a drawing to the worksheet
-echo date('H:i:s') , " Add a drawing to the worksheet" , EOL;
-$objDrawing = new PHPExcel_Worksheet_Drawing();
-$objDrawing->setName('Paid');
-$objDrawing->setDescription('Paid');
-$objDrawing->setPath('./images/paid.png');
-$objDrawing->setCoordinates('B15');
-$objDrawing->setOffsetX(110);
-$objDrawing->setRotation(25);
-$objDrawing->getShadow()->setVisible(true);
-$objDrawing->getShadow()->setDirection(45);
-$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
-
-// Add a drawing to the worksheet
-echo date('H:i:s') , " Add a drawing to the worksheet" , EOL;
-$objDrawing = new PHPExcel_Worksheet_Drawing();
-$objDrawing->setName('PHPExcel logo');
-$objDrawing->setDescription('PHPExcel logo');
-$objDrawing->setPath('./images/phpexcel_logo.gif');
-$objDrawing->setHeight(36);
-$objDrawing->setCoordinates('D24');
-$objDrawing->setOffsetX(10);
-$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
-
-// Play around with inserting and removing rows and columns
-echo date('H:i:s') , " Play around with inserting and removing rows and columns" , EOL;
-$objPHPExcel->getActiveSheet()->insertNewRowBefore(6, 10);
-$objPHPExcel->getActiveSheet()->removeRow(6, 10);
-$objPHPExcel->getActiveSheet()->insertNewColumnBefore('E', 5);
-$objPHPExcel->getActiveSheet()->removeColumn('E', 5);
-
-// Set header and footer. When no different headers for odd/even are used, odd header is assumed.
-echo date('H:i:s') , " Set header/footer" , EOL;
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&BInvoice&RPrinted on &D');
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
-
-// Set page orientation and size
-echo date('H:i:s') , " Set page orientation and size" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
-$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
-
-// Rename first worksheet
-echo date('H:i:s') , " Rename first worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Invoice');
-
-
-// Create a new worksheet, after the default sheet
-echo date('H:i:s') , " Create a second Worksheet object" , EOL;
-$objPHPExcel->createSheet();
-
-// Llorem ipsum...
-$sLloremIpsum = 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Vivamus eget ante. Sed cursus nunc semper tortor. Aliquam luctus purus non elit. Fusce vel elit commodo sapien dignissim dignissim. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Curabitur accumsan magna sed massa. Nullam bibendum quam ac ipsum. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Proin augue. Praesent malesuada justo sed orci. Pellentesque lacus ligula, sodales quis, ultricies a, ultricies vitae, elit. Sed luctus consectetuer dolor. Vivamus vel sem ut nisi sodales accumsan. Nunc et felis. Suspendisse semper viverra odio. Morbi at odio. Integer a orci a purus venenatis molestie. Nam mattis. Praesent rhoncus, nisi vel mattis auctor, neque nisi faucibus sem, non dapibus elit pede ac nisl. Cras turpis.';
-
-// Add some data to the second sheet, resembling some different data types
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(1);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Terms and conditions');
-$objPHPExcel->getActiveSheet()->setCellValue('A3', $sLloremIpsum);
-$objPHPExcel->getActiveSheet()->setCellValue('A4', $sLloremIpsum);
-$objPHPExcel->getActiveSheet()->setCellValue('A5', $sLloremIpsum);
-$objPHPExcel->getActiveSheet()->setCellValue('A6', $sLloremIpsum);
-
-// Set the worksheet tab color
-echo date('H:i:s') , " Set the worksheet tab color" , EOL;
-$objPHPExcel->getActiveSheet()->getTabColor()->setARGB('FF0094FF');;
-
-// Set alignments
-echo date('H:i:s') , " Set alignments" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A3:A6')->getAlignment()->setWrapText(true);
-
-// Set column widths
-echo date('H:i:s') , " Set column widths" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(80);
-
-// Set fonts
-echo date('H:i:s') , " Set fonts" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setName('Candara');
-$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setSize(20);
-$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('A1')->getFont()->setUnderline(PHPExcel_Style_Font::UNDERLINE_SINGLE);
-
-$objPHPExcel->getActiveSheet()->getStyle('A3:A6')->getFont()->setSize(8);
-
-// Add a drawing to the worksheet
-echo date('H:i:s') , " Add a drawing to the worksheet" , EOL;
-$objDrawing = new PHPExcel_Worksheet_Drawing();
-$objDrawing->setName('Terms and conditions');
-$objDrawing->setDescription('Terms and conditions');
-$objDrawing->setPath('./images/termsconditions.jpg');
-$objDrawing->setCoordinates('B14');
-$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
-
-// Set page orientation and size
-echo date('H:i:s') , " Set page orientation and size" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
-$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
-
-// Rename second worksheet
-echo date('H:i:s') , " Rename second worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Terms and conditions');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.php b/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.php
deleted file mode 100644
index 66d4980ec51..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/05featuredemo.php
+++ /dev/null
@@ -1,78 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** Include PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite.php b/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite.php
deleted file mode 100644
index cbdb59b91b1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite.php
+++ /dev/null
@@ -1,129 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite;
-if (PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
- echo date('H:i:s') , " Enable Cell Caching using " , $cacheMethod , " method" , EOL;
-} else {
- echo date('H:i:s') , " Unable to set Cell Caching using " , $cacheMethod , " method, reverting to memory" , EOL;
-}
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
-$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
-$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
-$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
-$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
-
-
-// Hide "Phone" and "fax" column
-echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
-
-
-// Set outline levels
-echo date('H:i:s') , " Set outline levels" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
- ->setVisible(false)
- ->setCollapsed(true);
-
-// Freeze panes
-echo date('H:i:s') , " Freeze panes" , EOL;
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-// Rows to repeat at top
-echo date('H:i:s') , " Rows to repeat at top" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
-
-
-// Add data
-for ($i = 2; $i <= 5000; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
- ->setCellValue('B' . $i, "LName $i")
- ->setCellValue('C' . $i, "PhoneNo $i")
- ->setCellValue('D' . $i, "FaxNo $i")
- ->setCellValue('E' . $i, true);
-}
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite3.php b/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite3.php
deleted file mode 100644
index ca04f85e92c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching-sqlite3.php
+++ /dev/null
@@ -1,129 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_sqlite3;
-if (PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
- echo date('H:i:s') , " Enable Cell Caching using " , $cacheMethod , " method" , EOL;
-} else {
- echo date('H:i:s') , " Unable to set Cell Caching using " , $cacheMethod , " method, reverting to memory" , EOL;
-}
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
-$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
-$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
-$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
-$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
-
-
-// Hide "Phone" and "fax" column
-echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
-
-
-// Set outline levels
-echo date('H:i:s') , " Set outline levels" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
- ->setVisible(false)
- ->setCollapsed(true);
-
-// Freeze panes
-echo date('H:i:s') , " Freeze panes" , EOL;
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-// Rows to repeat at top
-echo date('H:i:s') , " Rows to repeat at top" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
-
-
-// Add data
-for ($i = 2; $i <= 5000; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
- ->setCellValue('B' . $i, "LName $i")
- ->setCellValue('C' . $i, "PhoneNo $i")
- ->setCellValue('D' . $i, "FaxNo $i")
- ->setCellValue('E' . $i, true);
-}
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching.php b/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching.php
deleted file mode 100644
index aa23b8cbb8a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-with-cellcaching.php
+++ /dev/null
@@ -1,128 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
-if (!PHPExcel_Settings::setCacheStorageMethod($cacheMethod)) {
- die($cacheMethod . " caching method is not available" . EOL);
-}
-echo date('H:i:s') , " Enable Cell Caching using " , $cacheMethod , " method" , EOL;
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
-$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
-$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
-$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
-$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
-
-
-// Hide "Phone" and "fax" column
-echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
-
-
-// Set outline levels
-echo date('H:i:s') , " Set outline levels" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
- ->setVisible(false)
- ->setCollapsed(true);
-
-// Freeze panes
-echo date('H:i:s') , " Freeze panes" , EOL;
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-// Rows to repeat at top
-echo date('H:i:s') , " Rows to repeat at top" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
-
-
-// Add data
-for ($i = 2; $i <= 5000; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
- ->setCellValue('B' . $i, "LName $i")
- ->setCellValue('C' . $i, "PhoneNo $i")
- ->setCellValue('D' . $i, "FaxNo $i")
- ->setCellValue('E' . $i, true);
-}
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-xls.php
deleted file mode 100644
index 00137ad896b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale-xls.php
+++ /dev/null
@@ -1,136 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-/*
-After doing some test, I've got these results benchmarked
-for writing to Excel2007:
-
- Number of rows Seconds to generate
- 200 3
- 500 4
- 1000 6
- 2000 12
- 4000 36
- 8000 64
- 15000 465
-*/
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
-$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
-$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
-$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
-$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
-
-
-// Hide "Phone" and "fax" column
-echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
-
-
-// Set outline levels
-echo date('H:i:s') , " Set outline levels" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
- ->setVisible(false)
- ->setCollapsed(true);
-
-// Freeze panes
-echo date('H:i:s') , " Freeze panes" , EOL;
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-// Rows to repeat at top
-echo date('H:i:s') , " Rows to repeat at top" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
-
-
-// Add data
-for ($i = 2; $i <= 5000; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
- ->setCellValue('B' . $i, "LName $i")
- ->setCellValue('C' . $i, "PhoneNo $i")
- ->setCellValue('D' . $i, "FaxNo $i")
- ->setCellValue('E' . $i, true);
-}
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale.php b/htdocs/includes/phpoffice/phpexcel/Examples/06largescale.php
deleted file mode 100644
index b0fa44047a3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/06largescale.php
+++ /dev/null
@@ -1,136 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-/*
-After doing some test, I've got these results benchmarked
-for writing to Excel2007:
-
- Number of rows Seconds to generate
- 200 3
- 500 4
- 1000 6
- 2000 12
- 4000 36
- 8000 64
- 15000 465
-*/
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname");
-$objPHPExcel->getActiveSheet()->setCellValue('B1', "Lastname");
-$objPHPExcel->getActiveSheet()->setCellValue('C1', "Phone");
-$objPHPExcel->getActiveSheet()->setCellValue('D1', "Fax");
-$objPHPExcel->getActiveSheet()->setCellValue('E1', "Is Client ?");
-
-
-// Hide "Phone" and "fax" column
-echo date('H:i:s') , " Hide 'Phone' and 'fax' columns" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setVisible(false);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setVisible(false);
-
-
-// Set outline levels
-echo date('H:i:s') , " Set outline levels" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('E')->setOutlineLevel(1)
- ->setVisible(false)
- ->setCollapsed(true);
-
-// Freeze panes
-echo date('H:i:s') , " Freeze panes" , EOL;
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-// Rows to repeat at top
-echo date('H:i:s') , " Rows to repeat at top" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setRowsToRepeatAtTopByStartAndEnd(1, 1);
-
-
-// Add data
-for ($i = 2; $i <= 5000; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i")
- ->setCellValue('B' . $i, "LName $i")
- ->setCellValue('C' . $i, "PhoneNo $i")
- ->setCellValue('D' . $i, "FaxNo $i")
- ->setCellValue('E' . $i, true);
-}
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/07reader.php b/htdocs/includes/phpoffice/phpexcel/Examples/07reader.php
deleted file mode 100644
index 616b6622ff9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/07reader.php
+++ /dev/null
@@ -1,76 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-if (!file_exists("05featuredemo.xlsx")) {
- exit("Please run 05featuredemo.php first." . EOL);
-}
-
-echo date('H:i:s') , " Load from Excel2007 file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcel = PHPExcel_IOFactory::load("05featuredemo.xlsx");
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/07readerPCLZip.php b/htdocs/includes/phpoffice/phpexcel/Examples/07readerPCLZip.php
deleted file mode 100644
index 90e85905019..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/07readerPCLZip.php
+++ /dev/null
@@ -1,79 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-if (!file_exists("05featuredemo.xlsx")) {
- exit("Please run 05featuredemo.php first." . EOL);
-}
-
-// Use PCLZip rather than ZipArchive to read the Excel2007 OfficeOpenXML file
-PHPExcel_Settings::setZipClass(PHPExcel_Settings::PCLZIP);
-
-echo date('H:i:s') , " Load from Excel2007 file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcel = PHPExcel_IOFactory::load("05featuredemo.xlsx");
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting.php b/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting.php
deleted file mode 100644
index f65ec9efd32..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting.php
+++ /dev/null
@@ -1,189 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet, representing sales data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Description')
- ->setCellValue('B1', 'Amount');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A2', 'Paycheck received')
- ->setCellValue('B2', 100);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A3', 'Cup of coffee bought')
- ->setCellValue('B3', -1.5);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Cup of coffee bought')
- ->setCellValue('B4', -1.5);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Cup of tea bought')
- ->setCellValue('B5', -1.2);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A6', 'Found some money')
- ->setCellValue('B6', 8);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Total:')
- ->setCellValue('B7', '=SUM(B2:B6)');
-
-
-// Set column widths
-echo date('H:i:s') , " Set column widths" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(30);
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(12);
-
-
-// Add conditional formatting
-echo date('H:i:s') , " Add conditional formatting" , EOL;
-$objConditional1 = new PHPExcel_Style_Conditional();
-$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS)
- ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_BETWEEN)
- ->addCondition('200')
- ->addCondition('400');
-$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_YELLOW);
-$objConditional1->getStyle()->getFont()->setBold(true);
-$objConditional1->getStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
-
-$objConditional2 = new PHPExcel_Style_Conditional();
-$objConditional2->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS)
- ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN)
- ->addCondition('0');
-$objConditional2->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
-$objConditional2->getStyle()->getFont()->setItalic(true);
-$objConditional2->getStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
-
-$objConditional3 = new PHPExcel_Style_Conditional();
-$objConditional3->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS)
- ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL)
- ->addCondition('0');
-$objConditional3->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN);
-$objConditional3->getStyle()->getFont()->setItalic(true);
-$objConditional3->getStyle()->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_EUR_SIMPLE);
-
-$conditionalStyles = $objPHPExcel->getActiveSheet()->getStyle('B2')->getConditionalStyles();
-array_push($conditionalStyles, $objConditional1);
-array_push($conditionalStyles, $objConditional2);
-array_push($conditionalStyles, $objConditional3);
-$objPHPExcel->getActiveSheet()->getStyle('B2')->setConditionalStyles($conditionalStyles);
-
-
-// duplicate the conditional styles across a range of cells
-echo date('H:i:s') , " Duplicate the conditional formatting across a range of cells" , EOL;
-$objPHPExcel->getActiveSheet()->duplicateConditionalStyle(
- $objPHPExcel->getActiveSheet()->getStyle('B2')->getConditionalStyles(),
- 'B3:B7'
- );
-
-
-// Set fonts
-echo date('H:i:s') , " Set fonts" , EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:B1')->getFont()->setBold(true);
-//$objPHPExcel->getActiveSheet()->getStyle('B1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('A7:B7')->getFont()->setBold(true);
-//$objPHPExcel->getActiveSheet()->getStyle('B7')->getFont()->setBold(true);
-
-
-// Set header and footer. When no different headers for odd/even are used, odd header is assumed.
-echo date('H:i:s') , " Set header/footer" , EOL;
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddHeader('&L&BPersonal cash register&RPrinted on &D');
-$objPHPExcel->getActiveSheet()->getHeaderFooter()->setOddFooter('&L&B' . $objPHPExcel->getProperties()->getTitle() . '&RPage &P of &N');
-
-
-// Set page orientation and size
-echo date('H:i:s') , " Set page orientation and size" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_PORTRAIT);
-$objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Invoice');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Save Excel5 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting2.php b/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting2.php
deleted file mode 100644
index bbe084a26fb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/08conditionalformatting2.php
+++ /dev/null
@@ -1,136 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet, representing sales data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()
- ->setCellValue('A1', '-0.5')
- ->setCellValue('A2', '-0.25')
- ->setCellValue('A3', '0.0')
- ->setCellValue('A4', '0.25')
- ->setCellValue('A5', '0.5')
- ->setCellValue('A6', '0.75')
- ->setCellValue('A7', '1.0')
- ->setCellValue('A8', '1.25')
-;
-
-$objPHPExcel->getActiveSheet()->getStyle('A1:A8')
- ->getNumberFormat()
- ->setFormatCode(
- PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00
- );
-
-
-// Add conditional formatting
-echo date('H:i:s') , " Add conditional formatting" , EOL;
-$objConditional1 = new PHPExcel_Style_Conditional();
-$objConditional1->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS)
- ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_LESSTHAN)
- ->addCondition('0');
-$objConditional1->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_RED);
-
-$objConditional3 = new PHPExcel_Style_Conditional();
-$objConditional3->setConditionType(PHPExcel_Style_Conditional::CONDITION_CELLIS)
- ->setOperatorType(PHPExcel_Style_Conditional::OPERATOR_GREATERTHANOREQUAL)
- ->addCondition('1');
-$objConditional3->getStyle()->getFont()->getColor()->setARGB(PHPExcel_Style_Color::COLOR_GREEN);
-
-$conditionalStyles = $objPHPExcel->getActiveSheet()->getStyle('A1')->getConditionalStyles();
-array_push($conditionalStyles, $objConditional1);
-array_push($conditionalStyles, $objConditional3);
-$objPHPExcel->getActiveSheet()->getStyle('A1')->setConditionalStyles($conditionalStyles);
-
-
-// duplicate the conditional styles across a range of cells
-echo date('H:i:s') , " Duplicate the conditional formatting across a range of cells" , EOL;
-$objPHPExcel->getActiveSheet()->duplicateConditionalStyle(
- $objPHPExcel->getActiveSheet()->getStyle('A1')->getConditionalStyles(),
- 'A2:A8'
- );
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Save Excel5 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/09pagebreaks.php b/htdocs/includes/phpoffice/phpexcel/Examples/09pagebreaks.php
deleted file mode 100644
index 6b8c185e3aa..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/09pagebreaks.php
+++ /dev/null
@@ -1,134 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data and page breaks" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Firstname")
- ->setCellValue('B1', "Lastname")
- ->setCellValue('C1', "Phone")
- ->setCellValue('D1', "Fax")
- ->setCellValue('E1', "Is Client ?");
-
-
-// Add data
-for ($i = 2; $i <= 50; $i++) {
- $objPHPExcel->getActiveSheet()->setCellValue('A' . $i, "FName $i");
- $objPHPExcel->getActiveSheet()->setCellValue('B' . $i, "LName $i");
- $objPHPExcel->getActiveSheet()->setCellValue('C' . $i, "PhoneNo $i");
- $objPHPExcel->getActiveSheet()->setCellValue('D' . $i, "FaxNo $i");
- $objPHPExcel->getActiveSheet()->setCellValue('E' . $i, true);
-
- // Add page breaks every 10 rows
- if ($i % 10 == 0) {
- // Add a page break
- $objPHPExcel->getActiveSheet()->setBreak( 'A' . $i, PHPExcel_Worksheet::BREAK_ROW );
- }
-}
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setTitle('Printing Options');
-
-// Set print headers
-$objPHPExcel->getActiveSheet()
- ->getHeaderFooter()->setOddHeader('&C&24&K0000FF&B&U&A');
-$objPHPExcel->getActiveSheet()
- ->getHeaderFooter()->setEvenHeader('&C&24&K0000FF&B&U&A');
-
-// Set print footers
-$objPHPExcel->getActiveSheet()
- ->getHeaderFooter()->setOddFooter('&R&D &T&C&F&LPage &P / &N');
-$objPHPExcel->getActiveSheet()
- ->getHeaderFooter()->setEvenFooter('&L&D &T&C&F&RPage &P / &N');
-
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-1.php b/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-1.php
deleted file mode 100644
index 7542a52955c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-1.php
+++ /dev/null
@@ -1,221 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s').' Create new PHPExcel object'.EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s').' Set document properties'.EOL;
-$objPHPExcel->getProperties()->setCreator('Maarten Balliauw')
- ->setLastModifiedBy('Maarten Balliauw')
- ->setTitle('PHPExcel Test Document')
- ->setSubject('PHPExcel Test Document')
- ->setDescription('Test document for PHPExcel, generated using PHP classes.')
- ->setKeywords('office PHPExcel php')
- ->setCategory('Test result file');
-
-// Create the worksheet
-echo date('H:i:s').' Add data'.EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Financial Year')
- ->setCellValue('B1', 'Financial Period')
- ->setCellValue('C1', 'Country')
- ->setCellValue('D1', 'Date')
- ->setCellValue('E1', 'Sales Value')
- ->setCellValue('F1', 'Expenditure')
- ;
-$startYear = $endYear = $currentYear = date('Y');
-$startYear--;
-$endYear++;
-
-$years = range($startYear,$endYear);
-$periods = range(1,12);
-$countries = array( 'United States', 'UK', 'France', 'Germany',
- 'Italy', 'Spain', 'Portugal', 'Japan'
- );
-
-$row = 2;
-foreach($years as $year) {
- foreach($periods as $period) {
- foreach($countries as $country) {
- $endDays = date('t',mktime(0,0,0,$period,1,$year));
- for($i = 1; $i <= $endDays; ++$i) {
- $eDate = PHPExcel_Shared_Date::FormattedPHPToExcel(
- $year,
- $period,
- $i
- );
- $value = rand(500,1000) * (1 + rand(-0.25,+0.25));
- $salesValue = $invoiceValue = NULL;
- $incomeOrExpenditure = rand(-1,1);
- if ($incomeOrExpenditure == -1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = NULL;
- } elseif ($incomeOrExpenditure == 1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- } else {
- $expenditure = NULL;
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- }
- $dataArray = array( $year,
- $period,
- $country,
- $eDate,
- $income,
- $expenditure,
- );
- $objPHPExcel->getActiveSheet()->fromArray($dataArray, NULL, 'A'.$row++);
- }
- }
- }
-}
-$row--;
-
-
-// Set styling
-echo date('H:i:s').' Set styling'.EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(TRUE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
-$objPHPExcel->getActiveSheet()->getStyle('D2:D'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
-$objPHPExcel->getActiveSheet()->getStyle('E2:F'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(14);
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-
-// Set autofilter range
-echo date('H:i:s').' Set autofilter range'.EOL;
-// Always include the complete filter range!
-// Excel does support setting only the caption
-// row, but that's not a best practise...
-$objPHPExcel->getActiveSheet()->setAutoFilter($objPHPExcel->getActiveSheet()->calculateWorksheetDimension());
-
-// Set active filters
-$autoFilter = $objPHPExcel->getActiveSheet()->getAutoFilter();
-echo date('H:i:s').' Set active filters'.EOL;
-// Filter the Country column on a filter value of countries beginning with the letter U (or Japan)
-// We use * as a wildcard, so specify as U* and using a wildcard requires customFilter
-$autoFilter->getColumn('C')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- 'u*'
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-$autoFilter->getColumn('C')
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- 'japan'
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-// Filter the Date column on a filter value of the first day of every period of the current year
-// We us a dateGroup ruletype for this, although it is still a standard filter
-foreach($periods as $period) {
- $endDate = date('t',mktime(0,0,0,$period,1,$currentYear));
-
- $autoFilter->getColumn('D')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- array(
- 'year' => $currentYear,
- 'month' => $period,
- 'day' => $endDate
- )
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP);
-}
-// Display only sales values that are blank
-// Standard filter, operator equals, and value of NULL
-$autoFilter->getColumn('E')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- ''
- );
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s').' Peak memory usage: '.(memory_get_peak_usage(true) / 1024 / 1024).' MB'.EOL;
-
-// Echo done
-echo date('H:i:s').' Done writing files'.EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-2.php b/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-2.php
deleted file mode 100644
index c89173f5c75..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-2.php
+++ /dev/null
@@ -1,213 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s').' Create new PHPExcel object'.EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s').' Set document properties'.EOL;
-$objPHPExcel->getProperties()->setCreator('Maarten Balliauw')
- ->setLastModifiedBy('Maarten Balliauw')
- ->setTitle('PHPExcel Test Document')
- ->setSubject('PHPExcel Test Document')
- ->setDescription('Test document for PHPExcel, generated using PHP classes.')
- ->setKeywords('office PHPExcel php')
- ->setCategory('Test result file');
-
-// Create the worksheet
-echo date('H:i:s').' Add data'.EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Financial Year')
- ->setCellValue('B1', 'Financial Period')
- ->setCellValue('C1', 'Country')
- ->setCellValue('D1', 'Date')
- ->setCellValue('E1', 'Sales Value')
- ->setCellValue('F1', 'Expenditure')
- ;
-$startYear = $endYear = $currentYear = date('Y');
-$startYear--;
-$endYear++;
-
-$years = range($startYear,$endYear);
-$periods = range(1,12);
-$countries = array( 'United States', 'UK', 'France', 'Germany',
- 'Italy', 'Spain', 'Portugal', 'Japan'
- );
-
-$row = 2;
-foreach($years as $year) {
- foreach($periods as $period) {
- foreach($countries as $country) {
- $endDays = date('t',mktime(0,0,0,$period,1,$year));
- for($i = 1; $i <= $endDays; ++$i) {
- $eDate = PHPExcel_Shared_Date::FormattedPHPToExcel(
- $year,
- $period,
- $i
- );
- $value = rand(500,1000) * (1 + rand(-0.25,+0.25));
- $salesValue = $invoiceValue = NULL;
- $incomeOrExpenditure = rand(-1,1);
- if ($incomeOrExpenditure == -1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = NULL;
- } elseif ($incomeOrExpenditure == 1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- } else {
- $expenditure = NULL;
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- }
- $dataArray = array( $year,
- $period,
- $country,
- $eDate,
- $income,
- $expenditure,
- );
- $objPHPExcel->getActiveSheet()->fromArray($dataArray, NULL, 'A'.$row++);
- }
- }
- }
-}
-$row--;
-
-
-// Set styling
-echo date('H:i:s').' Set styling'.EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(TRUE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
-$objPHPExcel->getActiveSheet()->getStyle('D2:D'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
-$objPHPExcel->getActiveSheet()->getStyle('E2:F'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(14);
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-
-// Set autofilter range
-echo date('H:i:s').' Set autofilter range'.EOL;
-// Always include the complete filter range!
-// Excel does support setting only the caption
-// row, but that's not a best practise...
-$objPHPExcel->getActiveSheet()->setAutoFilter($objPHPExcel->getActiveSheet()->calculateWorksheetDimension());
-
-// Set active filters
-$autoFilter = $objPHPExcel->getActiveSheet()->getAutoFilter();
-echo date('H:i:s').' Set active filters'.EOL;
-// Filter the Country column on a filter value of Germany
-// As it's just a simple value filter, we can use FILTERTYPE_FILTER
-$autoFilter->getColumn('C')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- 'Germany'
- );
-// Filter the Date column on a filter value of the year to date
-$autoFilter->getColumn('D')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- NULL,
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMIC_YEARTODATE
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DYNAMICFILTER);
-// Display only sales values that are between 400 and 600
-$autoFilter->getColumn('E')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_GREATERTHANOREQUAL,
- 400
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-$autoFilter->getColumn('E')
- ->setJoin(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHANOREQUAL,
- 600
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s').' Peak memory usage: '.(memory_get_peak_usage(true) / 1024 / 1024).' MB'.EOL;
-
-// Echo done
-echo date('H:i:s').' Done writing files'.EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-display.php b/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-display.php
deleted file mode 100644
index cf2b8acfd99..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter-selection-display.php
+++ /dev/null
@@ -1,198 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s').' Create new PHPExcel object'.EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s').' Set document properties'.EOL;
-$objPHPExcel->getProperties()->setCreator('Maarten Balliauw')
- ->setLastModifiedBy('Maarten Balliauw')
- ->setTitle('PHPExcel Test Document')
- ->setSubject('PHPExcel Test Document')
- ->setDescription('Test document for PHPExcel, generated using PHP classes.')
- ->setKeywords('office PHPExcel php')
- ->setCategory('Test result file');
-
-// Create the worksheet
-echo date('H:i:s').' Add data'.EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Financial Year')
- ->setCellValue('B1', 'Financial Period')
- ->setCellValue('C1', 'Country')
- ->setCellValue('D1', 'Date')
- ->setCellValue('E1', 'Sales Value')
- ->setCellValue('F1', 'Expenditure')
- ;
-$startYear = $endYear = $currentYear = date('Y');
-$startYear--;
-$endYear++;
-
-$years = range($startYear,$endYear);
-$periods = range(1,12);
-$countries = array( 'United States', 'UK', 'France', 'Germany',
- 'Italy', 'Spain', 'Portugal', 'Japan'
- );
-
-$row = 2;
-foreach($years as $year) {
- foreach($periods as $period) {
- foreach($countries as $country) {
- $endDays = date('t',mktime(0,0,0,$period,1,$year));
- for($i = 1; $i <= $endDays; ++$i) {
- $eDate = PHPExcel_Shared_Date::FormattedPHPToExcel(
- $year,
- $period,
- $i
- );
- $value = rand(500,1000) * (1 + rand(-0.25,+0.25));
- $salesValue = $invoiceValue = NULL;
- $incomeOrExpenditure = rand(-1,1);
- if ($incomeOrExpenditure == -1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = NULL;
- } elseif ($incomeOrExpenditure == 1) {
- $expenditure = rand(-500,-1000) * (1 + rand(-0.25,+0.25));
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- } else {
- $expenditure = NULL;
- $income = rand(500,1000) * (1 + rand(-0.25,+0.25));;
- }
- $dataArray = array( $year,
- $period,
- $country,
- $eDate,
- $income,
- $expenditure,
- );
- $objPHPExcel->getActiveSheet()->fromArray($dataArray, NULL, 'A'.$row++);
- }
- }
- }
-}
-$row--;
-
-
-// Set styling
-echo date('H:i:s').' Set styling'.EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getFont()->setBold(true);
-$objPHPExcel->getActiveSheet()->getStyle('A1:F1')->getAlignment()->setWrapText(TRUE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(12.5);
-$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(10.5);
-$objPHPExcel->getActiveSheet()->getStyle('D2:D'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_YYYYMMDD2);
-$objPHPExcel->getActiveSheet()->getStyle('E2:F'.$row)->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
-$objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth(14);
-$objPHPExcel->getActiveSheet()->freezePane('A2');
-
-
-
-// Set autofilter range
-echo date('H:i:s').' Set autofilter range'.EOL;
-// Always include the complete filter range!
-// Excel does support setting only the caption
-// row, but that's not a best practise...
-$objPHPExcel->getActiveSheet()->setAutoFilter($objPHPExcel->getActiveSheet()->calculateWorksheetDimension());
-
-// Set active filters
-$autoFilter = $objPHPExcel->getActiveSheet()->getAutoFilter();
-echo date('H:i:s').' Set active filters'.EOL;
-// Filter the Country column on a filter value of countries beginning with the letter U (or Japan)
-// We use * as a wildcard, so specify as U* and using a wildcard requires customFilter
-$autoFilter->getColumn('C')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_CUSTOMFILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- 'u*'
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-$autoFilter->getColumn('C')
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- 'japan'
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_CUSTOMFILTER);
-// Filter the Date column on a filter value of the first day of every period of the current year
-// We us a dateGroup ruletype for this, although it is still a standard filter
-foreach($periods as $period) {
- $endDate = date('t',mktime(0,0,0,$period,1,$currentYear));
-
- $autoFilter->getColumn('D')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- array(
- 'year' => $currentYear,
- 'month' => $period,
- 'day' => $endDate
- )
- )
- ->setRuleType(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP);
-}
-// Display only sales values that are blank
-// Standard filter, operator equals, and value of NULL
-$autoFilter->getColumn('E')
- ->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER)
- ->createRule()
- ->setRule(
- PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL,
- ''
- );
-
-// Execute filtering
-echo date('H:i:s').' Execute filtering'.EOL;
-$autoFilter->showHideRows();
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Display Results of filtering
-echo date('H:i:s').' Display filtered rows'.EOL;
-foreach ($objPHPExcel->getActiveSheet()->getRowIterator() as $row) {
- if ($objPHPExcel->getActiveSheet()->getRowDimension($row->getRowIndex())->getVisible()) {
- echo ' Row number - ' , $row->getRowIndex() , ' ';
- echo $objPHPExcel->getActiveSheet()->getCell('C'.$row->getRowIndex())->getValue(), ' ';
- echo $objPHPExcel->getActiveSheet()->getCell('D'.$row->getRowIndex())->getFormattedValue(), ' ';
- echo EOL;
- }
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter.php b/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter.php
deleted file mode 100644
index ea3f76343b8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/10autofilter.php
+++ /dev/null
@@ -1,171 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-// Create new PHPExcel object
-echo date('H:i:s').' Create new PHPExcel object'.EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s').' Set document properties'.EOL;
-$objPHPExcel->getProperties()->setCreator('Maarten Balliauw')
- ->setLastModifiedBy('Maarten Balliauw')
- ->setTitle('PHPExcel Test Document')
- ->setSubject('PHPExcel Test Document')
- ->setDescription('Test document for PHPExcel, generated using PHP classes.')
- ->setKeywords('office PHPExcel php')
- ->setCategory('Test result file');
-
-// Create the worksheet
-echo date('H:i:s').' Add data'.EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Year')
- ->setCellValue('B1', 'Quarter')
- ->setCellValue('C1', 'Country')
- ->setCellValue('D1', 'Sales');
-
-$dataArray = array(array('2010', 'Q1', 'United States', 790),
- array('2010', 'Q2', 'United States', 730),
- array('2010', 'Q3', 'United States', 860),
- array('2010', 'Q4', 'United States', 850),
- array('2011', 'Q1', 'United States', 800),
- array('2011', 'Q2', 'United States', 700),
- array('2011', 'Q3', 'United States', 900),
- array('2011', 'Q4', 'United States', 950),
- array('2010', 'Q1', 'Belgium', 380),
- array('2010', 'Q2', 'Belgium', 390),
- array('2010', 'Q3', 'Belgium', 420),
- array('2010', 'Q4', 'Belgium', 460),
- array('2011', 'Q1', 'Belgium', 400),
- array('2011', 'Q2', 'Belgium', 350),
- array('2011', 'Q3', 'Belgium', 450),
- array('2011', 'Q4', 'Belgium', 500),
- array('2010', 'Q1', 'UK', 690),
- array('2010', 'Q2', 'UK', 610),
- array('2010', 'Q3', 'UK', 620),
- array('2010', 'Q4', 'UK', 600),
- array('2011', 'Q1', 'UK', 720),
- array('2011', 'Q2', 'UK', 650),
- array('2011', 'Q3', 'UK', 580),
- array('2011', 'Q4', 'UK', 510),
- array('2010', 'Q1', 'France', 510),
- array('2010', 'Q2', 'France', 490),
- array('2010', 'Q3', 'France', 460),
- array('2010', 'Q4', 'France', 590),
- array('2011', 'Q1', 'France', 620),
- array('2011', 'Q2', 'France', 650),
- array('2011', 'Q3', 'France', 415),
- array('2011', 'Q4', 'France', 570),
- array('2010', 'Q1', 'Germany', 720),
- array('2010', 'Q2', 'Germany', 680),
- array('2010', 'Q3', 'Germany', 640),
- array('2010', 'Q4', 'Germany', 660),
- array('2011', 'Q1', 'Germany', 680),
- array('2011', 'Q2', 'Germany', 620),
- array('2011', 'Q3', 'Germany', 710),
- array('2011', 'Q4', 'Germany', 690),
- array('2010', 'Q1', 'Spain', 510),
- array('2010', 'Q2', 'Spain', 490),
- array('2010', 'Q3', 'Spain', 470),
- array('2010', 'Q4', 'Spain', 420),
- array('2011', 'Q1', 'Spain', 460),
- array('2011', 'Q2', 'Spain', 390),
- array('2011', 'Q3', 'Spain', 430),
- array('2011', 'Q4', 'Spain', 415),
- array('2010', 'Q1', 'Italy', 440),
- array('2010', 'Q2', 'Italy', 410),
- array('2010', 'Q3', 'Italy', 420),
- array('2010', 'Q4', 'Italy', 450),
- array('2011', 'Q1', 'Italy', 430),
- array('2011', 'Q2', 'Italy', 370),
- array('2011', 'Q3', 'Italy', 350),
- array('2011', 'Q4', 'Italy', 335),
- );
-$objPHPExcel->getActiveSheet()->fromArray($dataArray, NULL, 'A2');
-
-// Set title row bold
-echo date('H:i:s').' Set title row bold'.EOL;
-$objPHPExcel->getActiveSheet()->getStyle('A1:D1')->getFont()->setBold(true);
-
-// Set autofilter
-echo date('H:i:s').' Set autofilter'.EOL;
-// Always include the complete filter range!
-// Excel does support setting only the caption
-// row, but that's not a best practise...
-$objPHPExcel->getActiveSheet()->setAutoFilter($objPHPExcel->getActiveSheet()->calculateWorksheetDimension());
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s').' Peak memory usage: '.(memory_get_peak_usage(true) / 1024 / 1024).' MB'.EOL;
-
-// Echo done
-echo date('H:i:s').' Done writing files'.EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity-xls.php
deleted file mode 100644
index b104c7b8ac3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity-xls.php
+++ /dev/null
@@ -1,109 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
-$objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!');
-$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello');
-$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set document security
-echo date('H:i:s') , " Set document security" , EOL;
-$objPHPExcel->getSecurity()->setLockWindows(true);
-$objPHPExcel->getSecurity()->setLockStructure(true);
-$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");
-
-
-// Set sheet security
-echo date('H:i:s') , " Set sheet security" , EOL;
-$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
-$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // This should be enabled in order to enable any of the following!
-$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
-$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
-$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity.php b/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity.php
deleted file mode 100644
index 96f5d99300d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/11documentsecurity.php
+++ /dev/null
@@ -1,109 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Hello');
-$objPHPExcel->getActiveSheet()->setCellValue('B2', 'world!');
-$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Hello');
-$objPHPExcel->getActiveSheet()->setCellValue('D2', 'world!');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set document security
-echo date('H:i:s') , " Set document security" , EOL;
-$objPHPExcel->getSecurity()->setLockWindows(true);
-$objPHPExcel->getSecurity()->setLockStructure(true);
-$objPHPExcel->getSecurity()->setWorkbookPassword("PHPExcel");
-
-
-// Set sheet security
-echo date('H:i:s') , " Set sheet security" , EOL;
-$objPHPExcel->getActiveSheet()->getProtection()->setPassword('PHPExcel');
-$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true); // This should be enabled in order to enable any of the following!
-$objPHPExcel->getActiveSheet()->getProtection()->setSort(true);
-$objPHPExcel->getActiveSheet()->getProtection()->setInsertRows(true);
-$objPHPExcel->getActiveSheet()->getProtection()->setFormatCells(true);
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/12cellProtection.php b/htdocs/includes/phpoffice/phpexcel/Examples/12cellProtection.php
deleted file mode 100644
index 77bfee4ce4b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/12cellProtection.php
+++ /dev/null
@@ -1,107 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Mark Baker")
- ->setLastModifiedBy("Mark Baker")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Crouching');
-$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Tiger');
-$objPHPExcel->getActiveSheet()->setCellValue('A2', 'Hidden');
-$objPHPExcel->getActiveSheet()->setCellValue('B2', 'Dragon');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set document security
-echo date('H:i:s') , " Set cell protection" , EOL;
-
-
-// Set sheet security
-echo date('H:i:s') , " Set sheet security" , EOL;
-$objPHPExcel->getActiveSheet()->getProtection()->setSheet(true);
-$objPHPExcel->getActiveSheet()
- ->getStyle('A2:B2')
- ->getProtection()->setLocked(
- PHPExcel_Style_Protection::PROTECTION_UNPROTECTED
- );
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/13calculation.php b/htdocs/includes/phpoffice/phpexcel/Examples/13calculation.php
deleted file mode 100644
index 01e63ea7751..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/13calculation.php
+++ /dev/null
@@ -1,235 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-mt_srand(1234567890);
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// List functions
-echo date('H:i:s') , " List implemented functions" , EOL;
-$objCalc = PHPExcel_Calculation::getInstance();
-print_r($objCalc->listFunctionNames());
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Add some data, we will use some formulas here
-echo date('H:i:s') , " Add some data and formulas" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('A14', 'Count:')
- ->setCellValue('A15', 'Sum:')
- ->setCellValue('A16', 'Max:')
- ->setCellValue('A17', 'Min:')
- ->setCellValue('A18', 'Average:')
- ->setCellValue('A19', 'Median:')
- ->setCellValue('A20', 'Mode:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A22', 'CountA:')
- ->setCellValue('A23', 'MaxA:')
- ->setCellValue('A24', 'MinA:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A26', 'StDev:')
- ->setCellValue('A27', 'StDevA:')
- ->setCellValue('A28', 'StDevP:')
- ->setCellValue('A29', 'StDevPA:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A31', 'DevSq:')
- ->setCellValue('A32', 'Var:')
- ->setCellValue('A33', 'VarA:')
- ->setCellValue('A34', 'VarP:')
- ->setCellValue('A35', 'VarPA:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A37', 'Date:');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Range 1')
- ->setCellValue('B2', 2)
- ->setCellValue('B3', 8)
- ->setCellValue('B4', 10)
- ->setCellValue('B5', True)
- ->setCellValue('B6', False)
- ->setCellValue('B7', 'Text String')
- ->setCellValue('B9', '22')
- ->setCellValue('B10', 4)
- ->setCellValue('B11', 6)
- ->setCellValue('B12', 12);
-
-$objPHPExcel->getActiveSheet()->setCellValue('B14', '=COUNT(B2:B12)')
- ->setCellValue('B15', '=SUM(B2:B12)')
- ->setCellValue('B16', '=MAX(B2:B12)')
- ->setCellValue('B17', '=MIN(B2:B12)')
- ->setCellValue('B18', '=AVERAGE(B2:B12)')
- ->setCellValue('B19', '=MEDIAN(B2:B12)')
- ->setCellValue('B20', '=MODE(B2:B12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B22', '=COUNTA(B2:B12)')
- ->setCellValue('B23', '=MAXA(B2:B12)')
- ->setCellValue('B24', '=MINA(B2:B12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B26', '=STDEV(B2:B12)')
- ->setCellValue('B27', '=STDEVA(B2:B12)')
- ->setCellValue('B28', '=STDEVP(B2:B12)')
- ->setCellValue('B29', '=STDEVPA(B2:B12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B31', '=DEVSQ(B2:B12)')
- ->setCellValue('B32', '=VAR(B2:B12)')
- ->setCellValue('B33', '=VARA(B2:B12)')
- ->setCellValue('B34', '=VARP(B2:B12)')
- ->setCellValue('B35', '=VARPA(B2:B12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B37', '=DATE(2007, 12, 21)')
- ->setCellValue('B38', '=DATEDIF( DATE(2007, 12, 21), DATE(2007, 12, 22), "D" )')
- ->setCellValue('B39', '=DATEVALUE("01-Feb-2006 10:06 AM")')
- ->setCellValue('B40', '=DAY( DATE(2006, 1, 2) )')
- ->setCellValue('B41', '=DAYS360( DATE(2002, 2, 3), DATE(2005, 5, 31) )');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Range 2')
- ->setCellValue('C2', 1)
- ->setCellValue('C3', 2)
- ->setCellValue('C4', 2)
- ->setCellValue('C5', 3)
- ->setCellValue('C6', 3)
- ->setCellValue('C7', 3)
- ->setCellValue('C8', '0')
- ->setCellValue('C9', 4)
- ->setCellValue('C10', 4)
- ->setCellValue('C11', 4)
- ->setCellValue('C12', 4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('C14', '=COUNT(C2:C12)')
- ->setCellValue('C15', '=SUM(C2:C12)')
- ->setCellValue('C16', '=MAX(C2:C12)')
- ->setCellValue('C17', '=MIN(C2:C12)')
- ->setCellValue('C18', '=AVERAGE(C2:C12)')
- ->setCellValue('C19', '=MEDIAN(C2:C12)')
- ->setCellValue('C20', '=MODE(C2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('C22', '=COUNTA(C2:C12)')
- ->setCellValue('C23', '=MAXA(C2:C12)')
- ->setCellValue('C24', '=MINA(C2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('C26', '=STDEV(C2:C12)')
- ->setCellValue('C27', '=STDEVA(C2:C12)')
- ->setCellValue('C28', '=STDEVP(C2:C12)')
- ->setCellValue('C29', '=STDEVPA(C2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('C31', '=DEVSQ(C2:C12)')
- ->setCellValue('C32', '=VAR(C2:C12)')
- ->setCellValue('C33', '=VARA(C2:C12)')
- ->setCellValue('C34', '=VARP(C2:C12)')
- ->setCellValue('C35', '=VARPA(C2:C12)');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Range 3')
- ->setCellValue('D2', 2)
- ->setCellValue('D3', 3)
- ->setCellValue('D4', 4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('D14', '=((D2 * D3) + D4) & " should be 10"');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E12', 'Other functions')
- ->setCellValue('E14', '=PI()')
- ->setCellValue('E15', '=RAND()')
- ->setCellValue('E16', '=RANDBETWEEN(5, 10)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E17', 'Count of both ranges:')
- ->setCellValue('F17', '=COUNT(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E18', 'Total of both ranges:')
- ->setCellValue('F18', '=SUM(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E19', 'Maximum of both ranges:')
- ->setCellValue('F19', '=MAX(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E20', 'Minimum of both ranges:')
- ->setCellValue('F20', '=MIN(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E21', 'Average of both ranges:')
- ->setCellValue('F21', '=AVERAGE(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E22', 'Median of both ranges:')
- ->setCellValue('F22', '=MEDIAN(B2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E23', 'Mode of both ranges:')
- ->setCellValue('F23', '=MODE(B2:C12)');
-
-
-// Calculated data
-echo date('H:i:s') , " Calculated data" , EOL;
-for ($col = 'B'; $col != 'G'; ++$col) {
- for($row = 14; $row <= 41; ++$row) {
- if ((!is_null($formula = $objPHPExcel->getActiveSheet()->getCell($col.$row)->getValue())) &&
- ($formula[0] == '=')) {
- echo 'Value of ' , $col , $row , ' [' , $formula , ']: ' ,
- $objPHPExcel->getActiveSheet()->getCell($col.$row)->getCalculatedValue() . EOL;
- }
- }
-}
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-
-//
-// If we set Pre Calculated Formulas to true then PHPExcel will calculate all formulae in the
-// workbook before saving. This adds time and memory overhead, and can cause some problems with formulae
-// using functions or features (such as array formulae) that aren't yet supported by the calculation engine
-// If the value is false (the default) for the Excel2007 Writer, then MS Excel (or the application used to
-// open the file) will need to recalculate values itself to guarantee that the correct results are available.
-//
-//$objWriter->setPreCalculateFormulas(true);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/14excel5.php b/htdocs/includes/phpoffice/phpexcel/Examples/14excel5.php
deleted file mode 100644
index 3fd3d69f328..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/14excel5.php
+++ /dev/null
@@ -1,63 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation-xls.php
deleted file mode 100644
index 2f8fa5ee9d8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation-xls.php
+++ /dev/null
@@ -1,142 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Cell B3 and B5 contain data validation...")
- ->setCellValue('A3', "Number:")
- ->setCellValue('B3', "10")
- ->setCellValue('A5', "List:")
- ->setCellValue('B5', "Item A")
- ->setCellValue('A7', "List #2:")
- ->setCellValue('B7', "Item #2")
- ->setCellValue('D2', "Item #1")
- ->setCellValue('D3', "Item #2")
- ->setCellValue('D4', "Item #3")
- ->setCellValue('D5', "Item #4")
- ->setCellValue('D6', "Item #5")
- ;
-
-
-// Set data validation
-echo date('H:i:s') , " Set data validation" , EOL;
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
-$objValidation->setAllowBlank(true);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Only numbers between 10 and 20 are allowed!');
-$objValidation->setPromptTitle('Allowed input');
-$objValidation->setPrompt('Only numbers between 10 and 20 are allowed.');
-$objValidation->setFormula1(10);
-$objValidation->setFormula2(20);
-
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
-$objValidation->setAllowBlank(false);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setShowDropDown(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Value is not in list.');
-$objValidation->setPromptTitle('Pick from list');
-$objValidation->setPrompt('Please pick a value from the drop-down list.');
-$objValidation->setFormula1('"Item A,Item B,Item C"'); // Make sure to put the list items between " and " !!!
-
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B7')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
-$objValidation->setAllowBlank(false);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setShowDropDown(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Value is not in list.');
-$objValidation->setPromptTitle('Pick from list');
-$objValidation->setPrompt('Please pick a value from the drop-down list.');
-$objValidation->setFormula1('$D$2:$D$6'); // Make sure NOT to put a range of cells or a formula between " and " !!!
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation.php b/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation.php
deleted file mode 100644
index 932bacc6fa0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/15datavalidation.php
+++ /dev/null
@@ -1,143 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Create a first sheet
-echo date('H:i:s') , " Add data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', "Cell B3 and B5 contain data validation...")
- ->setCellValue('A3', "Number:")
- ->setCellValue('B3', "10")
- ->setCellValue('A5', "List:")
- ->setCellValue('B5', "Item A")
- ->setCellValue('A7', "List #2:")
- ->setCellValue('B7', "Item #2")
- ->setCellValue('D2', "Item #1")
- ->setCellValue('D3', "Item #2")
- ->setCellValue('D4', "Item #3")
- ->setCellValue('D5', "Item #4")
- ->setCellValue('D6', "Item #5")
- ;
-
-
-// Set data validation
-echo date('H:i:s') , " Set data validation" , EOL;
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B3')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_WHOLE );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_STOP );
-$objValidation->setAllowBlank(true);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Only numbers between 10 and 20 are allowed!');
-$objValidation->setPromptTitle('Allowed input');
-$objValidation->setPrompt('Only numbers between 10 and 20 are allowed.');
-$objValidation->setFormula1(10);
-$objValidation->setFormula2(20);
-
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
-$objValidation->setAllowBlank(false);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setShowDropDown(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Value is not in list.');
-$objValidation->setPromptTitle('Pick from list');
-$objValidation->setPrompt('Please pick a value from the drop-down list.');
-$objValidation->setFormula1('"Item A,Item B,Item C"'); // Make sure to put the list items between " and " if your list is simply a comma-separated list of values !!!
-
-
-$objValidation = $objPHPExcel->getActiveSheet()->getCell('B7')->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
-$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
-$objValidation->setAllowBlank(false);
-$objValidation->setShowInputMessage(true);
-$objValidation->setShowErrorMessage(true);
-$objValidation->setShowDropDown(true);
-$objValidation->setErrorTitle('Input error');
-$objValidation->setError('Value is not in list.');
-$objValidation->setPromptTitle('Pick from list');
-$objValidation->setPrompt('Please pick a value from the drop-down list.');
-$objValidation->setFormula1('$D$2:$D$6'); // Make sure NOT to put a range of cells or a formula between " and " !!!
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/16csv.php b/htdocs/includes/phpoffice/phpexcel/Examples/16csv.php
deleted file mode 100644
index 71ebfd00dcc..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/16csv.php
+++ /dev/null
@@ -1,107 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** PHPExcel_IOFactory */
-require_once '../Classes/PHPExcel/IOFactory.php';
-
-
-echo date('H:i:s') , " Write to CSV format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV')->setDelimiter(',')
- ->setEnclosure('"')
- ->setLineEnding("\r\n")
- ->setSheetIndex(0)
- ->save(str_replace('.php', '.csv', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo date('H:i:s') , " File written to " , str_replace('.php', '.csv', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Read from CSV format" , EOL;
-$callStartTime = microtime(true);
-$objReader = PHPExcel_IOFactory::createReader('CSV')->setDelimiter(',')
- ->setEnclosure('"')
- ->setLineEnding("\r\n")
- ->setSheetIndex(0);
-$objPHPExcelFromCSV = $objReader->load(str_replace('.php', '.csv', __FILE__));
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to reload Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter2007 = PHPExcel_IOFactory::createWriter($objPHPExcelFromCSV, 'Excel2007');
-$objWriter2007->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Write to CSV format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriterCSV = PHPExcel_IOFactory::createWriter($objPHPExcelFromCSV, 'CSV');
-$objWriterCSV->setExcelCompatibility(true);
-$objWriterCSV->save(str_replace('.php', '_excel.csv', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo date('H:i:s') , " File written to " , str_replace('.php', '_excel.csv', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/17html.php b/htdocs/includes/phpoffice/phpexcel/Examples/17html.php
deleted file mode 100644
index 0dc825b04a1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/17html.php
+++ /dev/null
@@ -1,64 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-echo date('H:i:s') , " Write to HTML format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML');
-$objWriter->setSheetIndex(0);
-//$objWriter->setImagesRoot('http://www.example.com');
-$objWriter->save(str_replace('.php', '.htm', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo date('H:i:s') , " File written to " , str_replace('.php', '.htm', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/18extendedcalculation.php b/htdocs/includes/phpoffice/phpexcel/Examples/18extendedcalculation.php
deleted file mode 100644
index 3c6fcb49227..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/18extendedcalculation.php
+++ /dev/null
@@ -1,108 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// List functions
-echo date('H:i:s') . " List implemented functions\n";
-$objCalc = PHPExcel_Calculation::getInstance();
-print_r($objCalc->listFunctionNames());
-
-// Create new PHPExcel object
-echo date('H:i:s') . " Create new PHPExcel object\n";
-$objPHPExcel = new PHPExcel();
-
-// Add some data, we will use some formulas here
-echo date('H:i:s') . " Add some data\n";
-$objPHPExcel->getActiveSheet()->setCellValue('A14', 'Count:');
-
-$objPHPExcel->getActiveSheet()->setCellValue('B1', 'Range 1');
-$objPHPExcel->getActiveSheet()->setCellValue('B2', 2);
-$objPHPExcel->getActiveSheet()->setCellValue('B3', 8);
-$objPHPExcel->getActiveSheet()->setCellValue('B4', 10);
-$objPHPExcel->getActiveSheet()->setCellValue('B5', True);
-$objPHPExcel->getActiveSheet()->setCellValue('B6', False);
-$objPHPExcel->getActiveSheet()->setCellValue('B7', 'Text String');
-$objPHPExcel->getActiveSheet()->setCellValue('B9', '22');
-$objPHPExcel->getActiveSheet()->setCellValue('B10', 4);
-$objPHPExcel->getActiveSheet()->setCellValue('B11', 6);
-$objPHPExcel->getActiveSheet()->setCellValue('B12', 12);
-
-$objPHPExcel->getActiveSheet()->setCellValue('B14', '=COUNT(B2:B12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('C1', 'Range 2');
-$objPHPExcel->getActiveSheet()->setCellValue('C2', 1);
-$objPHPExcel->getActiveSheet()->setCellValue('C3', 2);
-$objPHPExcel->getActiveSheet()->setCellValue('C4', 2);
-$objPHPExcel->getActiveSheet()->setCellValue('C5', 3);
-$objPHPExcel->getActiveSheet()->setCellValue('C6', 3);
-$objPHPExcel->getActiveSheet()->setCellValue('C7', 3);
-$objPHPExcel->getActiveSheet()->setCellValue('C8', '0');
-$objPHPExcel->getActiveSheet()->setCellValue('C9', 4);
-$objPHPExcel->getActiveSheet()->setCellValue('C10', 4);
-$objPHPExcel->getActiveSheet()->setCellValue('C11', 4);
-$objPHPExcel->getActiveSheet()->setCellValue('C12', 4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('C14', '=COUNT(C2:C12)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('D1', 'Range 3');
-$objPHPExcel->getActiveSheet()->setCellValue('D2', 2);
-$objPHPExcel->getActiveSheet()->setCellValue('D3', 3);
-$objPHPExcel->getActiveSheet()->setCellValue('D4', 4);
-
-$objPHPExcel->getActiveSheet()->setCellValue('D5', '=((D2 * D3) + D4) & " should be 10"');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E1', 'Other functions');
-$objPHPExcel->getActiveSheet()->setCellValue('E2', '=PI()');
-$objPHPExcel->getActiveSheet()->setCellValue('E3', '=RAND()');
-$objPHPExcel->getActiveSheet()->setCellValue('E4', '=RANDBETWEEN(5, 10)');
-
-$objPHPExcel->getActiveSheet()->setCellValue('E14', 'Count of both ranges:');
-$objPHPExcel->getActiveSheet()->setCellValue('F14', '=COUNT(B2:C12)');
-
-// Calculated data
-echo date('H:i:s') . " Calculated data\n";
-echo 'Value of B14 [=COUNT(B2:B12)]: ' . $objPHPExcel->getActiveSheet()->getCell('B14')->getCalculatedValue() . "\r\n";
-
-
-// Echo memory peak usage
-echo date('H:i:s') . " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB\r\n";
-
-// Echo done
-echo date('H:i:s') . " Done" , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/19namedrange.php b/htdocs/includes/phpoffice/phpexcel/Examples/19namedrange.php
deleted file mode 100644
index acea22b6d72..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/19namedrange.php
+++ /dev/null
@@ -1,129 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Firstname:')
- ->setCellValue('A2', 'Lastname:')
- ->setCellValue('A3', 'Fullname:')
- ->setCellValue('B1', 'Maarten')
- ->setCellValue('B2', 'Balliauw')
- ->setCellValue('B3', '=B1 & " " & B2');
-
-// Define named ranges
-echo date('H:i:s') , " Define named ranges" , EOL;
-$objPHPExcel->addNamedRange( new PHPExcel_NamedRange('PersonName', $objPHPExcel->getActiveSheet(), 'B1') );
-$objPHPExcel->addNamedRange( new PHPExcel_NamedRange('PersonLN', $objPHPExcel->getActiveSheet(), 'B2') );
-
-// Rename named ranges
-echo date('H:i:s') , " Rename named ranges" , EOL;
-$objPHPExcel->getNamedRange('PersonName')->setName('PersonFN');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Person');
-
-
-// Create a new worksheet, after the default sheet
-echo date('H:i:s') , " Create new Worksheet object" , EOL;
-$objPHPExcel->createSheet();
-
-// Add some data to the second sheet, resembling some different data types
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(1);
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'Firstname:')
- ->setCellValue('A2', 'Lastname:')
- ->setCellValue('A3', 'Fullname:')
- ->setCellValue('B1', '=PersonFN')
- ->setCellValue('B2', '=PersonLN')
- ->setCellValue('B3', '=PersonFN & " " & PersonLN');
-
-// Resolve range
-echo date('H:i:s') , " Resolve range" , EOL;
-echo 'Cell B1 {=PersonFN}: ' , $objPHPExcel->getActiveSheet()->getCell('B1')->getCalculatedValue() , EOL;
-echo 'Cell B3 {=PersonFN & " " & PersonLN}: ' , $objPHPExcel->getActiveSheet()->getCell('B3')->getCalculatedValue() , EOL;
-echo 'Cell Person!B1: ' , $objPHPExcel->getActiveSheet()->getCell('Person!B1')->getCalculatedValue() , EOL;
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Person (cloned)');
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/20readexcel5.php b/htdocs/includes/phpoffice/phpexcel/Examples/20readexcel5.php
deleted file mode 100644
index 98eff9ec1b1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/20readexcel5.php
+++ /dev/null
@@ -1,79 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-if (!file_exists("14excel5.xls")) {
- exit("Please run 14excel5.php first.\n");
-}
-
-echo date('H:i:s') , " Load workbook from Excel5 file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcel = PHPExcel_IOFactory::load("14excel5.xls");
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo 'Call time to load Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done reading file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/21pdf.php b/htdocs/includes/phpoffice/phpexcel/Examples/21pdf.php
deleted file mode 100644
index 11c56b2caf0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/21pdf.php
+++ /dev/null
@@ -1,94 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-// Change these values to select the Rendering library that you wish to use
-// and its directory location on your server
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
-$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
-//$rendererLibrary = 'tcPDF5.9';
-//$rendererLibrary = 'mPDF5.4';
-$rendererLibrary = 'domPDF0.6.0beta3';
-$rendererLibraryPath = '/php/libraries/PDF/' . $rendererLibrary;
-
-
-echo date('H:i:s') , " Hide grid lines" , EOL;
-$objPHPExcel->getActiveSheet()->setShowGridLines(false);
-
-echo date('H:i:s') , " Set orientation to landscape" , EOL;
-$objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
-
-
-echo date('H:i:s') , " Write to PDF format using {$rendererName}" , EOL;
-
-if (!PHPExcel_Settings::setPdfRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
-$objWriter->setSheetIndex(0);
-$objWriter->save(str_replace('.php', '_'.$rendererName.'.pdf', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo date('H:i:s') , " File written to " , str_replace('.php', '_'.$rendererName.'.pdf', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/22heavilyformatted.php b/htdocs/includes/phpoffice/phpexcel/Examples/22heavilyformatted.php
deleted file mode 100644
index c17bc8683ae..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/22heavilyformatted.php
+++ /dev/null
@@ -1,116 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-
-$objPHPExcel->getActiveSheet()->getStyle('A1:T100')->applyFromArray(
- array('fill' => array(
- 'type' => PHPExcel_Style_Fill::FILL_SOLID,
- 'color' => array('argb' => 'FFCCFFCC')
- ),
- 'borders' => array(
- 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
- 'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
- )
- )
- );
-
-$objPHPExcel->getActiveSheet()->getStyle('C5:R95')->applyFromArray(
- array('fill' => array(
- 'type' => PHPExcel_Style_Fill::FILL_SOLID,
- 'color' => array('argb' => 'FFFFFF00')
- ),
- )
- );
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/23sharedstyles.php b/htdocs/includes/phpoffice/phpexcel/Examples/23sharedstyles.php
deleted file mode 100644
index 652b4ed2f27..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/23sharedstyles.php
+++ /dev/null
@@ -1,124 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0);
-
-$sharedStyle1 = new PHPExcel_Style();
-$sharedStyle2 = new PHPExcel_Style();
-
-$sharedStyle1->applyFromArray(
- array('fill' => array(
- 'type' => PHPExcel_Style_Fill::FILL_SOLID,
- 'color' => array('argb' => 'FFCCFFCC')
- ),
- 'borders' => array(
- 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
- 'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
- )
- ));
-
-$sharedStyle2->applyFromArray(
- array('fill' => array(
- 'type' => PHPExcel_Style_Fill::FILL_SOLID,
- 'color' => array('argb' => 'FFFFFF00')
- ),
- 'borders' => array(
- 'bottom' => array('style' => PHPExcel_Style_Border::BORDER_THIN),
- 'right' => array('style' => PHPExcel_Style_Border::BORDER_MEDIUM)
- )
- ));
-
-$objPHPExcel->getActiveSheet()->setSharedStyle($sharedStyle1, "A1:T100");
-$objPHPExcel->getActiveSheet()->setSharedStyle($sharedStyle2, "C5:R95");
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/24readfilter.php b/htdocs/includes/phpoffice/phpexcel/Examples/24readfilter.php
deleted file mode 100644
index afa6d0c416c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/24readfilter.php
+++ /dev/null
@@ -1,77 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-// Check prerequisites
-if (!file_exists("06largescale.xlsx")) {
- exit("Please run 06largescale.php first.\n");
-}
-
-class MyReadFilter implements PHPExcel_Reader_IReadFilter
-{
- public function readCell($column, $row, $worksheetName = '') {
- // Read title row and rows 20 - 30
- if ($row == 1 || ($row >= 20 && $row <= 30)) {
- return true;
- }
-
- return false;
- }
-}
-
-
-echo date('H:i:s') , " Load from Excel2007 file" , EOL;
-$objReader = PHPExcel_IOFactory::createReader('Excel2007');
-$objReader->setReadFilter( new MyReadFilter() );
-$objPHPExcel = $objReader->load("06largescale.xlsx");
-
-echo date('H:i:s') , " Remove unnecessary rows" , EOL;
-$objPHPExcel->getActiveSheet()->removeRow(2, 18);
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/25inmemoryimage.php b/htdocs/includes/phpoffice/phpexcel/Examples/25inmemoryimage.php
deleted file mode 100644
index 7a3424e2088..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/25inmemoryimage.php
+++ /dev/null
@@ -1,83 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-// Generate an image
-echo date('H:i:s') , " Generate an image" , EOL;
-$gdImage = @imagecreatetruecolor(120, 20) or die('Cannot Initialize new GD image stream');
-$textColor = imagecolorallocate($gdImage, 255, 255, 255);
-imagestring($gdImage, 1, 5, 5, 'Created with PHPExcel', $textColor);
-
-// Add a drawing to the worksheet
-echo date('H:i:s') , " Add a drawing to the worksheet" , EOL;
-$objDrawing = new PHPExcel_Worksheet_MemoryDrawing();
-$objDrawing->setName('Sample image');
-$objDrawing->setDescription('Sample image');
-$objDrawing->setImageResource($gdImage);
-$objDrawing->setRenderingFunction(PHPExcel_Worksheet_MemoryDrawing::RENDERING_JPEG);
-$objDrawing->setMimeType(PHPExcel_Worksheet_MemoryDrawing::MIMETYPE_DEFAULT);
-$objDrawing->setHeight(36);
-$objDrawing->setWorksheet($objPHPExcel->getActiveSheet());
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/26utf8.php b/htdocs/includes/phpoffice/phpexcel/Examples/26utf8.php
deleted file mode 100644
index ad0b400594e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/26utf8.php
+++ /dev/null
@@ -1,122 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Change these values to select the PDF Rendering library that you wish to use
-// and its directory location on your server
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
-$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
-//$rendererLibrary = 'tcPDF5.9';
-//$rendererLibrary = 'mPDF5.4';
-$rendererLibrary = 'domPDF0.6.0beta3';
-$rendererLibraryPath = '/php/libraries/PDF/' . $rendererLibrary;
-
-
-// Read from Excel2007 (.xlsx) template
-echo date('H:i:s') , " Load Excel2007 template file" , EOL;
-$objReader = PHPExcel_IOFactory::createReader('Excel2007');
-$objPHPExcel = $objReader->load("templates/26template.xlsx");
-
-/** at this point, we could do some manipulations with the template, but we skip this step */
-
-// Export to Excel2007 (.xlsx)
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Export to Excel5 (.xls)
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Export to HTML (.html)
-echo date('H:i:s') , " Write to HTML format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML');
-$objWriter->save(str_replace('.php', '.htm', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.htm', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Export to PDF (.pdf)
-echo date('H:i:s') , " Write to PDF format" , EOL;
-try {
- if (!PHPExcel_Settings::setPdfRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- echo (
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure' .
- EOL
- );
- } else {
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
- $objWriter->save(str_replace('.php', '.pdf', __FILE__));
- echo date('H:i:s') , " File written to " , str_replace('.php', '.pdf', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
- }
-} catch (Exception $e) {
- echo date('H:i:s') , ' EXCEPTION: ', $e->getMessage() , EOL;
-}
-
-// Remove first two rows with field headers before exporting to CSV
-echo date('H:i:s') , " Removing first two heading rows for CSV export" , EOL;
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->removeRow(1, 2);
-
-// Export to CSV (.csv)
-echo date('H:i:s') , " Write to CSV format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
-$objWriter->save(str_replace('.php', '.csv', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.csv', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Export to CSV with BOM (.csv)
-echo date('H:i:s') , " Write to CSV format (with BOM)" , EOL;
-$objWriter->setUseBOM(true);
-$objWriter->save(str_replace('.php', '-bom.csv', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '-bom.csv', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/27imagesexcel5.php b/htdocs/includes/phpoffice/phpexcel/Examples/27imagesexcel5.php
deleted file mode 100644
index 17db771c3b4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/27imagesexcel5.php
+++ /dev/null
@@ -1,64 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Read from Excel5 (.xls) template
-echo date('H:i:s') , " Load Excel2007 template file" , EOL;
-$objReader = PHPExcel_IOFactory::createReader('Excel5');
-$objPHPExcel = $objReader->load("templates/27template.xls");
-
-// Export to Excel2007 (.xlsx)
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Export to Excel5 (.xls)
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/28iterator.php b/htdocs/includes/phpoffice/phpexcel/Examples/28iterator.php
deleted file mode 100644
index 3e1e681de37..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/28iterator.php
+++ /dev/null
@@ -1,68 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-if (!file_exists("05featuredemo.xlsx")) {
- exit("Please run 05featuredemo.php first." . EOL);
-}
-
-echo date('H:i:s') , " Load from Excel2007 file" , EOL;
-$objReader = PHPExcel_IOFactory::createReader('Excel2007');
-$objPHPExcel = $objReader->load("05featuredemo.xlsx");
-
-echo date('H:i:s') , " Iterate worksheets" , EOL;
-foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
- echo 'Worksheet - ' , $worksheet->getTitle() , EOL;
-
- foreach ($worksheet->getRowIterator() as $row) {
- echo ' Row number - ' , $row->getRowIndex() , EOL;
-
- $cellIterator = $row->getCellIterator();
- $cellIterator->setIterateOnlyExistingCells(false); // Loop all cells, even if it is not set
- foreach ($cellIterator as $cell) {
- if (!is_null($cell)) {
- echo ' Cell - ' , $cell->getCoordinate() , ' - ' , $cell->getCalculatedValue() , EOL;
- }
- }
- }
-}
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/29advancedvaluebinder.php b/htdocs/includes/phpoffice/phpexcel/Examples/29advancedvaluebinder.php
deleted file mode 100644
index bb387f9cd1d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/29advancedvaluebinder.php
+++ /dev/null
@@ -1,183 +0,0 @@
-');
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Set timezone
-echo date('H:i:s') , " Set timezone" , EOL;
-date_default_timezone_set('UTC');
-
-// Set value binder
-echo date('H:i:s') , " Set value binder" , EOL;
-PHPExcel_Cell::setValueBinder( new PHPExcel_Cell_AdvancedValueBinder() );
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
- ->setKeywords("office 2007 openxml php")
- ->setCategory("Test result file");
-
-// Set default font
-echo date('H:i:s') , " Set default font" , EOL;
-$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setName('Arial');
-$objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);
-
-// Set column widths
-echo date('H:i:s') , " Set column widths" , EOL;
-$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(true);
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(14);
-
-// Add some data, resembling some different data types
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->getActiveSheet()->setCellValue('A1', 'String value:')
- ->setCellValue('B1', 'Mark Baker');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A2', 'Numeric value #1:')
- ->setCellValue('B2', 12345);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A3', 'Numeric value #2:')
- ->setCellValue('B3', -12.345);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A4', 'Numeric value #3:')
- ->setCellValue('B4', .12345);
-
-$objPHPExcel->getActiveSheet()->setCellValue('A5', 'Numeric value #4:')
- ->setCellValue('B5', '12345');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A6', 'Numeric value #5:')
- ->setCellValue('B6', '1.2345');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A7', 'Numeric value #6:')
- ->setCellValue('B7', '.12345');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8', 'Numeric value #7:')
- ->setCellValue('B8', '1.234e-5');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A9', 'Numeric value #8:')
- ->setCellValue('B9', '-1.234e+5');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A10', 'Boolean value:')
- ->setCellValue('B10', 'TRUE');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A11', 'Percentage value #1:')
- ->setCellValue('B11', '10%');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A12', 'Percentage value #2:')
- ->setCellValue('B12', '12.5%');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A13', 'Fraction value #1:')
- ->setCellValue('B13', '-1/2');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A14', 'Fraction value #2:')
- ->setCellValue('B14', '3 1/2');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A15', 'Fraction value #3:')
- ->setCellValue('B15', '-12 3/4');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A16', 'Fraction value #4:')
- ->setCellValue('B16', '13/4');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A17', 'Currency value #1:')
- ->setCellValue('B17', '$12345');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A18', 'Currency value #2:')
- ->setCellValue('B18', '$12345.67');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A19', 'Currency value #3:')
- ->setCellValue('B19', '$12,345.67');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A20', 'Date value #1:')
- ->setCellValue('B20', '21 December 1983');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A21', 'Date value #2:')
- ->setCellValue('B21', '19-Dec-1960');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A22', 'Date value #3:')
- ->setCellValue('B22', '07/12/1982');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A23', 'Date value #4:')
- ->setCellValue('B23', '24-11-1950');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A24', 'Date value #5:')
- ->setCellValue('B24', '17-Mar');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A25', 'Time value #1:')
- ->setCellValue('B25', '01:30');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A26', 'Time value #2:')
- ->setCellValue('B26', '01:30:15');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A27', 'Date/Time value:')
- ->setCellValue('B27', '19-Dec-1960 01:30');
-
-$objPHPExcel->getActiveSheet()->setCellValue('A28', 'Formula:')
- ->setCellValue('B28', '=SUM(B2:B9)');
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Advanced value binder');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-// Save Excel5 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/30template.php b/htdocs/includes/phpoffice/phpexcel/Examples/30template.php
deleted file mode 100644
index 2b66c2ceb41..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/30template.php
+++ /dev/null
@@ -1,91 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-
-echo date('H:i:s') , " Load from Excel5 template" , EOL;
-$objReader = PHPExcel_IOFactory::createReader('Excel5');
-$objPHPExcel = $objReader->load("templates/30template.xls");
-
-
-
-
-echo date('H:i:s') , " Add new data to the template" , EOL;
-$data = array(array('title' => 'Excel for dummies',
- 'price' => 17.99,
- 'quantity' => 2
- ),
- array('title' => 'PHP for dummies',
- 'price' => 15.99,
- 'quantity' => 1
- ),
- array('title' => 'Inside OOP',
- 'price' => 12.95,
- 'quantity' => 1
- )
- );
-
-$objPHPExcel->getActiveSheet()->setCellValue('D1', PHPExcel_Shared_Date::PHPToExcel(time()));
-
-$baseRow = 5;
-foreach($data as $r => $dataRow) {
- $row = $baseRow + $r;
- $objPHPExcel->getActiveSheet()->insertNewRowBefore($row,1);
-
- $objPHPExcel->getActiveSheet()->setCellValue('A'.$row, $r+1)
- ->setCellValue('B'.$row, $dataRow['title'])
- ->setCellValue('C'.$row, $dataRow['price'])
- ->setCellValue('D'.$row, $dataRow['quantity'])
- ->setCellValue('E'.$row, '=C'.$row.'*D'.$row);
-}
-$objPHPExcel->getActiveSheet()->removeRow($baseRow-1,1);
-
-
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write-xls.php b/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write-xls.php
deleted file mode 100644
index f3ad0a4bdb7..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write-xls.php
+++ /dev/null
@@ -1,119 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$inputFileType = 'Excel5';
-$inputFileName = 'templates/31docproperties.xls';
-
-
-echo date('H:i:s') , " Load Tests from $inputFileType file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
-$objPHPExcel = $objPHPExcelReader->load($inputFileName);
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Adjust properties" , EOL;
-$objPHPExcel->getProperties()->setTitle("Office 95 XLS Test Document")
- ->setSubject("Office 95 XLS Test Document")
- ->setDescription("Test XLS document, generated using PHPExcel")
- ->setKeywords("office 95 biff php");
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB" , EOL;
-
-
-echo EOL;
-// Reread File
-echo date('H:i:s') , " Reread Excel5 file" , EOL;
-$objPHPExcelRead = PHPExcel_IOFactory::load(str_replace('.php', '.xls', __FILE__));
-
-// Set properties
-echo date('H:i:s') , " Get properties" , EOL;
-
-echo 'Core Properties:' , EOL;
-echo ' Created by - ' , $objPHPExcel->getProperties()->getCreator() , EOL;
-echo ' Created on - ' , date('d-M-Y',$objPHPExcel->getProperties()->getCreated()) , ' at ' ,
- date('H:i:s',$objPHPExcel->getProperties()->getCreated()) , EOL;
-echo ' Last Modified by - ' , $objPHPExcel->getProperties()->getLastModifiedBy() , EOL;
-echo ' Last Modified on - ' , date('d-M-Y',$objPHPExcel->getProperties()->getModified()) , ' at ' ,
- date('H:i:s',$objPHPExcel->getProperties()->getModified()) , EOL;
-echo ' Title - ' , $objPHPExcel->getProperties()->getTitle() , EOL;
-echo ' Subject - ' , $objPHPExcel->getProperties()->getSubject() , EOL;
-echo ' Description - ' , $objPHPExcel->getProperties()->getDescription() , EOL;
-echo ' Keywords: - ' , $objPHPExcel->getProperties()->getKeywords() , EOL;
-
-
-echo 'Extended (Application) Properties:' , EOL;
-echo ' Category - ' , $objPHPExcel->getProperties()->getCategory() , EOL;
-echo ' Company - ' , $objPHPExcel->getProperties()->getCompany() , EOL;
-echo ' Manager - ' , $objPHPExcel->getProperties()->getManager() , EOL;
-
-
-echo 'Custom Properties:' , EOL;
-$customProperties = $objPHPExcel->getProperties()->getCustomProperties();
-foreach($customProperties as $customProperty) {
- $propertyValue = $objPHPExcel->getProperties()->getCustomPropertyValue($customProperty);
- $propertyType = $objPHPExcel->getProperties()->getCustomPropertyType($customProperty);
- echo ' ' , $customProperty , ' - (' , $propertyType , ') - ';
- if ($propertyType == PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE) {
- echo date('d-M-Y H:i:s',$propertyValue) , EOL;
- } elseif ($propertyType == PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN) {
- echo (($propertyValue) ? 'TRUE' : 'FALSE') , EOL;
- } else {
- echo $propertyValue , EOL;
- }
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) . " MB" , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write.php b/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write.php
deleted file mode 100644
index 3f5328c5ec3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/31docproperties_write.php
+++ /dev/null
@@ -1,119 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$inputFileType = 'Excel2007';
-$inputFileName = 'templates/31docproperties.xlsx';
-
-
-echo date('H:i:s') , " Load Tests from $inputFileType file" , EOL;
-$callStartTime = microtime(true);
-
-$objPHPExcelReader = PHPExcel_IOFactory::createReader($inputFileType);
-$objPHPExcel = $objPHPExcelReader->load($inputFileName);
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-echo date('H:i:s') , " Adjust properties" , EOL;
-$objPHPExcel->getProperties()->setTitle("Office 2007 XLSX Test Document")
- ->setSubject("Office 2007 XLSX Test Document")
- ->setDescription("Test XLSX document, generated using PHPExcel")
- ->setKeywords("office 2007 openxml php");
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " . (memory_get_peak_usage(true) / 1024 / 1024) . " MB" , EOL;
-
-
-echo EOL;
-// Reread File
-echo date('H:i:s') , " Reread Excel2007 file" , EOL;
-$objPHPExcelRead = PHPExcel_IOFactory::load(str_replace('.php', '.xlsx', __FILE__));
-
-// Set properties
-echo date('H:i:s') , " Get properties" , EOL;
-
-echo 'Core Properties:' , EOL;
-echo ' Created by - ' , $objPHPExcel->getProperties()->getCreator() , EOL;
-echo ' Created on - ' , date('d-M-Y',$objPHPExcel->getProperties()->getCreated()) , ' at ' ,
- date('H:i:s',$objPHPExcel->getProperties()->getCreated()) , EOL;
-echo ' Last Modified by - ' , $objPHPExcel->getProperties()->getLastModifiedBy() , EOL;
-echo ' Last Modified on - ' , date('d-M-Y',$objPHPExcel->getProperties()->getModified()) , ' at ' ,
- date('H:i:s',$objPHPExcel->getProperties()->getModified()) , EOL;
-echo ' Title - ' , $objPHPExcel->getProperties()->getTitle() , EOL;
-echo ' Subject - ' , $objPHPExcel->getProperties()->getSubject() , EOL;
-echo ' Description - ' , $objPHPExcel->getProperties()->getDescription() , EOL;
-echo ' Keywords: - ' , $objPHPExcel->getProperties()->getKeywords() , EOL;
-
-
-echo 'Extended (Application) Properties:' , EOL;
-echo ' Category - ' , $objPHPExcel->getProperties()->getCategory() , EOL;
-echo ' Company - ' , $objPHPExcel->getProperties()->getCompany() , EOL;
-echo ' Manager - ' , $objPHPExcel->getProperties()->getManager() , EOL;
-
-
-echo 'Custom Properties:' , EOL;
-$customProperties = $objPHPExcel->getProperties()->getCustomProperties();
-foreach($customProperties as $customProperty) {
- $propertyValue = $objPHPExcel->getProperties()->getCustomPropertyValue($customProperty);
- $propertyType = $objPHPExcel->getProperties()->getCustomPropertyType($customProperty);
- echo ' ' , $customProperty , ' - (' , $propertyType , ') - ';
- if ($propertyType == PHPExcel_DocumentProperties::PROPERTY_TYPE_DATE) {
- echo date('d-M-Y H:i:s',$propertyValue) , EOL;
- } elseif ($propertyType == PHPExcel_DocumentProperties::PROPERTY_TYPE_BOOLEAN) {
- echo (($propertyValue) ? 'TRUE' : 'FALSE') , EOL;
- } else {
- echo $propertyValue , EOL;
- }
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) . " MB" , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/32chartreadwrite.php b/htdocs/includes/phpoffice/phpexcel/Examples/32chartreadwrite.php
deleted file mode 100644
index be1925a5b4f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/32chartreadwrite.php
+++ /dev/null
@@ -1,131 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** Include path **/
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../Classes/');
-
-/** PHPExcel_IOFactory */
-include 'PHPExcel/IOFactory.php';
-
-$inputFileType = 'Excel2007';
-$inputFileNames = 'templates/32readwrite*[0-9].xlsx';
-
-if ((isset($argc)) && ($argc > 1)) {
- $inputFileNames = array();
- for($i = 1; $i < $argc; ++$i) {
- $inputFileNames[] = dirname(__FILE__) . '/templates/' . $argv[$i];
- }
-} else {
- $inputFileNames = glob($inputFileNames);
-}
-foreach($inputFileNames as $inputFileName) {
- $inputFileNameShort = basename($inputFileName);
-
- if (!file_exists($inputFileName)) {
- echo date('H:i:s') , " File " , $inputFileNameShort , ' does not exist' , EOL;
- continue;
- }
-
- echo date('H:i:s') , " Load Test from $inputFileType file " , $inputFileNameShort , EOL;
-
- $objReader = PHPExcel_IOFactory::createReader($inputFileType);
- $objReader->setIncludeCharts(TRUE);
- $objPHPExcel = $objReader->load($inputFileName);
-
-
- echo date('H:i:s') , " Iterate worksheets looking at the charts" , EOL;
- foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
- $sheetName = $worksheet->getTitle();
- echo 'Worksheet: ' , $sheetName , EOL;
-
- $chartNames = $worksheet->getChartNames();
- if(empty($chartNames)) {
- echo ' There are no charts in this worksheet' , EOL;
- } else {
- natsort($chartNames);
- foreach($chartNames as $i => $chartName) {
- $chart = $worksheet->getChartByName($chartName);
- if (!is_null($chart->getTitle())) {
- $caption = '"' . implode(' ',$chart->getTitle()->getCaption()) . '"';
- } else {
- $caption = 'Untitled';
- }
- echo ' ' , $chartName , ' - ' , $caption , EOL;
- echo str_repeat(' ',strlen($chartName)+3);
- $groupCount = $chart->getPlotArea()->getPlotGroupCount();
- if ($groupCount == 1) {
- $chartType = $chart->getPlotArea()->getPlotGroupByIndex(0)->getPlotType();
- echo ' ' , $chartType , EOL;
- } else {
- $chartTypes = array();
- for($i = 0; $i < $groupCount; ++$i) {
- $chartTypes[] = $chart->getPlotArea()->getPlotGroupByIndex($i)->getPlotType();
- }
- $chartTypes = array_unique($chartTypes);
- if (count($chartTypes) == 1) {
- $chartType = 'Multiple Plot ' . array_pop($chartTypes);
- echo ' ' , $chartType , EOL;
- } elseif (count($chartTypes) == 0) {
- echo ' *** Type not yet implemented' , EOL;
- } else {
- echo ' Combination Chart' , EOL;
- }
- }
- }
- }
- }
-
-
- $outputFileName = basename($inputFileName);
-
- echo date('H:i:s') , " Write Tests to Excel2007 file " , EOL;
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
- $objWriter->setIncludeCharts(TRUE);
- $objWriter->save($outputFileName);
- echo date('H:i:s') , " File written to " , $outputFileName , EOL;
-
- $objPHPExcel->disconnectWorksheets();
- unset($objPHPExcel);
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , ' Peak memory usage: ' , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-area.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-area.php
deleted file mode 100644
index 53fe52398d2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-area.php
+++ /dev/null
@@ -1,142 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_AREACHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_PERCENT_STACKED, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test %age-Stacked Area Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar-stacked.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar-stacked.php
deleted file mode 100644
index cac29f29f55..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar-stacked.php
+++ /dev/null
@@ -1,145 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STACKED, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-// Set additional dataseries parameters
-// Make it a horizontal bar rather than a vertical column graph
-$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_BAR);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar.php
deleted file mode 100644
index 14fd5d485f9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-bar.php
+++ /dev/null
@@ -1,145 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-// Set additional dataseries parameters
-// Make it a horizontal bar rather than a vertical column graph
-$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_BAR);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Bar Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column-2.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column-2.php
deleted file mode 100644
index 00bf0d71b50..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column-2.php
+++ /dev/null
@@ -1,154 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', '', 'Budget', 'Forecast', 'Actual'),
- array('2010', 'Q1', 47, 44, 43 ),
- array('', 'Q2', 56, 53, 50 ),
- array('', 'Q3', 52, 46, 45 ),
- array('', 'Q4', 45, 40, 40 ),
- array('2011', 'Q1', 51, 42, 46 ),
- array('', 'Q2', 53, 58, 56 ),
- array('', 'Q3', 64, 66, 69 ),
- array('', 'Q4', 54, 55, 56 ),
- array('2012', 'Q1', 49, 52, 58 ),
- array('', 'Q2', 68, 73, 86 ),
- array('', 'Q3', 72, 78, 0 ),
- array('', 'Q4', 50, 60, 0 ),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 'Budget'
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 'Forecast'
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$E$1', NULL, 1), // 'Actual'
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$B$13', NULL, 12), // Q1 to Q4 for 2010 to 2012
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$13', NULL, 12),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$13', NULL, 12),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$E$2:$E$13', NULL, 12),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-// Set additional dataseries parameters
-// Make it a vertical column rather than a horizontal bar graph
-$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_BOTTOM, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Grouped Column Chart');
-$xAxisLabel = new PHPExcel_Chart_Title('Financial Period');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- $xAxisLabel, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('G2');
-$chart->setBottomRightPosition('P20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column.php
deleted file mode 100644
index ae9c6185e26..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-column.php
+++ /dev/null
@@ -1,145 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-// Set additional dataseries parameters
-// Make it a vertical column rather than a horizontal bar graph
-$series->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Column Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-composite.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-composite.php
deleted file mode 100644
index 8ea72126ccb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-composite.php
+++ /dev/null
@@ -1,203 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 'Rainfall (mm)', 'Temperature (°F)', 'Humidity (%)'),
- array('Jan', 78, 52, 61),
- array('Feb', 64, 54, 62),
- array('Mar', 62, 57, 63),
- array('Apr', 21, 62, 59),
- array('May', 11, 75, 60),
- array('Jun', 1, 75, 57),
- array('Jul', 1, 79, 56),
- array('Aug', 1, 79, 59),
- array('Sep', 10, 75, 60),
- array('Oct', 40, 68, 63),
- array('Nov', 69, 62, 64),
- array('Dec', 89, 57, 66),
- )
-);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels1 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // Temperature
-);
-$dataSeriesLabels2 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // Rainfall
-);
-$dataSeriesLabels3 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // Humidity
-);
-
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$13', NULL, 12), // Jan to Dec
-);
-
-
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues1 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$13', NULL, 12),
-);
-
-// Build the dataseries
-$series1 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_CLUSTERED, // plotGrouping
- range(0, count($dataSeriesValues1)-1), // plotOrder
- $dataSeriesLabels1, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues1 // plotValues
-);
-// Set additional dataseries parameters
-// Make it a vertical column rather than a horizontal bar graph
-$series1->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
-
-
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues2 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$13', NULL, 12),
-);
-
-// Build the dataseries
-$series2 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
- range(0, count($dataSeriesValues2)-1), // plotOrder
- $dataSeriesLabels2, // plotLabel
- NULL, // plotCategory
- $dataSeriesValues2 // plotValues
-);
-
-
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues3 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$13', NULL, 12),
-);
-
-// Build the dataseries
-$series3 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_AREACHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
- range(0, count($dataSeriesValues2)-1), // plotOrder
- $dataSeriesLabels3, // plotLabel
- NULL, // plotCategory
- $dataSeriesValues3 // plotValues
-);
-
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series1, $series2, $series3));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Average Weather Chart for Crete');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- NULL // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('F2');
-$chart->setBottomRightPosition('O16');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-line.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-line.php
deleted file mode 100644
index 145ae72e8fd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-line.php
+++ /dev/null
@@ -1,142 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_LINECHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STACKED, // plotGrouping
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Stacked Line Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-multiple-charts.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-multiple-charts.php
deleted file mode 100644
index a95c2763323..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-multiple-charts.php
+++ /dev/null
@@ -1,220 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels1 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues1 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues1 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series1 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_AREACHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_PERCENT_STACKED, // plotGrouping
- range(0, count($dataSeriesValues1)-1), // plotOrder
- $dataSeriesLabels1, // plotLabel
- $xAxisTickValues1, // plotCategory
- $dataSeriesValues1 // plotValues
-);
-
-// Set the series in the plot area
-$plotArea1 = new PHPExcel_Chart_PlotArea(NULL, array($series1));
-// Set the chart legend
-$legend1 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT, NULL, false);
-
-$title1 = new PHPExcel_Chart_Title('Test %age-Stacked Area Chart');
-$yAxisLabel1 = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart1 = new PHPExcel_Chart(
- 'chart1', // name
- $title1, // title
- $legend1, // legend
- $plotArea1, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel1 // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart1->setTopLeftPosition('A7');
-$chart1->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart1);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels2 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues2 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues2 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series2 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_BARCHART, // plotType
- PHPExcel_Chart_DataSeries::GROUPING_STANDARD, // plotGrouping
- range(0, count($dataSeriesValues2)-1), // plotOrder
- $dataSeriesLabels2, // plotLabel
- $xAxisTickValues2, // plotCategory
- $dataSeriesValues2 // plotValues
-);
-// Set additional dataseries parameters
-// Make it a vertical column rather than a horizontal bar graph
-$series2->setPlotDirection(PHPExcel_Chart_DataSeries::DIRECTION_COL);
-
-// Set the series in the plot area
-$plotArea2 = new PHPExcel_Chart_PlotArea(NULL, array($series2));
-// Set the chart legend
-$legend2 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title2 = new PHPExcel_Chart_Title('Test Column Chart');
-$yAxisLabel2 = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart2 = new PHPExcel_Chart(
- 'chart2', // name
- $title2, // title
- $legend2, // legend
- $plotArea2, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel2 // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart2->setTopLeftPosition('I7');
-$chart2->setBottomRightPosition('P20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart2);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-pie.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-pie.php
deleted file mode 100644
index 5af02905bfc..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-pie.php
+++ /dev/null
@@ -1,215 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels1 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues1 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues1 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
-);
-
-// Build the dataseries
-$series1 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_PIECHART, // plotType
- NULL, // plotGrouping (Pie charts don't have any grouping)
- range(0, count($dataSeriesValues1)-1), // plotOrder
- $dataSeriesLabels1, // plotLabel
- $xAxisTickValues1, // plotCategory
- $dataSeriesValues1 // plotValues
-);
-
-// Set up a layout object for the Pie chart
-$layout1 = new PHPExcel_Chart_Layout();
-$layout1->setShowVal(TRUE);
-$layout1->setShowPercent(TRUE);
-
-// Set the series in the plot area
-$plotArea1 = new PHPExcel_Chart_PlotArea($layout1, array($series1));
-// Set the chart legend
-$legend1 = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title1 = new PHPExcel_Chart_Title('Test Pie Chart');
-
-
-// Create the chart
-$chart1 = new PHPExcel_Chart(
- 'chart1', // name
- $title1, // title
- $legend1, // legend
- $plotArea1, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- NULL // yAxisLabel - Pie charts don't have a Y-Axis
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart1->setTopLeftPosition('A7');
-$chart1->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart1);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels2 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues2 = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues2 = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
-);
-
-// Build the dataseries
-$series2 = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_DONUTCHART, // plotType
- NULL, // plotGrouping (Donut charts don't have any grouping)
- range(0, count($dataSeriesValues2)-1), // plotOrder
- $dataSeriesLabels2, // plotLabel
- $xAxisTickValues2, // plotCategory
- $dataSeriesValues2 // plotValues
-);
-
-// Set up a layout object for the Pie chart
-$layout2 = new PHPExcel_Chart_Layout();
-$layout2->setShowVal(TRUE);
-$layout2->setShowCatName(TRUE);
-
-// Set the series in the plot area
-$plotArea2 = new PHPExcel_Chart_PlotArea($layout2, array($series2));
-
-$title2 = new PHPExcel_Chart_Title('Test Donut Chart');
-
-
-// Create the chart
-$chart2 = new PHPExcel_Chart(
- 'chart2', // name
- $title2, // title
- NULL, // legend
- $plotArea2, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- NULL // yAxisLabel - Like Pie charts, Donut charts don't have a Y-Axis
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart2->setTopLeftPosition('I7');
-$chart2->setBottomRightPosition('P20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart2);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-radar.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-radar.php
deleted file mode 100644
index b8b427f3b12..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-radar.php
+++ /dev/null
@@ -1,154 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Jan', 47, 45, 71),
- array('Feb', 56, 73, 86),
- array('Mar', 52, 61, 69),
- array('Apr', 40, 52, 60),
- array('May', 42, 55, 71),
- array('Jun', 58, 63, 76),
- array('Jul', 53, 61, 89),
- array('Aug', 46, 69, 85),
- array('Sep', 62, 75, 81),
- array('Oct', 51, 70, 96),
- array('Nov', 55, 66, 89),
- array('Dec', 68, 62, 0),
- )
-);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$13', NULL, 12), // Jan to Dec
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$13', NULL, 12), // Jan to Dec
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$13', NULL, 12),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$13', NULL, 12),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_RADARCHART, // plotType
- NULL, // plotGrouping (Radar charts don't have any grouping)
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues, // plotValues
- NULL, // smooth line
- PHPExcel_Chart_DataSeries::STYLE_MARKER // plotStyle
-);
-
-// Set up a layout object for the Pie chart
-$layout = new PHPExcel_Chart_Layout();
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea($layout, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Radar Chart');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- NULL // yAxisLabel - Radar charts don't have a Y-Axis
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('F2');
-$chart->setBottomRightPosition('M15');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-scatter.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-scatter.php
deleted file mode 100644
index 250c61d7e4c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-scatter.php
+++ /dev/null
@@ -1,138 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('', 2010, 2011, 2012),
- array('Q1', 12, 15, 21),
- array('Q2', 56, 73, 86),
- array('Q3', 52, 61, 69),
- array('Q4', 30, 32, 0),
- )
-);
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), // 2010
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), // 2011
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), // 2012
-);
-// Set the X-Axis Labels
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$5', NULL, 4), // Q1 to Q4
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$5', NULL, 4),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$5', NULL, 4),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_SCATTERCHART, // plotType
- NULL, // plotGrouping (Scatter charts don't have any grouping)
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues, // plotValues
- NULL, // smooth line
- PHPExcel_Chart_DataSeries::STYLE_LINEMARKER // plotStyle
-);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_TOPRIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Scatter Chart');
-$yAxisLabel = new PHPExcel_Chart_Title('Value ($k)');
-
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'chart1', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- NULL, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-stock.php b/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-stock.php
deleted file mode 100644
index b38fd518153..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/33chartcreate-stock.php
+++ /dev/null
@@ -1,151 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-$objPHPExcel = new PHPExcel();
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array('Counts', 'Max', 'Min', 'Min Threshold', 'Max Threshold' ),
- array(10, 10, 5, 0, 50 ),
- array(30, 20, 10, 0, 50 ),
- array(20, 30, 15, 0, 50 ),
- array(40, 10, 0, 0, 50 ),
- array(100, 40, 5, 0, 50 ),
- ), null, 'A1', true
-);
-$objWorksheet->getStyle('B2:E6')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_NUMBER_00);
-
-
-// Set the Labels for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesLabels = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$B$1', NULL, 1), //Max / Open
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$C$1', NULL, 1), //Min / Close
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$D$1', NULL, 1), //Min Threshold / Min
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$E$1', NULL, 1), //Max Threshold / Max
-);
-// Set the X-Axis Labels
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$xAxisTickValues = array(
- new PHPExcel_Chart_DataSeriesValues('String', 'Worksheet!$A$2:$A$6', NULL, 5), // Counts
-);
-// Set the Data values for each data series we want to plot
-// Datatype
-// Cell reference for data
-// Format Code
-// Number of datapoints in series
-// Data values
-// Data Marker
-$dataSeriesValues = array(
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$B$2:$B$6', NULL, 5),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$C$2:$C$6', NULL, 5),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$D$2:$D$6', NULL, 5),
- new PHPExcel_Chart_DataSeriesValues('Number', 'Worksheet!$E$2:$E$6', NULL, 5),
-);
-
-// Build the dataseries
-$series = new PHPExcel_Chart_DataSeries(
- PHPExcel_Chart_DataSeries::TYPE_STOCKCHART, // plotType
- null, // plotGrouping - if we set this to not null, then xlsx throws error
- range(0, count($dataSeriesValues)-1), // plotOrder
- $dataSeriesLabels, // plotLabel
- $xAxisTickValues, // plotCategory
- $dataSeriesValues // plotValues
-);
-
-// Set the series in the plot area
-$plotArea = new PHPExcel_Chart_PlotArea(NULL, array($series));
-// Set the chart legend
-$legend = new PHPExcel_Chart_Legend(PHPExcel_Chart_Legend::POSITION_RIGHT, NULL, false);
-
-$title = new PHPExcel_Chart_Title('Test Stock Chart');
-$xAxisLabel = new PHPExcel_Chart_Title('Counts');
-$yAxisLabel = new PHPExcel_Chart_Title('Values');
-
-// Create the chart
-$chart = new PHPExcel_Chart(
- 'stock-chart', // name
- $title, // title
- $legend, // legend
- $plotArea, // plotArea
- true, // plotVisibleOnly
- 0, // displayBlanksAs
- $xAxisLabel, // xAxisLabel
- $yAxisLabel // yAxisLabel
-);
-
-// Set the position where the chart should appear in the worksheet
-$chart->setTopLeftPosition('A7');
-$chart->setBottomRightPosition('H20');
-
-// Add the chart to the worksheet
-$objWorksheet->addChart($chart);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$filename = str_replace('.php', '.xlsx', __FILE__);
-if(file_exists($filename)) {
- unlink($filename);
-}
-$objWriter->save($filename);
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/34chartupdate.php b/htdocs/includes/phpoffice/phpexcel/Examples/34chartupdate.php
deleted file mode 100644
index cb586a31867..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/34chartupdate.php
+++ /dev/null
@@ -1,78 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-if (!file_exists("33chartcreate-bar.xlsx")) {
- exit("Please run 33chartcreate-bar.php first." . EOL);
-}
-
-echo date('H:i:s') , " Load from Excel2007 file" , EOL;
-$objReader = PHPExcel_IOFactory::createReader("Excel2007");
-$objReader->setIncludeCharts(TRUE);
-$objPHPExcel = $objReader->load("33chartcreate-bar.xlsx");
-
-
-echo date('H:i:s') , " Update cell data values that are displayed in the chart" , EOL;
-$objWorksheet = $objPHPExcel->getActiveSheet();
-$objWorksheet->fromArray(
- array(
- array(50-12, 50-15, 50-21),
- array(50-56, 50-73, 50-86),
- array(50-52, 50-61, 50-69),
- array(50-30, 50-32, 50),
- ),
- NULL,
- 'B2'
-);
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->setIncludeCharts(TRUE);
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/35chartrender.php b/htdocs/includes/phpoffice/phpexcel/Examples/35chartrender.php
deleted file mode 100644
index f0e79636b11..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/35chartrender.php
+++ /dev/null
@@ -1,134 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** Include path **/
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../Classes/');
-
-/** PHPExcel_IOFactory */
-include 'PHPExcel/IOFactory.php';
-
-
-// Change these values to select the Rendering library that you wish to use
-// and its directory location on your server
-$rendererName = PHPExcel_Settings::CHART_RENDERER_JPGRAPH;
-$rendererLibrary = 'jpgraph3.5.0b1/src/';
-$rendererLibraryPath = '/php/libraries/Charts/' . $rendererLibrary;
-
-
-if (!PHPExcel_Settings::setChartRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-$inputFileType = 'Excel2007';
-$inputFileNames = 'templates/32readwrite*[0-9].xlsx';
-
- if ((isset($argc)) && ($argc > 1)) {
- $inputFileNames = array();
- for($i = 1; $i < $argc; ++$i) {
- $inputFileNames[] = dirname(__FILE__) . '/templates/' . $argv[$i];
- }
-} else {
- $inputFileNames = glob($inputFileNames);
-}
-foreach($inputFileNames as $inputFileName) {
- $inputFileNameShort = basename($inputFileName);
-
- if (!file_exists($inputFileName)) {
- echo date('H:i:s') , " File " , $inputFileNameShort , ' does not exist' , EOL;
- continue;
- }
-
- echo date('H:i:s') , " Load Test from $inputFileType file " , $inputFileNameShort , EOL;
-
- $objReader = PHPExcel_IOFactory::createReader($inputFileType);
- $objReader->setIncludeCharts(TRUE);
- $objPHPExcel = $objReader->load($inputFileName);
-
-
- echo date('H:i:s') , " Iterate worksheets looking at the charts" , EOL;
- foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
- $sheetName = $worksheet->getTitle();
- echo 'Worksheet: ' , $sheetName , EOL;
-
- $chartNames = $worksheet->getChartNames();
- if(empty($chartNames)) {
- echo ' There are no charts in this worksheet' , EOL;
- } else {
- natsort($chartNames);
- foreach($chartNames as $i => $chartName) {
- $chart = $worksheet->getChartByName($chartName);
- if (!is_null($chart->getTitle())) {
- $caption = '"' . implode(' ',$chart->getTitle()->getCaption()) . '"';
- } else {
- $caption = 'Untitled';
- }
- echo ' ' , $chartName , ' - ' , $caption , EOL;
- echo str_repeat(' ',strlen($chartName)+3);
-
- $jpegFile = '35'.str_replace('.xlsx', '.jpg', substr($inputFileNameShort,2));
- if (file_exists($jpegFile)) {
- unlink($jpegFile);
- }
- try {
- $chart->render($jpegFile);
- } catch (Exception $e) {
- echo 'Error rendering chart: ',$e->getMessage();
- }
- }
- }
- }
-
-
- $objPHPExcel->disconnectWorksheets();
- unset($objPHPExcel);
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , ' Peak memory usage: ' , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done rendering charts as images" , EOL;
-echo 'Image files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwriteHTML.php b/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwriteHTML.php
deleted file mode 100644
index b4bae11cba2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwriteHTML.php
+++ /dev/null
@@ -1,151 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** Include path **/
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../Classes/');
-
-/** PHPExcel_IOFactory */
-include 'PHPExcel/IOFactory.php';
-
-
-// Change these values to select the Rendering library that you wish to use
-// and its directory location on your server
-$rendererName = PHPExcel_Settings::CHART_RENDERER_JPGRAPH;
-$rendererLibrary = 'jpgraph3.5.0b1/src';
-$rendererLibraryPath = '/php/libraries/Charts/' . $rendererLibrary;
-
-
-if (!PHPExcel_Settings::setChartRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-$inputFileType = 'Excel2007';
-$inputFileNames = 'templates/36write*.xlsx';
-
-if ((isset($argc)) && ($argc > 1)) {
- $inputFileNames = array();
- for($i = 1; $i < $argc; ++$i) {
- $inputFileNames[] = dirname(__FILE__) . '/templates/' . $argv[$i];
- }
-} else {
- $inputFileNames = glob($inputFileNames);
-}
-foreach($inputFileNames as $inputFileName) {
- $inputFileNameShort = basename($inputFileName);
-
- if (!file_exists($inputFileName)) {
- echo date('H:i:s') , " File " , $inputFileNameShort , ' does not exist' , EOL;
- continue;
- }
-
- echo date('H:i:s') , " Load Test from $inputFileType file " , $inputFileNameShort , EOL;
-
- $objReader = PHPExcel_IOFactory::createReader($inputFileType);
- $objReader->setIncludeCharts(TRUE);
- $objPHPExcel = $objReader->load($inputFileName);
-
-
- echo date('H:i:s') , " Iterate worksheets looking at the charts" , EOL;
- foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
- $sheetName = $worksheet->getTitle();
- echo 'Worksheet: ' , $sheetName , EOL;
-
- $chartNames = $worksheet->getChartNames();
- if(empty($chartNames)) {
- echo ' There are no charts in this worksheet' , EOL;
- } else {
- natsort($chartNames);
- foreach($chartNames as $i => $chartName) {
- $chart = $worksheet->getChartByName($chartName);
- if (!is_null($chart->getTitle())) {
- $caption = '"' . implode(' ',$chart->getTitle()->getCaption()) . '"';
- } else {
- $caption = 'Untitled';
- }
- echo ' ' , $chartName , ' - ' , $caption , EOL;
- echo str_repeat(' ',strlen($chartName)+3);
- $groupCount = $chart->getPlotArea()->getPlotGroupCount();
- if ($groupCount == 1) {
- $chartType = $chart->getPlotArea()->getPlotGroupByIndex(0)->getPlotType();
- echo ' ' , $chartType , EOL;
- } else {
- $chartTypes = array();
- for($i = 0; $i < $groupCount; ++$i) {
- $chartTypes[] = $chart->getPlotArea()->getPlotGroupByIndex($i)->getPlotType();
- }
- $chartTypes = array_unique($chartTypes);
- if (count($chartTypes) == 1) {
- $chartType = 'Multiple Plot ' . array_pop($chartTypes);
- echo ' ' , $chartType , EOL;
- } elseif (count($chartTypes) == 0) {
- echo ' *** Type not yet implemented' , EOL;
- } else {
- echo ' Combination Chart' , EOL;
- }
- }
- }
- }
- }
-
-
- $outputFileName = str_replace('.xlsx', '.html', basename($inputFileName));
-
- echo date('H:i:s') , " Write Tests to HTML file " , EOL;
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'HTML');
- $objWriter->setIncludeCharts(TRUE);
- $objWriter->save($outputFileName);
- echo date('H:i:s') , " File written to " , $outputFileName , EOL;
-
- $objPHPExcel->disconnectWorksheets();
- unset($objPHPExcel);
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , ' Peak memory usage: ' , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwritePDF.php b/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwritePDF.php
deleted file mode 100644
index 10d62cd04ba..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/36chartreadwritePDF.php
+++ /dev/null
@@ -1,174 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/**
- * PHPExcel
- *
- * Copyright (C) 2006 - 2014 PHPExcel
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * @category PHPExcel
- * @package PHPExcel
- * @copyright Copyright (c) 2006 - 2014 PHPExcel (http://www.codeplex.com/PHPExcel)
- * @license http://www.gnu.org/licenses/old-licenses/lgpl-2.1.txt LGPL
- * @version ##VERSION##, ##DATE##
- */
-
-/** Include path **/
-set_include_path(get_include_path() . PATH_SEPARATOR . dirname(__FILE__) . '/../Classes/');
-
-/** PHPExcel_IOFactory */
-include 'PHPExcel/IOFactory.php';
-
-
-// Change these values to select the Rendering library that you wish to use
-// for PDF files, and its directory location on your server
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_TCPDF;
-$rendererName = PHPExcel_Settings::PDF_RENDERER_MPDF;
-//$rendererName = PHPExcel_Settings::PDF_RENDERER_DOMPDF;
-//$rendererLibrary = 'tcPDF5.9';
-$rendererLibrary = 'mPDF5.4';
-//$rendererLibrary = 'domPDF0.6.0beta3';
-$rendererLibraryPath = '/php/libraries/PDF/' . $rendererLibrary;
-
-
-if (!PHPExcel_Settings::setPdfRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-// Change these values to select the Rendering library that you wish to use
-// for Chart images, and its directory location on your server
-$rendererName = PHPExcel_Settings::CHART_RENDERER_JPGRAPH;
-$rendererLibrary = 'jpgraph3.5.0b1/src';
-$rendererLibraryPath = '/php/libraries/Charts/' . $rendererLibrary;
-
-
-if (!PHPExcel_Settings::setChartRenderer(
- $rendererName,
- $rendererLibraryPath
- )) {
- die(
- 'NOTICE: Please set the $rendererName and $rendererLibraryPath values' .
- EOL .
- 'at the top of this script as appropriate for your directory structure'
- );
-}
-
-
-$inputFileType = 'Excel2007';
-$inputFileNames = 'templates/36write*.xlsx';
-
-if ((isset($argc)) && ($argc > 1)) {
- $inputFileNames = array();
- for($i = 1; $i < $argc; ++$i) {
- $inputFileNames[] = dirname(__FILE__) . '/templates/' . $argv[$i];
- }
-} else {
- $inputFileNames = glob($inputFileNames);
-}
-foreach($inputFileNames as $inputFileName) {
- $inputFileNameShort = basename($inputFileName);
-
- if (!file_exists($inputFileName)) {
- echo date('H:i:s') , " File " , $inputFileNameShort , ' does not exist' , EOL;
- continue;
- }
-
- echo date('H:i:s') , " Load Test from $inputFileType file " , $inputFileNameShort , EOL;
-
- $objReader = PHPExcel_IOFactory::createReader($inputFileType);
- $objReader->setIncludeCharts(TRUE);
- $objPHPExcel = $objReader->load($inputFileName);
-
-
- echo date('H:i:s') , " Iterate worksheets looking at the charts" , EOL;
- foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
- $sheetName = $worksheet->getTitle();
- echo 'Worksheet: ' , $sheetName , EOL;
-
- $chartNames = $worksheet->getChartNames();
- if(empty($chartNames)) {
- echo ' There are no charts in this worksheet' , EOL;
- } else {
- natsort($chartNames);
- foreach($chartNames as $i => $chartName) {
- $chart = $worksheet->getChartByName($chartName);
- if (!is_null($chart->getTitle())) {
- $caption = '"' . implode(' ',$chart->getTitle()->getCaption()) . '"';
- } else {
- $caption = 'Untitled';
- }
- echo ' ' , $chartName , ' - ' , $caption , EOL;
- echo str_repeat(' ',strlen($chartName)+3);
- $groupCount = $chart->getPlotArea()->getPlotGroupCount();
- if ($groupCount == 1) {
- $chartType = $chart->getPlotArea()->getPlotGroupByIndex(0)->getPlotType();
- echo ' ' , $chartType , EOL;
- } else {
- $chartTypes = array();
- for($i = 0; $i < $groupCount; ++$i) {
- $chartTypes[] = $chart->getPlotArea()->getPlotGroupByIndex($i)->getPlotType();
- }
- $chartTypes = array_unique($chartTypes);
- if (count($chartTypes) == 1) {
- $chartType = 'Multiple Plot ' . array_pop($chartTypes);
- echo ' ' , $chartType , EOL;
- } elseif (count($chartTypes) == 0) {
- echo ' *** Type not yet implemented' , EOL;
- } else {
- echo ' Combination Chart' , EOL;
- }
- }
- }
- }
- }
-
-
- $outputFileName = str_replace('.xlsx', '.pdf', basename($inputFileName));
-
- echo date('H:i:s') , " Write Tests to HTML file " , EOL;
- $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'PDF');
- $objWriter->setIncludeCharts(TRUE);
- $objWriter->save($outputFileName);
- echo date('H:i:s') , " File written to " , $outputFileName , EOL;
-
- $objPHPExcel->disconnectWorksheets();
- unset($objPHPExcel);
-}
-
-// Echo memory peak usage
-echo date('H:i:s') , ' Peak memory usage: ' , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/37page_layout_view.php b/htdocs/includes/phpoffice/phpexcel/Examples/37page_layout_view.php
deleted file mode 100644
index 070f512a2a7..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/37page_layout_view.php
+++ /dev/null
@@ -1,83 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("PHPOffice")
- ->setLastModifiedBy("PHPOffice")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("Office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!');
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-// Set the page layout view as page layout
-$objPHPExcel->getActiveSheet()->getSheetView()->setView(PHPExcel_Worksheet_SheetView::SHEETVIEW_PAGE_LAYOUT);
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-// Save Excel5 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/38cloneWorksheet.php b/htdocs/includes/phpoffice/phpexcel/Examples/38cloneWorksheet.php
deleted file mode 100644
index 901b887eeb9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/38cloneWorksheet.php
+++ /dev/null
@@ -1,118 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', 'Hello')
- ->setCellValue('B2', 'world!')
- ->setCellValue('C1', 'Hello')
- ->setCellValue('D2', 'world!');
-
-// Miscellaneous glyphs, UTF-8
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', 'Miscellaneous glyphs')
- ->setCellValue('A5', 'éàèùâêîôûëïüÿäöüç');
-
-
-$objPHPExcel->getActiveSheet()->setCellValue('A8',"Hello\nWorld");
-$objPHPExcel->getActiveSheet()->getRowDimension(8)->setRowHeight(-1);
-$objPHPExcel->getActiveSheet()->getStyle('A8')->getAlignment()->setWrapText(true);
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Clone worksheet
-echo date('H:i:s') , " Clone worksheet" , EOL;
-$clonedSheet = clone $objPHPExcel->getActiveSheet();
-$clonedSheet
- ->setCellValue('A1', 'Goodbye')
- ->setCellValue('A2', 'cruel')
- ->setCellValue('C1', 'Goodbye')
- ->setCellValue('C2', 'cruel');
-
-// Rename cloned worksheet
-echo date('H:i:s') , " Rename cloned worksheet" , EOL;
-$clonedSheet->setTitle('Simple Clone');
-$objPHPExcel->addSheet($clonedSheet);
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/39dropdown.php b/htdocs/includes/phpoffice/phpexcel/Examples/39dropdown.php
deleted file mode 100644
index 5dadc09922f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/39dropdown.php
+++ /dev/null
@@ -1,175 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()
- ->setCreator("PHPOffice")
- ->setLastModifiedBy("PHPOffice")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("Office PHPExcel php")
- ->setCategory("Test result file");
-
-
-function transpose($value) {
- return array($value);
-}
-
-// Add some data
-$continentColumn = 'D';
-$column = 'F';
-
-// Set data for dropdowns
-foreach(glob('./data/continents/*') as $key => $filename) {
- $continent = pathinfo($filename, PATHINFO_FILENAME);
- echo "Loading $continent", EOL;
- $continent = str_replace(' ','_',$continent);
- $countries = file($filename, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
- $countryCount = count($countries);
-
- // Transpose $countries from a row to a column array
- $countries = array_map('transpose', $countries);
- $objPHPExcel->getActiveSheet()
- ->fromArray($countries, null, $column . '1');
- $objPHPExcel->addNamedRange(
- new PHPExcel_NamedRange(
- $continent,
- $objPHPExcel->getActiveSheet(), $column . '1:' . $column . $countryCount
- )
- );
- $objPHPExcel->getActiveSheet()
- ->getColumnDimension($column)
- ->setVisible(false);
-
- $objPHPExcel->getActiveSheet()
- ->setCellValue($continentColumn . ($key+1), $continent);
-
- ++$column;
-}
-
-// Hide the dropdown data
-$objPHPExcel->getActiveSheet()
- ->getColumnDimension($continentColumn)
- ->setVisible(false);
-
-$objPHPExcel->addNamedRange(
- new PHPExcel_NamedRange(
- 'Continents',
- $objPHPExcel->getActiveSheet(), $continentColumn . '1:' . $continentColumn . ($key+1)
- )
-);
-
-
-// Set selection cells
-$objPHPExcel->getActiveSheet()
- ->setCellValue('A1', 'Continent:');
-$objPHPExcel->getActiveSheet()
- ->setCellValue('B1', 'Select continent');
-$objPHPExcel->getActiveSheet()
- ->setCellValue('B3', '=' . $column . 1);
-$objPHPExcel->getActiveSheet()
- ->setCellValue('B3', 'Select country');
-$objPHPExcel->getActiveSheet()
- ->getStyle('A1:A3')
- ->getFont()->setBold(true);
-
-// Set linked validators
-$objValidation = $objPHPExcel->getActiveSheet()
- ->getCell('B1')
- ->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST )
- ->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION )
- ->setAllowBlank(false)
- ->setShowInputMessage(true)
- ->setShowErrorMessage(true)
- ->setShowDropDown(true)
- ->setErrorTitle('Input error')
- ->setError('Continent is not in the list.')
- ->setPromptTitle('Pick from the list')
- ->setPrompt('Please pick a continent from the drop-down list.')
- ->setFormula1('=Continents');
-
-$objPHPExcel->getActiveSheet()
- ->setCellValue('A3', 'Country:');
-$objPHPExcel->getActiveSheet()
- ->getStyle('A3')
- ->getFont()->setBold(true);
-
-$objValidation = $objPHPExcel->getActiveSheet()
- ->getCell('B3')
- ->getDataValidation();
-$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST )
- ->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION )
- ->setAllowBlank(false)
- ->setShowInputMessage(true)
- ->setShowErrorMessage(true)
- ->setShowDropDown(true)
- ->setErrorTitle('Input error')
- ->setError('Country is not in the list.')
- ->setPromptTitle('Pick from the list')
- ->setPrompt('Please pick a country from the drop-down list.')
- ->setFormula1('=INDIRECT($B$1)');
-
-
-$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(12);
-$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(30);
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-// Save Excel 2007 file
-// This linked validation list method only seems to work for Excel2007, not for Excel5
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/40duplicateStyle.php b/htdocs/includes/phpoffice/phpexcel/Examples/40duplicateStyle.php
deleted file mode 100644
index be31951a492..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/40duplicateStyle.php
+++ /dev/null
@@ -1,51 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-$worksheet = $objPHPExcel->getActiveSheet();
-
-echo date('H:i:s') , " Create styles array" , EOL;
-$styles = array();
-for ($i = 0; $i < 10; $i++) {
- $style = new PHPExcel_Style();
- $style->getFont()->setSize($i + 4);
- $styles[] = $style;
-}
-
-echo date('H:i:s') , " Add data (begin)" , EOL;
-$t = microtime(true);
-for ($col = 0; $col < 50; $col++) {
- for ($row = 0; $row < 100; $row++) {
- $str = ($row + $col);
- $style = $styles[$row % 10];
- $coord = PHPExcel_Cell::stringFromColumnIndex($col) . ($row + 1);
- $worksheet->setCellValue($coord, $str);
- $worksheet->duplicateStyle($style, $coord);
- }
-}
-$d = microtime(true) - $t;
-echo date('H:i:s') , " Add data (end), time: " . round($d, 2) . " s", EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-
-
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-echo date('H:i:s') , " Done writing file" , EOL;
-echo 'File has been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/41password.php b/htdocs/includes/phpoffice/phpexcel/Examples/41password.php
deleted file mode 100644
index 7b03e4f9a1f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/41password.php
+++ /dev/null
@@ -1,84 +0,0 @@
-');
-
-date_default_timezone_set('Europe/London');
-
-include "05featuredemo.inc.php";
-
-/** Include PHPExcel_IOFactory */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';
-
-
-// Set password against the spreadsheet file
-$objPHPExcel->getSecurity()->setLockWindows(true);
-$objPHPExcel->getSecurity()->setLockStructure(true);
-$objPHPExcel->getSecurity()->setWorkbookPassword('secret');
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/42richText.php b/htdocs/includes/phpoffice/phpexcel/Examples/42richText.php
deleted file mode 100644
index 4e99b853544..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/42richText.php
+++ /dev/null
@@ -1,159 +0,0 @@
-');
-
-/** Include PHPExcel */
-require_once dirname(__FILE__) . '/../Classes/PHPExcel.php';
-
-
-// Create new PHPExcel object
-echo date('H:i:s') , " Create new PHPExcel object" , EOL;
-$objPHPExcel = new PHPExcel();
-
-// Set document properties
-echo date('H:i:s') , " Set document properties" , EOL;
-$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
- ->setLastModifiedBy("Maarten Balliauw")
- ->setTitle("PHPExcel Test Document")
- ->setSubject("PHPExcel Test Document")
- ->setDescription("Test document for PHPExcel, generated using PHP classes.")
- ->setKeywords("office PHPExcel php")
- ->setCategory("Test result file");
-
-
-// Add some data
-echo date('H:i:s') , " Add some data" , EOL;
-
-$html1='
-My very first example of rich text generated from html markup
-
-
-This block contains an italicized word;
-while this block uses an underline .
-
-
-
-I want to eat healthy foodpizza .
-
-';
-
-$html2='
-
- 100°C is a hot temperature
-
-
-
- 10°F is cold
-
-
';
-
-$html3='23 equals 8';
-
-$html4='H2 SO4 is the chemical formula for Sulphuric acid';
-
-
-$wizard = new PHPExcel_Helper_HTML;
-$richText = $wizard->toRichTextObject($html1);
-
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A1', $richText);
-
-$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(48);
-$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);
-$objPHPExcel->getActiveSheet()->getStyle('A1')
- ->getAlignment()
- ->setWrapText(true);
-
-$richText = $wizard->toRichTextObject($html2);
-
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A2', $richText);
-
-$objPHPExcel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);
-$objPHPExcel->getActiveSheet()->getStyle('A2')
- ->getAlignment()
- ->setWrapText(true);
-
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A3', $wizard->toRichTextObject($html3));
-
-$objPHPExcel->setActiveSheetIndex(0)
- ->setCellValue('A4', $wizard->toRichTextObject($html4));
-
-
-// Rename worksheet
-echo date('H:i:s') , " Rename worksheet" , EOL;
-$objPHPExcel->getActiveSheet()->setTitle('Simple');
-
-
-// Set active sheet index to the first sheet, so Excel opens this as the first sheet
-$objPHPExcel->setActiveSheetIndex(0);
-
-
-// Save Excel 2007 file
-echo date('H:i:s') , " Write to Excel2007 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Save Excel 95 file
-echo date('H:i:s') , " Write to Excel5 format" , EOL;
-$callStartTime = microtime(true);
-
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', pathinfo(__FILE__, PATHINFO_BASENAME)) , EOL;
-echo 'Call time to write Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing files" , EOL;
-echo 'Files have been created in ' , getcwd() , EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLReader.php b/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLReader.php
deleted file mode 100644
index 99d6df80728..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLReader.php
+++ /dev/null
@@ -1,61 +0,0 @@
-load("Excel2003XMLTest.xml");
-
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , PHP_EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-
-echo date('H:i:s') , " Write to Excel5 format" , PHP_EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
-$objWriter->save(str_replace('.php', '.xls', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xls', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLTest.xml b/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLTest.xml
deleted file mode 100644
index fb2d305c379..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/Excel2003XMLTest.xml
+++ /dev/null
@@ -1 +0,0 @@
-3 #000000 4 #0000ff 5 #008000 6 #00ccff 7 #800080 8 #993366 9 #c0c0c0 10 #c47512 11 #ccffcc 12 #ddbc7d 13 #ff0000 14 #ff00ff 15 #ff6600 16 #ff9900 17 #ff99cc 18 #ffff00 9000 13860 240 75 False False Test String 1 Test for a simple colour-formatted string | 1 | 5 | | A | E | | 6 | | AE | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test - String 2 | 2 | 6 | | B | F | | 8 | | BF | | | | Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test #3 | 3 | 7 | | C | G | | 10 | | CG | Red | Red | | Dash | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test with (") in string | 4 | 8 | | D | H | | 12 | | DH | Orange | Orange | | Dash/Dot/Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | 10 | 26 | 36 | Yellow | Yellow | | Dash/Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test #3 | 1.23 | 1 | 1 | | | | | | | Green | Green | | Thin Line | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test #3 | 2.34 | 0 | 0 | | | | 0 | | | Blue | Blue | | Thick Dash/Dot/Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Test #3 | 3.45 | | | | | | | | | Purple | Purple | | Variant Thick Dash/Dot/Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | Pink | Pink | | Thick Dash/Dot | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1960-12-19T00:00:00.000 | | TOP | | | | 0 | | | | Brown | Brown | | Thick Dash | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1.5 | | | | | | 0 | | | | | | | Thick Line | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | BOTTOM | | | | | | | | | | | Extra Thick Line | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1899-12-31T02:30:00.000 | | | | | Мойва сушеная Tests for UTF-8 content | | | | | | | | Double Line | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | LEFT | | | Ärendetext | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
1960-12-19T01:30:00.000 | | | | | Højde | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | RIGHT | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| BOX | | | | Test Column 1 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | Test Column 2 | | | Patterned | Patterned 2 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| | | | | | | | Test Column 3 | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
Underline None | Rotate 90 | Rotate 45 | Rotate -90 | Rotate -45 | |
Underline 1 | Subscript | |
Underline 2 | Superscript | |
Underline 3 | |
Underline 4 | |
|
I don't know if Gnumeric supports Rich Text in the same way as Excel , And this row should be autofit height with text wrap | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
PHPExcel | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
Heading 1 | Heading 2 | Third Heading | Date Heading | Time Heading | | Adjusted Date | Adjusted Number | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
| Adjusted Number | Third Heading |
1 | 1.11 | 1.11 |
2 | 4.44 | 2.22 |
3 | 9.99 | 3.33 |
4 | 17.76 | 4.44 |
5 | 27.75 | 5.55 |
6 | 39.96 | 6.66 |
7 | 54.39 | 7.77 |
8 | 71.04 | 8.88 |
9 | 89.91 | 9.99 |
10 | 111 | 11.1 |
11 | 134.31 | 12.21 |
12 | 159.84 | 13.32 |
13 | 1.11 | -1.11 |
ABC | 1 | 1.11 | 2001-01-01T00:00:00.000 | 1899-12-31T01:00:00.000 | | 2000-12-31T00:00:00.000 | 1.11 | | A | 1A | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
BCD | 2 | 2.22 | 2002-02-02T00:00:00.000 | 1899-12-31T02:00:00.000 | | 2002-01-31T00:00:00.000 | 4.44 | | B | 2B | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
CDE | 3 | 3.33 | 2003-03-03T00:00:00.000 | 1899-12-31T03:00:00.000 | | 2003-02-28T00:00:00.000 | 9.99 | | C | 3C | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
DEF | 4 | 4.44 | 2004-04-03T23:00:00.000 | 1899-12-31T04:00:00.000 | | 2004-03-30T23:00:00.000 | 17.76 | | D | 4D | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
EFG | 5 | 5.55 | 2005-05-04T23:00:00.000 | 1899-12-31T05:00:00.000 | | 2005-04-29T23:00:00.000 | 27.75 | | E | 5E | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
FGH | 6 | 6.66 | 2006-06-05T23:00:00.000 | 1899-12-31T06:00:00.000 | | 2006-05-30T23:00:00.000 | 39.96 | | F | 6F | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
GHI | 7 | 7.77 | 2007-07-06T23:00:00.000 | 1899-12-31T07:00:00.000 | | 2007-06-29T23:00:00.000 | 54.39 | | G | 7G | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
HIJ | 8 | 8.88 | 2008-08-07T23:00:00.000 | 1899-12-31T08:00:00.000 | | 2008-07-30T23:00:00.000 | 71.04 | | H | 8H | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
IJK | 9 | 9.99 | 2009-09-08T23:00:00.000 | 1899-12-31T09:00:00.000 | | 2009-08-30T23:00:00.000 | 89.91 | | I | 9I | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
JKL | 10 | 11.1 | 2010-10-09T23:00:00.000 | 1899-12-31T10:00:00.000 | | 2010-09-29T23:00:00.000 | 111 | | J | 10J | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
KLM | 11 | 12.21 | 2011-11-11T00:00:00.000 | 1899-12-31T11:00:00.000 | | 2011-10-31T00:00:00.000 | 134.31 | | K | 11K | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
LMN | 12 | 13.32 | 2012-12-12T00:00:00.000 | 1899-12-31T288:00:00.000 | | 2012-11-30T00:00:00.000 | 159.84 | | L | 12L | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
ZYX | -1 | -1.11 | 1999-12-01T00:00:00.000 | 1899-12-31T23:00:00.000 | | 1999-12-02T00:00:00.000 | 1.11 | | M | -1M | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/GnumericReader.php b/htdocs/includes/phpoffice/phpexcel/Examples/GnumericReader.php
deleted file mode 100644
index 5ea2c4f7a0a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/GnumericReader.php
+++ /dev/null
@@ -1,60 +0,0 @@
-load("GnumericTest.gnumeric");
-
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , PHP_EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/GnumericTest.gnumeric b/htdocs/includes/phpoffice/phpexcel/Examples/GnumericTest.gnumeric
deleted file mode 100644
index ea2fac379e5..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/GnumericTest.gnumeric and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReader.php b/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReader.php
deleted file mode 100644
index e278aae4d7b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReader.php
+++ /dev/null
@@ -1,61 +0,0 @@
-load("OOCalcTest.ods");
-
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , PHP_EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
-
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReaderPCLZip.php b/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReaderPCLZip.php
deleted file mode 100644
index 45a5cdacbd2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcReaderPCLZip.php
+++ /dev/null
@@ -1,64 +0,0 @@
-load("OOCalcTest.ods");
-
-
-$callEndTime = microtime(true);
-$callTime = $callEndTime - $callStartTime;
-echo 'Call time to read Workbook was ' , sprintf('%.4f',$callTime) , " seconds" , PHP_EOL;
-// Echo memory usage
-echo date('H:i:s') , ' Current memory usage: ' , (memory_get_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
-
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcTest.ods b/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcTest.ods
deleted file mode 100644
index b29db7663db..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/OOCalcTest.ods and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic.php b/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic.php
deleted file mode 100644
index 8440c5546bd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic.php
+++ /dev/null
@@ -1,68 +0,0 @@
-
-
-Quadratic Equation Solver
-
-
-
-Quadratic Equation Solver
-
-Enter the coefficients for the Ax2 + Bx + C = 0
-
-
-If A=0, the equation is not quadratic.
-
-
-getActiveSheet()->setCellValue('A1', $_POST['A']);
- $objPHPExcel->getActiveSheet()->setCellValue('B1', $_POST['B']);
- $objPHPExcel->getActiveSheet()->setCellValue('C1', $_POST['C']);
-
-
- /** Calculate and Display the results **/
- echo 'Roots: ';
-
- $callStartTime = microtime(true);
- echo $objPHPExcel->getActiveSheet()->getCell('B5')->getCalculatedValue().' ';
- echo $objPHPExcel->getActiveSheet()->getCell('B6')->getCalculatedValue().' ';
- $callEndTime = microtime(true);
- $callTime = $callEndTime - $callStartTime;
-
- echo ' Call time for Quadratic Equation Solution was '.sprintf('%.4f',$callTime).' seconds ';
- echo ' Peak memory usage: '.(memory_get_peak_usage(true) / 1024 / 1024).' MB ';
- }
-}
-
-?>
-
-
-
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic2.php b/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic2.php
deleted file mode 100644
index 05cd5c17372..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/Quadratic2.php
+++ /dev/null
@@ -1,65 +0,0 @@
-
-
-Quadratic Equation Solver
-
-
-
-Quadratic Equation Solver
-
-Enter the coefficients for the Ax2 + Bx + C = 0
-
-
-If A=0, the equation is not quadratic.
-
-
-Roots: ';
-
- $callStartTime = microtime(true);
- $discriminantFormula = '=POWER('.$_POST['B'].',2) - (4 * '.$_POST['A'].' * '.$_POST['C'].')';
- $discriminant = PHPExcel_Calculation::getInstance()->calculateFormula($discriminantFormula);
-
- $r1Formula = '=IMDIV(IMSUM(-'.$_POST['B'].',IMSQRT('.$discriminant.')),2 * '.$_POST['A'].')';
- $r2Formula = '=IF('.$discriminant.'=0,"Only one root",IMDIV(IMSUB(-'.$_POST['B'].',IMSQRT('.$discriminant.')),2 * '.$_POST['A'].'))';
-
- echo PHPExcel_Calculation::getInstance()->calculateFormula($r1Formula).' ';
- echo PHPExcel_Calculation::getInstance()->calculateFormula($r2Formula).' ';
- $callEndTime = microtime(true);
- $callTime = $callEndTime - $callStartTime;
-
- echo ' Call time for Quadratic Equation Solution was '.sprintf('%.4f',$callTime).' seconds ';
- echo ' Peak memory usage: '.(memory_get_peak_usage(true) / 1024 / 1024).' MB ';
- }
-}
-
-?>
-
-
-
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/SylkReader.php b/htdocs/includes/phpoffice/phpexcel/Examples/SylkReader.php
deleted file mode 100644
index 8049ff0bf46..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/SylkReader.php
+++ /dev/null
@@ -1,50 +0,0 @@
-save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/SylkTest.slk b/htdocs/includes/phpoffice/phpexcel/Examples/SylkTest.slk
deleted file mode 100644
index 329abe26f7e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/SylkTest.slk
+++ /dev/null
@@ -1,152 +0,0 @@
-ID;PWXL;N;E
-P;PGeneral
-P;P0
-P;P0.00
-P;P#,##0
-P;P#,##0.00
-P;P#,##0;;\-#,##0
-P;P#,##0;;[Red]\-#,##0
-P;P#,##0.00;;\-#,##0.00
-P;P#,##0.00;;[Red]\-#,##0.00
-P;P"$"#,##0;;\-"$"#,##0
-P;P"$"#,##0;;[Red]\-"$"#,##0
-P;P"$"#,##0.00;;\-"$"#,##0.00
-P;P"$"#,##0.00;;[Red]\-"$"#,##0.00
-P;P0%
-P;P0.00%
-P;P0.00E+00
-P;P##0.0E+0
-P;P#\ ?/?
-P;P#\ ??/??
-P;Pdd/mm/yyyy
-P;Pdd\-mmm\-yy
-P;Pdd\-mmm
-P;Pmmm\-yy
-P;Ph:mm\ AM/PM
-P;Ph:mm:ss\ AM/PM
-P;Phh:mm
-P;Phh:mm:ss
-P;Pdd/mm/yyyy\ hh:mm
-P;Pmm:ss
-P;Pmm:ss.0
-P;P@
-P;P[h]:mm:ss
-P;P_-"$"* #,##0_-;;\-"$"* #,##0_-;;_-"$"* "-"_-;;_-@_-
-P;P_-* #,##0_-;;\-* #,##0_-;;_-* "-"_-;;_-@_-
-P;P_-"$"* #,##0.00_-;;\-"$"* #,##0.00_-;;_-"$"* "-"??_-;;_-@_-
-P;P_-* #,##0.00_-;;\-* #,##0.00_-;;_-* "-"??_-;;_-@_-
-P;FArial;M200
-P;FArial;M200
-P;FArial;M200
-P;FArial;M200
-P;EArial;M200
-P;EArial;M200
-P;EArial;M200
-P;EArial;M200;SB
-P;EArial;M200;SBI
-P;EArial;M200;SI
-P;EArial;M200;SU
-P;EArial;M200;L11
-P;EArial;M200;SB
-P;EArial;M200
-P;EArial;M200;SI
-P;EArial;M200;SBI
-P;EArial;M200;SBU
-P;EArial;M200;SBIU
-P;EArial;M200
-P;EArial;M200;SI
-F;P0;DG0G8;M255
-B;Y18;X10;D0 0 17 9
-O;L;D;V0;K47;G100 0.001
-F;W1 1 17
-F;W4 6 6
-F;M270;R9
-F;M270;R12
-F;M270;R17
-F;M270;R18
-F;SM12;Y1;X1
-C;K"Test String 1"
-F;SM19;X2
-C;K1
-F;SM19;X3
-C;K5
-F;SIDM18;X5
-C;K"A"
-F;SDM17;X6
-C;K"E"
-C;X8;K6;ERC[-6]+RC[-5]
-C;X10;K"AE";ERC[-5]&RC[-4]
-F;SSM0;Y2;X1
-C;K"Test - String 2"
-C;X2;K2
-F;SM19;X3
-C;K6
-C;X5;K"B"
-C;X6;K"F"
-C;X8;K8;ERC[-6]+RC[-5]
-C;X10;K"BF";ERC[-5]&RC[-4]
-C;Y3;X1;K"Test #3"
-F;SM19;X2
-C;K3
-F;SM19;X3
-C;K7
-F;SDM13;X5
-C;K"C"
-F;SIDM16;X6
-C;K"G"
-C;X8;K10;ERC[-6]+RC[-5]
-C;X10;K"CG";ERC[-5]&RC[-4]
-F;SM11;Y4;X1
-C;K"Test with (;;) in string"
-C;X2;K4
-F;SM19;X3
-C;K8
-F;SIM15;X5
-C;K"D"
-C;X6;K"H"
-C;X8;K12;ERC[-6]+RC[-5]
-C;X10;K"DH";ERC[-5]&RC[-4]
-C;Y5;X8;K10;ESUM(R[-4]C[-6]:R[-1]C[-6])
-C;X9;K26;ESUM(R[-4]C[-6]:R[-1]C[-6])
-C;X10;K36;ESUM(R[-4]C[-8]:R[-1]C[-7])
-C;Y6;X2;K1.23
-C;X3;KTRUE
-F;P19;FG0G;X4
-C;Y7;X2;K2.34
-C;X3;KFALSE
-C;Y8;X2;K3.45
-F;Y9;X1
-F;X2
-F;X3
-F;X4
-F;X5
-F;X6
-F;X7
-F;X8
-F;X9
-F;X10
-F;P19;FG0G;Y10;X1
-C;K22269
-F;STM0;X3
-C;K"TOP"
-F;P17;FG0G;Y11;X1
-C;K1.5
-F;Y12
-F;X2
-F;SBM0;X3
-C;K"BOTTOM"
-F;X4
-F;X5
-F;X6
-F;X7
-F;X8
-F;X9
-F;X10
-F;SLM0;Y14;X3
-C;K"LEFT"
-F;SRM0;Y16
-C;K"RIGHT"
-F;Y17
-F;SLRTBM0;Y18
-C;K"BOX"
-E
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/XMLReader.php b/htdocs/includes/phpoffice/phpexcel/Examples/XMLReader.php
deleted file mode 100644
index 1aa0f95f773..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/XMLReader.php
+++ /dev/null
@@ -1,60 +0,0 @@
-load($inputFileName);
-
-
-echo date('H:i:s') , " Write to Excel2007 format" , PHP_EOL;
-$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
-$objWriter->save(str_replace('.php', '.xlsx', __FILE__));
-echo date('H:i:s') , " File written to " , str_replace('.php', '.xlsx', __FILE__) , PHP_EOL;
-
-
-// Echo memory peak usage
-echo date('H:i:s') , " Peak memory usage: " , (memory_get_peak_usage(true) / 1024 / 1024) , " MB" , PHP_EOL;
-
-// Echo done
-echo date('H:i:s') , " Done writing file" , PHP_EOL;
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/XMLTest.xml b/htdocs/includes/phpoffice/phpexcel/Examples/XMLTest.xml
deleted file mode 100644
index 4159a94c88c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/XMLTest.xml
+++ /dev/null
@@ -1,450 +0,0 @@
-
-
-
-
- Excel 2003 XML Test Workbook
- This is a test workbook saved as Excel 2003 XML
- Mark Baker
- PHPExcel Excel 2003 XML Reader
- This is a test for the PHPExcel Reader for workbooks saved using Excel 2003's XML Format
- Mark Baker
- 2009-09-11T08:26:08Z
- 2009-09-17T22:53:09Z
- Reader
- PHPExcel
- 14.00
-
-
-
-
-
- 13176
- 28452
- 240
- 516
- False
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Test String 1 |
- 1 |
- 5 |
- A |
- E |
- 6 |
- AE |
-
-
- Test - String 2 |
- 2 |
- 6 |
- B |
- F |
- 8 |
- BF |
-
-
- Test #3 |
- 3 |
- 7 |
- C |
- G |
- 10 |
- CG |
-
-
- Test with (") in string |
- 4 |
- 8 |
- D |
- H |
- 12 |
- DH |
-
-
- 10 |
- 26 |
- 36 |
-
-
- 1.23 |
- 1 |
- |
-
-
- 2.34 |
- 0 |
-
-
- 3.45 |
-
-
-
- 1960-12-19T00:00:00.000 |
- TOP |
- #N/A |
-
-
- 1.5 |
- #DIV/0! |
-
-
- BOTTOM |
-
-
- LEFT |
-
-
- RIGHT |
-
-
-
- BOX |
- |
- Test Column 1 |
-
-
- Test Column 2 |
-
-
- Test Column 3 |
-
-
-
-
-
-
-
-
-
-
-
- 600
- 600
-
-
-
-
- 3
- 17
- 4
-
-
- False
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Heading 1 |
- Heading 2 |
- Third Heading |
- Date Heading |
- Adjusted Date |
- Adjusted Number |
-
-
- ABC |
- 1 |
- 1.1100000000000001 |
- 2001-01-01T00:00:00.000 |
- 2000-12-31T00:00:00.000 |
- 1.1100000000000001 |
-
-
- BCD |
- 2 |
- 2.2200000000000002 |
- 2002-02-02T00:00:00.000 |
- 2002-01-31T00:00:00.000 |
- 4.4400000000000004 |
-
-
- CDE |
- 3 |
- 3.33 |
- 2003-03-03T00:00:00.000 |
- 2003-02-28T00:00:00.000 |
- 9.99 |
-
-
- DEF |
- 4 |
- 4.4400000000000004 |
- 2004-04-03T23:00:00.000 |
- 2004-03-30T23:00:00.000 |
- 17.760000000000002 |
-
-
- EFG |
- 5 |
- 5.55 |
- 2005-05-04T23:00:00.000 |
- 2005-04-29T23:00:00.000 |
- 27.75 |
-
-
- FGH |
- 6 |
- 6.66 |
- 2006-06-05T23:00:00.000 |
- 2006-05-30T23:00:00.000 |
- 39.96 |
-
-
- GHI |
- 7 |
- 7.77 |
- 2007-07-06T23:00:00.000 |
- 2007-06-29T23:00:00.000 |
- 54.39 |
-
-
- HIJ |
- 8 |
- 8.8800000000000008 |
- 2008-08-07T23:00:00.000 |
- 2008-07-30T23:00:00.000 |
- 71.040000000000006 |
-
-
- IJK |
- 9 |
- 9.99 |
- 2009-09-08T23:00:00.000 |
- 2009-08-30T23:00:00.000 |
- 89.91 |
-
-
- JKL |
- 10 |
- 11.1 |
- 2010-10-09T23:00:00.000 |
- 2010-09-29T23:00:00.000 |
- 111 |
-
-
- KLM |
- 11 |
- 12.21 |
- 2011-11-11T00:00:00.000 |
- 2011-10-31T00:00:00.000 |
- 134.31 |
-
-
- LMN |
- 12 |
- 13.32 |
- 2012-12-12T00:00:00.000 |
- 2012-11-30T00:00:00.000 |
- 159.84 |
-
-
- ZYX |
- -1 |
- -1.1100000000000001 |
- 1999-12-01T00:00:00.000 |
- 1999-12-02T00:00:00.000 |
- 1.1100000000000001 |
-
-
-
-
-
-
-
-
-
-
-
- 600
- 600
-
- False
- False
-
-
-
-
-
-
-
-
-
-
-
-
-
- R2C3:R14C3
-
- Greater
- 0
-
-
-
- Less
- 0
-
-
-
-
-
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Africa.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Africa.txt
deleted file mode 100644
index 407fa769aa3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Africa.txt
+++ /dev/null
@@ -1,54 +0,0 @@
-Algeria
-Angola
-Benin
-Botswana
-Burkina
-Burundi
-Cameroon
-Cape Verde
-Central African Republic
-Chad
-Comoros
-Congo
-Congo, Democratic Republic of
-Djibouti
-Egypt
-Equatorial Guinea
-Eritrea
-Ethiopia
-Gabon
-Gambia
-Ghana
-Guinea
-Guinea-Bissau
-Ivory Coast
-Kenya
-Lesotho
-Liberia
-Libya
-Madagascar
-Malawi
-Mali
-Mauritania
-Mauritius
-Morocco
-Mozambique
-Namibia
-Niger
-Nigeria
-Rwanda
-Sao Tome and Principe
-Senegal
-Seychelles
-Sierra Leone
-Somalia
-South Africa
-South Sudan
-Sudan
-Swaziland
-Tanzania
-Togo
-Tunisia
-Uganda
-Zambia
-Zimbabwe
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Asia.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Asia.txt
deleted file mode 100644
index 9ce006c53c8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Asia.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-Afghanistan
-Bahrain
-Bangladesh
-Bhutan
-Brunei
-Burma (Myanmar)
-Cambodia
-China
-East Timor
-India
-Indonesia
-Iran
-Iraq
-Israel
-Japan
-Jordan
-Kazakhstan
-Korea, North
-Korea, South
-Kuwait
-Kyrgyzstan
-Laos
-Lebanon
-Malaysia
-Maldives
-Mongolia
-Nepal
-Oman
-Pakistan
-Philippines
-Qatar
-Russian Federation
-Saudi Arabia
-Singapore
-Sri Lanka
-Syria
-Tajikistan
-Thailand
-Turkey
-Turkmenistan
-United Arab Emirates
-Uzbekistan
-Vietnam
-Yemen
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Europe.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Europe.txt
deleted file mode 100644
index 70c11607ab9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Europe.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-Albania
-Andorra
-Armenia
-Austria
-Azerbaijan
-Belarus
-Belgium
-Bosnia and Herzegovina
-Bulgaria
-Croatia
-Cyprus
-Czech Republic
-Denmark
-Estonia
-Finland
-France
-Georgia
-Germany
-Greece
-Hungary
-Iceland
-Ireland
-Italy
-Latvia
-Liechtenstein
-Lithuania
-Luxembourg
-Macedonia
-Malta
-Moldova
-Monaco
-Montenegro
-Netherlands
-Norway
-Poland
-Portugal
-Romania
-San Marino
-Serbia
-Slovakia
-Slovenia
-Spain
-Sweden
-Switzerland
-Ukraine
-United Kingdom
-Vatican City
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/North America.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/North America.txt
deleted file mode 100644
index 5881ae132ab..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/North America.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Antigua and Barbuda
-Bahamas
-Barbados
-Belize
-Canada
-Costa Rica
-Cuba
-Dominica
-Dominican Republic
-El Salvador
-Grenada
-Guatemala
-Haiti
-Honduras
-Jamaica
-Mexico
-Nicaragua
-Panama
-Saint Kitts and Nevis
-Saint Lucia
-Saint Vincent and the Grenadines
-Trinidad and Tobago
-United States
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Oceania.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Oceania.txt
deleted file mode 100644
index cbdc896c1ca..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/Oceania.txt
+++ /dev/null
@@ -1,14 +0,0 @@
-Australia
-Fiji
-Kiribati
-Marshall Islands
-Micronesia
-Nauru
-New Zealand
-Palau
-Papua New Guinea
-Samoa
-Solomon Islands
-Tonga
-Tuvalu
-Vanuatu
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/South America.txt b/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/South America.txt
deleted file mode 100644
index 777ffbfb94b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/data/continents/South America.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Argentina
-Bolivia
-Brazil
-Chile
-Colombia
-Ecuador
-Guyana
-Paraguay
-Peru
-Suriname
-Uruguay
-Venezuela
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/images/officelogo.jpg b/htdocs/includes/phpoffice/phpexcel/Examples/images/officelogo.jpg
deleted file mode 100644
index 7e0133d1346..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/images/officelogo.jpg and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/images/paid.png b/htdocs/includes/phpoffice/phpexcel/Examples/images/paid.png
deleted file mode 100644
index a4355bd6de5..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/images/paid.png and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/images/phpexcel_logo.gif b/htdocs/includes/phpoffice/phpexcel/Examples/images/phpexcel_logo.gif
deleted file mode 100644
index 6e1b5ee4526..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/images/phpexcel_logo.gif and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/images/termsconditions.jpg b/htdocs/includes/phpoffice/phpexcel/Examples/images/termsconditions.jpg
deleted file mode 100644
index 1f21302e426..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/Examples/images/termsconditions.jpg and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/Examples/runall.php b/htdocs/includes/phpoffice/phpexcel/Examples/runall.php
deleted file mode 100644
index b2af1ccd0be..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/Examples/runall.php
+++ /dev/null
@@ -1,130 +0,0 @@
-assertTrue(is_bool($result));
- // ... indicating failure
- $this->assertFalse($result);
- }
-
- public function testAutoloaderInvalidPHPExcelClass()
- {
- $className = 'PHPExcel_Invalid_Class';
-
- $result = PHPExcel_Autoloader::Load($className);
- // Must return a boolean...
- $this->assertTrue(is_bool($result));
- // ... indicating failure
- $this->assertFalse($result);
- }
-
- public function testAutoloadValidPHPExcelClass()
- {
- $className = 'PHPExcel_IOFactory';
-
- $result = PHPExcel_Autoloader::Load($className);
- // Check that class has been loaded
- $this->assertTrue(class_exists($className));
- }
-
- public function testAutoloadInstantiateSuccess()
- {
- $result = new PHPExcel_Calculation_Function(1,2,3);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'PHPExcel_Calculation_Function'));
- }
-
-}
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/DateTimeTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/DateTimeTest.php
deleted file mode 100644
index d4bdc5abff2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/DateTimeTest.php
+++ /dev/null
@@ -1,466 +0,0 @@
-assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/DATE.data');
- }
-
- public function testDATEtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::DATE(2012,1,31);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(1327968000, $result, NULL, 1E-8);
- }
-
- public function testDATEtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::DATE(2012,1,31);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('d-M-Y'),'31-Jan-2012');
- }
-
- public function testDATEwith1904Calendar()
- {
- PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904);
- $result = PHPExcel_Calculation_DateTime::DATE(1918,11,11);
- PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900);
- $this->assertEquals($result,5428);
- }
-
- public function testDATEwith1904CalendarError()
- {
- PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_MAC_1904);
- $result = PHPExcel_Calculation_DateTime::DATE(1901,1,31);
- PHPExcel_Shared_Date::setExcelCalendar(PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900);
- $this->assertEquals($result,'#NUM!');
- }
-
- /**
- * @dataProvider providerDATEVALUE
- */
- public function testDATEVALUE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','DATEVALUE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDATEVALUE()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/DATEVALUE.data');
- }
-
- public function testDATEVALUEtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::DATEVALUE('2012-1-31');
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(1327968000, $result, NULL, 1E-8);
- }
-
- public function testDATEVALUEtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::DATEVALUE('2012-1-31');
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('d-M-Y'),'31-Jan-2012');
- }
-
- /**
- * @dataProvider providerYEAR
- */
- public function testYEAR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','YEAR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerYEAR()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/YEAR.data');
- }
-
- /**
- * @dataProvider providerMONTH
- */
- public function testMONTH()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','MONTHOFYEAR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerMONTH()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/MONTH.data');
- }
-
- /**
- * @dataProvider providerWEEKNUM
- */
- public function testWEEKNUM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','WEEKOFYEAR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerWEEKNUM()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/WEEKNUM.data');
- }
-
- /**
- * @dataProvider providerWEEKDAY
- */
- public function testWEEKDAY()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','DAYOFWEEK'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerWEEKDAY()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/WEEKDAY.data');
- }
-
- /**
- * @dataProvider providerDAY
- */
- public function testDAY()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','DAYOFMONTH'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDAY()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/DAY.data');
- }
-
- /**
- * @dataProvider providerTIME
- */
- public function testTIME()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','TIME'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerTIME()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/TIME.data');
- }
-
- public function testTIMEtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::TIME(7,30,20);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(27020, $result, NULL, 1E-8);
- }
-
- public function testTIMEtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::TIME(7,30,20);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('H:i:s'),'07:30:20');
- }
-
- /**
- * @dataProvider providerTIMEVALUE
- */
- public function testTIMEVALUE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','TIMEVALUE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerTIMEVALUE()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/TIMEVALUE.data');
- }
-
- public function testTIMEVALUEtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::TIMEVALUE('7:30:20');
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(23420, $result, NULL, 1E-8);
- }
-
- public function testTIMEVALUEtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::TIMEVALUE('7:30:20');
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('H:i:s'),'07:30:20');
- }
-
- /**
- * @dataProvider providerHOUR
- */
- public function testHOUR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','HOUROFDAY'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerHOUR()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/HOUR.data');
- }
-
- /**
- * @dataProvider providerMINUTE
- */
- public function testMINUTE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','MINUTEOFHOUR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerMINUTE()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/MINUTE.data');
- }
-
- /**
- * @dataProvider providerSECOND
- */
- public function testSECOND()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','SECONDOFMINUTE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerSECOND()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/SECOND.data');
- }
-
- /**
- * @dataProvider providerNETWORKDAYS
- */
- public function testNETWORKDAYS()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','NETWORKDAYS'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerNETWORKDAYS()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/NETWORKDAYS.data');
- }
-
- /**
- * @dataProvider providerWORKDAY
- */
- public function testWORKDAY()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','WORKDAY'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerWORKDAY()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/WORKDAY.data');
- }
-
- /**
- * @dataProvider providerEDATE
- */
- public function testEDATE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','EDATE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerEDATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/EDATE.data');
- }
-
- public function testEDATEtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::EDATE('2012-1-26',-1);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(1324857600, $result, NULL, 1E-8);
- }
-
- public function testEDATEtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::EDATE('2012-1-26',-1);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('d-M-Y'),'26-Dec-2011');
- }
-
- /**
- * @dataProvider providerEOMONTH
- */
- public function testEOMONTH()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','EOMONTH'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerEOMONTH()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/EOMONTH.data');
- }
-
- public function testEOMONTHtoPHP()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_NUMERIC);
- $result = PHPExcel_Calculation_DateTime::EOMONTH('2012-1-26',-1);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- $this->assertEquals(1325289600, $result, NULL, 1E-8);
- }
-
- public function testEOMONTHtoPHPObject()
- {
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_PHP_OBJECT);
- $result = PHPExcel_Calculation_DateTime::EOMONTH('2012-1-26',-1);
- PHPExcel_Calculation_Functions::setReturnDateType(PHPExcel_Calculation_Functions::RETURNDATE_EXCEL);
- // Must return an object...
- $this->assertTrue(is_object($result));
- // ... of the correct type
- $this->assertTrue(is_a($result,'DateTime'));
- // ... with the correct value
- $this->assertEquals($result->format('d-M-Y'),'31-Dec-2011');
- }
-
- /**
- * @dataProvider providerDATEDIF
- */
- public function testDATEDIF()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','DATEDIF'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDATEDIF()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/DATEDIF.data');
- }
-
- /**
- * @dataProvider providerDAYS360
- */
- public function testDAYS360()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','DAYS360'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDAYS360()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/DAYS360.data');
- }
-
- /**
- * @dataProvider providerYEARFRAC
- */
- public function testYEARFRAC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_DateTime','YEARFRAC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerYEARFRAC()
- {
- return new testDataFileIterator('rawTestData/Calculation/DateTime/YEARFRAC.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/EngineeringTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/EngineeringTest.php
deleted file mode 100644
index 1f511ffacc0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/EngineeringTest.php
+++ /dev/null
@@ -1,698 +0,0 @@
-assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerBESSELI()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BESSELI.data');
- }
-
- /**
- * @dataProvider providerBESSELJ
- */
- public function testBESSELJ()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BESSELJ'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerBESSELJ()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BESSELJ.data');
- }
-
- /**
- * @dataProvider providerBESSELK
- */
- public function testBESSELK()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BESSELK'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerBESSELK()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BESSELK.data');
- }
-
- /**
- * @dataProvider providerBESSELY
- */
- public function testBESSELY()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BESSELY'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerBESSELY()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BESSELY.data');
- }
-
- /**
- * @dataProvider providerCOMPLEX
- */
- public function testCOMPLEX()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','COMPLEX'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCOMPLEX()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/COMPLEX.data');
- }
-
- /**
- * @dataProvider providerIMAGINARY
- */
- public function testIMAGINARY()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMAGINARY'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIMAGINARY()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMAGINARY.data');
- }
-
- /**
- * @dataProvider providerIMREAL
- */
- public function testIMREAL()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMREAL'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIMREAL()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMREAL.data');
- }
-
- /**
- * @dataProvider providerIMABS
- */
- public function testIMABS()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMABS'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIMABS()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMABS.data');
- }
-
- /**
- * @dataProvider providerIMARGUMENT
- */
- public function testIMARGUMENT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMARGUMENT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIMARGUMENT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMARGUMENT.data');
- }
-
- /**
- * @dataProvider providerIMCONJUGATE
- */
- public function testIMCONJUGATE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMCONJUGATE'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMCONJUGATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMCONJUGATE.data');
- }
-
- /**
- * @dataProvider providerIMCOS
- */
- public function testIMCOS()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMCOS'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMCOS()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMCOS.data');
- }
-
- /**
- * @dataProvider providerIMDIV
- */
- public function testIMDIV()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMDIV'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMDIV()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMDIV.data');
- }
-
- /**
- * @dataProvider providerIMEXP
- */
- public function testIMEXP()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMEXP'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMEXP()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMEXP.data');
- }
-
- /**
- * @dataProvider providerIMLN
- */
- public function testIMLN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMLN'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMLN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMLN.data');
- }
-
- /**
- * @dataProvider providerIMLOG2
- */
- public function testIMLOG2()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMLOG2'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMLOG2()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMLOG2.data');
- }
-
- /**
- * @dataProvider providerIMLOG10
- */
- public function testIMLOG10()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMLOG10'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMLOG10()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMLOG10.data');
- }
-
- /**
- * @dataProvider providerIMPOWER
- */
- public function testIMPOWER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMPOWER'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMPOWER()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMPOWER.data');
- }
-
- /**
- * @dataProvider providerIMPRODUCT
- */
- public function testIMPRODUCT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMPRODUCT'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMPRODUCT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMPRODUCT.data');
- }
-
- /**
- * @dataProvider providerIMSIN
- */
- public function testIMSIN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMSIN'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMSIN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMSIN.data');
- }
-
- /**
- * @dataProvider providerIMSQRT
- */
- public function testIMSQRT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMSQRT'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMSQRT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMSQRT.data');
- }
-
- /**
- * @dataProvider providerIMSUB
- */
- public function testIMSUB()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMSUB'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMSUB()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMSUB.data');
- }
-
- /**
- * @dataProvider providerIMSUM
- */
- public function testIMSUM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','IMSUM'),$args);
- $complexAssert = new complexAssert();
- $this->assertTrue($complexAssert->assertComplexEquals($expectedResult, $result, 1E-8),
- $complexAssert->getErrorMessage());
- }
-
- public function providerIMSUM()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/IMSUM.data');
- }
-
- /**
- * @dataProvider providerERF
- */
- public function testERF()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','ERF'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerERF()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/ERF.data');
- }
-
- /**
- * @dataProvider providerERFC
- */
- public function testERFC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','ERFC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerERFC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/ERFC.data');
- }
-
- /**
- * @dataProvider providerBIN2DEC
- */
- public function testBIN2DEC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BINTODEC'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerBIN2DEC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BIN2DEC.data');
- }
-
- /**
- * @dataProvider providerBIN2HEX
- */
- public function testBIN2HEX()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BINTOHEX'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerBIN2HEX()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BIN2HEX.data');
- }
-
- /**
- * @dataProvider providerBIN2OCT
- */
- public function testBIN2OCT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','BINTOOCT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerBIN2OCT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/BIN2OCT.data');
- }
-
- /**
- * @dataProvider providerDEC2BIN
- */
- public function testDEC2BIN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','DECTOBIN'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerDEC2BIN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/DEC2BIN.data');
- }
-
- /**
- * @dataProvider providerDEC2HEX
- */
- public function testDEC2HEX()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','DECTOHEX'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerDEC2HEX()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/DEC2HEX.data');
- }
-
- /**
- * @dataProvider providerDEC2OCT
- */
- public function testDEC2OCT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','DECTOOCT'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerDEC2OCT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/DEC2OCT.data');
- }
-
- /**
- * @dataProvider providerHEX2BIN
- */
- public function testHEX2BIN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','HEXTOBIN'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerHEX2BIN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/HEX2BIN.data');
- }
-
- /**
- * @dataProvider providerHEX2DEC
- */
- public function testHEX2DEC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','HEXTODEC'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerHEX2DEC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/HEX2DEC.data');
- }
-
- /**
- * @dataProvider providerHEX2OCT
- */
- public function testHEX2OCT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','HEXTOOCT'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerHEX2OCT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/HEX2OCT.data');
- }
-
- /**
- * @dataProvider providerOCT2BIN
- */
- public function testOCT2BIN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','OCTTOBIN'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerOCT2BIN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/OCT2BIN.data');
- }
-
- /**
- * @dataProvider providerOCT2DEC
- */
- public function testOCT2DEC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','OCTTODEC'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerOCT2DEC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/OCT2DEC.data');
- }
-
- /**
- * @dataProvider providerOCT2HEX
- */
- public function testOCT2HEX()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','OCTTOHEX'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerOCT2HEX()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/OCT2HEX.data');
- }
-
- /**
- * @dataProvider providerDELTA
- */
- public function testDELTA()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','DELTA'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerDELTA()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/DELTA.data');
- }
-
- /**
- * @dataProvider providerGESTEP
- */
- public function testGESTEP()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','GESTEP'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerGESTEP()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/GESTEP.data');
- }
-
- public function testGetConversionGroups()
- {
- $result = PHPExcel_Calculation_Engineering::getConversionGroups();
- $this->assertInternalType('array', $result);
- }
-
- public function testGetConversionGroupUnits()
- {
- $result = PHPExcel_Calculation_Engineering::getConversionGroupUnits();
- $this->assertInternalType('array', $result);
- }
-
- public function testGetConversionGroupUnitDetails()
- {
- $result = PHPExcel_Calculation_Engineering::getConversionGroupUnitDetails();
- $this->assertInternalType('array', $result);
- }
-
- public function testGetConversionMultipliers()
- {
- $result = PHPExcel_Calculation_Engineering::getConversionMultipliers();
- $this->assertInternalType('array', $result);
- }
-
- /**
- * @dataProvider providerCONVERTUOM
- */
- public function testCONVERTUOM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Engineering','CONVERTUOM'),$args);
- $this->assertEquals($expectedResult, $result, NULL);
- }
-
- public function providerCONVERTUOM()
- {
- return new testDataFileIterator('rawTestData/Calculation/Engineering/CONVERTUOM.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FinancialTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FinancialTest.php
deleted file mode 100644
index f5689c95048..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FinancialTest.php
+++ /dev/null
@@ -1,516 +0,0 @@
-assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerACCRINT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/ACCRINT.data');
- }
-
- /**
- * @dataProvider providerACCRINTM
- */
- public function testACCRINTM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','ACCRINTM'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerACCRINTM()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/ACCRINTM.data');
- }
-
- /**
- * @dataProvider providerAMORDEGRC
- */
- public function testAMORDEGRC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','AMORDEGRC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerAMORDEGRC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/AMORDEGRC.data');
- }
-
- /**
- * @dataProvider providerAMORLINC
- */
- public function testAMORLINC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','AMORLINC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerAMORLINC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/AMORLINC.data');
- }
-
- /**
- * @dataProvider providerCOUPDAYBS
- */
- public function testCOUPDAYBS()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPDAYBS'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPDAYBS()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPDAYBS.data');
- }
-
- /**
- * @dataProvider providerCOUPDAYS
- */
- public function testCOUPDAYS()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPDAYS'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPDAYS()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPDAYS.data');
- }
-
- /**
- * @dataProvider providerCOUPDAYSNC
- */
- public function testCOUPDAYSNC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPDAYSNC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPDAYSNC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPDAYSNC.data');
- }
-
- /**
- * @dataProvider providerCOUPNCD
- */
- public function testCOUPNCD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPNCD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPNCD()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPNCD.data');
- }
-
- /**
- * @dataProvider providerCOUPNUM
- */
- public function testCOUPNUM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPNUM'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPNUM()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPNUM.data');
- }
-
- /**
- * @dataProvider providerCOUPPCD
- */
- public function testCOUPPCD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','COUPPCD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCOUPPCD()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/COUPPCD.data');
- }
-
- /**
- * @dataProvider providerCUMIPMT
- */
- public function testCUMIPMT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','CUMIPMT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCUMIPMT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/CUMIPMT.data');
- }
-
- /**
- * @dataProvider providerCUMPRINC
- */
- public function testCUMPRINC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','CUMPRINC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerCUMPRINC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/CUMPRINC.data');
- }
-
- /**
- * @dataProvider providerDB
- */
- public function testDB()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','DB'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDB()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/DB.data');
- }
-
- /**
- * @dataProvider providerDDB
- */
- public function testDDB()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','DDB'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDDB()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/DDB.data');
- }
-
- /**
- * @dataProvider providerDISC
- */
- public function testDISC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','DISC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDISC()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/DISC.data');
- }
-
- /**
- * @dataProvider providerDOLLARDE
- */
- public function testDOLLARDE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','DOLLARDE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDOLLARDE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/DOLLARDE.data');
- }
-
- /**
- * @dataProvider providerDOLLARFR
- */
- public function testDOLLARFR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','DOLLARFR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerDOLLARFR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/DOLLARFR.data');
- }
-
- /**
- * @dataProvider providerEFFECT
- */
- public function testEFFECT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','EFFECT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerEFFECT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/EFFECT.data');
- }
-
- /**
- * @dataProvider providerFV
- */
- public function testFV()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','FV'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerFV()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/FV.data');
- }
-
- /**
- * @dataProvider providerFVSCHEDULE
- */
- public function testFVSCHEDULE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','FVSCHEDULE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerFVSCHEDULE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/FVSCHEDULE.data');
- }
-
- /**
- * @dataProvider providerINTRATE
- */
- public function testINTRATE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','INTRATE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerINTRATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/INTRATE.data');
- }
-
- /**
- * @dataProvider providerIPMT
- */
- public function testIPMT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','IPMT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIPMT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/IPMT.data');
- }
-
- /**
- * @dataProvider providerIRR
- */
- public function testIRR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','IRR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIRR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/IRR.data');
- }
-
- /**
- * @dataProvider providerISPMT
- */
- public function testISPMT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','ISPMT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerISPMT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/ISPMT.data');
- }
-
- /**
- * @dataProvider providerMIRR
- */
- public function testMIRR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','MIRR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerMIRR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/MIRR.data');
- }
-
- /**
- * @dataProvider providerNOMINAL
- */
- public function testNOMINAL()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','NOMINAL'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerNOMINAL()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/NOMINAL.data');
- }
-
- /**
- * @dataProvider providerNPER
- */
- public function testNPER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','NPER'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerNPER()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/NPER.data');
- }
-
- /**
- * @dataProvider providerNPV
- */
- public function testNPV()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','NPV'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerNPV()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/NPV.data');
- }
-
- /**
- * @dataProvider providerPRICE
- */
- public function testPRICE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','PRICE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerPRICE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/PRICE.data');
- }
-
- /**
- * @dataProvider providerRATE
- */
- public function testRATE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','RATE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerRATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/RATE.data');
- }
-
- /**
- * @dataProvider providerXIRR
- */
- public function testXIRR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Financial','XIRR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerXIRR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Financial/XIRR.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FunctionsTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FunctionsTest.php
deleted file mode 100644
index 013332940ff..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/FunctionsTest.php
+++ /dev/null
@@ -1,276 +0,0 @@
-assertEquals('#Not Yet Implemented', $result);
- }
-
- public function testDIV0()
- {
- $result = PHPExcel_Calculation_Functions::DIV0();
- $this->assertEquals('#DIV/0!', $result);
- }
-
- public function testNA()
- {
- $result = PHPExcel_Calculation_Functions::NA();
- $this->assertEquals('#N/A', $result);
- }
-
- public function testNaN()
- {
- $result = PHPExcel_Calculation_Functions::NaN();
- $this->assertEquals('#NUM!', $result);
- }
-
- public function testNAME()
- {
- $result = PHPExcel_Calculation_Functions::NAME();
- $this->assertEquals('#NAME?', $result);
- }
-
- public function testREF()
- {
- $result = PHPExcel_Calculation_Functions::REF();
- $this->assertEquals('#REF!', $result);
- }
-
- public function testNULL()
- {
- $result = PHPExcel_Calculation_Functions::NULL();
- $this->assertEquals('#NULL!', $result);
- }
-
- public function testVALUE()
- {
- $result = PHPExcel_Calculation_Functions::VALUE();
- $this->assertEquals('#VALUE!', $result);
- }
-
- /**
- * @dataProvider providerIS_BLANK
- */
- public function testIS_BLANK()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_BLANK'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_BLANK()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_BLANK.data');
- }
-
- /**
- * @dataProvider providerIS_ERR
- */
- public function testIS_ERR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_ERR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_ERR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_ERR.data');
- }
-
- /**
- * @dataProvider providerIS_ERROR
- */
- public function testIS_ERROR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_ERROR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_ERROR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_ERROR.data');
- }
-
- /**
- * @dataProvider providerERROR_TYPE
- */
- public function testERROR_TYPE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','ERROR_TYPE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerERROR_TYPE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/ERROR_TYPE.data');
- }
-
- /**
- * @dataProvider providerIS_LOGICAL
- */
- public function testIS_LOGICAL()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_LOGICAL'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_LOGICAL()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_LOGICAL.data');
- }
-
- /**
- * @dataProvider providerIS_NA
- */
- public function testIS_NA()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_NA'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_NA()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_NA.data');
- }
-
- /**
- * @dataProvider providerIS_NUMBER
- */
- public function testIS_NUMBER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_NUMBER'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_NUMBER()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_NUMBER.data');
- }
-
- /**
- * @dataProvider providerIS_TEXT
- */
- public function testIS_TEXT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_TEXT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_TEXT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_TEXT.data');
- }
-
- /**
- * @dataProvider providerIS_NONTEXT
- */
- public function testIS_NONTEXT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_NONTEXT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_NONTEXT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_NONTEXT.data');
- }
-
- /**
- * @dataProvider providerIS_EVEN
- */
- public function testIS_EVEN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_EVEN'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_EVEN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_EVEN.data');
- }
-
- /**
- * @dataProvider providerIS_ODD
- */
- public function testIS_ODD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','IS_ODD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerIS_ODD()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/IS_ODD.data');
- }
-
- /**
- * @dataProvider providerTYPE
- */
- public function testTYPE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','TYPE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerTYPE()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/TYPE.data');
- }
-
- /**
- * @dataProvider providerN
- */
- public function testN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Functions','N'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerN()
- {
- return new testDataFileIterator('rawTestData/Calculation/Functions/N.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LogicalTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LogicalTest.php
deleted file mode 100644
index cc8f8b33383..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LogicalTest.php
+++ /dev/null
@@ -1,112 +0,0 @@
-assertEquals(TRUE, $result);
- }
-
- public function testFALSE()
- {
- $result = PHPExcel_Calculation_Logical::FALSE();
- $this->assertEquals(FALSE, $result);
- }
-
- /**
- * @dataProvider providerAND
- */
- public function testAND()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Logical','LOGICAL_AND'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerAND()
- {
- return new testDataFileIterator('rawTestData/Calculation/Logical/AND.data');
- }
-
- /**
- * @dataProvider providerOR
- */
- public function testOR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Logical','LOGICAL_OR'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerOR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Logical/OR.data');
- }
-
- /**
- * @dataProvider providerNOT
- */
- public function testNOT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Logical','NOT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerNOT()
- {
- return new testDataFileIterator('rawTestData/Calculation/Logical/NOT.data');
- }
-
- /**
- * @dataProvider providerIF
- */
- public function testIF()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Logical','STATEMENT_IF'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerIF()
- {
- return new testDataFileIterator('rawTestData/Calculation/Logical/IF.data');
- }
-
- /**
- * @dataProvider providerIFERROR
- */
- public function testIFERROR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_Logical','IFERROR'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerIFERROR()
- {
- return new testDataFileIterator('rawTestData/Calculation/Logical/IFERROR.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LookupRefTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LookupRefTest.php
deleted file mode 100644
index 6450b082244..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/LookupRefTest.php
+++ /dev/null
@@ -1,52 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerHLOOKUP()
- {
- return new testDataFileIterator('rawTestData/Calculation/LookupRef/HLOOKUP.data');
- }
-
- /**
- * @dataProvider providerVLOOKUP
- */
- public function testVLOOKUP()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_LookupRef','VLOOKUP'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerVLOOKUP()
- {
- return new testDataFileIterator('rawTestData/Calculation/LookupRef/VLOOKUP.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/MathTrigTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/MathTrigTest.php
deleted file mode 100644
index 0059ed08e6c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/MathTrigTest.php
+++ /dev/null
@@ -1,560 +0,0 @@
-assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerATAN2()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/ATAN2.data');
- }
-
- /**
- * @dataProvider providerCEILING
- */
- public function testCEILING()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','CEILING'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerCEILING()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/CEILING.data');
- }
-
- /**
- * @dataProvider providerCOMBIN
- */
- public function testCOMBIN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','COMBIN'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerCOMBIN()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/COMBIN.data');
- }
-
- /**
- * @dataProvider providerEVEN
- */
- public function testEVEN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','EVEN'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerEVEN()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/EVEN.data');
- }
-
- /**
- * @dataProvider providerODD
- */
- public function testODD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','ODD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerODD()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/ODD.data');
- }
-
- /**
- * @dataProvider providerFACT
- */
- public function testFACT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','FACT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerFACT()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/FACT.data');
- }
-
- /**
- * @dataProvider providerFACTDOUBLE
- */
- public function testFACTDOUBLE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','FACTDOUBLE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerFACTDOUBLE()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/FACTDOUBLE.data');
- }
-
- /**
- * @dataProvider providerFLOOR
- */
- public function testFLOOR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','FLOOR'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerFLOOR()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/FLOOR.data');
- }
-
- /**
- * @dataProvider providerGCD
- */
- public function testGCD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','GCD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerGCD()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/GCD.data');
- }
-
- /**
- * @dataProvider providerLCM
- */
- public function testLCM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','LCM'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerLCM()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/LCM.data');
- }
-
- /**
- * @dataProvider providerINT
- */
- public function testINT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','INT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerINT()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/INT.data');
- }
-
- /**
- * @dataProvider providerSIGN
- */
- public function testSIGN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','SIGN'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerSIGN()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/SIGN.data');
- }
-
- /**
- * @dataProvider providerPOWER
- */
- public function testPOWER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','POWER'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerPOWER()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/POWER.data');
- }
-
- /**
- * @dataProvider providerLOG
- */
- public function testLOG()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','LOG_BASE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerLOG()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/LOG.data');
- }
-
- /**
- * @dataProvider providerMOD
- */
- public function testMOD()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MOD'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMOD()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MOD.data');
- }
-
- /**
- * @dataProvider providerMDETERM
- */
- public function testMDETERM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MDETERM'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMDETERM()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MDETERM.data');
- }
-
- /**
- * @dataProvider providerMINVERSE
- */
- public function testMINVERSE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MINVERSE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMINVERSE()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MINVERSE.data');
- }
-
- /**
- * @dataProvider providerMMULT
- */
- public function testMMULT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MMULT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMMULT()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MMULT.data');
- }
-
- /**
- * @dataProvider providerMULTINOMIAL
- */
- public function testMULTINOMIAL()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MULTINOMIAL'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMULTINOMIAL()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MULTINOMIAL.data');
- }
-
- /**
- * @dataProvider providerMROUND
- */
- public function testMROUND()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_VALUE);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','MROUND'),$args);
- PHPExcel_Calculation::setArrayReturnType(PHPExcel_Calculation::RETURN_ARRAY_AS_ARRAY);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerMROUND()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/MROUND.data');
- }
-
- /**
- * @dataProvider providerPRODUCT
- */
- public function testPRODUCT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','PRODUCT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerPRODUCT()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/PRODUCT.data');
- }
-
- /**
- * @dataProvider providerQUOTIENT
- */
- public function testQUOTIENT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','QUOTIENT'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerQUOTIENT()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/QUOTIENT.data');
- }
-
- /**
- * @dataProvider providerROUNDUP
- */
- public function testROUNDUP()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','ROUNDUP'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerROUNDUP()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/ROUNDUP.data');
- }
-
- /**
- * @dataProvider providerROUNDDOWN
- */
- public function testROUNDDOWN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','ROUNDDOWN'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerROUNDDOWN()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/ROUNDDOWN.data');
- }
-
- /**
- * @dataProvider providerSERIESSUM
- */
- public function testSERIESSUM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','SERIESSUM'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerSERIESSUM()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/SERIESSUM.data');
- }
-
- /**
- * @dataProvider providerSUMSQ
- */
- public function testSUMSQ()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','SUMSQ'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerSUMSQ()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/SUMSQ.data');
- }
-
- /**
- * @dataProvider providerTRUNC
- */
- public function testTRUNC()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','TRUNC'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerTRUNC()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/TRUNC.data');
- }
-
- /**
- * @dataProvider providerROMAN
- */
- public function testROMAN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','ROMAN'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerROMAN()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/ROMAN.data');
- }
-
- /**
- * @dataProvider providerSQRTPI
- */
- public function testSQRTPI()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig','SQRTPI'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerSQRTPI()
- {
- return new testDataFileIterator('rawTestData/Calculation/MathTrig/SQRTPI.data');
- }
-
- /**
- * @dataProvider providerSUMIF
- */
- public function testSUMIF()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_MathTrig', 'SUMIF'), $args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-12);
- }
-
- public function providerSUMIF()
- {
- return array(
- array(
- array(
- array(1),
- array(5),
- array(10),
- ),
- '>=5',
- 15,
- ),
- array(
- array(
- array('text'),
- array(2),
- ),
- '=text',
- array(
- array(10),
- array(100),
- ),
- 10,
- ),
- array(
- array(
- array('"text with quotes"'),
- array(2),
- ),
- '="text with quotes"',
- array(
- array(10),
- array(100),
- ),
- 10,
- ),
- array(
- array(
- array('"text with quotes"'),
- array(''),
- ),
- '>"', // Compare to the single characater " (double quote)
- array(
- array(10),
- array(100),
- ),
- 10
- ),
- array(
- array(
- array(''),
- array('anything'),
- ),
- '>"', // Compare to the single characater " (double quote)
- array(
- array(10),
- array(100),
- ),
- 100
- ),
- );
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/TextDataTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/TextDataTest.php
deleted file mode 100644
index 4b1caf5179d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Calculation/TextDataTest.php
+++ /dev/null
@@ -1,365 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerCHAR()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/CHAR.data');
- }
-
- /**
- * @dataProvider providerCODE
- */
- public function testCODE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','ASCIICODE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCODE()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/CODE.data');
- }
-
- /**
- * @dataProvider providerCONCATENATE
- */
- public function testCONCATENATE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','CONCATENATE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCONCATENATE()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/CONCATENATE.data');
- }
-
- /**
- * @dataProvider providerLEFT
- */
- public function testLEFT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','LEFT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerLEFT()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/LEFT.data');
- }
-
- /**
- * @dataProvider providerMID
- */
- public function testMID()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','MID'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerMID()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/MID.data');
- }
-
- /**
- * @dataProvider providerRIGHT
- */
- public function testRIGHT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','RIGHT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerRIGHT()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/RIGHT.data');
- }
-
- /**
- * @dataProvider providerLOWER
- */
- public function testLOWER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','LOWERCASE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerLOWER()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/LOWER.data');
- }
-
- /**
- * @dataProvider providerUPPER
- */
- public function testUPPER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','UPPERCASE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerUPPER()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/UPPER.data');
- }
-
- /**
- * @dataProvider providerPROPER
- */
- public function testPROPER()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','PROPERCASE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerPROPER()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/PROPER.data');
- }
-
- /**
- * @dataProvider providerLEN
- */
- public function testLEN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','STRINGLENGTH'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerLEN()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/LEN.data');
- }
-
- /**
- * @dataProvider providerSEARCH
- */
- public function testSEARCH()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','SEARCHINSENSITIVE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerSEARCH()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/SEARCH.data');
- }
-
- /**
- * @dataProvider providerFIND
- */
- public function testFIND()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','SEARCHSENSITIVE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerFIND()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/FIND.data');
- }
-
- /**
- * @dataProvider providerREPLACE
- */
- public function testREPLACE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','REPLACE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerREPLACE()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/REPLACE.data');
- }
-
- /**
- * @dataProvider providerSUBSTITUTE
- */
- public function testSUBSTITUTE()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','SUBSTITUTE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerSUBSTITUTE()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/SUBSTITUTE.data');
- }
-
- /**
- * @dataProvider providerTRIM
- */
- public function testTRIM()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','TRIMSPACES'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerTRIM()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/TRIM.data');
- }
-
- /**
- * @dataProvider providerCLEAN
- */
- public function testCLEAN()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','TRIMNONPRINTABLE'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCLEAN()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/CLEAN.data');
- }
-
- /**
- * @dataProvider providerDOLLAR
- */
- public function testDOLLAR()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','DOLLAR'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerDOLLAR()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/DOLLAR.data');
- }
-
- /**
- * @dataProvider providerFIXED
- */
- public function testFIXED()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','FIXEDFORMAT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerFIXED()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/FIXED.data');
- }
-
- /**
- * @dataProvider providerT
- */
- public function testT()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','RETURNSTRING'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerT()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/T.data');
- }
-
- /**
- * @dataProvider providerTEXT
- */
- public function testTEXT()
- {
- // Enforce decimal and thousands separator values to UK/US, and currency code to USD
- call_user_func(array('PHPExcel_Shared_String','setDecimalSeparator'),'.');
- call_user_func(array('PHPExcel_Shared_String','setThousandsSeparator'),',');
- call_user_func(array('PHPExcel_Shared_String','setCurrencyCode'),'$');
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','TEXTFORMAT'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerTEXT()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/TEXT.data');
- }
-
- /**
- * @dataProvider providerVALUE
- */
- public function testVALUE()
- {
- call_user_func(array('PHPExcel_Shared_String','setDecimalSeparator'),'.');
- call_user_func(array('PHPExcel_Shared_String','setThousandsSeparator'),' ');
- call_user_func(array('PHPExcel_Shared_String','setCurrencyCode'),'$');
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Calculation_TextData','VALUE'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-8);
- }
-
- public function providerVALUE()
- {
- return new testDataFileIterator('rawTestData/Calculation/TextData/VALUE.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CalculationTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CalculationTest.php
deleted file mode 100644
index 1de827ca815..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CalculationTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-_calculateFormulaValue($formula);
- $this->assertEquals($expectedResultExcel, $resultExcel, 'should be Excel compatible');
-
- PHPExcel_Calculation_Functions::setCompatibilityMode(PHPExcel_Calculation_Functions::COMPATIBILITY_OPENOFFICE);
- $resultOpenOffice = \PHPExcel_Calculation::getInstance()->_calculateFormulaValue($formula);
- $this->assertEquals($expectedResultOpenOffice, $resultOpenOffice, 'should be OpenOffice compatible');
- }
-
- public function providerBinaryComparisonOperation()
- {
- return new testDataFileIterator('rawTestData/CalculationBinaryComparisonOperation.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/AdvancedValueBinderTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/AdvancedValueBinderTest.php
deleted file mode 100644
index 0a6ca54da8a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/AdvancedValueBinderTest.php
+++ /dev/null
@@ -1,73 +0,0 @@
-setUp();
- }
- $currencyUSD = PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE;
- $currencyEURO = str_replace('$', '€', PHPExcel_Style_NumberFormat::FORMAT_CURRENCY_USD_SIMPLE);
-
- return array(
- array('10%', 0.1, PHPExcel_Style_NumberFormat::FORMAT_PERCENTAGE_00, ',', '.', '$'),
- array('$10.11', 10.11, $currencyUSD, ',', '.', '$'),
- array('$1,010.12', 1010.12, $currencyUSD, ',', '.', '$'),
- array('$20,20', 20.2, $currencyUSD, '.', ',', '$'),
- array('$2.020,20', 2020.2, $currencyUSD, '.', ',', '$'),
- array('€2.020,20', 2020.2, $currencyEURO, '.', ',', '€'),
- array('€ 2.020,20', 2020.2, $currencyEURO, '.', ',', '€'),
- array('€2,020.22', 2020.22, $currencyEURO, ',', '.', '€'),
- );
- }
-
- /**
- * @dataProvider provider
- */
- public function testCurrency($value, $valueBinded, $format, $thousandsSeparator, $decimalSeparator, $currencyCode)
- {
- $sheet = $this->getMock(
- 'PHPExcel_Worksheet',
- array('getStyle', 'getNumberFormat', 'setFormatCode','getCellCacheController')
- );
- $cache = $this->getMockBuilder('PHPExcel_CachedObjectStorage_Memory')
- ->disableOriginalConstructor()
- ->getMock();
- $cache->expects($this->any())
- ->method('getParent')
- ->will($this->returnValue($sheet));
-
- $sheet->expects($this->once())
- ->method('getStyle')
- ->will($this->returnSelf());
- $sheet->expects($this->once())
- ->method('getNumberFormat')
- ->will($this->returnSelf());
- $sheet->expects($this->once())
- ->method('setFormatCode')
- ->with($format)
- ->will($this->returnSelf());
- $sheet->expects($this->any())
- ->method('getCellCacheController')
- ->will($this->returnValue($cache));
-
- PHPExcel_Shared_String::setCurrencyCode($currencyCode);
- PHPExcel_Shared_String::setDecimalSeparator($decimalSeparator);
- PHPExcel_Shared_String::setThousandsSeparator($thousandsSeparator);
-
- $cell = new PHPExcel_Cell(NULL, PHPExcel_Cell_DataType::TYPE_STRING, $sheet);
-
- $binder = new PHPExcel_Cell_AdvancedValueBinder();
- $binder->bindValue($cell, $value);
- $this->assertEquals($valueBinded, $cell->getValue());
- }
-}
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DataTypeTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DataTypeTest.php
deleted file mode 100644
index c17c5d0fcc3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DataTypeTest.php
+++ /dev/null
@@ -1,24 +0,0 @@
-assertInternalType('array', $result);
- $this->assertGreaterThan(0, count($result));
- $this->assertArrayHasKey('#NULL!', $result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DefaultValueBinderTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DefaultValueBinderTest.php
deleted file mode 100644
index 1c74d96f6f8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/DefaultValueBinderTest.php
+++ /dev/null
@@ -1,85 +0,0 @@
-cellStub = $this->getMockBuilder('PHPExcel_Cell')
- ->disableOriginalConstructor()
- ->getMock();
- // Configure the stub.
- $this->cellStub->expects($this->any())
- ->method('setValueExplicit')
- ->will($this->returnValue(true));
-
- }
-
- /**
- * @dataProvider binderProvider
- */
- public function testBindValue($value)
- {
- $this->createCellStub();
- $binder = new PHPExcel_Cell_DefaultValueBinder();
- $result = $binder->bindValue($this->cellStub, $value);
- $this->assertTrue($result);
- }
-
- public function binderProvider()
- {
- return array(
- array(null),
- array(''),
- array('ABC'),
- array('=SUM(A1:B2)'),
- array(true),
- array(false),
- array(123),
- array(-123.456),
- array('123'),
- array('-123.456'),
- array('#REF!'),
- array(new DateTime()),
- );
- }
-
- /**
- * @dataProvider providerDataTypeForValue
- */
- public function testDataTypeForValue()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell_DefaultValueBinder','dataTypeForValue'), $args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerDataTypeForValue()
- {
- return new testDataFileIterator('rawTestData/Cell/DefaultValueBinder.data');
- }
-
- public function testDataTypeForRichTextObject()
- {
- $objRichText = new PHPExcel_RichText();
- $objRichText->createText('Hello World');
-
- $expectedResult = PHPExcel_Cell_DataType::TYPE_INLINE;
- $result = call_user_func(array('PHPExcel_Cell_DefaultValueBinder','dataTypeForValue'), $objRichText);
- $this->assertEquals($expectedResult, $result);
- }
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/HyperlinkTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/HyperlinkTest.php
deleted file mode 100644
index 54910cfd565..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Cell/HyperlinkTest.php
+++ /dev/null
@@ -1,88 +0,0 @@
-getUrl();
- $this->assertEquals($urlValue,$result);
- }
-
- public function testSetUrl()
- {
- $initialUrlValue = 'http://www.phpexcel.net';
- $newUrlValue = 'http://github.com/PHPOffice/PHPExcel';
-
- $testInstance = new PHPExcel_Cell_Hyperlink($initialUrlValue);
- $result = $testInstance->setUrl($newUrlValue);
- $this->assertTrue($result instanceof PHPExcel_Cell_Hyperlink);
-
- $result = $testInstance->getUrl();
- $this->assertEquals($newUrlValue,$result);
- }
-
- public function testGetTooltip()
- {
- $tooltipValue = 'PHPExcel Web Site';
-
- $testInstance = new PHPExcel_Cell_Hyperlink(NULL, $tooltipValue);
-
- $result = $testInstance->getTooltip();
- $this->assertEquals($tooltipValue,$result);
- }
-
- public function testSetTooltip()
- {
- $initialTooltipValue = 'PHPExcel Web Site';
- $newTooltipValue = 'PHPExcel Repository on Github';
-
- $testInstance = new PHPExcel_Cell_Hyperlink(NULL, $initialTooltipValue);
- $result = $testInstance->setTooltip($newTooltipValue);
- $this->assertTrue($result instanceof PHPExcel_Cell_Hyperlink);
-
- $result = $testInstance->getTooltip();
- $this->assertEquals($newTooltipValue,$result);
- }
-
- public function testIsInternal()
- {
- $initialUrlValue = 'http://www.phpexcel.net';
- $newUrlValue = 'sheet://Worksheet1!A1';
-
- $testInstance = new PHPExcel_Cell_Hyperlink($initialUrlValue);
- $result = $testInstance->isInternal();
- $this->assertFalse($result);
-
- $testInstance->setUrl($newUrlValue);
- $result = $testInstance->isInternal();
- $this->assertTrue($result);
- }
-
- public function testGetHashCode()
- {
- $urlValue = 'http://www.phpexcel.net';
- $tooltipValue = 'PHPExcel Web Site';
- $initialExpectedHash = 'd84d713aed1dbbc8a7c5af183d6c7dbb';
-
- $testInstance = new PHPExcel_Cell_Hyperlink($urlValue, $tooltipValue);
-
- $result = $testInstance->getHashCode();
- $this->assertEquals($initialExpectedHash,$result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CellTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CellTest.php
deleted file mode 100644
index 11df404ce5d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/CellTest.php
+++ /dev/null
@@ -1,295 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerColumnString()
- {
- return new testDataFileIterator('rawTestData/ColumnString.data');
- }
-
- public function testColumnIndexFromStringTooLong()
- {
- $cellAddress = 'ABCD';
- try {
- $result = call_user_func(array('PHPExcel_Cell','columnIndexFromString'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Column string index can not be longer than 3 characters');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- public function testColumnIndexFromStringTooShort()
- {
- $cellAddress = '';
- try {
- $result = call_user_func(array('PHPExcel_Cell','columnIndexFromString'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Column string index can not be empty');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- /**
- * @dataProvider providerColumnIndex
- */
- public function testStringFromColumnIndex()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','stringFromColumnIndex'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerColumnIndex()
- {
- return new testDataFileIterator('rawTestData/ColumnIndex.data');
- }
-
- /**
- * @dataProvider providerCoordinates
- */
- public function testCoordinateFromString()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','coordinateFromString'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCoordinates()
- {
- return new testDataFileIterator('rawTestData/CellCoordinates.data');
- }
-
- public function testCoordinateFromStringWithRangeAddress()
- {
- $cellAddress = 'A1:AI2012';
- try {
- $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- public function testCoordinateFromStringWithEmptyAddress()
- {
- $cellAddress = '';
- try {
- $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Cell coordinate can not be zero-length string');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- public function testCoordinateFromStringWithInvalidAddress()
- {
- $cellAddress = 'AI';
- try {
- $result = call_user_func(array('PHPExcel_Cell','coordinateFromString'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Invalid cell coordinate '.$cellAddress);
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- /**
- * @dataProvider providerAbsoluteCoordinates
- */
- public function testAbsoluteCoordinateFromString()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','absoluteCoordinate'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerAbsoluteCoordinates()
- {
- return new testDataFileIterator('rawTestData/CellAbsoluteCoordinate.data');
- }
-
- public function testAbsoluteCoordinateFromStringWithRangeAddress()
- {
- $cellAddress = 'A1:AI2012';
- try {
- $result = call_user_func(array('PHPExcel_Cell','absoluteCoordinate'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- /**
- * @dataProvider providerAbsoluteReferences
- */
- public function testAbsoluteReferenceFromString()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','absoluteReference'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerAbsoluteReferences()
- {
- return new testDataFileIterator('rawTestData/CellAbsoluteReference.data');
- }
-
- public function testAbsoluteReferenceFromStringWithRangeAddress()
- {
- $cellAddress = 'A1:AI2012';
- try {
- $result = call_user_func(array('PHPExcel_Cell','absoluteReference'),$cellAddress);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Cell coordinate string can not be a range of cells');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- /**
- * @dataProvider providerSplitRange
- */
- public function testSplitRange()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','splitRange'),$args);
- foreach($result as $key => $split) {
- if (!is_array($expectedResult[$key])) {
- $this->assertEquals($expectedResult[$key], $split[0]);
- } else {
- $this->assertEquals($expectedResult[$key], $split);
- }
- }
- }
-
- public function providerSplitRange()
- {
- return new testDataFileIterator('rawTestData/CellSplitRange.data');
- }
-
- /**
- * @dataProvider providerBuildRange
- */
- public function testBuildRange()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','buildRange'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerBuildRange()
- {
- return new testDataFileIterator('rawTestData/CellBuildRange.data');
- }
-
- public function testBuildRangeInvalid()
- {
- $cellRange = '';
- try {
- $result = call_user_func(array('PHPExcel_Cell','buildRange'),$cellRange);
- } catch (PHPExcel_Exception $e) {
- $this->assertEquals($e->getMessage(), 'Range does not contain any information');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- /**
- * @dataProvider providerRangeBoundaries
- */
- public function testRangeBoundaries()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','rangeBoundaries'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerRangeBoundaries()
- {
- return new testDataFileIterator('rawTestData/CellRangeBoundaries.data');
- }
-
- /**
- * @dataProvider providerRangeDimension
- */
- public function testRangeDimension()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','rangeDimension'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerRangeDimension()
- {
- return new testDataFileIterator('rawTestData/CellRangeDimension.data');
- }
-
- /**
- * @dataProvider providerGetRangeBoundaries
- */
- public function testGetRangeBoundaries()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','getRangeBoundaries'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerGetRangeBoundaries()
- {
- return new testDataFileIterator('rawTestData/CellGetRangeBoundaries.data');
- }
-
- /**
- * @dataProvider providerExtractAllCellReferencesInRange
- */
- public function testExtractAllCellReferencesInRange()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Cell','extractAllCellReferencesInRange'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerExtractAllCellReferencesInRange()
- {
- return new testDataFileIterator('rawTestData/CellExtractAllCellReferencesInRange.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/DataSeriesValuesTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/DataSeriesValuesTest.php
deleted file mode 100644
index 38284de9a94..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/DataSeriesValuesTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-setDataType($dataTypeValue);
- $this->assertTrue($result instanceof PHPExcel_Chart_DataSeriesValues);
- }
- }
-
- public function testSetInvalidDataTypeThrowsException()
- {
- $testInstance = new PHPExcel_Chart_DataSeriesValues;
-
- try {
- $result = $testInstance->setDataType('BOOLEAN');
- } catch (Exception $e) {
- $this->assertEquals($e->getMessage(), 'Invalid datatype for chart data series values');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- public function testGetDataType()
- {
- $dataTypeValue = 'String';
-
- $testInstance = new PHPExcel_Chart_DataSeriesValues;
- $setValue = $testInstance->setDataType($dataTypeValue);
-
- $result = $testInstance->getDataType();
- $this->assertEquals($dataTypeValue,$result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LayoutTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LayoutTest.php
deleted file mode 100644
index f24e01c3131..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LayoutTest.php
+++ /dev/null
@@ -1,37 +0,0 @@
-setLayoutTarget($LayoutTargetValue);
- $this->assertTrue($result instanceof PHPExcel_Chart_Layout);
- }
-
- public function testGetLayoutTarget()
- {
- $LayoutTargetValue = 'String';
-
- $testInstance = new PHPExcel_Chart_Layout;
- $setValue = $testInstance->setLayoutTarget($LayoutTargetValue);
-
- $result = $testInstance->getLayoutTarget();
- $this->assertEquals($LayoutTargetValue,$result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LegendTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LegendTest.php
deleted file mode 100644
index 4c4f8df81f2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Chart/LegendTest.php
+++ /dev/null
@@ -1,134 +0,0 @@
-setPosition($positionValue);
- $this->assertTrue($result);
- }
- }
-
- public function testSetInvalidPositionReturnsFalse()
- {
- $testInstance = new PHPExcel_Chart_Legend;
-
- $result = $testInstance->setPosition('BottomLeft');
- $this->assertFalse($result);
- // Ensure that value is unchanged
- $result = $testInstance->getPosition();
- $this->assertEquals(PHPExcel_Chart_Legend::POSITION_RIGHT,$result);
- }
-
- public function testGetPosition()
- {
- $PositionValue = PHPExcel_Chart_Legend::POSITION_BOTTOM;
-
- $testInstance = new PHPExcel_Chart_Legend;
- $setValue = $testInstance->setPosition($PositionValue);
-
- $result = $testInstance->getPosition();
- $this->assertEquals($PositionValue,$result);
- }
-
- public function testSetPositionXL()
- {
- $positionValues = array(
- PHPExcel_Chart_Legend::xlLegendPositionBottom,
- PHPExcel_Chart_Legend::xlLegendPositionCorner,
- PHPExcel_Chart_Legend::xlLegendPositionCustom,
- PHPExcel_Chart_Legend::xlLegendPositionLeft,
- PHPExcel_Chart_Legend::xlLegendPositionRight,
- PHPExcel_Chart_Legend::xlLegendPositionTop,
- );
-
- $testInstance = new PHPExcel_Chart_Legend;
-
- foreach($positionValues as $positionValue) {
- $result = $testInstance->setPositionXL($positionValue);
- $this->assertTrue($result);
- }
- }
-
- public function testSetInvalidXLPositionReturnsFalse()
- {
- $testInstance = new PHPExcel_Chart_Legend;
-
- $result = $testInstance->setPositionXL(999);
- $this->assertFalse($result);
- // Ensure that value is unchanged
- $result = $testInstance->getPositionXL();
- $this->assertEquals(PHPExcel_Chart_Legend::xlLegendPositionRight,$result);
- }
-
- public function testGetPositionXL()
- {
- $PositionValue = PHPExcel_Chart_Legend::xlLegendPositionCorner;
-
- $testInstance = new PHPExcel_Chart_Legend;
- $setValue = $testInstance->setPositionXL($PositionValue);
-
- $result = $testInstance->getPositionXL();
- $this->assertEquals($PositionValue,$result);
- }
-
- public function testSetOverlay()
- {
- $overlayValues = array(
- TRUE,
- FALSE,
- );
-
- $testInstance = new PHPExcel_Chart_Legend;
-
- foreach($overlayValues as $overlayValue) {
- $result = $testInstance->setOverlay($overlayValue);
- $this->assertTrue($result);
- }
- }
-
- public function testSetInvalidOverlayReturnsFalse()
- {
- $testInstance = new PHPExcel_Chart_Legend;
-
- $result = $testInstance->setOverlay('INVALID');
- $this->assertFalse($result);
-
- $result = $testInstance->getOverlay();
- $this->assertFalse($result);
- }
-
- public function testGetOverlay()
- {
- $OverlayValue = TRUE;
-
- $testInstance = new PHPExcel_Chart_Legend;
- $setValue = $testInstance->setOverlay($OverlayValue);
-
- $result = $testInstance->getOverlay();
- $this->assertEquals($OverlayValue,$result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Reader/XEEValidatorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Reader/XEEValidatorTest.php
deleted file mode 100644
index f635dbb8764..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Reader/XEEValidatorTest.php
+++ /dev/null
@@ -1,55 +0,0 @@
-getMockForAbstractClass('PHPExcel_Reader_Abstract');
- $expectedResult = 'FAILURE: Should throw an Exception rather than return a value';
- $result = $reader->securityScanFile($filename);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerInvalidXML()
- {
- $tests = [];
- foreach(glob('rawTestData/Reader/XEETestInvalid*.xml') as $file) {
- $tests[] = [realpath($file), true];
- }
- return $tests;
- }
-
- /**
- * @dataProvider providerValidXML
- */
- public function testValidXML($filename, $expectedResult)
- {
- $reader = $this->getMockForAbstractClass('PHPExcel_Reader_Abstract');
- $result = $reader->securityScanFile($filename);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerValidXML()
- {
- $tests = [];
- foreach(glob('rawTestData/Reader/XEETestValid*.xml') as $file) {
- $tests[] = [realpath($file), file_get_contents($file)];
- }
- return $tests;
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/ReferenceHelperTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/ReferenceHelperTest.php
deleted file mode 100644
index f37db692e03..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/ReferenceHelperTest.php
+++ /dev/null
@@ -1,58 +0,0 @@
- $value) {
- $this->assertEquals($columnExpectedResult[$key], $value);
- }
- }
-
- public function testColumnReverseSort()
- {
- $columnBase = $columnExpectedResult = array(
- 'A','B','Z',
- 'AA','AB','AZ',
- 'BA','BB','BZ',
- 'ZA','ZB','ZZ',
- 'AAA','AAB','AAZ',
- 'ABA','ABB','ABZ',
- 'AZA','AZB','AZZ',
- 'BAA','BAB','BAZ',
- 'BBA','BBB','BBZ',
- 'BZA','BZB','BZZ'
- );
- shuffle($columnBase);
- $columnExpectedResult = array_reverse($columnExpectedResult);
- usort($columnBase, array('PHPExcel_ReferenceHelper','columnReverseSort'));
- foreach($columnBase as $key => $value) {
- $this->assertEquals($columnExpectedResult[$key], $value);
- }
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/CodePageTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/CodePageTest.php
deleted file mode 100644
index ae4aeecc5cd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/CodePageTest.php
+++ /dev/null
@@ -1,57 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerCodePage()
- {
- return new testDataFileIterator('rawTestData/Shared/CodePage.data');
- }
-
- public function testNumberToNameWithInvalidCodePage()
- {
- $invalidCodePage = 12345;
- try {
- $result = call_user_func(array('PHPExcel_Shared_CodePage','NumberToName'),$invalidCodePage);
- } catch (Exception $e) {
- $this->assertEquals($e->getMessage(), 'Unknown codepage: 12345');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
- public function testNumberToNameWithUnsupportedCodePage()
- {
- $unsupportedCodePage = 720;
- try {
- $result = call_user_func(array('PHPExcel_Shared_CodePage','NumberToName'),$unsupportedCodePage);
- } catch (Exception $e) {
- $this->assertEquals($e->getMessage(), 'Code page 720 not supported.');
- return;
- }
- $this->fail('An expected exception has not been raised.');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/DateTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/DateTest.php
deleted file mode 100644
index 80b77d3c691..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/DateTest.php
+++ /dev/null
@@ -1,188 +0,0 @@
-assertTrue($result);
- }
- }
-
- public function testSetExcelCalendarWithInvalidValue()
- {
- $unsupportedCalendar = '2012';
- $result = call_user_func(array('PHPExcel_Shared_Date','setExcelCalendar'),$unsupportedCalendar);
- $this->assertFalse($result);
- }
-
- /**
- * @dataProvider providerDateTimeExcelToPHP1900
- */
- public function testDateTimeExcelToPHP1900()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- if ($args[0] < 1) {
- $expectedResult += gmmktime(0,0,0);
- }
- $result = call_user_func_array(array('PHPExcel_Shared_Date','ExcelToPHP'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerDateTimeExcelToPHP1900()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimeExcelToPHP1900.data');
- }
-
- /**
- * @dataProvider providerDateTimePHPToExcel1900
- */
- public function testDateTimePHPToExcel1900()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Date','PHPToExcel'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-5);
- }
-
- public function providerDateTimePHPToExcel1900()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimePHPToExcel1900.data');
- }
-
- /**
- * @dataProvider providerDateTimeFormattedPHPToExcel1900
- */
- public function testDateTimeFormattedPHPToExcel1900()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Date','FormattedPHPToExcel'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-5);
- }
-
- public function providerDateTimeFormattedPHPToExcel1900()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimeFormattedPHPToExcel1900.data');
- }
-
- /**
- * @dataProvider providerDateTimeExcelToPHP1904
- */
- public function testDateTimeExcelToPHP1904()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_MAC_1904
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- if ($args[0] < 1) {
- $expectedResult += gmmktime(0,0,0);
- }
- $result = call_user_func_array(array('PHPExcel_Shared_Date','ExcelToPHP'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerDateTimeExcelToPHP1904()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimeExcelToPHP1904.data');
- }
-
- /**
- * @dataProvider providerDateTimePHPToExcel1904
- */
- public function testDateTimePHPToExcel1904()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_MAC_1904
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Date','PHPToExcel'),$args);
- $this->assertEquals($expectedResult, $result, NULL, 1E-5);
- }
-
- public function providerDateTimePHPToExcel1904()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimePHPToExcel1904.data');
- }
-
- /**
- * @dataProvider providerIsDateTimeFormatCode
- */
- public function testIsDateTimeFormatCode()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Date','isDateTimeFormatCode'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerIsDateTimeFormatCode()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimeFormatCodes.data');
- }
-
- /**
- * @dataProvider providerDateTimeExcelToPHP1900Timezone
- */
- public function testDateTimeExcelToPHP1900Timezone()
- {
- $result = call_user_func(
- array('PHPExcel_Shared_Date','setExcelCalendar'),
- PHPExcel_Shared_Date::CALENDAR_WINDOWS_1900
- );
-
- $args = func_get_args();
- $expectedResult = array_pop($args);
- if ($args[0] < 1) {
- $expectedResult += gmmktime(0,0,0);
- }
- $result = call_user_func_array(array('PHPExcel_Shared_Date','ExcelToPHP'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerDateTimeExcelToPHP1900Timezone()
- {
- return new testDataFileIterator('rawTestData/Shared/DateTimeExcelToPHP1900Timezone.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FileTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FileTest.php
deleted file mode 100644
index 9deb401d91b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FileTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function testSetUseUploadTempDirectory()
- {
- $useUploadTempDirectoryValues = array(
- TRUE,
- FALSE,
- );
-
- foreach($useUploadTempDirectoryValues as $useUploadTempDirectoryValue) {
- call_user_func(array('PHPExcel_Shared_File','setUseUploadTempDirectory'),$useUploadTempDirectoryValue);
-
- $result = call_user_func(array('PHPExcel_Shared_File','getUseUploadTempDirectory'));
- $this->assertEquals($useUploadTempDirectoryValue, $result);
- }
- }
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FontTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FontTest.php
deleted file mode 100644
index 6ce5a0261f3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/FontTest.php
+++ /dev/null
@@ -1,94 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function testSetAutoSizeMethod()
- {
- $autosizeMethodValues = array(
- PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT,
- PHPExcel_Shared_Font::AUTOSIZE_METHOD_APPROX,
- );
-
- foreach($autosizeMethodValues as $autosizeMethodValue) {
- $result = call_user_func(array('PHPExcel_Shared_Font','setAutoSizeMethod'),$autosizeMethodValue);
- $this->assertTrue($result);
- }
- }
-
- public function testSetAutoSizeMethodWithInvalidValue()
- {
- $unsupportedAutosizeMethod = 'guess';
-
- $result = call_user_func(array('PHPExcel_Shared_Font','setAutoSizeMethod'),$unsupportedAutosizeMethod);
- $this->assertFalse($result);
- }
-
- /**
- * @dataProvider providerFontSizeToPixels
- */
- public function testFontSizeToPixels()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Font','fontSizeToPixels'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerFontSizeToPixels()
- {
- return new testDataFileIterator('rawTestData/Shared/FontSizeToPixels.data');
- }
-
- /**
- * @dataProvider providerInchSizeToPixels
- */
- public function testInchSizeToPixels()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Font','inchSizeToPixels'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerInchSizeToPixels()
- {
- return new testDataFileIterator('rawTestData/Shared/InchSizeToPixels.data');
- }
-
- /**
- * @dataProvider providerCentimeterSizeToPixels
- */
- public function testCentimeterSizeToPixels()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Shared_Font','centimeterSizeToPixels'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerCentimeterSizeToPixels()
- {
- return new testDataFileIterator('rawTestData/Shared/CentimeterSizeToPixels.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/PasswordHasherTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/PasswordHasherTest.php
deleted file mode 100644
index 24a26178a10..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/PasswordHasherTest.php
+++ /dev/null
@@ -1,33 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerHashPassword()
- {
- return new testDataFileIterator('rawTestData/Shared/PasswordHashes.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/StringTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/StringTest.php
deleted file mode 100644
index 9a34729d6cf..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/StringTest.php
+++ /dev/null
@@ -1,83 +0,0 @@
-assertTrue($result);
- }
-
- public function testGetIsIconvEnabled()
- {
- $result = call_user_func(array('PHPExcel_Shared_String','getIsIconvEnabled'));
- $this->assertTrue($result);
- }
-
- public function testGetDecimalSeparator()
- {
- $localeconv = localeconv();
-
- $expectedResult = (!empty($localeconv['decimal_point'])) ? $localeconv['decimal_point'] : ',';
- $result = call_user_func(array('PHPExcel_Shared_String','getDecimalSeparator'));
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetDecimalSeparator()
- {
- $expectedResult = ',';
- $result = call_user_func(array('PHPExcel_Shared_String','setDecimalSeparator'),$expectedResult);
-
- $result = call_user_func(array('PHPExcel_Shared_String','getDecimalSeparator'));
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetThousandsSeparator()
- {
- $localeconv = localeconv();
-
- $expectedResult = (!empty($localeconv['thousands_sep'])) ? $localeconv['thousands_sep'] : ',';
- $result = call_user_func(array('PHPExcel_Shared_String','getThousandsSeparator'));
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetThousandsSeparator()
- {
- $expectedResult = ' ';
- $result = call_user_func(array('PHPExcel_Shared_String','setThousandsSeparator'),$expectedResult);
-
- $result = call_user_func(array('PHPExcel_Shared_String','getThousandsSeparator'));
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetCurrencyCode()
- {
- $localeconv = localeconv();
-
- $expectedResult = (!empty($localeconv['currency_symbol'])) ? $localeconv['currency_symbol'] : '$';
- $result = call_user_func(array('PHPExcel_Shared_String','getCurrencyCode'));
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetCurrencyCode()
- {
- $expectedResult = '£';
- $result = call_user_func(array('PHPExcel_Shared_String','setCurrencyCode'),$expectedResult);
-
- $result = call_user_func(array('PHPExcel_Shared_String','getCurrencyCode'));
- $this->assertEquals($expectedResult, $result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/TimeZoneTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/TimeZoneTest.php
deleted file mode 100644
index 0e44ceb628a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Shared/TimeZoneTest.php
+++ /dev/null
@@ -1,39 +0,0 @@
-assertTrue($result);
- }
-
- }
-
- public function testSetTimezoneWithInvalidValue()
- {
- $unsupportedTimezone = 'Etc/GMT+10';
- $result = call_user_func(array('PHPExcel_Shared_TimeZone','setTimezone'),$unsupportedTimezone);
- $this->assertFalse($result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/ColorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/ColorTest.php
deleted file mode 100644
index f157b1a34b5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/ColorTest.php
+++ /dev/null
@@ -1,81 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerColorGetRed()
- {
- return new testDataFileIterator('rawTestData/Style/ColorGetRed.data');
- }
-
- /**
- * @dataProvider providerColorGetGreen
- */
- public function testGetGreen()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Style_Color','getGreen'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerColorGetGreen()
- {
- return new testDataFileIterator('rawTestData/Style/ColorGetGreen.data');
- }
-
- /**
- * @dataProvider providerColorGetBlue
- */
- public function testGetBlue()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Style_Color','getBlue'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerColorGetBlue()
- {
- return new testDataFileIterator('rawTestData/Style/ColorGetBlue.data');
- }
-
- /**
- * @dataProvider providerColorChangeBrightness
- */
- public function testChangeBrightness()
- {
- $args = func_get_args();
- $expectedResult = array_pop($args);
- $result = call_user_func_array(array('PHPExcel_Style_Color','changeBrightness'),$args);
- $this->assertEquals($expectedResult, $result);
- }
-
- public function providerColorChangeBrightness()
- {
- return new testDataFileIterator('rawTestData/Style/ColorChangeBrightness.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/NumberFormatTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/NumberFormatTest.php
deleted file mode 100644
index 13fc3ede3a6..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Style/NumberFormatTest.php
+++ /dev/null
@@ -1,36 +0,0 @@
-assertEquals($expectedResult, $result);
- }
-
- public function providerNumberFormat()
- {
- return new testDataFileIterator('rawTestData/Style/NumberFormat.data');
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/Column/RuleTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/Column/RuleTest.php
deleted file mode 100644
index 65d0a85c651..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/Column/RuleTest.php
+++ /dev/null
@@ -1,109 +0,0 @@
-_mockAutoFilterColumnObject = $this->getMockBuilder('PHPExcel_Worksheet_AutoFilter_Column')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->_mockAutoFilterColumnObject->expects($this->any())
- ->method('testColumnInRange')
- ->will($this->returnValue(3));
-
- $this->_testAutoFilterRuleObject = new PHPExcel_Worksheet_AutoFilter_Column_Rule(
- $this->_mockAutoFilterColumnObject
- );
- }
-
- public function testGetRuleType()
- {
- $result = $this->_testAutoFilterRuleObject->getRuleType();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_FILTER, $result);
- }
-
- public function testSetRuleType()
- {
- $expectedResult = PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP;
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterRuleObject->setRuleType($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
-
- $result = $this->_testAutoFilterRuleObject->getRuleType();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetValue()
- {
- $expectedResult = 100;
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterRuleObject->setValue($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
-
- $result = $this->_testAutoFilterRuleObject->getValue();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetOperator()
- {
- $result = $this->_testAutoFilterRuleObject->getOperator();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_EQUAL, $result);
- }
-
- public function testSetOperator()
- {
- $expectedResult = PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_COLUMN_RULE_LESSTHAN;
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterRuleObject->setOperator($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
-
- $result = $this->_testAutoFilterRuleObject->getOperator();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetGrouping()
- {
- $expectedResult = PHPExcel_Worksheet_AutoFilter_Column_Rule::AUTOFILTER_RULETYPE_DATEGROUP_MONTH;
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterRuleObject->setGrouping($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
-
- $result = $this->_testAutoFilterRuleObject->getGrouping();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetParent()
- {
- $result = $this->_testAutoFilterRuleObject->getParent();
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
-
- public function testSetParent()
- {
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterRuleObject->setParent($this->_mockAutoFilterColumnObject);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
- }
-
- public function testClone()
- {
- $result = clone $this->_testAutoFilterRuleObject;
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column_Rule', $result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/ColumnTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/ColumnTest.php
deleted file mode 100644
index 3c1821bad9b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilter/ColumnTest.php
+++ /dev/null
@@ -1,173 +0,0 @@
-_mockAutoFilterObject = $this->getMockBuilder('PHPExcel_Worksheet_AutoFilter')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->_mockAutoFilterObject->expects($this->any())
- ->method('testColumnInRange')
- ->will($this->returnValue(3));
-
- $this->_testAutoFilterColumnObject = new PHPExcel_Worksheet_AutoFilter_Column(
- $this->_testInitialColumn,
- $this->_mockAutoFilterObject
- );
- }
-
- public function testGetColumnIndex()
- {
- $result = $this->_testAutoFilterColumnObject->getColumnIndex();
- $this->assertEquals($this->_testInitialColumn, $result);
- }
-
- public function testSetColumnIndex()
- {
- $expectedResult = 'L';
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterColumnObject->setColumnIndex($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
-
- $result = $this->_testAutoFilterColumnObject->getColumnIndex();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetParent()
- {
- $result = $this->_testAutoFilterColumnObject->getParent();
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
- }
-
- public function testSetParent()
- {
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterColumnObject->setParent($this->_mockAutoFilterObject);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
-
- public function testGetFilterType()
- {
- $result = $this->_testAutoFilterColumnObject->getFilterType();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_FILTER, $result);
- }
-
- public function testSetFilterType()
- {
- $result = $this->_testAutoFilterColumnObject->setFilterType(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
-
- $result = $this->_testAutoFilterColumnObject->getFilterType();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_FILTERTYPE_DYNAMICFILTER, $result);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetInvalidFilterTypeThrowsException()
- {
- $expectedResult = 'Unfiltered';
-
- $result = $this->_testAutoFilterColumnObject->setFilterType($expectedResult);
- }
-
- public function testGetJoin()
- {
- $result = $this->_testAutoFilterColumnObject->getJoin();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_OR, $result);
- }
-
- public function testSetJoin()
- {
- $result = $this->_testAutoFilterColumnObject->setJoin(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
-
- $result = $this->_testAutoFilterColumnObject->getJoin();
- $this->assertEquals(PHPExcel_Worksheet_AutoFilter_Column::AUTOFILTER_COLUMN_JOIN_AND, $result);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetInvalidJoinThrowsException()
- {
- $expectedResult = 'Neither';
-
- $result = $this->_testAutoFilterColumnObject->setJoin($expectedResult);
- }
-
- public function testSetAttributes()
- {
- $attributeSet = array( 'val' => 100,
- 'maxVal' => 200
- );
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterColumnObject->setAttributes($attributeSet);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
-
- public function testGetAttributes()
- {
- $attributeSet = array( 'val' => 100,
- 'maxVal' => 200
- );
-
- $this->_testAutoFilterColumnObject->setAttributes($attributeSet);
-
- $result = $this->_testAutoFilterColumnObject->getAttributes();
- $this->assertTrue(is_array($result));
- $this->assertEquals(count($attributeSet), count($result));
- }
-
- public function testSetAttribute()
- {
- $attributeSet = array( 'val' => 100,
- 'maxVal' => 200
- );
-
- foreach($attributeSet as $attributeName => $attributeValue) {
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterColumnObject->setAttribute($attributeName,$attributeValue);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
- }
-
- public function testGetAttribute()
- {
- $attributeSet = array( 'val' => 100,
- 'maxVal' => 200
- );
-
- $this->_testAutoFilterColumnObject->setAttributes($attributeSet);
-
- foreach($attributeSet as $attributeName => $attributeValue) {
- $result = $this->_testAutoFilterColumnObject->getAttribute($attributeName);
- $this->assertEquals($attributeValue, $result);
- }
- $result = $this->_testAutoFilterColumnObject->getAttribute('nonExistentAttribute');
- $this->assertNull($result);
- }
-
- public function testClone()
- {
- $result = clone $this->_testAutoFilterColumnObject;
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilterTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilterTest.php
deleted file mode 100644
index 9907eabc50a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/AutoFilterTest.php
+++ /dev/null
@@ -1,340 +0,0 @@
-_mockWorksheetObject = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
- $this->_mockCacheController = $this->getMockBuilder('PHPExcel_CachedObjectStorage_Memory')
- ->disableOriginalConstructor()
- ->getMock();
- $this->_mockWorksheetObject->expects($this->any())
- ->method('getCellCacheController')
- ->will($this->returnValue($this->_mockCacheController));
-
- $this->_testAutoFilterObject = new PHPExcel_Worksheet_AutoFilter(
- $this->_testInitialRange,
- $this->_mockWorksheetObject
- );
- }
-
- public function testToString()
- {
- $expectedResult = $this->_testInitialRange;
-
- // magic __toString should return the active autofilter range
- $result = $this->_testAutoFilterObject;
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testGetParent()
- {
- $result = $this->_testAutoFilterObject->getParent();
- $this->assertInstanceOf('PHPExcel_Worksheet', $result);
- }
-
- public function testSetParent()
- {
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setParent($this->_mockWorksheetObject);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
- }
-
- public function testGetRange()
- {
- $expectedResult = $this->_testInitialRange;
-
- // Result should be the active autofilter range
- $result = $this->_testAutoFilterObject->getRange();
- $this->assertEquals($expectedResult, $result);
- }
-
- public function testSetRange()
- {
- $ranges = array('G1:J512' => 'Worksheet1!G1:J512',
- 'K1:N20' => 'K1:N20'
- );
-
- foreach($ranges as $actualRange => $fullRange) {
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setRange($fullRange);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- // Result should be the new autofilter range
- $result = $this->_testAutoFilterObject->getRange();
- $this->assertEquals($actualRange, $result);
- }
- }
-
- public function testClearRange()
- {
- $expectedResult = '';
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setRange();
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- // Result should be a clear range
- $result = $this->_testAutoFilterObject->getRange();
- $this->assertEquals($expectedResult, $result);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetRangeInvalidRange()
- {
- $expectedResult = 'A1';
-
- $result = $this->_testAutoFilterObject->setRange($expectedResult);
- }
-
- public function testGetColumnsEmpty()
- {
- // There should be no columns yet defined
- $result = $this->_testAutoFilterObject->getColumns();
- $this->assertInternalType('array', $result);
- $this->assertEquals(0, count($result));
- }
-
- public function testGetColumnOffset()
- {
- $columnIndexes = array( 'H' => 0,
- 'K' => 3,
- 'M' => 5
- );
-
- // If we request a specific column by its column ID, we should get an
- // integer returned representing the column offset within the range
- foreach($columnIndexes as $columnIndex => $columnOffset) {
- $result = $this->_testAutoFilterObject->getColumnOffset($columnIndex);
- $this->assertEquals($columnOffset, $result);
- }
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testGetInvalidColumnOffset()
- {
- $invalidColumn = 'G';
-
- $result = $this->_testAutoFilterObject->getColumnOffset($invalidColumn);
- }
-
- public function testSetColumnWithString()
- {
- $expectedResult = 'L';
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setColumn($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- $result = $this->_testAutoFilterObject->getColumns();
- // Result should be an array of PHPExcel_Worksheet_AutoFilter_Column
- // objects for each column we set indexed by the column ID
- $this->assertInternalType('array', $result);
- $this->assertEquals(1, count($result));
- $this->assertArrayHasKey($expectedResult,$result);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result[$expectedResult]);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetInvalidColumnWithString()
- {
- $invalidColumn = 'A';
-
- $result = $this->_testAutoFilterObject->setColumn($invalidColumn);
- }
-
- public function testSetColumnWithColumnObject()
- {
- $expectedResult = 'M';
- $columnObject = new PHPExcel_Worksheet_AutoFilter_Column($expectedResult);
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setColumn($columnObject);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- $result = $this->_testAutoFilterObject->getColumns();
- // Result should be an array of PHPExcel_Worksheet_AutoFilter_Column
- // objects for each column we set indexed by the column ID
- $this->assertInternalType('array', $result);
- $this->assertEquals(1, count($result));
- $this->assertArrayHasKey($expectedResult,$result);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result[$expectedResult]);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetInvalidColumnWithObject()
- {
- $invalidColumn = 'E';
- $columnObject = new PHPExcel_Worksheet_AutoFilter_Column($invalidColumn);
-
- $result = $this->_testAutoFilterObject->setColumn($invalidColumn);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSetColumnWithInvalidDataType()
- {
- $invalidColumn = 123.456;
- $columnObject = new PHPExcel_Worksheet_AutoFilter_Column($invalidColumn);
-
- $result = $this->_testAutoFilterObject->setColumn($invalidColumn);
- }
-
- public function testGetColumns()
- {
- $columnIndexes = array('L','M');
-
- foreach($columnIndexes as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
-
- $result = $this->_testAutoFilterObject->getColumns();
- // Result should be an array of PHPExcel_Worksheet_AutoFilter_Column
- // objects for each column we set indexed by the column ID
- $this->assertInternalType('array', $result);
- $this->assertEquals(count($columnIndexes), count($result));
- foreach($columnIndexes as $columnIndex) {
- $this->assertArrayHasKey($columnIndex,$result);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result[$columnIndex]);
- }
- }
-
- public function testGetColumn()
- {
- $columnIndexes = array('L','M');
-
- foreach($columnIndexes as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
-
- // If we request a specific column by its column ID, we should
- // get a PHPExcel_Worksheet_AutoFilter_Column object returned
- foreach($columnIndexes as $columnIndex) {
- $result = $this->_testAutoFilterObject->getColumn($columnIndex);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
- }
-
- public function testGetColumnByOffset()
- {
- $columnIndexes = array( 0 => 'H',
- 3 => 'K',
- 5 => 'M'
- );
-
- // If we request a specific column by its offset, we should
- // get a PHPExcel_Worksheet_AutoFilter_Column object returned
- foreach($columnIndexes as $columnIndex => $columnID) {
- $result = $this->_testAutoFilterObject->getColumnByOffset($columnIndex);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- $this->assertEquals($result->getColumnIndex(),$columnID);
- }
- }
-
- public function testGetColumnIfNotSet()
- {
- // If we request a specific column by its column ID, we should
- // get a PHPExcel_Worksheet_AutoFilter_Column object returned
- $result = $this->_testAutoFilterObject->getColumn('K');
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter_Column', $result);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testGetColumnWithoutRangeSet()
- {
- // Clear the range
- $result = $this->_testAutoFilterObject->setRange();
-
- $result = $this->_testAutoFilterObject->getColumn('A');
- }
-
- public function testClearRangeWithExistingColumns()
- {
- $expectedResult = '';
-
- $columnIndexes = array('L','M','N');
- foreach($columnIndexes as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setRange();
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- // Range should be cleared
- $result = $this->_testAutoFilterObject->getRange();
- $this->assertEquals($expectedResult, $result);
-
- // Column array should be cleared
- $result = $this->_testAutoFilterObject->getColumns();
- $this->assertInternalType('array', $result);
- $this->assertEquals(0, count($result));
- }
-
- public function testSetRangeWithExistingColumns()
- {
- $expectedResult = 'G1:J512';
-
- // These columns should be retained
- $columnIndexes1 = array('I','J');
- foreach($columnIndexes1 as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
- // These columns should be discarded
- $columnIndexes2 = array('K','L','M');
- foreach($columnIndexes2 as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
-
- // Setters return the instance to implement the fluent interface
- $result = $this->_testAutoFilterObject->setRange($expectedResult);
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
-
- // Range should be correctly set
- $result = $this->_testAutoFilterObject->getRange();
- $this->assertEquals($expectedResult, $result);
-
- // Only columns that existed in the original range and that
- // still fall within the new range should be retained
- $result = $this->_testAutoFilterObject->getColumns();
- $this->assertInternalType('array', $result);
- $this->assertEquals(count($columnIndexes1), count($result));
- }
-
- public function testClone()
- {
- $columnIndexes = array('L','M');
-
- foreach($columnIndexes as $columnIndex) {
- $this->_testAutoFilterObject->setColumn($columnIndex);
- }
-
- $result = clone $this->_testAutoFilterObject;
- $this->assertInstanceOf('PHPExcel_Worksheet_AutoFilter', $result);
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/CellCollectionTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/CellCollectionTest.php
deleted file mode 100644
index c2c130d7a3a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/CellCollectionTest.php
+++ /dev/null
@@ -1,31 +0,0 @@
-getActiveSheet();
- $worksheet->setCellValue('A1', 1);
- $worksheet->setCellValue('A2', 2);
- $this->assertEquals($cells, $worksheet->getCellCollection(), "Cache method \"$method\".");
- PHPExcel_CachedObjectStorageFactory::finalize();
- }
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnCellIteratorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnCellIteratorTest.php
deleted file mode 100644
index bef500ca82a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnCellIteratorTest.php
+++ /dev/null
@@ -1,87 +0,0 @@
-mockCell = $this->getMockBuilder('PHPExcel_Cell')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestRow')
- ->will($this->returnValue(5));
- $this->mockWorksheet->expects($this->any())
- ->method('getCellByColumnAndRow')
- ->will($this->returnValue($this->mockCell));
- }
-
-
- public function testIteratorFullRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnCellIterator($this->mockWorksheet, 'A');
- $ColumnCellIndexResult = 1;
- $this->assertEquals($ColumnCellIndexResult, $iterator->key());
-
- foreach($iterator as $key => $ColumnCell) {
- $this->assertEquals($ColumnCellIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Cell', $ColumnCell);
- }
- }
-
- public function testIteratorStartEndRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnCellIterator($this->mockWorksheet, 'A', 2, 4);
- $ColumnCellIndexResult = 2;
- $this->assertEquals($ColumnCellIndexResult, $iterator->key());
-
- foreach($iterator as $key => $ColumnCell) {
- $this->assertEquals($ColumnCellIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Cell', $ColumnCell);
- }
- }
-
- public function testIteratorSeekAndPrev()
- {
- $iterator = new PHPExcel_Worksheet_ColumnCellIterator($this->mockWorksheet, 'A', 2, 4);
- $columnIndexResult = 4;
- $iterator->seek(4);
- $this->assertEquals($columnIndexResult, $iterator->key());
-
- for($i = 1; $i < $columnIndexResult-1; $i++) {
- $iterator->prev();
- $this->assertEquals($columnIndexResult - $i, $iterator->key());
- }
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSeekOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnCellIterator($this->mockWorksheet, 'A', 2, 4);
- $iterator->seek(1);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testPrevOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnCellIterator($this->mockWorksheet, 'A', 2, 4);
- $iterator->prev();
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnIteratorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnIteratorTest.php
deleted file mode 100644
index 7d78b61791d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/ColumnIteratorTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-mockColumn = $this->getMockBuilder('PHPExcel_Worksheet_Column')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestColumn')
- ->will($this->returnValue('E'));
- $this->mockWorksheet->expects($this->any())
- ->method('current')
- ->will($this->returnValue($this->mockColumn));
- }
-
-
- public function testIteratorFullRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnIterator($this->mockWorksheet);
- $columnIndexResult = 'A';
- $this->assertEquals($columnIndexResult, $iterator->key());
-
- foreach($iterator as $key => $column) {
- $this->assertEquals($columnIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Worksheet_Column', $column);
- }
- }
-
- public function testIteratorStartEndRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnIterator($this->mockWorksheet, 'B', 'D');
- $columnIndexResult = 'B';
- $this->assertEquals($columnIndexResult, $iterator->key());
-
- foreach($iterator as $key => $column) {
- $this->assertEquals($columnIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Worksheet_Column', $column);
- }
- }
-
- public function testIteratorSeekAndPrev()
- {
- $ranges = range('A','E');
- $iterator = new PHPExcel_Worksheet_ColumnIterator($this->mockWorksheet, 'B', 'D');
- $columnIndexResult = 'D';
- $iterator->seek('D');
- $this->assertEquals($columnIndexResult, $iterator->key());
-
- for($i = 1; $i < array_search($columnIndexResult, $ranges); $i++) {
- $iterator->prev();
- $expectedResult = $ranges[array_search($columnIndexResult, $ranges) - $i];
- $this->assertEquals($expectedResult, $iterator->key());
- }
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSeekOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnIterator($this->mockWorksheet, 'B', 'D');
- $iterator->seek('A');
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testPrevOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_ColumnIterator($this->mockWorksheet, 'B', 'D');
- $iterator->prev();
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowCellIteratorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowCellIteratorTest.php
deleted file mode 100644
index cdd3c84d4bd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowCellIteratorTest.php
+++ /dev/null
@@ -1,89 +0,0 @@
-mockCell = $this->getMockBuilder('PHPExcel_Cell')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestColumn')
- ->will($this->returnValue('E'));
- $this->mockWorksheet->expects($this->any())
- ->method('getCellByColumnAndRow')
- ->will($this->returnValue($this->mockCell));
- }
-
-
- public function testIteratorFullRange()
- {
- $iterator = new PHPExcel_Worksheet_RowCellIterator($this->mockWorksheet);
- $RowCellIndexResult = 'A';
- $this->assertEquals($RowCellIndexResult, $iterator->key());
-
- foreach($iterator as $key => $RowCell) {
- $this->assertEquals($RowCellIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Cell', $RowCell);
- }
- }
-
- public function testIteratorStartEndRange()
- {
- $iterator = new PHPExcel_Worksheet_RowCellIterator($this->mockWorksheet, 2, 'B', 'D');
- $RowCellIndexResult = 'B';
- $this->assertEquals($RowCellIndexResult, $iterator->key());
-
- foreach($iterator as $key => $RowCell) {
- $this->assertEquals($RowCellIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Cell', $RowCell);
- }
- }
-
- public function testIteratorSeekAndPrev()
- {
- $ranges = range('A','E');
- $iterator = new PHPExcel_Worksheet_RowCellIterator($this->mockWorksheet, 2, 'B', 'D');
- $RowCellIndexResult = 'D';
- $iterator->seek('D');
- $this->assertEquals($RowCellIndexResult, $iterator->key());
-
- for($i = 1; $i < array_search($RowCellIndexResult, $ranges); $i++) {
- $iterator->prev();
- $expectedResult = $ranges[array_search($RowCellIndexResult, $ranges) - $i];
- $this->assertEquals($expectedResult, $iterator->key());
- }
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSeekOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_RowCellIterator($this->mockWorksheet, 2, 'B', 'D');
- $iterator->seek(1);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testPrevOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_RowCellIterator($this->mockWorksheet, 2, 'B', 'D');
- $iterator->prev();
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowIteratorTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowIteratorTest.php
deleted file mode 100644
index 48d8b6bb1cf..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/RowIteratorTest.php
+++ /dev/null
@@ -1,87 +0,0 @@
-mockRow = $this->getMockBuilder('PHPExcel_Worksheet_Row')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
-
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestRow')
- ->will($this->returnValue(5));
- $this->mockWorksheet->expects($this->any())
- ->method('current')
- ->will($this->returnValue($this->mockRow));
- }
-
-
- public function testIteratorFullRange()
- {
- $iterator = new PHPExcel_Worksheet_RowIterator($this->mockWorksheet);
- $rowIndexResult = 1;
- $this->assertEquals($rowIndexResult, $iterator->key());
-
- foreach($iterator as $key => $row) {
- $this->assertEquals($rowIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Worksheet_Row', $row);
- }
- }
-
- public function testIteratorStartEndRange()
- {
- $iterator = new PHPExcel_Worksheet_RowIterator($this->mockWorksheet, 2, 4);
- $rowIndexResult = 2;
- $this->assertEquals($rowIndexResult, $iterator->key());
-
- foreach($iterator as $key => $row) {
- $this->assertEquals($rowIndexResult++, $key);
- $this->assertInstanceOf('PHPExcel_Worksheet_Row', $row);
- }
- }
-
- public function testIteratorSeekAndPrev()
- {
- $iterator = new PHPExcel_Worksheet_RowIterator($this->mockWorksheet, 2, 4);
- $columnIndexResult = 4;
- $iterator->seek(4);
- $this->assertEquals($columnIndexResult, $iterator->key());
-
- for($i = 1; $i < $columnIndexResult-1; $i++) {
- $iterator->prev();
- $this->assertEquals($columnIndexResult - $i, $iterator->key());
- }
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testSeekOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_RowIterator($this->mockWorksheet, 2, 4);
- $iterator->seek(1);
- }
-
- /**
- * @expectedException PHPExcel_Exception
- */
- public function testPrevOutOfRange()
- {
- $iterator = new PHPExcel_Worksheet_RowIterator($this->mockWorksheet, 2, 4);
- $iterator->prev();
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetColumnTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetColumnTest.php
deleted file mode 100644
index c70c38d364f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetColumnTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestRow')
- ->will($this->returnValue(5));
- }
-
-
- public function testInstantiateColumnDefault()
- {
- $column = new PHPExcel_Worksheet_Column($this->mockWorksheet);
- $this->assertInstanceOf('PHPExcel_Worksheet_Column', $column);
- $columnIndex = $column->getColumnIndex();
- $this->assertEquals('A', $columnIndex);
- }
-
- public function testInstantiateColumnSpecified()
- {
- $column = new PHPExcel_Worksheet_Column($this->mockWorksheet, 'E');
- $this->assertInstanceOf('PHPExcel_Worksheet_Column', $column);
- $columnIndex = $column->getColumnIndex();
- $this->assertEquals('E', $columnIndex);
- }
-
- public function testGetCellIterator()
- {
- $column = new PHPExcel_Worksheet_Column($this->mockWorksheet);
- $cellIterator = $column->getCellIterator();
- $this->assertInstanceOf('PHPExcel_Worksheet_ColumnCellIterator', $cellIterator);
- }
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetRowTest.php b/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetRowTest.php
deleted file mode 100644
index 2761b52be61..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/Classes/PHPExcel/Worksheet/WorksheetRowTest.php
+++ /dev/null
@@ -1,46 +0,0 @@
-mockWorksheet = $this->getMockBuilder('PHPExcel_Worksheet')
- ->disableOriginalConstructor()
- ->getMock();
- $this->mockWorksheet->expects($this->any())
- ->method('getHighestColumn')
- ->will($this->returnValue('E'));
- }
-
-
- public function testInstantiateRowDefault()
- {
- $row = new PHPExcel_Worksheet_Row($this->mockWorksheet);
- $this->assertInstanceOf('PHPExcel_Worksheet_Row', $row);
- $rowIndex = $row->getRowIndex();
- $this->assertEquals(1, $rowIndex);
- }
-
- public function testInstantiateRowSpecified()
- {
- $row = new PHPExcel_Worksheet_Row($this->mockWorksheet, 5);
- $this->assertInstanceOf('PHPExcel_Worksheet_Row', $row);
- $rowIndex = $row->getRowIndex();
- $this->assertEquals(5, $rowIndex);
- }
-
- public function testGetCellIterator()
- {
- $row = new PHPExcel_Worksheet_Row($this->mockWorksheet);
- $cellIterator = $row->getCellIterator();
- $this->assertInstanceOf('PHPExcel_Worksheet_RowCellIterator', $cellIterator);
- }
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/bootstrap.php b/htdocs/includes/phpoffice/phpexcel/unitTests/bootstrap.php
deleted file mode 100644
index 8e8cdb39a9c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/bootstrap.php
+++ /dev/null
@@ -1,49 +0,0 @@
- /etc/php.d/xdebug.ini' . "\n";
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/custom/Complex.php b/htdocs/includes/phpoffice/phpexcel/unitTests/custom/Complex.php
deleted file mode 100644
index a0ac2d2c9d0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/custom/Complex.php
+++ /dev/null
@@ -1,114 +0,0 @@
-realPart = (float) $realPart;
- $this->imaginaryPart = (float) $imaginaryPart;
- $this->suffix = strtolower($suffix);
- }
-
- public function getReal()
- {
- return $this->realPart;
- }
-
- public function getImaginary()
- {
- return $this->imaginaryPart;
- }
-
- public function getSuffix()
- {
- return $this->suffix;
- }
-
- public function __toString() {
- $str = "";
- if ($this->imaginaryPart != 0.0) {
- if (abs($this->imaginaryPart) != 1.0) {
- $str .= $this->imaginaryPart . $this->suffix;
- } else {
- $str .= (($this->imaginaryPart < 0.0) ? '-' : ''). $this->suffix;
- }
- }
- if ($this->realPart != 0.0) {
- if (($str) && ($this->imaginaryPart > 0.0))
- $str = "+" . $str;
- $str = $this->realPart . $str;
- }
- if (!$str)
- $str = "0.0";
- return $str;
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/custom/complexAssert.php b/htdocs/includes/phpoffice/phpexcel/unitTests/custom/complexAssert.php
deleted file mode 100644
index 5b64e4ced51..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/custom/complexAssert.php
+++ /dev/null
@@ -1,62 +0,0 @@
-_errorMessage = 'Expected Error: ' .
- $actual . ' !== ' . $expected;
- return FALSE;
- }
-
- $expectedComplex = new Complex($expected);
- $actualComplex = new Complex($actual);
-
- if (!is_numeric($actualComplex->getReal()) || !is_numeric($expectedComplex->getReal())) {
- if ($actualComplex->getReal() !== $expectedComplex->getReal()) {
- $this->_errorMessage = 'Mismatched String: ' .
- $actualComplex->getReal() . ' !== ' . $expectedComplex->getReal();
- return FALSE;
- }
- return TRUE;
- }
-
- if ($actualComplex->getReal() < ($expectedComplex->getReal() - $delta) ||
- $actualComplex->getReal() > ($expectedComplex->getReal() + $delta)) {
- $this->_errorMessage = 'Mismatched Real part: ' .
- $actualComplex->getReal() . ' != ' . $expectedComplex->getReal();
- return FALSE;
- }
-
- if ($actualComplex->getImaginary() < ($expectedComplex->getImaginary() - $delta) ||
- $actualComplex->getImaginary() > ($expectedComplex->getImaginary() + $delta)) {
- $this->_errorMessage = 'Mismatched Imaginary part: ' .
- $actualComplex->getImaginary() . ' != ' . $expectedComplex->getImaginary();
- return FALSE;
- }
-
- if ($actualComplex->getSuffix() !== $actualComplex->getSuffix()) {
- $this->_errorMessage = 'Mismatched Suffix: ' .
- $actualComplex->getSuffix() . ' != ' . $expectedComplex->getSuffix();
- return FALSE;
- }
-
- return TRUE;
- }
-
-
- public function getErrorMessage() {
- return $this->_errorMessage;
- }
-
-}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit-cc.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit-cc.xml
deleted file mode 100644
index 7e598cc9ab4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit-cc.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
-
-
-
-
- ./Classes
-
-
-
- ../Classes
-
- ../Classes/PHPExcel/Shared/PCLZip
- ../Classes/PHPExcel/Shared/JAMA
- ../Classes/PHPExcel/Writer/PDF
-
-
-
-
-
-
-
-
-
-
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit.xml
deleted file mode 100644
index 2c2ff360ae0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/phpunit.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-
-
-
-
-
-
- ./Classes
-
-
-
- ../Classes
-
- ../Classes/PHPExcel/Shared/PCLZip
- ../Classes/PHPExcel/Shared/JAMA
- ../Classes/PHPExcel/Writer/PDF
-
-
-
-
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATE.data
deleted file mode 100644
index cdcc776b044..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATE.data
+++ /dev/null
@@ -1,79 +0,0 @@
-# Year Month Day Result Comments
-18, 11, 11, 6890
-1900, 1, 1, 1 // Excel 1900 Calendar Base Date
-1900, 2, 28, 59 // Day before Excel mythical 1900 leap day
-1900, 2, 29, 60 // Excel mythical 1900 leap day
-1900, 3, 1, 61 // Day after Excel mythical 1900 leap day
-1901, 12, 13, 713 // Day after Excel mythical 1900 leap day
-1901, 12, 14, 714 // PHP 32-bit Earliest Date
-1903, 12, 31, 1461
-1904, 1, 1, 1462 // Excel 1904 Calendar Base Date
-1904, 1, 2, 1463
-1960, 12, 19, 22269
-1970, 1, 1, 25569 // PHP Base Date
-1982, 12, 7, 30292
-2008, 6, 12, 39611
-2038, 1, 19, 50424 // PHP 32-bit Latest Date
-2038, 1, 20, 50425 // Day after PHP 32-bit Latest Date
-2008, 1, 1, 39448
-2008, 1, , 39447
-2008, 1, -1, 39446
-2008, 1, -30, 39417
-2008, 1, -31, 39416
-2008, 1, -365, 39082
-2008, 3, 1, 39508
-2008, 3, , 39507
-2008, 3, -1, 39506
-2008, 3, -365, 39142
-2008, , 1, 39417
-2008, -1, 1, 39387
-2008, -11, 1, 39083
-2008, -12, 1, 39052
-2008, -13, 1, 39022
-2008, -13, 30, 39051
-2008, -13, , 39021
-2008, -13, -30, 38991
-2008, -13, -31, 38990
-2008, 13, 1, 39814
-2007, 15, , 39507
-2008, 26, 1, 40210
-2008, 26, -10, 40199
-2008, -26, 61, 38686
-2010, -15, -50, 39641
-2010, -15, 50, 39741
-2010, 15, -50, 40552
-2010, 15, 50, 40652
-2010, 1.5, 1, 40179
-2010, 1.5, 0, 40178
-2010, 0, 1.5, 40148
-2010, 1, 1.5, 40179
-2012, 6, 15, 41075
-2012, 6, , 41060
-2012, , 15, 40892
-, 6, 15, 167
-10, 6, 15, 3819
-10, , , 3622
-, 10, , 274
-, , 10, "#NUM!"
--20, , , "#NUM!"
--20, 6, 15, "#NUM!"
-9999, 12, 31, 2958465 // Excel Maximum Date
-10000, 1, 1, "#NUM!" // Exceeded Excel Maximum Date
-2008, 8, 10, 39670
-2008, 12, 31, 39813
-2008, 8, 32, 39692
-2008, 13, 31, 39844
-2009, 1, 0, 39813
-2009, 1, -1, 39812
-2009, 0, 0, 39782
-2009, 0, -1, 39781
-2009, -1, 0, 39752
-2009, -1, -1, 39751
-2010, 0, -1, 40146
-2010, 5, 31, 40329
-2010, 1, '21st', 40199 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-2010, "March",'21st', 40258 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-2010, "March",21, 40258 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"ABC", 1, 21, "#VALUE!"
-2010, "DEF", 21, "#VALUE!"
-2010, 3, "GHI", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEDIF.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEDIF.data
deleted file mode 100644
index e8d9e06bfac..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEDIF.data
+++ /dev/null
@@ -1,96 +0,0 @@
-"ABC", "2007-1-10", "Y", "#VALUE!"
-"2007-1-1", "DEF", "Y", "#VALUE!"
-"2007-1-1", "2007-1-10", "XYZ", "#VALUE!"
-"2007-1-10", "2007-1-1", "Y", "#NUM!"
-"2007-12-31", "2008-1-10", "Y", 0
-"2007-1-1", "2007-1-10", "Y", 0
-"2007-1-1", "2007-1-10", "M", 0
-"2007-1-1", "2007-1-10", "D", 9
-"2007-1-1", "2007-1-10", "YM", 0
-"2007-1-1", "2007-1-10", "YD", 9
-"2007-1-1", "2007-1-10", "MD", 9
-"2007-1-1", "2007-12-31", "Y", 0
-"2007-1-1", "2007-12-31", "M", 11
-"2007-1-1", "2007-12-31", "D", 364
-"2007-1-1", "2007-12-31", "YM", 11
-"2007-1-1", "2007-12-31", "YD", 364
-"2007-1-1", "2007-12-31", "MD", 30
-"2007-1-1", "2008-7-1", "Y", 1
-"2007-1-1", "2008-7-1", "M", 18
-"2007-1-1", "2008-7-1", "D", 547
-"2007-1-1", "2008-7-1", "YM", 6
-"2007-1-1", "2008-7-1", "YD", 181
-"2007-1-1", "2008-7-1", "MD", 0
-"2007-1-1", "2007-1-31", "Y", 0
-"2007-1-1", "2007-1-31", "M", 0
-"2007-1-1", "2007-1-31", "D", 30
-"2007-1-1", "2007-1-31", "YM", 0
-"2007-1-1", "2007-1-31", "YD", 30
-"2007-1-1", "2007-1-31", "MD", 30
-"2007-1-1", "2007-2-1", "Y", 0
-"2007-1-1", "2007-2-1", "M", 1
-"2007-1-1", "2007-2-1", "D", 31
-"2007-1-1", "2007-2-1", "YM", 1
-"2007-1-1", "2007-2-1", "YD", 31
-"2007-1-1", "2007-2-1", "MD", 0
-"2007-1-1", "2007-2-28", "Y", 0
-"2007-1-1", "2007-2-28", "M", 1
-"2007-1-1", "2007-2-28", "D", 58
-"2007-1-1", "2007-2-28", "YM", 1
-"2007-1-1", "2007-2-28", "YD", 58
-"2007-1-1", "2007-2-28", "MD", 27
-"2007-1-31", "2007-2-1", "Y", 0
-"2007-1-31", "2007-2-1", "M", 0
-"2007-1-31", "2007-2-1", "D", 1
-"2007-1-31", "2007-2-1", "YM", 0
-"2007-1-31", "2007-2-1", "YD", 1
-"2007-1-31", "2007-2-1", "MD", 1
-"2007-1-31", "2007-3-1", "Y", 0
-"2007-1-31", "2007-3-1", "M", 1
-"2007-1-31", "2007-3-1", "D", 29
-"2007-1-31", "2007-3-1", "YM", 1
-"2007-1-31", "2007-3-1", "YD", 29
-"2007-1-31", "2007-3-1", "MD", -2
-"2007-1-31", "2007-3-31", "Y", 0
-"2007-1-31", "2007-3-31", "M", 2
-"2007-1-31", "2007-3-31", "D", 59
-"2007-1-31", "2007-3-31", "YM", 2
-"2007-1-31", "2007-3-31", "YD", 59
-"2007-1-31", "2007-3-31", "MD", 0
-"2008-1-1", "2008-9-1", "Y", 0
-"2008-1-1", "2008-9-1", "M", 8
-"2008-1-1", "2008-9-1", "D", 244
-"2008-1-1", "2008-9-1", "YM", 8
-"2008-1-1", "2008-9-1", "YD", 244
-"2008-1-1", "2008-9-1", "MD", 0
-"2007-2-1", "2008-4-1", "Y", 1
-"2007-2-1", "2008-4-1", "M", 14
-"2007-2-1", "2008-4-1", "D", 425
-"2007-2-1", "2008-4-1", "YM", 2
-"2007-2-1", "2008-4-1", "YD", 59
-"2007-2-1", "2008-4-1", "MD", 0
-"1960-12-19", "2008-6-28", "Y", 47
-"1960-12-19", "2008-6-28", "M", 570
-"1960-12-19", "2008-6-28", "D", 17358
-"1960-12-19", "2008-6-28", "YM", 6
-"1960-12-19", "2008-6-28", "YD", 191
-"1960-12-19", "2008-6-28", "MD", 9
-"1982-12-7", "2008-6-28", "Y", 25
-"1982-12-7", "2008-6-28", "M", 306
-"1982-12-7", "2008-6-28", "D", 9335
-"1982-12-7", "2008-6-28", "YM", 6
-"1982-12-7", "2008-6-28", "YD", 203
-"1982-12-7", "2008-6-28", "MD", 21
-"2007-12-25", "2010-3-17", "Y", 2
-"2007-12-25", "2010-3-17", "M", 26
-"2007-12-25", "2010-3-17", "D", 813
-"2007-12-25", "2010-3-17", "YM", 2
-"2007-12-25", "2010-3-17", "YD", 82
-"2007-12-25", "2010-3-17", "MD", 20
-"19-12-1960", "26-01-2012" "Y", 51
-"19-12-1960", "26-01-2012" "M", 613
-"19-12-1960", "26-01-2012" "D", 18665
-"19-12-1960", "26-01-2012" "YM", 1
-"19-12-1960", "26-01-2012" "YD", 38
-"19-12-1960", "26-01-2012" "MD", 7
-"19-12-1960", "12-12-2012" "Y", 50
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEVALUE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEVALUE.data
deleted file mode 100644
index f4b0f68e369..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DATEVALUE.data
+++ /dev/null
@@ -1,66 +0,0 @@
-# Date String Result
-"25-Dec-1899", "#VALUE!"
-"31-Dec-1899", "#VALUE!"
-"1-Jan-1900", 1
-"1900/2/28", 59
-"29-02-1900", 60
-"29th February 1900", 60 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"1900/3/1", 61
-"13-12-1901", 713
-"14-12-1901", 714
-"1903/12/31", 1461
-"1-Jan-1904", 1462
-"2nd-Jan-1904", 1463 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"19-12-1960", 22269
-"1st January 1970", 25569 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"7-Dec-1982", 30292
-"1-1-2008", 39448
-"2038-01-19", 50424
-"2-6-2008", 39601
-"December 25th 2008", 39807 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"1 Jan-2008", 39448
-"12-31-2008", 39813 // MS Excel success or failure dependent on country settings
-"31-12-2008", 39813 // PHPExcel tries to handle both US and UK formats, irrespective of country settings
-"8/22/2008", 39682 // MS Excel success or failure dependent on country settings
-"22/8/2008", 39682 // PHPExcel tries to handle both US and UK formats, irrespective of country settings
-"22/8/08", 39682
-"22-AUG-2008", 39682
-"2008/02/23", 39501
-"6-7-2008", 39635
-"28-2-2007", 39141 // MS Excel success or failure dependent on country settings
-"2-28-2007", 39141 // PHPExcel tries to handle both US and UK formats, irrespective of country settings
-"29-2-2007", "#VALUE!" // Should fail because it's an invalid date, but PHPExcel currently adjusts to 1-3-2007 - FIX NEEDED
-"1/1/1999", 36161
-"1954-07-20", 19925
-"22 August 98", 36029
-"1st March 2007", 39142 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"The 1st day of March 2007", "#VALUE!"
-"1 Jan", 41275
-"31/12", 41639
-"12/31", 11658 // Excel reads as 1st December 1931, not 31st December in current year
-"5-JUL", 41460
-"5 Jul", 41460
-"12/2008", 39783
-"10/32", 11963
-11, "#VALUE!"
-TRUE, "#VALUE!"
-FALSE, "#VALUE!"
-1, "#VALUE!"
-12345, "#VALUE!"
-12, "#VALUE!"
-"12-Feb-2010", 40221
-"Feb-12-2010", 40221 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"February-12-2010", 40221 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"February 12 2010", 40221 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"18 Feb 2010", 40227
-"17th 3rd 2010", 40254 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"Feb 18th 2010", 40227 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"1st Feb 2010", 40210 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"1st-Feb-2010", 40210 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"1me Fev 2010", "#VALUE!"
-"February 1st 2010", 40210 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"2nd Feb 2010", 40211 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"Second Feb 2010", "#VALUE!"
-"First August 2010", "#VALUE!"
-"1st August 2010", 40391 // MS Excel will fail with a #VALUE return, but PHPExcel can parse this date
-"15:30:25", 0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAY.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAY.data
deleted file mode 100644
index bde1e8b5e11..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAY.data
+++ /dev/null
@@ -1,8 +0,0 @@
-# Date Value Result
-22269, 19
-30348, 1
-30843, 10
-"11-Nov-1918", 11
-"28-Feb-1904", 28
-"Invalid", "#VALUE!"
--1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAYS360.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAYS360.data
deleted file mode 100644
index c7abb61285b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/DAYS360.data
+++ /dev/null
@@ -1,34 +0,0 @@
-"ABC", "2007-1-10", FALSE, "#VALUE!"
-"2007-1-1", "DEF", TRUE, "#VALUE!"
-"2007-1-1", "2007-1-10", "XYZ", "#VALUE!"
-"2007-1-10", "2007-1-1", "Y", "#VALUE!"
-"2007-1-1", "2007-1-10", FALSE, 9
-"2007-1-1", "2007-1-10", TRUE, 9
-"2007-1-1", "2007-12-31", FALSE, 360
-"2007-1-1", "2007-12-31", TRUE, 359
-"2007-1-1", "2008-7-1", FALSE, 540
-"2007-1-1", "2008-7-1", TRUE, 540
-"2007-1-1", "2007-1-31", FALSE, 30
-"2007-1-1", "2007-1-31", TRUE, 29
-"2007-1-1", "2007-2-1", FALSE, 30
-"2007-1-1", "2007-2-1", TRUE, 30
-"2007-1-1", "2007-2-28", FALSE, 57
-"2007-1-1", "2007-2-28", TRUE, 57
-"2007-1-31", "2007-2-1", FALSE, 1
-"2007-1-31", "2007-2-1", TRUE, 1
-"2007-1-31", "2007-3-1", FALSE, 31
-"2007-1-31", "2007-3-1", TRUE, 31
-"2007-1-31", "2007-3-31", FALSE, 60
-"2007-1-31", "2007-3-31", TRUE, 60
-"2008-1-1", "2008-9-1", FALSE, 240
-"2008-1-1", "2008-9-1", TRUE, 240
-"2007-2-1", "2008-4-1", FALSE, 420
-"2007-2-1", "2008-4-1", TRUE, 420
-"1960-12-19", "2008-6-28", FALSE, 17109
-"1960-12-19", "2008-6-28", TRUE, 17109
-"1982-12-7", "2008-6-28", FALSE, 9201
-"1982-12-7", "2008-6-28", TRUE, 9201
-"2000-2-28", "2000-3-31", FALSE, 33
-"2000-2-28", "2000-3-31", TRUE, 32
-"2000-2-29", "2000-3-31", FALSE, 30
-"2000-2-29", "2000-3-31", TRUE, 31
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EDATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EDATE.data
deleted file mode 100644
index b7b13e09e31..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EDATE.data
+++ /dev/null
@@ -1,15 +0,0 @@
-"15-Jan-2008", 1, 39493
-"15-Jan-2008", -1, 39431
-"15-Jan-2008", 2, 39522
-"31-Mar-2007", 1, 39202
-"31-Mar-2007", -1, 39141
-"31-Mar-2008", -1, 39507
-"31-Mar-2008", -4, 39416
-"29-Feb-2008", -12, 39141
-"15-Mar-2007", 3, 39248
-22269.0, 0, 22269
-22269.0, 2, 22331
-22269.0, 110, 25618
-22269.0, -110, 18920
-"15-Mar-2007", "ABC", "#VALUE!"
-"Invalid", 12, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EOMONTH.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EOMONTH.data
deleted file mode 100644
index 130a769c78d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/EOMONTH.data
+++ /dev/null
@@ -1,17 +0,0 @@
-"15-Jan-2008", 1, 39507
-"15-Jan-2008", -1, 39447
-"15-Jan-2008", 2, 39538
-"31-Mar-2007", 1, 39202
-"31-Mar-2007", -1, 39141
-"31-Mar-2008", -1, 39507
-"31-Mar-2008", -4, 39416
-"29-Feb-2008", -12, 39141
-"15-Mar-2007", 3, 39263
-22269.0, 0, 22281
-22269.0, 2, 22340
-22269.0, 110, 25627
-22269.0, -110, 18932
-22269.0, 3, 22371
-22269.0, 3.75, 22371
-"15-Mar-2007", "ABC", "#VALUE!"
-"Invalid", 12, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/HOUR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/HOUR.data
deleted file mode 100644
index c07d0dccd1e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/HOUR.data
+++ /dev/null
@@ -1,12 +0,0 @@
-0.25, 6
-0.75, 18
-0.5, 12
-0.6, 14
-"11-Nov-1918 11:11", 11
-"11:59 PM", 23
-"23:59:59", 23
-3600, 2
--3600, 0
-7200, 3
-65535, 19
-"1 O'Clock", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MINUTE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MINUTE.data
deleted file mode 100644
index 2931c750095..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MINUTE.data
+++ /dev/null
@@ -1,12 +0,0 @@
-0.2, 48
-0.4, 36
-0.6, 24
-0.8, 12
-"11-Nov-1918 11:15", 15
-"11:59 PM", 59
-"23:59:59", 59
-3600, 0
--3600, 0
-12500, 28
-65535, 12
-"Half past 1 O'Clock", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MONTH.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MONTH.data
deleted file mode 100644
index 6336ffdabb3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/MONTH.data
+++ /dev/null
@@ -1,12 +0,0 @@
-, 1
-0, 1
-22269.0, 12
-30348.0, 2
-30843.0, 6
-"11-Nov-1918", 11
-"28-Feb-1904", 2
-"01 Jul 2003", 7
-38094, 4
-"Dec 2003", 12
--10, "#NUM!"
-"ABCD", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/NETWORKDAYS.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/NETWORKDAYS.data
deleted file mode 100644
index 70034bfd793..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/NETWORKDAYS.data
+++ /dev/null
@@ -1,18 +0,0 @@
-"1-Jan-2007", "10-Jan-2007", 8
-"18-Jun-2008", "20-Jun-2008", 3
-"16-Jun-2008", "20-Jun-2008", 5
-"14-Jun-2008", "20-Jun-2008", 5
-"20-Jun-2008", "20-Jun-2008", 1
-"21-Jun-2008", "21-Jun-2008", 0
-"20-Jun-2008", "20-Jun-2008", "20-Jun-2008", 0
-"20-Jun-2008", "20-Jun-2008", "20-Jun-2008", "20-Jun-2008", 0
-"14-Jun-2008", "25-Jun-2008", 8
-"19-Dec-1960", "10-Jan-1961", 17
-"10-Jan-1961", "19-Dec-1960", -17
-"19-Dec-1960", "10-Jan-1961", "25-Dec-1960", "26-Dec-1960", "01-Jan-1961", 16
-"10-Jan-1961", "19-Dec-1960", "25-Dec-1960", "26-Dec-1960", "01-Jan-1961", -16
-"1-Jan-2007", "31-Mar-2007", 65
-"1-Jan-2007", "31-Jan-2007", 23
-"1-Jan-2007", "1-Feb-2007", 24
-"1-Jan-2007", "28-Feb-2007", 43
-"31-Jan-2007", "1-Feb-2007", 2
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/SECOND.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/SECOND.data
deleted file mode 100644
index 14a8d3a5990..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/SECOND.data
+++ /dev/null
@@ -1,12 +0,0 @@
-0.2339930556, 57
-0.4202893519, 13
-0.6078935185, 22
-0.8022106481, 11
-"11-Nov-1918 11:15:35", 35
-"11:59 PM", 0
-"23:59:59", 59
-3600, 0
--3601, 59
-12500, 20
-65535, 15
-"Half past 1 O'Clock", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIME.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIME.data
deleted file mode 100644
index 46d0b9ac07e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIME.data
+++ /dev/null
@@ -1,22 +0,0 @@
-18, 11, 11, 0.757766203704
-6, 15, 5, 0.260474537037
-12, 30, 10, 0.520949074074
-18, 45, 25, 0.781539351852
-15, 32, 50, 0.647800925926
-12, , 61, 0.500706018519
-11, , -1, 0.458321759259
-10, , -67, 0.415891203704
-13, 62, 5, 0.584780092593
-9, -80, 17, 0.319641203704
-8, -162, , 0.220833333333
-2, -120, -1, "#NUM!"
-2, -120, , 0.000000000000
-2, -120, 1, 0.000011574074
-36, 1, 2, 0.500717592593
--1, 2, 3, "#NUM!"
--1, 61, 29, 0.001030092593
--1, 61, -60, 0.000000000000
-"A", , , "#VALUE!"
-11, 59, 0, 0.499305555556
-12, 0, 0, 0.500000000000
-16, 48, 10, 0.700115740741
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIMEVALUE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIMEVALUE.data
deleted file mode 100644
index 457de24e37c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/TIMEVALUE.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"12:00:00 am", 0
-"12:01:02 am", 0.000717593
-"12:03 pm", 0.502083333
-"12:7:11 pm", 0.504988426
-"4:13:39", 0.176145833
-"6:20:17 pm", 0.764085648
-"18:33:27", 0.773229167
-"31/12/2007 03:27:15", 0.143923611
-"9:44:55 pm", 0.90619213
-12, "#VALUE!"
-"13:01", 0.542361111
-"33:45", 0.40625
-"13:01PM", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKDAY.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKDAY.data
deleted file mode 100644
index ca2e11f7b32..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKDAY.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"24-Oct-1968", 5
-"24-Oct-1968", 2, 4
-"24-Oct-1968", 3, 3
-"2000-06-14", 4
-"2000-06-14", 2, 3
-"2000-06-14", 3, 2
-"1996-07-24", 4
-"1996-07-24", 2, 3
-"1996-07-24", 3, 2
-"1996-07-27", 7
-"1996-07-27", 2, 6
-"1996-07-27", 3, 5
-"1977-7-31", 1
-"1977-7-31", 2, 7
-"1977-7-31", 3, 6
-"1977-8-1", 2
-"1977-8-1", 2, 1
-"1977-8-1", 3, 0
-"1900-2-5", 2, 7
-"1900-2-1", 1
-38093, 6
-38093, 2, 5
-38093, 3, 4
-"3/7/1977", "A", "#VALUE!"
-"3/7/1977", 0, "#NUM!"
-"Invalid", 1, "#VALUE!"
--1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKNUM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKNUM.data
deleted file mode 100644
index 22a01a74c52..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WEEKNUM.data
+++ /dev/null
@@ -1,7 +0,0 @@
-"21-Dec-2000", 1, 52
-"1995-01-01", 1, 1
-"3/7/1977", 27
-"3/7/1977", "A", "#VALUE!"
-"3/7/1977", 0, "#NUM!"
-"Invalid", 1, "#VALUE!"
--1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WORKDAY.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WORKDAY.data
deleted file mode 100644
index 1070898b248..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/WORKDAY.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"1-Jan-2007", "ABC", "#VALUE!"
-"1-Jan-2007", 9, 39094
-"18-Jun-2008", 2, 39619
-"16-Jun-2008", 4, 39619
-"14-Jun-2008", 6, 39622
-"14-Jun-2008", 11, 39629
-"14-Jun-2008", -2, 39611
-"14-Jun-2008", -6, 39605
-"19-Dec-2008", 10, 39815
-"19-Dec-2008", 10, "25-Dec-2008", "26-Dec-2008", "01-Jan-2009", 39820
-"19-Dec-2008", 10, {"25-Dec-2008"|"26-Dec-2008"|"01-Jan-2009"}, 39820
-39820, -10, {"25-Dec-2008"|"26-Dec-2008"|"01-Jan-2009"}, 39801
-"5-Apr-2012", 3, {"6-Apr-2012"|"9-Apr-2012"}, 41010
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEAR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEAR.data
deleted file mode 100644
index fe35f1b4a36..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEAR.data
+++ /dev/null
@@ -1,11 +0,0 @@
-, 1900
-1, 1900
-33333.33, 1991
-22269.0, 1960
-30348.0, 1983
-30843.0, 1984
-"01 Jan 2525", 2525
-"11-Nov-1918", 1918
-"28-Feb-1904", 1904
--10, "#NUM!"
-"ABCD", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEARFRAC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEARFRAC.data
deleted file mode 100644
index 3fc5827728a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/DateTime/YEARFRAC.data
+++ /dev/null
@@ -1,65 +0,0 @@
-"2007-1-1", "2007-1-10", 0, 0.025
-"2007-1-1", "2007-1-10", 1, 0.02465753424658
-"2007-1-1", "2007-1-10", 2, 0.025
-"2007-1-1", "2007-1-10", 3, 0.02465753424658
-"2007-1-1", "2007-1-10", 4, 0.025
-"2007-1-1", "2007-12-31", 0, 1.0
-"2007-1-1", "2007-12-31", 1, 0.99726027397260
-"2007-1-1", "2007-12-31", 2, 1.01111111111111
-"2007-1-1", "2007-12-31", 3, 0.99726027397260
-"2007-1-1", "2007-12-31", 4, 0.99722222222222
-"2007-1-1", "2008-7-1", 0, 1.5
-"2007-1-1", "2008-7-1", 1, 1.49658002735978
-"2007-1-1", "2008-7-1", 2, 1.51944444444444
-"2007-1-1", "2008-7-1", 3, 1.49863013698630
-"2007-1-1", "2008-7-1", 4, 1.5
-"2007-1-1", "2007-1-31", 0, 0.08333333333333
-"2007-1-1", "2007-1-31", 1, 0.08219178082192
-"2007-1-1", "2007-1-31", 2, 0.08333333333333
-"2007-1-1", "2007-1-31", 3, 0.08219178082192
-"2007-1-1", "2007-1-31", 4, 0.08055555555556
-"2007-1-1", "2007-2-1", 0, 0.08333333333333
-"2007-1-1", "2007-2-1", 1, 0.08493150684932
-"2007-1-1", "2007-2-1", 2, 0.08611111111111
-"2007-1-1", "2007-2-1", 3, 0.08493150684932
-"2007-1-1", "2007-2-1", 4, 0.08333333333333
-"2007-1-1", "2007-2-28", 0, 0.15833333333333
-"2007-1-1", "2007-2-28", 1, 0.15890410958904
-"2007-1-1", "2007-2-28", 2, 0.16111111111111
-"2007-1-1", "2007-2-28", 3, 0.15890410958904
-"2007-1-1", "2007-2-28", 4, 0.15833333333333
-"2007-1-31", "2007-2-1", 0, 0.00277777777778
-"2007-1-31", "2007-2-1", 1, 0.00273972602740
-"2007-1-31", "2007-2-1", 2, 0.00277777777778
-"2007-1-31", "2007-2-1", 3, 0.00273972602740
-"2007-1-31", "2007-2-1", 4, 0.00277777777778
-"2007-1-31", "2007-3-1", 0, 0.08611111111111
-"2007-1-31", "2007-3-1", 1, 0.07945205479452
-"2007-1-31", "2007-3-1", 2, 0.08055555555556
-"2007-1-31", "2007-3-1", 3, 0.07945205479452
-"2007-1-31", "2007-3-1", 4, 0.08611111111111
-"2007-1-31", "2007-3-31", 0, 0.16666666666667
-"2007-1-31", "2007-3-31", 1, 0.16164383561644
-"2007-1-31", "2007-3-31", 2, 0.16388888888889
-"2007-1-31", "2007-3-31", 3, 0.16164383561644
-"2007-1-31", "2007-3-31", 4, 0.16666666666667
-"2008-1-1", "2008-9-1", 0, 0.66666666666667
-"2008-1-1", "2008-9-1", 1, 0.66666666666667
-"2008-1-1", "2008-9-1", 2, 0.67777777777778
-"2008-1-1", "2008-9-1", 3, 0.66849315068493
-"2008-1-1", "2008-9-1", 4, 0.66666666666667
-"2007-2-1", "2008-4-1", 0, 1.16666666666667
-"2007-2-1", "2008-4-1", 1, 1.16279069767442
-"2007-2-1", "2008-4-1", 2, 1.18055555555556
-"2007-2-1", "2008-4-1", 3, 1.16438356164384
-"2007-2-1", "2008-4-1", 4, 1.16666666666667
-"1960-12-19", "2008-6-28", 0, 47.525
-"1960-12-19", "2008-6-28", 1, 47.52162252765670
-"1960-12-19", "2008-6-28", 2, 48.21666666666670
-"1960-12-19", "2008-6-28", 3, 47.55616438356160
-"1960-12-19", "2008-6-28", 4, 47.525
-"1982-12-7", "2008-6-28", 0, 25.55833333333330
-"1982-12-7", "2008-6-28", 1, 25.55718921111340
-"1982-12-7", "2008-6-28", 2, 25.93055555555560
-"1982-12-7", "2008-6-28", 3, 25.57534246575340
-"1982-12-7", "2008-6-28", 4, 25.55833333333330
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELI.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELI.data
deleted file mode 100644
index bab50c698e5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELI.data
+++ /dev/null
@@ -1,59 +0,0 @@
-1.5, -1, "#NUM!"
--1, 6, 2.2488660949282200E-05
-0, 3, 0.0
-3, 0, 4.8807925650332900
-1, 5, 2.7146314958504900E-04
-1.5, 1, 9.8166642847516600E-01
--1.5, 2.5, 3.3783462087443800E-01
--1.5, 14.99, 2.1218581758012900E-13
-1, 30, 3.5395005050254700E-42
-2.5, 1, 2.5167162420253600
-2.5, 1.5, 2.5167162420253600
--2.5, 1.5, -2.5167162420253600
-3.5, 1, 6.2058349320630000
-0.7, 3, 7.3673733669342700E-03
-3.5, 2, 3.8320120716293600
-35, 2, 1.0129348967887200E+14
--35, 2, 1.0129348967887200E+14
--35, 3, -9.4217724797020600E+13
--35, 4, 8.5141821583727800E+13
-1.5, "XYZ", "#VALUE!"
-"ABC", 3, "#VALUE!"
--9, 1, -1.0309147086534900E+03
--3.5, 1, -6.2058349320630000
--0.735, 1, -3.9288151661176300E-01
-0, 1, 0.0
-0.035, 1, 1.7502679823335300E-02
-1, 1, 5.6515909758194300E-01
-1.5, 1, 9.8166642847516600E-01
-2.5, 1, 2.5167162420253600
-3.5, 1, 6.2058349320630000
--9, 2, 8.6449622063929800E+02
--3.5, 2, 3.8320120716293600
--0.735, 2, 7.0619941066585700E-02
-0, 2, 0.0
-0.035, 2, 1.5314063208086000E-04
-0.9, 2, 1.0825972222234100E-01
-1, 2, 1.3574766658069900E-01
-1.9, 2, 6.0327243548745000E-01
-2.5, 2, 1.2764661588156100
-3.5, 2, 3.8320120716293600
-4, 2, 6.4221894991960900
-0.035, 3, 8.9329755645604500E-07
-0.7, 3, 7.3673733669342700E-03
-0.89, 3, 1.5428502532466100E-02
-4, 3, 3.3372758428109200
-4, 5, 5.0472437285149600E-01
-1.5, 7, 2.8406417355214300E-05
-3, 9, 1.3237298826652200E-04
--3.5, 0, 7.3782034775718600
--1.5, 0, 1.6467232021476800
-0, 0, 1.0
-1, 0, 1.2660658480342600
-1.5, 0, 1.6467232021476800
-2.5, 0, 3.2898391723912900
-3.5, 0, 7.3782034775718600
--3.5, -1, "#NUM!"
-TRUE, 1, "#VALUE!"
-1, TRUE, "#VALUE!"
-21, 2, 1.0477785626593200E+08
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELJ.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELJ.data
deleted file mode 100644
index e84f16e6dfc..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELJ.data
+++ /dev/null
@@ -1,37 +0,0 @@
-1.5, -1, "#NUM!"
-0, 1, 0.0
-1, 1, 4.4005058567713000E-01
-1, 5, 2.4975773021123400E-04
-1.9, 2, 3.2992582866978500E-01
--2.5, 1.5, -4.9709410250442200E-01
-3.5, 1, 1.3737752717818600E-01
-0.89, 3, 1.3974004027880800E-02
-3.5, 2, 4.5862918476829000E-01
-35, 2, 1.2935945082689100E-01
--35, 2, 1.2935945082689100E-01
--35, 3, 2.9207004782372000E-02
--35, 4, -1.3436636593244100E-01
-1.5, "XYZ", "#VALUE!"
-"ABC", 3, "#VALUE!"
--3.5, 1, -1.3737752717818600E-01
--0.735, 1, -3.4323577520309400E-01
-0, 1, 0.0
-0.035, 1, 1.7497320451918700E-02
-1.5, 1, 5.5793650789080400E-01
-2.5, 1, 4.9709410250442200E-01
-3.5, 1, 1.3737752717818600E-01
--9, 2, 1.4484636919412800E-01
--0.735, 2, 6.4538955636373900E-02
-0, 2, 0.0
-0.9, 2, 9.4586304292255000E-02
-1.9, 2, 3.2992582866978500E-01
-0.035, 2, 1.5310936908796500E-04
-3.5, 2, 4.5862918476829000E-01
-4, 2, 3.6412814319431200E-01
-0.035, 3, 8.9316078090293600E-07
-0.7, 3, 6.9296548267509400E-03
-0.89, 3, 1.3974004027880800E-02
-4, 3, 4.3017147115339600E-01
-4, 5, 1.3208665605594800E-01
-1.5, 7, 2.4679795788287900E-05
-3, 9, 8.4395021309091800E-05
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELK.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELK.data
deleted file mode 100644
index fce3a78d672..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELK.data
+++ /dev/null
@@ -1,38 +0,0 @@
-1.5, -1, "#NUM!"
-0, 2, "#NUM!"
-0.1, 3, 7.9900124326586500E+03
-1, 0, 4.2102442108341800E-01
-1.5, 0, 2.1380556932365400E-01
--1.5, 2, "#NUM!"
-1.5, 1, 2.7738780363225900E-01
-1.5, 2, 5.8365597416666600E-01
-2.3, 1.5, 9.4982447142959400E-02
-2.5, 1, 7.3890815650266900E-02
-3.5, 1, 2.2239393224640700E-02
-3.5, 3, 5.9161817991348200E-02
-3, 9, 3.9795880106238500E+02
-3.5, 2, 3.2307121670869000E-02
-1.5, "XYZ", "#VALUE!"
-"ABC", 3, "#VALUE!"
--3.5, 1, "#NUM!"
--0.735, 1, "#NUM!"
-0, 1, "#NUM!"
-0.035, 1, 2.8501970000186900E+01
-1.5, 1, 2.7738780363225900E-01
-2.5, 1, 7.3890815650266900E-02
-3.5, 1, 2.2239393224640700E-02
--9, 2, "#NUM!"
--0.735, 2, "#NUM!"
-0, 2, "#NUM!"
-0.9, 2, 2.0790271301014400
-1.9, 2, 2.9690930137427500E-01
-0.035, 2, 1.6321537072931900E+03
-3.5, 2, 3.2307121670869000E-02
-4, 2, 1.7401425543547400E-02
-0.035, 3, 1.8656035423207900E+05
-0.7, 3, 2.1972168909566600E+01
-0.89, 3, 1.0317473075007600E+01
-4, 3, 2.9884924431707800E-02
-4, 5, 1.5434254881392600E-01
-1.5, 7, 2.4577004526116700E+03
-3, 9, 3.9795880106238500E+02
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELY.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELY.data
deleted file mode 100644
index 2247f4ecf42..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BESSELY.data
+++ /dev/null
@@ -1,37 +0,0 @@
-1.5, -1, "#NUM!"
-1.23, 45.67, -2.7027311261175000E+63
-2.5, 0, 4.9807035844668900E-01
-2.5, 1, 1.4591813750831300E-01
-2.5, 2, -3.8133584844003800E-01
-3.5, 1, 4.1018841662769800E-01
-3.5, 3, -3.5833534643622900E-01
-4, 2, 2.1590359910699000E-01
-3.5, 2, 4.5371436417535000E-02
-12.5, 0, -1.7121430684466900E-01
-12.5, 1, -1.5383825635163900E-01
-12.5, 2, 1.4660018586805400E-01
-12.5, 22, -3.5760343503878700E+02
-1.5, "XYZ", "#VALUE!"
-"ABC", 3, "#VALUE!"
--3.5, 1, "#NUM!"
--0.735, 1, "#NUM!"
-0, 1, "#NUM!"
-0.035, 1, -1.8233338940000000E+01
-1.5, 1, -4.1230862700000000E-01
-2.5, 1, 1.4591813800000000E-01
-3.5, 1, 4.1018841700000000E-01
--9, 2, "#NUM!"
--0.735, 2, "#NUM!"
-0, 2, "#NUM!"
-0.9, 2, -1.9459096070000000
-1.9, 2, -6.6987867400000000E-01
-0.035, 2, -1.0396979410000000E+03
-3.5, 2, 4.5371436000000000E-02
-4, 2, 2.1590359900000000E-01
-0.035, 3, -1.1880438840000000E+05
-0.7, 3, -1.5819479070000000E+01
-0.89, 3, -8.0204412520000000
-4, 3, -1.8202211000000000E-01
-4, 5, -7.9585141800000000E-01
-1.5, 7, -1.8873970340000000E+03
-3, 9, -4.4495950710000000E+02
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2DEC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2DEC.data
deleted file mode 100644
index 04365fcae3f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2DEC.data
+++ /dev/null
@@ -1,10 +0,0 @@
-"10110010", "178"
-"1100100", "100"
-"111001010101", "#NUM!" // Too large
-"101", "5"
-"10", "2"
-"0", "0"
-"21", "#NUM!" // Invalid binary number
-TRUE, "#VALUE!" // Non string
-"1110010101", "-107" // 2's Complement
-"1111111111", "-1" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2HEX.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2HEX.data
deleted file mode 100644
index 7f7198e6587..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2HEX.data
+++ /dev/null
@@ -1,14 +0,0 @@
-"10110010", "B2"
-"111001010101", "#NUM!" // Too large
-"11111011", 4, "00FB" // Leading places
-"11111011", 3.75, "0FB" // Leading places as a float
-"11111011", -1, "#NUM!" // Leading places negative
-"11111011", "ABC", "#VALUE!" // Leading places non-numeric
-"1110", "E"
-"101", "5"
-"10", "2"
-"0", "0"
-"21", "#NUM!" // Invalid binary number
-TRUE, "#VALUE!" // Non string
-"1110010101", "FFFFFFFF95" // 2's Complement
-"1111111111", "FFFFFFFFFF" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2OCT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2OCT.data
deleted file mode 100644
index 3971654b368..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/BIN2OCT.data
+++ /dev/null
@@ -1,15 +0,0 @@
-"1100100", "144"
-"10110010", "262"
-"111001010101", "#NUM!" // Too large
-"1001", 3, "011" // Leading places
-"1001", 4.75, "0011" // Leading places as a float
-"1001", -1, "#NUM!" // Leading places negative
-"1001", "ABC", "#VALUE!" // Leading places non-numeric
-"00000010", "2"
-"00000101", "5"
-"00001101", "15"
-"0", "0"
-"21", "#NUM!" // Invalid binary number
-TRUE, "#VALUE!" // Non string
-"1110010101", "7777777625" // 2's Complement
-"1111111111", "7777777777" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/COMPLEX.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/COMPLEX.data
deleted file mode 100644
index 980b53bf8a3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/COMPLEX.data
+++ /dev/null
@@ -1,547 +0,0 @@
-3, 4, "3+4i"
-3, 4, "j", "3+4j"
-12.34, 5.67, "j", "12.34+5.67j"
-3.5, "A", "#VALUE!"
-1.234E-5, 6.78E9, "1.234E-5+6780000000i"
-1.234E5, 6.78E-9, "123400+6.78E-9i"
-3.5, 2.5, "3.5+2.5i"
-3.5, 1, "3.5+i"
-3.5, 0, 3.5
-3.5, -1, "3.5-i"
-3.5, -2.5, "3.5-2.5i"
-1, 2.5, "1+2.5i"
-1, 1, "1+i"
-1, 0, 1
-1, -1, "1-i"
-1, -2.5, "1-2.5i"
-0, 2.5, "2.5i"
-0, 1, "i"
-0, 0, 0
-0, -1, "-i"
-0, -2.5, "-2.5i"
--1, 2.5, "-1+2.5i"
--1, 1, "-1+i"
--1, 0, -1
--1, -1, "-1-i"
--1, -2.5, "-1-2.5i"
--3.5, 2.5, "-3.5+2.5i"
--3.5, 1, "-3.5+i"
--3.5, 0, "-3.5"
--3.5, -1, "-3.5-i"
--3.5, -2.5, "-3.5-2.5i"
--2.5, -2.5, "-2.5-2.5i"
--2.5, -2.5, "-2.5-2.5i"
--1.5, -2.5, "-1.5-2.5i"
--1.5, -2.5, "-1.5-2.5i"
--0.5, -2.5, "-0.5-2.5i"
-0, -2.5, "-2.5i"
-0.5, -2.5, "0.5-2.5i"
-1, -2.5, "1-2.5i"
-1.5, -2.5, "1.5-2.5i"
-2, -2.5, "2-2.5i"
-2.5, -2.5, "2.5-2.5i"
-3, -2.5, "3-2.5i"
-3.5, -2.5, "3.5-2.5i"
--2.5, -2.5, "-2.5-2.5i"
--2.5, -2.5, "-2.5-2.5i"
--1.5, -2.5, "-1.5-2.5i"
--1.5, -2.5, "-1.5-2.5i"
--0.5, -2.5, "-0.5-2.5i"
-0, -2.5, "-2.5i"
-0.5, -2.5, "0.5-2.5i"
-1, -2.5, "1-2.5i"
-1.5, -2.5, "1.5-2.5i"
-2, -2.5, "2-2.5i"
-2.5, -2.5, "2.5-2.5i"
-3, -2.5, "3-2.5i"
-3.5, -2.5, "3.5-2.5i"
--2.5, -1.5, "-2.5-1.5i"
--2.5, -1.5, "-2.5-1.5i"
--1.5, -1.5, "-1.5-1.5i"
--1.5, -1.5, "-1.5-1.5i"
--0.5, -1.5, "-0.5-1.5i"
-0, -1.5, "-1.5i"
-0.5, -1.5, "0.5-1.5i"
-1, -1.5, "1-1.5i"
-1.5, -1.5, "1.5-1.5i"
-2, -1.5, "2-1.5i"
-2.5, -1.5, "2.5-1.5i"
-3, -1.5, "3-1.5i"
-3.5, -1.5, "3.5-1.5i"
--2.5, -1.5, "-2.5-1.5i"
--2.5, -1.5, "-2.5-1.5i"
--1.5, -1.5, "-1.5-1.5i"
--1.5, -1.5, "-1.5-1.5i"
--0.5, -1.5, "-0.5-1.5i"
-0, -1.5, "-1.5i"
-0.5, -1.5, "0.5-1.5i"
-1, -1.5, "1-1.5i"
-1.5, -1.5, "1.5-1.5i"
-2, -1.5, "2-1.5i"
-2.5, -1.5, "2.5-1.5i"
-3, -1.5, "3-1.5i"
-3.5, -1.5, "3.5-1.5i"
--2.5, -0.5, "-2.5-0.5i"
--2.5, -0.5, "-2.5-0.5i"
--1.5, -0.5, "-1.5-0.5i"
--1.5, -0.5, "-1.5-0.5i"
--0.5, -0.5, "-0.5-0.5i"
-0, -0.5, "-0.5i"
-0.5, -0.5, "0.5-0.5i"
-1, -0.5, "1-0.5i"
-1.5, -0.5, "1.5-0.5i"
-2, -0.5, "2-0.5i"
-2.5, -0.5, "2.5-0.5i"
-3, -0.5, "3-0.5i"
-3.5, -0.5, "3.5-0.5i"
--2.5, 0, -2.5
--2.5, 0, -2.5
--1.5, 0, -1.5
--1.5, 0, -1.5
--0.5, 0, -0.5
-0, 0, 0
-0.5, 0, 0.5
-1, 0, 1
-1.5, 0, 1.5
-2, 0, 2
-2.5, 0, 2.5
-3, 0, 3
-3.5, 0, 3.5
--2.5, 0.5, "-2.5+0.5i"
--2.5, 0.5, "-2.5+0.5i"
--1.5, 0.5, "-1.5+0.5i"
--1.5, 0.5, "-1.5+0.5i"
--0.5, 0.5, "-0.5+0.5i"
-0, 0.5, "0.5i"
-0.5, 0.5, "0.5+0.5i"
-1, 0.5, "1+0.5i"
-1.5, 0.5, "1.5+0.5i"
-2, 0.5, "2+0.5i"
-2.5, 0.5, "2.5+0.5i"
-3, 0.5, "3+0.5i"
-3.5, 0.5, "3.5+0.5i"
--2.5, 1, "-2.5+i"
--2.5, 1, "-2.5+i"
--1.5, 1, "-1.5+i"
--1.5, 1, "-1.5+i"
--0.5, 1, "-0.5+i"
-0, 1, "i"
-0.5, 1, "0.5+i"
-1, 1, "1+i"
-1.5, 1, "1.5+i"
-2, 1, "2+i"
-2.5, 1, "2.5+i"
-3, 1, "3+i"
-3.5, 1, "3.5+i"
--2.5, 1.5, "-2.5+1.5i"
--2.5, 1.5, "-2.5+1.5i"
--1.5, 1.5, "-1.5+1.5i"
--1.5, 1.5, "-1.5+1.5i"
--0.5, 1.5, "-0.5+1.5i"
-0, 1.5, "1.5i"
-0.5, 1.5, "0.5+1.5i"
-1, 1.5, "1+1.5i"
-1.5, 1.5, "1.5+1.5i"
-2, 1.5, "2+1.5i"
-2.5, 1.5, "2.5+1.5i"
-3, 1.5, "3+1.5i"
-3.5, 1.5, "3.5+1.5i"
--2.5, 2, "-2.5+2i"
--2.5, 2, "-2.5+2i"
--1.5, 2, "-1.5+2i"
--1.5, 2, "-1.5+2i"
--0.5, 2, "-0.5+2i"
-0, 2, "2i"
-0.5, 2, "0.5+2i"
-1, 2, "1+2i"
-1.5, 2, "1.5+2i"
-2, 2, "2+2i"
-2.5, 2, "2.5+2i"
-3, 2, "3+2i"
-3.5, 2, "3.5+2i"
--2.5, 2.5, "-2.5+2.5i"
--2.5, 2.5, "-2.5+2.5i"
--1.5, 2.5, "-1.5+2.5i"
--1.5, 2.5, "-1.5+2.5i"
--0.5, 2.5, "-0.5+2.5i"
-0, 2.5, "2.5i"
-0.5, 2.5, "0.5+2.5i"
-1, 2.5, "1+2.5i"
-1.5, 2.5, "1.5+2.5i"
-2, 2.5, "2+2.5i"
-2.5, 2.5, "2.5+2.5i"
-3, 2.5, "3+2.5i"
-3.5, 2.5, "3.5+2.5i"
--2.5, 3, "-2.5+3i"
--2.5, 3, "-2.5+3i"
--1.5, 3, "-1.5+3i"
--1.5, 3, "-1.5+3i"
--0.5, 3, "-0.5+3i"
-0, 3, "3i"
-0.5, 3, "0.5+3i"
-1, 3, "1+3i"
-1.5, 3, "1.5+3i"
-2, 3, "2+3i"
-2.5, 3, "2.5+3i"
-3, 3, "3+3i"
-3.5, 3, "3.5+3i"
--2.5, 3.5, "-2.5+3.5i"
--2.5, 3.5, "-2.5+3.5i"
--1.5, 3.5, "-1.5+3.5i"
--1.5, 3.5, "-1.5+3.5i"
--0.5, 3.5, "-0.5+3.5i"
-0, 3.5, "3.5i"
-0.5, 3.5, "0.5+3.5i"
-1, 3.5, "1+3.5i"
-1.5, 3.5, "1.5+3.5i"
-2, 3.5, "2+3.5i"
-2.5, 3.5, "2.5+3.5i"
-3, 3.5, "3+3.5i"
-3.5, 3.5, "3.5+3.5i"
--2.5, -2.5, "i", "-2.5-2.5i"
--2.5, -2.5, "i", "-2.5-2.5i"
--1.5, -2.5, "i", "-1.5-2.5i"
--1.5, -2.5, "i", "-1.5-2.5i"
--0.5, -2.5, "i", "-0.5-2.5i"
-0, -2.5, "i", "-2.5i"
-0.5, -2.5, "i", "0.5-2.5i"
-1, -2.5, "i", "1-2.5i"
-1.5, -2.5, "i", "1.5-2.5i"
-2, -2.5, "i", "2-2.5i"
-2.5, -2.5, "i", "2.5-2.5i"
-3, -2.5, "i", "3-2.5i"
-3.5, -2.5, "i", "3.5-2.5i"
--2.5, -2.5, "i", "-2.5-2.5i"
--2.5, -2.5, "i", "-2.5-2.5i"
--1.5, -2.5, "i", "-1.5-2.5i"
--1.5, -2.5, "i", "-1.5-2.5i"
--0.5, -2.5, "i", "-0.5-2.5i"
-0, -2.5, "i", "-2.5i"
-0.5, -2.5, "i", "0.5-2.5i"
-1, -2.5, "i", "1-2.5i"
-1.5, -2.5, "i", "1.5-2.5i"
-2, -2.5, "i", "2-2.5i"
-2.5, -2.5, "i", "2.5-2.5i"
-3, -2.5, "i", "3-2.5i"
-3.5, -2.5, "i", "3.5-2.5i"
--2.5, -1.5, "i", "-2.5-1.5i"
--2.5, -1.5, "i", "-2.5-1.5i"
--1.5, -1.5, "i", "-1.5-1.5i"
--1.5, -1.5, "i", "-1.5-1.5i"
--0.5, -1.5, "i", "-0.5-1.5i"
-0, -1.5, "i", "-1.5i"
-0.5, -1.5, "i", "0.5-1.5i"
-1, -1.5, "i", "1-1.5i"
-1.5, -1.5, "i", "1.5-1.5i"
-2, -1.5, "i", "2-1.5i"
-2.5, -1.5, "i", "2.5-1.5i"
-3, -1.5, "i", "3-1.5i"
-3.5, -1.5, "i", "3.5-1.5i"
--2.5, -1.5, "i", "-2.5-1.5i"
--2.5, -1.5, "i", "-2.5-1.5i"
--1.5, -1.5, "i", "-1.5-1.5i"
--1.5, -1.5, "i", "-1.5-1.5i"
--0.5, -1.5, "i", "-0.5-1.5i"
-0, -1.5, "i", "-1.5i"
-0.5, -1.5, "i", "0.5-1.5i"
-1, -1.5, "i", "1-1.5i"
-1.5, -1.5, "i", "1.5-1.5i"
-2, -1.5, "i", "2-1.5i"
-2.5, -1.5, "i", "2.5-1.5i"
-3, -1.5, "i", "3-1.5i"
-3.5, -1.5, "i", "3.5-1.5i"
--2.5, -0.5, "i", "-2.5-0.5i"
--2.5, -0.5, "i", "-2.5-0.5i"
--1.5, -0.5, "i", "-1.5-0.5i"
--1.5, -0.5, "i", "-1.5-0.5i"
--0.5, -0.5, "i", "-0.5-0.5i"
-0, -0.5, "i", "-0.5i"
-0.5, -0.5, "i", "0.5-0.5i"
-1, -0.5, "i", "1-0.5i"
-1.5, -0.5, "i", "1.5-0.5i"
-2, -0.5, "i", "2-0.5i"
-2.5, -0.5, "i", "2.5-0.5i"
-3, -0.5, "i", "3-0.5i"
-3.5, -0.5, "i", "3.5-0.5i"
--2.5, 0, "i", -2.5
--2.5, 0, "i", -2.5
--1.5, 0, "i", -1.5
--1.5, 0, "i", -1.5
--0.5, 0, "i", -0.5
-0, 0, "i", 0
-0.5, 0, "i", 0.5
-1, 0, "i", 1
-1.5, 0, "i", 1.5
-2, 0, "i", 2
-2.5, 0, "i", 2.5
-3, 0, "i", 3
-3.5, 0, "i", 3.5
--2.5, 0.5, "i", "-2.5+0.5i"
--2.5, 0.5, "i", "-2.5+0.5i"
--1.5, 0.5, "i", "-1.5+0.5i"
--1.5, 0.5, "i", "-1.5+0.5i"
--0.5, 0.5, "i", "-0.5+0.5i"
-0, 0.5, "i", "0.5i"
-0.5, 0.5, "i", "0.5+0.5i"
-1, 0.5, "i", "1+0.5i"
-1.5, 0.5, "i", "1.5+0.5i"
-2, 0.5, "i", "2+0.5i"
-2.5, 0.5, "i", "2.5+0.5i"
-3, 0.5, "i", "3+0.5i"
-3.5, 0.5, "i", "3.5+0.5i"
--2.5, 1, "i", "-2.5+i"
--2.5, 1, "i", "-2.5+i"
--1.5, 1, "i", "-1.5+i"
--1.5, 1, "i", "-1.5+i"
--0.5, 1, "i", "-0.5+i"
-0, 1, "i", "i"
-0.5, 1, "i", "0.5+i"
-1, 1, "i", "1+i"
-1.5, 1, "i", "1.5+i"
-2, 1, "i", "2+i"
-2.5, 1, "i", "2.5+i"
-3, 1, "i", "3+i"
-3.5, 1, "i", "3.5+i"
--2.5, 1.5, "i", "-2.5+1.5i"
--2.5, 1.5, "i", "-2.5+1.5i"
--1.5, 1.5, "i", "-1.5+1.5i"
--1.5, 1.5, "i", "-1.5+1.5i"
--0.5, 1.5, "i", "-0.5+1.5i"
-0, 1.5, "i", "1.5i"
-0.5, 1.5, "i", "0.5+1.5i"
-1, 1.5, "i", "1+1.5i"
-1.5, 1.5, "i", "1.5+1.5i"
-2, 1.5, "i", "2+1.5i"
-2.5, 1.5, "i", "2.5+1.5i"
-3, 1.5, "i", "3+1.5i"
-3.5, 1.5, "i", "3.5+1.5i"
--2.5, 2, "i", "-2.5+2i"
--2.5, 2, "i", "-2.5+2i"
--1.5, 2, "i", "-1.5+2i"
--1.5, 2, "i", "-1.5+2i"
--0.5, 2, "i", "-0.5+2i"
-0, 2, "i", "2i"
-0.5, 2, "i", "0.5+2i"
-1, 2, "i", "1+2i"
-1.5, 2, "i", "1.5+2i"
-2, 2, "i", "2+2i"
-2.5, 2, "i", "2.5+2i"
-3, 2, "i", "3+2i"
-3.5, 2, "i", "3.5+2i"
--2.5, 2.5, "i", "-2.5+2.5i"
--2.5, 2.5, "i", "-2.5+2.5i"
--1.5, 2.5, "i", "-1.5+2.5i"
--1.5, 2.5, "i", "-1.5+2.5i"
--0.5, 2.5, "i", "-0.5+2.5i"
-0, 2.5, "i", "2.5i"
-0.5, 2.5, "i", "0.5+2.5i"
-1, 2.5, "i", "1+2.5i"
-1.5, 2.5, "i", "1.5+2.5i"
-2, 2.5, "i", "2+2.5i"
-2.5, 2.5, "i", "2.5+2.5i"
-3, 2.5, "i", "3+2.5i"
-3.5, 2.5, "i", "3.5+2.5i"
--2.5, 3, "i", "-2.5+3i"
--2.5, 3, "i", "-2.5+3i"
--1.5, 3, "i", "-1.5+3i"
--1.5, 3, "i", "-1.5+3i"
--0.5, 3, "i", "-0.5+3i"
-0, 3, "i", "3i"
-0.5, 3, "i", "0.5+3i"
-1, 3, "i", "1+3i"
-1.5, 3, "i", "1.5+3i"
-2, 3, "i", "2+3i"
-2.5, 3, "i", "2.5+3i"
-3, 3, "i", "3+3i"
-3.5, 3, "i", "3.5+3i"
--2.5, 3.5, "i", "-2.5+3.5i"
--2.5, 3.5, "i", "-2.5+3.5i"
--1.5, 3.5, "i", "-1.5+3.5i"
--1.5, 3.5, "i", "-1.5+3.5i"
--0.5, 3.5, "i", "-0.5+3.5i"
-0, 3.5, "i", "3.5i"
-0.5, 3.5, "i", "0.5+3.5i"
-1, 3.5, "i", "1+3.5i"
-1.5, 3.5, "i", "1.5+3.5i"
-2, 3.5, "i", "2+3.5i"
-2.5, 3.5, "i", "2.5+3.5i"
-3, 3.5, "i", "3+3.5i"
-3.5, 3.5, "i", "3.5+3.5i"
--2.5, -2.5, "j", "-2.5-2.5j"
--2.5, -2.5, "j", "-2.5-2.5j"
--1.5, -2.5, "j", "-1.5-2.5j"
--1.5, -2.5, "j", "-1.5-2.5j"
--0.5, -2.5, "j", "-0.5-2.5j"
-0, -2.5, "j", "-2.5j"
-0.5, -2.5, "j", "0.5-2.5j"
-1, -2.5, "j", "1-2.5j"
-1.5, -2.5, "j", "1.5-2.5j"
-2, -2.5, "j", "2-2.5j"
-2.5, -2.5, "j", "2.5-2.5j"
-3, -2.5, "j", "3-2.5j"
-3.5, -2.5, "j", "3.5-2.5j"
--2.5, -2.5, "j", "-2.5-2.5j"
--2.5, -2.5, "j", "-2.5-2.5j"
--1.5, -2.5, "j", "-1.5-2.5j"
--1.5, -2.5, "j", "-1.5-2.5j"
--0.5, -2.5, "j", "-0.5-2.5j"
-0, -2.5, "j", "-2.5j"
-0.5, -2.5, "j", "0.5-2.5j"
-1, -2.5, "j", "1-2.5j"
-1.5, -2.5, "j", "1.5-2.5j"
-2, -2.5, "j", "2-2.5j"
-2.5, -2.5, "j", "2.5-2.5j"
-3, -2.5, "j", "3-2.5j"
-3.5, -2.5, "j", "3.5-2.5j"
--2.5, -1.5, "j", "-2.5-1.5j"
--2.5, -1.5, "j", "-2.5-1.5j"
--1.5, -1.5, "j", "-1.5-1.5j"
--1.5, -1.5, "j", "-1.5-1.5j"
--0.5, -1.5, "j", "-0.5-1.5j"
-0, -1.5, "j", "-1.5j"
-0.5, -1.5, "j", "0.5-1.5j"
-1, -1.5, "j", "1-1.5j"
-1.5, -1.5, "j", "1.5-1.5j"
-2, -1.5, "j", "2-1.5j"
-2.5, -1.5, "j", "2.5-1.5j"
-3, -1.5, "j", "3-1.5j"
-3.5, -1.5, "j", "3.5-1.5j"
--2.5, -1.5, "j", "-2.5-1.5j"
--2.5, -1.5, "j", "-2.5-1.5j"
--1.5, -1.5, "j", "-1.5-1.5j"
--1.5, -1.5, "j", "-1.5-1.5j"
--0.5, -1.5, "j", "-0.5-1.5j"
-0, -1.5, "j", "-1.5j"
-0.5, -1.5, "j", "0.5-1.5j"
-1, -1.5, "j", "1-1.5j"
-1.5, -1.5, "j", "1.5-1.5j"
-2, -1.5, "j", "2-1.5j"
-2.5, -1.5, "j", "2.5-1.5j"
-3, -1.5, "j", "3-1.5j"
-3.5, -1.5, "j", "3.5-1.5j"
--2.5, -0.5, "j", "-2.5-0.5j"
--2.5, -0.5, "j", "-2.5-0.5j"
--1.5, -0.5, "j", "-1.5-0.5j"
--1.5, -0.5, "j", "-1.5-0.5j"
--0.5, -0.5, "j", "-0.5-0.5j"
-0, -0.5, "j", "-0.5j"
-0.5, -0.5, "j", "0.5-0.5j"
-1, -0.5, "j", "1-0.5j"
-1.5, -0.5, "j", "1.5-0.5j"
-2, -0.5, "j", "2-0.5j"
-2.5, -0.5, "j", "2.5-0.5j"
-3, -0.5, "j", "3-0.5j"
-3.5, -0.5, "j", "3.5-0.5j"
--2.5, 0, "j", -2.5
--2.5, 0, "j", -2.5
--1.5, 0, "j", -1.5
--1.5, 0, "j", -1.5
--0.5, 0, "j", -0.5
-0, 0, "j", 0
-0.5, 0, "j", 0.5
-1, 0, "j", 1
-1.5, 0, "j", 1.5
-2, 0, "j", 2
-2.5, 0, "j", 2.5
-3, 0, "j", 3
-3.5, 0, "j", 3.5
--2.5, 0.5, "j", "-2.5+0.5j"
--2.5, 0.5, "j", "-2.5+0.5j"
--1.5, 0.5, "j", "-1.5+0.5j"
--1.5, 0.5, "j", "-1.5+0.5j"
--0.5, 0.5, "j", "-0.5+0.5j"
-0, 0.5, "j", "0.5j"
-0.5, 0.5, "j", "0.5+0.5j"
-1, 0.5, "j", "1+0.5j"
-1.5, 0.5, "j", "1.5+0.5j"
-2, 0.5, "j", "2+0.5j"
-2.5, 0.5, "j", "2.5+0.5j"
-3, 0.5, "j", "3+0.5j"
-3.5, 0.5, "j", "3.5+0.5j"
--2.5, 1, "j", "-2.5+j"
--2.5, 1, "j", "-2.5+j"
--1.5, 1, "j", "-1.5+j"
--1.5, 1, "j", "-1.5+j"
--0.5, 1, "j", "-0.5+j"
-0, 1, "j", "j"
-0.5, 1, "j", "0.5+j"
-1, 1, "j", "1+j"
-1.5, 1, "j", "1.5+j"
-2, 1, "j", "2+j"
-2.5, 1, "j", "2.5+j"
-3, 1, "j", "3+j"
-3.5, 1, "j", "3.5+j"
--2.5, 1.5, "j", "-2.5+1.5j"
--2.5, 1.5, "j", "-2.5+1.5j"
--1.5, 1.5, "j", "-1.5+1.5j"
--1.5, 1.5, "j", "-1.5+1.5j"
--0.5, 1.5, "j", "-0.5+1.5j"
-0, 1.5, "j", "1.5j"
-0.5, 1.5, "j", "0.5+1.5j"
-1, 1.5, "j", "1+1.5j"
-1.5, 1.5, "j", "1.5+1.5j"
-2, 1.5, "j", "2+1.5j"
-2.5, 1.5, "j", "2.5+1.5j"
-3, 1.5, "j", "3+1.5j"
-3.5, 1.5, "j", "3.5+1.5j"
--2.5, 2, "j", "-2.5+2j"
--2.5, 2, "j", "-2.5+2j"
--1.5, 2, "j", "-1.5+2j"
--1.5, 2, "j", "-1.5+2j"
--0.5, 2, "j", "-0.5+2j"
-0, 2, "j", "2j"
-0.5, 2, "j", "0.5+2j"
-1, 2, "j", "1+2j"
-1.5, 2, "j", "1.5+2j"
-2, 2, "j", "2+2j"
-2.5, 2, "j", "2.5+2j"
-3, 2, "j", "3+2j"
-3.5, 2, "j", "3.5+2j"
--2.5, 2.5, "j", "-2.5+2.5j"
--2.5, 2.5, "j", "-2.5+2.5j"
--1.5, 2.5, "j", "-1.5+2.5j"
--1.5, 2.5, "j", "-1.5+2.5j"
--0.5, 2.5, "j", "-0.5+2.5j"
-0, 2.5, "j", "2.5j"
-0.5, 2.5, "j", "0.5+2.5j"
-1, 2.5, "j", "1+2.5j"
-1.5, 2.5, "j", "1.5+2.5j"
-2, 2.5, "j", "2+2.5j"
-2.5, 2.5, "j", "2.5+2.5j"
-3, 2.5, "j", "3+2.5j"
-3.5, 2.5, "j", "3.5+2.5j"
--2.5, 3, "j", "-2.5+3j"
--2.5, 3, "j", "-2.5+3j"
--1.5, 3, "j", "-1.5+3j"
--1.5, 3, "j", "-1.5+3j"
--0.5, 3, "j", "-0.5+3j"
-0, 3, "j", "3j"
-0.5, 3, "j", "0.5+3j"
-1, 3, "j", "1+3j"
-1.5, 3, "j", "1.5+3j"
-2, 3, "j", "2+3j"
-2.5, 3, "j", "2.5+3j"
-3, 3, "j", "3+3j"
-3.5, 3, "j", "3.5+3j"
--2.5, 3.5, "j", "-2.5+3.5j"
--2.5, 3.5, "j", "-2.5+3.5j"
--1.5, 3.5, "j", "-1.5+3.5j"
--1.5, 3.5, "j", "-1.5+3.5j"
--0.5, 3.5, "j", "-0.5+3.5j"
-0, 3.5, "j", "3.5j"
-0.5, 3.5, "j", "0.5+3.5j"
-1, 3.5, "j", "1+3.5j"
-1.5, 3.5, "j", "1.5+3.5j"
-2, 3.5, "j", "2+3.5j"
-2.5, 3.5, "j", "2.5+3.5j"
-3, 3.5, "j", "3+3.5j"
-3.5, 3.5, "j", "3.5+3.5j"
--1.23, -4.56, "-1.23-4.56i"
-0, -3.21, "i", "-3.21i"
-1.23, -2.34, "j", "1.23-2.34j"
--1.23, 0, -1.23
-0, 0, "i", 0
-1.23, 0, "j", 1.23
--1.23, 4.56, "-1.23+4.56i"
-0, 3.21, "i", "3.21i"
-1.23, 2.34, "j", "1.23+2.34j"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/CONVERTUOM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/CONVERTUOM.data
deleted file mode 100644
index dbcfb0119aa..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/CONVERTUOM.data
+++ /dev/null
@@ -1,24 +0,0 @@
-1.0, "lbm", "kg", 0.45359230974881
-123.45, "kg", "kg", 123.45
-68, "F", "C", 20
-20, "C", "F", 68
-68, "F", "K", 293.15
-293.15, "K", "F", 68
-22, "C", "K", 295.15
-295.65, "K", "C", 22.5
-2.5, "ft", "sec", "#N/A"
-12345, "m", "km", 12.345
-12.345, "km", "m", 12345
-1, "km", "mi", 0.62137119223733
-"three","ft", "yds", "#VALUE!"
-123.45, "K", "kel", 123.45
-123.45, "C", "cel", 123.45
-123.45, "F", "fah", 123.45
-1, "ft", "day", "#N/A"
-123.45, "m", "m", 123.45
-234.56, "km", "km", 234.56
-234.56, "kpt", "lt", "#N/A"
-234.56, "sm", "m", "#N/A"
-234.56, "lt", "kpt", "#N/A"
-234.56, "m", "sm", "#N/A"
-12.345, "km", "mm", 12345000
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2BIN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2BIN.data
deleted file mode 100644
index 404adaba023..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2BIN.data
+++ /dev/null
@@ -1,16 +0,0 @@
-357, "101100101"
-1357, "#NUM!" // Too large
-9, 4, "1001"
-9, 8, "00001001"
-9, 6.75, "001001" // Leading places as a float
-9, -1, "#NUM!" // Leading places negative
-9, "ABC", "#VALUE!" // Leading places non-numeric
-246, "11110110"
-12345, "#NUM!"
-123456789, "#NUM!"
-123.45, "1111011"
-0, "0"
-"3579A", "#VALUE!" // Invalid decimal
-TRUE, "#VALUE!" // Non string
--100, "1110011100" // 2's Complement
--107, "1110010101" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2HEX.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2HEX.data
deleted file mode 100644
index 5210e91593f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2HEX.data
+++ /dev/null
@@ -1,15 +0,0 @@
-"357", "165"
-"1357", "54D"
-"246", "F6"
-"12345", "3039"
-"123456789", "75BCD15"
-"100", 4, "0064"
-"100", 5.75, "00064" // Leading places as a float
-"100", -1, "#NUM!" // Leading places negative
-"100", "ABC", "#VALUE!" // Leading places non-numeric
-"123.45", "7B"
-"0", "0"
-"3579A", "#VALUE!" // Invalid decimal
-TRUE, "#VALUE!" // Non string
-"-54", "FFFFFFFFCA" // 2's Complement
-"-107", "FFFFFFFF95" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2OCT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2OCT.data
deleted file mode 100644
index 923532e2814..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DEC2OCT.data
+++ /dev/null
@@ -1,12 +0,0 @@
-"357", "545"
-"1357", "2515"
-"246", "366"
-"12345", "30071"
-"123456789", "726746425"
-"123.45", "173"
-"58, 3, "072"
-"0", "0"
-"3579A", "#VALUE!" // Invalid decimal
-TRUE, "#VALUE!" // Non string
-"-100", "7777777634" // 2's Complement
-"-107", "7777777625" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DELTA.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DELTA.data
deleted file mode 100644
index e994277b28e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/DELTA.data
+++ /dev/null
@@ -1,25 +0,0 @@
--1.5, -1.5, 1
--0.75, -1.5, 0
-0, -1.5, 0
-0.75, -1.5, 0
-1.5, -1.5, 0
--1.5, -0.75, 0
--0.75, -0.75, 1
-0, -0.75, 0
-0.75, -0.75, 0
-1.5, -0.75, 0
--1.5, 0, 0
--0.75, 0, 0
-0, 0, 1
-0.75, 0, 0
-1.5, 0, 0
--1.5, 0.75, 0
--0.75, 0.75, 0
-0, 0.75, 0
-0.75, 0.75, 1
-1.5, 0.75, 0
--1.5, 1.5, 0
--0.75, 1.5, 0
-0, 1.5, 0
-0.75, 1.5, 0
-1.5, 1.5, 1
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERF.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERF.data
deleted file mode 100644
index 5c4fc1e9f1b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERF.data
+++ /dev/null
@@ -1,124 +0,0 @@
-# lower bound upper bound Result
-0, 0.0
-0.01, 0.0112834155558496
-0.05, 0.0563719777970166
-0.1, 0.1124629160182850
-0.125, 0.1403162048013340
-0.15, 0.1679959714273630
-0.2, 0.2227025892104780
-0.25, 0.2763263901682370
-0.3, 0.3286267594591270
-0.35, 0.3793820535623100
-0.4, 0.4283923550466680
-0.45, 0.4754817197869240
-0.5, 0.5204998778130470
-0.6, 0.6038560908479260
-0.7, 0.6778011938374180
-0.8, 0.7421009647076610
-0.9, 0.7969082124228320
-1, 0.8427007929497150
-1.1, 0.8802050695740820
-1.2, 0.9103139782296350
-1.3, 0.9340079449406520
-1.4, 0.9522851197626490
-1.5, 0.9661051464753110
-1.75, 0.9866716712191820
-2, 0.9953222650189530
-2.5, 0.9995930479825550
-3, 0.9999779095030010
-3.5, 0.9999992569016280
-4, 0.9999999845827420
-4.5, 0.9999999998033840
-5, 0.9999999999984630
-5.5, 0.9999999999999930
-6, 1.0
-32, 1.0
--0.1, -0.1124629160182850
--1, -0.8427007929497150
-TRUE, "#VALUE!"
-FALSE, "#VALUE!"
-"2", 0.9953222650189530
-"TWO", "#VALUE!"
--1.5, -1.5, 0.0
--0.75, -1.5, -0.2549495128217960
-0, -1.5, -0.9661051464753110
-0.75, -1.5, -1.6772607801288300
-1.5, -1.5, -1.9322102929506200
-2.25, -1.5, -1.9646424298886300
-3, -1.5, -1.9660830559783100
-3.75, -1.5, -1.9661050327480500
-4.5, -1.5, -1.9661051462786900
--1.5, -0.75, 0.2549495128217960
--0.75, -0.75, 0.0
-0, -0.75, -0.7111556336535150
-0.75, -0.75, -1.4223112673070300
-1.5, -0.75, -1.6772607801288300
-2.25, -0.75, -1.7096929170668300
-3, -0.75, -1.7111335431565200
-3.75, -0.75, -1.7111555199262600
-4.5, -0.75, -1.7111556334569000
--1.5, 0, 0.9661051464753110
--0.75, 0, 0.7111556336535150
-0, 0, 0.0
-0.75, 0, -0.7111556336535150
-1.5, 0, -0.9661051464753110
-2.25, 0, -0.9985372834133190
-3, 0, -0.9999779095030010
-3.75, 0, -0.9999998862727430
-4.5, 0, -0.9999999998033840
--1.5, 0.75, 1.6772607801288300
--0.75, 0.75, 1.4223112673070300
-0, 0.75, 0.7111556336535150
-0.75, 0.75, 0.0
-1.5, 0.75, -0.2549495128217960
-2.25, 0.75, -0.2873816497598040
-3, 0.75, -0.2888222758494860
-3.75, 0.75, -0.2888442526192280
-4.5, 0.75, -0.2888443661498690
--1.5, 1.5, 1.9322102929506200
--0.75, 1.5, 1.6772607801288300
-0, 1.5, 0.9661051464753110
-0.75, 1.5, 0.2549495128217960
-1.5, 1.5, 0.0
-2.25, 1.5, -0.0324321369380081
-3, 1.5, -0.0338727630276906
-3.75, 1.5, -0.0338947397974326
-4.5, 1.5, -0.0338948533280732
--1.5, 2.25, 1.9646424298886300
--0.75, 2.25, 1.7096929170668300
-0, 2.25, 0.9985372834133190
-0.75, 2.25, 0.2873816497598040
-1.5, 2.25, 0.0324321369380081
-2.25, 2.25, 0.0
-3, 2.25, -0.0014406260896825
-3.75, 2.25, -0.0014626028594246
-4.5, 2.25, -0.0014627163900651
--1.5, 3, 1.9660830559783100
--0.75, 3, 1.7111335431565200
-0, 3, 0.9999779095030010
-0.75, 3, 0.2888222758494860
-1.5, 3, 0.0338727630276906
-2.25, 3, 0.0014406260896825
-3, 3, 0.0
-3.75, 3, -0.0000219767697420
-4.5, 3, -0.0000220903003826
--1.5, 3.75, 1.9661050327480500
--0.75, 3.75, 1.7111555199262600
-0, 3.75, 0.9999998862727430
-0.75, 3.75, 0.2888442526192280
-1.5, 3.75, 0.0338947397974326
-2.25, 3.75, 0.0014626028594246
-3, 3.75, 0.0000219767697420
-3.75, 3.75, 0.0
-4.5, 3.75, -0.0000001135306406
--1.5, 4.5, 1.9661051462786900
--0.75, 4.5, 1.7111556334569000
-0, 4.5, 0.9999999998033840
-0.75, 4.5, 0.2888443661498690
-1.5, 4.5, 0.0338948533280732
-2.25, 4.5, 0.0014627163900651
-3, 4.5, 0.0000220903003826
-3.75, 4.5, 0.0000001135306406
-4.5, 4.5, 0.0
-5, -1, -1.8427007929481800
--5, 1, 1.8427007929481800
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERFC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERFC.data
deleted file mode 100644
index df814893e2d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/ERFC.data
+++ /dev/null
@@ -1,41 +0,0 @@
-# x value Result
-0, 1.0
-0.01, 0.9887165844441500
-0.05, 0.9436280222029830
-0.1, 0.8875370839817150
-0.125, 0.8596837951986660
-0.15, 0.8320040285726360
-0.2, 0.7772974107895220
-0.25, 0.7236736098317630
-0.3, 0.6713732405408730
-0.35, 0.6206179464376900
-0.4, 0.5716076449533320
-0.45, 0.5245182802130760
-0.5, 0.4795001221869530
-0.6, 0.3961439091520740
-0.7, 0.3221988061625820
-0.8, 0.2578990352923390
-0.9, 0.2030917875771680
-1, 0.1572992070502850
-1.1, 0.1197949304259180
-1.2, 0.0896860217703646
-1.3, 0.0659920550593475
-1.4, 0.0477148802373512
-1.5, 0.0338948535246893
-1.75, 0.0133283287808176
-2, 0.0046777349810473
-2.5, 0.0004069520174450
-3, 0.0000220904969986
-3.5, 0.0000007430983723
-4, 0.0000000154172579
-4.5, 0.0000000001966160
-5, 0.0000000000015375
-5.5, 0.0000000000000074
-6, 0.0
-32, 0.0
--0.1, 1.1124629160182900
--1, 1.8427007929497100
-TRUE, "#VALUE!"
-FALSE, "#VALUE!"
-"2", 0.0046777349810473
-"TWO", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/GESTEP.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/GESTEP.data
deleted file mode 100644
index f6bf40ea8f4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/GESTEP.data
+++ /dev/null
@@ -1,81 +0,0 @@
--1.5, -1.5, 1
--0.75, -1.5, 1
-0, -1.5, 1
-0.75, -1.5, 1
-1.5, -1.5, 1
-2.25, -1.5, 1
-3, -1.5, 1
-3.75, -1.5, 1
-4.5, -1.5, 1
--1.5, -0.75, 0
--0.75, -0.75, 1
-0, -0.75, 1
-0.75, -0.75, 1
-1.5, -0.75, 1
-2.25, -0.75, 1
-3, -0.75, 1
-3.75, -0.75, 1
-4.5, -0.75, 1
--1.5, 0, 0
--0.75, 0, 0
-0, 0, 1
-0.75, 0, 1
-1.5, 0, 1
-2.25, 0, 1
-3, 0, 1
-3.75, 0, 1
-4.5, 0, 1
--1.5, 0.75, 0
--0.75, 0.75, 0
-0, 0.75, 0
-0.75, 0.75, 1
-1.5, 0.75, 1
-2.25, 0.75, 1
-3, 0.75, 1
-3.75, 0.75, 1
-4.5, 0.75, 1
--1.5, 1.5, 0
--0.75, 1.5, 0
-0, 1.5, 0
-0.75, 1.5, 0
-1.5, 1.5, 1
-2.25, 1.5, 1
-3, 1.5, 1
-3.75, 1.5, 1
-4.5, 1.5, 1
--1.5, 2.25, 0
--0.75, 2.25, 0
-0, 2.25, 0
-0.75, 2.25, 0
-1.5, 2.25, 0
-2.25, 2.25, 1
-3, 2.25, 1
-3.75, 2.25, 1
-4.5, 2.25, 1
--1.5, 3, 0
--0.75, 3, 0
-0, 3, 0
-0.75, 3, 0
-1.5, 3, 0
-2.25, 3, 0
-3, 3, 1
-3.75, 3, 1
-4.5, 3, 1
--1.5, 3.75, 0
--0.75, 3.75, 0
-0, 3.75, 0
-0.75, 3.75, 0
-1.5, 3.75, 0
-2.25, 3.75, 0
-3, 3.75, 0
-3.75, 3.75, 1
-4.5, 3.75, 1
--1.5, 4.5, 0
--0.75, 4.5, 0
-0, 4.5, 0
-0.75, 4.5, 0
-1.5, 4.5, 0
-2.25, 4.5, 0
-3, 4.5, 0
-3.75, 4.5, 0
-4.5, 4.5, 1
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2BIN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2BIN.data
deleted file mode 100644
index 9e1aecb12df..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2BIN.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"01AB", "110101011"
-"ABCD", "#NUM!"
-"F6", "11110110"
-"F", 8, "00001111"
-"B7", "10110111"
-"12345", "#NUM!"
-"123456789", "#NUM!"
-"123.45", "#NUM!"
-"0", "0"
-"G3579A", "#NUM!"
-TRUE, "#VALUE!"
-"-107", "#NUM!"
-"FFFFFFFFFF", "1111111111" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2DEC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2DEC.data
deleted file mode 100644
index 17fc866710d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2DEC.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"01AB", "427"
-"ABCD", "43981"
-"F6", "246"
-"12345", "74565"
-"123456789", "4886718345"
-"123.45", "#NUM!"
-"0", "0"
-"G3579A", "#NUM!"
-TRUE, "#VALUE!"
-"-107", "#NUM!"
-"A5", "165"
-"FFFFFFFF5B", "-165"
-"3DA408B9", "1034160313" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2OCT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2OCT.data
deleted file mode 100644
index 2ebd893ab53..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/HEX2OCT.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"01AB", "653"
-"ABCD", "125715"
-"F6", "366"
-"3B4E", "35516"
-"F", 3, "017"
-"12345", "221505"
-"123456789", "#NUM!"
-"123.45", "#NUM!"
-"0", "0"
-"G3579A", "#NUM!"
-TRUE, "#VALUE!"
-"-107", "#NUM!"
-"FFFFFFFF00", "7777777400" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMABS.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMABS.data
deleted file mode 100644
index e92de41b664..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMABS.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", 13.580298229420
-"1.234E-5+6.78E9i", 6.78E9
-"3.5+2.5i", 4.301162633521
-"3.5+i", 3.640054944640
-"3.5", 3.5
-"3.5-i", 3.640054944640
-"3.5-2.5i", 4.301162633521
-"1+2.5i", 2.692582403567
-"1+i", 1.414213562373
-"1", 1
-"1-i", 1.414213562373
-"1-2.5i", 2.692582403567
-"2.5i", 2.5
-"i", 1
-"0", 0
-"-i", 1
-"-2.5i", 2.5
-"-1+2.5i", 2.692582403567
-"-1+i", 1.414213562373
-"-1", 1
-"-1-i", 1.414213562373
-"-1-2.5i", 2.692582403567
-"-3.5+2.5i", 4.301162633521
-"-3.5+i", 3.640054944640
-"-3.5", 3.5
-"-3.5-i", 3.640054944640
-"-3.5-2.5i", 4.301162633521
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMAGINARY.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMAGINARY.data
deleted file mode 100644
index ac888bae8e1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMAGINARY.data
+++ /dev/null
@@ -1,30 +0,0 @@
-"12.34+5.67j", 5.67
-"1.234E-5+6.78E9i", 6.78E9
-"3.5+2.5i", 2.5
-"3.5+i", 1
-"3.5", 0
-"3.5-i", -1
-"3.5-2.5i", -2.5
-"1+2.5i", 2.5
-"1+i", 1
-"1", 0
-1, 0
-"1-i", -1
-"1-2.5i", -2.5
-"2.5i", 2.5
-"i", 1
-"0", 0
-0, 0
-0.0, 0
-"-i", -1
-"-2.5i", -2.5
-"-1+2.5i", 2.5
-"-1+i", 1
-"-1", 0
-"-1-i", -1
-"-1-2.5i", -2.5
-"-3.5+2.5i", 2.5
-"-3.5+i", 1
-"-3.5", 0
-"-3.5-i", -1
-"-3.5-2.5i", -2.5
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMARGUMENT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMARGUMENT.data
deleted file mode 100644
index 4b11d998ac4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMARGUMENT.data
+++ /dev/null
@@ -1,26 +0,0 @@
-"12.34+5.67j", 0.430710595550
-"3.5+2.5i", 0.620249485983
-"3.5+i", 0.278299659005
-"3.5", 0
-"3.5-i", -0.278299659005
-"3.5-2.5i", -0.620249485983
-"1+2.5i", 1.190289949683
-"1+i", 0.785398163397
-"1", 0
-"1-i", -0.785398163397
-"1-2.5i", -1.190289949683
-"2.5i", 1.570796326795
-"i", 1.570796326795
-"0", "#DIV/0!"
-"-i", -1.570796326795
-"-2.5i", -1.570796326795
-"-1+2.5i", 1.951302703907
-"-1+i", 2.356194490192
-"-1", 3.141592653590
-"-1-i", -2.356194490192
-"-1-2.5i", -1.951302703907
-"-3.5+2.5i", 2.521343167607
-"-3.5+i", 2.863292994585
-"-3.5", 3.141592653590
-"-3.5-i", -2.863292994585
-"-3.5-2.5i", -2.521343167607
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCONJUGATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCONJUGATE.data
deleted file mode 100644
index 67eb96ff575..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCONJUGATE.data
+++ /dev/null
@@ -1,26 +0,0 @@
-"12.34+5.67j", "12.34-5.67j"
-"3.5+2.5i", "3.5-2.5i"
-"3.5+i", "3.5-i"
-"3.5", "3.5"
-"3.5-i", "3.5+i"
-"3.5-2.5i", "3.5+2.5i"
-"1+2.5i", "1-2.5i"
-"1+i", "1-i"
-"1", "1"
-"1-i", "1+i"
-"1-2.5i", "1+2.5i"
-"2.5i", "-2.5i"
-"i", "-i"
-"0", "0"
-"-i", "i"
-"-2.5i", "2.5i"
-"-1+2.5i", "-1-2.5i"
-"-1+i", "-1-i"
-"-1", "-1"
-"-1-i", "-1+i"
-"-1-2.5i", "-1+2.5i"
-"-3.5+2.5i", "-3.5-2.5i"
-"-3.5+i", "-3.5-i"
-"-3.5", "-3.5"
-"-3.5-i", "-3.5+i"
-"-3.5-2.5i", "-3.5+2.5i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCOS.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCOS.data
deleted file mode 100644
index 7ada86eaeaa..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMCOS.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "141.319179436356+32.547610312508j"
-"3.5+2.5i", "-5.74262349163406+2.12231025604134i"
-"3.5+i", "-1.44502817950166+0.412240867891067i"
-"3.5", "-0.936456687290796"
-"3.5-i", "-1.44502817950166-0.412240867891067i"
-"3.5-2.5i", "-5.74262349163406-2.12231025604134i"
-"1+2.5i", "3.31329014611322-5.0910715229497i"
-"1+i", "0.833730025131149-0.988897705762865i"
-"1", "0.54030230586814"
-"1-i", "0.833730025131149+0.988897705762865i"
-"1-2.5i", "3.31329014611322+5.0910715229497i"
-"2.5i", "6.13228947966369"
-"i", "1.54308063481524"
-"0", "1"
-"-i", "1.54308063481524"
-"-2.5i", "6.13228947966369"
-"-1+2.5i", "3.31329014611322+5.0910715229497i"
-"-1+i", "0.833730025131149+0.988897705762865i"
-"-1", "0.54030230586814"
-"-1-i", "0.833730025131149-0.988897705762865i"
-"-1-2.5i", "3.31329014611322-5.0910715229497i"
-"-3.5+2.5i", "-5.74262349163406-2.12231025604134i"
-"-3.5+i", "-1.44502817950166-0.412240867891067i"
-"-3.5", "-0.936456687290796"
-"-3.5-i", "-1.44502817950166+0.412240867891067i"
-"-3.5-2.5i", "-5.74262349163406+2.12231025604134i"
-"3", "-0.989992496600445"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMDIV.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMDIV.data
deleted file mode 100644
index 52d5cbb6e1a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMDIV.data
+++ /dev/null
@@ -1,20 +0,0 @@
-"12.34+5.67j", "123.45+67.89i", "#NUM!"
-"12.34+5.67j", "123.45+67.89j", "0.0961415519586104-0.00694248653276682j"
-"-12.34+5.67i", "-123.45+67.89i", "0.0961415519586104+0.00694248653276682i"
-"-12.34-5.67i", "-123.45+67.89i", "0.0573549954111941+0.0774712890924744i"
-"-12.34+5.67i", "-123.45-67.89i", "0.0573549954111941-0.0774712890924744i"
-"-12.34-5.67i", "-123.45-67.89i", "0.0961415519586104-0.00694248653276682i"
-"12.34+5.67i", "-123.45+67.89i", "-0.0573549954111941-0.0774712890924744i"
-"12.34-5.67i", "-123.45+67.89i", "-0.0961415519586104-0.00694248653276682i"
-"12.34+5.67i", "-123.45-67.89i", "-0.0961415519586104+0.00694248653276682i"
-"12.34-5.67i", "-123.45-67.89i", "-0.0573549954111941+0.0774712890924744i"
-"-12.34+5.67i", "123.45+67.89i", "-0.0573549954111941+0.0774712890924744i"
-"-12.34-5.67i", "123.45+67.89i", "-0.0961415519586104+0.00694248653276682i"
-"-12.34+5.67i", "123.45-67.89i", "-0.0961415519586104-0.00694248653276682i"
-"-12.34-5.67i", "123.45-67.89i", "-0.0573549954111941-0.0774712890924744i"
-"-12.34-5.67i", "123.45-67.89", "#NUM!"
-"-12.34-5.67j", "123.45-67.89", "#NUM!"
-"-12.34-5.67", "123.45-67.89j", "#NUM!"
-"-12.34-5.67i", "-12.34-5.67i", "1"
-"-12.34", "123.45-67.89i", "-0.0767482736849023-0.0422068878126206i"
-"-12.34-5.67i", "-12.34", "1+0.459481361426256i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMEXP.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMEXP.data
deleted file mode 100644
index 4c4d9b62b4e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMEXP.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "187004.11273906-131589.323796073j"
-"-12.34E-5+6.78E9i", "1.79747131321615E+308+1.79747131321615E+308i"
-"3.5+2.5i", "-26.5302329126575+19.8186755366902i"
-"3.5+i", "17.8923550531471+27.8656919720394i"
-"3.5", "33.1154519586923"
-"3.5-i", "17.8923550531471-27.8656919720394i"
-"3.5-2.5i", "-26.5302329126575-19.8186755366902i"
-"1+2.5i", "-2.17773413212721+1.62681595415671i"
-"1+i", "1.46869393991589+2.28735528717884i"
-"1", "2.71828182845905"
-"1-i", "1.46869393991589-2.28735528717884i"
-"1-2.5i", "-2.17773413212721-1.62681595415671i"
-"2.5i", "-0.801143615546934+0.598472144103957i"
-"i", "0.54030230586814+0.841470984807897i"
-"0", "1"
-"-i", "0.54030230586814-0.841470984807897i"
-"-2.5i", "-0.801143615546934-0.598472144103957i"
-"-1+2.5i", "-0.294724265585475+0.220165597929638i"
-"-1+i", "0.198766110346413+0.309559875653112i"
-"-1", "0.367879441171442"
-"-1-i", "0.198766110346413-0.309559875653112i"
-"-1-2.5i", "-0.294724265585475-0.220165597929638i"
-"-3.5+2.5i", "-0.0241924409350133+0.0180722928030842i"
-"-3.5+i", "0.016315715894263+0.025410221967i"
-"-3.5", "0.0301973834223185"
-"-3.5-i", "0.016315715894263-0.025410221967i"
-"-3.5-2.5i", "-0.0241924409350133-0.0180722928030842i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLN.data
deleted file mode 100644
index cb24be4ef7b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLN.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "2.60862008281875+0.430710595550204j"
-"-1.234E-5+6.78E9i", "22.6372429388987+1.5707963267949i"
-"3.5+2.5i", "1.45888536604214+0.620249485982821i"
-"3.5+i", "1.29199877621612+0.278299659005111i"
-"3.5", "1.25276296849537"
-"3.5-i", "1.29199877621612-0.278299659005111i"
-"3.5-2.5i", "1.45888536604214-0.620249485982821i"
-"1+2.5i", "0.990500734433292+1.19028994968253i"
-"1+i", "0.346573590279973+0.785398163397448i"
-"1", "0"
-"1-i", "0.346573590279973-0.785398163397448i"
-"1-2.5i", "0.990500734433292-1.19028994968253i"
-"2.5i", "0.916290731874155+1.5707963267949i"
-"i", "1.5707963267949i"
-"0", "#NUM!"
-"-i", "-1.5707963267949i"
-"-2.5i", "0.916290731874155-1.5707963267949i"
-"-1+2.5i", "0.990500734433292+1.95130270390726i"
-"-1+i", "0.346573590279973+2.35619449019234i"
-"-1", "3.14159265358979i"
-"-1-i", "0.346573590279973-2.35619449019234i"
-"-1-2.5i", "0.990500734433292-1.95130270390726i"
-"-3.5+2.5i", "1.45888536604214+2.52134316760697i"
-"-3.5+i", "1.29199877621612+2.86329299458468i"
-"-3.5", "1.25276296849537+3.14159265358979i"
-"-3.5-i", "1.29199877621612-2.86329299458468i"
-"-3.5-2.5i", "1.45888536604214-2.52134316760697i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG10.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG10.data
deleted file mode 100644
index 8c57ff90cb2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG10.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "1.13290930735019+0.187055234944717j"
-"-12.34E-5+6.78E9i", "9.83122969386706+0.682188176920927i"
-"3.5+2.5i", "0.633585864201507+0.269370929165668i"
-"3.5+i", "0.561107939136413+0.120864006221476i"
-"3.5", "0.544068044350276"
-"3.5-i", "0.561107939136413-0.120864006221476i"
-"3.5-2.5i", "0.633585864201507-0.269370929165668i"
-"1+2.5i", "0.430169003285497+0.516936357012023i"
-"1+i", "0.150514997831991+0.34109408846046i"
-"1", "0"
-"1-i", "0.150514997831991-0.34109408846046i"
-"1-2.5i", "0.430169003285497-0.516936357012023i"
-"2.5i", "0.397940008672038+0.68218817692092i"
-"i", "0.68218817692092i"
-"0", "#NUM!"
-"-i", "-0.68218817692092i"
-"-2.5i", "0.397940008672038-0.68218817692092i"
-"-1+2.5i", "0.430169003285497+0.847439996829817i"
-"-1+i", "0.150514997831991+1.02328226538138i"
-"-1", "1.36437635384184i"
-"-1-i", "0.150514997831991-1.02328226538138i"
-"-1-2.5i", "0.430169003285497-0.847439996829817i"
-"-3.5+2.5i", "0.633585864201507+1.09500542467617i"
-"-3.5+i", "0.561107939136413+1.24351234762036i"
-"-3.5", "0.544068044350276+1.36437635384184i"
-"-3.5-i", "0.561107939136413-1.24351234762036i"
-"-3.5-2.5i", "0.633585864201507-1.09500542467617i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG2.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG2.data
deleted file mode 100644
index a5a41367909..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMLOG2.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "3.76344325733562+0.621384040306436j"
-"-12.34E-5+6.78E9i", "32.6586381298614+2.26618007108803i"
-"3.5+2.5i", "2.10472668297646+0.894830857610216i"
-"3.5+i", "1.86396022742506+0.401501537958665i"
-"3.5", "1.80735492219671"
-"3.5-i", "1.86396022742506-0.401501537958665i"
-"3.5-2.5i", "2.10472668297646-0.894830857610216i"
-"1+2.5i", "1.42899049767377+1.71722540775913i"
-"1+i", "0.500000000038482+1.13309003554401i"
-"1", "0"
-"1-i", "0.500000000038482-1.13309003554401i"
-"1-2.5i", "1.42899049767377-1.71722540775913i"
-"2.5i", "1.3219280949891+2.26618007108801i"
-"i", "2.26618007108801i"
-"0", "#NUM!"
-"-i", "-2.26618007108801i"
-"-2.5i", "1.3219280949891-2.26618007108801i"
-"-1+2.5i", "1.42899049767377+2.81513473441689i"
-"-1+i", "0.500000000038482+3.39927010663201i"
-"-1", "4.53236014217602i"
-"-1-i", "0.500000000038482-3.39927010663201i"
-"-1-2.5i", "1.42899049767377-2.81513473441689i"
-"-3.5+2.5i", "2.10472668297646+3.63752928456581i"
-"-3.5+i", "1.86396022742506+4.13085860421736i"
-"-3.5", "1.80735492219671+4.53236014217602i"
-"-3.5-i", "1.86396022742506-4.13085860421736i"
-"-3.5-2.5i", "2.10472668297646-3.63752928456581i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPOWER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPOWER.data
deleted file mode 100644
index 8e753bc24fd..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPOWER.data
+++ /dev/null
@@ -1,18 +0,0 @@
-"12.34+5.67j", 2, "120.1267+139.9356j"
-"12.34+5.67j", 3, "688.928626+2407.923693j"
-"12.34+5.67j", -1, "6.69108496973016E-002-3.07442883131037E-002j"
-"12.34+5.67j", -2, "3.53185054333564E-003-4.11425290873718E-003j"
-"12.34+5.67j", 0.5, "3.60002071031685+0.787495469644252j"
-"12.34+5.67j", -0.25, "0.517904976730581-5.59833234375533E-002j"
-"12.34+5.67j", 0, "1"
-"-i", 2, "-1-1.34451369308841E-014i"
-"1-i", 2, "1.22460635382238E-016-2i"
-"2.5i", 2, "-6.25+8.40321058180257E-014i"
-"2.5i", "2.5", "-6.98771242968685-6.98771242968684i"
-"2.5i", "2.5i", "#VALUE!"
-"2.5", "2.5", 9.88211768802619
-"2", "2", 4
-"-12.34-5.67i", "-12.34", "-4.69972844488573E-15+9.35464904349343E-15i"
-"12.34-5.67i", "-12.34", "5.93343000067521E-15-8.62503997728057E-15i"
-"-12.34-5.67i", "12.34", "-42881944468901.9-85355046682682.3i"
-"12.34-5.67i", "12.34", "54138663282971.3+78697841733874.3i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPRODUCT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPRODUCT.data
deleted file mode 100644
index 81ab40b7ce0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMPRODUCT.data
+++ /dev/null
@@ -1,15 +0,0 @@
-"12.34+5.67j", "123.45+67.89i", "#NUM!"
-"12.34+5.67j", "12.34+5.67j"
-"12.34+5.67i", "123.45+67.89i", "5.67", "6454.936089+8718.895647i"
-"12.34+5.67j", "123.45+67.89j", "5.67", "6454.936089+8718.895647j"
-"12.34+5.67j", "123.45+67.89j", "1138.4367+1537.7241j"
-"12.34-5.67i", "123.45+67.89i", "1908.3093+137.8011i"
-"12.34+5.67i", "123.45-67.89i", "1908.3093-137.8011i"
-"12.34-5.67i", "123.45-67.89i", "1138.4367-1537.7241i"
-"-12.34+5.67i", "123.45+67.89i", "-1908.3093-137.8011i"
-"-12.34-5.67i", "123.45+67.89i", "-1138.4367-1537.7241i"
-"12.34+5.67i", "-123.45+67.89i", "-1908.3093+137.8011i"
-"-12.34+5.67i", "-123.45+67.89i", "1138.4367-1537.7241i"
-"-12.34-5.67i", "-123.45-67.89i", "1138.4367+1537.7241i"
-"-12.34", "123.45-67.89i", "-1523.373+837.7626i"
-"-12.34-5.67i", "-12.34", "152.2756+69.9678i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMREAL.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMREAL.data
deleted file mode 100644
index ffa4382cbc2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMREAL.data
+++ /dev/null
@@ -1,30 +0,0 @@
-12.34+5.67j", 12.34
-"-1.234E-5+6.78E9i", -1.234E-5
-"3.5+2.5i", 3.5
-"3.5+i", 3.5
-"3.5", 3.5
-3.5, 3.5
-"3.5-i", 3.5
-"3.5-2.5i", 3.5
-"1+2.5i", 1
-"1+i", 1
-"1", 1
-1, 1
-"1-i", 1
-"1-2.5i", 1
-"2.5i", 0
-"i", 0
-"0", 0
-0, 0
-"-i", 0
-"-2.5i", 0
-"-1+2.5i", -1
-"-1+i", -1
-"-1", -1
-"-1-i", -1
-"-1-2.5i", -1
-"-3.5+2.5i", -3.5
-"-3.5+i", -3.5
-"-3.5", -3.5
-"-3.5-i", -3.5
-"-3.5-2.5i", -3.5
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSIN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSIN.data
deleted file mode 100644
index 50ab20034bb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSIN.data
+++ /dev/null
@@ -1,27 +0,0 @@
-"12.34+5.67j", "-32.5483841590412+141.315819535092j"
-"3.5+2.5i", "-2.15110429680353-5.66575444574645i"
-"3.5+i", "-0.541286805665839-1.10052501669986i"
-"3.5", "-0.35078322768962"
-"3.5-i", "-0.541286805665839+1.10052501669986i"
-"3.5-2.5i", "-2.15110429680353+5.66575444574645i"
-"1+2.5i", "5.16014366757971+3.26893943207955i"
-"1+i", "1.29845758141598+0.634963914784736i"
-"1", "0.841470984807897"
-"1-i", "1.29845758141598-0.634963914784736i"
-"1-2.5i", "5.16014366757971-3.26893943207955i"
-"2.5i", "6.05020448103979i"
-"i", "1.1752011936438i"
-"0", "0"
-"-i", "-1.1752011936438i"
-"-2.5i", "-6.05020448103979i"
-"-1+2.5i", "-5.16014366757971+3.26893943207955i"
-"-1+i", "-1.29845758141598+0.634963914784736i"
-"-1", "-0.841470984807897"
-"-1-i", "-1.29845758141598-0.634963914784736i"
-"-1-2.5i", "-5.16014366757971-3.26893943207955i"
-"-3.5+2.5i", "2.15110429680353-5.66575444574645i"
-"-3.5+i", "0.541286805665839-1.10052501669986i"
-"-3.5", "0.35078322768962"
-"-3.5-i", "0.541286805665839+1.10052501669986i"
-"-3.5-2.5i", "2.15110429680353+5.66575444574645i"
-"3", "0.141120008059867"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSQRT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSQRT.data
deleted file mode 100644
index d35a4d752cf..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSQRT.data
+++ /dev/null
@@ -1,28 +0,0 @@
-"12.34+5.67j", "3.60002071031685+0.787495469644252j"
-"-1.234E-5+6.78E9i", "58223.7065120385+58223.7065120386i"
-"3.5+2.5i", "1.9749889409211+0.632914936433528i"
-"3.5+i", "1.88945163270197+0.264627043818521i"
-"3.5", "1.87082869338697"
-"3.5-i", "1.88945163270197-0.264627043818521i"
-"3.5-2.5i", "1.9749889409211-0.632914936433528i"
-"1+2.5i", "1.35878298553655+0.919940868634298i"
-"1+i", "1.09868411346781+0.455089860562227i"
-"1", "1"
-"1-i", "1.09868411346781-0.455089860562227i"
-"1-2.5i", "1.35878298553655-0.919940868634298i"
-"2.5i", "1.11803398874989+1.11803398874989i"
-"i", "0.707106781186548+0.707106781186547i"
-"0", "0"
-"-i", "0.707106781186548-0.707106781186547i"
-"-2.5i", "1.11803398874989-1.11803398874989i"
-"-1+2.5i", "0.919940868634298+1.35878298553655i"
-"-1+i", "0.455089860562227+1.09868411346781i"
-"-1", "6.12303176911189E-017+i"
-"-1-i", "0.455089860562227-1.09868411346781i"
-"-1-2.5i", "0.919940868634298-1.35878298553655i"
-"-3.5+2.5i", "0.632914936433528+1.9749889409211i"
-"-3.5+i", "0.264627043818521+1.88945163270197i"
-"-3.5", "1.14551435241745E-016+1.87082869338697i"
-"-3.5-i", "0.264627043818521-1.88945163270197i"
-"-3.5-2.5i", "0.632914936433528-1.9749889409211i"
-"9", "3"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUB.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUB.data
deleted file mode 100644
index 024d35859fe..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUB.data
+++ /dev/null
@@ -1,10 +0,0 @@
-"12.34+5.67j", "123.45+67.89i", "#NUM!"
-"123.45+67.89j", "12.34+5.67j", "111.11+62.22j"
-"12.34+5.67j", "123.45+67.89j", "-111.11-62.22j"
-"12.34+5.67i", "123.45+67.89i", "123.45+67.89i", "-111.11-62.22i"
-"-12.34-5.67i", "123.45-67.89i", "-135.79+62.22i"
-"12.34-5.67i", "-123.45-67.89i", "135.79+62.22i"
-"-12.34-5.67i", "-123.45-67.89i", "111.11+62.22i"
-"-12.34-5.67i", "-123.45-67.89", "#NUM!"
-"-12.34-5.67j", "-123.45-67.89", "#NUM!"
-"-12.34-5.67", "-123.45-67.89j", "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUM.data
deleted file mode 100644
index e63aed946ce..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/IMSUM.data
+++ /dev/null
@@ -1,10 +0,0 @@
-"12.34+5.67j", "123.45+67.89i", "#NUM!"
-"12.34+5.67j", "123.45+67.89j", "135.79+73.56j"
-"12.34-5.67i", "123.45+67.89i", "135.79+62.22i"
-"12.34+5.67i", "123.45-67.89i", "135.79-62.22i"
-"12.34-5.67i", "123.45-67.89i", "135.79-73.56i"
-"12.34+5.67i", "123.45+67.89i", "123.45+67.89i", "259.24+141.45i"
-"12.34+5.67i", "123.45+67.89i", "123.45+67.89j", "#NUM!"
-"-12.34-5.67i", "123.45-67.89i", "111.11-73.56i"
-"12.34-5.67i", "-123.45-67.89i", "-111.11-73.56i"
-"-12.34-5.67i", "-123.45-67.89i", "-135.79-73.56i"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2BIN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2BIN.data
deleted file mode 100644
index 1f212fd9d4c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2BIN.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"1357", "#NUM!"
-"246", "10100110"
-"3", 3, "011"
-"12345", "#NUM!"
-"123.45", "#NUM!"
-"0", "0"
-TRUE, "#VALUE!"
-"3579", "#NUM!"
-"7777777000", "1000000000" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2DEC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2DEC.data
deleted file mode 100644
index 19f6dbd69c8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2DEC.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"1357", "751"
-"246", "166"
-"12345", "5349"
-"123.45", "#NUM!"
-"0", "0"
-TRUE, "#VALUE!"
-"3579", "#NUM!"
-"54", "44"
-"7777777533", "-165" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2HEX.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2HEX.data
deleted file mode 100644
index c18e7fdb5c9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Engineering/OCT2HEX.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"1357", "2EF"
-"246", "A6"
-"12345", "14E5"
-"100", 4, "0040"
-"123.45", "#NUM!"
-"0", "0"
-TRUE, "#VALUE!"
-"3579", "#NUM!"
-"7777777533", "FFFFFFFF5B" // 2's Complement
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINT.data
deleted file mode 100644
index 5d92786fb5f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINT.data
+++ /dev/null
@@ -1,8 +0,0 @@
-#Issue date 1st Interest Settlement Rate Par Freq Basis Result
-"2008-03-01", "2008-08-31", "2008-05-01", 0.10, 1000, 2, 0, 16.666666666667
-"2008-03-05", "2008-08-31", "2008-05-01", 0.10, 1000, 2, 0, 15.555555555556
-"2010-01-01", "2010-06-30", "2010-04-01", 0.08, 10000, 4, 202.222222222222
-"2008-03-05", "2008-08-31", "2008-05-01", -0.10, 1000, 2, 0, "#NUM!"
-"Invalid Date", "2008-08-31", "2008-05-01", 0.10, 1000, 2, 0, "#VALUE!"
-"2008-03-01", "2008-08-31", "2008-05-01", "ABC", 1000, 2, 0, "#VALUE!"
-"2008-03-01", "2008-08-31", "2008-05-01", 0.10, 1000, 2, "ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINTM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINTM.data
deleted file mode 100644
index e43e93bb6cb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ACCRINTM.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Issue date Settlement Rate Par Basis Result
-"2008-04-01", "2008-06-15", 0.10, 1000, 3, 20.547945205479
-"2010-01-01", "2010-12-31", 0.08, 10000, 800
-"2008-03-05", "2008-08-31", -0.10, 1000, 2, "#NUM!"
-"Invalid Date", "2008-08-31", 0.10, 1000, 2, "#VALUE!"
-"2008-03-01", "2008-08-31", "ABC", 1000, 2, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORDEGRC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORDEGRC.data
deleted file mode 100644
index d753a6d00db..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORDEGRC.data
+++ /dev/null
@@ -1,3 +0,0 @@
-#Cost Date purchased End of the 1st period Salvage Period Depreciation Basis Result
-2400, "2008-08-19", "2008-12-31", 300, 1, 0.15, 1, 776
-150, "2011-01-01", "2011-09-30", 20, 1, 0.2, 4, 42
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORLINC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORLINC.data
deleted file mode 100644
index db6920ac20f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/AMORLINC.data
+++ /dev/null
@@ -1,3 +0,0 @@
-#Cost Date purchased End of the 1st period Salvage Period Depreciation Basis Result
-2400, "2008-08-19", "2008-12-31", 300, 1, 0.15, 1, 360
-150, "2011-01-01", "2011-09-30", 20, 1, 0.2, 4, 30
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYBS.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYBS.data
deleted file mode 100644
index 5905db94e4f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYBS.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 71
-"2011-01-01", "2012-10-25", 4, 66
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYS.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYS.data
deleted file mode 100644
index 26de7302155..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYS.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 181
-"2011-01-01", "2012-10-25", 4, 90
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYSNC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYSNC.data
deleted file mode 100644
index 91b9f73c4d9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPDAYSNC.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 110
-"2011-01-01", "2012-10-25", 4, 24
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNCD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNCD.data
deleted file mode 100644
index fe5bba5d1b5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNCD.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 39217
-"2011-01-01", "2012-10-25", 4, 40568
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNUM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNUM.data
deleted file mode 100644
index 43f77cd735f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPNUM.data
+++ /dev/null
@@ -1,7 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 4
-"2011-01-01", "2012-10-25", 4, 0, 8
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
-"01-Jan-2008", "31-Dec-2012", 1, 1, 5
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPPCD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPPCD.data
deleted file mode 100644
index 86212afa8da..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/COUPPCD.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Frequency Basis Result
-"25-Jan-2007", "15-Nov-2008", 2, 1, 39036
-"2011-01-01", "2012-10-25", 4, 40476
-"Invalid Date", "15-Nov-2008", 2, 1, "#VALUE!"
-"25-Jan-2007", "Invalid Date", 2, 1, "#VALUE!"
-"25-Jan-2007", "15-Nov-2008", 3, 1, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMIPMT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMIPMT.data
deleted file mode 100644
index 8427c465164..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMIPMT.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#rate nper pv start_period end_period type result
-0.0075, 360, 125000, 13, 24, 0, -11135.232130751
-0.0075, 360, 125000, 1, 1, 0, -937.50
-0.004166666667, 60, 50000, 1, 12, 0, -2294.9775375121
-0.004166666667, 60, 50000, 13, 24, 0, -1833.1000667254
-0.004166666667, 60, 50000, 25, 36, 0, -1347.5920679425
-0.004166666667, 60, 50000, 37, 48, 0, -837.24455850309
-0.004166666667, 60, 50000, 49, 60, 0, -300.78670189939
-0.0075, 360, 125000, 24, 13, 0, "#VALUE!"
-0.0075, 360, 125000, 24, 13, 2, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMPRINC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMPRINC.data
deleted file mode 100644
index 65e6d6d14b8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/CUMPRINC.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#rate nper pv start_period end_period type result
-0.0075, 360, 125000, 13, 24, 0, -934.10712342088
-0.0075, 360, 125000, 1, 1, 0, -68.278271180977
-0.004166666667, 60, 50000, 1, 12, 0, -9027.7626490046
-0.004166666667, 60, 50000, 13, 24, 0, -9489.6401197913
-0.004166666667, 60, 50000, 25, 36, 0, -9975.1481185741
-0.004166666667, 60, 50000, 37, 48, 0, -10485.495628014
-0.004166666667, 60, 50000, 49, 60, 0, -11021.953484617
-0.0075, 360, 125000, 24, 13, 0, "#VALUE!"
-0.0075, 360, 125000, 24, 13, 2, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DB.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DB.data
deleted file mode 100644
index e8c5fcf7901..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DB.data
+++ /dev/null
@@ -1,17 +0,0 @@
-#cost salvage life period month result
-1000000, 100000, 6, 1, 7, 186083.33333333
-1000000, 100000, 6, 2, 7, 259639.41666667
-1000000, 100000, 6, 3, 7, 176814.44275
-1000000, 100000, 6, 4, 7, 120410.63551275
-1000000, 100000, 6, 5, 7, 81999.642784183
-1000000, 100000, 6, 6, 7, 55841.756736028
-1000000, 100000, 6, 7, 7, 15845.098473848
-10000, 1000, 5, 1, 6, 1845.00
-10000, 1000, 5, 2, 6, 3009.195
-10000, 1000, 5, 3, 6, 1898.802045
-10000, 1000, 5, 4, 6, 1198.144090395
-10000, 1000, 5, 5, 6, 756.02892103925
-10000, 1000, 5, 6, 6, 238.52712458788
-0, 0, 5, 6, 6, 0.0
--1000, 100, 5, 6, 6, "#NUM!"
-"ABC", 100, 5, 6, 6, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DDB.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DDB.data
deleted file mode 100644
index 2dfd5205641..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DDB.data
+++ /dev/null
@@ -1,16 +0,0 @@
-#cost salvage life period month result
-2400, 300, 36500, 1, 0.13150684931507
-2400, 300, 36500, 2, 0.13149964346031
-2400, 300, 36500, 7, 0.13146362010871
-2400, 300, 36500, 7, 14, 0.91843145432708
-2400, 300, 120, 1, 2, 40.00
-2400, 300, 10, 1, 2, 480.00
-2400, 300, 10, 2, 1.5, 306.00
-2400, 300, 10, 10, 22.12254720000030
-10000, 1000, 5, 1, 4000.00
-10000, 1000, 5, 2, 2400.00
-10000, 1000, 5, 3, 1440.00
-10000, 1000, 5, 4, 864.00
-10000, 1000, 5, 5, 296.00
--2400, 300, 36500, 1, "#NUM!"
-"ABC", 300, 36500, 1, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DISC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DISC.data
deleted file mode 100644
index b5790c74c48..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DISC.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#settlement maturity price redemption basis result
-"2007-01-25", "2007-06-15", 97.975, 100, 1, 0.052420213
-"2010-04-01", "2015-03-31", 95, 100, 0.01
-"2010-04-01", "2015-03-31", 0, 100, "#NUM!"
-"2010-04-01", "2015-03-31", "ABC", 100, "#VALUE!"
-"Invalid Date", "2007-06-15", 97.975, 100, 1, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARDE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARDE.data
deleted file mode 100644
index c41b51dc19a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARDE.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#fractional_dollar fraction result
-1.02, 16, 1.125
-1.1, 32, 1.3125
-1.01, 16, 1.0625
-1.1, 16, 1.625
-1.03, 32, 1.09375
-1.3, 32, 1.9375
-1.12, 32, 1.375
-1.2345, 0, "#DIV/0!"
-1.2345, -2, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARFR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARFR.data
deleted file mode 100644
index a83a7231f66..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/DOLLARFR.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#decimal_dollar fraction result
-1.125, 16, 1.02
-1.125, 32, 1.04
-1.0625, 16, 1.01
-1.625, 16, 1.1
-1.09375, 32, 1.03
-1.9375, 32, 1.3
-1.375, 32, 1.12
-1.2345, 0, "#DIV/0!"
-1.2345, -2, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/EFFECT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/EFFECT.data
deleted file mode 100644
index 34de2b2c6e0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/EFFECT.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#nominal_rate npery Result
-0.0525, 4, 0.053542667370758
-0.10, 4, 0.103812890625
-0.10, 2, 0.1025
-0.025, 2, 0.02515625
-1, 0, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FV.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FV.data
deleted file mode 100644
index 2955e9a23db..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FV.data
+++ /dev/null
@@ -1,9 +0,0 @@
-#rate nper pmt pv type Result
-0.005, 10, -200, -500, 1, 2581.4033740601
-0.01, 12, -1000, 12682.503013197
-0.009166666667, 35, -2000, , 1, 82846.246372418
-0.005, 12, -100, -1000, 1, 2301.4018303409
-0.004166666667, 60, -1000, 68006.082841536
-0.025, 16, -2000, 0, 1, 39729.460894166
-0.1, 12, -100, 0, 2, "#NUM!"
-0.0, 12, -100, -100, 1300
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FVSCHEDULE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FVSCHEDULE.data
deleted file mode 100644
index 0b5ad893e74..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/FVSCHEDULE.data
+++ /dev/null
@@ -1,4 +0,0 @@
-#principal schedule Result
-1, {0.09|0.11|0.1}, 1.33089
-10, {0.09;0.11;0.1}, 13.3089
-10000, {0.05|0.05|0.035|0.035|0.035}, 12223.614571875
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/INTRATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/INTRATE.data
deleted file mode 100644
index 38195a427f9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/INTRATE.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#Settlement Maturity Investment Redemption Basis Result
-"2008-02-15", "2008-05-15", 1000000, 1014420, 2, 0.05768
-"2005-04-01", "2010-03-31", 1000, 2125, 0.225
-"2008-02-15", "2008-05-15", 1000000, 1014420, "ABC", "#VALUE!"
-"2008-02-15", "2008-05-15", 1000000, -1014420, 2, "#NUM!"
-"Invalid Date", "2008-05-15", 1000000, 1014420, 2, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IPMT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IPMT.data
deleted file mode 100644
index 9d5dab00d56..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IPMT.data
+++ /dev/null
@@ -1,9 +0,0 @@
-#rate per nper pv fv type Result
-0.008333333333, 3, 3, 8000, -22.406893015021
-0.10, 3, 3, 8000, -292.44712990937
-0.004166666667, 1, 60, 50000, -208.33333335
-0.004166666667, 2, 60, 50000, -205.26988189617
-0.00875, 1, 8, 10000, 5000, 1, 0.00
-0.00875, 2, 8, 10000, 5000, 1, -70.968650395559
-0.005, 2, 8, 2500, 200, 6, "#NUM!"
-0.005, 8, 2, 2500, 200, 1, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IRR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IRR.data
deleted file mode 100644
index 0d4458ff699..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/IRR.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#values guess Result
-{-70000;12000;15000;18000;21000}, -0.021244848273410
-{-70000;12000;15000;18000;21000;26000}, 0.08663094803652
-{-70000;12000;15000;18000}, 0.10, -0.18213746414550
-{-100;20|24|28.80}, -0.13618951095869
-{-100;20|24|28.80|34.56|41.47}, 0.130575756371527
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ISPMT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ISPMT.data
deleted file mode 100644
index eac8167d193..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/ISPMT.data
+++ /dev/null
@@ -1,5 +0,0 @@
-#rate per nper pv result
-0.008333333333, 1, 36, 8000000, -64814.814812222
-0.10, 1, 3, 8000000, -533333.33333333
-0.004166666667, 1, 60, 50000, -204.8611111275
-0.004166666667, 2, 60, 50000, -201.388888905
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/MIRR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/MIRR.data
deleted file mode 100644
index f91b030bba1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/MIRR.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#values finance_rate reinvestment_rate Result
-{-120000;39000|30000|21000|37000|46000}, 0.10, 0.12, 0.12609413036591
-{-120000;39000|30000|21000}, 0.10, 0.12, -0.048044655249981
-{-120000;39000|30000|21000|37000|46000}, 0.10, 0.14, 0.13475911082831
-{-100;12|14|11}, 5.5, 5, 0.74021752686287
-{-100;12|14|11|13|16}, 5.5, 5, 1.8579321744785
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NOMINAL.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NOMINAL.data
deleted file mode 100644
index df78c55343b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NOMINAL.data
+++ /dev/null
@@ -1,6 +0,0 @@
-#effect_rate npery result
-0.053543, 4, 0.052500319868356
-0.10, 4, 0.09645475633778
-0.10, 2, 0.097617696340303
-0.025, 12, 0.024718035238113
--0.025, 12, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPER.data
deleted file mode 100644
index 205d0aabfe2..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPER.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#rate pmt pv fv type result
-0.01, -100, -1000, 10000, 1, 59.673865674295
-0.01, -100, -1000, 10000, 60.082122853762
-0.01, -100, -1000, -9.5785940398132
-0.003333333333, -1000, 50000, 54.78757726
-0.015, -1200, 9000, 5000, 1, 11.90373729
-0.015, -1200, 9000, 5000, 2, "#NUM!"
-0.015, 0.0, 0.0, 5000, 1, "#NUM!"
-0.0, 0.0, -500, 5000, 1, "#NUM!"
-0.0, -50, -250, 150, 1, -2.0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPV.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPV.data
deleted file mode 100644
index c927fa5427d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/NPV.data
+++ /dev/null
@@ -1,5 +0,0 @@
-#rate values result
-0.10, -10000, 3000, 4200, 6800, 1188.4434123352
-0.08, 8000, 9200, 10000, 12000, 14500, 41922.061554932
-0.08, 8000, 9200, 10000, 12000, 14500, -9000, 36250.534912984
-0.05, 2000, 2400, 2900, 3500, 4100, 12678.677633095
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/PRICE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/PRICE.data
deleted file mode 100644
index c36be488b0e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/PRICE.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#Settlement Maturity Rate Yield Redemption Frequency Basis Result
-"15-Feb-2008", "15-Nov-2017", 0.0575, 0.065, 100, 2, 0, 94.6343616213221
-"15-Feb-2008", "15-Nov-2017", 0.0575, 0.065, 100, 2, 1, 94.6354492078772
-"15-Feb-2008", "15-Nov-2017", 0.0575, 0.065, 100, 2, 2, 94.6365640300251
-"15-Feb-2008", "15-Nov-2017", 0.0575, 0.065, 100, 2, 3, 94.6351747967845
-"01-Apr-2012", "31-Mar-2020", 0.12, 0.10, 100, 2, NULL, 110.8344835932160
-"01-Apr-2012", "31-Mar-2020", 0.12, 0.10, 100, 2, 1, 110.8345373958590
-"01-Apr-2012", "31-Mar-2020", 0.12, 0.10, 100, 2, 2, 110.8344835932160
-"01-Apr-2012", "31-Mar-2020", 0.12, 0.10, 100, 2, 3, 110.8345285514390
-"01-Apr-2012", "31-Mar-2020", 0.12, 0.10, 100, 4, 3, 110.9217329631980
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/RATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/RATE.data
deleted file mode 100644
index 2dd8449ebd0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/RATE.data
+++ /dev/null
@@ -1,11 +0,0 @@
-#Periods Payment Present Value Future Value Type Guess Result
-48, -200, 8000, 0.0077014724882014
-60, -6000, 120000, 0.0467819164224934
-60, -1000, 120000, -0.0204429522193565
-24, -250, 5000, 0.0151308439023434
-24, -250, 5000, NULL, 1, 0.0165501190667120
-208, -700, 8000, 0.0874999976840937
-10, -1000, 6500, 0.0871137556058636
-6, -1000, 100000, -126068, 0.0484721272835728
-6, 1000, 100000, -126068, 0.0302728738275435
-6, -1000, -100000, 126068, 0, 0.0302728738275437
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/XIRR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/XIRR.data
deleted file mode 100644
index 36a8e23dd8a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Financial/XIRR.data
+++ /dev/null
@@ -1,4 +0,0 @@
-#values dates guess Result
-{-10000;2750|4250|3250|2750|46000}, {"2008-01-01";"2008-03-01"|"2008-10-30"|"2009-02-15"|"2009-04-01"}, 0.10, 0.373362535
-{-100;20|40|25}, {"2010-01-01";"2010-04-01"|"2010-10-01"|"2011-02-01"}, -0.3024
-{-100;20|40|25|8|15}, {"2010-01-01";"2010-04-01"|"2010-10-01"|"2011-02-01"|"2011-03-01"|"2011-06-01"}, 0.2095
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/ERROR_TYPE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/ERROR_TYPE.data
deleted file mode 100644
index f2722937d6f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/ERROR_TYPE.data
+++ /dev/null
@@ -1,14 +0,0 @@
- "#N/A"
-NULL, "#N/A"
--1, "#N/A"
-1.25, "#N/A"
-"", "#N/A"
-"2.5", "#N/A"
-TRUE, "#N/A"
-"#NULL!", 1
-"#DIV/0!", 2
-"#VALUE!", 3
-"#REF!", 4
-"#NAME?", 5
-"#NUM!", 6
-"#N/A", 7
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_BLANK.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_BLANK.data
deleted file mode 100644
index 1daa126dad5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_BLANK.data
+++ /dev/null
@@ -1,16 +0,0 @@
- TRUE
-NULL, TRUE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", FALSE
-"#N/A", FALSE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERR.data
deleted file mode 100644
index e6384d14f69..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERR.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", TRUE
-"#N/A", FALSE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERROR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERROR.data
deleted file mode 100644
index 244807a12ad..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ERROR.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", TRUE
-"#N/A", TRUE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_EVEN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_EVEN.data
deleted file mode 100644
index 8f985df4097..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_EVEN.data
+++ /dev/null
@@ -1,20 +0,0 @@
- "#NAME?"
-NULL, "#NAME?"
--1, FALSE
-0, TRUE
-9, FALSE
-1.25, FALSE
-1.5, FALSE
-2.25, TRUE
-2.5, TRUE
-"", "#VALUE!"
-"-1", FALSE
-"2", TRUE
-"-1.5", FALSE
-"2.5", TRUE
-"ABC", "#VALUE!"
-"#VALUE!", "#VALUE!"
-"#N/A", "#VALUE!"
-"TRUE", "#VALUE!"
-TRUE, "#VALUE!"
-FALSE, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_LOGICAL.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_LOGICAL.data
deleted file mode 100644
index d977ba7b3ff..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_LOGICAL.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", FALSE
-"#N/A", FALSE
-"TRUE", FALSE
-TRUE, TRUE
-FALSE, TRUE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NA.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NA.data
deleted file mode 100644
index be96e6bf2db..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NA.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", FALSE
-"#N/A", TRUE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NONTEXT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NONTEXT.data
deleted file mode 100644
index 223053a256f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NONTEXT.data
+++ /dev/null
@@ -1,16 +0,0 @@
- TRUE
-NULL, TRUE
--1, TRUE
-0, TRUE
-9, TRUE
-1.5, TRUE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", TRUE
-"#N/A", TRUE
-"TRUE", FALSE
-TRUE, TRUE
-FALSE, TRUE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NUMBER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NUMBER.data
deleted file mode 100644
index 525d0fe7e2f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_NUMBER.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, TRUE
-0, TRUE
-9, TRUE
-1.5, TRUE
-"", FALSE
-"-1", FALSE
-"2", FALSE
-"-1.5", FALSE
-"ABC", FALSE
-"#VALUE!", FALSE
-"#N/A", FALSE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ODD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ODD.data
deleted file mode 100644
index 0cf0741eafe..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_ODD.data
+++ /dev/null
@@ -1,20 +0,0 @@
- "#NAME?"
-NULL, "#NAME?"
--1, TRUE
-0, FALSE
-9, TRUE
-1.25, TRUE
-1.5, TRUE
-2.25, FALSE
-2.5, FALSE
-"", "#VALUE!"
-"-1", TRUE
-"2", FALSE
-"-1.5", TRUE
-"2.5", FALSE
-"ABC", "#VALUE!"
-"#VALUE!", "#VALUE!"
-"#N/A", "#VALUE!"
-"TRUE", "#VALUE!"
-TRUE, "#VALUE!"
-FALSE, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_TEXT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_TEXT.data
deleted file mode 100644
index 3f3abf1b63b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/IS_TEXT.data
+++ /dev/null
@@ -1,16 +0,0 @@
- FALSE
-NULL, FALSE
--1, FALSE
-0, FALSE
-9, FALSE
-1.5, FALSE
-"", TRUE
-"-1", TRUE
-"2", TRUE
-"-1.5", TRUE
-"ABC", TRUE
-"#VALUE!", FALSE
-"#N/A", FALSE
-"TRUE", TRUE
-TRUE, FALSE
-FALSE, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/N.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/N.data
deleted file mode 100644
index 9fc130e0a51..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/N.data
+++ /dev/null
@@ -1,20 +0,0 @@
- 0
-NULL, 0
--1, -1
-1.25, 1.25
-"", 0
-"2.5", 0
-"TRUE", 0
-"ABCDE", 0
-TRUE, 1
-"#DIV/0!", "#DIV/0!"
-"#NUM!", "#NUM!"
-{}, 0
-{123}, 123
-{123|456}, 123
-{123|"A"}, 123
-{"A"|123}, 0
-{"A"|123;456|789}, 0
-{123|"A";456|789}, 123
-{123|456;"A"|789}, 123
-{123|456;789|"A"}, 123
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/TYPE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/TYPE.data
deleted file mode 100644
index 52d168802b1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Functions/TYPE.data
+++ /dev/null
@@ -1,16 +0,0 @@
- 1
-NULL, 1
--1, 1
-1.25, 1
-"", 2
-"2.5", 2
-"TRUE", 2
-"ABCDE", 2
-TRUE, 4
-"#DIV/0!", 16
-"#NUM!", 16
-{}, 1
-{1}, 1
-{1;2;3}, 64
-{1|2|3;4|5|6;7|8|9}, 64
-{|;|}, 64
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/AND.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/AND.data
deleted file mode 100644
index 76870343e5d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/AND.data
+++ /dev/null
@@ -1,21 +0,0 @@
-"#VALUE!" // No arguments
-NULL, TRUE // NULL
-TRUE, NULL, TRUE // Boolean TRUE and NULL
-FALSE, NULL, FALSE // Boolean FALSE and NULL
-TRUE, TRUE, TRUE // Both TRUE Booleans
-TRUE, FALSE, FALSE // Mixed Booleans
-FALSE, TRUE, FALSE // Mixed Booleans
-FALSE, FALSE, FALSE // Both FALSE Booleans
-TRUE, TRUE, FALSE, FALSE // Multiple Mixed Booleans
-TRUE, TRUE, TRUE, TRUE // Multiple TRUE Booleans
-FALSE, FALSE, FALSE, FALSE, FALSE // Multiple FALSE Booleans
--1, -2, TRUE
-0, 0, FALSE
-0, 1, FALSE
-1, 1, TRUE
-"1",1, "#VALUE!"
-"TRUE", 1, TRUE // 'TRUE' String
-"FALSE",TRUE, FALSE // 'FALSE' String
-"ABCD", 1, "#VALUE!" // Non-numeric String
--2, 1, TRUE
--2, 0, FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IF.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IF.data
deleted file mode 100644
index 23017b5b396..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IF.data
+++ /dev/null
@@ -1,7 +0,0 @@
-0
-TRUE, 0
-FALSE, FALSE
-TRUE, "ABC", "ABC"
-FALSE, "ABC", FALSE
-TRUE, "ABC", "XYZ", "ABC"
-FALSE, "ABC", "XYZ", "XYZ"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IFERROR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IFERROR.data
deleted file mode 100644
index 2095481f0c3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/IFERROR.data
+++ /dev/null
@@ -1,8 +0,0 @@
-, "Error", NULL
-TRUE, "Error", TRUE
-42, "Error", 42
-"", "Error", ""
-"ABC", "Error", "ABC"
-"#VALUE!", "Error", "Error"
-"#NAME?", "Error", "Error"
-"#N/A", "Error", "Error"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/NOT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/NOT.data
deleted file mode 100644
index adc515d8252..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/NOT.data
+++ /dev/null
@@ -1,20 +0,0 @@
-TRUE
-NULL, TRUE
--1, FALSE
-0, TRUE
-1, FALSE
-2, FALSE
--1.5, FALSE
-1.5, FALSE
-"-1", "#VALUE!"
-"0", "#VALUE!"
-"1", "#VALUE!"
-"2", "#VALUE!"
-"-1.5", "#VALUE!"
-"1.5", "#VALUE!"
-"", "#VALUE!"
-"ABC", "#VALUE!"
-"FALSE",TRUE
-"TRUE", FALSE
-TRUE, FALSE
-FALSE, TRUE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/OR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/OR.data
deleted file mode 100644
index 738916ee25e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/Logical/OR.data
+++ /dev/null
@@ -1,20 +0,0 @@
-"#VALUE!" // No arguments
-NULL, FALSE // NULL
-TRUE, NULL, TRUE // Boolean TRUE and NULL
-FALSE, NULL, FALSE // Boolean FALSE and NULL
-TRUE, TRUE, TRUE // Both TRUE Booleans
-TRUE, FALSE, TRUE // Mixed Booleans
-FALSE, TRUE, TRUE // Mixed Booleans
-FALSE, FALSE, FALSE // Both FALSE Booleans
-TRUE, TRUE, FALSE, TRUE // Multiple Mixed Booleans
-TRUE, TRUE, TRUE, TRUE // Multiple TRUE Booleans
-FALSE, FALSE, FALSE, FALSE, FALSE // Multiple FALSE Booleans
--1, -2, TRUE
-0, 0, FALSE
-0, 1, TRUE
-1, 1, TRUE
-"TRUE", 1, TRUE // 'TRUE' String
-"FALSE",TRUE, TRUE // 'FALSE' String
-"ABCD", 1, "#VALUE!" // Non-numeric String
--2, 1, TRUE
--2, 0, TRUE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/HLOOKUP.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/HLOOKUP.data
deleted file mode 100644
index c29fdc95ded..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/HLOOKUP.data
+++ /dev/null
@@ -1,9 +0,0 @@
-10251, {"Order ID"|10247|10249|10250|10251|10252|10253;"Unit Price"|14.00|18.60|7.70|16.80|16.80|64.80;"Quantity"|12|9|10|6|20|40}, 2, FALSE, 16.8
-10251, {"Order ID"|10247|10249|10250|10251|10252|10253;"Unit Price"|14.00|18.60|7.70|16.80|16.80|64.80;"Quantity"|12|9|10|6|20|40}, 3, FALSE, 6.0
-10248, {"Order ID"|10247|10249|10250|10251|10252|10253;"Unit Price"|14.00|18.60|7.70|16.80|16.80|64.80;"Quantity"|12|9|10|6|20|40}, 2, FALSE, "#N/A"
-10248, {"Order ID"|10247|10249|10250|10251|10252|10253;"Unit Price"|14.00|18.60|7.70|16.80|16.80|64.80;"Quantity"|12|9|10|6|20|40}, 2, TRUE, 14.0
-"Axles", {"Axles"|"Bearings"|"Bolts";4|4|9;5|7|10;6|8|11}, 2, TRUE, 4
-"Bearings", {"Axles"|"Bearings"|"Bolts";4|4|9;5|7|10;6|8|11}, 3, FALSE, 7
-"B", {"Axles"|"Bearings"|"Bolts";4|4|9;5|7|10;6|8|11}, 3, TRUE, 5
-"Bolts", {"Axles"|"Bearings"|"Bolts";4|4|9;5|7|10;6|8|11}, 4, 11
-3, {1|2|3;"a"|"b"|"c";"d"|"e"|"f"}, 2, TRUE, "c"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/VLOOKUP.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/VLOOKUP.data
deleted file mode 100644
index 8fefc6cc0b3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/LookupRef/VLOOKUP.data
+++ /dev/null
@@ -1,5 +0,0 @@
-1, {"Density"|"Viscosity"|"Temperature";0.457|3.55|500;0.525|3.25|400;0.616|2.93|300;0.675|2.75|250;0.746|2.57|200;0.835|2.38|150;0.946|2.17|100;1.09|1.95|50;1.29|1.71|0}, 2, FALSE, 2.17
-1, {"Density"|"Viscosity"|"Temperature";0.457|3.55|500;0.525|3.25|400;0.616|2.93|300;0.675|2.75|250;0.746|2.57|200;0.835|2.38|150;0.946|2.17|100;1.09|1.95|50;1.29|1.71|0}, 3, TRUE, 100
-.7, {"Density"|"Viscosity"|"Temperature";0.457|3.55|500;0.525|3.25|400;0.616|2.93|300;0.675|2.75|250;0.746|2.57|200;0.835|2.38|150;0.946|2.17|100;1.09|1.95|50;1.29|1.71|0}, 3, FALSE, "#N/A"
-0.1, {"Density"|"Viscosity"|"Temperature";0.457|3.55|500;0.525|3.25|400;0.616|2.93|300;0.675|2.75|250;0.746|2.57|200;0.835|2.38|150;0.946|2.17|100;1.09|1.95|50;1.29|1.71|0}, 2, TRUE, "#N/A"
-2, {"Density"|"Viscosity"|"Temperature";0.457|3.55|500;0.525|3.25|400;0.616|2.93|300;0.675|2.75|250;0.746|2.57|200;0.835|2.38|150;0.946|2.17|100;1.09|1.95|50;1.29|1.71|0}, 2, TRUE, 1.71
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ATAN2.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ATAN2.data
deleted file mode 100644
index 47dade23884..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ATAN2.data
+++ /dev/null
@@ -1,17 +0,0 @@
-#x_num y_num Result
-0, 0, "#DIV/0!"
-1, 1, 0.785398163397
--1, -1, -2.356194490192
--1, 1, 2.356194490192
-1, -1, -0.785398163397
-0.5, 1, 1.107148717794
--0.5, 2, 1.815774989922
-1, 0.8, 0.674740942224
-0.8, -0.6, -0.643501108793
-1, -9, -1.460139105621
-0.2, 0, 0.0
-0.1, 0.2, 1.107148717794
-0, 0.2, 1.570796326795
-"A", 0.2, "#VALUE!"
-TRUE, 1, 0.785398163397
-FALSE, -2.5, -1.570796326795
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/CEILING.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/CEILING.data
deleted file mode 100644
index ed46ca8bde1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/CEILING.data
+++ /dev/null
@@ -1,21 +0,0 @@
-#number significance result
-2.5, 1, 3.0
--2.5, -2, -4.0
-1.5, 0.1, 1.5
-0.234, 0.01, 0.24
--2.341, -0.1, -2.4
-8, 0, 0.0
-8, 1.5, 9.0
-8, -1.5, "#NUM!"
--8, 1.5, "#NUM!"
--8, -1.5, -9.0
-8.26, 0.05, 8.3
-2.341, 0.05, 2.35
-123.456, "#VALUE!"
-"PHPExcel", "#VALUE!"
-210.67, 1, 211.0
-210.67, 0.05, 210.70
-210.63, 0.05, 210.65
-2.98, 2, 4.0
--2.98, 2, "#NUM!"
--4.5, -1, -5.0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/COMBIN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/COMBIN.data
deleted file mode 100644
index 568ad14da79..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/COMBIN.data
+++ /dev/null
@@ -1,25 +0,0 @@
-#NumObjs NumInSet Result
-7, 3, 35
-8, 2, 28
-8, 3, 56
-8, 4, 70
-100, 3, 161700
--7, -10, "#NUM!"
--7, 10, "#NUM!"
-7, -10, "#NUM!"
-2, 3, "#NUM!"
-2, 2, 1
-2, 1, 2
-2, 0, 1
-2.5, 2, 1
-"ABCD", "EFGH", "#VALUE!"
-10, 5, 252
-10, 3, 120
-21, 5, 20349
-6, 1, 6
-6, 2, 15
-6, 3, 20
-6, 4, 15
-6, 5, 6
-6, 6, 1
-6, 7, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/EVEN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/EVEN.data
deleted file mode 100644
index 604533c23d0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/EVEN.data
+++ /dev/null
@@ -1,17 +0,0 @@
-, 0
-5.4, 6
--5.4, -6
-1.5, 2
-0.1, 2
-3, 4
-2, 2
--2, -2
--1, -2
-"ABC", "#VALUE!"
-TRUE, 2
-FALSE, 0
-0, 0
-210.61, 212
-2.98, 4
--2.98, -4
-6, 6
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACT.data
deleted file mode 100644
index 6340f6c1b9a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACT.data
+++ /dev/null
@@ -1,10 +0,0 @@
-5, 120
-1.9, 1
-0, 1
--4, "#NUM!"
-1, 1
-3, 6
-6, 720
-10, 3628800
-3.2, 6
-"ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACTDOUBLE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACTDOUBLE.data
deleted file mode 100644
index 81ee2e94a71..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FACTDOUBLE.data
+++ /dev/null
@@ -1,8 +0,0 @@
-0, 1
-6, 48
-7, 105
-5, 15
-8, 384
-13, 135135
--1, "#NUM!"
-"ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FLOOR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FLOOR.data
deleted file mode 100644
index 29785f72341..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/FLOOR.data
+++ /dev/null
@@ -1,11 +0,0 @@
-2.5, 1, 2
--2.5, -2, -2
--2.5, 2, "#NUM!"
-2.5, -2, "#NUM!"
-123.456,0, "#DIV/0!"
-1.5, 0.1, 1.5
-0.234, 0.01, 0.23
-123.456, "#VALUE!"
-"ABC", "#VALUE!"
-17, 3, 15
-19, 4, 16
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/GCD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/GCD.data
deleted file mode 100644
index ca673481efa..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/GCD.data
+++ /dev/null
@@ -1,20 +0,0 @@
-5, 2, 1
-24, 36, 12
-7, 1, 1
-5, 0, 5
-30, 15, 10, 5
-42, 56, 140, 14
-24, 28, 40, 4
-27, 45, 54, 9
-84, 126, 196, 14
-3, 5, 7, 1
-3, 5, 0, 1
-3, 5, -7, "#NUM!"
-3, 6, 12, 3
-3, 6, "12", 3
-3, 6, "ABC", "#VALUE!"
-3, 3
-15, 10, 25, 5
-0, 8, 12, 4
-7, 2, 1
-0, 0, 0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/INT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/INT.data
deleted file mode 100644
index b5d8cd5c89f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/INT.data
+++ /dev/null
@@ -1,19 +0,0 @@
-, 0
-5.4, 5
--5.4, -6
--3.2, -4
-1.5, 1
-0.1, 0
--0.1, -1
-3, 3
-2, 2
--2.01, -3
--2, -2
--1, -1
-"ABC", "#VALUE!"
-TRUE, 1
-FALSE, 0
-0, 0
-"-3.5", -4
-8.9, 8
--8.9, -9
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LCM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LCM.data
deleted file mode 100644
index 8f402684110..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LCM.data
+++ /dev/null
@@ -1,12 +0,0 @@
-5, 2, 10
-24, 36, 72
-3, 7, 12, 84
-24.9, 36.9, 72
-6, 22, 121, 726
-6, "ABC", "#VALUE!"
-24, -12, "#NUM!"
-3, 0, 0
-1, 5, 5
-15, 10, 25, 150
-1, 8, 12, 24
-7, 2, 14
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LOG.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LOG.data
deleted file mode 100644
index 219ac59e095..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/LOG.data
+++ /dev/null
@@ -1,70 +0,0 @@
-#number base result
-"ABC", "#VALUE!"
-"123ABC", "#VALUE!"
-1.2345, 0.0914910942679511
--1.5, -0.75, "#NUM!"
-0, -0.75, "#NUM!"
-3.75, -0.75, "#NUM!"
--1.5, 0, "#NUM!"
-0, 0, "#NUM!"
-3.75, 0, "#NUM!"
--0.75, 0.75, "#NUM!"
-0, 0.75, "#NUM!"
-0.75, 0.75, 1.0
-1.5, 0.75, -1.4094208396532100
-2.25, 0.75, -2.8188416793064200
-3, 0.75, -3.8188416793064200
-3.75, 0.75, -4.5945019399978900
-4.5, 0.75, -5.2282625189596300
--0.75, 1.5, "#NUM!"
-0, 1.5, "#NUM!"
-0.75, 1.5, -0.7095112913514550
-1.5, 1.5, 1.0
-2.25, 1.5, 2.0
-3, 1.5, 2.7095112913514500
-3.75, 1.5, 3.2598510045646600
-4.5, 1.5, 3.7095112913514500
--0.75, 2.25, "#NUM!"
-0, 2.25, "#NUM!"
-0.75, 2.25, -0.3547556456757270
-1.5, 2.25, 0.5
-2.25, 2.25, 1.0
-3, 2.25, 1.3547556456757300
-3.75, 2.25, 1.6299255022823300
-4.5, 2.25, 1.8547556456757300
--0.75, 3, "#NUM!"
-0, 3, "#NUM!"
-0.75, 3, -0.2618595071429150
-1.5, 3, 0.3690702464285430
-2.25, 3, 0.7381404928570850
-3, 3, 1.0
-3.75, 3, 1.2031140135750100
-4.5, 3, 1.3690702464285400
--0.75, 3.75, "#NUM!"
-0, 3.75, "#NUM!"
-0.75, 3.75, -0.2176514479827300
-1.5, 3.75, 0.3067624865675560
-2.25, 3.75, 0.6135249731351110
-3, 3.75, 0.8311764211178410
-3.75, 3.75, 1.0
-4.5, 3.75, 1.1379389076854000
--0.75, 4.5, "#NUM!"
-0, 4.5, "#NUM!"
-0.75, 4.5, -0.1912681309275550
-1.5, 4.5, 0.2695772896908150
-2.25, 4.5, 0.5391545793816300
-3, 4.5, 0.7304227103091850
-3.75, 4.5, 0.8787817986064220
-4.5, 4.5, 1.0
-64, 2, 6
-100, 2
-4, 0.5, -2
-500, 2.698970004336
-10, 1
-8, 2, 3
-86, 2.7182818, 4.454347342888
-20, 1.301029995664
-20, 10, 1.301029995664
-20, 25, 0.930676558073
-25, 5.1, 1.975690971574
-200, 3, 4.822736302150
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MDETERM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MDETERM.data
deleted file mode 100644
index 970bec5383c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MDETERM.data
+++ /dev/null
@@ -1,14 +0,0 @@
-{1|2|3;4|5|6;7|8|9}, 6.661338147750940E-16
-{1.1|2.2|3.3;4.4|5.5|6.6;7.7|8.8|9.9}, 1.61204383175573E-15
-{10|20|30;40|50|60;70|80|90}, -4.26325641456060E-12
-{8|1|6;3|5|7;4|9|2}, -3.6E+02
-{5|2;7|1}, -9
-{6|4|2;3|5|3;2|3|4}, 40
-{0.2|1;0.35|10.8}, 1.81
-{0.2|1|-0.9;0.35|10.8|4;-3.15|5|}, "#VALUE!"
-{1|2;3|4}, -2
-{1|2|1;3|4|2;1|1|2}, -3
-{1|3|8|5;1|3|6|1;1|1|1|0;7|3|10|2}, 88
-{3|6|1;1|1|0;3|10|2}, 1
-{3|6;1|1}, -3
-{1|3|8|5;1|3|6|1}, "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MINVERSE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MINVERSE.data
deleted file mode 100644
index 8c9a962fa6d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MINVERSE.data
+++ /dev/null
@@ -1,15 +0,0 @@
-{1|2|3;4|5|6;7|8|9}, {-4.50359962737050E+15|9.00719925474099E+15|-4.50359962737050E+15;9.00719925474100E+15|-1.80143985094820E+16|9.00719925474099E+15;-4.50359962737050E+15|9.00719925474099E+15|-4.50359962737050E+15}
-{10|20|30;40|50|60;70|80|90}, {7.03687441776639E+13|-1.40737488355328E+14|7.03687441776640E+13;-1.40737488355328E+14|2.81474976710656E+14|-1.40737488355328E+14;7.03687441776641E+13|-1.40737488355328E+14|7.03687441776640E+13}
-{8|1|6;3|5|7;4|9|2}, {1.47222222222222E-01|-1.44444444444444E-01|6.38888888888889E-02;-6.11111111111111E-02|2.22222222222222E-02|1.05555555555556E-01;-1.94444444444444E-02|1.88888888888889E-01|-1.02777777777778E-01}
-{4|-1;2|0}, {0|0.5;-1|2}
-{1|2|1;3|4|-1;0|2|0}, {0.25|0.25|-0.75;0|0|0.5;0.75|-0.25|-0.25}
-{1|4|1|1;1|4|0|1;2|3|1|2;3|2|6|4}, {3.2|-4.8|2.8|-1;0.2|0.2|0.2|0;1|-1|0|0;-4|5|-2|1}
-{0.2|1;0.35|10.8}, {5.96685082872928|-0.55248618784530;-0.19337016574586|0.11049723756906}
-{0.2|1|-0.9;0.35|10.8|4;-3.15|5}, "#VALUE!"
-{1|2;3|4}, {-2|1;1.5|-0.5}
-{1|2|1;3|4|2;1|1|2}, {-2|1|0;1.33333333333333|-0.33333333333333|-0.33333333333333;0.33333333333333|-0.33333333333333|0.66666666666667}
-{2|3;4|5}, {-2.5|1.5;2|-1}
-{5|8;7|9}, {-0.818181818181818|0.727272727272727;0.636363636363636|-0.454545454545455}
-{45|78;17|50}, {0.054112554112554|-0.084415584415584;-0.018398268398268|0.048701298701299}
-{2|2;2|1}, {-0.5|1.0;1|-1}
-{1|4|6;7|4|10;15|16|20}, {-0.2941176470588230|0.0588235294117647|0.0588235294117647;0.0367647058823529|-0.2573529411764710|0.1176470588235290;0.1911764705882350|0.1617647058823530|-0.0882352941176471}
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MMULT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MMULT.data
deleted file mode 100644
index 86c9bfdb416..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MMULT.data
+++ /dev/null
@@ -1,12 +0,0 @@
-{1|2;3|4}, {1|2;3|4}, {7|10;15|22}
-{1|2|3;4|5|6;7|8|9}, {1|2|3;4|5|6;7|8|9}, {30|36|42;66|81|96;102|126|150}
-{1|2;3|4}, 2, "#VALUE!" // Mismatched dimensions
-{1|2;3|4}, {2}, "#VALUE!" // Mismatched dimensions
-{1.2;2.4}, {3.6|4.5}, {14.43|14.43;14.43|14.43}
-2, {1|2;3|4}, "#VALUE!" // Mismatched dimensions
-{2}, {1|2;3|4}, "#VALUE!" // Mismatched dimensions
-{1|2;3|4}, {2|4}, "#VALUE!"
-{1|2;3|4}, {2;4}, {{10};{22}}
-{2|4}, {1|2;3|4}, {14|20}
-{2;4}, {1|2;3|4}, "#VALUE!" // Mismatched dimensions
-{1|2;3|4;5|6}, {1|2|3;4|5|6}, {9|12|15;19|26|33;29|40|51}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MOD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MOD.data
deleted file mode 100644
index 7e0aee6f460..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MOD.data
+++ /dev/null
@@ -1,9 +0,0 @@
-19, 17, 2
-19, -13, -7
-34, 17, 0
-34, 0, "#DIV/0!"
-3, 2, 1
--3, 2, 1
-3, -2, -1
--3, -2, -1
-2.5, 1.3, 1.2
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MROUND.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MROUND.data
deleted file mode 100644
index fc68ed7bc48..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MROUND.data
+++ /dev/null
@@ -1,11 +0,0 @@
-10, 3, 9
--10, -3, -9
-1.3, 0.2, 1.4
-5, 0, 0
-3.14159, 0.002, 3.142
--3.14159, -.02, -3.14
-31415.92654, 10, 31420
-31415.92654, 1, 31416
-5, -2, "#NUM!"
-"ABC", 1, "#VALUE!"
-1.234, "ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MULTINOMIAL.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MULTINOMIAL.data
deleted file mode 100644
index c943f20a24b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/MULTINOMIAL.data
+++ /dev/null
@@ -1,2 +0,0 @@
-2, 3, 4, 1260
-3, 1, 2, 5, 27720
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ODD.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ODD.data
deleted file mode 100644
index 54898cc1cec..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ODD.data
+++ /dev/null
@@ -1,13 +0,0 @@
-, 1
-5.4, 7
--5.4, -7
-1.5, 3
-0.1, 1
-3, 3
-2, 3
--2, -3
--1, -1
-"ABC", "#VALUE!"
-TRUE, 1
-FALSE, 1
-0, 1
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/POWER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/POWER.data
deleted file mode 100644
index f00915e7282..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/POWER.data
+++ /dev/null
@@ -1,81 +0,0 @@
--1.5, -1.5, "#NUM!"
--0.75, -1.5, "#NUM!"
-0, -1.5, "#DIV/0!"
-0.75, -1.5, 1.539600717839
-1.5, -1.5, 0.54433105395182
-2.25, -1.5, 0.2962962962963
-3, -1.5, 0.19245008972988
-3.75, -1.5, 0.13770607453182
-4.5, -1.5, 0.10475656017579
--1.5, -0.75, "#NUM!"
--0.75, -0.75, "#NUM!"
-0, -0.75, "#DIV/0!"
-0.75, -0.75, 1.2408064788028
-1.5, -0.75, 0.73778794646688
-2.25, -0.75, 0.54433105395182
-3, -0.75, 0.43869133765083
-3.75, -0.75, 0.37108769116183
-4.5, -0.75, 0.32366118113822
--1.5, 0, 1
--0.75, 0, 1
-0, 0, "#NUM!"
-0.75, 0, 1
-1.5, 0, 1
-2.25, 0, 1
-3, 0, 1
-3.75, 0, 1
-4.5, 0, 1
--1.5, 0.75, "#NUM!"
--0.75, 0.75, "#NUM!"
-0, 0.75, 0
-0.75, 0.75, 0.80592744886766
-1.5, 0.75, 1.35540300541477
-2.25, 0.75, 1.83711730708738
-3, 0.75, 2.27950705695478
-3.75, 0.75, 2.69478083972313
-4.5, 0.75, 3.08965071586068
--1.5, 1.5, "#NUM!"
--0.75, 1.5, "#NUM!"
-0, 1.5, 0
-0.75, 1.5, 0.64951905283833
-1.5, 1.5, 1.83711730708738
-2.25, 1.5, 3.375
-3, 1.5, 5.19615242270663
-3.75, 1.5, 7.26184377413891
-4.5, 1.5, 9.54594154601839
--1.5, 2.25, "#NUM!"
--0.75, 2.25, "#NUM!"
-0, 2.25, 0
-0.75, 2.25, 0.52346523324493
-1.5, 2.25, 2.49003431932572
-2.25, 2.25, 6.20027091141992
-3, 2.25, 11.8446661165724
-3.75, 2.25, 19.5690774636122
-4.5, 2.25, 29.4936251312199
--1.5, 3, -3.375
--0.75, 3, -0.421875
-0, 3, 0
-0.75, 3, 0.421875
-1.5, 3, 3.375
-2.25, 3, 11.390625
-3, 3, 27
-3.75, 3, 52.734375
-4.5, 3, 91.125
--1.5, 3.75, "#NUM!"
--0.75, 3.75, "#NUM!"
-0, 3.75, 0
-0.75, 3.75, 0.34000064249104
-1.5, 3.75, 4.57448514327484
-2.25, 3.75, 20.9259143260422
-3, 3.75, 61.546690537779
-3.75, 3.75, 142.107583344775
-4.5, 3.75, 281.544421482804
--1.5, 4.5, "#NUM!"
--0.75, 4.5, "#NUM!"
-0, 4.5, 0
-0.75, 4.5, 0.27401585041617
-1.5, 4.5, 6.20027091141992
-2.25, 4.5, 38.443359375
-3, 4.5, 140.296115413079
-3.75, 4.5, 382.948792776857
-4.5, 4.5, 869.873923380926
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/PRODUCT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/PRODUCT.data
deleted file mode 100644
index 9ff8b20c471..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/PRODUCT.data
+++ /dev/null
@@ -1,7 +0,0 @@
-5, 15, 30, 2250
-5, 15, 30, 2, 4500
-3, 6, 2, 8, 5, 1440
-3, 4, 12
-3, 4, 4.5, 54
-3, 4, 4.5, -6.78, -366.12
-3, 4, 4.5, -6.78, -2, 732.24
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/QUOTIENT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/QUOTIENT.data
deleted file mode 100644
index 16c3aa95821..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/QUOTIENT.data
+++ /dev/null
@@ -1,6 +0,0 @@
-5, 2, 2
-4.5, 3.1, 1
--10, 3, -3
-10, 2.2, 4
-5.5, 2.667, 2
--7, 2, -4
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROMAN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROMAN.data
deleted file mode 100644
index 69085897b81..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROMAN.data
+++ /dev/null
@@ -1,5 +0,0 @@
-49, "XLIX"
-50, "L"
-2012, "MMXII"
-999, "CMXCIX"
-499, "CDXCIX"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDDOWN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDDOWN.data
deleted file mode 100644
index 7bb42c0c1ab..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDDOWN.data
+++ /dev/null
@@ -1,14 +0,0 @@
-662.79, 0, 662
-662.79, 1, 662.7
-54.1, -1, 50
-55.1, -1, 50
--23.67, 1, -23.6
-3.2, 0, 3
-3.2, 0.01, 3
-76.9, 0, 76
-3.14159, 3, 3.141
--3.14159, 1, -3.1
-31415.92654, -2, 31400
-31415.92654, -1, 31410
-"ABC", 1, "#VALUE!"
-1.234, "ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDUP.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDUP.data
deleted file mode 100644
index ba81e3db1af..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/ROUNDUP.data
+++ /dev/null
@@ -1,14 +0,0 @@
-662.79, 0, 663
-662.79, 1, 662.8
-54.1, -1, 60
-55.1, -1, 60
--23.62, 1, -23.7
-3.2, 0, 4
-3.2, 0.01, 4
-76.9, 0, 77
-3.14159, 3, 3.142
--3.14159, 1, -3.2
-31415.92654, -2, 31500
-31415.92654, -1, 31420
-"ABC", 1, "#VALUE!"
-1.234, "ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SERIESSUM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SERIESSUM.data
deleted file mode 100644
index eb47f6843f3..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SERIESSUM.data
+++ /dev/null
@@ -1,2 +0,0 @@
-5, 1, 1, {1|1|1|1|1}, 3905
-2, 1, 2, {1|2|3|4|5}, 3186
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SIGN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SIGN.data
deleted file mode 100644
index 8494da9e001..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SIGN.data
+++ /dev/null
@@ -1,13 +0,0 @@
--1.5, -1
--1, -1
--0.5, -1
-0, 0
-0.5, 1
-1, 1
-1.5, 1
-2, 1
-2.5, 1
-"ABC", "#VALUE!"
-TRUE, 1
-FALSE, 0
-"-3.5", -1
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SQRTPI.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SQRTPI.data
deleted file mode 100644
index fc1ea52533a..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SQRTPI.data
+++ /dev/null
@@ -1,15 +0,0 @@
-"ABC", "#VALUE!"
--1.5, "#NUM!"
--1, "#NUM!"
--0.5, "#NUM!"
-0, 0.000000000000000000
-0.5, 1.253314137315500000
-1, 1.772453850905520000
-1.5, 2.170803763674800000
-2, 2.506628274631000000
-2.5, 2.802495608198960000
-3, 3.069980123839470000
-3.5, 3.315957521978270000
-4, 3.544907701811030000
-4.5, 3.759942411946500000
-5, 3.963327297606010000
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SUMSQ.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SUMSQ.data
deleted file mode 100644
index 557c5c05ef8..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/SUMSQ.data
+++ /dev/null
@@ -1,7 +0,0 @@
-3, 4, 25
-5, 2, 1, 3, 39
-5, 2, 1, 6, 66
-1, 3, 10
-1, 3, 2, 4, 30
-3, 5, 7, 83
-1, 2, 3, 14
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/TRUNC.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/TRUNC.data
deleted file mode 100644
index 8c85bddc50f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/MathTrig/TRUNC.data
+++ /dev/null
@@ -1,19 +0,0 @@
-3.14159, 2, 3.14
-3.14159, 3, 3.141
--3.14159, 2, -3.14
--3.14159, 3, -3.141
-31415.92654, 10, 31415.92654
--31415.92654, 10, -31415.92654
-31415.92654, 2, 31415.92
-31415.92654, -2, 31400
-31415.92654, -10, 0
--31415.92654, -10, 0
-12345.6789, -3, 12000
-12345.6789, -2, 12300
-12345.6789, -1, 12340
-12345.6789, 0, 12345
-12345.6789, 1, 12345.6
-12345.6789, 2, 12345.67
-12345.6789, 3, 12345.678
-"ABC", 2, "#VALUE!"
-31415.92654, "ABC", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CHAR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CHAR.data
deleted file mode 100644
index f4cbee5dbaa..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CHAR.data
+++ /dev/null
@@ -1,5 +0,0 @@
-"ABC", "#VALUE!"
--5, "#VALUE!"
-65, "A"
-123, "{"
-126, "~"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CLEAN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CLEAN.data
deleted file mode 100644
index 21f0c0d13c4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CLEAN.data
+++ /dev/null
@@ -1,5 +0,0 @@
-"HELLO ", "HELLO "
-" HELLO", "HELLO"
-"HELLO WORLD", "HELLO WORLD"
-TRUE, "TRUE"
-NULL, NULL
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CODE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CODE.data
deleted file mode 100644
index d251fb6eb4e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CODE.data
+++ /dev/null
@@ -1,12 +0,0 @@
-, "#VALUE!"
-"", "#VALUE!"
-"ABC", 65
-123, 49
-TRUE, 84
-"DEF", 68
-"PHPExcel", 80
-1.5, 49
-"Mark Baker", 77
-"mark baker", 109
-"£125.00", 163
-"Бензин", 1234
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CONCATENATE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CONCATENATE.data
deleted file mode 100644
index 7b8984624e5..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/CONCATENATE.data
+++ /dev/null
@@ -1,3 +0,0 @@
-"ABCDE", "FGHIJ", "ABCDEFGHIJ"
-1, 2, 3, "123"
-"Boolean", "-", TRUE, "Boolean-TRUE"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/DOLLAR.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/DOLLAR.data
deleted file mode 100644
index aee1b006088..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/DOLLAR.data
+++ /dev/null
@@ -1,6 +0,0 @@
-123.456, 2, '"$123.46"'
-123.321, 2, '"$123.32"'
-1234567, -3, '"$1,235,000"'
-1234567, -5, '"$1,200,000"'
-"ABC", 2, "#NUM!"
-123.456, "ABC", "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIND.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIND.data
deleted file mode 100644
index 411150da480..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIND.data
+++ /dev/null
@@ -1,13 +0,0 @@
-"E", "QWERTYUIOP", 3
-"D", "ABCDEFGHI", 4
-"E", TRUE, 4
-"E", FALSE, 5
-"A", "Mark Baker", "#VALUE!"
-"A", "MARK BAKER", 2
-"a", "Mark Baker", 2, 2
-"k", "Mark Baker", 2, 4
-"k", "Mark Baker", 5, 8
-"a", "Mark Baker", 3, 7
-"BITE", "BIT", "#VALUE!"
-"", "Mark Baker", 1
-"", "Mark Baker", 8, 8
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIXED.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIXED.data
deleted file mode 100644
index cd7d57bb593..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/FIXED.data
+++ /dev/null
@@ -1,5 +0,0 @@
-123456.789, 2, FALSE, '"123,456.79"'
-123456.789, 1, TRUE, '"123456.8"'
-123456.789, 2, TRUE, '"123456.79"'
-"ABC", 2, NULL, "#NUM!"
-123.456, "ABC", NULL, "#NUM!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEFT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEFT.data
deleted file mode 100644
index e76e009cc9e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEFT.data
+++ /dev/null
@@ -1,6 +0,0 @@
-, 1, ""
-"", 1, ""
-"QWERTYUIOP", -1, "#VALUE!"
-"ABCDEFGHI", 3, "ABC"
-TRUE, 2, "TR"
-FALSE, 2, "FA"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEN.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEN.data
deleted file mode 100644
index 09676eae737..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LEN.data
+++ /dev/null
@@ -1,6 +0,0 @@
-, 0
-"", 0
-"AbCdEfGhI", 9
-"MARK BAKER", 10
-TRUE, 4
-FALSE, 5
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LOWER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LOWER.data
deleted file mode 100644
index 04148f0bd5e..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/LOWER.data
+++ /dev/null
@@ -1,4 +0,0 @@
-"AbCdEfGhI", "abcdefghi"
-"MARK BAKER", "mark baker"
-TRUE, "true"
-FALSE, "false"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/MID.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/MID.data
deleted file mode 100644
index 5d9b503c896..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/MID.data
+++ /dev/null
@@ -1,9 +0,0 @@
-, 1, 1, ""
-"", 1, 1, ""
-"QWERTYUIOP", -1, 1, "#VALUE!"
-"QWERTYUIOP", 5, -1, "#VALUE!"
-"QWERTYUIOP", 5, ""
-"QWERTYUIOP", 8, 20, "IOP"
-"ABCDEFGHI", 4, 3, "DEF"
-TRUE, 2, 1, "R"
-FALSE, 2, 2, "AL"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/PROPER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/PROPER.data
deleted file mode 100644
index ca142494589..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/PROPER.data
+++ /dev/null
@@ -1,3 +0,0 @@
-"MARK BAKER", "Mark Baker"
-TRUE, "True"
-FALSE, "False"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/REPLACE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/REPLACE.data
deleted file mode 100644
index 7c8f414bac1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/REPLACE.data
+++ /dev/null
@@ -1,4 +0,0 @@
-"QWERTYUIOP", 3, 3, "DFG", "QWDFGYUIOP"
-"QWERTYUIOP", 5, 3, "DFG", "QWERDFGIOP"
-"QWERTYUIOP", 3, 0, "DFG", "QWDFGERTYUIOP"
-"QWERTYUIOP", 5, 0, "DFG", "QWERDFGTYUIOP"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/RIGHT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/RIGHT.data
deleted file mode 100644
index 02bf333219c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/RIGHT.data
+++ /dev/null
@@ -1,6 +0,0 @@
-, 1, ""
-"", 1, ""
-"QWERTYUIOP", -1, "#VALUE!"
-"ABCDEFGHI", 3, "GHI"
-TRUE, 2, "UE"
-FALSE, 2, "SE"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SEARCH.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SEARCH.data
deleted file mode 100644
index 9925e699167..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SEARCH.data
+++ /dev/null
@@ -1,11 +0,0 @@
-"E", "QWERTYUIOP", 3
-"D", "ABCDEFGHI", 4
-"E", TRUE, 4
-"E", FALSE, 5
-"A", "Mark Baker", 2
-"C", "Mark Baker", "#VALUE!"
-"A", "Mark Baker", 3, 7
-"K", "Mark Baker", 4
-"K", "Mark Baker", 5, 8
-"A", "Mark Baker", 2, 2
-"BITE", "BIT", "#VALUE!"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SUBSTITUTE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SUBSTITUTE.data
deleted file mode 100644
index be15c94103c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/SUBSTITUTE.data
+++ /dev/null
@@ -1,4 +0,0 @@
-"QWERTYUIOP", "ERT", "DFG", "QWDFGYUIOP"
-"Mark Baker", "a", "x", "Mxrk Bxker"
-"Mark Baker", "a", "x", 1, "Mxrk Baker"
-"Mark Baker", "x", "a", 1, "Mark Baker"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/T.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/T.data
deleted file mode 100644
index 87f67e99d5f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/T.data
+++ /dev/null
@@ -1,5 +0,0 @@
-123456.789, NULL
-"123456.789", "123456.789"
-"Mark Baker", "Mark Baker"
-NULL, NULL
-TRUE, NULL
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TEXT.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TEXT.data
deleted file mode 100644
index da18defa35f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TEXT.data
+++ /dev/null
@@ -1,13 +0,0 @@
-123.456, '"$#,##0.00"', "$123.46"
--123.456, '"$#,##0.00"', "$-123.46"
-123.456, '"#,##0.00"', "123.46"
-123.456, '"#,##0"', "123"
-123.456, "00000", "00123"
-123456.789, '"$#,##0.00"', '"$123,456.79"'
-123456.789, '"#,##0.00"', '"123,456.79"'
-123456.789, "0.00E+00", "1.23E05"
--123456.789, "0.00E+00", "-1.23E05"
-0.000012345, "0.00E+00", "1.23E-05"
-"19-Dec-1960", "yyyy-mm-dd", "1960-12-19"
-"1-Jan-2012", "yyyy-mm-dd", "2012-01-01"
-1.75, "# ?/?", "1 3/4"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TRIM.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TRIM.data
deleted file mode 100644
index ea800963ce9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/TRIM.data
+++ /dev/null
@@ -1,7 +0,0 @@
-"HELLO ", "HELLO"
-" HELLO", "HELLO"
-" HELLO ", "HELLO"
-" HELLO", " HELLO"
-"HELLO WORLD", "HELLO WORLD"
-TRUE, "TRUE"
-NULL, NULL
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/UPPER.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/UPPER.data
deleted file mode 100644
index 8ebf1d12983..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/UPPER.data
+++ /dev/null
@@ -1,4 +0,0 @@
-"AbCdEfGhI", "ABCDEFGHI"
-"mark baker", "MARK BAKER"
-TRUE, "TRUE"
-FALSE, "FALSE"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/VALUE.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/VALUE.data
deleted file mode 100644
index 505c2915b97..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Calculation/TextData/VALUE.data
+++ /dev/null
@@ -1,10 +0,0 @@
-"1000", "1000"
-"1 000", "1000"
-"$1 000", "1000"
-"£1 000", "#VALUE!"
-"1.1", "1.1"
-"1 000.1", "1000.1"
-"13 Monkeys", "#VALUE!"
-"1-Jan-2014", "41640"
-"12:34:56", "0.524259259259259"
-"2:46 AM", "0.11527777777778"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CalculationBinaryComparisonOperation.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CalculationBinaryComparisonOperation.data
deleted file mode 100644
index de04cbf792f..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CalculationBinaryComparisonOperation.data
+++ /dev/null
@@ -1,53 +0,0 @@
-# formula, expectedResultExcel, expectedResultOpenOffice
-'=TRUE', TRUE, TRUE
-'=1 + 2.5', 3.5, 3.5
-'=2.5 + 1', 3.5, 3.5
-'=1 - 2.5', -1.5, -1.5
-'=2.5 - 1', 1.5, 1.5
-'=3 > 1', TRUE, TRUE
-'=3 > 3', FALSE, FALSE
-'=1 > 3', FALSE, FALSE
-'=3 < 1', FALSE, FALSE
-'=3 < 3', FALSE, FALSE
-'=1 < 3', TRUE, TRUE
-'=3 = 1', FALSE, FALSE
-'=3 = 3', TRUE, TRUE
-'=1 = 1.0', TRUE, TRUE
-'=3 >= 1', TRUE, TRUE
-'=3 >= 3', TRUE, TRUE
-'=1 >= 3', FALSE, FALSE
-'=3 <= 1', FALSE, FALSE
-'=3 <= 3', TRUE, TRUE
-'=1 <= 3', TRUE, TRUE
-'=3 <> 1', TRUE, TRUE
-'=3 <> 3', FALSE, FALSE
-'=1 <> 1.0', FALSE, FALSE
-'="a" > "a"', FALSE, FALSE
-'="A" > "A"', FALSE, FALSE
-'="A" > "a"', FALSE, TRUE
-'="a" > "A"', FALSE, FALSE
-'="a" < "a"', FALSE, FALSE
-'="A" < "A"', FALSE, FALSE
-'="A" < "a"', FALSE, FALSE
-'="a" < "A"', FALSE, TRUE
-'="a" = "a"', TRUE, TRUE
-'="A" = "A"', TRUE, TRUE
-'="A" = "a"', TRUE, FALSE
-'="a" = "A"', TRUE, FALSE
-'="a" <= "a"', TRUE, TRUE
-'="A" <= "A"', TRUE, TRUE
-'="A" <= "a"', TRUE, FALSE
-'="a" <= "A"', TRUE, TRUE
-'="a" >= "a"', TRUE, TRUE
-'="A" >= "A"', TRUE, TRUE
-'="A" >= "a"', TRUE, TRUE
-'="a" >= "A"', TRUE, FALSE
-'="a" <> "a"', FALSE, FALSE
-'="A" <> "A"', FALSE, FALSE
-'="A" <> "a"', FALSE, TRUE
-'="a" <> "A"', FALSE, TRUE
-'="A" > "b"', FALSE, TRUE
-'="a" > "b"', FALSE, FALSE
-'="b" > "a"', TRUE, TRUE
-'="b" > "A"', TRUE, FALSE
-'="a2" > "a10"', TRUE, TRUE // Test natural sorting is not used
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Cell/DefaultValueBinder.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Cell/DefaultValueBinder.data
deleted file mode 100644
index 446ded6cdb4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Cell/DefaultValueBinder.data
+++ /dev/null
@@ -1,19 +0,0 @@
-NULL, "null"
-, "null"
-"#NULL!", "e"
-FALSE, "b"
-TRUE, "b"
-"FALSE", "s"
-"TRUE", "s"
-"", "s"
-"ABC", "s"
-"123", "n"
-123, "n"
-0.123, "n"
-"-123", "n"
-"1.23E4", "n"
-"-1.23E4", "n"
-"1.23E-4", "n"
-"000123", "s"
-"=123", "f"
-"#DIV/0!", "e"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteCoordinate.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteCoordinate.data
deleted file mode 100644
index ad642947d07..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteCoordinate.data
+++ /dev/null
@@ -1,12 +0,0 @@
-"A1", "$A$1"
-"A12", "$A$12"
-"J1", "$J$1"
-"J20", "$J$20"
-"AI1", "$AI$1"
-"AI2012", "$AI$2012"
-"'Worksheet1'!AI256", "'Worksheet1'!$AI$256"
-"Worksheet1!AI256", "Worksheet1!$AI$256"
-"'Data Worksheet'!AI256", "'Data Worksheet'!$AI$256"
-"'Worksheet1'!$AI256", "'Worksheet1'!$AI$256"
-"'Worksheet1'!AI$256", "'Worksheet1'!$AI$256"
-"'Worksheet1'!$AI$256", "'Worksheet1'!$AI$256"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteReference.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteReference.data
deleted file mode 100644
index 8aa314a2b50..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellAbsoluteReference.data
+++ /dev/null
@@ -1,16 +0,0 @@
-"A1", "$A$1"
-"A12", "$A$12"
-"J1", "$J$1"
-"J20", "$J$20"
-"AI1", "$AI$1"
-"AI2012", "$AI$2012"
-"'Worksheet1'!AI256", "'Worksheet1'!$AI$256"
-"Worksheet1!AI256", "Worksheet1!$AI$256"
-"'Data Worksheet'!AI256", "'Data Worksheet'!$AI$256"
-"AI", "$AI"
-2012, "$2012"
-"Worksheet1!AI", "Worksheet1!$AI"
-"Worksheet1!256", "Worksheet1!$256"
-"'Worksheet1'!$AI256", "'Worksheet1'!$AI$256"
-"'Worksheet1'!AI$256", "'Worksheet1'!$AI$256"
-"'Worksheet1'!$AI$256", "'Worksheet1'!$AI$256"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellBuildRange.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellBuildRange.data
deleted file mode 100644
index 8d6efbffc87..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellBuildRange.data
+++ /dev/null
@@ -1,2 +0,0 @@
-{"B4"|"E9"}, "B4:E9"
-{"B4"|"E9";"H2"|"O11"}, '"B4:E9,H2:O11"'
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellCoordinates.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellCoordinates.data
deleted file mode 100644
index e64ce5598af..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellCoordinates.data
+++ /dev/null
@@ -1,6 +0,0 @@
-"A1", {"A";1}
-"A12", {"A";12}
-"J1", {"J";1}
-"J20", {"J";20}
-"AI1", {"AI";1}
-"AI2012", {"AI";2012}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellExtractAllCellReferencesInRange.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellExtractAllCellReferencesInRange.data
deleted file mode 100644
index 4b44a83a3ad..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellExtractAllCellReferencesInRange.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"B4:B6", {"B4";"B5";"B6"}
-'"B4:B6,D4:D6"', {"B4";"B5";"B6";"D4";"D5";"D6"}
-'"B4:B6 D4:D6"', {"B4";"B5";"B6";"D4";"D5";"D6"}
-"B4:D6", {"B4";"B5";"B6";"C4";"C5";"C6";"D4";"D5";"D6"}
-'"B4:D6,C5:E7"', {"B4";"B5";"B6";"C4";"C5";"C6";"C7";"D4";"D5";"D6";"D7";"E5";"E6";"E7"}
-'"B4:D6 C5:E7"', {"B4";"B5";"B6";"C4";"C5";"C6";"C7";"D4";"D5";"D6";"D7";"E5";"E6";"E7"}
-"B2:D4 C5:D5 E3:E5 D6:E6 F4:F6", {"B2";"B3";"B4";"C2";"C3";"C4";"C5";"D2";"D3";"D4";"D5";"D6";"E3";"E4";"E5";"E6";"F4";"F5";"F6"}
-"B2:D4 C3:E5 D4:F6", {"B2";"B3";"B4";"C2";"C3";"C4";"C5";"D2";"D3";"D4";"D5";"D6";"E3";"E4";"E5";"E6";"F4";"F5";"F6"}
-"B4:B6 B8", {"B4";"B5";"B6";"B8"}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellGetRangeBoundaries.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellGetRangeBoundaries.data
deleted file mode 100644
index f01a5fd9940..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellGetRangeBoundaries.data
+++ /dev/null
@@ -1,2 +0,0 @@
-"B4:E9", {"B"|4;"E"|9}
-"B4", {"B"|4;"B"|4}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeBoundaries.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeBoundaries.data
deleted file mode 100644
index 2fca6dc23d1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeBoundaries.data
+++ /dev/null
@@ -1,2 +0,0 @@
-"B4:E9", {2|4;5|9}
-"B4", {2|4;2|4}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeDimension.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeDimension.data
deleted file mode 100644
index 1718f1219c0..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellRangeDimension.data
+++ /dev/null
@@ -1,2 +0,0 @@
-"B4:E9", {4;6}
-"B4", {1;1}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellSplitRange.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellSplitRange.data
deleted file mode 100644
index 215fce253f9..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/CellSplitRange.data
+++ /dev/null
@@ -1,3 +0,0 @@
-"B4:E9", {"B4"|"E9"}
-"B4", {"B4"}
-'"B4:E9,H2:O11"', {"B4"|"E9";"H2"|"O11"}
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnIndex.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnIndex.data
deleted file mode 100644
index 9a1679b6b91..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnIndex.data
+++ /dev/null
@@ -1,9 +0,0 @@
-0, "A"
-25, "Z"
-26, "AA"
-27, "AB"
-51, "AZ"
-52, "BA"
-701, "ZZ"
-702, "AAA"
-1378, "BAA"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnString.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnString.data
deleted file mode 100644
index 5573759eb93..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/ColumnString.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"A", 1
-"Z", 26
-"AA", 27
-"AB", 28
-"AZ", 52
-"BA", 53
-"ZZ", 702
-"AAA", 703
-"BAA", 1379
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16.xml
deleted file mode 100644
index 94eaedfc2ae..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16BE.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16BE.xml
deleted file mode 100644
index 1d186ff4434..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16BE.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16LE.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16LE.xml
deleted file mode 100644
index c3913f71bb8..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-16LE.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-8.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-8.xml
deleted file mode 100644
index 212003fd4fb..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestInvalidUTF-8.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-]>
-
-
- test: (&x0;)
-
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16.xml
deleted file mode 100644
index 6473fe6b638..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16BE.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16BE.xml
deleted file mode 100644
index 677e712f99d..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16BE.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16LE.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16LE.xml
deleted file mode 100644
index 64353bfbab1..00000000000
Binary files a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-16LE.xml and /dev/null differ
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-8.xml b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-8.xml
deleted file mode 100644
index c400ae88b5c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Reader/XEETestValidUTF-8.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- test: Valid
-
\ No newline at end of file
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CentimeterSizeToPixels.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CentimeterSizeToPixels.data
deleted file mode 100644
index fc48f21ab11..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CentimeterSizeToPixels.data
+++ /dev/null
@@ -1,5 +0,0 @@
-0.1, 3.7795275591
-0.2, 7.5590551182
-0.5, 18.8976377955
-1.0, 37.795275591
-2.0, 75.590551182
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CodePage.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CodePage.data
deleted file mode 100644
index 68ceda1feda..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/CodePage.data
+++ /dev/null
@@ -1,43 +0,0 @@
-367, "ASCII" // ASCII
-437, "CP437" // OEM US
-737, "CP737" // OEM Greek
-775, "CP775" // OEM Baltic
-850, "CP850" // OEM Latin I
-852, "CP852" // OEM Latin II (Central European)
-855, "CP855" // OEM Cyrillic
-857, "CP857" // OEM Turkish
-858, "CP858" // OEM Multilingual Latin I with Euro
-860, "CP860" // OEM Portugese
-861, "CP861" // OEM Icelandic
-862, "CP862" // OEM Hebrew
-863, "CP863" // OEM Canadian (French)
-864, "CP864" // OEM Arabic
-865, "CP865" // OEM Nordic
-866, "CP866" // OEM Cyrillic (Russian)
-869, "CP869" // OEM Greek (Modern)
-874, "CP874" // ANSI Thai
-932, "CP932" // ANSI Japanese Shift-JIS
-936, "CP936" // ANSI Chinese Simplified GBK
-949, "CP949" // ANSI Korean (Wansung)
-950, "CP950" // ANSI Chinese Traditional BIG5
-1200, "UTF-16LE" // UTF-16 (BIFF8)
-1250, "CP1250" // ANSI Latin II (Central European)
-1251, "CP1251" // ANSI Cyrillic
-0, "CP1252" // ANSI Latin I (BIFF4-BIFF7)
-1252, "CP1252" // ANSI Latin I (BIFF4-BIFF7)
-1253, "CP1253" // ANSI Greek
-1254, "CP1254" // ANSI Turkish
-1255, "CP1255" // ANSI Hebrew
-1256, "CP1256" // ANSI Arabic
-1257, "CP1257" // ANSI Baltic
-1258, "CP1258" // ANSI Vietnamese
-1361, "CP1361" // ANSI Korean (Johab)
-10000, "MAC" // Apple Roman
-10006, "MACGREEK" // Macintosh Greek
-10007, "MACCYRILLIC" // Macintosh Cyrillic
-10029, "MACCENTRALEUROPE" // Macintosh Central Europe
-10079, "MACICELAND" // Macintosh Icelandic
-10081, "MACTURKISH" // Macintosh Turkish
-32768, "MAC" // Apple Roman
-65000, "UTF-7" // Unicode (UTF-7)
-65001, "UTF-8" // Unicode (UTF-8)
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900.data
deleted file mode 100644
index d348b0aa41d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900.data
+++ /dev/null
@@ -1,15 +0,0 @@
-#Excel DateTimeStamp Result Comments
-714, -2147472000 // PHP 32-bit Earliest Date 14-Dec-1901
-1461, -2082931200 // 31-Dec-1903
-1462, -2082844800 // Excel 1904 Calendar Base Date 01-Jan-1904
-1463, -2082758400 // 02-Jan-1904
-22269, -285120000 // 19-Dec-1960
-25569, 0 // PHP Base Date 01-Jan-1970
-30292, 408067200 // 07-Dec-1982
-39611, 1213228800 // 12-Jun-2008
-50424, 2147472000 // PHP 32-bit Latest Date 19-Jan-2038
-1234.56789, -2102494934 // 18-May-1903 13:37:46
-12345.6789, -1142494943 // 18-Oct-1933 16:17:37
-0.5, 43200 // 12:00:00
-0.75, 64800 // 18:00.00
-0.12345, 10666 // 02:57:46
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900Timezone.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900Timezone.data
deleted file mode 100644
index e106b5fe13c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1900Timezone.data
+++ /dev/null
@@ -1,23 +0,0 @@
-#Excel DateTimeStamp Adjust Timezone Result Comments
-22269, TRUE, 'America/New_York', -285138000 // 19-Dec-1960 00:00:00 UST
-25569, TRUE, 'America/New_York', -18000 // PHP Base Date 01-Jan-1970 00:00:00 UST
-30292, TRUE, 'America/New_York', 408049200 // 07-Dec-1982 00:00:00 UST
-39611, TRUE, 'America/New_York', 1213214400 // 12-Jun-2008 00:00:00 UST
-50424, TRUE, 'America/New_York', 2147454000 // PHP 32-bit Latest Date 19-Jan-2038 00:00:00 UST
-22345.56789, TRUE, 'America/New_York', -278522534 // 18-May-1903 13:37:46 UST
-22345.6789, TRUE, 'America/New_York', -278512943 // 18-Oct-1933 16:17:37 UST
-0.5, TRUE, 'America/New_York', 25200 // 12:00:00 UST
-0.75, TRUE, 'America/New_York', 46800 // 18:00.00 UST
-0.12345, TRUE, 'America/New_York', -7334 // 02:57:46 UST
-41215, TRUE, 'America/New_York', 1351800000 // 02-Nov-2012 00:00:00 UST
-22269, TRUE, 'Pacific/Auckland', -285076800 // 19-Dec-1960 00:00:00 UST
-25569, TRUE, 'Pacific/Auckland', 43200 // PHP Base Date 01-Jan-1970 00:00:00 UST
-30292, TRUE, 'Pacific/Auckland', 408114000 // 07-Dec-1982 00:00:00 UST
-39611, TRUE, 'Pacific/Auckland', 1213272000 // 12-Jun-2008 00:00:00 UST
-50423.5, TRUE, 'Pacific/Auckland', 2147475600 // PHP 32-bit Latest Date 19-Jan-2038 00:00:00 UST
-22345.56789, TRUE, 'Pacific/Auckland', -278461334 // 18-May-1903 13:37:46 UST
-22345.6789, TRUE, 'Pacific/Auckland', -278451743 // 18-Oct-1933 16:17:37 UST
-0.5, TRUE, 'Pacific/Auckland', 90000 // 12:00:00 UST
-0.75, TRUE, 'Pacific/Auckland', 111600 // 18:00.00 UST
-0.12345, TRUE, 'Pacific/Auckland', 57466 // 02:57:46 UST
-41215, TRUE, 'Pacific/Auckland', 1351861200 // 02-Nov-2012 00:00:00 UST
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1904.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1904.data
deleted file mode 100644
index 5501ad17cea..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeExcelToPHP1904.data
+++ /dev/null
@@ -1,10 +0,0 @@
-#Excel DateTimeStamp Result
-1462, -1956528000
-1463, -1956441600
-22269, -158803200
-25569, 126316800
-30292, 534384000
-39611, 1339545600
-0.25, 21600 // 06:00:00
-0.3333333333333333333, 28800 // 08:00.00
-0.54321, 46933 // 02:57:46
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormatCodes.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormatCodes.data
deleted file mode 100644
index 73420470490..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormatCodes.data
+++ /dev/null
@@ -1,37 +0,0 @@
-#Excel Format Code Result
-"General", FALSE
-"@", FALSE
-"0", FALSE
-"0.00", FALSE
-"#,##0.00", FALSE
-"#,##0.00_-", FALSE
-"0%", FALSE
-"0.00%", FALSE
-"yyyy-mm-dd", TRUE
-"yy-mm-dd", TRUE
-"dd/mm/yy", TRUE
-"d/m/y", TRUE
-"d-m-y", TRUE
-"d-m", TRUE
-"m-y", TRUE
-"mm-dd-yy", TRUE
-"d-mmm-yy", TRUE
-"d-mmm", TRUE
-"mmm-yy", TRUE
-"m/d/yy h:mm", TRUE
-"d/m/y h:mm", TRUE
-"h:mm AM/PM", TRUE
-"h:mm:ss AM/PM", TRUE
-"h:mm", TRUE
-"h:mm:ss", TRUE
-"mm:ss", TRUE
-"h:mm:ss", TRUE
-"i:s.S", TRUE
-"h:mm:ss;@", TRUE
-"yy/mm/dd;@", TRUE
-"\"$\"#,##0.00_-", FALSE
-"$#,##0_-", FALSE
-"[$EUR ]#,##0.00_-", FALSE
-"_[$EUR ]#,##0.00_-", FALSE
-"[Green]#,##0.00;[Red]#,##0.00_-", FALSE
-"#,##0.00 \"dollars\"", FALSE
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormattedPHPToExcel1900.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormattedPHPToExcel1900.data
deleted file mode 100644
index bb6ed3f4292..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimeFormattedPHPToExcel1900.data
+++ /dev/null
@@ -1,12 +0,0 @@
-#Year Month Day Hours Minutes Seconds Result Comments
-1901, 12, 14, 714 // PHP 32-bit Earliest Date 14-Dec-1901
-1903, 12, 31, 1461 // 31-Dec-1903
-1904, 1, 1, 1462 // Excel 1904 Calendar Base Date 01-Jan-1904
-1904, 1, 2, 1463 // 02-Jan-1904
-1960, 12, 19, 22269 // 19-Dec-1960
-1970, 1, 1, 25569 // PHP Base Date 01-Jan-1970
-1982, 12, 7, 30292 // 07-Dec-1982
-2008, 6, 12, 39611 // 12-Jun-2008
-2038, 1, 19, 50424 // PHP 32-bit Latest Date 19-Jan-2038
-1903, 5, 18, 13, 37, 46, 1234.56789 // 18-May-1903 13:37:46
-1933, 10, 18, 16, 17, 37, 12345.6789 // 18-Oct-1933 16:17:37
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1900.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1900.data
deleted file mode 100644
index dc6a9d909a4..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1900.data
+++ /dev/null
@@ -1,12 +0,0 @@
-#Excel DateTimeStamp Result Comments
--2147472000, 714 // PHP 32-bit Earliest Date 14-Dec-1901
--2082931200, 1461 // 31-Dec-1903
--2082844800, 1462 // Excel 1904 Calendar Base Date 01-Jan-1904
--2082758400, 1463 // 02-Jan-1904
--285120000, 22269 // 19-Dec-1960
-0, 25569 // PHP Base Date 01-Jan-1970
-408067200, 30292 // 07-Dec-1982
-1213228800, 39611 // 12-Jun-2008
-2147472000, 50424 // PHP 32-bit Latest Date 19-Jan-2038
--2102494934, 1234.56789 // 18-May-1903 13:37:46
--1142494943, 12345.6789 // 18-Oct-1933 16:17:37
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1904.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1904.data
deleted file mode 100644
index 98fa49514ba..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/DateTimePHPToExcel1904.data
+++ /dev/null
@@ -1,7 +0,0 @@
-#Excel DateTimeStamp Result
--1956528000, 1462
--1956441600, 1463
--158803200, 22269
-126316800, 25569
-534384000, 30292
-1339545600, 39611
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/FontSizeToPixels.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/FontSizeToPixels.data
deleted file mode 100644
index af89196d3ff..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/FontSizeToPixels.data
+++ /dev/null
@@ -1,16 +0,0 @@
-6, 8
-7, 9
-8, 10
-9, 12
-10, 13
-11, 14
-12, 16
-14, 18
-16, 21
-18, 24
-20, 26
-22, 29
-24, 32
-36, 48
-48, 64
-60, 80
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/InchSizeToPixels.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/InchSizeToPixels.data
deleted file mode 100644
index 147eaa989ea..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/InchSizeToPixels.data
+++ /dev/null
@@ -1,5 +0,0 @@
-0.1, 9.6
-0.2, 19.2
-0.5, 48.0
-1.0, 96.0
-2.0, 192.0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/PasswordHashes.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/PasswordHashes.data
deleted file mode 100644
index c6846812616..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Shared/PasswordHashes.data
+++ /dev/null
@@ -1,9 +0,0 @@
-"PHPExcel", "8053"
-"Mark Baker", "877D"
-"!+&=()~§±æþ", "C0EA"
-"μυστικό κωδικό πρόσβασης", "FFFF26DD"
-"গোপন পাসওয়ার্ড", "E858"
-"Секретный пароль", "EA5F"
-"秘密口令", "C07E"
-"leyndarmál lykilorð", "99E8"
-"", "CE4B"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorChangeBrightness.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorChangeBrightness.data
deleted file mode 100644
index de5eeaf5f7c..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorChangeBrightness.data
+++ /dev/null
@@ -1,14 +0,0 @@
-"FFAABBCC", 0.1, "FFB2C1D1" // RGBA
-"FFAABBCC", -0.1, "FF99A8B7" // RGBA
-"AABBCC", 0.1, "B2C1D1" // RGB
-"AABBCC", -0.1, "99A8B7" // RGB
-"FF0000", 0.1, "FF1919"
-"FF0000", -0.1, "E50000"
-"FF8080", 0.1, "FF8C8C"
-"FF8080", -0.1, "E57373"
-"FF0000", 0.15, "FF2626"
-"FF0000", -0.15, "D80000"
-"FF8080", 0.15, "FF9393"
-"FF8080", -0.15, "D86C6C"
-"FFF008", 0.5, "FFF783"
-"FFF008", -0.5, "7F7804"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetBlue.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetBlue.data
deleted file mode 100644
index 4e01d1c7ca1..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetBlue.data
+++ /dev/null
@@ -1,6 +0,0 @@
-"FFAABBCC", "CC" // RGBA (hex)
-"FFAABBCC", FALSE, 204 // RGBA (decimal)
-"AABBCC", "CC" // RGB (hex)
-"AABBCC", FALSE, 204 // RGB (decimal)
-"FFFF00", "00"
-"FFFF00", FALSE, 0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetGreen.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetGreen.data
deleted file mode 100644
index 0ace610340b..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetGreen.data
+++ /dev/null
@@ -1,6 +0,0 @@
-"FFAABBCC", "BB" // RGBA (hex)
-"FFAABBCC", FALSE, 187 // RGBA (decimal)
-"AABBCC", "BB" // RGB (hex)
-"AABBCC", FALSE, 187 // RGB (decimal)
-"FF00FF", "00"
-"FF00FF", FALSE, 0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetRed.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetRed.data
deleted file mode 100644
index 1692a6ad716..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/ColorGetRed.data
+++ /dev/null
@@ -1,6 +0,0 @@
-"FFAABBCC", "AA" // RGBA (hex)
-"FFAABBCC", FALSE, 170 // RGBA (decimal)
-"AABBCC", "AA" // RGB (hex)
-"AABBCC", FALSE, 170 // RGB (decimal)
-"00FFFF", "00"
-"00FFFF", FALSE, 0
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/NumberFormat.data b/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/NumberFormat.data
deleted file mode 100644
index 49acaccfc7d..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/rawTestData/Style/NumberFormat.data
+++ /dev/null
@@ -1,37 +0,0 @@
-# value format result
-0.0, "0.0", "0.0"
-0.0, "0", "0"
-0, "0.0", "0.0"
-0, "0", "0"
-0, "##0", "000"
-12, "#.0#", "12.0"
-0.1, "0.0", "0.1"
-0.1, "0", "0"
-5.5555, "0.###", "5.556"
-5.5555, "0.0##", "5.556"
-5.5555, "0.00#", "5.556"
-5.5555, "0.000", "5.556"
-5.5555, "0.0000", "5.5555"
-12345.6789, '"#,##0.00"', '"12,345.68"'
-12345.6789, '"#,##0.000"', '"12,345.679"'
-12345.6789, '"£ #,##0.00"', '"£ 12,345.68"'
-12345.6789, '"$ #,##0.000"', '"$ 12,345.679"'
-5.6789, '"#,##0.00"', '"5.68"'
-12000, '"#,###"', '"12,000"'
-12000, '"#,"', '12'
-12200000, '"0.0,,"', '12.2' // Scaling test
-0.08, "0%", "8%"
-0.8, "0%", "80%"
-2.8, "0%", "280%"
-125.74, '$0.00" Surplus";$-0.00" Shortage"', "$125.74 Surplus"
--125.74, '$0.00" Surplus";$-0.00" Shortage"', "$-125.74 Shortage"
--125.74, '$0.00" Surplus";$0.00" Shortage"', "$125.74 Shortage"
-5.25, '# ???/???', "5 1/4" // Fraction
-5.3, '# ???/???', "5 3/10" // Vulgar Fraction
-5.25, '???/???', "21/4"
-123456789, '(000) 0-0000-000', "(001) 2-3456-789"
-123456789, '0 (+00) 0000 00 00 00', "0 (+00) 0123 45 67 89"
-123456789, '0000:00:00', "12345:67:89"
--123456789, '0000:00:00', "-12345:67:89"
-1234567.89, '0000:00.00', "12345:67.89"
--1234567.89,'0000:00.00', "-12345:67.89"
diff --git a/htdocs/includes/phpoffice/phpexcel/unitTests/testDataFileIterator.php b/htdocs/includes/phpoffice/phpexcel/unitTests/testDataFileIterator.php
deleted file mode 100644
index a092cd59339..00000000000
--- a/htdocs/includes/phpoffice/phpexcel/unitTests/testDataFileIterator.php
+++ /dev/null
@@ -1,131 +0,0 @@
-file = fopen($file, 'r');
- }
-
- public function __destruct()
- {
- fclose($this->file);
- }
-
- public function rewind()
- {
- rewind($this->file);
- $this->current = $this->_parseNextDataset();
- $this->key = 0;
- }
-
- public function valid()
- {
- return !feof($this->file);
- }
-
- public function key()
- {
- return $this->key;
- }
-
- public function current()
- {
- return $this->current;
- }
-
- public function next()
- {
- $this->current = $this->_parseNextDataset();
- $this->key++;
- }
-
- private function _parseNextDataset()
- {
- // Read a line of test data from the file
- do {
- // Only take lines that contain test data and that aren't commented out
- $testDataRow = trim(fgets($this->file));
- } while (($testDataRow > '') && ($testDataRow{0} === '#'));
-
- // Discard any comments at the end of the line
- list($testData) = explode('//',$testDataRow);
-
- // Split data into an array of individual values and a result
- $dataSet = $this->_getcsv($testData, ',', "'");
- foreach($dataSet as &$dataValue) {
- $dataValue = $this->_parseDataValue($dataValue);
- }
- unset($dataValue);
-
- return $dataSet;
- }
-
- private function _getcsv($input, $delimiter, $enclosure)
- {
- if (function_exists('str_getcsv')) {
- return str_getcsv($input, $delimiter, $enclosure);
- }
-
- $temp = fopen('php://memory', 'rw');
- fwrite($temp, $input);
- rewind($temp);
- $data = fgetcsv($temp, strlen($input), $delimiter, $enclosure);
- fclose($temp);
-
- if ($data === false) {
- $data = array(null);
- }
-
- return $data;
- }
-
- private function _parseDataValue($dataValue) {
- // discard any white space
- $dataValue = trim($dataValue);
- // test for the required datatype and convert accordingly
- if (!is_numeric($dataValue)) {
- if($dataValue == '') {
- $dataValue = NULL;
- } elseif($dataValue == '""') {
- $dataValue = '';
- } elseif(($dataValue[0] == '"') && ($dataValue[strlen($dataValue)-1] == '"')) {
- $dataValue = substr($dataValue,1,-1);
- } elseif(($dataValue[0] == '{') && ($dataValue[strlen($dataValue)-1] == '}')) {
- $dataValue = explode(';',substr($dataValue,1,-1));
- foreach($dataValue as &$dataRow) {
- if (strpos($dataRow,'|') !== FALSE) {
- $dataRow = explode('|',$dataRow);
- foreach($dataRow as &$dataCell) {
- $dataCell = $this->_parseDataValue($dataCell);
- }
- unset($dataCell);
- } else {
- $dataRow = $this->_parseDataValue($dataRow);
- }
- }
- unset($dataRow);
- } else {
- switch (strtoupper($dataValue)) {
- case 'NULL' : $dataValue = NULL; break;
- case 'TRUE' : $dataValue = TRUE; break;
- case 'FALSE' : $dataValue = FALSE; break;
- }
- }
- } else {
- if (strpos($dataValue,'.') !== FALSE) {
- $dataValue = (float) $dataValue;
- } else {
- $dataValue = (int) $dataValue;
- }
- }
-
- return $dataValue;
- }
-
-}
diff --git a/htdocs/includes/raven-js/.bower.json b/htdocs/includes/raven-js/.bower.json
deleted file mode 100644
index f42bb67b949..00000000000
--- a/htdocs/includes/raven-js/.bower.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "name": "raven-js",
- "version": "1.1.19",
- "dependencies": {},
- "main": "dist/raven.js",
- "ignore": {},
- "homepage": "https://github.com/getsentry/raven-js",
- "_release": "1.1.19",
- "_resolution": {
- "type": "version",
- "tag": "1.1.19",
- "commit": "82b9c07b7545c6c10e297709a741eaa9b75f64e8"
- },
- "_source": "git://github.com/getsentry/raven-js.git",
- "_target": "~1.1.19",
- "_originalSource": "raven-js",
- "_direct": true
-}
\ No newline at end of file
diff --git a/htdocs/includes/raven-js/.gitignore b/htdocs/includes/raven-js/.gitignore
deleted file mode 100644
index 02111f91fe4..00000000000
--- a/htdocs/includes/raven-js/.gitignore
+++ /dev/null
@@ -1,22 +0,0 @@
-.DS_Store
-
-# Thumbnails
-._*
-
-# Files that might appear on external disk
-.Spotlight-V100
-.Trashes
-
-docs/html
-docs/doctrees
-
-build
-node_modules
-npm-debug.log
-
-scratch/
-
-*.pyc
-
-.idea
-aws.json
diff --git a/htdocs/includes/raven-js/.jshintrc b/htdocs/includes/raven-js/.jshintrc
deleted file mode 100644
index 6e4ec735331..00000000000
--- a/htdocs/includes/raven-js/.jshintrc
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "es3": true,
- "globalstrict": true,
- "browser": true,
- "predef": [
- "TraceKit",
- "console"
- ]
-}
diff --git a/htdocs/includes/raven-js/.travis.yml b/htdocs/includes/raven-js/.travis.yml
deleted file mode 100644
index 3b4f88c1e93..00000000000
--- a/htdocs/includes/raven-js/.travis.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-# language doesn't matter, we're only using phantom.js
-language: node_js
-node_js:
- - "0.10"
-script:
- - ./node_modules/.bin/grunt test build
-notifications:
- irc: "irc.freenode.org#sentry"
diff --git a/htdocs/includes/raven-js/AUTHORS b/htdocs/includes/raven-js/AUTHORS
deleted file mode 100644
index 7f1ae423217..00000000000
--- a/htdocs/includes/raven-js/AUTHORS
+++ /dev/null
@@ -1 +0,0 @@
-https://github.com/getsentry/raven-js/graphs/contributors
diff --git a/htdocs/includes/raven-js/Gruntfile.js b/htdocs/includes/raven-js/Gruntfile.js
deleted file mode 100644
index fce8eb17272..00000000000
--- a/htdocs/includes/raven-js/Gruntfile.js
+++ /dev/null
@@ -1,254 +0,0 @@
-module.exports = function(grunt) {
- "use strict";
-
- var _ = require('lodash');
- var path = require('path');
-
- var coreFiles = [
- 'template/_header.js',
- 'vendor/**/*.js',
- 'src/**/*.js',
- 'template/_footer.js'
- ];
-
- var plugins = grunt.option('plugins');
- // Create plugin paths and verify hey exist
- plugins = _.map(plugins ? plugins.split(',') : [], function (plugin) {
- var path = 'plugins/' + plugin + '.js';
-
- if(!grunt.file.exists(path))
- throw new Error("Plugin '" + plugin + "' not found in plugins directory.");
-
- return path;
- });
-
- // Taken from http://dzone.com/snippets/calculate-all-combinations
- var combine = function (a) {
- var fn = function (n, src, got, all) {
- if (n === 0) {
- all.push(got);
- return;
- }
-
- for (var j = 0; j < src.length; j++) {
- fn(n - 1, src.slice(j + 1), got.concat([src[j]]), all);
- }
- };
-
- var all = [a];
-
- for (var i = 0; i < a.length; i++) {
- fn(i, a, [], all);
- }
-
- return all;
- };
-
- var pluginCombinations = combine(grunt.file.expand('plugins/*.js'));
- var pluginConcatFiles = _.reduce(pluginCombinations, function (dict, comb) {
- var key = _.map(comb, function (plugin) {
- return path.basename(plugin, '.js');
- });
- key.sort();
-
- var dest = path.join('build/', key.join(','), '/raven.js');
- dict[dest] = coreFiles.concat(comb);
-
- return dict;
- }, {});
-
- var gruntConfig = {
- pkg: grunt.file.readJSON('package.json'),
- aws: grunt.file.exists('aws.json') ? grunt.file.readJSON('aws.json'): {},
-
- clean: ['build'],
- concat: {
- options: {
- separator: '\n',
- banner: grunt.file.read('template/_copyright.js'),
- process: true
- },
- core: {
- src: coreFiles.concat(plugins),
- dest: 'build/raven.js'
- },
- all: {
- files: pluginConcatFiles
- }
- },
-
- uglify: {
- options: {
- sourceMap: function (dest) {
- return path.join(path.dirname(dest),
- path.basename(dest, '.js')) +
- '.map';
- },
- sourceMappingURL: function (dest) {
- return path.basename(dest, '.js') + '.map';
- },
- preserveComments: 'some'
- },
- dist: {
- src: ['build/**/*.js'],
- ext: '.min.js',
- expand: true
- }
- },
-
- fixSourceMaps: {
- all: ['build/**/*.map']
- },
-
- jshint: {
- options: {
- jshintrc: '.jshintrc'
- },
- all: ['Gruntfile.js', 'src/**/*.js', 'plugins/**/*.js']
- },
-
- mocha: {
- all: {
- options: {
- mocha: {
- ignoreLeaks: true,
- grep: grunt.option('grep')
- },
- log: true,
- reporter: 'Dot',
- run: true
- },
- src: ['test/index.html'],
- nonull: true
- }
- },
-
- release: {
- options: {
- npm: false,
- commitMessage: 'Release <%= version %>'
- }
- },
-
- s3: {
- options: {
- key: '<%= aws.key %>',
- secret: '<%= aws.secret %>',
- bucket: '<%= aws.bucket %>',
- access: 'public-read',
- // Limit concurrency
- maxOperations: 20,
- headers: {
- // Surrogate-Key header for Fastly to purge by release
- 'x-amz-meta-surrogate-key': '<%= pkg.release %>'
- }
- },
- all: {
- upload: [{
- src: 'build/**/*',
- dest: '<%= pkg.release %>/',
- rel: 'build/'
- }]
- }
- },
-
- connect: {
- test: {
- options: {
- port: 8000,
- debug: true,
- keepalive: true
- }
- },
-
- docs: {
- options: {
- port: 8000,
- debug: true,
- base: 'docs/html',
- keepalive: true
- }
- }
- },
-
- copy: {
- dist: {
- expand: true,
- flatten: true,
- cwd: 'build/',
- src: '**',
- dest: 'dist/'
- }
- }
- };
-
- grunt.initConfig(gruntConfig);
-
- // Custom Grunt tasks
- grunt.registerTask('version', function() {
- var pkg = grunt.config.get('pkg');
- if (grunt.option('dev')) {
- pkg.release = 'dev';
- pkg.version = grunt.config.get('gitinfo').local.branch.current.shortSHA;
- } else {
- pkg.release = pkg.version;
- }
- grunt.config.set('pkg', pkg);
- });
-
- grunt.registerMultiTask('fixSourceMaps', function () {
- this.files.forEach(function (f) {
- var result;
- var sources = f.src.filter(function (filepath) {
- if (!grunt.file.exists(filepath)) {
- grunt.log.warn('Source file "' + filepath + '" not found.');
- return false;
- } else {
- return true;
- }
- }).forEach(function (filepath) {
- var base = path.dirname(filepath);
- var sMap = grunt.file.readJSON(filepath);
- sMap.file = path.relative(base, sMap.file);
- sMap.sources = _.map(sMap.sources, path.relative.bind(path, base));
-
- grunt.file.write(filepath, JSON.stringify(sMap));
- // Print a success message.
- grunt.log.writeln('File "' + filepath + '" fixed.');
- });
- });
- });
-
- // Grunt contrib tasks
- grunt.loadNpmTasks('grunt-contrib-uglify');
- grunt.loadNpmTasks('grunt-contrib-concat');
- grunt.loadNpmTasks('grunt-contrib-clean');
- grunt.loadNpmTasks('grunt-contrib-jshint');
- grunt.loadNpmTasks('grunt-contrib-connect');
- grunt.loadNpmTasks('grunt-contrib-copy');
-
- // 3rd party Grunt tasks
- grunt.loadNpmTasks('grunt-mocha');
- grunt.loadNpmTasks('grunt-release');
- grunt.loadNpmTasks('grunt-s3');
- grunt.loadNpmTasks('grunt-gitinfo');
-
- // Build tasks
- grunt.registerTask('_prep', ['clean', 'gitinfo', 'version']);
- grunt.registerTask('concat.core', ['_prep', 'concat:core']);
- grunt.registerTask('concat.all', ['_prep', 'concat:all']);
- grunt.registerTask('build.core', ['concat.core', 'uglify', 'fixSourceMaps']);
- grunt.registerTask('build.all', ['concat.all', 'uglify', 'fixSourceMaps']);
- grunt.registerTask('build', ['build.all']);
- grunt.registerTask('dist', ['build.core', 'copy:dist']);
-
- // Test task
- grunt.registerTask('test', ['jshint', 'mocha']);
-
- // Webserver tasks
- grunt.registerTask('run:test', ['connect:test']);
- grunt.registerTask('run:docs', ['connect:docs']);
-
- grunt.registerTask('publish', ['test', 'build.all', 's3']);
- grunt.registerTask('default', ['test']);
-};
diff --git a/htdocs/includes/raven-js/LICENSE b/htdocs/includes/raven-js/LICENSE
deleted file mode 100644
index 2752d4c7395..00000000000
--- a/htdocs/includes/raven-js/LICENSE
+++ /dev/null
@@ -1,9 +0,0 @@
-Copyright (c) 2014 Matt Robenolt and other contributors
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
-
-* Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
-* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/htdocs/includes/raven-js/Makefile b/htdocs/includes/raven-js/Makefile
deleted file mode 100644
index f378b15f09d..00000000000
--- a/htdocs/includes/raven-js/Makefile
+++ /dev/null
@@ -1,20 +0,0 @@
-develop: update-submodules
- npm install .
-
-update-submodules:
- git submodule init
- git submodule update
-
-docs:
- cd docs; $(MAKE) html
-
-docs-live:
- while true; do \
- sleep 2; \
- $(MAKE) docs; \
- done
-
-clean:
- rm -rf docs/html
-
-.PHONY: develop update-submodules docs docs-live clean
diff --git a/htdocs/includes/raven-js/README.md b/htdocs/includes/raven-js/README.md
deleted file mode 100644
index 058a44fe41f..00000000000
--- a/htdocs/includes/raven-js/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-# Raven.js [](https://travis-ci.org/getsentry/raven-js)
-
-Raven.js is a tiny standalone JavaScript client for [Sentry](https://www.getsentry.com/).
-
-**Raven.js v1.1 requires Sentry v6.0 or later.**
-
-## Resources
-
- * [Download](http://ravenjs.com)
- * [Documentation](https://raven-js.readthedocs.org)
- * [Bug Tracker](https://github.com/getsentry/raven-js/issues)
- * [IRC](irc://chat.freenode.net/sentry) (chat.freenode.net, #sentry)
- * Follow [@mattrobenolt](https://twitter.com/mattrobenolt) on Twitter for updates
diff --git a/htdocs/includes/raven-js/bower.json b/htdocs/includes/raven-js/bower.json
deleted file mode 100644
index ba54c40ac65..00000000000
--- a/htdocs/includes/raven-js/bower.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
- "name": "raven-js",
- "version": "1.1.19",
- "dependencies": {},
- "main": "dist/raven.js",
- "ignore": {}
-}
diff --git a/htdocs/includes/raven-js/dist/raven.js b/htdocs/includes/raven-js/dist/raven.js
deleted file mode 100644
index 195d002ab65..00000000000
--- a/htdocs/includes/raven-js/dist/raven.js
+++ /dev/null
@@ -1,1909 +0,0 @@
-/*! Raven.js 1.1.19 (b51bc89) | github.com/getsentry/raven-js */
-
-/*
- * Includes TraceKit
- * https://github.com/getsentry/TraceKit
- *
- * Copyright 2015 Matt Robenolt and other contributors
- * Released under the BSD license
- * https://github.com/getsentry/raven-js/blob/master/LICENSE
- *
- */
-;(function(window, undefined){
-'use strict';
-
-/*
- TraceKit - Cross brower stack traces - github.com/occ/TraceKit
- MIT license
-*/
-
-var TraceKit = {
- remoteFetching: false,
- collectWindowErrors: true,
- // 3 lines before, the offending line, 3 lines after
- linesOfContext: 7
-};
-
-// global reference to slice
-var _slice = [].slice;
-var UNKNOWN_FUNCTION = '?';
-
-
-/**
- * TraceKit.wrap: Wrap any function in a TraceKit reporter
- * Example: func = TraceKit.wrap(func);
- *
- * @param {Function} func Function to be wrapped
- * @return {Function} The wrapped func
- */
-TraceKit.wrap = function traceKitWrapper(func) {
- function wrapped() {
- try {
- return func.apply(this, arguments);
- } catch (e) {
- TraceKit.report(e);
- throw e;
- }
- }
- return wrapped;
-};
-
-/**
- * TraceKit.report: cross-browser processing of unhandled exceptions
- *
- * Syntax:
- * TraceKit.report.subscribe(function(stackInfo) { ... })
- * TraceKit.report.unsubscribe(function(stackInfo) { ... })
- * TraceKit.report(exception)
- * try { ...code... } catch(ex) { TraceKit.report(ex); }
- *
- * Supports:
- * - Firefox: full stack trace with line numbers, plus column number
- * on top frame; column number is not guaranteed
- * - Opera: full stack trace with line and column numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- * - IE: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- *
- * In theory, TraceKit should work on all of the following versions:
- * - IE5.5+ (only 8.0 tested)
- * - Firefox 0.9+ (only 3.5+ tested)
- * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
- * Exceptions Have Stacktrace to be enabled in opera:config)
- * - Safari 3+ (only 4+ tested)
- * - Chrome 1+ (only 5+ tested)
- * - Konqueror 3.5+ (untested)
- *
- * Requires TraceKit.computeStackTrace.
- *
- * Tries to catch all unhandled exceptions and report them to the
- * subscribed handlers. Please note that TraceKit.report will rethrow the
- * exception. This is REQUIRED in order to get a useful stack trace in IE.
- * If the exception does not reach the top of the browser, you will only
- * get a stack trace from the point where TraceKit.report was called.
- *
- * Handlers receive a stackInfo object as described in the
- * TraceKit.computeStackTrace docs.
- */
-TraceKit.report = (function reportModuleWrapper() {
- var handlers = [],
- lastArgs = null,
- lastException = null,
- lastExceptionStack = null;
-
- /**
- * Add a crash handler.
- * @param {Function} handler
- */
- function subscribe(handler) {
- installGlobalHandler();
- handlers.push(handler);
- }
-
- /**
- * Remove a crash handler.
- * @param {Function} handler
- */
- function unsubscribe(handler) {
- for (var i = handlers.length - 1; i >= 0; --i) {
- if (handlers[i] === handler) {
- handlers.splice(i, 1);
- }
- }
- }
-
- /**
- * Remove all crash handlers.
- */
- function unsubscribeAll() {
- uninstallGlobalHandler();
- handlers = [];
- }
-
- /**
- * Dispatch stack information to all handlers.
- * @param {Object.} stack
- */
- function notifyHandlers(stack, isWindowError) {
- var exception = null;
- if (isWindowError && !TraceKit.collectWindowErrors) {
- return;
- }
- for (var i in handlers) {
- if (hasKey(handlers, i)) {
- try {
- handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
- } catch (inner) {
- exception = inner;
- }
- }
- }
-
- if (exception) {
- throw exception;
- }
- }
-
- var _oldOnerrorHandler, _onErrorHandlerInstalled;
-
- /**
- * Ensures all global unhandled exceptions are recorded.
- * Supported by Gecko and IE.
- * @param {string} message Error message.
- * @param {string} url URL of script that generated the exception.
- * @param {(number|string)} lineNo The line number at which the error
- * occurred.
- * @param {?(number|string)} colNo The column number at which the error
- * occurred.
- * @param {?Error} ex The actual Error object.
- */
- function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
- var stack = null;
-
- if (lastExceptionStack) {
- TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);
- processLastException();
- } else if (ex) {
- // New chrome and blink send along a real error object
- // Let's just report that like a normal error.
- // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
- stack = TraceKit.computeStackTrace(ex);
- notifyHandlers(stack, true);
- } else {
- var location = {
- 'url': url,
- 'line': lineNo,
- 'column': colNo
- };
- location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);
- location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);
- stack = {
- 'message': message,
- 'url': document.location.href,
- 'stack': [location]
- };
- notifyHandlers(stack, true);
- }
-
- if (_oldOnerrorHandler) {
- return _oldOnerrorHandler.apply(this, arguments);
- }
-
- return false;
- }
-
- function installGlobalHandler ()
- {
- if (_onErrorHandlerInstalled) {
- return;
- }
- _oldOnerrorHandler = window.onerror;
- window.onerror = traceKitWindowOnError;
- _onErrorHandlerInstalled = true;
- }
-
- function uninstallGlobalHandler ()
- {
- if (!_onErrorHandlerInstalled) {
- return;
- }
- window.onerror = _oldOnerrorHandler;
- _onErrorHandlerInstalled = false;
- _oldOnerrorHandler = undefined;
- }
-
- function processLastException() {
- var _lastExceptionStack = lastExceptionStack,
- _lastArgs = lastArgs;
- lastArgs = null;
- lastExceptionStack = null;
- lastException = null;
- notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
- }
-
- /**
- * Reports an unhandled Error to TraceKit.
- * @param {Error} ex
- * @param {?boolean} rethrow If false, do not re-throw the exception.
- * Only used for window.onerror to not cause an infinite loop of
- * rethrowing.
- */
- function report(ex, rethrow) {
- var args = _slice.call(arguments, 1);
- if (lastExceptionStack) {
- if (lastException === ex) {
- return; // already caught by an inner catch block, ignore
- } else {
- processLastException();
- }
- }
-
- var stack = TraceKit.computeStackTrace(ex);
- lastExceptionStack = stack;
- lastException = ex;
- lastArgs = args;
-
- // If the stack trace is incomplete, wait for 2 seconds for
- // slow slow IE to see if onerror occurs or not before reporting
- // this exception; otherwise, we will end up with an incomplete
- // stack trace
- window.setTimeout(function () {
- if (lastException === ex) {
- processLastException();
- }
- }, (stack.incomplete ? 2000 : 0));
-
- if (rethrow !== false) {
- throw ex; // re-throw to propagate to the top level (and cause window.onerror)
- }
- }
-
- report.subscribe = subscribe;
- report.unsubscribe = unsubscribe;
- report.uninstall = unsubscribeAll;
- return report;
-}());
-
-/**
- * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
- *
- * Syntax:
- * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
- * Returns:
- * s.name - exception name
- * s.message - exception message
- * s.stack[i].url - JavaScript or HTML file URL
- * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
- * s.stack[i].args - arguments passed to the function, if known
- * s.stack[i].line - line number, if known
- * s.stack[i].column - column number, if known
- * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#
- *
- * Supports:
- * - Firefox: full stack trace with line numbers and unreliable column
- * number on top frame
- * - Opera 10: full stack trace with line and column numbers
- * - Opera 9-: full stack trace with line numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the topmost stacktrace element
- * only
- * - IE: no line numbers whatsoever
- *
- * Tries to guess names of anonymous functions by looking for assignments
- * in the source code. In IE and Safari, we have to guess source file names
- * by searching for function bodies inside all page scripts. This will not
- * work for scripts that are loaded cross-domain.
- * Here be dragons: some function names may be guessed incorrectly, and
- * duplicate functions may be mismatched.
- *
- * TraceKit.computeStackTrace should only be used for tracing purposes.
- * Logging of unhandled exceptions should be done with TraceKit.report,
- * which builds on top of TraceKit.computeStackTrace and provides better
- * IE support by utilizing the window.onerror event to retrieve information
- * about the top of the stack.
- *
- * Note: In IE and Safari, no stack trace is recorded on the Error object,
- * so computeStackTrace instead walks its *own* chain of callers.
- * This means that:
- * * in Safari, some methods may be missing from the stack trace;
- * * in IE, the topmost function in the stack trace will always be the
- * caller of computeStackTrace.
- *
- * This is okay for tracing (because you are likely to be calling
- * computeStackTrace from the function you want to be the topmost element
- * of the stack trace anyway), but not okay for logging unhandled
- * exceptions (because your catch block will likely be far away from the
- * inner function that actually caused the exception).
- *
- */
-TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
- var debug = false,
- sourceCache = {};
-
- /**
- * Attempts to retrieve source code via XMLHttpRequest, which is used
- * to look up anonymous function names.
- * @param {string} url URL of source code.
- * @return {string} Source contents.
- */
- function loadSource(url) {
- if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on.
- return '';
- }
- try {
- var getXHR = function() {
- try {
- return new window.XMLHttpRequest();
- } catch (e) {
- // explicitly bubble up the exception if not found
- return new window.ActiveXObject('Microsoft.XMLHTTP');
- }
- };
-
- var request = getXHR();
- request.open('GET', url, false);
- request.send('');
- return request.responseText;
- } catch (e) {
- return '';
- }
- }
-
- /**
- * Retrieves source code from the source code cache.
- * @param {string} url URL of source code.
- * @return {Array.} Source contents.
- */
- function getSource(url) {
- if (!isString(url)) return [];
- if (!hasKey(sourceCache, url)) {
- // URL needs to be able to fetched within the acceptable domain. Otherwise,
- // cross-domain errors will be triggered.
- var source = '';
- if (url.indexOf(document.domain) !== -1) {
- source = loadSource(url);
- }
- sourceCache[url] = source ? source.split('\n') : [];
- }
-
- return sourceCache[url];
- }
-
- /**
- * Tries to use an externally loaded copy of source code to determine
- * the name of a function by looking at the name of the variable it was
- * assigned to, if any.
- * @param {string} url URL of source code.
- * @param {(string|number)} lineNo Line number in source code.
- * @return {string} The function name, if discoverable.
- */
- function guessFunctionName(url, lineNo) {
- var reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/,
- reGuessFunction = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,
- line = '',
- maxLines = 10,
- source = getSource(url),
- m;
-
- if (!source.length) {
- return UNKNOWN_FUNCTION;
- }
-
- // Walk backwards from the first line in the function until we find the line which
- // matches the pattern above, which is the function definition
- for (var i = 0; i < maxLines; ++i) {
- line = source[lineNo - i] + line;
-
- if (!isUndefined(line)) {
- if ((m = reGuessFunction.exec(line))) {
- return m[1];
- } else if ((m = reFunctionArgNames.exec(line))) {
- return m[1];
- }
- }
- }
-
- return UNKNOWN_FUNCTION;
- }
-
- /**
- * Retrieves the surrounding lines from where an exception occurred.
- * @param {string} url URL of source code.
- * @param {(string|number)} line Line number in source code to centre
- * around for context.
- * @return {?Array.} Lines of source code.
- */
- function gatherContext(url, line) {
- var source = getSource(url);
-
- if (!source.length) {
- return null;
- }
-
- var context = [],
- // linesBefore & linesAfter are inclusive with the offending line.
- // if linesOfContext is even, there will be one extra line
- // *before* the offending line.
- linesBefore = Math.floor(TraceKit.linesOfContext / 2),
- // Add one extra line if linesOfContext is odd
- linesAfter = linesBefore + (TraceKit.linesOfContext % 2),
- start = Math.max(0, line - linesBefore - 1),
- end = Math.min(source.length, line + linesAfter - 1);
-
- line -= 1; // convert to 0-based index
-
- for (var i = start; i < end; ++i) {
- if (!isUndefined(source[i])) {
- context.push(source[i]);
- }
- }
-
- return context.length > 0 ? context : null;
- }
-
- /**
- * Escapes special characters, except for whitespace, in a string to be
- * used inside a regular expression as a string literal.
- * @param {string} text The string.
- * @return {string} The escaped string literal.
- */
- function escapeRegExp(text) {
- return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, '\\$&');
- }
-
- /**
- * Escapes special characters in a string to be used inside a regular
- * expression as a string literal. Also ensures that HTML entities will
- * be matched the same as their literal friends.
- * @param {string} body The string.
- * @return {string} The escaped string.
- */
- function escapeCodeAsRegExpForMatchingInsideHTML(body) {
- return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('"', '(?:"|")').replace(/\s+/g, '\\s+');
- }
-
- /**
- * Determines where a code fragment occurs in the source code.
- * @param {RegExp} re The function definition.
- * @param {Array.} urls A list of URLs to search.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceInUrls(re, urls) {
- var source, m;
- for (var i = 0, j = urls.length; i < j; ++i) {
- // console.log('searching', urls[i]);
- if ((source = getSource(urls[i])).length) {
- source = source.join('\n');
- if ((m = re.exec(source))) {
- // console.log('Found function in ' + urls[i]);
-
- return {
- 'url': urls[i],
- 'line': source.substring(0, m.index).split('\n').length,
- 'column': m.index - source.lastIndexOf('\n', m.index) - 1
- };
- }
- }
- }
-
- // console.log('no match');
-
- return null;
- }
-
- /**
- * Determines at which column a code fragment occurs on a line of the
- * source code.
- * @param {string} fragment The code fragment.
- * @param {string} url The URL to search.
- * @param {(string|number)} line The line number to examine.
- * @return {?number} The column number.
- */
- function findSourceInLine(fragment, url, line) {
- var source = getSource(url),
- re = new RegExp('\\b' + escapeRegExp(fragment) + '\\b'),
- m;
-
- line -= 1;
-
- if (source && source.length > line && (m = re.exec(source[line]))) {
- return m.index;
- }
-
- return null;
- }
-
- /**
- * Determines where a function was defined within the source code.
- * @param {(Function|string)} func A function reference or serialized
- * function definition.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceByFunctionBody(func) {
- var urls = [window.location.href],
- scripts = document.getElementsByTagName('script'),
- body,
- code = '' + func,
- codeRE = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- eventRE = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- re,
- parts,
- result;
-
- for (var i = 0; i < scripts.length; ++i) {
- var script = scripts[i];
- if (script.src) {
- urls.push(script.src);
- }
- }
-
- if (!(parts = codeRE.exec(code))) {
- re = new RegExp(escapeRegExp(code).replace(/\s+/g, '\\s+'));
- }
-
- // not sure if this is really necessary, but I don’t have a test
- // corpus large enough to confirm that and it was in the original.
- else {
- var name = parts[1] ? '\\s+' + parts[1] : '',
- args = parts[2].split(',').join('\\s*,\\s*');
-
- body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\s+/g, '\\s+');
- re = new RegExp('function' + name + '\\s*\\(\\s*' + args + '\\s*\\)\\s*{\\s*' + body + '\\s*}');
- }
-
- // look for a normal function definition
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
-
- // look for an old-school event handler function
- if ((parts = eventRE.exec(code))) {
- var event = parts[1];
- body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);
-
- // look for a function defined in HTML as an onXXX handler
- re = new RegExp('on' + event + '=[\\\'"]\\s*' + body + '\\s*[\\\'"]', 'i');
-
- if ((result = findSourceInUrls(re, urls[0]))) {
- return result;
- }
-
- // look for ???
- re = new RegExp(body);
-
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
- }
-
- return null;
- }
-
- // Contents of Exception in various browsers.
- //
- // SAFARI:
- // ex.message = Can't find variable: qq
- // ex.line = 59
- // ex.sourceId = 580238192
- // ex.sourceURL = http://...
- // ex.expressionBeginOffset = 96
- // ex.expressionCaretOffset = 98
- // ex.expressionEndOffset = 98
- // ex.name = ReferenceError
- //
- // FIREFOX:
- // ex.message = qq is not defined
- // ex.fileName = http://...
- // ex.lineNumber = 59
- // ex.columnNumber = 69
- // ex.stack = ...stack trace... (see the example below)
- // ex.name = ReferenceError
- //
- // CHROME:
- // ex.message = qq is not defined
- // ex.name = ReferenceError
- // ex.type = not_defined
- // ex.arguments = ['aa']
- // ex.stack = ...stack trace...
- //
- // INTERNET EXPLORER:
- // ex.message = ...
- // ex.name = ReferenceError
- //
- // OPERA:
- // ex.message = ...message... (see the example below)
- // ex.name = ReferenceError
- // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
- // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
-
- /**
- * Computes stack trace information from the stack property.
- * Chrome and Gecko use this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStackProp(ex) {
- if (!ex.stack) {
- return null;
- }
-
- var chrome = /^\s*at (.*?) ?\(?((?:file|https?|chrome-extension):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
- gecko = /^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i,
- lines = ex.stack.split('\n'),
- stack = [],
- parts,
- element,
- reference = /^(.*) is undefined$/.exec(ex.message);
-
- for (var i = 0, j = lines.length; i < j; ++i) {
- if ((parts = gecko.exec(lines[i]))) {
- element = {
- 'url': parts[3],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'args': parts[2] ? parts[2].split(',') : '',
- 'line': +parts[4],
- 'column': parts[5] ? +parts[5] : null
- };
- } else if ((parts = chrome.exec(lines[i]))) {
- element = {
- 'url': parts[2],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'line': +parts[3],
- 'column': parts[4] ? +parts[4] : null
- };
- } else {
- continue;
- }
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
-
- if (element.line) {
- element.context = gatherContext(element.url, element.line);
- }
-
- stack.push(element);
- }
-
- if (!stack.length) {
- return null;
- }
-
- if (stack[0].line && !stack[0].column && reference) {
- stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line);
- } else if (!stack[0].column && !isUndefined(ex.columnNumber)) {
- // FireFox uses this awesome columnNumber property for its top frame
- // Also note, Firefox's column number is 0-based and everything else expects 1-based,
- // so adding 1
- stack[0].column = ex.columnNumber + 1;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * Computes stack trace information from the stacktrace property.
- * Opera 10 uses this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStacktraceProp(ex) {
- // Access and store the stacktrace property before doing ANYTHING
- // else to it because Opera is not very good at providing it
- // reliably in other circumstances.
- var stacktrace = ex.stacktrace;
-
- var testRE = / line (\d+), column (\d+) in (?:]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,
- lines = stacktrace.split('\n'),
- stack = [],
- parts;
-
- for (var i = 0, j = lines.length; i < j; i += 2) {
- if ((parts = testRE.exec(lines[i]))) {
- var element = {
- 'line': +parts[1],
- 'column': +parts[2],
- 'func': parts[3] || parts[4],
- 'args': parts[5] ? parts[5].split(',') : [],
- 'url': parts[6]
- };
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
- if (element.line) {
- try {
- element.context = gatherContext(element.url, element.line);
- } catch (exc) {}
- }
-
- if (!element.context) {
- element.context = [lines[i + 1]];
- }
-
- stack.push(element);
- }
- }
-
- if (!stack.length) {
- return null;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * NOT TESTED.
- * Computes stack trace information from an error message that includes
- * the stack trace.
- * Opera 9 and earlier use this method if the option to show stack
- * traces is turned on in opera:config.
- * @param {Error} ex
- * @return {?Object.} Stack information.
- */
- function computeStackTraceFromOperaMultiLineMessage(ex) {
- // Opera includes a stack trace into the exception message. An example is:
- //
- // Statement on line 3: Undefined variable: undefinedFunc
- // Backtrace:
- // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz
- // undefinedFunc(a);
- // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy
- // zzz(x, y, z);
- // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx
- // yyy(a, a, a);
- // Line 1 of function script
- // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }
- // ...
-
- var lines = ex.message.split('\n');
- if (lines.length < 4) {
- return null;
- }
-
- var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE3 = /^\s*Line (\d+) of function script\s*$/i,
- stack = [],
- scripts = document.getElementsByTagName('script'),
- inlineScriptBlocks = [],
- parts,
- i,
- len,
- source;
-
- for (i in scripts) {
- if (hasKey(scripts, i) && !scripts[i].src) {
- inlineScriptBlocks.push(scripts[i]);
- }
- }
-
- for (i = 2, len = lines.length; i < len; i += 2) {
- var item = null;
- if ((parts = lineRE1.exec(lines[i]))) {
- item = {
- 'url': parts[2],
- 'func': parts[3],
- 'line': +parts[1]
- };
- } else if ((parts = lineRE2.exec(lines[i]))) {
- item = {
- 'url': parts[3],
- 'func': parts[4]
- };
- var relativeLine = (+parts[1]); // relative to the start of the
-
-
-
-
-
-
-TraceKit specific optional settings
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Usually there is no need to touch these settings, but they exist in case you need to tweak something.
-
-fetchContext
-------------
-
-Enable TraceKit to attempt to fetch source files to look up anonymous function names, this can be useful to enable if you don't get the context for some entries in the stack trace. Default value is ``false``.
-
-.. code-block:: javascript
-
- {
- fetchContext: true
- }
-
-linesOfContext
---------------
-
-The count of lines surrounding the error line that should be used as context in the stack trace, default value is ``11``. Only applicable when ``fetchContext` is enabled.
-
-.. code-block:: javascript
-
- {
- linesOfContext: 11
- }
-
-collectWindowErrors
--------------------
-
-Enable or disable the TraceKit ``window.onerror`` handler, default value is ``true``.
-
-.. code-block:: javascript
-
- {
- collectWindowErrors: true
- }
diff --git a/htdocs/includes/raven-js/docs/contributing/index.rst b/htdocs/includes/raven-js/docs/contributing/index.rst
deleted file mode 100644
index 2b25abf7f16..00000000000
--- a/htdocs/includes/raven-js/docs/contributing/index.rst
+++ /dev/null
@@ -1,99 +0,0 @@
-Contributing
-============
-
-Setting up an Environment
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To run the test suite and run our code linter, node.js and npm are required. If you don't have node installed, `get it here `_ first.
-
-Installing all other dependencies is as simple as:
-
-.. code-block:: sh
-
- $ npm install
-
-And if you don't have `Grunt `_ already, feel free to install that globally:
-
-.. code-block:: sh
-
- $ npm install -g grunt-cli
-
-Running the Test Suite
-~~~~~~~~~~~~~~~~~~~~~~
-
-The test suite is powered by `Mocha `_ and can both run from the command line, or in the browser.
-
-From the command line:
-
-.. code-block:: sh
-
- $ grunt test
-
-From your browser:
-
-.. code-block:: sh
-
- $ grunt run:test
-
-Then visit: http://localhost:8000/test/
-
-Compiling Raven.js
-~~~~~~~~~~~~~~~~~~
-
-The simplest way to compile your own version of Raven.js is with the supplied grunt command:
-
-.. code-block:: sh
-
- $ grunt build
-
-By default, this will compile raven.js and all of the included plugins.
-
-If you only want to compile the core raven.js:
-
-.. code-block:: sh
-
- $ grunt build.core
-
-Files are compiled into ``build/``.
-
-Contributing Back Code
-~~~~~~~~~~~~~~~~~~~~~~
-
-Please, send over suggestions and bug fixes in the form of pull requests on `GitHub `_. Any nontrivial fixes/features should include tests.
-Do not include any changes to the ``dist/`` folder or bump version numbers yourself.
-
-Documentation
--------------
-
-The documentation is written using `reStructuredText `_, and compiled using `Sphinx `_. If you don't have Sphinx installed, you can do it using following command (assuming you have Python already installed in your system):
-
-.. code-block:: sh
-
- $ pip install sphinx
-
-Documentation can be then compiled by running:
-
-.. code-block:: sh
-
- $ make docs
-
-Afterwards you can view it in your browser by running following command and than pointing your browser to http://127.0.0.1:8000/:
-
-.. code-block:: sh
-
- $ grunt run:docs
-
-
-
-Releasing New Version
-~~~~~~~~~~~~~~~~~~~~~
-
-* Bump version numbers in both ``package.json`` and ``bower.json``.
-* ``$ grunt dist`` This will compile a new version and update it in the ``dist/`` folder.
-* Confirm that build was fine, etc.
-* Commit new version, create a tag. Push to GitHub.
-* ``$ grunt publish`` to recompile all plugins and all permutations and upload to S3.
-* ``$ npm publish`` to push to npm.
-* Confirm that the new version exists behind ``cdn.ravenjs.com``
-* Update version in the ``gh-pages`` branch specifically for http://ravenjs.com/.
-* glhf
diff --git a/htdocs/includes/raven-js/docs/index.rst b/htdocs/includes/raven-js/docs/index.rst
deleted file mode 100644
index afe07bc9ab9..00000000000
--- a/htdocs/includes/raven-js/docs/index.rst
+++ /dev/null
@@ -1,42 +0,0 @@
-Raven.js
-========
-
-Raven.js is a tiny standalone JavaScript client for `Sentry `_.
-
-**This version of Raven.js requires Sentry 6.0 or newer.**
-
-
-Getting Started
----------------
-
-.. toctree::
- :maxdepth: 2
-
- install/index
- plugins/index
- config/index
- usage/index
- tips/index
-
-Developers
-----------
-.. toctree::
- :maxdepth: 2
-
- contributing/index
-
-What's New?
------------
-.. toctree::
- :maxdepth: 2
-
- changelog/index
-
-Resources
----------
-* `Download `_
-* `Bug Tracker `_
-* `Code `_
-* `IRC `_ (irc.freenode.net, #sentry)
-* :doc:`Changelog `
-* Follow `@mattrobenolt `_ on Twitter for updates!
diff --git a/htdocs/includes/raven-js/docs/install/index.rst b/htdocs/includes/raven-js/docs/install/index.rst
deleted file mode 100644
index 17feda4e08e..00000000000
--- a/htdocs/includes/raven-js/docs/install/index.rst
+++ /dev/null
@@ -1,61 +0,0 @@
-Installation
-============
-
-Raven is distributed in a few different methods, and should get included after any other libraries are included, but before your own scripts.
-
-So for example:
-
-.. parsed-literal::
-
-
-
-
-
-
-This allows the ability for Raven's plugins to instrument themselves. If included before something like jQuery, it'd be impossible to use for example, the jquery plugin.
-
-Using our CDN
-~~~~~~~~~~~~~
-
-We serve our own builds off of `Fastly `_. They are accessible over both http and https, so we recommend leaving the protocol off.
-
-Our CDN distributes builds with and without :doc:`plugins `.
-
-.. parsed-literal::
-
-
-
-**We highly recommend trying out a plugin or two since it'll greatly improve the chances that we can collect good information.**
-
-This version does not include any plugins. See `ravenjs.com `_ for more information about plugins and getting other builds.
-
-Bower
-~~~~~
-
-We also provide a way to deploy Raven via `bower
- `_. Useful if you want serve your own scripts instead of depending on our CDN and mantain a ``bower.json`` with a list of dependencies and versions (adding the ``--save`` flag would automatically add it to ``bower.json``).
-
-.. code-block:: sh
-
- $ bower install raven-js --save
-
-.. code-block:: html
-
-
-
-Also note that the file is uncompresed but is ready to pass to any decent JavaScript compressor like `uglify `_.
-
-npm
-~~~
-
-Raven is published to npm as well. https://www.npmjs.com/package/raven-js
-
-.. code-block:: sh
-
- $ npm install raven-js --save
-
-Requirements
-~~~~~~~~~~~~
-
-Raven expects the browser to provide `window.JSON` and `window.JSON.stringify`. In Internet Explorer 8+ these are available in `standards mode `_.
-You can also use `json2.js `_ to provide the JSON implementation in browsers/modes which doesn't support native JSON
diff --git a/htdocs/includes/raven-js/docs/make.bat b/htdocs/includes/raven-js/docs/make.bat
deleted file mode 100644
index 13e2848a47d..00000000000
--- a/htdocs/includes/raven-js/docs/make.bat
+++ /dev/null
@@ -1,190 +0,0 @@
-@ECHO OFF
-
-REM Command file for Sphinx documentation
-
-if "%SPHINXBUILD%" == "" (
- set SPHINXBUILD=sphinx-build
-)
-set BUILDDIR=_build
-set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% .
-set I18NSPHINXOPTS=%SPHINXOPTS% .
-if NOT "%PAPER%" == "" (
- set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS%
- set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS%
-)
-
-if "%1" == "" goto help
-
-if "%1" == "help" (
- :help
- echo.Please use `make ^` where ^ is one of
- echo. html to make standalone HTML files
- echo. dirhtml to make HTML files named index.html in directories
- echo. singlehtml to make a single large HTML file
- echo. pickle to make pickle files
- echo. json to make JSON files
- echo. htmlhelp to make HTML files and a HTML help project
- echo. qthelp to make HTML files and a qthelp project
- echo. devhelp to make HTML files and a Devhelp project
- echo. epub to make an epub
- echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter
- echo. text to make text files
- echo. man to make manual pages
- echo. texinfo to make Texinfo files
- echo. gettext to make PO message catalogs
- echo. changes to make an overview over all changed/added/deprecated items
- echo. linkcheck to check all external links for integrity
- echo. doctest to run all doctests embedded in the documentation if enabled
- goto end
-)
-
-if "%1" == "clean" (
- for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i
- del /q /s %BUILDDIR%\*
- goto end
-)
-
-if "%1" == "html" (
- %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/html.
- goto end
-)
-
-if "%1" == "dirhtml" (
- %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml.
- goto end
-)
-
-if "%1" == "singlehtml" (
- %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml.
- goto end
-)
-
-if "%1" == "pickle" (
- %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished; now you can process the pickle files.
- goto end
-)
-
-if "%1" == "json" (
- %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished; now you can process the JSON files.
- goto end
-)
-
-if "%1" == "htmlhelp" (
- %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished; now you can run HTML Help Workshop with the ^
-.hhp project file in %BUILDDIR%/htmlhelp.
- goto end
-)
-
-if "%1" == "qthelp" (
- %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished; now you can run "qcollectiongenerator" with the ^
-.qhcp project file in %BUILDDIR%/qthelp, like this:
- echo.^> qcollectiongenerator %BUILDDIR%\qthelp\raven-js.qhcp
- echo.To view the help file:
- echo.^> assistant -collectionFile %BUILDDIR%\qthelp\raven-js.ghc
- goto end
-)
-
-if "%1" == "devhelp" (
- %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished.
- goto end
-)
-
-if "%1" == "epub" (
- %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The epub file is in %BUILDDIR%/epub.
- goto end
-)
-
-if "%1" == "latex" (
- %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished; the LaTeX files are in %BUILDDIR%/latex.
- goto end
-)
-
-if "%1" == "text" (
- %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The text files are in %BUILDDIR%/text.
- goto end
-)
-
-if "%1" == "man" (
- %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The manual pages are in %BUILDDIR%/man.
- goto end
-)
-
-if "%1" == "texinfo" (
- %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo.
- goto end
-)
-
-if "%1" == "gettext" (
- %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale
- if errorlevel 1 exit /b 1
- echo.
- echo.Build finished. The message catalogs are in %BUILDDIR%/locale.
- goto end
-)
-
-if "%1" == "changes" (
- %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes
- if errorlevel 1 exit /b 1
- echo.
- echo.The overview file is in %BUILDDIR%/changes.
- goto end
-)
-
-if "%1" == "linkcheck" (
- %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck
- if errorlevel 1 exit /b 1
- echo.
- echo.Link check complete; look for any errors in the above output ^
-or in %BUILDDIR%/linkcheck/output.txt.
- goto end
-)
-
-if "%1" == "doctest" (
- %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest
- if errorlevel 1 exit /b 1
- echo.
- echo.Testing of doctests in the sources finished, look at the ^
-results in %BUILDDIR%/doctest/output.txt.
- goto end
-)
-
-:end
diff --git a/htdocs/includes/raven-js/docs/plugins/index.rst b/htdocs/includes/raven-js/docs/plugins/index.rst
deleted file mode 100644
index 7a9df7b019e..00000000000
--- a/htdocs/includes/raven-js/docs/plugins/index.rst
+++ /dev/null
@@ -1,20 +0,0 @@
-Plugins
-=======
-
-What are plugins?
-~~~~~~~~~~~~~~~~~
-
-In Raven.js, plugins are little snippets of code to augment functionality for a specific application/framework. It is highly recommended to checkout the list of plugins and use what apply to your project.
-
-In order to keep the core small, we have opted to only include the most basic functionality by default, and you can pick and choose which plugins are applicable for you.
-
-Why are plugins needed at all?
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-JavaScript is pretty restrictive when it comes to exception handling, and there are a lot of things that make it difficult to get relevent information, so it's important that we inject code and wrap things magically so we can extract what we need. See :doc:`/usage/index` for tips regarding that.
-
-
-All Plugins
-~~~~~~~~~~~
-* https://github.com/getsentry/raven-js/tree/master/plugins
-* `Download `_
diff --git a/htdocs/includes/raven-js/docs/tips/index.rst b/htdocs/includes/raven-js/docs/tips/index.rst
deleted file mode 100644
index 8dee09eb7ef..00000000000
--- a/htdocs/includes/raven-js/docs/tips/index.rst
+++ /dev/null
@@ -1,79 +0,0 @@
-Pro Tips™
-=========
-
-
-Decluttering Sentry
-~~~~~~~~~~~~~~~~~~~
-
-The first thing to do is to consider constructing a whitelist of domains in which might raise acceptable exceptions.
-
-If your scripts are loaded from ``cdn.example.com`` and your site is ``example.com`` it'd be reasonable to set ``whitelistUrls`` to:
-
-.. code-block:: javascript
-
- whitelistUrls: [
- /https?:\/\/((cdn|www)\.)?example\.com/
- ]
-
-Since this accepts a regular expression, that would catch anything \*.example.com or example.com exactly. See also: :ref:`Config: whitelistUrls`.
-
-Next, checkout the list of :doc:`plugins ` we provide and see which are applicable to you.
-
-The community has compiled a list of common ignore rules for common things, like Facebook, Chrome extensions, etc. So it's recommended to at least check these out and see if they apply to you. `Check out the original gist `_.
-
-.. code-block:: javascript
-
- var ravenOptions = {
- ignoreErrors: [
- // Random plugins/extensions
- 'top.GLOBALS',
- // See: http://blog.errorception.com/2012/03/tale-of-unfindable-js-error. html
- 'originalCreateNotification',
- 'canvas.contentDocument',
- 'MyApp_RemoveAllHighlights',
- 'http://tt.epicplay.com',
- 'Can\'t find variable: ZiteReader',
- 'jigsaw is not defined',
- 'ComboSearch is not defined',
- 'http://loading.retry.widdit.com/',
- 'atomicFindClose',
- // Facebook borked
- 'fb_xd_fragment',
- // ISP "optimizing" proxy - `Cache-Control: no-transform` seems to reduce this. (thanks @acdha)
- // See http://stackoverflow.com/questions/4113268/how-to-stop-javascript-injection-from-vodafone-proxy
- 'bmi_SafeAddOnload',
- 'EBCallBackMessageReceived',
- // See http://toolbar.conduit.com/Developer/HtmlAndGadget/Methods/JSInjection.aspx
- 'conduitPage'
- ],
- ignoreUrls: [
- // Facebook flakiness
- /graph\.facebook\.com/i,
- // Facebook blocked
- /connect\.facebook\.net\/en_US\/all\.js/i,
- // Woopra flakiness
- /eatdifferent\.com\.woopra-ns\.com/i,
- /static\.woopra\.com\/js\/woopra\.js/i,
- // Chrome extensions
- /extensions\//i,
- /^chrome:\/\//i,
- // Other plugins
- /127\.0\.0\.1:4001\/isrunning/i, // Cacaoweb
- /webappstoolbarba\.texthelp\.com\//i,
- /metrics\.itunes\.apple\.com\.edgesuite\.net\//i
- ]
- };
-
-
-Sampling Data
-~~~~~~~~~~~~~
-
-It happens frequently that errors sent from your frontend can be overwhelming. One solution here is to only send a sample of the events that happen. You can do this via the ``shouldSendCallback`` setting:
-
-.. code-block:: javascript
-
- shouldSendCallback: function(data) {
- // only send 10% of errors
- var sampleRate = 10;
- return (Math.random() * 100 <= sampleRate);
- }
diff --git a/htdocs/includes/raven-js/docs/usage/index.rst b/htdocs/includes/raven-js/docs/usage/index.rst
deleted file mode 100644
index c8e01f9c801..00000000000
--- a/htdocs/includes/raven-js/docs/usage/index.rst
+++ /dev/null
@@ -1,156 +0,0 @@
-Usage
-=====
-
-By default, Raven makes a few efforts to try its best to capture meaningful stack traces, but browsers make it pretty difficult.
-
-The easiest solution is to prevent an error from bubbling all of the way up the stack to ``window``.
-
-How to actually capture an error correctly
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-try...catch
------------
-
-The simplest way, is to try and explicitly capture and report potentially problematic code with a ``try...catch`` block and ``Raven.captureException``.
-
-.. code-block:: javascript
-
- try {
- doSomething(a[0])
- } catch(e) {
- Raven.captureException(e)
- }
-
-**Do not** throw strings! Always throw an actual ``Error`` object. For example:
-
-.. code-block:: javascript
-
- throw new Error('broken') // good
- throw 'broken' // bad
-
-It's impossible to retrieve a stack trace from a string. If this happens, Raven transmits the error as a plain message.
-
-context/wrap
-------------
-
-``Raven.context`` allows you to wrap any function to be immediately executed. Behind the scenes, Raven is just wrapping your code in a ``try...catch`` block to record the exception before re-throwing it.
-
-.. code-block:: javascript
-
- Raven.context(function() {
- doSomething(a[0])
- })
-
-``Raven.wrap`` wraps a function in a similar way to ``Raven.context``, but instead of executing the function, it returns another function. This is totally awesome for use when passing around a callback.
-
-.. code-block:: javascript
-
- var doIt = function() {
- // doing cool stuff
- }
-
- setTimeout(Raven.wrap(doIt), 1000)
-
-Tracking authenticated users
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-While a user is logged in, you can tell Sentry to associate errors with user data.
-
-.. code-block:: javascript
-
- Raven.setUserContext({
- email: 'matt@example.com',
- id: '123'
- })
-
-If at any point, the user becomes unauthenticated, you can call ``Raven.setUserContext()`` with no arguments to remove their data. *This would only really be useful in a large web app where the user logs in/out without a page reload.*
-
-Capturing a specific message
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: javascript
-
- Raven.captureMessage('Broken!')
-
-Passing additional data
-~~~~~~~~~~~~~~~~~~~~~~~
-
-``captureException``, ``context``, ``wrap``, and ``captureMessage`` functions all allow passing additional data to be tagged onto the error, such as ``tags`` or ``extra`` for additional context.
-
-.. code-block:: javascript
-
- Raven.captureException(e, {tags: { key: "value" }})
-
- Raven.captureMessage('Broken!', {tags: { key: "value" }})
-
- Raven.context({tags: { key: "value" }}, function(){ ... })
-
- Raven.wrap({logger: "my.module"}, function(){ ... })
-
- Raven.captureException(e, {extra: { foo: "bar" }})
-
-You can also set context variables globally to be merged in with future exceptions with ``setExtraContext`` and ``setTagsContext``.
-
-.. code-block:: javascript
-
- Raven.setExtraContext({ foo: "bar" })
- Raven.setTagsContext({ key: "value" })
-
-
-Getting back an event id
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-An event id is a globally unique id for the event that was just sent. This event id can be used to find the exact event from within Sentry.
-
-This is often used to display for the user and report an error to customer service.
-
-.. code-block:: javascript
-
- Raven.lastEventId()
-
-``Raven.lastEventId()`` will be undefined until an event is sent. After an event is sent, it will contain the string id.
-
-.. code-block:: javascript
-
- Raven.captureMessage('Broken!')
- alert(Raven.lastEventId())
-
-
-Check if Raven is setup and ready to go
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. code-block:: javascript
-
- Raven.isSetup()
-
-
-Dealing with minified source code
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Raven and Sentry now support `Source Maps `_.
-
-We have provided some instructions to creating Source Maps over at https://www.getsentry.com/docs/sourcemaps/. Also, checkout our `Gruntfile `_ for a good example of what we're doing.
-
-You can use `Source Map Validator `_ to help verify that things are correct.
-
-CORS
-~~~~
-
-If you're hosting your scripts on another domain and things don't get caught by Raven, it's likely that the error will bubble up to ``window.onerror``. If this happens, the error will report some ugly ``Script error`` and Raven will drop it on the floor
-since this is a useless error for everybody.
-
-To help mitigate this, we can tell the browser that these scripts are safe and we're allowing them to expose their errors to us.
-
-In your ``
-
-And set an ``Access-Control-Allow-Origin`` HTTP header on that file.
-
-.. code-block:: console
-
- Access-Control-Allow-Origin: *
-
-**Note: both of these steps need to be done or your scripts might not even get executed**
diff --git a/htdocs/includes/raven-js/example/Makefile b/htdocs/includes/raven-js/example/Makefile
deleted file mode 100644
index 87976776e90..00000000000
--- a/htdocs/includes/raven-js/example/Makefile
+++ /dev/null
@@ -1,3 +0,0 @@
-
-build:
- ../node_modules/.bin/uglifyjs --source-map=file.sourcemap.js -c -o file.min.js file1.js file2.js
diff --git a/htdocs/includes/raven-js/example/file.min.js b/htdocs/includes/raven-js/example/file.min.js
deleted file mode 100644
index 12b9f811b28..00000000000
--- a/htdocs/includes/raven-js/example/file.min.js
+++ /dev/null
@@ -1,2 +0,0 @@
-function add(a,b){"use strict";return a+b}function multiply(a,b){"use strict";return a*b}function divide(a,b){"use strict";try{return multiply(add(a,b),a,b)/c}catch(e){Raven.captureException(e)}}
-//@ sourceMappingURL=file.sourcemap.js
\ No newline at end of file
diff --git a/htdocs/includes/raven-js/example/file.sourcemap.js b/htdocs/includes/raven-js/example/file.sourcemap.js
deleted file mode 100644
index 1bd0f6510cf..00000000000
--- a/htdocs/includes/raven-js/example/file.sourcemap.js
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"file.min.js","sources":["file1.js","file2.js"],"names":["add","a","b","multiply","divide","c","e","Raven","captureException"],"mappings":"AAAA,QAASA,KAAIC,EAAGC,GACf,YACA,OAAOD,GAAIC,ECFZ,QAASC,UAASF,EAAGC,GACpB,YACA,OAAOD,GAAIC,EAEZ,QAASE,QAAOH,EAAGC,GAClB,YACA,KACC,MAAOC,UAASH,IAAIC,EAAGC,GAAID,EAAGC,GAAKG,EAClC,MAAOC,GACRC,MAAMC,iBAAiBF"}
\ No newline at end of file
diff --git a/htdocs/includes/raven-js/example/file1.js b/htdocs/includes/raven-js/example/file1.js
deleted file mode 100644
index eed5827852d..00000000000
--- a/htdocs/includes/raven-js/example/file1.js
+++ /dev/null
@@ -1,4 +0,0 @@
-function add(a, b) {
- "use strict";
- return a + b;
-}
\ No newline at end of file
diff --git a/htdocs/includes/raven-js/example/file2.js b/htdocs/includes/raven-js/example/file2.js
deleted file mode 100644
index 8b174356846..00000000000
--- a/htdocs/includes/raven-js/example/file2.js
+++ /dev/null
@@ -1,12 +0,0 @@
-function multiply(a, b) {
- "use strict";
- return a * b;
-}
-function divide(a, b) {
- "use strict";
- try {
- return multiply(add(a, b), a, b) / c;
- } catch (e) {
- Raven.captureException(e);
- }
-}
diff --git a/htdocs/includes/raven-js/example/index.html b/htdocs/includes/raven-js/example/index.html
deleted file mode 100644
index b7ebbdd018e..00000000000
--- a/htdocs/includes/raven-js/example/index.html
+++ /dev/null
@@ -1,41 +0,0 @@
-
-
-
- Scratch Disk
-
-
-
-
-
-
-
-
-Break me
-
-
-Sourcemap breakage
-window.onerror
-test options
-throw string
-
-
-
diff --git a/htdocs/includes/raven-js/example/scratch.js b/htdocs/includes/raven-js/example/scratch.js
deleted file mode 100644
index f1962bbdfc1..00000000000
--- a/htdocs/includes/raven-js/example/scratch.js
+++ /dev/null
@@ -1,42 +0,0 @@
-function foo() {
- console.log("lol, i don't do anything")
-}
-
-function foo2() {
- foo()
- console.log('i called foo')
-}
-
-function broken() {
- try {
- /*fkjdsahfdhskfhdsahfudshafuoidashfudsa*/ fdasfds[0]; // i throw an error h sadhf hadsfdsakf kl;dsjaklf jdklsajfk ljds;klafldsl fkhdas;hf hdsaf hdsalfhjldksahfljkdsahfjkl dhsajkfl hdklsahflkjdsahkfj hdsjakhf dkashfl diusafh kdsjahfkldsahf jkdashfj khdasjkfhdjksahflkjdhsakfhjdksahfjkdhsakf hdajskhf kjdash kjfads fjkadsh jkfdsa jkfdas jkfdjkas hfjkdsajlk fdsajk fjkdsa fjdsa fdkjlsa fjkdaslk hfjlkdsah fhdsahfui
- }catch(e) {
- Raven.captureException(e);
- }
-}
-
-function ready() {
- document.getElementById('test').onclick = broken;
-}
-
-function foo3() {
- document.getElementById('crap').value = 'barfdasjkfhoadshflkaosfjadiosfhdaskjfasfadsfads';
-}
-
-function somethingelse() {
- document.getElementById('somethingelse').value = 'this is some realy really long message just so our minification is largeeeeeeeeee!';
-}
-
-function derp() {
- fdas[0];
-}
-
-function testOptions() {
- Raven.context({tags: {foo: 'bar'}}, function() {
- throw new Error('foo');
- });
-}
-
-function throwString() {
- throw 'oops';
-}
diff --git a/htdocs/includes/raven-js/package.json b/htdocs/includes/raven-js/package.json
deleted file mode 100644
index 9352edcab38..00000000000
--- a/htdocs/includes/raven-js/package.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
- "name": "raven-js",
- "version": "1.1.19",
- "license": "BSD-2-Clause",
- "homepage": "https://getsentry.com",
- "scripts": {
- "pretest": "npm install",
- "test": "grunt test"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/getsentry/raven-js.git"
- },
- "main": "dist/raven.js",
- "devDependencies": {
- "chai": "~1.8.1",
- "grunt": "~0.4.1",
- "grunt-cli": "~0.1.9",
- "grunt-contrib-jshint": "~0.6.3",
- "grunt-contrib-uglify": "~0.2.2",
- "grunt-contrib-concat": "~0.3.0",
- "grunt-contrib-clean": "~0.4.0",
- "grunt-mocha": "~0.4.1",
- "grunt-release": "~0.6.0",
- "grunt-s3": "~0.2.0-alpha.3",
- "grunt-gitinfo": "~0.1.1",
- "grunt-contrib-connect": "~0.5.0",
- "grunt-contrib-copy": "~0.4.1",
- "sinon": "~1.7.3",
- "lodash": "~2.4.0"
- }
-}
diff --git a/htdocs/includes/raven-js/plugins/angular.js b/htdocs/includes/raven-js/plugins/angular.js
deleted file mode 100644
index 98bf5892001..00000000000
--- a/htdocs/includes/raven-js/plugins/angular.js
+++ /dev/null
@@ -1,36 +0,0 @@
-/**
- * Angular.js plugin
- *
- * Provides an $exceptionHandler for Angular.js
- */
-;(function(Raven, angular) {
-'use strict';
-
-// quit if angular isn't on the page
-if (!angular) {
- return;
-}
-
-function ngRavenProvider($provide) {
- $provide.decorator('$exceptionHandler', [
- 'RavenConfig', '$delegate',
- ngRavenExceptionHandler
- ]);
-}
-
-function ngRavenExceptionHandler(RavenConfig, $delegate) {
- if (!RavenConfig)
- throw new Error('RavenConfig must be set before using this');
-
- Raven.config(RavenConfig.dsn, RavenConfig.config).install();
- return function angularExceptionHandler(ex, cause) {
- $delegate(ex, cause);
- Raven.captureException(ex, {extra: {cause: cause}});
- };
-}
-
-angular.module('ngRaven', [])
- .config(['$provide', ngRavenProvider])
- .value('Raven', Raven);
-
-})(window.Raven, window.angular);
diff --git a/htdocs/includes/raven-js/plugins/backbone.js b/htdocs/includes/raven-js/plugins/backbone.js
deleted file mode 100644
index 09e0f6b8c1c..00000000000
--- a/htdocs/includes/raven-js/plugins/backbone.js
+++ /dev/null
@@ -1,55 +0,0 @@
-/**
- * Backbone.js plugin
- *
- * Patches Backbone.Events callbacks.
- */
-;(function(window, Raven, Backbone) {
-'use strict';
-
-// quit if Backbone isn't on the page
-if (!Backbone) {
- return;
-}
-
-function makeBackboneEventsOn(oldOn) {
- return function BackboneEventsOn(name, callback, context) {
- var wrapCallback = function (cb) {
- if (Object.prototype.toString.call(cb) === '[object Function]') {
- var _callback = cb._callback || cb;
- cb = Raven.wrap(cb);
- cb._callback = _callback;
- }
- return cb;
- };
- if (Object.prototype.toString.call(name) === '[object Object]') {
- // Handle event maps.
- for (var key in name) {
- if (name.hasOwnProperty(key)) {
- name[key] = wrapCallback(name[key]);
- }
- }
- } else {
- callback = wrapCallback(callback);
- }
- return oldOn.call(this, name, callback, context);
- };
-}
-
-// We're too late to catch all of these by simply patching Backbone.Events.on
-var affectedObjects = [
- Backbone.Events,
- Backbone,
- Backbone.Model.prototype,
- Backbone.Collection.prototype,
- Backbone.View.prototype,
- Backbone.Router.prototype,
- Backbone.History.prototype
-], i = 0, l = affectedObjects.length;
-
-for (; i < l; i++) {
- var affected = affectedObjects[i];
- affected.on = makeBackboneEventsOn(affected.on);
- affected.bind = affected.on;
-}
-
-}(window, window.Raven, window.Backbone));
diff --git a/htdocs/includes/raven-js/plugins/console.js b/htdocs/includes/raven-js/plugins/console.js
deleted file mode 100644
index 4d5ba94090f..00000000000
--- a/htdocs/includes/raven-js/plugins/console.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/**
- * console plugin
- *
- * Monkey patches console.* calls into Sentry messages with
- * their appropriate log levels. (Experimental)
- */
-;(function(window, Raven, console) {
-'use strict';
-
-var originalConsole = console,
- logLevels = ['debug', 'info', 'warn', 'error'],
- level = logLevels.pop();
-
-var logForGivenLevel = function(level) {
- var originalConsoleLevel = console[level];
-
- // warning level is the only level that doesn't map up
- // correctly with what Sentry expects.
- if (level === 'warn') level = 'warning';
- return function () {
- var args = [].slice.call(arguments);
- Raven.captureMessage('' + args, {level: level, logger: 'console'});
-
- // this fails for some browsers. :(
- if (originalConsoleLevel) {
- // IE9 doesn't allow calling apply on console functions directly
- // See: https://stackoverflow.com/questions/5472938/does-ie9-support-console-log-and-is-it-a-real-function#answer-5473193
- Function.prototype.bind
- .call(originalConsoleLevel, originalConsole)
- .apply(originalConsole, args);
- }
- };
-};
-
-
-while(level) {
- console[level] = logForGivenLevel(level);
- level = logLevels.pop();
-}
-// export
-window.console = console;
-
-}(window, window.Raven, window.console || {}));
diff --git a/htdocs/includes/raven-js/plugins/ember.js b/htdocs/includes/raven-js/plugins/ember.js
deleted file mode 100644
index c6d0551c709..00000000000
--- a/htdocs/includes/raven-js/plugins/ember.js
+++ /dev/null
@@ -1,29 +0,0 @@
-/**
- * Ember.js plugin
- *
- * Patches event handler callbacks and ajax callbacks.
- */
-;(function(window, Raven, Ember) {
-'use strict';
-
-// quit if Ember isn't on the page
-if (!Ember) {
- return;
-}
-
-var _oldOnError = Ember.onerror;
-Ember.onerror = function EmberOnError(error) {
- Raven.captureException(error);
- if (typeof _oldOnError === 'function') {
- _oldOnError.call(this, error);
- }
-};
-Ember.RSVP.on('error', function (reason) {
- if (reason instanceof Error) {
- Raven.captureException(reason, {extra: {context: 'Unhandled Promise error detected'}});
- } else {
- Raven.captureMessage('Unhandled Promise error detected', {extra: {reason: reason}});
- }
-});
-
-}(window, window.Raven, window.Ember));
diff --git a/htdocs/includes/raven-js/plugins/jquery.js b/htdocs/includes/raven-js/plugins/jquery.js
deleted file mode 100644
index 4a5474cdb86..00000000000
--- a/htdocs/includes/raven-js/plugins/jquery.js
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * jQuery plugin
- *
- * Patches event handler callbacks and ajax callbacks.
- */
-;(function(window, Raven, $) {
-'use strict';
-
-// quit if jQuery isn't on the page
-if (!$) {
- return;
-}
-
-var _oldEventAdd = $.event.add;
-$.event.add = function ravenEventAdd(elem, types, handler, data, selector) {
- var _handler;
-
- if (handler && handler.handler) {
- _handler = handler.handler;
- handler.handler = Raven.wrap(handler.handler);
- } else {
- _handler = handler;
- handler = Raven.wrap(handler);
- }
-
- // If the handler we are attaching doesn’t have the same guid as
- // the original, it will never be removed when someone tries to
- // unbind the original function later. Technically as a result of
- // this our guids are no longer globally unique, but whatever, that
- // never hurt anybody RIGHT?!
- if (_handler.guid) {
- handler.guid = _handler.guid;
- } else {
- handler.guid = _handler.guid = $.guid++;
- }
-
- return _oldEventAdd.call(this, elem, types, handler, data, selector);
-};
-
-var _oldReady = $.fn.ready;
-$.fn.ready = function ravenjQueryReadyWrapper(fn) {
- return _oldReady.call(this, Raven.wrap(fn));
-};
-
-var _oldAjax = $.ajax;
-$.ajax = function ravenAjaxWrapper(url, options) {
- var keys = ['complete', 'error', 'success'], key;
-
- // Taken from https://github.com/jquery/jquery/blob/eee2eaf1d7a189d99106423a4206c224ebd5b848/src/ajax.js#L311-L318
- // If url is an object, simulate pre-1.5 signature
- if (typeof url === 'object') {
- options = url;
- url = undefined;
- }
-
- // Force options to be an object
- options = options || {};
-
- /*jshint -W084*/
- while(key = keys.pop()) {
- if ($.isFunction(options[key])) {
- options[key] = Raven.wrap(options[key]);
- }
- }
- /*jshint +W084*/
-
- try {
- return _oldAjax.call(this, url, options);
- } catch (e) {
- Raven.captureException(e);
- throw e;
- }
-};
-
-}(window, window.Raven, window.jQuery));
diff --git a/htdocs/includes/raven-js/plugins/native.js b/htdocs/includes/raven-js/plugins/native.js
deleted file mode 100644
index c641f13a5d1..00000000000
--- a/htdocs/includes/raven-js/plugins/native.js
+++ /dev/null
@@ -1,33 +0,0 @@
-/**
- * native plugin
- *
- * Extends support for global error handling for asynchronous browser
- * functions. Adopted from Closure Library's errorhandler.js.
- */
-;(function extendToAsynchronousCallbacks(window, Raven) {
-"use strict";
-
-var _helper = function _helper(fnName) {
- var originalFn = window[fnName];
- window[fnName] = function ravenAsyncExtension() {
- // Make a copy of the arguments
- var args = [].slice.call(arguments);
- var originalCallback = args[0];
- if (typeof (originalCallback) === 'function') {
- args[0] = Raven.wrap(originalCallback);
- }
- // IE < 9 doesn't support .call/.apply on setInterval/setTimeout, but it
- // also supports only two arguments and doesn't care what this is, so we
- // can just call the original function directly.
- if (originalFn.apply) {
- return originalFn.apply(this, args);
- } else {
- return originalFn(args[0], args[1]);
- }
- };
-};
-
-_helper('setTimeout');
-_helper('setInterval');
-
-}(window, window.Raven));
diff --git a/htdocs/includes/raven-js/plugins/require.js b/htdocs/includes/raven-js/plugins/require.js
deleted file mode 100644
index 60378a1b0b9..00000000000
--- a/htdocs/includes/raven-js/plugins/require.js
+++ /dev/null
@@ -1,14 +0,0 @@
-/**
- * require.js plugin
- *
- * Automatically wrap define/require callbacks. (Experimental)
- */
-;(function(window, Raven) {
-'use strict';
-
-if (typeof define === 'function' && define.amd) {
- window.define = Raven.wrap({deep: false}, define);
- window.require = Raven.wrap({deep: false}, require);
-}
-
-}(window, window.Raven));
diff --git a/htdocs/includes/raven-js/src/raven.js b/htdocs/includes/raven-js/src/raven.js
deleted file mode 100644
index a2d2b35604b..00000000000
--- a/htdocs/includes/raven-js/src/raven.js
+++ /dev/null
@@ -1,830 +0,0 @@
-'use strict';
-
-// First, check for JSON support
-// If there is no JSON, we no-op the core features of Raven
-// since JSON is required to encode the payload
-var _Raven = window.Raven,
- hasJSON = !!(typeof JSON === 'object' && JSON.stringify),
- lastCapturedException,
- lastEventId,
- globalServer,
- globalUser,
- globalKey,
- globalProject,
- globalOptions = {
- logger: 'javascript',
- ignoreErrors: [],
- ignoreUrls: [],
- whitelistUrls: [],
- includePaths: [],
- collectWindowErrors: true,
- tags: {},
- maxMessageLength: 100,
- extra: {}
- },
- authQueryString,
- isRavenInstalled = false,
-
- objectPrototype = Object.prototype,
- startTime = now();
-
-/*
- * The core Raven singleton
- *
- * @this {Raven}
- */
-var Raven = {
- VERSION: '<%= pkg.version %>',
-
- debug: true,
-
- /*
- * Allow multiple versions of Raven to be installed.
- * Strip Raven from the global context and returns the instance.
- *
- * @return {Raven}
- */
- noConflict: function() {
- window.Raven = _Raven;
- return Raven;
- },
-
- /*
- * Configure Raven with a DSN and extra options
- *
- * @param {string} dsn The public Sentry DSN
- * @param {object} options Optional set of of global options [optional]
- * @return {Raven}
- */
- config: function(dsn, options) {
- if (globalServer) {
- logDebug('error', 'Error: Raven has already been configured');
- return Raven;
- }
- if (!dsn) return Raven;
-
- var uri = parseDSN(dsn),
- lastSlash = uri.path.lastIndexOf('/'),
- path = uri.path.substr(1, lastSlash);
-
- // merge in options
- if (options) {
- each(options, function(key, value){
- globalOptions[key] = value;
- });
- }
-
- // "Script error." is hard coded into browsers for errors that it can't read.
- // this is the result of a script being pulled in from an external domain and CORS.
- globalOptions.ignoreErrors.push(/^Script error\.?$/);
- globalOptions.ignoreErrors.push(/^Javascript error: Script error\.? on line 0$/);
-
- // join regexp rules into one big rule
- globalOptions.ignoreErrors = joinRegExp(globalOptions.ignoreErrors);
- globalOptions.ignoreUrls = globalOptions.ignoreUrls.length ? joinRegExp(globalOptions.ignoreUrls) : false;
- globalOptions.whitelistUrls = globalOptions.whitelistUrls.length ? joinRegExp(globalOptions.whitelistUrls) : false;
- globalOptions.includePaths = joinRegExp(globalOptions.includePaths);
-
- globalKey = uri.user;
- globalProject = uri.path.substr(lastSlash + 1);
-
- // assemble the endpoint from the uri pieces
- globalServer = '//' + uri.host +
- (uri.port ? ':' + uri.port : '') +
- '/' + path + 'api/' + globalProject + '/store/';
-
- if (uri.protocol) {
- globalServer = uri.protocol + ':' + globalServer;
- }
-
- if (globalOptions.fetchContext) {
- TraceKit.remoteFetching = true;
- }
-
- if (globalOptions.linesOfContext) {
- TraceKit.linesOfContext = globalOptions.linesOfContext;
- }
-
- TraceKit.collectWindowErrors = !!globalOptions.collectWindowErrors;
-
- setAuthQueryString();
-
- // return for chaining
- return Raven;
- },
-
- /*
- * Installs a global window.onerror error handler
- * to capture and report uncaught exceptions.
- * At this point, install() is required to be called due
- * to the way TraceKit is set up.
- *
- * @return {Raven}
- */
- install: function() {
- if (isSetup() && !isRavenInstalled) {
- TraceKit.report.subscribe(handleStackInfo);
- isRavenInstalled = true;
- }
-
- return Raven;
- },
-
- /*
- * Wrap code within a context so Raven can capture errors
- * reliably across domains that is executed immediately.
- *
- * @param {object} options A specific set of options for this context [optional]
- * @param {function} func The callback to be immediately executed within the context
- * @param {array} args An array of arguments to be called with the callback [optional]
- */
- context: function(options, func, args) {
- if (isFunction(options)) {
- args = func || [];
- func = options;
- options = undefined;
- }
-
- return Raven.wrap(options, func).apply(this, args);
- },
-
- /*
- * Wrap code within a context and returns back a new function to be executed
- *
- * @param {object} options A specific set of options for this context [optional]
- * @param {function} func The function to be wrapped in a new context
- * @return {function} The newly wrapped functions with a context
- */
- wrap: function(options, func) {
- // 1 argument has been passed, and it's not a function
- // so just return it
- if (isUndefined(func) && !isFunction(options)) {
- return options;
- }
-
- // options is optional
- if (isFunction(options)) {
- func = options;
- options = undefined;
- }
-
- // At this point, we've passed along 2 arguments, and the second one
- // is not a function either, so we'll just return the second argument.
- if (!isFunction(func)) {
- return func;
- }
-
- // We don't wanna wrap it twice!
- if (func.__raven__) {
- return func;
- }
-
- function wrapped() {
- var args = [], i = arguments.length,
- deep = !options || options && options.deep !== false;
- // Recursively wrap all of a function's arguments that are
- // functions themselves.
-
- while(i--) args[i] = deep ? Raven.wrap(options, arguments[i]) : arguments[i];
-
- try {
- /*jshint -W040*/
- return func.apply(this, args);
- } catch(e) {
- Raven.captureException(e, options);
- throw e;
- }
- }
-
- // copy over properties of the old function
- for (var property in func) {
- if (hasKey(func, property)) {
- wrapped[property] = func[property];
- }
- }
-
- // Signal that this function has been wrapped already
- // for both debugging and to prevent it to being wrapped twice
- wrapped.__raven__ = true;
- wrapped.__inner__ = func;
-
- return wrapped;
- },
-
- /*
- * Uninstalls the global error handler.
- *
- * @return {Raven}
- */
- uninstall: function() {
- TraceKit.report.uninstall();
- isRavenInstalled = false;
-
- return Raven;
- },
-
- /*
- * Manually capture an exception and send it over to Sentry
- *
- * @param {error} ex An exception to be logged
- * @param {object} options A specific set of options for this error [optional]
- * @return {Raven}
- */
- captureException: function(ex, options) {
- // If not an Error is passed through, recall as a message instead
- if (!isError(ex)) return Raven.captureMessage(ex, options);
-
- // Store the raw exception object for potential debugging and introspection
- lastCapturedException = ex;
-
- // TraceKit.report will re-raise any exception passed to it,
- // which means you have to wrap it in try/catch. Instead, we
- // can wrap it here and only re-raise if TraceKit.report
- // raises an exception different from the one we asked to
- // report on.
- try {
- TraceKit.report(ex, options);
- } catch(ex1) {
- if(ex !== ex1) {
- throw ex1;
- }
- }
-
- return Raven;
- },
-
- /*
- * Manually send a message to Sentry
- *
- * @param {string} msg A plain message to be captured in Sentry
- * @param {object} options A specific set of options for this message [optional]
- * @return {Raven}
- */
- captureMessage: function(msg, options) {
- // config() automagically converts ignoreErrors from a list to a RegExp so we need to test for an
- // early call; we'll error on the side of logging anything called before configuration since it's
- // probably something you should see:
- if (!!globalOptions.ignoreErrors.test && globalOptions.ignoreErrors.test(msg)) {
- return;
- }
-
- // Fire away!
- send(
- objectMerge({
- message: msg + '' // Make sure it's actually a string
- }, options)
- );
-
- return Raven;
- },
-
- /*
- * Set/clear a user to be sent along with the payload.
- *
- * @param {object} user An object representing user data [optional]
- * @return {Raven}
- */
- setUserContext: function(user) {
- globalUser = user;
-
- return Raven;
- },
-
- /*
- * Set extra attributes to be sent along with the payload.
- *
- * @param {object} extra An object representing extra data [optional]
- * @return {Raven}
- */
- setExtraContext: function(extra) {
- globalOptions.extra = extra || {};
-
- return Raven;
- },
-
- /*
- * Set tags to be sent along with the payload.
- *
- * @param {object} tags An object representing tags [optional]
- * @return {Raven}
- */
- setTagsContext: function(tags) {
- globalOptions.tags = tags || {};
-
- return Raven;
- },
-
- /*
- * Set release version of application
- *
- * @param {string} release Typically something like a git SHA to identify version
- * @return {Raven}
- */
- setReleaseContext: function(release) {
- globalOptions.release = release;
-
- return Raven;
- },
-
- /*
- * Set the dataCallback option
- *
- * @param {function} callback The callback to run which allows the
- * data blob to be mutated before sending
- * @return {Raven}
- */
- setDataCallback: function(callback) {
- globalOptions.dataCallback = callback;
-
- return Raven;
- },
-
- /*
- * Set the shouldSendCallback option
- *
- * @param {function} callback The callback to run which allows
- * introspecting the blob before sending
- * @return {Raven}
- */
- setShouldSendCallback: function(callback) {
- globalOptions.shouldSendCallback = callback;
-
- return Raven;
- },
-
- /*
- * Get the latest raw exception that was captured by Raven.
- *
- * @return {error}
- */
- lastException: function() {
- return lastCapturedException;
- },
-
- /*
- * Get the last event id
- *
- * @return {string}
- */
- lastEventId: function() {
- return lastEventId;
- },
-
- /*
- * Determine if Raven is setup and ready to go.
- *
- * @return {boolean}
- */
- isSetup: function() {
- return isSetup();
- }
-};
-
-Raven.setUser = Raven.setUserContext; // To be deprecated
-
-function triggerEvent(eventType, options) {
- var event, key;
-
- options = options || {};
-
- eventType = 'raven' + eventType.substr(0,1).toUpperCase() + eventType.substr(1);
-
- if (document.createEvent) {
- event = document.createEvent('HTMLEvents');
- event.initEvent(eventType, true, true);
- } else {
- event = document.createEventObject();
- event.eventType = eventType;
- }
-
- for (key in options) if (hasKey(options, key)) {
- event[key] = options[key];
- }
-
- if (document.createEvent) {
- // IE9 if standards
- document.dispatchEvent(event);
- } else {
- // IE8 regardless of Quirks or Standards
- // IE9 if quirks
- try {
- document.fireEvent('on' + event.eventType.toLowerCase(), event);
- } catch(e) {}
- }
-}
-
-var dsnKeys = 'source protocol user pass host port path'.split(' '),
- dsnPattern = /^(?:(\w+):)?\/\/(\w+)(:\w+)?@([\w\.-]+)(?::(\d+))?(\/.*)/;
-
-function RavenConfigError(message) {
- this.name = 'RavenConfigError';
- this.message = message;
-}
-RavenConfigError.prototype = new Error();
-RavenConfigError.prototype.constructor = RavenConfigError;
-
-/**** Private functions ****/
-function parseDSN(str) {
- var m = dsnPattern.exec(str),
- dsn = {},
- i = 7;
-
- try {
- while (i--) dsn[dsnKeys[i]] = m[i] || '';
- } catch(e) {
- throw new RavenConfigError('Invalid DSN: ' + str);
- }
-
- if (dsn.pass)
- throw new RavenConfigError('Do not specify your private key in the DSN!');
-
- return dsn;
-}
-
-function isUndefined(what) {
- return what === void 0;
-}
-
-function isFunction(what) {
- return typeof what === 'function';
-}
-
-function isString(what) {
- return objectPrototype.toString.call(what) === '[object String]';
-}
-
-function isObject(what) {
- return typeof what === 'object' && what !== null;
-}
-
-function isEmptyObject(what) {
- for (var k in what) return false;
- return true;
-}
-
-// Sorta yanked from https://github.com/joyent/node/blob/aa3b4b4/lib/util.js#L560
-// with some tiny modifications
-function isError(what) {
- return isObject(what) &&
- objectPrototype.toString.call(what) === '[object Error]' ||
- what instanceof Error;
-}
-
-/**
- * hasKey, a better form of hasOwnProperty
- * Example: hasKey(MainHostObject, property) === true/false
- *
- * @param {Object} host object to check property
- * @param {string} key to check
- */
-function hasKey(object, key) {
- return objectPrototype.hasOwnProperty.call(object, key);
-}
-
-function each(obj, callback) {
- var i, j;
-
- if (isUndefined(obj.length)) {
- for (i in obj) {
- if (hasKey(obj, i)) {
- callback.call(null, i, obj[i]);
- }
- }
- } else {
- j = obj.length;
- if (j) {
- for (i = 0; i < j; i++) {
- callback.call(null, i, obj[i]);
- }
- }
- }
-}
-
-
-function setAuthQueryString() {
- authQueryString =
- '?sentry_version=4' +
- '&sentry_client=raven-js/' + Raven.VERSION +
- '&sentry_key=' + globalKey;
-}
-
-
-function handleStackInfo(stackInfo, options) {
- var frames = [];
-
- if (stackInfo.stack && stackInfo.stack.length) {
- each(stackInfo.stack, function(i, stack) {
- var frame = normalizeFrame(stack);
- if (frame) {
- frames.push(frame);
- }
- });
- }
-
- triggerEvent('handle', {
- stackInfo: stackInfo,
- options: options
- });
-
- processException(
- stackInfo.name,
- stackInfo.message,
- stackInfo.url,
- stackInfo.lineno,
- frames,
- options
- );
-}
-
-function normalizeFrame(frame) {
- if (!frame.url) return;
-
- // normalize the frames data
- var normalized = {
- filename: frame.url,
- lineno: frame.line,
- colno: frame.column,
- 'function': frame.func || '?'
- }, context = extractContextFromFrame(frame), i;
-
- if (context) {
- var keys = ['pre_context', 'context_line', 'post_context'];
- i = 3;
- while (i--) normalized[keys[i]] = context[i];
- }
-
- normalized.in_app = !( // determine if an exception came from outside of our app
- // first we check the global includePaths list.
- !globalOptions.includePaths.test(normalized.filename) ||
- // Now we check for fun, if the function name is Raven or TraceKit
- /(Raven|TraceKit)\./.test(normalized['function']) ||
- // finally, we do a last ditch effort and check for raven.min.js
- /raven\.(min\.)?js$/.test(normalized.filename)
- );
-
- return normalized;
-}
-
-function extractContextFromFrame(frame) {
- // immediately check if we should even attempt to parse a context
- if (!frame.context || !globalOptions.fetchContext) return;
-
- var context = frame.context,
- pivot = ~~(context.length / 2),
- i = context.length, isMinified = false;
-
- while (i--) {
- // We're making a guess to see if the source is minified or not.
- // To do that, we make the assumption if *any* of the lines passed
- // in are greater than 300 characters long, we bail.
- // Sentry will see that there isn't a context
- if (context[i].length > 300) {
- isMinified = true;
- break;
- }
- }
-
- if (isMinified) {
- // The source is minified and we don't know which column. Fuck it.
- if (isUndefined(frame.column)) return;
-
- // If the source is minified and has a frame column
- // we take a chunk of the offending line to hopefully shed some light
- return [
- [], // no pre_context
- context[pivot].substr(frame.column, 50), // grab 50 characters, starting at the offending column
- [] // no post_context
- ];
- }
-
- return [
- context.slice(0, pivot), // pre_context
- context[pivot], // context_line
- context.slice(pivot + 1) // post_context
- ];
-}
-
-function processException(type, message, fileurl, lineno, frames, options) {
- var stacktrace, label, i;
-
- // In some instances message is not actually a string, no idea why,
- // so we want to always coerce it to one.
- message += '';
-
- // Sometimes an exception is getting logged in Sentry as
- //
- // This can only mean that the message was falsey since this value
- // is hardcoded into Sentry itself.
- // At this point, if the message is falsey, we bail since it's useless
- if (type === 'Error' && !message) return;
-
- if (globalOptions.ignoreErrors.test(message)) return;
-
- if (frames && frames.length) {
- fileurl = frames[0].filename || fileurl;
- // Sentry expects frames oldest to newest
- // and JS sends them as newest to oldest
- frames.reverse();
- stacktrace = {frames: frames};
- } else if (fileurl) {
- stacktrace = {
- frames: [{
- filename: fileurl,
- lineno: lineno,
- in_app: true
- }]
- };
- }
-
- // Truncate the message to a max of characters
- message = truncate(message, globalOptions.maxMessageLength);
-
- if (globalOptions.ignoreUrls && globalOptions.ignoreUrls.test(fileurl)) return;
- if (globalOptions.whitelistUrls && !globalOptions.whitelistUrls.test(fileurl)) return;
-
- label = lineno ? message + ' at ' + lineno : message;
-
- // Fire away!
- send(
- objectMerge({
- // sentry.interfaces.Exception
- exception: {
- type: type,
- value: message
- },
- // sentry.interfaces.Stacktrace
- stacktrace: stacktrace,
- culprit: fileurl,
- message: label
- }, options)
- );
-}
-
-function objectMerge(obj1, obj2) {
- if (!obj2) {
- return obj1;
- }
- each(obj2, function(key, value){
- obj1[key] = value;
- });
- return obj1;
-}
-
-function truncate(str, max) {
- return str.length <= max ? str : str.substr(0, max) + '\u2026';
-}
-
-function now() {
- return +new Date();
-}
-
-function getHttpData() {
- var http = {
- url: document.location.href,
- headers: {
- 'User-Agent': navigator.userAgent
- }
- };
-
- if (document.referrer) {
- http.headers.Referer = document.referrer;
- }
-
- return http;
-}
-
-function send(data) {
- if (!isSetup()) return;
-
- data = objectMerge({
- project: globalProject,
- logger: globalOptions.logger,
- platform: 'javascript',
- // sentry.interfaces.Http
- request: getHttpData()
- }, data);
-
- // Merge in the tags and extra separately since objectMerge doesn't handle a deep merge
- data.tags = objectMerge(objectMerge({}, globalOptions.tags), data.tags);
- data.extra = objectMerge(objectMerge({}, globalOptions.extra), data.extra);
-
- // Send along our own collected metadata with extra
- data.extra = objectMerge({
- 'session:duration': now() - startTime
- }, data.extra);
-
- // If there are no tags/extra, strip the key from the payload alltogther.
- if (isEmptyObject(data.tags)) delete data.tags;
-
- if (globalUser) {
- // sentry.interfaces.User
- data.user = globalUser;
- }
-
- // Include the release iff it's defined in globalOptions
- if (globalOptions.release) data.release = globalOptions.release;
-
- if (isFunction(globalOptions.dataCallback)) {
- data = globalOptions.dataCallback(data) || data;
- }
-
- // Why??????????
- if (!data || isEmptyObject(data)) {
- return;
- }
-
- // Check if the request should be filtered or not
- if (isFunction(globalOptions.shouldSendCallback) && !globalOptions.shouldSendCallback(data)) {
- return;
- }
-
- // Send along an event_id if not explicitly passed.
- // This event_id can be used to reference the error within Sentry itself.
- // Set lastEventId after we know the error should actually be sent
- lastEventId = data.event_id || (data.event_id = uuid4());
-
- makeRequest(data);
-}
-
-
-function makeRequest(data) {
- var img = newImage(),
- src = globalServer + authQueryString + '&sentry_data=' + encodeURIComponent(JSON.stringify(data));
-
- img.crossOrigin = 'anonymous';
- img.onload = function success() {
- triggerEvent('success', {
- data: data,
- src: src
- });
- };
- img.onerror = img.onabort = function failure() {
- triggerEvent('failure', {
- data: data,
- src: src
- });
- };
- img.src = src;
-}
-
-// Note: this is shitty, but I can't figure out how to get
-// sinon to stub document.createElement without breaking everything
-// so this wrapper is just so I can stub it for tests.
-function newImage() {
- return document.createElement('img');
-}
-
-function isSetup() {
- if (!hasJSON) return false; // needs JSON support
- if (!globalServer) {
- logDebug('error', 'Error: Raven has not been configured.');
- return false;
- }
- return true;
-}
-
-function joinRegExp(patterns) {
- // Combine an array of regular expressions and strings into one large regexp
- // Be mad.
- var sources = [],
- i = 0, len = patterns.length,
- pattern;
-
- for (; i < len; i++) {
- pattern = patterns[i];
- if (isString(pattern)) {
- // If it's a string, we need to escape it
- // Taken from: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
- sources.push(pattern.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1"));
- } else if (pattern && pattern.source) {
- // If it's a regexp already, we want to extract the source
- sources.push(pattern.source);
- }
- // Intentionally skip other cases
- }
- return new RegExp(sources.join('|'), 'i');
-}
-
-// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/2117523#2117523
-function uuid4() {
- return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- var r = Math.random()*16|0,
- v = c == 'x' ? r : (r&0x3|0x8);
- return v.toString(16);
- });
-}
-
-function logDebug(level, message) {
- if (window.console && console[level] && Raven.debug) {
- console[level](message);
- }
-}
-
-function afterLoad() {
- // Attempt to initialize Raven on load
- var RavenConfig = window.RavenConfig;
- if (RavenConfig) {
- Raven.config(RavenConfig.dsn, RavenConfig.config).install();
- }
-}
-afterLoad();
diff --git a/htdocs/includes/raven-js/template/_copyright.js b/htdocs/includes/raven-js/template/_copyright.js
deleted file mode 100644
index f1ee87084f8..00000000000
--- a/htdocs/includes/raven-js/template/_copyright.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*! Raven.js <%= pkg.release %> (<%= gitinfo.local.branch.current.shortSHA %>) | github.com/getsentry/raven-js */
-
-/*
- * Includes TraceKit
- * https://github.com/getsentry/TraceKit
- *
- * Copyright <%= grunt.template.today('yyyy') %> Matt Robenolt and other contributors
- * Released under the BSD license
- * https://github.com/getsentry/raven-js/blob/master/LICENSE
- *
- */
diff --git a/htdocs/includes/raven-js/template/_footer.js b/htdocs/includes/raven-js/template/_footer.js
deleted file mode 100644
index 9d102d2458d..00000000000
--- a/htdocs/includes/raven-js/template/_footer.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// Expose Raven to the world
-if (typeof define === 'function' && define.amd) {
- // AMD
- window.Raven = Raven;
- define('raven', [], function() {
- return Raven;
- });
-} else if (typeof module === 'object') {
- // browserify
- module.exports = Raven;
-} else if (typeof exports === 'object') {
- // CommonJS
- exports = Raven;
-} else {
- // Everything else
- window.Raven = Raven;
-}
-
-})(typeof window !== 'undefined' ? window : this);
diff --git a/htdocs/includes/raven-js/template/_header.js b/htdocs/includes/raven-js/template/_header.js
deleted file mode 100644
index 27595a61a2d..00000000000
--- a/htdocs/includes/raven-js/template/_header.js
+++ /dev/null
@@ -1,2 +0,0 @@
-;(function(window, undefined){
-'use strict';
diff --git a/htdocs/includes/raven-js/test/index.html b/htdocs/includes/raven-js/test/index.html
deleted file mode 100644
index b5188ed0600..00000000000
--- a/htdocs/includes/raven-js/test/index.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
- Raven.js Test Suite
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/htdocs/includes/raven-js/test/raven.test.js b/htdocs/includes/raven-js/test/raven.test.js
deleted file mode 100644
index e26a36ef174..00000000000
--- a/htdocs/includes/raven-js/test/raven.test.js
+++ /dev/null
@@ -1,1773 +0,0 @@
-function flushRavenState() {
- authQueryString = undefined;
- hasJSON = !isUndefined(window.JSON);
- lastCapturedException = undefined;
- lastEventId = undefined;
- globalServer = undefined;
- globalUser = undefined;
- globalProject = undefined;
- globalOptions = {
- logger: 'javascript',
- release: undefined,
- ignoreErrors: [],
- ignoreUrls: [],
- whitelistUrls: [],
- includePaths: [],
- collectWindowErrors: true,
- maxMessageLength: 100,
- tags: {},
- extra: {}
- },
- startTime = 0
- ;
-
- Raven.uninstall();
-}
-
-// window.console must be stubbed in for browsers that don't have it
-if (typeof window.console === 'undefined') {
- console = {error: function(){}};
-}
-
-var SENTRY_DSN = 'http://abc@example.com:80/2';
-
-function setupRaven() {
- Raven.config(SENTRY_DSN);
-}
-
-// patched to return a predictable result
-function uuid4() {
- return 'abc123';
-}
-
-// patched to be predictable
-function now() {
- return 100;
-}
-
-describe('TraceKit', function(){
- describe('stacktrace info', function() {
- it('should not remove anonymous functions from the stack', function() {
- // mock up an error object with a stack trace that includes both
- // named functions and anonymous functions
- var stack_str = "" +
- " Error: \n" +
- " at new (http://example.com/js/test.js:63)\n" + // stack[0]
- " at namedFunc0 (http://example.com/js/script.js:10)\n" + // stack[1]
- " at http://example.com/js/test.js:65\n" + // stack[2]
- " at namedFunc2 (http://example.com/js/script.js:20)\n" + // stack[3]
- " at http://example.com/js/test.js:67\n" + // stack[4]
- " at namedFunc4 (http://example.com/js/script.js:100001)"; // stack[5]
- var mock_err = { stack: stack_str };
- var trace = TraceKit.computeStackTrace.computeStackTraceFromStackProp(mock_err);
-
- // Make sure TraceKit didn't remove the anonymous functions
- // from the stack like it used to :)
- assert.equal(trace.stack[0].func, 'new ');
- assert.equal(trace.stack[1].func, 'namedFunc0');
- assert.equal(trace.stack[2].func, '?');
- assert.equal(trace.stack[3].func, 'namedFunc2');
- assert.equal(trace.stack[4].func, '?');
- assert.equal(trace.stack[5].func, 'namedFunc4');
- });
- });
- describe('error notifications', function(){
- var testMessage = "__mocha_ignore__";
- var subscriptionHandler;
- // TraceKit waits 2000ms for window.onerror to fire, so give the tests
- // some extra time.
- this.timeout(3000);
-
- before(function() {
- // Prevent the onerror call that's part of our tests from getting to
- // mocha's handler, which would treat it as a test failure.
- //
- // We set this up here and don't ever restore the old handler, because
- // we can't do that without clobbering TraceKit's handler, which can only
- // be installed once.
- var oldOnError = window.onerror;
- window.onerror = function(message) {
- if (message == testMessage) {
- return true;
- }
- return oldOnError.apply(this, arguments);
- };
- });
-
- afterEach(function() {
- if (subscriptionHandler) {
- TraceKit.report.unsubscribe(subscriptionHandler);
- subscriptionHandler = null;
- }
- });
-
- function testErrorNotification(collectWindowErrors, callOnError, numReports, done) {
- var extraVal = "foo";
- var numDone = 0;
- // TraceKit's collectWindowErrors flag shouldn't affect direct calls
- // to TraceKit.report, so we parameterize it for the tests.
- TraceKit.collectWindowErrors = collectWindowErrors;
-
- subscriptionHandler = function(stackInfo, extra) {
- assert.equal(extra, extraVal);
- numDone++;
- if (numDone == numReports) {
- done();
- }
- };
- TraceKit.report.subscribe(subscriptionHandler);
-
- // TraceKit.report always throws an exception in order to trigger
- // window.onerror so it can gather more stack data. Mocha treats
- // uncaught exceptions as errors, so we catch it via assert.throws
- // here (and manually call window.onerror later if appropriate).
- //
- // We test multiple reports because TraceKit has special logic for when
- // report() is called a second time before either a timeout elapses or
- // window.onerror is called (which is why we always call window.onerror
- // only once below, after all calls to report()).
- for (var i=0; i < numReports; i++) {
- var e = new Error('testing');
- assert.throws(function() {
- TraceKit.report(e, extraVal);
- }, e);
- }
- // The call to report should work whether or not window.onerror is
- // triggered, so we parameterize it for the tests. We only call it
- // once, regardless of numReports, because the case we want to test for
- // multiple reports is when window.onerror is *not* called between them.
- if (callOnError) {
- window.onerror(testMessage);
- }
- }
-
- Mocha.utils.forEach([false, true], function(collectWindowErrors) {
- Mocha.utils.forEach([false, true], function(callOnError) {
- Mocha.utils.forEach([1, 2], function(numReports) {
- it('it should receive arguments from report() when' +
- ' collectWindowErrors is ' + collectWindowErrors +
- ' and callOnError is ' + callOnError +
- ' and numReports is ' + numReports, function(done) {
- testErrorNotification(collectWindowErrors, callOnError, numReports, done);
- });
- });
- });
- });
- });
-});
-
-describe('globals', function() {
- beforeEach(function() {
- setupRaven();
- globalOptions.fetchContext = true;
- });
-
- afterEach(function() {
- flushRavenState();
- });
-
- describe('getHttpData', function() {
- var data = getHttpData();
-
- it('should have a url', function() {
- assert.equal(data.url, window.location.href);
- });
-
- it('should have the user-agent header', function() {
- assert.equal(data.headers['User-Agent'], navigator.userAgent);
- });
-
- it('should have referer header when available', function() {
- // lol this test is awful
- if (window.document.referrer) {
- assert.equal(data.headers.Referer, window.document.referrer);
- } else {
- assert.isUndefined(data.headers.Referer);
- }
- });
-
- });
-
- describe('isUndefined', function() {
- it('should do as advertised', function() {
- assert.isTrue(isUndefined());
- assert.isFalse(isUndefined({}));
- assert.isFalse(isUndefined(''));
- assert.isTrue(isUndefined(undefined));
- });
- });
-
- describe('isFunction', function() {
- it('should do as advertised', function() {
- assert.isTrue(isFunction(function(){}));
- assert.isFalse(isFunction({}));
- assert.isFalse(isFunction(''));
- assert.isFalse(isFunction(undefined));
- });
- });
-
- describe('isString', function() {
- it('should do as advertised', function() {
- assert.isTrue(isString(''));
- assert.isTrue(isString(String('')));
- assert.isTrue(isString(new String('')));
- assert.isFalse(isString({}));
- assert.isFalse(isString(undefined));
- assert.isFalse(isString(function(){}));
- });
- });
-
- describe('isObject', function() {
- it('should do as advertised', function() {
- assert.isTrue(isObject({}));
- assert.isTrue(isObject(new Error()))
- assert.isFalse(isObject(''));
- });
- });
-
- describe('isEmptyObject', function() {
- it('should work as advertised', function() {
- assert.isTrue(isEmptyObject({}));
- assert.isFalse(isEmptyObject({foo: 1}));
- });
- });
-
- describe('isError', function() {
- it('should work as advertised', function() {
- assert.isTrue(isError(new Error()));
- assert.isTrue(isError(new ReferenceError()));
- assert.isTrue(isError(new RavenConfigError()));
- assert.isFalse(isError({}));
- assert.isFalse(isError(''));
- assert.isFalse(isError(true));
- });
- });
-
- describe('objectMerge', function() {
- it('should work as advertised', function() {
- assert.deepEqual(objectMerge({}, {}), {});
- assert.deepEqual(objectMerge({a:1}, {b:2}), {a:1, b:2});
- assert.deepEqual(objectMerge({a:1}), {a:1});
- });
- });
-
- describe('truncate', function() {
- it('should work as advertised', function() {
- assert.equal(truncate('lolol', 3), 'lol\u2026');
- assert.equal(truncate('lolol', 10), 'lolol');
- assert.equal(truncate('lol', 3), 'lol');
- });
- });
-
- describe('isSetup', function() {
- it('should return false with no JSON support', function() {
- globalServer = 'http://localhost/';
- hasJSON = false;
- assert.isFalse(isSetup());
- });
-
- it('should return false when Raven is not configured', function() {
- hasJSON = true; // be explicit
- globalServer = undefined;
- this.sinon.stub(window, 'logDebug');
- assert.isFalse(isSetup());
- });
-
- it('should return true when everything is all gravy', function() {
- hasJSON = true;
- assert.isTrue(isSetup());
- });
- });
-
- describe('logDebug', function() {
- var level = 'error',
- message = 'foobar';
-
- it('should not write to console when Raven.debug is false', function() {
- Raven.debug = false;
- this.sinon.stub(console, level);
- logDebug(level, message);
- assert.isFalse(console[level].called);
- });
-
- it('should write to console when Raven.debug is true', function() {
- Raven.debug = true;
- this.sinon.stub(console, level);
- logDebug(level, message);
- assert.isTrue(console[level].calledOnce);
- });
- });
-
- describe('setAuthQueryString', function() {
- it('should return a properly formatted string and cache it', function() {
- var expected = '?sentry_version=4&sentry_client=raven-js/<%= pkg.version %>&sentry_key=abc';
- setAuthQueryString();
- assert.strictEqual(authQueryString, expected);
- });
- });
-
- describe('parseDSN', function() {
- it('should do what it advertises', function() {
- var pieces = parseDSN('http://abc@example.com:80/2');
- assert.strictEqual(pieces.protocol, 'http');
- assert.strictEqual(pieces.user, 'abc');
- assert.strictEqual(pieces.port, '80');
- assert.strictEqual(pieces.path, '/2');
- assert.strictEqual(pieces.host, 'example.com');
- });
-
- it('should parse protocol relative', function() {
- var pieces = parseDSN('//user@mattrobenolt.com/');
- assert.strictEqual(pieces.protocol, '');
- assert.strictEqual(pieces.user, 'user');
- assert.strictEqual(pieces.port, '');
- assert.strictEqual(pieces.path, '/');
- assert.strictEqual(pieces.host, 'mattrobenolt.com');
- });
-
- it('should parse domain with hyphen', function() {
- var pieces = parseDSN('http://user@matt-robenolt.com/1');
- assert.strictEqual(pieces.protocol, 'http');
- assert.strictEqual(pieces.user, 'user');
- assert.strictEqual(pieces.port, '');
- assert.strictEqual(pieces.path, '/1');
- assert.strictEqual(pieces.host, 'matt-robenolt.com');
- });
-
- it('should raise a RavenConfigError when setting a password', function() {
- try {
- parseDSN('http://user:pass@example.com/2');
- } catch(e) {
- return assert.equal(e.name, 'RavenConfigError');
- }
- // shouldn't hit this
- assert.isTrue(false);
- });
-
- it('should raise a RavenConfigError with an invalid DSN', function() {
- try {
- parseDSN('lol');
- } catch(e) {
- return assert.equal(e.name, 'RavenConfigError');
- }
- // shouldn't hit this
- assert.isTrue(false);
- });
- });
-
- describe('normalizeFrame', function() {
- it('should handle a normal frame', function() {
- var context = [
- ['line1'], // pre
- 'line2', // culprit
- ['line3'] // post
- ];
- this.sinon.stub(window, 'extractContextFromFrame').returns(context);
- var frame = {
- url: 'http://example.com/path/file.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- globalOptions.fetchContext = true;
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://example.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- pre_context: ['line1'],
- context_line: 'line2',
- post_context: ['line3'],
- in_app: true
- });
- });
-
- it('should handle a frame without context', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://example.com/path/file.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- globalOptions.fetchContext = true;
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://example.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- in_app: true
- });
- });
-
- it('should not mark `in_app` if rules match', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://example.com/path/file.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- globalOptions.fetchContext = true;
- globalOptions.includePaths = /^http:\/\/example\.com/;
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://example.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- in_app: true
- });
- });
-
- it('should mark `in_app` if rules do not match', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://lol.com/path/file.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- globalOptions.fetchContext = true;
- globalOptions.includePaths = /^http:\/\/example\.com/;
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://lol.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- in_app: false
- });
- });
-
- it('should mark `in_app` for raven.js', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://lol.com/path/raven.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://lol.com/path/raven.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- in_app: false
- });
- });
-
- it('should mark `in_app` for raven.min.js', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://lol.com/path/raven.min.js',
- line: 10,
- column: 11,
- func: 'lol'
- // context: [] context is stubbed
- };
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://lol.com/path/raven.min.js',
- lineno: 10,
- colno: 11,
- 'function': 'lol',
- in_app: false
- });
- });
-
- it('should mark `in_app` for Raven', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://lol.com/path/file.js',
- line: 10,
- column: 11,
- func: 'Raven.wrap'
- // context: [] context is stubbed
- };
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://lol.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'Raven.wrap',
- in_app: false
- });
- });
-
- it('should mark `in_app` for TraceKit', function() {
- this.sinon.stub(window, 'extractContextFromFrame').returns(undefined);
- var frame = {
- url: 'http://lol.com/path/file.js',
- line: 10,
- column: 11,
- func: 'TraceKit.lol'
- // context: [] context is stubbed
- };
-
- assert.deepEqual(normalizeFrame(frame), {
- filename: 'http://lol.com/path/file.js',
- lineno: 10,
- colno: 11,
- 'function': 'TraceKit.lol',
- in_app: false
- });
- });
- });
-
- describe('extractContextFromFrame', function() {
- it('should handle a normal frame', function() {
- var frame = {
- column: 2,
- context: [
- 'line1',
- 'line2',
- 'line3',
- 'line4',
- 'line5',
- 'culprit',
- 'line7',
- 'line8',
- 'line9',
- 'line10',
- 'line11'
- ]
- };
- var context = extractContextFromFrame(frame);
- assert.deepEqual(context, [
- ['line1', 'line2', 'line3', 'line4', 'line5'],
- 'culprit',
- ['line7', 'line8', 'line9', 'line10', 'line11']
- ]);
- });
-
- it('should return nothing if there is no context', function() {
- var frame = {
- column: 2
- };
- assert.isUndefined(extractContextFromFrame(frame));
- });
-
- it('should reject a context if a line is too long without a column', function() {
- var frame = {
- context: [
- new Array(1000).join('f') // generate a line that is 1000 chars long
- ]
- };
- assert.isUndefined(extractContextFromFrame(frame));
- });
-
- it('should reject a minified context with fetchContext disabled', function() {
- var frame = {
- column: 2,
- context: [
- 'line1',
- 'line2',
- 'line3',
- 'line4',
- 'line5',
- 'culprit',
- 'line7',
- 'line8',
- 'line9',
- 'line10',
- 'line11'
- ]
- };
- globalOptions.fetchContext = false;
- assert.isUndefined(extractContextFromFrame(frame));
- });
-
- it('should truncate the minified line if there is a column number without sourcemaps enabled', function() {
- // Note to future self:
- // Array(51).join('f').length === 50
- var frame = {
- column: 2,
- context: [
- 'aa' + (new Array(51).join('f')) + (new Array(500).join('z'))
- ]
- };
- assert.deepEqual(extractContextFromFrame(frame), [[], new Array(51).join('f'), []]);
- });
- });
-
- describe('processException', function() {
- it('should respect `ignoreErrors`', function() {
- this.sinon.stub(window, 'send');
-
- globalOptions.ignoreErrors = joinRegExp(['e1', 'e2']);
- processException('Error', 'e1', 'http://example.com', []);
- assert.isFalse(window.send.called);
- processException('Error', 'e2', 'http://example.com', []);
- assert.isFalse(window.send.called);
- processException('Error', 'error', 'http://example.com', []);
- assert.isTrue(window.send.calledOnce);
- });
-
- it('should respect `ignoreUrls`', function() {
- this.sinon.stub(window, 'send');
-
- globalOptions.ignoreUrls = joinRegExp([/.+?host1.+/, /.+?host2.+/]);
- processException('Error', 'error', 'http://host1/', []);
- assert.isFalse(window.send.called);
- processException('Error', 'error', 'http://host2/', []);
- assert.isFalse(window.send.called);
- processException('Error', 'error', 'http://host3/', []);
- assert.isTrue(window.send.calledOnce);
- });
-
- it('should respect `whitelistUrls`', function() {
- this.sinon.stub(window, 'send');
-
- globalOptions.whitelistUrls = joinRegExp([/.+?host1.+/, /.+?host2.+/]);
- processException('Error', 'error', 'http://host1/', []);
- assert.equal(window.send.callCount, 1);
- processException('Error', 'error', 'http://host2/', []);
- assert.equal(window.send.callCount, 2);
- processException('Error', 'error', 'http://host3/', []);
- assert.equal(window.send.callCount, 2);
- });
-
- it('should send a proper payload with frames', function() {
- this.sinon.stub(window, 'send');
-
- var frames = [
- {
- filename: 'http://example.com/file1.js'
- },
- {
- filename: 'http://example.com/file2.js'
- }
- ], framesFlipped = frames.slice(0);
-
- framesFlipped.reverse();
-
- processException('Error', 'lol', 'http://example.com/override.js', 10, frames.slice(0), {});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: framesFlipped
- },
- culprit: 'http://example.com/file1.js',
- message: 'lol at 10'
- }]);
-
- processException('Error', 'lol', '', 10, frames.slice(0), {});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: framesFlipped
- },
- culprit: 'http://example.com/file1.js',
- message: 'lol at 10'
- }]);
-
- processException('Error', 'lol', '', 10, frames.slice(0), {extra: 'awesome'});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: framesFlipped
- },
- culprit: 'http://example.com/file1.js',
- message: 'lol at 10',
- extra: 'awesome'
- }]);
- });
-
- it('should send a proper payload without frames', function() {
- this.sinon.stub(window, 'send');
-
- processException('Error', 'lol', 'http://example.com/override.js', 10, [], {});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com/override.js',
- lineno: 10,
- in_app: true
- }]
- },
- culprit: 'http://example.com/override.js',
- message: 'lol at 10'
- }]);
-
- processException('Error', 'lol', 'http://example.com/override.js', 10, [], {});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com/override.js',
- lineno: 10,
- in_app: true
- }]
- },
- culprit: 'http://example.com/override.js',
- message: 'lol at 10'
- }]);
-
- processException('Error', 'lol', 'http://example.com/override.js', 10, [], {extra: 'awesome'});
- assert.deepEqual(window.send.lastCall.args, [{
- exception: {
- type: 'Error',
- value: 'lol'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com/override.js',
- lineno: 10,
- in_app: true
- }]
- },
- culprit: 'http://example.com/override.js',
- message: 'lol at 10',
- extra: 'awesome'
- }]);
- });
-
- it('should ignored falsey messages', function() {
- this.sinon.stub(window, 'send');
-
- processException('Error', '', 'http://example.com', []);
- assert.isFalse(window.send.called);
-
- processException('TypeError', '', 'http://example.com', []);
- assert.isTrue(window.send.called);
- });
-
- it('should not blow up with `undefined` message', function() {
- this.sinon.stub(window, 'send');
-
- processException('TypeError', undefined, 'http://example.com', []);
- assert.isTrue(window.send.called);
- });
-
- it('should truncate messages to the specified length', function() {
- this.sinon.stub(window, 'send');
-
- processException('TypeError', new Array(500).join('a'), 'http://example.com', []);
- assert.deepEqual(window.send.lastCall.args, [{
- message: new Array(101).join('a')+'\u2026 at ',
- exception: {
- type: 'TypeError',
- value: new Array(101).join('a')+'\u2026'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com',
- lineno: [],
- in_app: true
- }]
- },
- culprit: 'http://example.com',
- }]);
-
- globalOptions.maxMessageLength = 150;
-
- processException('TypeError', new Array(500).join('a'), 'http://example.com', []);
- assert.deepEqual(window.send.lastCall.args, [{
- message: new Array(151).join('a')+'\u2026 at ',
- exception: {
- type: 'TypeError',
- value: new Array(151).join('a')+'\u2026'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com',
- lineno: [],
- in_app: true
- }]
- },
- culprit: 'http://example.com',
- }]);
- });
- });
-
- describe('send', function() {
- it('should check `isSetup`', function() {
- this.sinon.stub(window, 'isSetup').returns(false);
- this.sinon.stub(window, 'makeRequest');
-
- send();
- assert.isTrue(window.isSetup.calledOnce);
- assert.isFalse(window.makeRequest.calledOnce);
- });
-
- it('should build a good data payload', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalProject = '2';
- globalOptions = {
- logger: 'javascript'
- };
-
- send({foo: 'bar'});
- assert.deepEqual(window.makeRequest.lastCall.args[0], {
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- foo: 'bar',
- extra: {'session:duration': 100}
- });
- });
-
- it('should build a good data payload with a User', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalProject = '2';
- globalOptions = {
- logger: 'javascript'
- };
-
- globalUser = {name: 'Matt'};
-
- send({foo: 'bar'});
- assert.deepEqual(window.makeRequest.lastCall.args, [{
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- user: {
- name: 'Matt'
- },
- foo: 'bar',
- extra: {'session:duration': 100}
- }]);
- });
-
- it('should merge in global tags', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalProject = '2';
- globalOptions = {
- logger: 'javascript',
- tags: {tag1: 'value1'}
- };
-
-
- send({tags: {tag2: 'value2'}});
- assert.deepEqual(window.makeRequest.lastCall.args, [{
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- tags: {tag1: 'value1', tag2: 'value2'},
- extra: {'session:duration': 100}
- }]);
- assert.deepEqual(globalOptions, {
- logger: 'javascript',
- tags: {tag1: 'value1'}
- });
- });
-
- it('should merge in global extra', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalProject = '2';
- globalOptions = {
- logger: 'javascript',
- extra: {key1: 'value1'}
- };
-
-
- send({extra: {key2: 'value2'}});
- assert.deepEqual(window.makeRequest.lastCall.args, [{
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- extra: {key1: 'value1', key2: 'value2', 'session:duration': 100}
- }]);
- assert.deepEqual(globalOptions, {
- logger: 'javascript',
- extra: {key1: 'value1'}
- });
- });
-
- it('should let dataCallback override everything', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
-
- globalOptions = {
- projectId: 2,
- logger: 'javascript',
- dataCallback: function() {
- return {lol: 'ibrokeit'};
- }
- };
-
- globalUser = {name: 'Matt'};
-
- send({foo: 'bar'});
- assert.deepEqual(window.makeRequest.lastCall.args, [{
- lol: 'ibrokeit',
- event_id: 'abc123',
- }]);
- });
-
- it('should ignore dataCallback if it does not return anything', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalProject = '2';
- globalOptions = {
- logger: 'javascript',
- dataCallback: function() {
- return;
- }
- };
-
- send({foo: 'bar'});
- assert.deepEqual(window.makeRequest.lastCall.args[0], {
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- foo: 'bar',
- extra: {'session:duration': 100}
- });
- });
-
- it('should strip empty tags', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalOptions = {
- projectId: 2,
- logger: 'javascript',
- tags: {}
- };
-
- send({foo: 'bar', tags: {}, extra: {}});
- assert.deepEqual(window.makeRequest.lastCall.args[0], {
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- foo: 'bar',
- extra: {'session:duration': 100}
- });
- });
-
- it('should attach release if available', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(window, 'makeRequest');
- this.sinon.stub(window, 'getHttpData').returns({
- url: 'http://localhost/?a=b',
- headers: {'User-Agent': 'lolbrowser'}
- });
-
- globalOptions = {
- projectId: 2,
- logger: 'javascript',
- release: 'abc123',
- };
-
- send({foo: 'bar'});
- assert.deepEqual(window.makeRequest.lastCall.args[0], {
- project: '2',
- release: 'abc123',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: 'http://localhost/?a=b',
- headers: {
- 'User-Agent': 'lolbrowser'
- }
- },
- event_id: 'abc123',
- foo: 'bar',
- extra: {'session:duration': 100}
- });
- });
- });
-
- describe('makeRequest', function() {
- it('should load an Image', function() {
- authQueryString = '?lol';
- globalServer = 'http://localhost/';
- var imageCache = [];
- this.sinon.stub(window, 'newImage', function(){ var img = {}; imageCache.push(img); return img; });
-
- makeRequest({foo: 'bar'});
- assert.equal(imageCache.length, 1);
- assert.equal(imageCache[0].src, 'http://localhost/?lol&sentry_data=%7B%22foo%22%3A%22bar%22%7D');
- });
- });
-
- describe('handleStackInfo', function() {
- it('should work as advertised', function() {
- var frame = {url: 'http://example.com'};
- this.sinon.stub(window, 'normalizeFrame').returns(frame);
- this.sinon.stub(window, 'processException');
-
- var stackInfo = {
- name: 'Matt',
- message: 'hey',
- url: 'http://example.com',
- lineno: 10,
- stack: [
- frame, frame
- ]
- };
-
- handleStackInfo(stackInfo, {foo: 'bar'});
- assert.deepEqual(window.processException.lastCall.args, [
- 'Matt', 'hey', 'http://example.com', 10, [frame, frame], {foo: 'bar'}
- ]);
- });
-
- it('should work as advertised #integration', function() {
- this.sinon.stub(window, 'makeRequest');
- var stackInfo = {
- name: 'Error',
- message: 'crap',
- url: 'http://example.com',
- lineno: 10,
- stack: [
- {
- url: 'http://example.com/file1.js',
- line: 10,
- column: 11,
- func: 'broken',
- context: [
- 'line1',
- 'line2',
- 'line3'
- ]
- },
- {
- url: 'http://example.com/file2.js',
- line: 12,
- column: 13,
- func: 'lol',
- context: [
- 'line4',
- 'line5',
- 'line6'
- ]
- }
- ]
- };
-
- handleStackInfo(stackInfo, {foo: 'bar'});
- assert.isTrue(window.makeRequest.calledOnce);
- /* This is commented out because chai is broken.
-
- assert.deepEqual(window.makeRequest.lastCall.args, [{
- project: '2',
- logger: 'javascript',
- platform: 'javascript',
- request: {
- url: window.location.protocol + '//' + window.location.host + window.location.pathname,
- querystring: window.location.search.slice(1)
- },
- exception: {
- type: 'Error',
- value: 'crap'
- },
- stacktrace: {
- frames: [{
- filename: 'http://example.com/file1.js',
- filename: 'file1.js',
- lineno: 10,
- colno: 11,
- 'function': 'broken',
- post_context: ['line3'],
- context_line: 'line2',
- pre_context: ['line1']
- }, {
- filename: 'http://example.com/file2.js',
- filename: 'file2.js',
- lineno: 12,
- colno: 13,
- 'function': 'lol',
- post_context: ['line6'],
- context_line: 'line5',
- pre_context: ['line4']
- }]
- },
- culprit: 'http://example.com',
- message: 'crap at 10',
- foo: 'bar'
- }]);
- */
- });
-
- it('should ignore frames that dont have a url', function() {
- this.sinon.stub(window, 'normalizeFrame').returns(undefined);
- this.sinon.stub(window, 'processException');
-
- var stackInfo = {
- name: 'Matt',
- message: 'hey',
- url: 'http://example.com',
- lineno: 10,
- stack: new Array(2)
- };
-
- handleStackInfo(stackInfo, {foo: 'bar'});
- assert.deepEqual(window.processException.lastCall.args, [
- 'Matt', 'hey', 'http://example.com', 10, [], {foo: 'bar'}
- ]);
- });
-
- it('should not shit when there is no stack object from TK', function() {
- this.sinon.stub(window, 'normalizeFrame').returns(undefined);
- this.sinon.stub(window, 'processException');
-
- var stackInfo = {
- name: 'Matt',
- message: 'hey',
- url: 'http://example.com',
- lineno: 10
- // stack: new Array(2)
- };
-
- handleStackInfo(stackInfo);
- assert.isFalse(window.normalizeFrame.called);
- assert.deepEqual(window.processException.lastCall.args, [
- 'Matt', 'hey', 'http://example.com', 10, [], undefined
- ]);
- });
-
- it('should detect 2-words patterns (angularjs frequent case)', function() {
- this.sinon.stub(window, 'normalizeFrame').returns(undefined);
- this.sinon.stub(window, 'processException');
-
- var stackInfo = {
- name: 'new ',
- message: 'hey',
- url: 'http://example.com',
- lineno: 10
- // stack: new Array(2)
- };
-
- handleStackInfo(stackInfo);
- assert.isFalse(window.normalizeFrame.called);
- assert.deepEqual(window.processException.lastCall.args, [
- 'new ', 'hey', 'http://example.com', 10, [], undefined
- ]);
- });
- });
-
- describe('joinRegExp', function() {
- it('should work as advertised', function() {
- assert.equal(joinRegExp([
- 'a', 'b', 'a.b', /d/, /[0-9]/
- ]).source, 'a|b|a\\.b|d|[0-9]');
- });
-
- it('should not process empty or undefined variables', function() {
- assert.equal(joinRegExp([
- 'a', 'b', null, undefined
- ]).source, 'a|b');
- });
-
- it('should skip entries that are not strings or regular expressions in the passed array of patterns', function() {
- assert.equal(joinRegExp([
- 'a', 'b', null, 'a.b', undefined, true, /d/, 123, {}, /[0-9]/, []
- ]).source, 'a|b|a\\.b|d|[0-9]');
- });
- });
-});
-
-describe('Raven (public API)', function() {
- afterEach(function() {
- flushRavenState();
- });
-
- describe('.VERSION', function() {
- it('should have a version', function() {
- assert.isString(Raven.VERSION);
- });
- });
-
- describe('ignore errors', function() {
- it('should install default ignore errors', function() {
- Raven.config('//abc@example.com/2');
-
- assert.isTrue(globalOptions.ignoreErrors.test('Script error'), 'it should install "Script error" by default');
- assert.isTrue(globalOptions.ignoreErrors.test('Script error.'), 'it should install "Script error." by default');
- assert.isTrue(globalOptions.ignoreErrors.test('Javascript error: Script error on line 0'), 'it should install "Javascript error: Script error on line 0" by default');
- assert.isTrue(globalOptions.ignoreErrors.test('Javascript error: Script error. on line 0'), 'it should install "Javascript error: Script error. on line 0" by default');
- });
- });
-
- describe('callback function', function() {
- it('should callback a function if it is global', function() {
- window.RavenConfig = {
- dsn: "http://random@some.other.server:80/2",
- config: {some: 'config'}
- };
-
- this.sinon.stub(window, 'isSetup').returns(false);
- this.sinon.stub(TraceKit.report, 'subscribe');
-
- afterLoad();
-
- assert.equal(globalKey, 'random');
- assert.equal(globalServer, 'http://some.other.server:80/api/2/store/');
-
- assert.equal(globalOptions.some, 'config');
- assert.equal(globalProject, '2');
-
- assert.isTrue(window.isSetup.calledOnce);
- assert.isFalse(TraceKit.report.subscribe.calledOnce);
-
- delete window.RavenConfig;
- });
- });
-
- describe('.config', function() {
- it('should work with a DSN', function() {
- assert.equal(Raven, Raven.config(SENTRY_DSN, {foo: 'bar'}), 'it should return Raven');
- assert.equal(globalKey, 'abc');
- assert.equal(globalServer, 'http://example.com:80/api/2/store/');
- assert.equal(globalOptions.foo, 'bar');
- assert.equal(globalProject, '2');
- assert.isTrue(isSetup());
- });
-
- it('should work with a protocol relative DSN', function() {
- Raven.config('//abc@example.com/2');
- assert.equal(globalKey, 'abc');
- assert.equal(globalServer, '//example.com/api/2/store/');
- assert.equal(globalProject, '2');
- assert.isTrue(isSetup());
- });
-
- it('should work should work at a non root path', function() {
- Raven.config('//abc@example.com/sentry/2');
- assert.equal(globalKey, 'abc');
- assert.equal(globalServer, '//example.com/sentry/api/2/store/');
- assert.equal(globalProject, '2');
- assert.isTrue(isSetup());
- });
-
- it('should noop a falsey dsn', function() {
- Raven.config('');
- assert.isFalse(isSetup());
- });
-
- it('should return Raven for a falsey dsn', function() {
- assert.equal(Raven.config(''), Raven);
- });
-
- it('should not set global options more than once', function() {
- this.sinon.spy(window, 'parseDSN');
- this.sinon.stub(window, 'logDebug');
- setupRaven();
- setupRaven();
- assert.isTrue(parseDSN.calledOnce);
- assert.isTrue(logDebug.called);
- });
-
- describe('whitelistUrls', function() {
- it('should be false if none are passed', function() {
- Raven.config('//abc@example.com/2');
- assert.equal(globalOptions.whitelistUrls, false);
- });
-
- it('should join into a single RegExp', function() {
- Raven.config('//abc@example.com/2', {
- whitelistUrls: [
- /my.app/i,
- /other.app/i
- ]
- });
-
- assert.match(globalOptions.whitelistUrls, /my.app|other.app/i);
- });
-
- it('should handle strings as well', function() {
- Raven.config('//abc@example.com/2', {
- whitelistUrls: [
- /my.app/i,
- "stringy.app"
- ]
- });
-
- assert.match(globalOptions.whitelistUrls, /my.app|stringy.app/i);
- });
- });
-
- describe('collectWindowErrors', function() {
- it('should be true by default', function() {
- Raven.config(SENTRY_DSN);
- assert.isTrue(TraceKit.collectWindowErrors);
- });
-
- it('should be true if set to true', function() {
- Raven.config(SENTRY_DSN, {
- collectWindowErrors: true
- });
-
- assert.isTrue(TraceKit.collectWindowErrors);
- });
-
- it('should be false if set to false', function() {
- Raven.config(SENTRY_DSN, {
- collectWindowErrors: false
- });
-
- assert.isFalse(TraceKit.collectWindowErrors);
- });
- });
- });
-
- describe('.install', function() {
- it('should check `isSetup`', function() {
- this.sinon.stub(window, 'isSetup').returns(false);
- this.sinon.stub(TraceKit.report, 'subscribe');
- Raven.install();
- assert.isTrue(window.isSetup.calledOnce);
- assert.isFalse(TraceKit.report.subscribe.calledOnce);
- });
-
- it('should register itself with TraceKit', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(TraceKit.report, 'subscribe');
- assert.equal(Raven, Raven.install());
- assert.isTrue(TraceKit.report.subscribe.calledOnce);
- assert.equal(TraceKit.report.subscribe.lastCall.args[0], handleStackInfo);
- });
-
- it('should not register itself more than once', function() {
- this.sinon.stub(window, 'isSetup').returns(true);
- this.sinon.stub(TraceKit.report, 'subscribe');
- Raven.install();
- Raven.install();
- assert.isTrue(TraceKit.report.subscribe.calledOnce);
- });
- });
-
- describe('.wrap', function() {
- it('should return a wrapped callback', function() {
- var spy = this.sinon.spy();
- var wrapped = Raven.wrap(spy);
- assert.isFunction(wrapped);
- assert.isTrue(wrapped.__raven__);
- wrapped();
- assert.isTrue(spy.calledOnce);
- });
-
- it('should copy property when wrapping function', function() {
- var func = function() {};
- func.test = true;
- var wrapped = Raven.wrap(func);
- assert.isTrue(wrapped.test);
- });
-
- it('should not copy prototype property when wrapping function', function() {
- var func = function() {};
- func.prototype.test = true;
- var wrapped = Raven.wrap(func);
- assert.isUndefined(new wrapped().test);
- });
-
- it('should return the result of a wrapped function', function() {
- var func = function() { return 'foo'; };
- var wrapped = Raven.wrap(func);
- assert.equal(wrapped(), 'foo');
- });
-
- it('should not wrap a non-function', function() {
- assert.equal(Raven.wrap('lol'), 'lol');
- assert.equal(Raven.wrap({}, 'lol'), 'lol');
- assert.equal(Raven.wrap(undefined, 'lol'), 'lol');
- var a = [1, 2];
- assert.equal(Raven.wrap(a), a);
- });
-
- it('should wrap function arguments', function() {
- var spy = this.sinon.spy();
- var wrapped = Raven.wrap(function(f) {
- assert.isTrue(f.__raven__);
- f();
- });
- wrapped(spy);
- assert.isTrue(spy.calledOnce);
- });
-
- it('should not wrap function arguments', function() {
- var spy = this.sinon.spy();
- var wrapped = Raven.wrap({ deep: false }, function(f) {
- assert.isUndefined(f.__raven__);
- f();
- });
- wrapped(spy);
- assert.isTrue(spy.calledOnce);
- });
-
- it('should maintain the correct scope', function() {
- var foo = {};
- var bar = function() {
- assert.equal(this, foo);
- };
- bar.apply(foo, []);
- Raven.wrap(bar).apply(foo, []);
- });
-
- it('should re-raise a thrown exception', function() {
- var error = new Error('lol');
- assert.throws(function() {
- Raven.wrap(function() { throw error; })();
- }, error);
- });
-
- });
-
- describe('.context', function() {
- it('should execute the callback with options', function() {
- var spy = this.sinon.spy();
- this.sinon.stub(Raven, 'captureException');
- Raven.context({'foo': 'bar'}, spy);
- assert.isTrue(spy.calledOnce);
- assert.isFalse(Raven.captureException.called);
- });
-
- it('should execute the callback with arguments', function() {
- var spy = this.sinon.spy();
- var args = [1, 2];
- Raven.context(spy, args);
- assert.deepEqual(spy.lastCall.args, args);
- });
-
- it('should execute the callback without options', function() {
- var spy = this.sinon.spy();
- this.sinon.stub(Raven, 'captureException');
- Raven.context(spy);
- assert.isTrue(spy.calledOnce);
- assert.isFalse(Raven.captureException.called);
- });
-
- it('should capture the exception with options', function() {
- var error = new Error('crap');
- var broken = function() { throw error; };
- this.sinon.stub(Raven, 'captureException');
- assert.throws(function() {
- Raven.context({foo: 'bar'}, broken);
- }, error);
- assert.isTrue(Raven.captureException.called);
- assert.deepEqual(Raven.captureException.lastCall.args, [error, {'foo': 'bar'}]);
- });
-
- it('should capture the exception without options', function() {
- var error = new Error('crap');
- var broken = function() { throw error; };
- this.sinon.stub(Raven, 'captureException');
- assert.throws(function() {
- Raven.context(broken);
- }, error);
- assert.isTrue(Raven.captureException.called);
- assert.deepEqual(Raven.captureException.lastCall.args, [error, undefined]);
- });
-
- it('should execute the callback without arguments', function() {
- // This is only reproducable in a browser that complains about passing
- // undefined to Function.apply
- var spy = this.sinon.spy();
- Raven.context(spy);
- assert.deepEqual(spy.lastCall.args, []);
- });
-
- it('should return the result of the wrapped function', function() {
- var val = {};
- var func = function() { return val; };
- assert.equal(Raven.context(func), val);
- });
- });
-
- describe('.uninstall', function() {
- it('should uninstall from TraceKit', function() {
- this.sinon.stub(TraceKit.report, 'uninstall');
- Raven.uninstall();
- assert.isTrue(TraceKit.report.uninstall.calledOnce);
- });
-
- it('should set isRavenInstalled flag to false', function() {
- isRavenInstalled = true;
- this.sinon.stub(TraceKit.report, 'uninstall');
- Raven.uninstall();
- assert.isFalse(isRavenInstalled);
- });
- });
-
- describe('.setUserContext', function() {
- it('should set the globalUser object', function() {
- Raven.setUserContext({name: 'Matt'});
- assert.deepEqual(globalUser, {name: 'Matt'});
- });
-
- it('should clear the globalUser with no arguments', function() {
- globalUser = {name: 'Matt'};
- Raven.setUserContext();
- assert.isUndefined(globalUser);
- });
- });
-
- describe('.setExtraContext', function() {
- it('should set the globalOptions.extra object', function() {
- Raven.setExtraContext({name: 'Matt'});
- assert.deepEqual(globalOptions.extra, {name: 'Matt'});
- });
-
- it('should clear globalOptions.extra with no arguments', function() {
- globalOptions = {name: 'Matt'};
- Raven.setExtraContext();
- assert.deepEqual(globalOptions.extra, {});
- });
- });
-
- describe('.setTagsContext', function() {
- it('should set the globalOptions.tags object', function() {
- Raven.setTagsContext({name: 'Matt'});
- assert.deepEqual(globalOptions.tags, {name: 'Matt'});
- });
-
- it('should clear globalOptions.tags with no arguments', function() {
- globalOptions = {name: 'Matt'};
- Raven.setTagsContext();
- assert.deepEqual(globalOptions.tags, {});
- });
- });
-
- describe('.setReleaseContext', function() {
- it('should set the globalOptions.release attribute', function() {
- Raven.setReleaseContext('abc123');
- assert.equal(globalOptions.release, 'abc123');
- });
-
- it('should clear globalOptions.release with no arguments', function() {
- globalOptions.release = 'abc123';
- Raven.setReleaseContext();
- assert.isUndefined(globalOptions.release);
- });
- });
-
- describe('.setDataCallback', function() {
- it('should set the globalOptions.dataCallback attribute', function() {
- var foo = function(){};
- Raven.setDataCallback(foo);
- assert.equal(globalOptions.dataCallback, foo);
- });
-
- it('should clear globalOptions.dataCallback with no arguments', function() {
- var foo = function(){};
- globalOptions.dataCallback = foo;
- Raven.setDataCallback();
- assert.isUndefined(globalOptions.dataCallback);
- });
- });
-
- describe('.setShouldSendCallback', function() {
- it('should set the globalOptions.shouldSendCallback attribute', function() {
- var foo = function(){};
- Raven.setShouldSendCallback(foo);
- assert.equal(globalOptions.shouldSendCallback, foo);
- });
-
- it('should clear globalOptions.shouldSendCallback with no arguments', function() {
- var foo = function(){};
- globalOptions.shouldSendCallback = foo;
- Raven.setShouldSendCallback();
- assert.isUndefined(globalOptions.shouldSendCallback);
- });
- });
-
- describe('.captureMessage', function() {
- it('should work as advertised', function() {
- this.sinon.stub(window, 'send');
- Raven.captureMessage('lol', {foo: 'bar'});
- assert.deepEqual(window.send.lastCall.args, [{
- message: 'lol',
- foo: 'bar'
- }]);
- });
-
- it('should coerce message to a string', function() {
- this.sinon.stub(window, 'send');
- Raven.captureMessage({});
- assert.deepEqual(window.send.lastCall.args, [{
- message: '[object Object]'
- }]);
- });
-
- it('should work as advertised #integration', function() {
- var imageCache = [];
- this.sinon.stub(window, 'newImage', function(){ var img = {}; imageCache.push(img); return img; });
-
- setupRaven();
- Raven.captureMessage('lol', {foo: 'bar'});
- assert.equal(imageCache.length, 1);
- // It'd be hard to assert the actual payload being sent
- // since it includes the generated url, which is going to
- // vary between users running the tests
- // Unit tests should cover that the payload was constructed properly
- });
-
- it('should tag lastEventId #integration', function() {
- setupRaven();
- Raven.captureMessage('lol');
- assert.equal(Raven.lastEventId(), 'abc123');
- });
-
- it('should respect `ignoreErrors`', function() {
- this.sinon.stub(window, 'send');
-
- globalOptions.ignoreErrors = joinRegExp(['e1', 'e2']);
- Raven.captureMessage('e1');
- assert.isFalse(window.send.called);
- Raven.captureMessage('e2');
- assert.isFalse(window.send.called);
- Raven.captureMessage('Non-ignored error');
- assert.isTrue(window.send.calledOnce);
- });
- });
-
- describe('.captureException', function() {
- it('should call TraceKit.report', function() {
- var error = new Error('crap');
- this.sinon.stub(TraceKit, 'report');
- Raven.captureException(error, {foo: 'bar'});
- assert.isTrue(TraceKit.report.calledOnce);
- assert.deepEqual(TraceKit.report.lastCall.args, [error, {foo: 'bar'}]);
- });
-
- it('should store the last exception', function() {
- var error = new Error('crap');
- this.sinon.stub(TraceKit, 'report');
- Raven.captureException(error);
- assert.equal(Raven.lastException(), error);
- });
-
- it('shouldn\'t reraise the if the error is the same error', function() {
- var error = new Error('crap');
- this.sinon.stub(TraceKit, 'report').throws(error);
- // this would raise if the errors didn't match
- Raven.captureException(error, {foo: 'bar'});
- assert.isTrue(TraceKit.report.calledOnce);
- });
-
- it('should reraise a different error', function() {
- var error = new Error('crap1');
- this.sinon.stub(TraceKit, 'report').throws(error);
- assert.throws(function() {
- Raven.captureException(new Error('crap2'));
- }, error);
- });
-
- it('should capture as a normal message if a non-Error is passed', function() {
- this.sinon.stub(Raven, 'captureMessage');
- this.sinon.stub(TraceKit, 'report');
- Raven.captureException('derp');
- assert.equal(Raven.captureMessage.lastCall.args[0], 'derp');
- assert.isFalse(TraceKit.report.called);
- Raven.captureException(true);
- assert.equal(Raven.captureMessage.lastCall.args[0], true);
- assert.isFalse(TraceKit.report.called);
- });
- });
-
- describe('.isSetup', function() {
- it('should work as advertised', function() {
- var isSetup = this.sinon.stub(window, 'isSetup');
- isSetup.returns(true);
- assert.isTrue(Raven.isSetup());
- isSetup.returns(false);
- assert.isFalse(Raven.isSetup());
- });
- });
-});
diff --git a/htdocs/includes/raven-js/vendor/TraceKit/tracekit.js b/htdocs/includes/raven-js/vendor/TraceKit/tracekit.js
deleted file mode 100644
index bccddabedbe..00000000000
--- a/htdocs/includes/raven-js/vendor/TraceKit/tracekit.js
+++ /dev/null
@@ -1,1044 +0,0 @@
-/*
- TraceKit - Cross brower stack traces - github.com/occ/TraceKit
- MIT license
-*/
-
-var TraceKit = {
- remoteFetching: false,
- collectWindowErrors: true,
- // 3 lines before, the offending line, 3 lines after
- linesOfContext: 7
-};
-
-// global reference to slice
-var _slice = [].slice;
-var UNKNOWN_FUNCTION = '?';
-
-
-/**
- * TraceKit.wrap: Wrap any function in a TraceKit reporter
- * Example: func = TraceKit.wrap(func);
- *
- * @param {Function} func Function to be wrapped
- * @return {Function} The wrapped func
- */
-TraceKit.wrap = function traceKitWrapper(func) {
- function wrapped() {
- try {
- return func.apply(this, arguments);
- } catch (e) {
- TraceKit.report(e);
- throw e;
- }
- }
- return wrapped;
-};
-
-/**
- * TraceKit.report: cross-browser processing of unhandled exceptions
- *
- * Syntax:
- * TraceKit.report.subscribe(function(stackInfo) { ... })
- * TraceKit.report.unsubscribe(function(stackInfo) { ... })
- * TraceKit.report(exception)
- * try { ...code... } catch(ex) { TraceKit.report(ex); }
- *
- * Supports:
- * - Firefox: full stack trace with line numbers, plus column number
- * on top frame; column number is not guaranteed
- * - Opera: full stack trace with line and column numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- * - IE: line and column number for the top frame only; some frames
- * may be missing, and column number is not guaranteed
- *
- * In theory, TraceKit should work on all of the following versions:
- * - IE5.5+ (only 8.0 tested)
- * - Firefox 0.9+ (only 3.5+ tested)
- * - Opera 7+ (only 10.50 tested; versions 9 and earlier may require
- * Exceptions Have Stacktrace to be enabled in opera:config)
- * - Safari 3+ (only 4+ tested)
- * - Chrome 1+ (only 5+ tested)
- * - Konqueror 3.5+ (untested)
- *
- * Requires TraceKit.computeStackTrace.
- *
- * Tries to catch all unhandled exceptions and report them to the
- * subscribed handlers. Please note that TraceKit.report will rethrow the
- * exception. This is REQUIRED in order to get a useful stack trace in IE.
- * If the exception does not reach the top of the browser, you will only
- * get a stack trace from the point where TraceKit.report was called.
- *
- * Handlers receive a stackInfo object as described in the
- * TraceKit.computeStackTrace docs.
- */
-TraceKit.report = (function reportModuleWrapper() {
- var handlers = [],
- lastArgs = null,
- lastException = null,
- lastExceptionStack = null;
-
- /**
- * Add a crash handler.
- * @param {Function} handler
- */
- function subscribe(handler) {
- installGlobalHandler();
- handlers.push(handler);
- }
-
- /**
- * Remove a crash handler.
- * @param {Function} handler
- */
- function unsubscribe(handler) {
- for (var i = handlers.length - 1; i >= 0; --i) {
- if (handlers[i] === handler) {
- handlers.splice(i, 1);
- }
- }
- }
-
- /**
- * Remove all crash handlers.
- */
- function unsubscribeAll() {
- uninstallGlobalHandler();
- handlers = [];
- }
-
- /**
- * Dispatch stack information to all handlers.
- * @param {Object.} stack
- */
- function notifyHandlers(stack, isWindowError) {
- var exception = null;
- if (isWindowError && !TraceKit.collectWindowErrors) {
- return;
- }
- for (var i in handlers) {
- if (hasKey(handlers, i)) {
- try {
- handlers[i].apply(null, [stack].concat(_slice.call(arguments, 2)));
- } catch (inner) {
- exception = inner;
- }
- }
- }
-
- if (exception) {
- throw exception;
- }
- }
-
- var _oldOnerrorHandler, _onErrorHandlerInstalled;
-
- /**
- * Ensures all global unhandled exceptions are recorded.
- * Supported by Gecko and IE.
- * @param {string} message Error message.
- * @param {string} url URL of script that generated the exception.
- * @param {(number|string)} lineNo The line number at which the error
- * occurred.
- * @param {?(number|string)} colNo The column number at which the error
- * occurred.
- * @param {?Error} ex The actual Error object.
- */
- function traceKitWindowOnError(message, url, lineNo, colNo, ex) {
- var stack = null;
-
- if (lastExceptionStack) {
- TraceKit.computeStackTrace.augmentStackTraceWithInitialElement(lastExceptionStack, url, lineNo, message);
- processLastException();
- } else if (ex) {
- // New chrome and blink send along a real error object
- // Let's just report that like a normal error.
- // See: https://mikewest.org/2013/08/debugging-runtime-errors-with-window-onerror
- stack = TraceKit.computeStackTrace(ex);
- notifyHandlers(stack, true);
- } else {
- var location = {
- 'url': url,
- 'line': lineNo,
- 'column': colNo
- };
- location.func = TraceKit.computeStackTrace.guessFunctionName(location.url, location.line);
- location.context = TraceKit.computeStackTrace.gatherContext(location.url, location.line);
- stack = {
- 'message': message,
- 'url': document.location.href,
- 'stack': [location]
- };
- notifyHandlers(stack, true);
- }
-
- if (_oldOnerrorHandler) {
- return _oldOnerrorHandler.apply(this, arguments);
- }
-
- return false;
- }
-
- function installGlobalHandler ()
- {
- if (_onErrorHandlerInstalled) {
- return;
- }
- _oldOnerrorHandler = window.onerror;
- window.onerror = traceKitWindowOnError;
- _onErrorHandlerInstalled = true;
- }
-
- function uninstallGlobalHandler ()
- {
- if (!_onErrorHandlerInstalled) {
- return;
- }
- window.onerror = _oldOnerrorHandler;
- _onErrorHandlerInstalled = false;
- _oldOnerrorHandler = undefined;
- }
-
- function processLastException() {
- var _lastExceptionStack = lastExceptionStack,
- _lastArgs = lastArgs;
- lastArgs = null;
- lastExceptionStack = null;
- lastException = null;
- notifyHandlers.apply(null, [_lastExceptionStack, false].concat(_lastArgs));
- }
-
- /**
- * Reports an unhandled Error to TraceKit.
- * @param {Error} ex
- * @param {?boolean} rethrow If false, do not re-throw the exception.
- * Only used for window.onerror to not cause an infinite loop of
- * rethrowing.
- */
- function report(ex, rethrow) {
- var args = _slice.call(arguments, 1);
- if (lastExceptionStack) {
- if (lastException === ex) {
- return; // already caught by an inner catch block, ignore
- } else {
- processLastException();
- }
- }
-
- var stack = TraceKit.computeStackTrace(ex);
- lastExceptionStack = stack;
- lastException = ex;
- lastArgs = args;
-
- // If the stack trace is incomplete, wait for 2 seconds for
- // slow slow IE to see if onerror occurs or not before reporting
- // this exception; otherwise, we will end up with an incomplete
- // stack trace
- window.setTimeout(function () {
- if (lastException === ex) {
- processLastException();
- }
- }, (stack.incomplete ? 2000 : 0));
-
- if (rethrow !== false) {
- throw ex; // re-throw to propagate to the top level (and cause window.onerror)
- }
- }
-
- report.subscribe = subscribe;
- report.unsubscribe = unsubscribe;
- report.uninstall = unsubscribeAll;
- return report;
-}());
-
-/**
- * TraceKit.computeStackTrace: cross-browser stack traces in JavaScript
- *
- * Syntax:
- * s = TraceKit.computeStackTrace(exception) // consider using TraceKit.report instead (see below)
- * Returns:
- * s.name - exception name
- * s.message - exception message
- * s.stack[i].url - JavaScript or HTML file URL
- * s.stack[i].func - function name, or empty for anonymous functions (if guessing did not work)
- * s.stack[i].args - arguments passed to the function, if known
- * s.stack[i].line - line number, if known
- * s.stack[i].column - column number, if known
- * s.stack[i].context - an array of source code lines; the middle element corresponds to the correct line#
- *
- * Supports:
- * - Firefox: full stack trace with line numbers and unreliable column
- * number on top frame
- * - Opera 10: full stack trace with line and column numbers
- * - Opera 9-: full stack trace with line numbers
- * - Chrome: full stack trace with line and column numbers
- * - Safari: line and column number for the topmost stacktrace element
- * only
- * - IE: no line numbers whatsoever
- *
- * Tries to guess names of anonymous functions by looking for assignments
- * in the source code. In IE and Safari, we have to guess source file names
- * by searching for function bodies inside all page scripts. This will not
- * work for scripts that are loaded cross-domain.
- * Here be dragons: some function names may be guessed incorrectly, and
- * duplicate functions may be mismatched.
- *
- * TraceKit.computeStackTrace should only be used for tracing purposes.
- * Logging of unhandled exceptions should be done with TraceKit.report,
- * which builds on top of TraceKit.computeStackTrace and provides better
- * IE support by utilizing the window.onerror event to retrieve information
- * about the top of the stack.
- *
- * Note: In IE and Safari, no stack trace is recorded on the Error object,
- * so computeStackTrace instead walks its *own* chain of callers.
- * This means that:
- * * in Safari, some methods may be missing from the stack trace;
- * * in IE, the topmost function in the stack trace will always be the
- * caller of computeStackTrace.
- *
- * This is okay for tracing (because you are likely to be calling
- * computeStackTrace from the function you want to be the topmost element
- * of the stack trace anyway), but not okay for logging unhandled
- * exceptions (because your catch block will likely be far away from the
- * inner function that actually caused the exception).
- *
- */
-TraceKit.computeStackTrace = (function computeStackTraceWrapper() {
- var debug = false,
- sourceCache = {};
-
- /**
- * Attempts to retrieve source code via XMLHttpRequest, which is used
- * to look up anonymous function names.
- * @param {string} url URL of source code.
- * @return {string} Source contents.
- */
- function loadSource(url) {
- if (!TraceKit.remoteFetching) { //Only attempt request if remoteFetching is on.
- return '';
- }
- try {
- var getXHR = function() {
- try {
- return new window.XMLHttpRequest();
- } catch (e) {
- // explicitly bubble up the exception if not found
- return new window.ActiveXObject('Microsoft.XMLHTTP');
- }
- };
-
- var request = getXHR();
- request.open('GET', url, false);
- request.send('');
- return request.responseText;
- } catch (e) {
- return '';
- }
- }
-
- /**
- * Retrieves source code from the source code cache.
- * @param {string} url URL of source code.
- * @return {Array.} Source contents.
- */
- function getSource(url) {
- if (!isString(url)) return [];
- if (!hasKey(sourceCache, url)) {
- // URL needs to be able to fetched within the acceptable domain. Otherwise,
- // cross-domain errors will be triggered.
- var source = '';
- if (url.indexOf(document.domain) !== -1) {
- source = loadSource(url);
- }
- sourceCache[url] = source ? source.split('\n') : [];
- }
-
- return sourceCache[url];
- }
-
- /**
- * Tries to use an externally loaded copy of source code to determine
- * the name of a function by looking at the name of the variable it was
- * assigned to, if any.
- * @param {string} url URL of source code.
- * @param {(string|number)} lineNo Line number in source code.
- * @return {string} The function name, if discoverable.
- */
- function guessFunctionName(url, lineNo) {
- var reFunctionArgNames = /function ([^(]*)\(([^)]*)\)/,
- reGuessFunction = /['"]?([0-9A-Za-z$_]+)['"]?\s*[:=]\s*(function|eval|new Function)/,
- line = '',
- maxLines = 10,
- source = getSource(url),
- m;
-
- if (!source.length) {
- return UNKNOWN_FUNCTION;
- }
-
- // Walk backwards from the first line in the function until we find the line which
- // matches the pattern above, which is the function definition
- for (var i = 0; i < maxLines; ++i) {
- line = source[lineNo - i] + line;
-
- if (!isUndefined(line)) {
- if ((m = reGuessFunction.exec(line))) {
- return m[1];
- } else if ((m = reFunctionArgNames.exec(line))) {
- return m[1];
- }
- }
- }
-
- return UNKNOWN_FUNCTION;
- }
-
- /**
- * Retrieves the surrounding lines from where an exception occurred.
- * @param {string} url URL of source code.
- * @param {(string|number)} line Line number in source code to centre
- * around for context.
- * @return {?Array.} Lines of source code.
- */
- function gatherContext(url, line) {
- var source = getSource(url);
-
- if (!source.length) {
- return null;
- }
-
- var context = [],
- // linesBefore & linesAfter are inclusive with the offending line.
- // if linesOfContext is even, there will be one extra line
- // *before* the offending line.
- linesBefore = Math.floor(TraceKit.linesOfContext / 2),
- // Add one extra line if linesOfContext is odd
- linesAfter = linesBefore + (TraceKit.linesOfContext % 2),
- start = Math.max(0, line - linesBefore - 1),
- end = Math.min(source.length, line + linesAfter - 1);
-
- line -= 1; // convert to 0-based index
-
- for (var i = start; i < end; ++i) {
- if (!isUndefined(source[i])) {
- context.push(source[i]);
- }
- }
-
- return context.length > 0 ? context : null;
- }
-
- /**
- * Escapes special characters, except for whitespace, in a string to be
- * used inside a regular expression as a string literal.
- * @param {string} text The string.
- * @return {string} The escaped string literal.
- */
- function escapeRegExp(text) {
- return text.replace(/[\-\[\]{}()*+?.,\\\^$|#]/g, '\\$&');
- }
-
- /**
- * Escapes special characters in a string to be used inside a regular
- * expression as a string literal. Also ensures that HTML entities will
- * be matched the same as their literal friends.
- * @param {string} body The string.
- * @return {string} The escaped string.
- */
- function escapeCodeAsRegExpForMatchingInsideHTML(body) {
- return escapeRegExp(body).replace('<', '(?:<|<)').replace('>', '(?:>|>)').replace('&', '(?:&|&)').replace('"', '(?:"|")').replace(/\s+/g, '\\s+');
- }
-
- /**
- * Determines where a code fragment occurs in the source code.
- * @param {RegExp} re The function definition.
- * @param {Array.} urls A list of URLs to search.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceInUrls(re, urls) {
- var source, m;
- for (var i = 0, j = urls.length; i < j; ++i) {
- // console.log('searching', urls[i]);
- if ((source = getSource(urls[i])).length) {
- source = source.join('\n');
- if ((m = re.exec(source))) {
- // console.log('Found function in ' + urls[i]);
-
- return {
- 'url': urls[i],
- 'line': source.substring(0, m.index).split('\n').length,
- 'column': m.index - source.lastIndexOf('\n', m.index) - 1
- };
- }
- }
- }
-
- // console.log('no match');
-
- return null;
- }
-
- /**
- * Determines at which column a code fragment occurs on a line of the
- * source code.
- * @param {string} fragment The code fragment.
- * @param {string} url The URL to search.
- * @param {(string|number)} line The line number to examine.
- * @return {?number} The column number.
- */
- function findSourceInLine(fragment, url, line) {
- var source = getSource(url),
- re = new RegExp('\\b' + escapeRegExp(fragment) + '\\b'),
- m;
-
- line -= 1;
-
- if (source && source.length > line && (m = re.exec(source[line]))) {
- return m.index;
- }
-
- return null;
- }
-
- /**
- * Determines where a function was defined within the source code.
- * @param {(Function|string)} func A function reference or serialized
- * function definition.
- * @return {?Object.} An object containing
- * the url, line, and column number of the defined function.
- */
- function findSourceByFunctionBody(func) {
- var urls = [window.location.href],
- scripts = document.getElementsByTagName('script'),
- body,
- code = '' + func,
- codeRE = /^function(?:\s+([\w$]+))?\s*\(([\w\s,]*)\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- eventRE = /^function on([\w$]+)\s*\(event\)\s*\{\s*(\S[\s\S]*\S)\s*\}\s*$/,
- re,
- parts,
- result;
-
- for (var i = 0; i < scripts.length; ++i) {
- var script = scripts[i];
- if (script.src) {
- urls.push(script.src);
- }
- }
-
- if (!(parts = codeRE.exec(code))) {
- re = new RegExp(escapeRegExp(code).replace(/\s+/g, '\\s+'));
- }
-
- // not sure if this is really necessary, but I don’t have a test
- // corpus large enough to confirm that and it was in the original.
- else {
- var name = parts[1] ? '\\s+' + parts[1] : '',
- args = parts[2].split(',').join('\\s*,\\s*');
-
- body = escapeRegExp(parts[3]).replace(/;$/, ';?'); // semicolon is inserted if the function ends with a comment.replace(/\s+/g, '\\s+');
- re = new RegExp('function' + name + '\\s*\\(\\s*' + args + '\\s*\\)\\s*{\\s*' + body + '\\s*}');
- }
-
- // look for a normal function definition
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
-
- // look for an old-school event handler function
- if ((parts = eventRE.exec(code))) {
- var event = parts[1];
- body = escapeCodeAsRegExpForMatchingInsideHTML(parts[2]);
-
- // look for a function defined in HTML as an onXXX handler
- re = new RegExp('on' + event + '=[\\\'"]\\s*' + body + '\\s*[\\\'"]', 'i');
-
- if ((result = findSourceInUrls(re, urls[0]))) {
- return result;
- }
-
- // look for ???
- re = new RegExp(body);
-
- if ((result = findSourceInUrls(re, urls))) {
- return result;
- }
- }
-
- return null;
- }
-
- // Contents of Exception in various browsers.
- //
- // SAFARI:
- // ex.message = Can't find variable: qq
- // ex.line = 59
- // ex.sourceId = 580238192
- // ex.sourceURL = http://...
- // ex.expressionBeginOffset = 96
- // ex.expressionCaretOffset = 98
- // ex.expressionEndOffset = 98
- // ex.name = ReferenceError
- //
- // FIREFOX:
- // ex.message = qq is not defined
- // ex.fileName = http://...
- // ex.lineNumber = 59
- // ex.columnNumber = 69
- // ex.stack = ...stack trace... (see the example below)
- // ex.name = ReferenceError
- //
- // CHROME:
- // ex.message = qq is not defined
- // ex.name = ReferenceError
- // ex.type = not_defined
- // ex.arguments = ['aa']
- // ex.stack = ...stack trace...
- //
- // INTERNET EXPLORER:
- // ex.message = ...
- // ex.name = ReferenceError
- //
- // OPERA:
- // ex.message = ...message... (see the example below)
- // ex.name = ReferenceError
- // ex.opera#sourceloc = 11 (pretty much useless, duplicates the info in ex.message)
- // ex.stacktrace = n/a; see 'opera:config#UserPrefs|Exceptions Have Stacktrace'
-
- /**
- * Computes stack trace information from the stack property.
- * Chrome and Gecko use this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStackProp(ex) {
- if (!ex.stack) {
- return null;
- }
-
- var chrome = /^\s*at (.*?) ?\(?((?:file|https?|chrome-extension):.*?):(\d+)(?::(\d+))?\)?\s*$/i,
- gecko = /^\s*(.*?)(?:\((.*?)\))?@((?:file|https?|chrome).*?):(\d+)(?::(\d+))?\s*$/i,
- lines = ex.stack.split('\n'),
- stack = [],
- parts,
- element,
- reference = /^(.*) is undefined$/.exec(ex.message);
-
- for (var i = 0, j = lines.length; i < j; ++i) {
- if ((parts = gecko.exec(lines[i]))) {
- element = {
- 'url': parts[3],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'args': parts[2] ? parts[2].split(',') : '',
- 'line': +parts[4],
- 'column': parts[5] ? +parts[5] : null
- };
- } else if ((parts = chrome.exec(lines[i]))) {
- element = {
- 'url': parts[2],
- 'func': parts[1] || UNKNOWN_FUNCTION,
- 'line': +parts[3],
- 'column': parts[4] ? +parts[4] : null
- };
- } else {
- continue;
- }
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
-
- if (element.line) {
- element.context = gatherContext(element.url, element.line);
- }
-
- stack.push(element);
- }
-
- if (!stack.length) {
- return null;
- }
-
- if (stack[0].line && !stack[0].column && reference) {
- stack[0].column = findSourceInLine(reference[1], stack[0].url, stack[0].line);
- } else if (!stack[0].column && !isUndefined(ex.columnNumber)) {
- // FireFox uses this awesome columnNumber property for its top frame
- // Also note, Firefox's column number is 0-based and everything else expects 1-based,
- // so adding 1
- stack[0].column = ex.columnNumber + 1;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * Computes stack trace information from the stacktrace property.
- * Opera 10 uses this property.
- * @param {Error} ex
- * @return {?Object.} Stack trace information.
- */
- function computeStackTraceFromStacktraceProp(ex) {
- // Access and store the stacktrace property before doing ANYTHING
- // else to it because Opera is not very good at providing it
- // reliably in other circumstances.
- var stacktrace = ex.stacktrace;
-
- var testRE = / line (\d+), column (\d+) in (?:]+)>|([^\)]+))\((.*)\) in (.*):\s*$/i,
- lines = stacktrace.split('\n'),
- stack = [],
- parts;
-
- for (var i = 0, j = lines.length; i < j; i += 2) {
- if ((parts = testRE.exec(lines[i]))) {
- var element = {
- 'line': +parts[1],
- 'column': +parts[2],
- 'func': parts[3] || parts[4],
- 'args': parts[5] ? parts[5].split(',') : [],
- 'url': parts[6]
- };
-
- if (!element.func && element.line) {
- element.func = guessFunctionName(element.url, element.line);
- }
- if (element.line) {
- try {
- element.context = gatherContext(element.url, element.line);
- } catch (exc) {}
- }
-
- if (!element.context) {
- element.context = [lines[i + 1]];
- }
-
- stack.push(element);
- }
- }
-
- if (!stack.length) {
- return null;
- }
-
- return {
- 'name': ex.name,
- 'message': ex.message,
- 'url': document.location.href,
- 'stack': stack
- };
- }
-
- /**
- * NOT TESTED.
- * Computes stack trace information from an error message that includes
- * the stack trace.
- * Opera 9 and earlier use this method if the option to show stack
- * traces is turned on in opera:config.
- * @param {Error} ex
- * @return {?Object.} Stack information.
- */
- function computeStackTraceFromOperaMultiLineMessage(ex) {
- // Opera includes a stack trace into the exception message. An example is:
- //
- // Statement on line 3: Undefined variable: undefinedFunc
- // Backtrace:
- // Line 3 of linked script file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.js: In function zzz
- // undefinedFunc(a);
- // Line 7 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function yyy
- // zzz(x, y, z);
- // Line 3 of inline#1 script in file://localhost/Users/andreyvit/Projects/TraceKit/javascript-client/sample.html: In function xxx
- // yyy(a, a, a);
- // Line 1 of function script
- // try { xxx('hi'); return false; } catch(ex) { TraceKit.report(ex); }
- // ...
-
- var lines = ex.message.split('\n');
- if (lines.length < 4) {
- return null;
- }
-
- var lineRE1 = /^\s*Line (\d+) of linked script ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE2 = /^\s*Line (\d+) of inline#(\d+) script in ((?:file|https?)\S+)(?:: in function (\S+))?\s*$/i,
- lineRE3 = /^\s*Line (\d+) of function script\s*$/i,
- stack = [],
- scripts = document.getElementsByTagName('script'),
- inlineScriptBlocks = [],
- parts,
- i,
- len,
- source;
-
- for (i in scripts) {
- if (hasKey(scripts, i) && !scripts[i].src) {
- inlineScriptBlocks.push(scripts[i]);
- }
- }
-
- for (i = 2, len = lines.length; i < len; i += 2) {
- var item = null;
- if ((parts = lineRE1.exec(lines[i]))) {
- item = {
- 'url': parts[2],
- 'func': parts[3],
- 'line': +parts[1]
- };
- } else if ((parts = lineRE2.exec(lines[i]))) {
- item = {
- 'url': parts[3],
- 'func': parts[4]
- };
- var relativeLine = (+parts[1]); // relative to the start of the '."\n";
+ print ''."\n";
// Add datepicker default options
print ''."\n";
@@ -1461,13 +1461,13 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
$logouthtmltext.=$langs->trans("Logout").' ';
$logouttext .='';
- $logouttext .= img_picto($langs->trans('Logout').":".$langs->trans('Logout'), 'logout.png', 'class="login"', 0, 0, 1);
+ $logouttext .= img_picto($langs->trans('Logout').":".$langs->trans('Logout'), 'logout_top.png', 'class="login"', 0, 0, 1);
$logouttext .=' ';
}
else
{
$logouthtmltext.=$langs->trans("NoLogoutProcessWithAuthMode",$_SESSION["dol_authmode"]);
- $logouttext .= img_picto($langs->trans('Logout').":".$langs->trans('Logout'), 'logout.png', 'class="login"', 0, 0, 1);
+ $logouttext .= img_picto($langs->trans('Logout').":".$langs->trans('Logout'), 'logout_top.png', 'class="login"', 0, 0, 1);
}
print ''."\n";
@@ -1500,7 +1500,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
$qs=$_SERVER["QUERY_STRING"];
$qs.=(($qs && $morequerystring)?'&':'').$morequerystring;
$text ='
';
- $text.= img_picto(":".$langs->trans("PrintContentArea"), 'printer.png', 'class="printer"');
+ $text.= img_picto(":".$langs->trans("PrintContentArea"), 'printer_top.png', 'class="printer"');
$text.=' ';
$toprightmenu.=Form::textwithtooltip('',$langs->trans("PrintContentArea"),2,1,$text,'login_block_elem',2);
}
@@ -1534,7 +1534,7 @@ function top_menu($head, $title='', $target='', $disablejs=0, $disablehead=0, $a
if ($mode == 'wiki') $text.=sprintf($helpbaseurl,urlencode(html_entity_decode($helppage)));
else $text.=sprintf($helpbaseurl,$helppage);
$text.='">';
- $text.=img_picto('', 'helpdoc').' ';
+ $text.=img_picto('', 'helpdoc_top').' ';
//$toprightmenu.=$langs->trans($mode == 'wiki' ? 'OnlineHelp': 'Help');
//if ($mode == 'wiki') $text.=' ('.dol_trunc(strtr($helppage,'_',' '),8).')';
$text.='';
@@ -1749,9 +1749,9 @@ function left_menu($menu_array_before, $helppagename='', $notused='', $menu_arra
$bugbaseurl.= urlencode("- **URL**: " . $_SERVER["REQUEST_URI"] . "\n");
$bugbaseurl.= urlencode("\n");
$bugbaseurl.= urlencode("# Report\n");
- print '';
}
print "
\n";
diff --git a/htdocs/margin/admin/margin.php b/htdocs/margin/admin/margin.php
index 8ff533df259..706d14ebe12 100644
--- a/htdocs/margin/admin/margin.php
+++ b/htdocs/margin/admin/margin.php
@@ -73,7 +73,7 @@ if ($action == 'remises')
{
if (dolibarr_set_const($db, 'MARGIN_METHODE_FOR_DISCOUNT', $_POST['MARGIN_METHODE_FOR_DISCOUNT'], 'chaine', 0, '', $conf->entity) > 0)
{
- setEventMessage($langs->trans("RecordModifiedSuccessfully"));
+ setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs');
}
else
{
@@ -85,7 +85,7 @@ if ($action == 'typemarges')
{
if (dolibarr_set_const($db, 'MARGIN_TYPE', $_POST['MARGIN_TYPE'], 'chaine', 0, '', $conf->entity) > 0)
{
- setEventMessage($langs->trans("RecordModifiedSuccessfully"));
+ setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs');
}
else
{
@@ -97,7 +97,7 @@ if ($action == 'contact')
{
if (dolibarr_set_const($db, 'AGENT_CONTACT_TYPE', $_POST['AGENT_CONTACT_TYPE'], 'chaine', 0, '', $conf->entity) > 0)
{
- setEventMessage($langs->trans("RecordModifiedSuccessfully"));
+ setEventMessages($langs->trans("RecordModifiedSuccessfully"), null, 'mesgs');
}
else
{
diff --git a/htdocs/margin/agentMargins.php b/htdocs/margin/agentMargins.php
index 83ed0ccfc0f..f9189ed7e97 100644
--- a/htdocs/margin/agentMargins.php
+++ b/htdocs/margin/agentMargins.php
@@ -94,7 +94,7 @@ print '';
if ($user->rights->margins->read->all) {
print ''.$langs->trans('SalesRepresentative').' ';
print '';
- print $form->select_dolusers($agentid, 'agentid', 1);
+ print $form->select_dolusers($agentid, 'agentid', 1, '', 0, '', '', 0, 0, 0, '', 0, '', 'maxwidth300');
print ' ';
}
diff --git a/htdocs/opensurvey/card.php b/htdocs/opensurvey/card.php
index 7a36a316d13..c419a804210 100644
--- a/htdocs/opensurvey/card.php
+++ b/htdocs/opensurvey/card.php
@@ -99,7 +99,7 @@ if ($action == 'update')
$res=$object->update($user);
if ($res < 0)
{
- setEventMessage($object->error,'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
$action='edit';
}
}
@@ -131,7 +131,7 @@ if (GETPOST('ajoutcomment'))
if (! $resql)
{
- setEventMessage($langs->trans('ErrorInsertingComment'), 'errors');
+ setEventMessages($langs->trans('ErrorInsertingComment'), null, 'errors');
}
}
}
diff --git a/htdocs/opensurvey/img/accept-24.png b/htdocs/opensurvey/img/accept-24.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/accept.png b/htdocs/opensurvey/img/accept.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/add-16.png b/htdocs/opensurvey/img/add-16.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/add-24.png b/htdocs/opensurvey/img/add-24.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/calendar-32.png b/htdocs/opensurvey/img/calendar-32.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/cancel.png b/htdocs/opensurvey/img/cancel.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/chart-32.png b/htdocs/opensurvey/img/chart-32.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/fforward.png b/htdocs/opensurvey/img/fforward.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/medaille.png b/htdocs/opensurvey/img/medaille.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/next.png b/htdocs/opensurvey/img/next.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/object_opensurvey.png b/htdocs/opensurvey/img/object_opensurvey.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/previous.png b/htdocs/opensurvey/img/previous.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/img/rewind.png b/htdocs/opensurvey/img/rewind.png
old mode 100755
new mode 100644
diff --git a/htdocs/opensurvey/results.php b/htdocs/opensurvey/results.php
index ca10eac09b9..5c14a20de23 100644
--- a/htdocs/opensurvey/results.php
+++ b/htdocs/opensurvey/results.php
@@ -91,7 +91,7 @@ if (GETPOST("boutonp") || GETPOST("boutonp.x") || GETPOST("boutonp_x")) // bout
$num_rows = $db->num_rows($resql);
if ($num_rows > 0)
{
- setEventMessage($langs->trans("VoteNameAlreadyExists"),'errors');
+ setEventMessages($langs->trans("VoteNameAlreadyExists"), null, 'errors');
$error++;
}
else
@@ -1024,11 +1024,11 @@ if (isset($_POST["boutonp"]) && $_POST["nom"] == "") {
}
if (isset($erreur_prenom) && $erreur_prenom) {
- setEventMessage($langs->trans('VoteNameAlreadyExists'), 'errors');
+ setEventMessages($langs->trans('VoteNameAlreadyExists'), null, 'errors');
}
if (isset($erreur_ajout_date) && $erreur_ajout_date) {
- setEventMessage($langs->trans("ErrorWrongDate"), 'errors');
+ setEventMessages($langs->trans("ErrorWrongDate"), null, 'errors');
}
//fin du tableau
diff --git a/htdocs/opensurvey/wizard/choix_autre.php b/htdocs/opensurvey/wizard/choix_autre.php
index 9797762d6cb..a415d6b4987 100644
--- a/htdocs/opensurvey/wizard/choix_autre.php
+++ b/htdocs/opensurvey/wizard/choix_autre.php
@@ -84,7 +84,7 @@ if (isset($_POST["confirmecreation"]))
//message d'erreur si aucun champ renseigné
if ($testremplissage != "ok" || (!$toutchoix)) {
- setEventMessage($langs->trans("ErrorOpenSurveyOneChoice"), 'errors');
+ setEventMessages($langs->trans("ErrorOpenSurveyOneChoice"), null, 'errors');
} else {
//format du sondage AUTRE
diff --git a/htdocs/opensurvey/wizard/choix_date.php b/htdocs/opensurvey/wizard/choix_date.php
index 6a1efd39617..ecfe319828a 100644
--- a/htdocs/opensurvey/wizard/choix_date.php
+++ b/htdocs/opensurvey/wizard/choix_date.php
@@ -156,13 +156,13 @@ if (GETPOST('confirmation'))
}
if (isset($errheure)) {
- setEventMessage($langs->trans("ErrorBadFormat"), 'errors');
+ setEventMessages($langs->trans("ErrorBadFormat"), null, 'errors');
}
}
//If just one day and no other time options, error message
if (count($_SESSION["totalchoixjour"])=="1" && $_POST["horaires0"][0]=="" && $_POST["horaires0"][1]=="" && $_POST["horaires0"][2]=="" && $_POST["horaires0"][3]=="" && $_POST["horaires0"][4]=="") {
- setEventMessage($langs->trans("MoreChoices"), 'errors');
+ setEventMessages($langs->trans("MoreChoices"), null, 'errors');
$erreur=true;
}
diff --git a/htdocs/opensurvey/wizard/create_survey.php b/htdocs/opensurvey/wizard/create_survey.php
index ec78e9789ca..c9ba1324a70 100644
--- a/htdocs/opensurvey/wizard/create_survey.php
+++ b/htdocs/opensurvey/wizard/create_survey.php
@@ -94,12 +94,12 @@ if (GETPOST("creation_sondage_date") || GETPOST("creation_sondage_autre"))
$_SESSION['champdatefin'] = dol_print_date($champdatefin,'dayrfc');
//$testdate = false;
//$_SESSION['champdatefin'] = dol_print_date($champdatefin,'dayrfc');
- setEventMessage('ExpireDate','warnings');
+ setEventMessages('ExpireDate', null, 'warnings');
}
}
if (! $testdate) {
- setEventMessage($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("ExpireDate")), 'errors');
+ setEventMessages($langs->trans('ErrorFieldRequired',$langs->transnoentitiesnoconv("ExpireDate")), null, 'errors');
}
if ($titre && $testdate)
diff --git a/htdocs/paybox/admin/paybox.php b/htdocs/paybox/admin/paybox.php
index 5a7301613c4..98645575a13 100644
--- a/htdocs/paybox/admin/paybox.php
+++ b/htdocs/paybox/admin/paybox.php
@@ -67,7 +67,7 @@ if ($action == 'setvalue' && $user->admin)
if (! $error)
{
$db->commit();
- setEventMessage($langs->trans("SetupSaved"));
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
}
else
{
diff --git a/htdocs/paypal/admin/paypal.php b/htdocs/paypal/admin/paypal.php
index fd649b825bc..f794989c59e 100644
--- a/htdocs/paypal/admin/paypal.php
+++ b/htdocs/paypal/admin/paypal.php
@@ -51,6 +51,8 @@ if ($action == 'setvalue' && $user->admin)
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "PAYPAL_API_SIGNATURE",GETPOST('PAYPAL_API_SIGNATURE','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
+ $result=dolibarr_set_const($db, "PAYPAL_SSLVERSION",GETPOST('PAYPAL_SSLVERSION','alpha'),'chaine',0,'',$conf->entity);
+ if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "PAYPAL_CREDITOR",GETPOST('PAYPAL_CREDITOR','alpha'),'chaine',0,'',$conf->entity);
if (! $result > 0) $error++;
$result=dolibarr_set_const($db, "PAYPAL_API_INTEGRAL_OR_PAYPALONLY",GETPOST('PAYPAL_API_INTEGRAL_OR_PAYPALONLY','alpha'),'chaine',0,'',$conf->entity);
@@ -73,7 +75,7 @@ if ($action == 'setvalue' && $user->admin)
if (! $error)
{
$db->commit();
- setEventMessage($langs->trans("SetupSaved"));
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
}
else
{
@@ -111,7 +113,7 @@ print $langs->trans("PaypalDesc")." \n";
if (! function_exists('curl_version'))
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorPhpCurlNotInstalled"), 'errors');
+ setEventMessages($langs->trans("ErrorPhpCurlNotInstalled"), null, 'errors');
}
@@ -119,6 +121,7 @@ print ' ';
print '';
+// Account Parameters
$var=true;
print '';
print ''.$langs->trans("AccountParameter").' ';
@@ -151,6 +154,13 @@ print ' ';
+$var=!$var;
+print '';
+print $langs->trans("PAYPAL_SSLVERSION").' ';
+print $form->selectarray("PAYPAL_SSLVERSION",array('1'=> $langs->trans('TLSv1'),'6'=> $langs->trans('TLSv1.2')),$conf->global->PAYPAL_SSLVERSION);
+print ' ';
+
+// Usage Parameters
$var=true;
print '';
print ''.$langs->trans("UsageParameter").' ';
diff --git a/htdocs/paypal/lib/paypal.lib.php b/htdocs/paypal/lib/paypal.lib.php
index 824f312a9af..f06624cb076 100644
--- a/htdocs/paypal/lib/paypal.lib.php
+++ b/htdocs/paypal/lib/paypal.lib.php
@@ -702,8 +702,8 @@ function hash_call($methodName,$nvpStr)
exit;*/
curl_setopt($ch, CURLOPT_URL, $API_Endpoint);
curl_setopt($ch, CURLOPT_VERBOSE, 1);
- //curl_setopt($ch, CURLOPT_SSLVERSION, 3); // Force SSLv3
- curl_setopt($ch, CURLOPT_SSLVERSION, 1); // Force TLSv1
+ // TLSv1 by default or change to TLSv1.2 in module configuration
+ curl_setopt($ch, CURLOPT_SSLVERSION, (empty($conf->global->PAYPAL_SSLVERSION)?1:$conf->global->PAYPAL_SSLVERSION));
//turning off the server and peer verification(TrustManager Concept).
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
diff --git a/htdocs/product/admin/dynamic_prices.php b/htdocs/product/admin/dynamic_prices.php
index 79d7cdebfc2..45086630c47 100644
--- a/htdocs/product/admin/dynamic_prices.php
+++ b/htdocs/product/admin/dynamic_prices.php
@@ -43,14 +43,14 @@ $price_globals = new PriceGlobalVariable($db);
if ($action == 'edit_variable') {
$res = $price_globals->fetch($selection);
if ($res < 1) {
- setEventMessage($price_globals->error, 'errors');
+ setEventMessages($price_globals->error, $price_globals->errors, 'errors');
}
}
$price_updaters = new PriceGlobalVariableUpdater($db);
if ($action == 'edit_updater') {
$res = $price_updaters->fetch($selection);
if ($res < 1) {
- setEventMessage($price_updaters->error, 'errors');
+ setEventMessages($price_updaters->error, $price_updaters->errors, 'errors');
}
}
@@ -67,7 +67,7 @@ if (!empty($action) && empty($cancel)) {
if (!empty($save)) {
foreach ($price_globals->listGlobalVariables() as $entry) {
if ($price_globals->id != $entry->id && dol_strtolower($price_globals->code) == dol_strtolower($entry->code)) {
- setEventMessage($langs->trans("ErrorRecordAlreadyExists"), 'errors');
+ setEventMessages($langs->trans("ErrorRecordAlreadyExists"), null, 'errors');
$save = null;
}
}
@@ -78,21 +78,21 @@ if (!empty($action) && empty($cancel)) {
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_globals->error, 'errors');
+ setEventMessages($price_globals->error, $price_globals->errors, 'errors');
}
} elseif ($action == 'edit_variable' && !empty($save)) {
$res = $price_globals->update($user);
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_globals->error, 'errors');
+ setEventMessages($price_globals->error, $price_globals->errors, 'errors');
}
} elseif ($action == 'delete_variable') {
$res = $price_globals->delete($selection, $user);
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_globals->error, 'errors');
+ setEventMessages($price_globals->error, $price_globals->errors, 'errors');
}
}
@@ -113,7 +113,7 @@ if (!empty($action) && empty($cancel)) {
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_updaters->error, 'errors');
+ setEventMessages($price_updaters->error, $price_updaters->errors, 'errors');
}
} elseif ($action == 'edit_updater' && !empty($save)) {
//Verify if process() works
@@ -124,14 +124,14 @@ if (!empty($action) && empty($cancel)) {
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_updaters->error, 'errors');
+ setEventMessages($price_updaters->error, $price_updaters->errors, 'errors');
}
} elseif ($action == 'delete_updater') {
$res = $price_updaters->delete($selection, $user);
if ($res > 0) {
$action = '';
} else {
- setEventMessage($price_updaters->error, 'errors');
+ setEventMessages($price_updaters->error, $price_updaters->errors, 'errors');
}
}
} elseif (!empty($cancel)) {
diff --git a/htdocs/product/admin/price_rules.php b/htdocs/product/admin/price_rules.php
index 83d90485b3d..64fa982fff1 100644
--- a/htdocs/product/admin/price_rules.php
+++ b/htdocs/product/admin/price_rules.php
@@ -89,13 +89,13 @@ if ($_POST) {
SET fk_level = ".$db->escape($i_fk_level).", var_percent = ".$i_var_percent.", var_min_percent = ".$i_var_min_percent." WHERE level = ".$i;
if (!$db->query($sql)) {
- setEventMessage($langs->trans('ErrorSavingChanges'), 'errors');
+ setEventMessages($langs->trans('ErrorSavingChanges'), null, 'errors');
}
}
}
- setEventMessage($langs->trans("RecordSaved"));
+ setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
}
/*
diff --git a/htdocs/product/admin/product.php b/htdocs/product/admin/product.php
index 9c979862933..57f6577f789 100644
--- a/htdocs/product/admin/product.php
+++ b/htdocs/product/admin/product.php
@@ -51,8 +51,9 @@ $select_pricing_rules=array(
);
if ($conf->global->MAIN_FEATURES_LEVEL >= 2)
{
- $select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY'] = $langs->trans('PriceByQuantity').' ('.$langs->trans("Experimental").')'; // TODO If this is enabled, price must be hidden when price by qty is enabled, also price for quantity must be used when adding product into order/propal/invoice
- $select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY&PRODUIT_MULTIPRICES'] = $langs->trans('MultiPricesAbility') . '+' . $langs->trans('PriceByQuantity').' ('.$langs->trans("Experimental").')';
+ $langs->load("admin");
+ $select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY'] = $langs->trans('PriceByQuantity').' ('.$langs->trans("VersionExperimental").')'; // TODO If this is enabled, price must be hidden when price by qty is enabled, also price for quantity must be used when adding product into order/propal/invoice
+ $select_pricing_rules['PRODUIT_CUSTOMER_PRICES_BY_QTY&PRODUIT_MULTIPRICES'] = $langs->trans('MultiPricesAbility') . '+' . $langs->trans('PriceByQuantity').' ('.$langs->trans("VersionExperimental").')';
}
// Clean param
@@ -97,12 +98,12 @@ if ($action == 'setModuleOptions')
if (! $error)
{
$db->commit();
- setEventMessage($langs->trans("SetupSaved"));
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
}
else
{
$db->rollback();
- setEventMessage($langs->trans("Error"), 'errors');
+ setEventMessages($langs->trans("Error"), null, 'errors');
}
}
@@ -195,11 +196,11 @@ if ($action)
if (! $error)
{
- setEventMessage($langs->trans("SetupSaved"));
+ setEventMessages($langs->trans("SetupSaved"), null, 'mesgs');
}
else
{
- setEventMessage($langs->trans("Error"), 'errors');
+ setEventMessages($langs->trans("Error"), null, 'errors');
}
}
diff --git a/htdocs/product/admin/product_tools.php b/htdocs/product/admin/product_tools.php
index 1f2820358e1..0d3ea7584f1 100644
--- a/htdocs/product/admin/product_tools.php
+++ b/htdocs/product/admin/product_tools.php
@@ -57,7 +57,7 @@ if ($action == 'convert')
if ($oldvatrate == $newvatrate)
{
$langs->load("errors");
- setEventMessage($langs->trans("ErrorNewValueCantMatchOldValue"),'errors');
+ setEventMessages($langs->trans("ErrorNewValueCantMatchOldValue"), null, 'errors');
$error++;
}
@@ -225,12 +225,12 @@ if ($action == 'convert')
// Output result
if (! $error)
{
- if ($nbrecordsmodified > 0) setEventMessage($langs->trans("RecordsModified",$nbrecordsmodified));
- else setEventMessage($langs->trans("NoRecordFound"),'warnings');
+ if ($nbrecordsmodified > 0) setEventMessages($langs->trans("RecordsModified",$nbrecordsmodified), null, 'mesgs');
+ else setEventMessages($langs->trans("NoRecordFound"), null, 'warnings');
}
else
{
- setEventMessage($langs->trans("Error"),'errors');
+ setEventMessages($langs->trans("Error"), null, 'errors');
}
}
diff --git a/htdocs/product/card.php b/htdocs/product/card.php
index 4f029ad6727..77b14b24c7a 100644
--- a/htdocs/product/card.php
+++ b/htdocs/product/card.php
@@ -1552,7 +1552,6 @@ else
}
else if ($action != 'create')
{
- header("Location: index.php");
exit;
}
}
diff --git a/htdocs/product/class/product.class.php b/htdocs/product/class/product.class.php
index aaf5aaf1baa..b68ac04b87d 100644
--- a/htdocs/product/class/product.class.php
+++ b/htdocs/product/class/product.class.php
@@ -881,7 +881,7 @@ class Product extends CommonObject
// Delete all child tables
if (! $error)
{
- $elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock');
+ $elements = array('product_fournisseur_price','product_price','product_lang','categorie_product','product_stock','product_customer_price');
foreach($elements as $table)
{
if (! $error)
@@ -1563,7 +1563,7 @@ class Product extends CommonObject
}
$sql = "SELECT rowid, ref, ref_ext, label, description, url, note, customcode, fk_country, price, price_ttc,";
- $sql.= " price_min, price_min_ttc, price_base_type, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, tosell,";
+ $sql.= " price_min, price_min_ttc, price_base_type, cost_price, tva_tx, recuperableonly as tva_npr, localtax1_tx, localtax2_tx, tosell,";
$sql.= " tobuy, fk_product_type, duration, seuil_stock_alerte, canvas,";
$sql.= " weight, weight_units, length, length_units, surface, surface_units, volume, volume_units, barcode, fk_barcode_type, finished,";
$sql.= " accountancy_code_buy, accountancy_code_sell, stock, pmp,";
@@ -1606,6 +1606,7 @@ class Product extends CommonObject
$this->price_min = $obj->price_min;
$this->price_min_ttc = $obj->price_min_ttc;
$this->price_base_type = $obj->price_base_type;
+ $this->cost_price = $obj->cost_price;
$this->tva_tx = $obj->tva_tx;
//! French VAT NPR
$this->tva_npr = $obj->tva_npr;
diff --git a/htdocs/product/composition/card.php b/htdocs/product/composition/card.php
index 86dfb8a8fd4..9686c4683ae 100644
--- a/htdocs/product/composition/card.php
+++ b/htdocs/product/composition/card.php
@@ -85,9 +85,11 @@ if ($action == 'add_prod' && ($user->rights->produit->creer || $user->rights->se
$error++;
$action = 're-edit';
if ($object->error == "isFatherOfThis") {
- setEventMessage($langs->trans("ErrorAssociationIsFatherOfThis"), 'errors');
- } else {
- setEventMessage($object->error, 'errors');
+ setEventMessages($langs->trans("ErrorAssociationIsFatherOfThis"), null, 'errors');
+ }
+ else
+ {
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
@@ -101,7 +103,7 @@ if ($action == 'add_prod' && ($user->rights->produit->creer || $user->rights->se
{
$error++;
$action = 're-edit';
- setEventMessage($object->error, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
diff --git a/htdocs/product/dynamic_price/editor.php b/htdocs/product/dynamic_price/editor.php
index ba00d3be3bd..d7d059ae10d 100644
--- a/htdocs/product/dynamic_price/editor.php
+++ b/htdocs/product/dynamic_price/editor.php
@@ -75,7 +75,7 @@ if ($action == 'add')
$priceparser = new PriceParser($db);
$price_result = $priceparser->parseProductSupplierExpression($id, $expression, 0, 0);
if ($price_result < 0) { //Expression is not valid
- setEventMessage($priceparser->translatedError(), 'errors');
+ setEventMessages($priceparser->translatedError(), null, 'errors');
}
else
{
@@ -85,21 +85,21 @@ if ($action == 'add')
if ($result > 0) //created successfully, set the eid to newly created entry
{
$eid = $price_expression->id;
- setEventMessage($langs->trans("RecordSaved"));
+ setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
}
else
{
- setEventMessage("add: ".$price_expression->error, 'errors');
+ setEventMessages("add: ".$price_expression->error, $price_expression->errors, 'errors');
}
}
}
else if ($result < 0)
{
- setEventMessage("add find: ".$price_expression->error, 'errors');
+ setEventMessages("add find: ".$price_expression->error, $price_expression->errors, 'errors');
}
else
{
- setEventMessage($langs->trans("ErrorRecordAlreadyExists"), 'errors');
+ setEventMessages($langs->trans("ErrorRecordAlreadyExists"), null, 'errors');
}
}
}
@@ -115,7 +115,7 @@ if ($action == 'update')
$priceparser = new PriceParser($db);
$price_result = $priceparser->parseProductSupplierExpression($id, $expression, 0, 0);
if ($price_result < 0) { //Expression is not valid
- setEventMessage($priceparser->translatedError(), 'errors');
+ setEventMessages($priceparser->translatedError(), null, 'errors');
}
else
{
@@ -125,21 +125,21 @@ if ($action == 'update')
$result = $price_expression->update($user);
if ($result < 0)
{
- setEventMessage("update: ".$price_expression->error, 'errors');
+ setEventMessages("update: ".$price_expression->error, $price_expression->errors, 'errors');
}
else
{
- setEventMessage($langs->trans("RecordSaved"));
+ setEventMessages($langs->trans("RecordSaved"), null, 'mesgs');
}
}
}
else if ($result < 0)
{
- setEventMessage("update find: ".$price_expression->error, 'errors');
+ setEventMessages("update find: ".$price_expression->error, $price_expression->errors, 'errors');
}
else
{
- setEventMessage($langs->trans("ErrorRecordAlreadyExists"), 'errors');
+ setEventMessages($langs->trans("ErrorRecordAlreadyExists"), null, 'errors');
}
}
}
@@ -151,7 +151,7 @@ if ($action == 'delete')
$result = $price_expression->delete($eid, $user);
if ($result < 0)
{
- setEventMessage("delete: ".$price_expression->error, 'errors');
+ setEventMessages("delete: ".$price_expression->error, $price_expression->errors, 'errors');
}
$eid = 0;
}
@@ -231,7 +231,7 @@ print '';
diff --git a/htdocs/product/fournisseurs.php b/htdocs/product/fournisseurs.php
index 96aa9aa6311..04007d2ede1 100644
--- a/htdocs/product/fournisseurs.php
+++ b/htdocs/product/fournisseurs.php
@@ -46,6 +46,7 @@ $rowid=GETPOST('rowid','int');
$action=GETPOST('action', 'alpha');
$cancel=GETPOST('cancel', 'alpha');
$socid=GETPOST('socid', 'int');
+$cost_price=GETPOST('cost_price', 'int');
$backtopage=GETPOST('backtopage','alpha');
$error=0;
@@ -91,17 +92,37 @@ if ($reshook < 0) setEventMessages($hookmanager->error, $hookmanager->errors, 'e
if (empty($reshook))
{
+ if ($action == 'setcost_price')
+ {
+ if ($id)
+ {
+ $result=$object->fetch($id);
+ $result=$object->setValueFrom('cost_price', price2num($cost_price));
+ if ($result > 0)
+ {
+ $object->cost_price = price2num($cost_price);
+ setEventMessage($langs->trans("RecordSaved"));
+ }
+ else
+ {
+ $error++;
+ setEventMessages($object->error, $object->errors, 'errors');
+ }
+ }
+ $action='';
+ }
+
if ($action == 'remove_pf')
{
- if ($rowid)
+ if ($rowid) // id of product supplier price to remove
{
$action = '';
- $result=$product->remove_product_fournisseur_price($rowid);
+ $result=$object->remove_product_fournisseur_price($rowid);
if($result > 0){
setEventMessage($langs->trans("PriceRemoved"));
}else{
$error++;
- setEventMessages($product->error, $product->errors, 'errors');
+ setEventMessages($object->error, $object->errors, 'errors');
}
}
}
@@ -282,6 +303,17 @@ if ($id > 0 || $ref)
}
print ' ';
+ // Cost price. Can be used for margin module for option "calculate margin on explicit cost price
+ // Accountancy sell code
+ print '';
+ $textdesc =$langs->trans("CostPriceDescription");
+ $textdesc.=" ".$langs->trans("CostPriceUsage");
+ $text=$form->textwithpicto($langs->trans("CostPrice"), $textdesc, 1, 'help', '');
+ print $form->editfieldkey($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6');
+ print ' ';
+ print $form->editfieldval($text,'cost_price',$object->cost_price,$object,$user->rights->produit->creer||$user->rights->service->creer,'amount:6');
+ print ' ';
+
print '
';
print '';
@@ -435,7 +467,7 @@ if ($id > 0 || $ref)
window.location = "'.DOL_URL_ROOT.'/product/dynamic_price/editor.php?id='.$id.'&tab=fournisseurs&eid=" + $("#eid").attr("value");
}
function on_change() {
- if ($("#eid").attr("value") == 0) {
+ if ($("#eid").val() == 0) {
jQuery("#price_numeric").show();
} else {
jQuery("#price_numeric").hide();
@@ -463,7 +495,7 @@ if ($id > 0 || $ref)
print ' '.$langs->trans('days').' ';
print '';
- // Charges ????
+ // Option to define a transport cost on supplier price
if ($conf->global->PRODUCT_CHARGES)
{
if (! empty($conf->margin->enabled))
diff --git a/htdocs/product/price.php b/htdocs/product/price.php
index 3f16a20d98b..2a770841c60 100644
--- a/htdocs/product/price.php
+++ b/htdocs/product/price.php
@@ -841,13 +841,13 @@ if ($action == 'edit_price' && $object->getRights()->creer)