/framework/Browser/Browser/imode.php
PHP | 411 lines | 330 code | 21 blank | 60 comment | 5 complexity | 776669b3f4414354bafd72b6bcf5519c MD5 | raw file
Possible License(s): LGPL-2.0, AGPL-1.0, LGPL-2.1, BSD-2-Clause
- <?php
- /**
- * The Browser_imode:: class extends the Browser API by providing
- * specific information about Imode handsets.
- *
- * $Horde: framework/Browser/Browser/imode.php,v 1.7.12.9 2009-01-06 15:22:55 jan Exp $
- *
- * Copyright 2000-2007 Mika Tuupola
- * Copyright 2002-2009 The Horde Project (http://www.horde.org/)
- *
- * See the enclosed file COPYING for license information (LGPL). If you
- * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
- *
- * @author Chuck Hagenbuch <chuck@horde.org>
- * @since Horde 3.0
- * @package Horde_Browser
- */
- class Browser_imode {
- /**
- * Device data. From http://www.nttdocomo.co.jp/i/tag/s5.html#5_1
- *
- * @var array
- */
- var $_data = array(
- 'D209i' => array(
- 'imagewidth' => 96, 'imageheight' => 90,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F209i' => array(
- 'imagewidth' => 96, 'imageheight' => 91,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'N209i' => array(
- 'imagewidth' => 108, 'imageheight' => 82,
- 'textwidth' => 9, 'textheight' => 6,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'P209i' => array(
- 'imagewidth' => 96, 'imageheight' => 87,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'P209is' => array(
- 'imagewidth' => 96, 'imageheight' => 87,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'R209i' => array(
- 'imagewidth' => 96, 'imageheight' => 72,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'ER209i' => array(
- 'imagewidth' => 120, 'imageheight' => 72,
- 'textwidth' => 10, 'textheight' => 6,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'KO209i' => array(
- 'imagewidth' => 96, 'imageheight' => 96,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'D210i' => array(
- 'imagewidth' => 96, 'imageheight' => 91,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F210i' => array(
- 'imagewidth' => 96, 'imageheight' => 113,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'N210i' => array(
- 'imagewidth' => 118, 'imageheight' => 113,
- 'textwidth' => 10, 'textheight' => 8,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'P210i' => array(
- 'imagewidth' => 96, 'imageheight' => 91,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'KO210i' => array(
- 'imagewidth' => 96, 'imageheight' => 96,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'SO210i' => array(
- 'imagewidth' => 120, 'imageheight' => 113,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'D501i' => array(
- 'imagewidth' => 96, 'imageheight' => 72,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'black',
- 'imageformats' => array('gif')
- ),
- 'F501i' => array(
- 'imagewidth' => 112, 'imageheight' => 84,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'black',
- 'imageformats' => array('gif')
- ),
- 'N501i' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' =>10,
- 'color' => 'black',
- 'imageformats' => array('gif')
- ),
- 'P501i' => array(
- 'imagewidth' => 96, 'imageheight' => 120,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 'black',
- 'imageformats' => array('gif')
- ),
- 'D502i' => array(
- 'imagewidth' => 96, 'imageheight' => 90,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F502i' => array(
- 'imagewidth' => 96, 'imageheight' => 91,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F502it' => array(
- 'imagewidth' => 96, 'imageheight' => 91,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'N502i' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'N502it' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'P502i' => array(
- 'imagewidth' => 96, 'imageheighth' => 117,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'NM502i' => array(
- 'imagewidth' => 111, 'imageheight' => 77,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'black',
- 'imageformats' => array('gif')
- ),
- 'SO502i' => array(
- 'imagewidth' => 120, 'imageheight' => 120,
- 'textwidth' => 8, 'textheight' => 8,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'SO502iwm' => array(
- 'imagewidth' => 120, 'imageheight' => 113,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F503i' => array(
- 'imagewidth' => 120, 'imageheight' => 130,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'F503iS' => array(
- 'imagewidth' => 120, 'imageheight' => 130,
- 'textwidth' => 12, 'textheight' => 12,
- 'color' => 4096,
- 'imageformats' => array('gif')
- ),
- 'P503i' => array(
- 'imagewidth' => 120, 'imageheight' => 130,
- 'textwidth' => 12, 'textheight' => 10,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'P503iS' => array(
- 'imagewidth' => 120, 'imageheight' => 130,
- 'textwidth' => 12, 'textheight' => 10,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'SO503i' => array(
- 'imagewidth' => 120, 'imageheight' => 113,
- 'textwidth' => 8.5, 'textheight' => 7,
- 'color' => 65536,
- 'imageformats' => array('gif')
- ),
- 'D503i' => array(
- 'imagewidth' => 132, 'imageheight' => 126,
- 'textwidth' => 8, 'textheight' => 7,
- 'color' => 4096,
- 'imageformats' => array('gif')
- ),
- 'N503i' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 4096,
- 'imageformats' => array('gif', 'jpg')
- ),
- 'N503iS' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 4096,
- 'imageformats' => array('gif', 'jpg')
- ),
- 'N691i' => array(
- 'imagewidth' => 96, 'imageheight' => 72,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'SH821i' => array(
- 'imagewidth' => 96, 'imageheight' => 78,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 256,
- 'imageformats' => array('gif')
- ),
- 'N821i' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'P821i' => array(
- 'imagewidth' => 118, 'imageheight' => 128,
- 'textwidth' => 10, 'textheight' => 10,
- 'color' => 'grey',
- 'imageformats' => array('gif')
- ),
- 'safe' => array(
- 'imagewidth' => 94, 'imageheight' => 72,
- 'textwidth' => 8, 'textheight' => 6,
- 'color' => 'black',
- 'imageformats' => array('gif')
- )
- );
- var $_manufacturerlist = array(
- 'D' => 'Mitsubishi',
- 'P' => 'Panasonic (Matsushita)',
- 'NM' => 'Nokia',
- 'SO' => 'Sony',
- 'F' => 'Fujitsu',
- 'N' => 'Nec',
- 'SH' => 'Sharp',
- 'ER' => 'Ericsson',
- 'R' => 'Japan Radio',
- 'KO' => 'Kokusai (Hitachi)'
- );
- var $_extra = array(
- 't' => 'Transport layer',
- 'e' => 'English language',
- 's' => 'Second version'
- );
- var $_user_agent;
- var $_model;
- var $_manufacturer;
- var $_httpversion;
- var $_cache = 5;
- /**
- * Does not handle bogus user_agents or most of the other error
- * situation properly yet.
- *
- * Example usage:
- * $ua = &new Browser_imode($_SERVEr['HTTP_USER_AGENT']);
- *
- * @param string $input The user agent to match.
- */
- function Browser_imode($input)
- {
- $_error = 0;
- $temp = explode('/', $input);
- $this->_user_agent = $input;
- $this->_httpversion = $temp[1];
- $this->_model = $temp[2];
- if ($temp[3]) {
- $this->_cache = substr($temp[3], 1);
- }
- preg_match('/(^[a-zA-Z]+)([0-9]+i)(.*)\/?(.*)/', $this->_model, $matches);
- // @TODO: Fix situation of unknown manufacturer. Implement
- // extrainfo properly.
- $this->_manufacturer = $this->_manufacturerlist[$matches[1]];
- $this->_extra = $matches[3];
- if (!($this->_data[$this->_model])) {
- $_error = PEAR::raiseError('Unknown User Agent');
- }
- }
- /**
- * Example usage:
- * $imagedim = $ua->getImageDimensions();
- * $imagewidth = $imagedim[0];
- * $imageheight = $imagedim[1];
- *
- * @return array The maximum imagewidth and imageheight that
- * fit on the handset screen without scrolling.
- */
- function getImageDimensions()
- {
- $data = $this->_data[$this->_model];
- return array($data['imagewidth'], $data['imageheight']);
- }
- /**
- * Example usage:
- * $textdim = $ua->getTextDimensions();
- * $textwidth = $textdim[0];
- * $textheight = $textdim[1];
- *
- * @return array The Maximum textwidth and textheight that
- * fit on the handset screen without scrolling.
- */
- function getTextDimensions()
- {
- return array($this->_data[$this->_model]['textwidth'],
- $this->_data[$this->_model]['textheight']);
- }
- /**
- * @return integer The amount of handset cache in kilobytes.
- */
- function getCache()
- {
- return (int)$this->_cache;
- }
- function getManufacturer()
- {
- return $this->_manufacturer;
- }
- function getExtra()
- {
- return $this->_extra;
- }
- function getImageFormats()
- {
- return $this->_data[$this->_model]['imageformats'];
- }
- /**
- * @return integer Which color model the handset supports.
- * Values have the following meaning:
- * 0 -> black and white
- * 1 -> 4 tone greyscale
- * 2 -> 256 color
- */
- function getColor()
- {
- return $this->_data[$this->_model]['color'];
- }
- function getHTTPVersion()
- {
- return $this->_httpversion;
- }
- function isColor()
- {
- return $this->_data[$this->_model]['color'] == 256;
- }
- function isGreyScale()
- {
- return $this->_data[$this->_model]['color'] == 'grey';
- }
- function isBlackAndWhite()
- {
- return $this->_data[$this->_model]['color'] == 'black';
- }
- }