00001 <?php
00002 require_once dirname(__FILE__) . '/dbfield.enum.cls.php';
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 class DBFieldSet extends DBFieldEnum {
00013
00014
00015
00016
00017
00018
00019 public function validate($value) {
00020 $ret = new Status();
00021 $arr_value = Arr::force($value, false);
00022 foreach($arr_value as $val) {
00023
00024 $ret->merge(parent::validate($val));
00025
00026 }
00027 return $ret;
00028 }
00029
00030
00031
00032
00033
00034
00035
00036 protected function do_format_not_null($value) {
00037 $value = Arr::force($value);
00038 $ret = 0;
00039 $cnt = count($this->allowed);
00040 for ($i = 0; $i < $cnt; $i++) {
00041 $test = $this->allowed[$i];
00042 if (in_array($test, $value)) {
00043 $ret = $ret | pow(2, $i);
00044 }
00045 }
00046 return $ret;
00047 }
00048
00049
00050
00051
00052 public function format_select() {
00053 return $this->get_field_name() . '+0';
00054 }
00055
00056
00057
00058
00059
00060
00061
00062 public function convert_result($value) {
00063 $ret = array();
00064 $cnt = count($this->allowed);
00065 for ($i = 0; $i < $cnt; $i++) {
00066 $test = pow(2, $i);
00067 if ($value & $test) {
00068 $ret[] = $this->allowed[$i];
00069 }
00070 }
00071 return $ret;
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084 public static function set_set_value(&$set, $value) {
00085 if (!self::set_has_value($set, $value)) {
00086 self::set_force_array($set);
00087 $set[] = $value;
00088 }
00089 }
00090
00091
00092
00093
00094
00095
00096
00097 public static function set_clear_value(&$set, $value) {
00098 $new_set = array();
00099 self::set_force_array($set);
00100 foreach($set as $v) {
00101 if ($v !== $value) {
00102 $new_set[] = $v;
00103 }
00104 }
00105 $set = $new_set;
00106 }
00107
00108
00109
00110
00111
00112
00113
00114
00115 public static function set_has_value($set, $value) {
00116 $ret = false;
00117 if (!is_null($set) && !$set instanceof DBNull) {
00118 $ret = in_array($value, $set);
00119 }
00120 return $ret;
00121 }
00122
00123 private static function set_force_array(&$set) {
00124 if (is_null($set) || $set instanceof DBNull) {
00125 $set = array();
00126 }
00127 }
00128 }