/**
  * Get control item objects with control item options from database as objects or as arrays 
  * 
  * @param	$control_id	control id
  * @param	$control_group_id	control group id
  * @param $return_type return data as objects or as arrays
  * @return array with control items
  */
 function get_control_items_and_options_by_control_and_group($control_id, $control_group_id, $return_type = "return_array")
 {
     $control_id = (int) $control_id;
     $control_group_id = (int) $control_group_id;
     $results = array();
     $sql = "SELECT ci.id as ci_id, ci.*, cio.id as cio_id, cio.* ";
     $sql .= "FROM controller_control_item ci ";
     $sql .= "LEFT JOIN controller_control_item_list cl ON cl.control_item_id = ci.id ";
     $sql .= "LEFT JOIN controller_control c ON c.id = cl.control_id ";
     $sql .= "LEFT JOIN controller_control_item_option cio ON ci.id = cio.control_item_id ";
     $sql .= "WHERE c.id={$control_id} ";
     $sql .= "AND ci.control_group_id={$control_group_id} ";
     $sql .= "ORDER BY cl.order_nr";
     $this->db->query($sql, __LINE__, __FILE__);
     $control_item_id = 0;
     $control_item = null;
     $control_item_array = array();
     while ($this->db->next_record()) {
         if ($this->db->f('ci_id') != $control_item_id) {
             if ($control_item_id) {
                 $control_item->set_options_array($options_array);
                 if ($return_type == "return_array") {
                     $control_item_array[] = $control_item->toArray();
                 } else {
                     $control_item_array[] = $control_item;
                 }
             }
             $control_item = new controller_control_item($this->unmarshal($this->db->f('ci_id'), 'int'));
             $control_item->set_title($this->unmarshal($this->db->f('title', true), 'string'));
             $control_item->set_required($this->unmarshal($this->db->f('required'), 'boolean'));
             $control_item->set_what_to_do($this->unmarshal($this->db->f('what_to_do', true), 'string'));
             $control_item->set_how_to_do($this->unmarshal($this->db->f('how_to_do', true), 'string'));
             $control_item->set_control_group_id($this->unmarshal($this->db->f('control_group_id'), 'int'));
             $control_item->set_type($this->unmarshal($this->db->f('type', true), 'string'));
             $options_array = array();
         }
         $control_item_option = new controller_control_item_option($this->db->f('option_value', true), $this->db->f('control_item_id'));
         $control_item_option->set_id($this->db->f('cio_id'));
         if ($return_type == "return_array") {
             $options_array[] = $control_item_option->toArray();
         } else {
             $options_array[] = $control_item_option;
         }
         $control_item_id = $control_item->get_id();
     }
     if ($control_item != null) {
         $control_item->set_options_array($options_array);
         if ($return_type == "return_array") {
             $control_item_array[] = $control_item->toArray();
         } else {
             $control_item_array[] = $control_item;
         }
         return $control_item_array;
     } else {
         return null;
     }
 }
 /**
  * Get single control item with options  
  * 
  * @param	$id	id of the control_item to return
  * @param $return_type return data as objects or as arrays
  * @return control item object
  */
 public function get_single_with_options($id)
 {
     $id = (int) $id;
     $sql = "SELECT ci.id as ci_id, ci.*, cio.id as cio_id, cio.*, cg.group_name ";
     $sql .= "FROM controller_control_item ci ";
     $sql .= "LEFT JOIN controller_control_item_option as cio ON cio.control_item_id = ci.id ";
     $sql .= "LEFT JOIN controller_control_group as cg ON ci.control_group_id = cg.id ";
     $sql .= "WHERE ci.id = {$id}";
     $this->db->query($sql);
     $counter = 0;
     $control_item = null;
     while ($this->db->next_record()) {
         if (!$counter) {
             $control_item = new controller_control_item($this->unmarshal($this->db->f('ci_id'), 'int'));
             $control_item->set_title($this->unmarshal($this->db->f('title', true), 'string'));
             $control_item->set_required($this->unmarshal($this->db->f('required', true), 'bool'));
             $control_item->set_what_to_do($this->unmarshal($this->db->f('what_to_do', true), 'string'));
             $control_item->set_how_to_do($this->unmarshal($this->db->f('how_to_do', true), 'string'));
             $control_item->set_control_group_id($this->unmarshal($this->db->f('control_group_id'), 'int'));
             $control_item->set_control_group_name($this->unmarshal($this->db->f('group_name', true), 'string'));
             $control_item->set_control_area_id($this->unmarshal($this->db->f('control_area_id')));
             $control_item->set_type($this->unmarshal($this->db->f('type', true), 'string'));
             $category = execMethod('phpgwapi.categories.return_single', $this->unmarshal($this->db->f('control_area_id'), 'int'));
             $control_item->set_control_area_name($category[0]['name']);
         }
         if ($this->db->f('cio_id')) {
             $control_item_option = new controller_control_item_option();
             $control_item_option->set_id($this->unmarshal($this->db->f('cio_id'), 'int'));
             $control_item_option->set_option_value($this->unmarshal($this->db->f('option_value', true), 'string'));
             $control_item_option->set_control_item_id($this->unmarshal($this->db->f('control_item_id'), 'int'));
             $options_array[] = $control_item_option;
         }
         $counter++;
     }
     $control_item->set_options_array($options_array);
     return $control_item;
 }