| [ Index ] |
|
Code source de Horde 3.1.3 |
1 <?php 2 /** 3 * @package Horde_Mobile 4 */ 5 class Horde_Mobile_card extends Horde_Mobile_element { 6 7 var $_name; 8 var $_title; 9 var $_form; 10 var $_elements = array(); 11 var $_softkeys = array(); 12 13 /** 14 * Constructor 15 * 16 * @param string $name The name of this card. Can be used in anchor 17 * links. 18 * @param string $title If a string is provided here, it will be displayed 19 * in the HTML title bar, respectively somewhere on 20 * the WAP display. Using a title you will normally 21 * have to spend one of your few lines on your WAP 22 * display. Consider that some WAP phones/SDK's and 23 * handheld devices don't display the title at all. 24 */ 25 function Horde_Mobile_card($name = null, $title = null) 26 { 27 $this->_name = $name; 28 $this->_title = $title; 29 } 30 31 function &add(&$element) 32 { 33 static $linksetAdded; 34 35 if (!is_a($element, 'Horde_Mobile_element')) { 36 $error = PEAR::raiseError('Invalid element.'); 37 return $error; 38 } elseif (is_a($element, 'Horde_Mobile_text') || 39 is_a($element, 'Horde_Mobile_table') || 40 is_a($element, 'Horde_Mobile_image') || 41 is_a($element, 'Horde_Mobile_link') || 42 is_a($element, 'Horde_Mobile_phone') || 43 is_a($element, 'Horde_Mobile_rule')) { 44 $block = &new Horde_Mobile_block($element); 45 $this->_elements[] = &$block; 46 } elseif (is_a($element, 'Horde_Mobile_block')) { 47 $this->_elements[] = &$element; 48 } elseif (is_a($element, 'Horde_Mobile_form')) { 49 if (!empty($this->_form)) { 50 $error = PEAR::raiseError('Cards may only contain one Form element.'); 51 return $error; 52 } 53 $this->_elements[] = &$element; 54 $this->_form = &$element; 55 } elseif (is_a($element, 'Horde_Mobile_linkset')) { 56 if (!empty($linksetAdded)) { 57 $error = PEAR::raiseError('Cards may only contain one Linkset element.'); 58 return $error; 59 } 60 $block = &new Horde_Mobile_block($element); 61 $this->_elements[] = &$block; 62 $linksetAdded = true; 63 } else { 64 $error = PEAR::raiseError('This element must be inside an appropriate container element.'); 65 return $error; 66 } 67 68 return $element; 69 } 70 71 function softkey($url, $label) 72 { 73 $this->_softkeys[] = array('url' => $url, 74 'label' => $label); 75 } 76 77 } 78 79 /** 80 * Horde_Mobile:: 81 * 82 * Horde API for generating Mobile content. Includes numerous utility 83 * functions, generalized element classes, and renderers for markup 84 * languages including WML, HDML, and CHTML. 85 * 86 * This class is the top level class of all Horde_Mobile classes. Your 87 * page should consist of exactly one Horde_Mobile object. Appropriate 88 * markup - Imode, WML, HDML, etc. - is generated by the appropriate 89 * renderer object 90 * 91 * Do not overstuff Horde_Mobile objects. Remember that a lot of WAP 92 * clients cannot handle more than about 1400 bytes of compiled data. 93 * 94 * Examples: 95 * 96 * $myPage = new Horde_Mobile(); 97 * $myPage = new Horde_Mobile('My WAP page'); 98 * $myPage = new Horde_Mobile('', 'center'); 99 * 100 * // More stuff 101 * 102 * $myPage->add($myText); 103 * 104 * // More items 105 * 106 * $myPage->render(); 107 * 108 * $Horde: framework/Mobile/Mobile.php,v 1.32.10.9 2006/06/26 06:27:23 selsky Exp $ 109 * 110 * Copyright 2002-2006 Chuck Hagenbuch <chuck@horde.org> 111 * 112 * See the enclosed file COPYING for license information (LGPL). If you 113 * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. 114 * 115 * @author Chuck Hagenbuch <chuck@horde.org> 116 * @since Horde 3.0 117 * @package Horde_Mobile 118 */ 119 class Horde_Mobile extends Horde_Mobile_card { 120 121 var $_title; 122 var $_elements = array(); 123 var $_cards = array(); 124 var $_debug = false; 125 126 // Decide whether the simulator device is to be used. Only affects 127 // HTML browser output. 128 var $_simulator = false; 129 130 /** 131 * Constructor 132 * 133 * @param string $title If a string is provided here, it will be displayed 134 * in the HTML title bar, respectively somewhere on 135 * the WAP display. Using a title you will normally 136 * have to spend one of your few lines on your WAP 137 * display. Consider that some WAP phones/SDK's and 138 * handheld devices don't display the title at all. 139 * @param string $agent If specified, use instead of HTTP_USER_AGENT. 140 */ 141 function Horde_Mobile($title = null, $agent = null) 142 { 143 if (!is_null($title)) { 144 $this->_title = $title; 145 } 146 147 require_once 'Horde/Browser.php'; 148 $browser = &Browser::singleton($agent); 149 150 if ($browser->hasFeature('html')) { 151 $ml = 'html'; 152 } elseif ($browser->hasFeature('wml')) { 153 $ml = 'wml'; 154 } else { 155 $ml = 'html'; 156 } 157 158 require_once dirname(__FILE__) . '/Mobile/Renderer.php'; 159 $this->_renderer = &Horde_Mobile_Renderer::singleton($ml, $browser); 160 } 161 162 function &add(&$element) 163 { 164 if (is_a($element, 'Horde_Mobile_card')) { 165 if (count($this->_elements)) { 166 $error = PEAR::raiseError('You cannot mix Horde_Mobile_cards and other elements at the deck level.'); 167 return $error; 168 } 169 170 $this->_usingCards = true; 171 $this->_cards[] = &$element; 172 173 return $element; 174 } else { 175 if (count($this->_cards)) { 176 $error = PEAR::raiseError('You cannot mix Horde_Mobile_cards and other elements at the deck level.'); 177 return $error; 178 } 179 180 return parent::add($element); 181 } 182 } 183 184 /** 185 * Activates the built-in device simulator on bigscreen browsers. 186 * The device simulator is only fully-functional in Internet 187 * Explorer, because the layout requires a scrollable table 188 * element. Other browsers will fail to show content on pages 189 * longer than a single screen. 190 */ 191 function useSimulator() 192 { 193 $this->_simulator = true; 194 } 195 196 /** 197 * Creates the page in the appropriate markup language. Depending 198 * on the renderer type, HTML (pure HTML, handheldfriendly AvantGo 199 * HTML, i-mode cHTML, MML), WML or HDML code is created. 200 */ 201 function display() 202 { 203 $this->_renderer->render($this); 204 } 205 206 } 207 208 /** 209 * @package Horde_Mobile 210 */ 211 class Horde_Mobile_element { 212 213 function Horde_Mobile_element() 214 { 215 } 216 217 function get($attribute) 218 { 219 $attr = '_' . $attribute; 220 if (isset($this->$attr)) { 221 return $this->$attr; 222 } else { 223 return null; 224 } 225 } 226 227 function set($attribute, $value) 228 { 229 $attr = '_' . $attribute; 230 $this->$attr = $value; 231 } 232 233 } 234 235 /** 236 * @package Horde_Mobile 237 */ 238 class Horde_Mobile_formElement extends Horde_Mobile_element { 239 240 var $_name; 241 var $_value; 242 var $_label; 243 var $_size; 244 var $_maxlength; 245 var $_type; 246 var $_format; 247 var $_mode; 248 249 /** 250 * Set input mode/istyle for japanese MML/i-mode devices. 251 * 252 * @param string $mode Input mode, one of: 253 * 'alpha' (default) 254 * 'katakana' 255 * 'hiragana' 256 * 'numeric' 257 */ 258 function setMode($mode) 259 { 260 $this->_mode = $mode; 261 262 // Map the mode into an appropriate format string, used for 263 // WML and HDML. If a format string was provided earlier, it 264 // will be overwritten. 265 switch ($mode) { 266 case 'hiragana': 267 case 'katakana': 268 $this->_format = '*M'; 269 break; 270 271 case 'alpha': 272 $this->_format = '*m'; 273 break; 274 275 case 'numeric': 276 $this->_format = '*N'; 277 break; 278 } 279 } 280 281 } 282 283 /** 284 * This class defines a form with various possible input elements. The 285 * input elements have to be defined as separate objects and are 286 * linked to the form with a special "add" function. One Horde_Mobile 287 * object can contain only one Horde_Mobile_form object. 288 * 289 * Examples: 290 * 291 * $myPage = new Horde_Mobile(...); 292 * 293 * $myForm = new Horde_Mobile_form("/mynextpage.wml"); 294 * $myText = new Horde_Mobile_text(...); 295 * $myForm->add($myText); 296 * $myInput = new Horde_Mobile_input(...); 297 * $myForm->add($myInput); 298 * $mySubmit = new Horde_Mobile_submit(...); 299 * $myForm->add($mySubmit); 300 * 301 * $myPage->add($myForm); 302 * 303 * $myPage->render(); 304 * 305 * @see Horde_Mobile_text 306 * @see Horde_Mobile_image 307 * @see Horde_Mobile_table 308 * @see Horde_Mobile_input 309 * @see Horde_Mobile_textarea 310 * @see Horde_Mobile_select 311 * @see Horde_Mobile_radio 312 * @see Horde_Mobile_checkbox 313 * @see Horde_Mobile_submit 314 * @see Horde_Mobile_rule 315 * 316 * @package Horde_Mobile 317 */ 318 class Horde_Mobile_form extends Horde_Mobile_element { 319 320 var $_url; 321 var $_method; 322 var $_elements = array(); 323 324 /** 325 * Constructor 326 * 327 * @param string $url Address where the user input is sent to. 328 * @param string $method 'post' (default) or 'get'. 329 * @param boolean $session Preserve the sesion id in the form? Defaults to true. 330 */ 331 function Horde_Mobile_form($url, $method = 'post', $session = true) 332 { 333 $this->_url = $url; 334 $this->_method = $method; 335 336 if ($session && !array_key_exists(session_name(), $_COOKIE)) { 337 $this->add(new Horde_Mobile_hidden(session_name(), session_id())); 338 } 339 } 340 341 function &add(&$formElement) 342 { 343 if (is_a($formElement, 'Horde_Mobile_submit')) { 344 $formElement->_form = &$this; 345 $block = &new Horde_Mobile_block($formElement); 346 $this->_elements[] = &$block; 347 } elseif (is_a($formElement, 'Horde_Mobile_hidden') || 348 is_a($formElement, 'Horde_Mobile_block')) { 349 $this->_elements[] = &$formElement; 350 } elseif (is_a($formElement, 'Horde_Mobile_formElement') || 351 is_a($formElement, 'Horde_Mobile_text') || 352 is_a($formElement, 'Horde_Mobile_table') || 353 is_a($formElement, 'Horde_Mobile_rule') || 354 is_a($formElement, 'Horde_Mobile_image')) { 355 $block = &new Horde_Mobile_block($formElement); 356 $this->_elements[] = &$block; 357 } else { 358 $error = PEAR::raiseError('Specified element cannot be inside a form.'); 359 return $error; 360 } 361 362 return $formElement; 363 } 364 365 function getDefaults() 366 { 367 $defaults = array(); 368 foreach ($this->_elements as $val) { 369 switch (strtolower(get_class($val))) { 370 case 'horde_mobile_hidden': 371 $defaults[] = array('name' => $val->get('name'), 372 'value' => $val->get('value'), 373 'hidden' => true); 374 break; 375 376 case 'horde_mobile_block': 377 foreach ($val->_elements as $bval) { 378 switch (strtolower(get_class($bval))) { 379 case 'horde_mobile_checkbox': 380 if ($bval->isChecked()) { 381 $defaults[] = array('name' => $bval->get('name'), 382 'value' => $bval->get('value')); 383 } 384 break; 385 386 case 'horde_mobile_input': 387 case 'horde_mobile_textarea': 388 case 'horde_mobile_select': 389 case 'horde_mobile_radio': 390 $defaults[] = array('name' => $bval->get('name'), 391 'value' => $bval->get('value')); 392 break; 393 394 case 'horde_mobile_hidden': 395 $defaults[] = array('name' => $bval->get('name'), 396 'value' => $bval->get('value'), 397 'hidden' => true); 398 break; 399 400 case 'horde_mobile_table': 401 foreach ($bval->_rows as $row) { 402 foreach ($row->_columns as $col) { 403 switch (strtolower(get_class($col))) { 404 case 'horde_mobile_checkbox': 405 if ($col->isChecked()) { 406 $defaults[] = array('name' => $bval->get('name'), 407 'value' => $bval->get('value')); 408 } 409 break; 410 411 case 'horde_mobile_input': 412 case 'horde_mobile_textarea': 413 case 'horde_mobile_select': 414 case 'horde_mobile_radio': 415 $defaults[] = array('name' => $bval->get('name'), 416 'value' => $bval->get('value')); 417 break; 418 419 case 'horde_mobile_hidden': 420 $defaults[] = array('name' => $bval->get('name'), 421 'value' => $bval->get('value'), 422 'hidden' => true); 423 break; 424 } 425 } 426 } 427 break; 428 } 429 } 430 break; 431 } 432 } 433 434 return $defaults; 435 } 436 437 function getGetVars() 438 { 439 // Determine all elements that have to be submitted. 440 $getvars = array(); 441 foreach ($this->_elements as $val) { 442 switch (strtolower(get_class($val))) { 443 case 'horde_mobile_block': 444 foreach ($val->_elements as $bval) { 445 switch (strtolower(get_class($bval))) { 446 case 'horde_mobile_input': 447 case 'horde_mobile_hidden': 448 case 'horde_mobile_textarea': 449 case 'horde_mobile_select': 450 case 'horde_mobile_checkbox': 451 case 'horde_mobile_radio': 452 $getvars[] = $bval->get('name'); 453 break; 454 455 case 'horde_mobile_table': 456 foreach ($bval->_rows as $row) { 457 foreach ($row->_columns as $col) { 458 switch (strtolower(get_class($col))) { 459 case 'horde_mobile_input': 460 case 'horde_mobile_hidden': 461 case 'horde_mobile_textarea': 462 case 'horde_mobile_select': 463 case 'horde_mobile_checkbox': 464 case 'horde_mobile_radio': 465 $getvars[] = $col->get('name'); 466 break; 467 } 468 } 469 } 470 break; 471 } 472 } 473 break; 474 } 475 } 476 477 return $getvars; 478 } 479 480 } 481 482 /** 483 * This class holds text-level elements for use in Horde_Mobile or 484 * Horde_Mobile_form objects. 485 * 486 * Examples: 487 * 488 * $block = new Horde_Mobile_block("Hello WAP!"); 489 * $text = new Horde_Mobile_text("Welcome to Horde_Mobile", 'b'); 490 * $block->add($text); 491 * 492 * @see Horde_Mobile 493 * @see Horde_Mobile_form 494 * 495 * @package Horde_Mobile 496 */ 497 class Horde_Mobile_block extends Horde_Mobile_element { 498 499 var $_elements = array(); 500 501 /** 502 * Constructor. 503 * 504 * @param mixed $elements Any elements (a single one or an array) to fill this block with. 505 */ 506 function Horde_Mobile_block(&$elements) 507 { 508 if (!is_null($elements)) { 509 if (!is_array($elements)) { 510 $this->add($elements); 511 } else { 512 foreach ($elements as $element) { 513 $this->add($element); 514 } 515 } 516 } 517 } 518 519 function &add(&$element) 520 { 521 if (!is_a($element, 'Horde_Mobile_element')) { 522 $error = PEAR::raiseError('Invalid element.'); 523 } elseif (is_a($element, 'Horde_Mobile_text') || 524 is_a($element, 'Horde_Mobile_table') || 525 is_a($element, 'Horde_Mobile_image') || 526 is_a($element, 'Horde_Mobile_formElement') || 527 is_a($element, 'Horde_Mobile_link') || 528 is_a($element, 'Horde_Mobile_linkset') || 529 is_a($element, 'Horde_Mobile_phone') || 530 is_a($element, 'Horde_Mobile_rule')) { 531 $this->_elements[] = &$element; 532 return $element; 533 } else { 534 $error = PEAR::raiseError('The element is not allowed inside a block.'); 535 } 536 return $error; 537 } 538 539 } 540 541 /** 542 * This class inserts plain text into a Horde_Mobile_block or a 543 * Horde_Mobile_row object. 544 * 545 * Examples: 546 * 547 * $myText1 = new Horde_Mobile_text("Hello WAP!"); 548 * $myText2 = new Horde_Mobile_text("Welcome to Horde_Mobile", 'b'); 549 * $myText3 = new Horde_Mobile_text("Good Morning", array('b', 'big')); 550 * 551 * @see Horde_Mobile_block 552 * @see Horde_Mobile_row 553 * 554 * @package Horde_Mobile 555 */ 556 class Horde_Mobile_text extends Horde_Mobile_element { 557 558 var $_text = ''; 559 var $_attributes = array(); 560 var $_linebreaks = false; 561 562 /** 563 * Constructor 564 * @param string $text The text content of the element. 565 * @param array $attributes Text attributes. Any of: 566 * 'b' 567 * 'u' 568 * 'i' 569 * 'big' 570 * 'small' 571 */ 572 function Horde_Mobile_text($text, $attributes = array()) 573 { 574 $this->_text = $text; 575 if (!is_array($attributes)) { 576 $attributes = array($attributes); 577 } 578 $this->_attributes = $attributes; 579 } 580 581 } 582 583 /** 584 * This class allows to insert bitmap images into a Horde_Mobile_block, 585 * Horde_Mobile_form or Horde_Mobile_row object. 586 * 587 * Examples: 588 * 589 * $image = new Horde_Mobile_image('/path/to/image.wbmp', 590 * array('height' => 100, 'width' => 100)); 591 * 592 * @see Horde_Mobile_block 593 * @see Horde_Mobile_form 594 * @see Horde_Mobile_row 595 * 596 * @package Horde_Mobile 597 */ 598 class Horde_Mobile_image extends Horde_Mobile_element { 599 600 var $_src = ''; 601 var $_attributes = array(); 602 603 /** 604 * Constructor 605 * @param string $src The source location of the image. 606 * @param array $attributes Image attributes. Any of: 607 * 'align' 608 * 'alt' 609 * 'height' 610 * 'hspace' 611 * 'vspace' 612 * 'width' 613 * 'class' 614 * 'id' 615 */ 616 function Horde_Mobile_image($src, $attributes = array()) 617 { 618 $this->_src = $src; 619 $this->_attributes = $attributes; 620 } 621 622 } 623 624 /** 625 * This class allows to insert tables into a Horde_Mobile or 626 * Horde_Mobile_form object. 627 * 628 * Examples: 629 * 630 * $myTable = new Horde_Mobile_table(); 631 * 632 * $row1 = new Horde_Mobile_row(); 633 * $row1->add($image1); 634 * $row1->add($text1); 635 * $myTable->add($row1); 636 * 637 * $row2 = new Horde_Mobile_row(); 638 * $row2->add($image2); 639 * $row2->add($text2); 640 * $myTable->add($row2); 641 * 642 * $myDeck->add($myTable); 643 * 644 * @see Horde_Mobile 645 * @see Horde_Mobile_form 646 * @see Horde_Mobile_row 647 * 648 * @package Horde_Mobile 649 */ 650 class Horde_Mobile_table extends Horde_Mobile_element { 651 652 var $_rows = array(); 653 var $_border = null; 654 var $_padding = null; 655 var $_spacing = null; 656 657 /** 658 * Adds a Horde_Mobile_row object to Horde_Mobile_table. 659 * 660 * @param Horde_Mobile_row $row The row object to add. 661 */ 662 function &add(&$row) 663 { 664 if (!is_a($row, 'Horde_Mobile_row')) { 665 $error = PEAR::raiseError('Rows must be Horde_Mobile_row objects.'); 666 return $error; 667 } 668 669 $this->_rows[] = &$row; 670 return $row; 671 } 672 673 } 674 675 /** 676 * This class defines the rows that a Horde_Mobile_table object 677 * consists of. 678 * 679 * Examples: 680 * 681 * $image1 = new Horde_Mobile_image("my_image.wbmp", "my_image.png", ":-)"); 682 * $text1 = new Horde_Mobile_text("my text"); 683 * $row1 = new Horde_Mobile_row(); 684 * $row1->add($image1); 685 * $row1->add(); 686 * $row1->add($text1); 687 * 688 * @see Horde_Mobile_table 689 * @see Horde_Mobile_text 690 * @see Horde_Mobile_image 691 * @see Horde_Mobile_link 692 * 693 * @package Horde_Mobile 694 */ 695 class Horde_Mobile_row extends Horde_Mobile_element { 696 697 var $_columns = array(); 698 699 /** 700 * Adds a column element to a Horde_Mobile_row object. 701 * 702 * @param Horde_Mobile_element $cellElement Can be a Horde_Mobile_text 703 * object, a Horde_Mobile_image 704 * object, a Horde_Mobile_link 705 * object or null. The latter 706 * results in an empty cell. 707 */ 708 function &add($cellElement = null) 709 { 710 if (is_object($cellElement)) { 711 if (!is_a($cellElement, 'Horde_Mobile_text') && 712 !is_a($cellElement, 'Horde_Mobile_link') && 713 !is_a($cellElement, 'Horde_Mobile_image')) { 714 $error = PEAR::raiseError('Table cells can only contain text, links, or images.'); 715 return $error; 716 } 717 $this->_columns[] = &$cellElement; 718 return $cellElement; 719 } elseif (!is_null($cellElement)) { 720 $t = &new Horde_Mobile_text($cellElement); 721 $this->_columns[] = &$t; 722 return $t; 723 } else { 724 $this->_columns[] = &$cellElement; 725 return $cellElement; 726 } 727 } 728 729 function getColumnCount() 730 { 731 return count($this->_columns); 732 } 733 734 } 735 736 /** 737 * This class provides a text input field in a Horde_Mobile_form object. 738 * 739 * Examples: 740 * 741 * $myInput1 = new Horde_Mobile_input('cid', '', 'Customer ID'); 742 * 743 * $myInput2 = new Horde_Mobile_input('cid', '', 'Customer ID', '*N'); 744 * $myInput2->set_size(6); 745 * $myInput2->set_maxlength(6); 746 * 747 * $myInput3 = new Horde_Mobile_input('pw', '', 'Password', '*N'); 748 * $myInput3->set_size(8); 749 * $myInput3->set_maxlength(8); 750 * $myInput3->set_type('password'); 751 * 752 * @see Horde_Mobile_form 753 * 754 * @package Horde_Mobile 755 */ 756 class Horde_Mobile_input extends Horde_Mobile_formElement { 757 758 /** 759 * Constructor 760 * 761 * @param string $name Variable in which the input is sent to the 762 * destination URL. 763 * @param string $value Initial value that will be presented in the 764 * input field. 765 * @param string $label Describes your input field on the surfer's 766 * screen/display. 767 * @param string $format Input format code according to the WAP standard. 768 * Allows the WAP user client e.g. to input only 769 * digits and no characters. On an HTML generated 770 * page this format has no significance. 771 */ 772 function Horde_Mobile_input($name, $value, $label = '', $format = '*M') 773 { 774 $this->_name = $name; 775 $this->_value = $value; 776 $this->_label = $label; 777 $this->_format = $format; 778 $this->_type = 'text'; 779 $this->_mode = 'alpha'; 780 } 781 782 } 783 784 /** 785 * This class provides an input textarea in a Horde_Mobile_form object. 786 * 787 * Examples: 788 * 789 * $myArea1 = new Horde_Mobile_textarea('fb', '', 'Feedback'); 790 * $myArea2 = new Horde_Mobile_textarea('msg', 'Enter message here ...', 'Message', 40, 5); 791 * 792 * @see Horde_Mobile_form 793 * 794 * @package Horde_Mobile 795 */ 796 class Horde_Mobile_textarea extends Horde_Mobile_formElement { 797 798 var $_rows; 799 var $_cols; 800 801 /** 802 * Constructor. 803 * 804 * @param string $name Variable in which the input is sent to the 805 * destination URL. 806 * @param string $value Initial value that will be presented in the 807 * textarea. 808 * @param string $label Describes your textarea on the surfer's 809 * screen/display. 810 * @param integer $rows Rows. 811 * @param integer $cols Columns. 812 */ 813 function Horde_Mobile_textarea($name, $value, $label, $rows = 3, $cols = 16) 814 { 815 $this->_name = $name; 816 $this->_value = $value; 817 $this->_label = $label; 818 $this->_rows = $rows; 819 $this->_cols = $cols; 820 $this->_mode = 'alpha'; 821 } 822 823 } 824 825 /** 826 * This class provides a select element in a Horde_Mobile_form object. 827 * It allows to create optimized WML for WAP devices which are capable 828 * to interprete the Openwave GUI extensions for WML 1.3. All other 829 * WML devices receive WML 1.1 compatible markup code, which is quite 830 * similar to the markup code created by the Horde_Mobile_radio class. 831 * 832 * Examples: 833 * 834 * $mySelect = new Horde_Mobile_select('color'); 835 * $mySelect->add('Blue', 'b'); 836 * $mySelect->add('Red', 'r', true); 837 * $mySelect->add('Yellow', 'y'); 838 * 839 * @see Horde_Mobile_form 840 * 841 * @package Horde_Mobile 842 */ 843 class Horde_Mobile_select extends Horde_Mobile_formElement { 844 845 var $_type; 846 var $_options = array(); 847 848 /** 849 * Constructor 850 * 851 * @param string $name Variable in which the information about the 852 * selected option is sent to the destination URL. 853 * @param string $type Type of select area: 854 * 'popup': popup the whole selection list 855 * 'spin': rotate options on a WAP device screen (OW 856 * 1.3 GUI only). 857 */ 858 function Horde_Mobile_select($name, $type = 'popup') 859 { 860 $this->_name = $name; 861 $this->_type = $type; 862 $this->_value = null; 863 } 864 865 /** 866 * Adds one option to a Horde_Mobile_select object. 867 * 868 * @param string $label Describes the option on the surfer's 869 * screen/display. 870 * @param string $value Value sent in the "name" variable, if this 871 * is the option selected. 872 * @param boolean $is_selected Allowed values are true or false. 873 */ 874 function add($label, $value, $is_selected = false) 875 { 876 $this->_options[] = array('label' => $label, 877 'value' => $value); 878 879 if (is_null($this->_value) || $is_selected) { 880 $this->_value = $value; 881 } 882 } 883 884 } 885 886 /** 887 * This class provides a radio button element in a Horde_Mobile_form object. 888 * 889 * Examples: 890 * 891 * $myRadio = new Horde_Mobile_radio('country'); 892 * $myRadio->add('Finland', 'F'); 893 * $myRadio->add('Germany', 'G', true); 894 * $myRadio->add('Sweden', 'S'); 895 * 896 * @see Horde_Mobile_form 897 * 898 * @package Horde_Mobile 899 */ 900 class Horde_Mobile_radio extends Horde_Mobile_formElement { 901 902 var $_buttons = array(); 903 904 /** 905 * Constructor 906 * 907 * @param string $name Variable in which the information about the pressed button 908 * is sent to the destination URL. 909 */ 910 function Horde_Mobile_radio($name) 911 { 912 $this->_name = $name; 913 $this->_value = null; 914 } 915 916 /** 917 * Adds one radio button to a Horde_Mobile_radio object. 918 * 919 * @param string $label Describes the radiobutton on the surfer's 920 * screen/display. 921 * @param string $value Value sent in the "name" variable, if this 922 * button is selected. 923 * @param boolean $is_checked Allowed values are true or false. 924 */ 925 function add($label, $value, $is_checked = false) 926 { 927 $this->_buttons[] = array('label' => $label, 928 'value' => $value); 929 930 if (!$this->_value || ($is_checked)) { 931 $this->_value = $value; 932 } 933 } 934 935 } 936 937 /** 938 * This class provides a single checkbox element in a Horde_Mobile_form object. 939 * 940 * Examples: 941 * 942 * $myCheckbox = new Horde_Mobile_checkbox('agmt', 'yes', 'I agree'); 943 * $myCheckbox = new Horde_Mobile_checkbox('agmt', 'yes', 'I agree', false); 944 * $myCheckbox = new Horde_Mobile_checkbox('agmt', 'yes', 'I agree', true); 945 * 946 * @note The first and second examples are identical. 947 * 948 * @see Horde_Mobile_form 949 * 950 * @package Horde_Mobile 951 */ 952 class Horde_Mobile_checkbox extends Horde_Mobile_formElement { 953 954 var $_checked; 955 956 /** 957 * Constructor 958 * 959 * @param string $name Variable in which "value" is sent to the 960 * destination URL, if the box is checked. 961 * @param string $value See name. 962 * @param string $label Describes the checkbox on the surfer's 963 * screen/display. 964 * @param boolean $checked Allowed values are true or false. 965 */ 966 function Horde_Mobile_checkbox($name, $value, $label, $checked = false) 967 { 968 $this->_name = $name; 969 $this->_value = $value; 970 $this->_label = $label; 971 $this->_checked = $checked; 972 } 973 974 function isChecked() 975 { 976 return $this->_checked; 977 } 978 979 } 980 981 /** 982 * This class provides hidden elements in Horde_Mobile_form objects. 983 * 984 * Examples: 985 * 986 * $hidden = new Horde_Mobile_hidden('internal_reference', '08154711'); 987 * 988 * @see Horde_Mobile_form 989 * 990 * @package Horde_Mobile 991 */ 992 class Horde_Mobile_hidden extends Horde_Mobile_formElement { 993 994 /** 995 * Constructor 996 * 997 * @param string $name Variable in which $value is sent to the destination URL. 998 * @param string $value See name. 999 */ 1000 function Horde_Mobile_hidden($name, $value) 1001 { 1002 $this->_name = $name; 1003 $this->_value = $value; 1004 } 1005 1006 } 1007 1008 /** 1009 * This class provides a submit button for a Horde_Mobile_form object. One 1010 * Horde_Mobile_form object can contain only one Horde_Mobile_submit object. 1011 * 1012 * Examples: 1013 * $mySubmit = &new Horde_Mobile_submit('Submit'); 1014 * $mySubmit = &new Horde_Mobile_submit('Submit', 'user_pressed'); 1015 * 1016 * @see Horde_Mobile_form 1017 * 1018 * @package Horde_Mobile 1019 */ 1020 class Horde_Mobile_submit extends Horde_Mobile_formElement { 1021 1022 var $_form; 1023 1024 /** 1025 * Constructor 1026 * 1027 * @param string $label What's written on the button. 1028 * @param string $name Variable in which "label" is sent to the 1029 * destination URL. 1030 */ 1031 function Horde_Mobile_submit($label, $name = '') 1032 { 1033 $this->_label = $label; 1034 $this->_name = $name; 1035 } 1036 1037 } 1038 1039 /** 1040 * This class provides a link in a Horde_Mobile, Horde_Mobile_linkset or 1041 * Horde_Mobile_table object. 1042 * 1043 * Examples: 1044 * 1045 * $myPage = new Horde_Mobile(...); 1046 * 1047 * $myLink = new Horde_Mobile_link('Continue', '/mynextpage.wml'); 1048 * $myPage->add($myLink); 1049 * 1050 * @see Horde_Mobile 1051 * @see Horde_Mobile_linkset 1052 * @see Horde_Mobile_table 1053 * 1054 * @package Horde_Mobile 1055 */ 1056 class Horde_Mobile_link extends Horde_Mobile_element { 1057 1058 var $_label; 1059 var $_url; 1060 var $_title; 1061 var $_accesskey; 1062 1063 /** 1064 * Constructor 1065 * 1066 * @param string $label Describes the link on the surfer's screen/display. 1067 * @param string $url Next destination address. MUST be valid XML (& instead of &, etc.). 1068 * @param string $title If a string is provided here, it will be displayed 1069 * in the HTML browser status bar during 1070 * "MouseOver", respectively somewhere on the WAP 1071 * display. In order to work well with a broad range 1072 * of user agents, keep your title under 6 1073 * characters. 1074 */ 1075 function Horde_Mobile_link($label, $url, $title = '') 1076 { 1077 $this->_label = $label; 1078 $this->_url = $url; 1079 $this->_title = $title; 1080 1081 // No accesskey assigned by default; can be assigned later 1082 // from a Horde_Mobile_linkset object if required. 1083 $this->_accesskey = null; 1084 } 1085 1086 } 1087 1088 /** 1089 * This class provides a phone number in a Horde_Mobile object. If supported by 1090 * their mobile device, users can establish a voice connection to the 1091 * specified number. 1092 * 1093 * Examples: 1094 * 1095 * $myPhone = &new Horde_Mobile_phone('123-45678', 'CALL'); 1096 * $myPage->add($myPhone); 1097 * 1098 * @see Horde_Mobile 1099 * 1100 * @package Horde_Mobile 1101 */ 1102 class Horde_Mobile_phone extends Horde_Mobile_element { 1103 1104 var $_label; 1105 var $_number; 1106 var $_title; 1107 1108 /** 1109 * Constructor 1110 * 1111 * @param string $phone_number Phone number to dial. 1112 * @param string $title If a string is provided here, the call 1113 * button on a WAP/HDML device will be 1114 * enabled. In order to work well with 1115 * a broad range of user agents, keep your 1116 * title under 6 characters. 1117 */ 1118 function Horde_Mobile_phone($phone_number, $title = '') 1119 { 1120 $this->_label = $phone_number; 1121 $this->_number = preg_replace('|\D|', '', $phone_number); 1122 $this->_title = $title; 1123 } 1124 1125 } 1126 1127 /** 1128 * This class defines a set of links. The links have to be defined as 1129 * separate Horde_Mobile_link objects and are attached to the linkset 1130 * with a special "add" function. For WAP devices browser-dependent 1131 * WML code will be created. On all UP-browser-based WAP devices 1132 * linksets allow easier navigation through WML decks by using the 1133 * "onpick" WML option and therefore are improving the "usability" of 1134 * an application. Instead of painfully navigating through the links 1135 * "sports->football->results->today" the mobile user e.g. can press 1136 * "2431" on the keypad to enter his favorite deck. For all other WAP 1137 * devices normal <a> tags are created. One Horde_Mobile object can 1138 * contain only one linkset object. 1139 * 1140 * Examples: 1141 * 1142 * $myPage = new Horde_Mobile(...); 1143 * 1144 * $myLinkset = new Horde_Mobile_linkset(); 1145 * $myLink1 = new Horde_Mobile_link("Phonebook", "/wap/phonebook.wml"); 1146 * $myLinkset->add($myLink1); 1147 * $myLink2 = new Horde_Mobile_link("DateBook", "/wap/datebook.wml"); 1148 * $myLinkset->add($myLink2); 1149 * 1150 * $myPage->add($myLinkset); 1151 * 1152 * $myPage->render(); 1153 * 1154 * @see Horde_Mobile_link 1155 * @see Horde_Mobile 1156 * 1157 * @package Horde_Mobile 1158 */ 1159 class Horde_Mobile_linkset extends Horde_Mobile_element { 1160 1161 var $_elements; 1162 1163 /** 1164 * Adds a Horde_Mobile_link object to Horde_Mobile_linkset. 1165 * 1166 * @param Horde_Mobile_link $link The link object to add. 1167 * 1168 * @see Horde_Mobile_link 1169 */ 1170 function &add(&$link) 1171 { 1172 if (!is_a($link, 'Horde_Mobile_link')) { 1173 $error = PEAR::raiseError('Links must be Horde_Mobile_link objects.'); 1174 return $error; 1175 } 1176 1177 $this->_elements[] = &$link; 1178 $link->set('accesskey', count($this->_elements)); 1179 1180 return $link; 1181 } 1182 1183 } 1184 1185 /** 1186 * This class will cause a horizontal rule to be drawn across the screen. You 1187 * can use it to separate text paragraphs in Horde_Mobile or Horde_Mobile_form 1188 * objects. 1189 * 1190 * Examples: 1191 * 1192 * $myDefaultRule = new Horde_Mobile_rule(); 1193 * $mySpecialRule = new Horde_Mobile_rule('60%', 4); 1194 * 1195 * $myPage->add($myDefaultRule); 1196 * 1197 * $myPage->add($mySpecialRule); 1198 * 1199 * @see Horde_Mobile 1200 * @see Horde_Mobile_form 1201 * 1202 * @package Horde_Mobile 1203 */ 1204 class Horde_Mobile_rule extends Horde_Mobile_element { 1205 1206 var $_width; 1207 var $_size; 1208 1209 /** 1210 * Constructor 1211 * 1212 * @param integer $width Percentage of screen width or absolute value in 1213 * number of pixels (e.g. "50%", 100). 1214 * @param integer $size Height of the line to be drawn in pixels. 1215 */ 1216 function Horde_Mobile_rule($width = '', $size = '') 1217 { 1218 $this->_width = $width; 1219 $this->_size = $size; 1220 } 1221 1222 }
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Sun Feb 25 18:01:28 2007 | par Balluche grâce à PHPXref 0.7 |