Overview

Packages

  • Auth
    • Ads
    • Ldap
    • Xoops
  • Autotasks
  • Config
    • Category
    • Item
    • Option
  • Core
    • Filesystem
    • Filters
    • Logger
    • Mail
    • Message
    • Password
    • Security
    • StopSpammer
    • Template
    • Textsanitizer
    • VersionChecker
  • Data
    • Avatar
    • Comment
  • Database
    • Connection
    • Criteria
    • Legacy
    • MySQL
    • PDO
    • Updater
  • Feeds
    • RSS
  • File
  • Form
    • Base
    • Elements
  • ICMS
    • IPF
      • View
  • Image
    • Category
  • Ipf
    • Category
    • Controller
    • Export
    • form
    • Keyhighlighter
    • Member
    • Object
    • Permission
    • richfile
    • Tree
    • urllink
    • View
  • kernel
    • Set
  • Member
    • Group
    • GroupMembership
    • GroupPermission
    • User
  • Messaging
  • Module
  • None
  • Notification
  • Page
  • Plugins
    • Editor
  • Preload
    • Libraries
  • Privmessage
  • Session
  • SmartObject
  • View
    • Block
    • Breadcrumb
    • PageNav
    • PrinterFriendly
    • Template
    • Templates
    • Theme
    • Tree

Classes

  • icms_auth_Ads
  • icms_auth_Factory
  • icms_auth_Ldap
  • icms_auth_Object
  • icms_auth_Provisionning
  • icms_auth_Xoops
  • icms_Autoloader
  • icms_config_category_Handler
  • icms_config_category_Object
  • icms_config_Handler
  • icms_config_Item_Handler
  • icms_config_Item_Object
  • icms_config_option_Handler
  • icms_config_option_Object
  • icms_core_DataFilter
  • icms_core_Debug
  • icms_core_Filesystem
  • icms_core_HTMLFilter
  • icms_core_Logger
  • icms_core_Message
  • icms_core_Object
  • icms_core_ObjectHandler
  • icms_core_OnlineHandler
  • icms_core_Password
  • icms_core_Security
  • icms_core_Session
  • icms_core_StopSpammer
  • icms_core_Textsanitizer
  • icms_core_Versionchecker
  • icms_data_avatar_Handler
  • icms_data_avatar_Object
  • icms_data_comment_Handler
  • icms_data_comment_Object
  • icms_data_comment_Renderer
  • icms_data_file_Handler
  • icms_data_file_Object
  • icms_data_notification_Handler
  • icms_data_notification_Object
  • icms_data_page_Handler
  • icms_data_page_Object
  • icms_data_privmessage_Handler
  • icms_data_privmessage_Object
  • icms_data_urllink_Handler
  • icms_data_urllink_Object
  • icms_db_Connection
  • icms_db_criteria_Compo
  • icms_db_criteria_Element
  • icms_db_criteria_Item
  • icms_db_Factory
  • icms_db_legacy_Database
  • icms_db_legacy_Factory
  • icms_db_legacy_mysql_Database
  • icms_db_legacy_mysql_Proxy
  • icms_db_legacy_mysql_Safe
  • icms_db_legacy_mysql_Utility
  • icms_db_legacy_PdoDatabase
  • icms_db_legacy_updater_Handler
  • icms_db_legacy_updater_Table
  • icms_db_mysql_Connection
  • icms_db_mysql_Utility
  • icms_Event
  • icms_feeds_Rss
  • icms_feeds_Simplerss
  • icms_file_DownloadHandler
  • icms_file_MediaUploadHandler
  • icms_file_TarDownloader
  • icms_file_TarFileHandler
  • icms_file_ZipDownloader
  • icms_file_ZipFileHandler
  • icms_form_Base
  • icms_form_Element
  • icms_form_elements_Button
  • icms_form_elements_Captcha
  • icms_form_elements_captcha_Image
  • icms_form_elements_captcha_ImageHandler
  • icms_form_elements_captcha_Object
  • icms_form_elements_captcha_Text
  • icms_form_elements_Checkbox
  • icms_form_elements_Colorpicker
  • icms_form_elements_Date
  • icms_form_elements_Datetime
  • icms_form_elements_Dhtmltextarea
  • icms_form_elements_Editor
  • icms_form_elements_File
  • icms_form_elements_Groupperm
  • icms_form_elements_Hidden
  • icms_form_elements_Hiddentoken
  • icms_form_elements_Label
  • icms_form_elements_Password
  • icms_form_elements_Radio
  • icms_form_elements_Radioyn
  • icms_form_elements_Select
  • icms_form_elements_select_Country
  • icms_form_elements_select_Editor
  • icms_form_elements_select_Group
  • icms_form_elements_select_Image
  • icms_form_elements_select_Lang
  • icms_form_elements_select_Matchoption
  • icms_form_elements_select_Theme
  • icms_form_elements_select_Timezone
  • icms_form_elements_select_User
  • icms_form_elements_Text
  • icms_form_elements_Textarea
  • icms_form_elements_Tray
  • icms_form_Groupperm
  • icms_form_Simple
  • icms_form_Table
  • icms_form_Theme
  • icms_image_category_Handler
  • icms_image_category_Object
  • icms_image_Handler
  • icms_image_Object
  • icms_image_set_Handler
  • icms_image_set_Object
  • icms_ipf_About
  • icms_ipf_category_Handler
  • icms_ipf_category_Object
  • icms_ipf_Controller
  • icms_ipf_export_Handler
  • icms_ipf_export_Renderer
  • icms_ipf_form_Base
  • icms_ipf_form_elements_Autocomplete
  • icms_ipf_form_elements_Blockoptions
  • icms_ipf_form_elements_Checkbox
  • icms_ipf_form_elements_Date
  • icms_ipf_form_elements_Datetime
  • icms_ipf_form_elements_File
  • icms_ipf_form_elements_Fileupload
  • icms_ipf_form_elements_Image
  • icms_ipf_form_elements_Imageupload
  • icms_ipf_form_elements_Language
  • icms_ipf_form_elements_Page
  • icms_ipf_form_elements_Parentcategory
  • icms_ipf_form_elements_Passwordtray
  • icms_ipf_form_elements_Radio
  • icms_ipf_form_elements_Richfile
  • icms_ipf_form_elements_Section
  • icms_ipf_form_elements_Select
  • icms_ipf_form_elements_Selectmulti
  • icms_ipf_form_elements_Signature
  • icms_ipf_form_elements_Source
  • icms_ipf_form_elements_Text
  • icms_ipf_form_elements_Time
  • icms_ipf_form_elements_Upload
  • icms_ipf_form_elements_Urllink
  • icms_ipf_form_elements_User
  • icms_ipf_form_elements_Yesno
  • icms_ipf_form_Secure
  • icms_ipf_Handler
  • icms_ipf_Highlighter
  • icms_ipf_member_Handler
  • icms_ipf_Metagen
  • icms_ipf_Object
  • icms_ipf_permission_Handler
  • icms_ipf_registry_Handler
  • icms_ipf_seo_Object
  • icms_ipf_Tree
  • icms_ipf_view_Column
  • icms_ipf_view_Row
  • icms_ipf_view_Single
  • icms_ipf_view_Table
  • icms_ipf_view_Tree
  • icms_member_group_Handler
  • icms_member_group_membership_Handler
  • icms_member_group_membership_Object
  • icms_member_group_Object
  • icms_member_groupperm_Handler
  • icms_member_groupperm_Object
  • icms_member_Handler
  • icms_member_user_Handler
  • icms_member_user_Object
  • icms_messaging_EmailHandler
  • icms_messaging_Handler
  • icms_module_Handler
  • icms_module_Object
  • icms_plugins_EditorHandler
  • icms_plugins_Handler
  • icms_plugins_Object
  • icms_preload_Handler
  • icms_preload_Item
  • icms_preload_LibrariesHandler
  • icms_sys_autotasks_System
  • icms_Utils
  • icms_view_block_Handler
  • icms_view_block_Object
  • icms_view_block_position_Handler
  • icms_view_block_position_Object
  • icms_view_Breadcrumb
  • icms_view_PageBuilder
  • icms_view_PageNav
  • icms_view_Printerfriendly
  • icms_view_template_file_Handler
  • icms_view_template_file_Object
  • icms_view_template_set_Handler
  • icms_view_template_set_Object
  • icms_view_theme_Factory
  • icms_view_theme_Object
  • icms_view_Tpl
  • icms_view_Tree

Interfaces

  • icms_db_IConnection
  • icms_db_IUtility
  • icms_db_legacy_IDatabase
  • icms_sys_autotasks_ISystem
  • Overview
  • Package
  • Class
   1:    2:    3:    4:    5:    6:    7:    8:    9:   10:   11:   12:   13:   14:   15:   16:   17:   18:   19:   20:   21:   22:   23:   24:   25:   26:   27:   28:   29:   30:   31:   32:   33:   34:   35:   36:   37:   38:   39:   40:   41:   42:   43:   44:   45:   46:   47:   48:   49:   50:   51:   52:   53:   54:   55:   56:   57:   58:   59:   60:   61:   62:   63:   64:   65:   66:   67:   68:   69:   70:   71:   72:   73:   74:   75:   76:   77:   78:   79:   80:   81:   82:   83:   84:   85:   86:   87:   88:   89:   90:   91:   92:   93:   94:   95:   96:   97:   98:   99:  100:  101:  102:  103:  104:  105:  106:  107:  108:  109:  110:  111:  112:  113:  114:  115:  116:  117:  118:  119:  120:  121:  122:  123:  124:  125:  126:  127:  128:  129:  130:  131:  132:  133:  134:  135:  136:  137:  138:  139:  140:  141:  142:  143:  144:  145:  146:  147:  148:  149:  150:  151:  152:  153:  154:  155:  156:  157:  158:  159:  160:  161:  162:  163:  164:  165:  166:  167:  168:  169:  170:  171:  172:  173:  174:  175:  176:  177:  178:  179:  180:  181:  182:  183:  184:  185:  186:  187:  188:  189:  190:  191:  192:  193:  194:  195:  196:  197:  198:  199:  200:  201:  202:  203:  204:  205:  206:  207:  208:  209:  210:  211:  212:  213:  214:  215:  216:  217:  218:  219:  220:  221:  222:  223:  224:  225:  226:  227:  228:  229:  230:  231:  232:  233:  234:  235:  236:  237:  238:  239:  240:  241:  242:  243:  244:  245:  246:  247:  248:  249:  250:  251:  252:  253:  254:  255:  256:  257:  258:  259:  260:  261:  262:  263:  264:  265:  266:  267:  268:  269:  270:  271:  272:  273:  274:  275:  276:  277:  278:  279:  280:  281:  282:  283:  284:  285:  286:  287:  288:  289:  290:  291:  292:  293:  294:  295:  296:  297:  298:  299:  300:  301:  302:  303:  304:  305:  306:  307:  308:  309:  310:  311:  312:  313:  314:  315:  316:  317:  318:  319:  320:  321:  322:  323:  324:  325:  326:  327:  328:  329:  330:  331:  332:  333:  334:  335:  336:  337:  338:  339:  340:  341:  342:  343:  344:  345:  346:  347:  348:  349:  350:  351:  352:  353:  354:  355:  356:  357:  358:  359:  360:  361:  362:  363:  364:  365:  366:  367:  368:  369:  370:  371:  372:  373:  374:  375:  376:  377:  378:  379:  380:  381:  382:  383:  384:  385:  386:  387:  388:  389:  390:  391:  392:  393:  394:  395:  396:  397:  398:  399:  400:  401:  402:  403:  404:  405:  406:  407:  408:  409:  410:  411:  412:  413:  414:  415:  416:  417:  418:  419:  420:  421:  422:  423:  424:  425:  426:  427:  428:  429:  430:  431:  432:  433:  434:  435:  436:  437:  438:  439:  440:  441:  442:  443:  444:  445:  446:  447:  448:  449:  450:  451:  452:  453:  454:  455:  456:  457:  458:  459:  460:  461:  462:  463:  464:  465:  466:  467:  468:  469:  470:  471:  472:  473:  474:  475:  476:  477:  478:  479:  480:  481:  482:  483:  484:  485:  486:  487:  488:  489:  490:  491:  492:  493:  494:  495:  496:  497:  498:  499:  500:  501:  502:  503:  504:  505:  506:  507:  508:  509:  510:  511:  512:  513:  514:  515:  516:  517:  518:  519:  520:  521:  522:  523:  524:  525:  526:  527:  528:  529:  530:  531:  532:  533:  534:  535:  536:  537:  538:  539:  540:  541:  542:  543:  544:  545:  546:  547:  548:  549:  550:  551:  552:  553:  554:  555:  556:  557:  558:  559:  560:  561:  562:  563:  564:  565:  566:  567:  568:  569:  570:  571:  572:  573:  574:  575:  576:  577:  578:  579:  580:  581:  582:  583:  584:  585:  586:  587:  588:  589:  590:  591:  592:  593:  594:  595:  596:  597:  598:  599:  600:  601:  602:  603:  604:  605:  606:  607:  608:  609:  610:  611:  612:  613:  614:  615:  616:  617:  618:  619:  620:  621:  622:  623:  624:  625:  626:  627:  628:  629:  630:  631:  632:  633:  634:  635:  636:  637:  638:  639:  640:  641:  642:  643:  644:  645:  646:  647:  648:  649:  650:  651:  652:  653:  654:  655:  656:  657:  658:  659:  660:  661:  662:  663:  664:  665:  666:  667:  668:  669:  670:  671:  672:  673:  674:  675:  676:  677:  678:  679:  680:  681:  682:  683:  684:  685:  686:  687:  688:  689:  690:  691:  692:  693:  694:  695:  696:  697:  698:  699:  700:  701:  702:  703:  704:  705:  706:  707:  708:  709:  710:  711:  712:  713:  714:  715:  716:  717:  718:  719:  720:  721:  722:  723:  724:  725:  726:  727:  728:  729:  730:  731:  732:  733:  734:  735:  736:  737:  738:  739:  740:  741:  742:  743:  744:  745:  746:  747:  748:  749:  750:  751:  752:  753:  754:  755:  756:  757:  758:  759:  760:  761:  762:  763:  764:  765:  766:  767:  768:  769:  770:  771:  772:  773:  774:  775:  776:  777:  778:  779:  780:  781:  782:  783:  784:  785:  786:  787:  788:  789:  790:  791:  792:  793:  794:  795:  796:  797:  798:  799:  800:  801:  802:  803:  804:  805:  806:  807:  808:  809:  810:  811:  812:  813:  814:  815:  816:  817:  818:  819:  820:  821:  822:  823:  824:  825:  826:  827:  828:  829:  830:  831:  832:  833:  834:  835:  836:  837:  838:  839:  840:  841:  842:  843:  844:  845:  846:  847:  848:  849:  850:  851:  852:  853:  854:  855:  856:  857:  858:  859:  860:  861:  862:  863:  864:  865:  866:  867:  868:  869:  870:  871:  872:  873:  874:  875:  876:  877:  878:  879:  880:  881:  882:  883:  884:  885:  886:  887:  888:  889:  890:  891:  892:  893:  894:  895:  896:  897:  898:  899:  900:  901:  902:  903:  904:  905:  906:  907:  908:  909:  910:  911:  912:  913:  914:  915:  916:  917:  918:  919:  920:  921:  922:  923:  924:  925:  926:  927:  928:  929:  930:  931:  932:  933:  934:  935:  936:  937:  938:  939:  940:  941:  942:  943:  944:  945:  946:  947:  948:  949:  950:  951:  952:  953:  954:  955:  956:  957:  958:  959:  960:  961:  962:  963:  964:  965:  966:  967:  968:  969:  970:  971:  972:  973:  974:  975:  976:  977:  978:  979:  980:  981:  982:  983:  984:  985:  986:  987:  988:  989:  990:  991:  992:  993:  994:  995:  996:  997:  998:  999: 1000: 1001: 1002: 1003: 1004: 1005: 1006: 1007: 1008: 1009: 1010: 1011: 1012: 1013: 1014: 1015: 1016: 1017: 1018: 1019: 1020: 1021: 1022: 1023: 1024: 1025: 1026: 1027: 1028: 1029: 1030: 1031: 1032: 1033: 1034: 1035: 1036: 1037: 1038: 1039: 1040: 1041: 1042: 1043: 1044: 1045: 1046: 1047: 1048: 1049: 1050: 1051: 1052: 1053: 1054: 1055: 1056: 1057: 1058: 1059: 1060: 1061: 1062: 1063: 1064: 1065: 1066: 1067: 1068: 1069: 1070: 1071: 1072: 1073: 1074: 1075: 1076: 1077: 1078: 1079: 1080: 1081: 1082: 1083: 1084: 1085: 1086: 1087: 1088: 1089: 1090: 1091: 1092: 1093: 1094: 1095: 1096: 1097: 1098: 1099: 1100: 1101: 1102: 1103: 1104: 1105: 1106: 1107: 1108: 1109: 1110: 1111: 1112: 1113: 1114: 1115: 1116: 1117: 1118: 1119: 1120: 1121: 1122: 1123: 1124: 1125: 1126: 1127: 1128: 1129: 1130: 1131: 1132: 1133: 1134: 1135: 1136: 1137: 1138: 1139: 1140: 1141: 1142: 1143: 1144: 1145: 1146: 1147: 1148: 1149: 1150: 1151: 1152: 1153: 1154: 1155: 1156: 1157: 1158: 1159: 1160: 1161: 1162: 1163: 1164: 1165: 1166: 1167: 1168: 1169: 1170: 1171: 1172: 1173: 1174: 1175: 1176: 1177: 1178: 1179: 1180: 1181: 1182: 1183: 1184: 1185: 1186: 1187: 1188: 1189: 1190: 1191: 1192: 1193: 1194: 1195: 1196: 1197: 1198: 1199: 1200: 1201: 1202: 1203: 1204: 1205: 1206: 1207: 1208: 1209: 1210: 1211: 1212: 1213: 1214: 1215: 1216: 1217: 1218: 1219: 1220: 1221: 1222: 1223: 1224: 1225: 1226: 1227: 1228: 1229: 1230: 1231: 1232: 1233: 1234: 1235: 1236: 1237: 1238: 1239: 1240: 1241: 1242: 1243: 1244: 1245: 1246: 1247: 1248: 1249: 1250: 1251: 1252: 1253: 1254: 1255: 1256: 1257: 1258: 1259: 1260: 1261: 1262: 1263: 1264: 1265: 1266: 1267: 
<?php
/**
 * Contains the basis classes for managing any objects derived from icms_ipf_Object
 *
 * @copyright The ImpressCMS Project http://www.impresscms.org/
 * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU General Public License (GPL)
 * @category ICMS
 * @package Ipf
 * @subpackage Object
 * @since 1.1
 * @author marcan <marcan@impresscms.org>
 * @version SVN: $Id:Object.php 19775 2010-07-11 18:54:25Z malanciault $
 */
defined("ICMS_ROOT_PATH") or die("ImpressCMS root path not defined");

icms_loadLanguageFile('system', 'common');

if (!defined('XOBJ_DTYPE_SIMPLE_ARRAY')) define('XOBJ_DTYPE_SIMPLE_ARRAY', 101);
if (!defined('XOBJ_DTYPE_CURRENCY')) define('XOBJ_DTYPE_CURRENCY', 200);
if (!defined('XOBJ_DTYPE_FLOAT')) define('XOBJ_DTYPE_FLOAT', 201);
if (!defined('XOBJ_DTYPE_TIME_ONLY')) define('XOBJ_DTYPE_TIME_ONLY', 202);
if (!defined('XOBJ_DTYPE_URLLINK')) define('XOBJ_DTYPE_URLLINK', 203);
if (!defined('XOBJ_DTYPE_FILE')) define('XOBJ_DTYPE_FILE', 204);
if (!defined('XOBJ_DTYPE_IMAGE')) define('XOBJ_DTYPE_IMAGE', 205);
if (!defined('XOBJ_DTYPE_FORM_SECTION')) define('XOBJ_DTYPE_FORM_SECTION', 210);
if (!defined('XOBJ_DTYPE_FORM_SECTION_CLOSE')) define('XOBJ_DTYPE_FORM_SECTION_CLOSE', 211);

/**
 * icms_ipf_Object base class
 *
 * Base class representing a single icms_ipf_Object
 *
 * @category ICMS
 * @package Ipf
 * @subpackage Object
 * @author marcan <marcan@smartfactory.ca>
 * @todo Properly identify and declare the visibility of vars and functions
 */
class icms_ipf_Object extends icms_core_Object {
    public $_image_path;
    public $_image_url;
    public $seoEnabled = false;
    public $titleField;
    public $summaryField = false;

    /**
     * Reference to the handler managing this object
     *
     * @var object reference to {@link icms_ipf_Handler}
     */
    public $handler;

    /**
     * References to control objects, managing the form fields of this object
     */
    public $controls = array();

    public function __construct(&$handler) {
        $this->handler = $handler;
    }

    /**
     * For backward compat
     *
     * @todo to be removed in 1.4
     */
    function IcmsPersistableObject(&$handler) {
        $this->handler = $handler;
    }

    /**
     * Checks if the user has a specific access on this object
     *
     * @param string $gperm_name name of the permission to test
     * @return boolean : TRUE if user has access, false if not
     */
    public function accessGranted($perm_name) {
        $icmspermissions_handler = new icms_ipf_permission_Handler($this->handler);
        return $icmspermissions_handler->accessGranted($perm_name, $this->id());
    }

    /**
     * open a new form section to seperate form elements
     *
     * @param str $section_name
     * @param bool $value
     */
    public function openFormSection($section_name, $value = FALSE) {
        $this->initVar($section_name, XOBJ_DTYPE_FORM_SECTION, $value, FALSE, NULL, '', FALSE, '', '', FALSE, FALSE, TRUE);
    }

    /**
     * close a form section
     *
     * @param str $section_name
     */
    public function closeFormSection($section_name) {
        $this->initVar('close_section_' . $section_name, XOBJ_DTYPE_FORM_SECTION_CLOSE, '', FALSE, NULL, '', FALSE, '', '', FALSE, FALSE, TRUE);
    }

    /**
     *
     * @param string $key key of this field. This needs to be the name of the field in the related database table
     * @param int $data_type set to one of XOBJ_DTYPE_XXX constants (set to XOBJ_DTYPE_OTHER if no data type ckecking nor text sanitizing is required)
     * @param mixed $value default value of this variable
     * @param bool $required set to TRUE if this variable needs to have a value set before storing the object in the table
     * @param int $maxlength maximum length of this variable, for XOBJ_DTYPE_TXTBOX type only
     * @param string $options does this data have any select options?
     * @param bool $multilingual is this field needs to support multilingual features (NOT YET IMPLEMENTED...)
     * @param string $form_caption caption of this variable in a {@link icms_ipf_form_Base} and title of a column in a {@link icms_ipf_ObjectTable}
     * @param string $form_dsc description of this variable in a {@link icms_ipf_form_Base}
     * @param bool $sortby set to TRUE to make this field used to sort objects in icms_ipf_ObjectTable
     * @param bool $persistent set to FALSE if this field is not to be saved in the database
     * @param bool $displayOnForm to be displayed on the form or not
     */
    public function initVar($key, $data_type, $value = null, $required = false, $maxlength = null, $options = '', $multilingual = false, $form_caption = '', $form_dsc = '', $sortby = false, $persistent = true, $displayOnForm = true) {
        // url_ is reserved for files.
        if (substr($key, 0, 4) == 'url_') {
            trigger_error("Cannot use variable starting with 'url_'.");
        }
        parent::initVar($key, $data_type, $value, $required, $maxlength, $options);
        if ($this->handler && (!$form_caption || $form_caption == '')) {
            $dyn_form_caption = strtoupper('_CO_' . $this->handler->_moduleName . '_' . $this->handler->_itemname . '_' . $key);
            if (defined($dyn_form_caption)) {
                $form_caption = constant($dyn_form_caption);
            }
        }
        if ($this->handler && (!$form_dsc || $form_dsc == '')) {
            $dyn_form_dsc = strtoupper('_CO_' . $this->handler->_moduleName . '_' . $this->handler->_itemname . '_' . $key . '_DSC');
            if (defined($dyn_form_dsc)) {
                $form_dsc = constant($dyn_form_dsc);
            }
        }

        /**
         * this section from icms_core_Object::initVar
         *
         * @copyright (c) 2000-2003 The Xoops Project - www.xoops.org
         */
        $this->vars[$key] = array_merge($this->vars[$key], array('multilingual' => $multilingual, 'form_caption' => $form_caption, 'form_dsc' => $form_dsc, 'sortby' => $sortby, 'persistent' => $persistent, 'displayOnForm' => $displayOnForm, 'displayOnSingleView' => true, 'readonly' => false));
    }

    /**
     *
     * @param $key
     * @param $data_type
     * @param str $itemName
     * @param str $form_caption
     * @param $sortby
     * @param $value
     * @param bool $displayOnForm
     * @param bool $required
     */
    public function initNonPersistableVar($key, $data_type, $itemName = false, $form_caption = '', $sortby = false, $value = '', $displayOnForm = false, $required = false) {
        $this->initVar($key, $data_type, $value, $required, null, '', false, $form_caption, '', $sortby, false, $displayOnForm);
        $this->vars[$key]['itemName'] = $itemName;
        $this->vars[$key]['displayOnSingleView'] = false;
    }

    /**
     * Quickly initiate a var
     *
     * Since many vars do have the same config, let's use this method with some of these configuration as a convention ;-)
     *
     * - $maxlength = 0 unless $data_type is a TEXTBOX, then $maxlength will be 255
     * - all other vars are NULL or '' depending of the parameter
     *
     * @param string $key key of this field. This needs to be the name of the field in the related database table
     * @param int $data_type set to one of XOBJ_DTYPE_XXX constants (set to XOBJ_DTYPE_OTHER if no data type ckecking nor text sanitizing is required)
     * @param bool $required set to TRUE if this variable needs to have a value set before storing the object in the table
     * @param string $form_caption caption of this variable in a {@link icms_ipf_form_Base} and title of a column in a {@link icms_ipf_ObjectTable}
     * @param string $form_dsc description of this variable in a {@link icms_ipf_form_Base}
     * @param mixed $value default value of this variable
     */
    public function quickInitVar($key, $data_type, $required = false, $form_caption = '', $form_dsc = '', $value = null) {
        $maxlength = $data_type == 'XOBJ_DTYPE_TXTBOX' ? 255 : null;
        $this->initVar($key, $data_type, $value, $required, $maxlength, '', false, $form_caption, $form_dsc, false, true, true);
    }

    /**
     *
     * @param str $varname
     * @param bool $displayOnForm
     * @param str $default
     */
    public function initCommonVar($varname, $displayOnForm = true, $default = 'notdefined') {
        switch ($varname) {
            case "dohtml":
                $value = $default != 'notdefined' ? $default : true;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, "", false, _CO_ICMS_DOHTML_FORM_CAPTION, '', false, true, $displayOnForm);
                $this->setControl($varname, "yesno");
                break;

            case "dobr":
                $value = ($default === 'notdefined') ? true : $default;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, "", false, _CO_ICMS_DOBR_FORM_CAPTION, '', false, true, $displayOnForm);
                $this->setControl($varname, "yesno");
                break;

            case "doimage":
                $value = $default != 'notdefined' ? $default : true;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, "", false, _CO_ICMS_DOIMAGE_FORM_CAPTION, '', false, true, $displayOnForm);
                $this->setControl($varname, "yesno");
                break;

            case "dosmiley":
                $value = $default != 'notdefined' ? $default : true;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, "", false, _CO_ICMS_DOSMILEY_FORM_CAPTION, '', false, true, $displayOnForm);
                $this->setControl($varname, "yesno");
                break;

            case "doxcode":
                $value = $default != 'notdefined' ? $default : true;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, "", false, _CO_ICMS_DOXCODE_FORM_CAPTION, '', false, true, $displayOnForm);
                $this->setControl($varname, "yesno");
                break;

            case "meta_keywords": // should this be textsarea instead of textarea???
                $value = $default != 'notdefined' ? $default : '';
                $this->initVar($varname, XOBJ_DTYPE_TXTAREA, $value, false, null, '', false, _CO_ICMS_META_KEYWORDS, _CO_ICMS_META_KEYWORDS_DSC, false, true, $displayOnForm);
                $this->setControl('meta_keywords', array('name' => 'textarea', 'form_editor' => 'textarea'));
                break;

            case "meta_description": // should this be textsarea instead of textarea???
                $value = $default != 'notdefined' ? $default : '';
                $this->initVar($varname, XOBJ_DTYPE_TXTAREA, $value, false, null, '', false, _CO_ICMS_META_DESCRIPTION, _CO_ICMS_META_DESCRIPTION_DSC, false, true, $displayOnForm);
                $this->setControl('meta_description', array('name' => 'textarea', 'form_editor' => 'textarea'));
                break;

            case "short_url":
                $value = $default != 'notdefined' ? $default : '';
                $this->initVar($varname, XOBJ_DTYPE_TXTBOX, $value, false, null, "", false, _CO_ICMS_SHORT_URL, _CO_ICMS_SHORT_URL_DSC, false, true, $displayOnForm);
                break;

            case "hierarchy_path":
                $value = $default != 'notdefined' ? $default : '';
                $this->initVar($varname, XOBJ_DTYPE_ARRAY, $value, false, null, "", false, _CO_ICMS_HIERARCHY_PATH, _CO_ICMS_HIERARCHY_PATH_DSC, false, true, $displayOnForm);
                break;

            case "counter":
                $value = $default != 'notdefined' ? $default : 0;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, '', false, _CO_ICMS_COUNTER_FORM_CAPTION, '', false, true, $displayOnForm);
                break;

            case "weight":
                $value = $default != 'notdefined' ? $default : 0;
                $this->initVar($varname, XOBJ_DTYPE_INT, $value, false, null, '', false, _CO_ICMS_WEIGHT_FORM_CAPTION, '', true, true, $displayOnForm);
                break;
            case "custom_css":
                $value = $default != 'notdefined' ? $default : '';
                $this->initVar($varname, XOBJ_DTYPE_TXTAREA, $value, false, null, '', false, _CO_ICMS_CUSTOM_CSS, _CO_ICMS_CUSTOM_CSS_DSC, false, true, $displayOnForm);
                $this->setControl('custom_css', array('name' => 'textarea', 'form_editor' => 'textarea'));
                break;

            default:
                break;
        }
        $this->hideFieldFromSingleView($varname);
    }

    /**
     * Set control information for an instance variable
     *
     * The $options parameter can be a string or an array. Using a string
     * is the quickest way :
     *
     * $this->setControl('date', 'datetime');
     *
     * This will create a date and time selectbox for the 'date' var on the
     * form to edit or create this item.
     *
     * Here are the currently supported controls :
     *
     * - color
     * - country
     * - datetime
     * - date
     * - email
     * - group
     * - group_multi
     * - image
     * - imageupload
     * - label
     * - language
     * - parentcategory
     * - password
     * - selectmulti
     * - select
     * - text
     * - textarea
     * - theme
     * - theme_multi
     * - timezone
     * - user
     * - user_multi
     * - yesno
     *
     * Now, using an array as $options, you can customize what information to
     * use in the control. For example, if one needs to display a select box for
     * the user to choose the status of an item. We only need to tell icms_ipf_Object
     * what method to execute within what handler to retreive the options of the
     * selectbox.
     *
     * $this->setControl('status', array('name' => false,
     * 'itemHandler' => 'item',
     * 'method' => 'getStatus',
     * 'module' => 'smartshop'));
     *
     * In this example, the array elements are the following :
     * - name : false, as we don't need to set a special control here.
     * we will use the default control related to the object type (defined in initVar)
     * - itemHandler : name of the object for which we will use the handler
     * - method : name of the method of this handler that we will execute
     * - module : name of the module from wich the handler is
     *
     * So in this example, icms_ipf_Object will create a selectbox for the variable 'status' and it will
     * populate this selectbox with the result from SmartshopItemHandler::getStatus()
     *
     * Another example of the use of $options as an array is for TextArea :
     *
     * $this->setControl('body', array('name' => 'textarea',
     * 'form_editor' => 'default'));
     *
     * In this example, icms_ipf_Object will create a TextArea for the variable 'body'. And it will use
     * the 'default' editor, providing it is defined in the module
     * preferences : $icmsModuleConfig['default_editor']
     *
     * Of course, you can force the use of a specific editor :
     *
     * $this->setControl('body', array('name' => 'textarea',
     * 'form_editor' => 'koivi'));
     *
     * Here is a list of supported editor :
     * - tiny : TinyEditor
     * - dhtmltextarea : ImpressCMS DHTML Area
     * - fckeditor : FCKEditor
     * - inbetween : InBetween
     * - koivi : Koivi
     * - spaw : Spaw WYSIWYG Editor
     * - htmlarea : HTMLArea
     * - textarea : basic textarea with no options
     *
     * @param string $var name of the variable for which we want to set a control
     * @param array $options
     */
    public function setControl($var, $options = array()) {
        if (isset($this->controls[$var])) {
            unset($this->controls[$var]);
        }
        if (is_string($options)) {
            $options = array('name' => $options);
        }
        $this->controls[$var] = $options;
    }

    /**
     * Get control information for an instance variable
     *
     * @param string $var
     */
    public function getControl($var) {
        return isset($this->controls[$var]) ? $this->controls[$var] : false;
    }

    /**
     * Create the form for this object
     *
     * @return a {@link SmartobjectForm} object for this object
     *
     * @see icms_ipf_ObjectForm::icms_ipf_ObjectForm()
     */
    public function getForm($form_caption, $form_name, $form_action = false, $submit_button_caption = _CO_ICMS_SUBMIT, $cancel_js_action = false, $captcha = false) {
        return new icms_ipf_form_Base($this, $form_name, $form_caption, $form_action, null, $submit_button_caption, $cancel_js_action, $captcha);
    }

    /**
     * Create the secure form for this object
     *
     * @return a {@link icms_ipf_form_Secure} object for this object
     *
     * @see icms_ipf_ObjectForm::icms_ipf_ObjectForm()
     */
    public function getSecureForm($form_caption, $form_name, $form_action = false, $submit_button_caption = _CO_ICMS_SUBMIT, $cancel_js_action = false, $captcha = false) {
        $form = new icms_ipf_form_Secure($this, $form_name, $form_caption, $form_action, null, $submit_button_caption, $cancel_js_action, $captcha);

        return $form;
    }

    /**
     */
    public function toArray() {
        $ret = array();
        $vars = $this->getVars();
        foreach ($vars as $key => $var) {
            $value = $this->getVar($key);
            $ret[$key] = $value;
        }
        if ($this->handler->identifierName != "") {
            $controller = new icms_ipf_Controller($this->handler);
            /**
             * Addition of some automatic value
             */
            $ret['itemLink'] = $controller->getItemLink($this);
            $ret['itemUrl'] = $controller->getItemLink($this, true);
            $ret['editItemLink'] = $controller->getEditItemLink($this, false, true);
            $ret['deleteItemLink'] = $controller->getDeleteItemLink($this, false, true);
            $ret['printAndMailLink'] = $controller->getPrintAndMailLink($this);
        }
        /**
         *
         * @todo implement this in ImpressCMS core
         */
        /*
         * // Hightlighting searched words
         * include_once SMARTOBJECT_ROOT_PATH . 'class/smarthighlighter.php' ;
         * $highlight = icms_getConfig('module_search_highlighter', false, true);
         *
         * if ($highlight && isset($_GET['keywords']))
         * {
         * $myts =& icms_core_Textsanitizer::getInstance();
         * $keywords= icms_core_DataFilter::htmlSpecialChars(trim(urldecode($_GET['keywords'])));
         * $h= new SmartHighlighter ($keywords, true , 'smart_highlighter');
         * foreach ($this->handler->highlightFields as $field) {
         * $ret[$field] = $h->highlight($ret[$field]);
         * }
         * }
         */
        return $ret;
    }

    /**
     * add an error
     *
     * @param string $value error to add
     * @access public
     */
    public function setErrors($err_str, $prefix = false) {
        if (is_array($err_str)) {
            foreach ($err_str as $str) {
                $this->setErrors($str, $prefix);
            }
        } else {
            if ($prefix) {
                $err_str = "[" . $prefix . "] " . $err_str;
            }
            parent::setErrors($err_str);
        }
    }

    /**
     *
     * @param $field
     * @param $required
     */
    public function setFieldAsRequired($field, $required = true) {
        if (is_array($field)) {
            foreach ($field as $v) {
                $this->doSetFieldAsRequired($v, $required);
            }
        } else {
            $this->doSetFieldAsRequired($field, $required);
        }
    }

    /**
     *
     * @param $field
     */
    public function setFieldForSorting($field) {
        if (is_array($field)) {
            foreach ($field as $v) {
                $this->doSetFieldForSorting($v);
            }
        } else {
            $this->doSetFieldForSorting($field);
        }
    }

    /**
     */
    public function hasError() {
        return count($this->_errors) > 0;
    }

    /**
     *
     * @param $url
     * @param $path
     */
    public function setImageDir($url, $path) {
        $this->_image_url = $url;
        $this->_image_path = $path;
    }

    /**
     * Retreive the group that have been granted access to a specific permission for this object
     *
     * @return string $group_perm name of the permission
     */
    public function getGroupPerm($group_perm) {
        if (!$this->handler->getPermissions()) {
            $this->setError("Trying to access a permission that does not exists for this object's handler");
            return false;
        }

        $icmspermissions_handler = new icms_ipf_permission_Handler($this->handler);
        $ret = $icmspermissions_handler->getGrantedGroups($group_perm, $this->id());

        if (count($ret) == 0) {
            return false;
        } else {
            return $ret;
        }
    }

    /**
     *
     * @param $path
     */
    public function getImageDir($path = false) {
        if ($path) {
            return $this->_image_path;
        } else {
            return $this->_image_url;
        }
    }

    /**
     *
     * @param str $path
     */
    public function getUploadDir($path = false) {
        if ($path) {
            return $this->_image_path;
        } else {
            return $this->_image_url;
        }
    }

    /**
     *
     * @param str $key
     * @param str $info
     */
    public function getVarInfo($key = '', $info = '') {
        if (isset($this->vars[$key][$info])) {
            return $this->vars[$key][$info];
        } elseif ($info == '' && isset($this->vars[$key])) {
            return $this->vars[$key];
        } else {
            return $this->vars;
        }
    }

    /**
     * Get the id of the object
     *
     * @return int id of this object
     */
    public function id() {
        return $this->getVar($this->handler->keyName, 'e');
    }

    /**
     * Return the value of the title field of this object
     *
     * @return string
     */
    public function title($format = 's') {
        return $this->getVar($this->handler->identifierName, $format);
    }

    /**
     * Return the value of the title field of this object
     *
     * @return string
     */
    public function summary() {
        if ($this->handler->summaryName) {
            return $this->getVar($this->handler->summaryName);
        } else {
            return false;
        }
    }

    /**
     * Retreive the object admin side link, displayijng a SingleView page
     *
     * @param bool $onlyUrl wether or not to return a simple URL or a full <a> link
     * @return string user side link to the object
     */
    public function getAdminViewItemLink($onlyUrl = false) {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getAdminViewItemLink($this, $onlyUrl);
    }

    /**
     * Retreive the object user side link
     *
     * @param bool $onlyUrl wether or not to return a simple URL or a full <a> link
     * @return string user side link to the object
     */
    public function getItemLink($onlyUrl = false) {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getItemLink($this, $onlyUrl);
    }

    /**
     *
     * @param $onlyUrl
     * @param $withimage
     * @param $userSide
     */
    public function getViewItemLink($onlyUrl = false, $withimage = true, $userSide = false) {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getViewItemLink($this, $onlyUrl, $withimage, $userSide);
    }

    /**
     *
     * @param bool $onlyUrl
     * @param bool $withimage
     * @param bool $userSide
     */
    public function getEditItemLink($onlyUrl = false, $withimage = true, $userSide = false) {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getEditItemLink($this, $onlyUrl, $withimage, $userSide);
    }

    /**
     *
     * @param bool $onlyUrl
     * @param bool $withimage
     * @param bool $userSide
     */
    public function getDeleteItemLink($onlyUrl = false, $withimage = false, $userSide = false) {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getDeleteItemLink($this, $onlyUrl, $withimage, $userSide);
    }

    /**
     */
    public function getPrintAndMailLink() {
        $controller = new icms_ipf_Controller($this->handler);
        return $controller->getPrintAndMailLink($this);
    }

    /**
     *
     * @param $sortsel
     */
    public function getFieldsForSorting($sortsel) {
        $ret = array();

        foreach ($this->vars as $key => $field_info) {
            if ($field_info['sortby']) {
                $ret[$key]['caption'] = $field_info['form_caption'];
                $ret[$key]['selected'] = $key == $sortsel ? "selected='selected'" : '';
            }
        }

        if (count($ret) > 0) {
            return $ret;
        } else {
            return false;
        }
    }

    /**
     *
     * @param $key
     * @param $newType
     */
    public function setType($key, $newType) {
        $this->vars[$key]['data_type'] = $newType;
    }

    /**
     *
     * @param unknown_type $key
     * @param unknown_type $info
     * @param unknown_type $value
     */
    public function setVarInfo($key, $info, $value) {
        $this->vars[$key][$info] = $value;
    }

    /**
     * store object
     *
     * @param bool $force
     * @return bool true if successful, false if not
     */
    public function store($force = false) {
        return $this->handler->insert($this, $force);
    }

    /**
     *
     * @param unknown_type $key
     * @param unknown_type $editor
     */
    public function getValueFor($key, $editor = true) {
        global $icmsModuleConfig;

        $ret = $this->getVar($key, 'n');
        $myts = icms_core_Textsanitizer::getInstance();

        $control = isset($this->controls[$key]) ? $this->controls[$key] : false;
        $form_editor = isset($control['form_editor']) ? $control['form_editor'] : 'textarea';

        $html = isset($this->vars['dohtml']) ? $this->getVar('dohtml') : true;
        $smiley = true;
        $xcode = true;
        $image = true;
        $br = isset($this->vars['dobr']) ? $this->getVar('dobr') : true;
        $formatML = true;

        if ($form_editor == 'default') {
            global $icmsModuleConfig;
            $form_editor = isset($icmsModuleConfig['default_editor']) ? $icmsModuleConfig['default_editor'] : 'textarea';
        }

        if ($editor) {
            if (defined('XOOPS_EDITOR_IS_HTML') && !(in_array($form_editor, array('formtextarea', 'textarea', 'dhtmltextarea')))) {
                $br = false;
                $formatML = !$editor;
            } else {
                return htmlspecialchars($ret, ENT_QUOTES);
            }
        }

        if (method_exists($myts, 'formatForML')) {
            return $myts->displayTarea($ret, $html, $smiley, $xcode, $image, $br, $formatML);
        } else {
            if ($html) {
                if ($br) {
                    return icms_core_DataFilter::filterHTMLdisplay($ret, $xcode, $br);
                } else {
                    return icms_core_DataFilter::checkVar($ret, 'html', 'output');
                }
            } else {
                return icms_core_DataFilter::checkVar($ret, 'text', 'output');
            }
        }
    }

    /**
     * returns a specific variable for the object in a proper format
     *
     * We had to put this method in the icms_ipf_Object because the XOBJ_DTYPE_ARRAY does not work properly
     * at least on PHP 5.1. So we have created a new type XOBJ_DTYPE_SIMPLE_ARRAY to handle 1 level array
     * as a string separated by |
     *
     * @access public
     * @param string $key key of the object's variable to be returned
     * @param string $format format to use for the output
     * @return mixed formatted value of the variable
     */
    public function getVar($key, $format = 's') {
        $myts = icms_core_Textsanitizer::getInstance();

        $ret = $this->vars[$key]['value'];

        switch ($this->vars[$key]['data_type']) {

            case XOBJ_DTYPE_TXTBOX:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                        // ML Hack by marcan
                        $ret = icms_core_DataFilter::htmlSpecialChars($ret);

                        if (method_exists($myts, 'formatForML')) {
                            return $ts->formatForML($ret);
                        } else {
                            return $ret;
                        }
                        break 1;

                    // End of ML Hack by marcan

                    case 'clean':
                        $ret = icms_html2text($ret);
                        $ret = icms_purifyText($ret);

                        return $ret;
                        break 1;
                    // End of ML Hack by marcan

                    case 'e':
                    case 'edit':
                        return icms_core_DataFilter::htmlSpecialChars($ret);
                        break 1;

                    case 'p':
                    case 'preview':
                    case 'f':
                    case 'formpreview':
                        return icms_core_DataFilter::htmlSpecialChars(icms_core_DataFilter::stripSlashesGPC($ret));
                        break 1;

                    case 'n':
                    case 'none':
                    default:
                        break 1;
                }
                break;

            case XOBJ_DTYPE_LTIME:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                    case 'p':
                    case 'preview':
                    case 'f':
                    case 'formpreview':
                        $ret = formatTimestamp($ret, _DATESTRING);
                        return $ret;
                        break 1;

                    case 'n':
                    case 'none':
                    case 'e':
                    case 'edit':
                        break 1;

                    default:
                        break 1;
                }
                break;

            case XOBJ_DTYPE_STIME:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                    case 'p':
                    case 'preview':
                    case 'f':
                    case 'formpreview':
                        $ret = formatTimestamp($ret, _SHORTDATESTRING);
                        return $ret;
                        break 1;

                    case 'n':
                    case 'none':
                    case 'e':
                    case 'edit':
                        break 1;

                    default:
                        break 1;
                }
                break;

            case XOBJ_DTYPE_TIME_ONLY:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                    case 'p':
                    case 'preview':
                    case 'f':
                    case 'formpreview':
                        $ret = formatTimestamp($ret, 'G:i');
                        return $ret;
                        break 1;

                    case 'n':
                    case 'none':
                    case 'e':
                    case 'edit':
                        break 1;

                    default:
                        break 1;
                }
                break;

            case XOBJ_DTYPE_CURRENCY:
                $decimal_section_original = strstr($ret, '.');
                $decimal_section = $decimal_section_original;
                if ($decimal_section) {
                    if (strlen($decimal_section) == 1) {
                        $decimal_section = '.00';
                    } elseif (strlen($decimal_section) == 2) {
                        $decimal_section = $decimal_section . '0';
                    }
                    $ret = str_replace($decimal_section_original, $decimal_section, $ret);
                } else {
                    $ret = $ret . '.00';
                }
                break;

            case XOBJ_DTYPE_TXTAREA:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                        $html = !empty($this->vars['dohtml']['value']) ? 1 : 0;
                        $xcode = (!isset($this->vars['doxcode']['value']) || $this->vars['doxcode']['value'] == 1) ? 1 : 0;
                        $smiley = (!isset($this->vars['dosmiley']['value']) || $this->vars['dosmiley']['value'] == 1) ? 1 : 0;
                        $image = (!isset($this->vars['doimage']['value']) || $this->vars['doimage']['value'] == 1) ? 1 : 0;
                        $br = (!isset($this->vars['dobr']['value']) || $this->vars['dobr']['value'] == 1) ? 1 : 0;
                        if (defined('XOOPS_EDITOR_IS_HTML')) {
                            $br = false;
                        }
                        if ($html && (!is_int($ret) && !empty($ret))) {
                            if ($br) { // have to use this whilst ever we have a zillion editors in the core
                                return icms_core_DataFilter::filterHTMLdisplay($ret, $xcode, $br);
                            } else {
                                return icms_core_DataFilter::checkVar($ret, 'html', 'output');
                            }
                        } else {
                            return icms_core_DataFilter::checkVar($ret, 'text', 'output');
                        }
                        break 1;

                    case 'e':
                    case 'edit':
                        return icms_core_DataFilter::checkVar($ret, 'html', 'edit');
                        break 1;

                    case 'p':
                    case 'preview':
                        $html = !empty($this->vars['dohtml']['value']) ? 1 : 0;
                        $xcode = (!isset($this->vars['doxcode']['value']) || $this->vars['doxcode']['value'] == 1) ? 1 : 0;
                        $smiley = (!isset($this->vars['dosmiley']['value']) || $this->vars['dosmiley']['value'] == 1) ? 1 : 0;
                        $image = (!isset($this->vars['doimage']['value']) || $this->vars['doimage']['value'] == 1) ? 1 : 0;
                        $br = (!isset($this->vars['dobr']['value']) || $this->vars['dobr']['value'] == 1) ? 1 : 0;
                        if ($html) {
                            return icms_core_DataFilter::checkVar($ret, 'html', 'input');
                        } else {
                            return icms_core_DataFilter::checkVar($ret, 'text', 'input');
                        }
                        break 1;

                    case 'f':
                    case 'formpreview':
                        return htmlspecialchars(icms_core_DataFilter::stripSlashesGPC($ret), ENT_QUOTES);
                        break 1;

                    case 'n':
                    case 'none':
                    default:
                        break 1;
                }
                break;

            case XOBJ_DTYPE_SIMPLE_ARRAY:
                $ret = &explode('|', $ret);
                break;

            case XOBJ_DTYPE_ARRAY:
                $ret = &unserialize($ret);
                break;

            case XOBJ_DTYPE_SOURCE:
                switch (strtolower($format)) {
                    case 's':
                    case 'show':
                        break 1;

                    case 'e':
                    case 'edit':
                        return htmlspecialchars($ret, ENT_QUOTES);
                        break 1;

                    case 'p':
                    case 'preview':
                        return icms_core_DataFilter::stripSlashesGPC($ret);
                        break 1;

                    case 'f':
                    case 'formpreview':
                        return htmlspecialchars(icms_core_DataFilter::stripSlashesGPC($ret), ENT_QUOTES);
                        break 1;

                    case 'n':
                    case 'none':
                    default:
                        break 1;
                }
                break;

            default:
                if ($this->vars[$key]['options'] != '' && $ret != '') {
                    switch (strtolower($format)) {
                        case 's':
                        case 'show':
                            $selected = explode('|', $ret);
                            $options = explode('|', $this->vars[$key]['options']);
                            $i = 1;
                            $ret = array();
                            foreach ($options as $op) {
                                if (in_array($i, $selected)) {
                                    $ret[] = $op;
                                }
                                $i++ ;
                            }
                            return implode(', ', $ret);

                        case 'e':
                        case 'edit':
                            $ret = explode('|', $ret);
                            break 1;

                        default:
                            break 1;
                    }
                }
                break;
        }
        return $ret;
    }

    /**
     *
     * @param str $key
     */
    public function doMakeFieldreadOnly($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['readonly'] = true;
            $this->vars[$key]['displayOnForm'] = true;
        }
    }

    /**
     *
     * @param str|arr $key
     */
    public function makeFieldReadOnly($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doMakeFieldreadOnly($v);
            }
        } else {
            $this->doMakeFieldreadOnly($key);
        }
    }

    /**
     *
     * @param str $key
     */
    public function doHideFieldFromForm($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['displayOnForm'] = false;
        }
    }

    /**
     *
     * @param $key
     */
    public function doHideFieldFromSingleView($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['displayOnSingleView'] = false;
        }
    }

    /**
     *
     * @param $key
     */
    public function hideFieldFromForm($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doHideFieldFromForm($v);
            }
        } else {
            $this->doHideFieldFromForm($key);
        }
    }

    /**
     *
     * @param $key
     */
    public function hideFieldFromSingleView($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doHideFieldFromSingleView($v);
            }
        } else {
            $this->doHideFieldFromSingleView($key);
        }
    }

    /**
     *
     * @param unknown_type $key
     */
    public function doShowFieldOnForm($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['displayOnForm'] = true;
        }
    }

    /**
     * Display an automatic SingleView of the object, based on the displayOnSingleView param of each vars
     *
     * @param bool $fetchOnly if set to TRUE, then the content will be return, if set to FALSE, the content will be outputed
     * @param bool $userSide for futur use, to do something different on the user side
     * @return content of the template if $fetchOnly or nothing if !$fetchOnly
     */
    public function displaySingleObject($fetchOnly = false, $userSide = false, $actions = array(), $headerAsRow = true) {
        $singleview = new icms_ipf_view_Single($this, $userSide, $actions, $headerAsRow);
        // add all fields mark as displayOnSingleView except the keyid
        foreach ($this->vars as $key => $var) {
            if ($key != $this->handler->keyName && $var['displayOnSingleView']) {
                $is_header = ($key == $this->handler->identifierName);
                $singleview->addRow(new icms_ipf_view_Row($key, false, $is_header));
            }
        }

        if ($fetchOnly) {
            $ret = $singleview->render($fetchOnly);
            ;
            return $ret;
        } else {
            $singleview->render($fetchOnly);
        }
    }

    /**
     *
     * @param unknown_type $key
     */
    public function doDisplayFieldOnSingleView($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['displayOnSingleView'] = true;
        }
    }

    /**
     *
     * @param $field
     * @param $required
     */
    public function doSetFieldAsRequired($field, $required = true) {
        $this->setVarInfo($field, 'required', $required);
    }

    /**
     *
     * @param unknown_type $field
     */
    public function doSetFieldForSorting($field) {
        $this->setVarInfo($field, 'sortby', true);
    }

    /**
     *
     * @param unknown_type $key
     */
    public function showFieldOnForm($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doShowFieldOnForm($v);
            }
        } else {
            $this->doShowFieldOnForm($key);
        }
    }

    /**
     * delete object
     *
     * @param bool $force
     * @return bool true if successful, false if not
     */
    public function delete($force = false) {
        return $this->handler->delete($this, $force);
    }

    /**
     *
     * @param $key
     */
    public function displayFieldOnSingleView($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doDisplayFieldOnSingleView($v);
            }
        } else {
            $this->doDisplayFieldOnSingleView($key);
        }
    }

    /**
     *
     * @param $key
     */
    public function doSetAdvancedFormFields($key) {
        if (isset($this->vars[$key])) {
            $this->vars[$key]['advancedform'] = true;
        }
    }

    /**
     *
     * @param <type> $key
     */
    public function setAdvancedFormFields($key) {
        if (is_array($key)) {
            foreach ($key as $v) {
                $this->doSetAdvancedFormFields($v);
            }
        } else {
            $this->doSetAdvancedFormFields($key);
        }
    }

    /**
     * get urllink object
     *
     * @param string $key field name
     * @return icms_data_urllink_Object
     */
    public function getUrlLinkObj($key) {
        $urllink_handler = icms::handler("icms_data_urllink");
        $urllinkid = $this->getVar($key) != null ? $this->getVar($key) : 0;
        if ($urllinkid != 0) {
            return $urllink_handler->get($urllinkid);
        } else {
            return $urllink_handler->create();
        }
    }

    /**
     * store urllink object
     *
     * @param icms_data_urllink_Object $urllinkObj
     * @return bool
     */
    public function storeUrlLinkObj($urllinkObj) {
        $urllink_handler = icms::handler("icms_data_urllink");
        return $urllink_handler->insert($urllinkObj);
    }

    /**
     * store file object
     *
     * @param string $key field name
     * @return icms_data_file_Object
     */
    function getFileObj($key) {
        $file_handler = icms::handler("icms_data_file");
        $fileid = $this->getVar($key) != null ? $this->getVar($key) : 0;
        if ($fileid != 0) {
            return $file_handler->get($fileid);
        } else {
            return $file_handler->create();
        }
    }

    /**
     * store file object
     *
     * @param icms_data_file_Object $fileObj
     * @return bool
     */
    function storeFileObj($fileObj) {
        $file_handler = icms::handler("icms_data_file");
        return $file_handler->insert($fileObj);
    }
}
API documentation generated by ApiGen