public function query()
 {
     // TODO: access control
     $type_id = phpgw::get_var('type_id');
     $composite_id = phpgw::get_var('composite_id');
     $search_type = phpgw::get_var('search_option');
     // YUI variables for paging and sorting
     $start_index = phpgw::get_var('startIndex', 'int');
     $num_of_objects = phpgw::get_var('results', 'int', 'GET', 10);
     $sort_field = phpgw::get_var('sort');
     $sort_ascending = phpgw::get_var('dir') == 'desc' ? false : true;
     $property_bolocation = new property_bolocation();
     $property_bolocation->order = $sort_field;
     $property_bolocation->sort = phpgw::get_var('dir');
     $property_bolocation->start = $start_index;
     if ($search_type == 'gab') {
         $q = phpgw::get_var('query');
         $query = explode('/', $q);
         //GAB search
         $property_sogab = new property_sogab();
         $gabinfo = $property_sogab->read(array('gaards_nr' => empty($query[0]) ? '' : $query[0], 'bruksnr' => empty($query[1]) ? '' : $query[1], 'feste_nr' => empty($query[2]) ? '' : $query[2], 'seksjons_nr' => empty($query[3]) ? '' : $query[3], 'allrows' => true));
         //var_dump($gabinfo);
         foreach ($gabinfo as $gabelement) {
             $row = $property_bolocation->read_single($gabelement['location_code']);
             $row['gab'] = rental_uicommon::get_nicely_formatted_gab_id($gabelement['gab_id']);
             $rows[] = $row;
             $rows_total[] = $row;
             //TODO: Add gabno for element
         }
     } else {
         if (!isset($type_id) || $type_id < 1) {
             $type_id = 2;
         }
         $user_rows_per_page = $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'];
         $tmp_count = phpgw::get_var('results', 'int', 'GET', 0);
         if (isset($tmp_count) && $tmp_count > 0) {
             $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'] = $num_of_objects;
         }
         $rows_total = $property_bolocation->read(array('type_id' => $type_id, 'allrows' => true));
         $rows = $property_bolocation->read(array('type_id' => $type_id));
         $GLOBALS['phpgw_info']['user']['preferences']['common']['maxmatchs'] = $user_rows_per_page;
     }
     //Add context menu columns (actions and labels)
     array_walk($rows, array($this, 'add_actions'), array($composite_id, $type_id));
     //Build a YUI result from the data
     //
     $result_data = array('results' => $rows, 'total_records' => count($rows_total));
     return $this->yui_results($result_data, 'total_records', 'results');
 }
 protected function populate(int $unit_id, &$unit)
 {
     $location_code = $this->unmarshal($this->db->f('location_code', true), 'string');
     // We get the data from the property module
     $data = execMethod('property.bolocation.read_single', array('location_code' => $location_code, 'extra' => array('view' => true)));
     $level = -1;
     $names = array();
     $levelFound = false;
     for ($i = 1; !$levelFound; $i++) {
         $loc_name = 'loc' . $i . '_name';
         if (array_key_exists($loc_name, $data)) {
             $level = $i;
             $names[$level] = $data[$loc_name];
         } else {
             $levelFound = true;
         }
     }
     $gab_id = '';
     $gabinfos = execMethod('property.sogab.read', array('location_code' => $location_code, 'allrows' => true));
     if ($gabinfos != null && is_array($gabinfos) && count($gabinfos) == 1) {
         $gabinfo = array_shift($gabinfos);
         $gab_id = $gabinfo['gab_id'];
     }
     $location = new rental_property_location($location_code, rental_uicommon::get_nicely_formatted_gab_id($gab_id), $level, $names);
     $location->set_address_1($data['street_name'] . ' ' . $data['street_number']);
     foreach ($data['attributes'] as $attributes) {
         switch ($attributes['column_name']) {
             case 'area_gross':
                 $location->set_area_gros($attributes['value']);
                 break;
             case 'area_net':
                 $location->set_area_net($attributes['value']);
                 break;
             case 'bruttoareal':
                 $location->set_area_gros($attributes['value']);
                 break;
             case 'nettoareal':
                 $location->set_area_net($attributes['value']);
                 break;
         }
     }
     return new rental_unit($this->unmarshal($this->db->f('id', true), 'int'), $this->unmarshal($this->db->f('composite_id', true), 'int'), $location);
 }
 function populate(int $composite_id, &$composite)
 {
     if ($composite == null) {
         $composite = new rental_composite($composite_id);
         $composite->set_description($this->unmarshal($this->db->f('description', true), 'string'));
         $composite->set_is_active($this->db->f('is_active'));
         $composite_name = $this->unmarshal($this->db->f('name', true), 'string');
         if ($composite_name == null || $composite_name == '') {
             $composite_name = lang('no_name_composite', $composite_id);
         }
         $composite->set_name($composite_name);
         $composite->set_has_custom_address($this->unmarshal($this->db->f('has_custom_address', true), 'bool'));
         $composite->set_custom_address_1($this->unmarshal($this->db->f('address_1', true), 'string'));
         $composite->set_custom_address_2($this->unmarshal($this->db->f('address_2', true), 'string'));
         $composite->set_custom_house_number($this->unmarshal($this->db->f('house_number', true), 'string'));
         $composite->set_custom_postcode($this->unmarshal($this->db->f('postcode', true), 'string'));
         $composite->set_custom_place($this->unmarshal($this->db->f('place', true), 'string'));
         $composite->set_area($this->unmarshal($this->db->f('area', true), 'float'));
         $composite->set_furnish_type_id($this->unmarshal($this->db->f('furnish_type_id'), 'int'));
         $composite->set_standard_id($this->unmarshal($this->db->f('standard_id'), 'int'));
     }
     // Location code
     $location_code = $this->unmarshal($this->db->f('location_code', true), 'string');
     //Status
     $database_status = $this->unmarshal($this->db->f('status', true), 'string');
     $composite_status = $composite->get_status();
     if ($composite_status != 'Ikke ledig') {
         $composite->set_status($database_status);
     }
     $contract_id = $this->unmarshal($this->db->f('contract_id', true), 'int');
     // Adds contract to array in composite object if it's not already added
     if ($contract_id != 0 & !$composite->contains_contract($contract_id)) {
         $contract = new rental_contract($contract_id);
         $start_date = $this->unmarshal($this->db->f('date_start', true), 'int');
         $end_date = $this->unmarshal($this->db->f('date_end', true), 'int');
         $old_contract_id = $this->unmarshal($this->db->f('old_contract_id', true), 'string');
         // Adds contract if end date is not specified or greater than todays date
         if ($end_date == 0 || $end_date > time()) {
             $contract_date = new rental_contract_date($start_date, $end_date);
             $contract->set_contract_date($contract_date);
             $contract->set_old_contract_id($old_contract_id);
             $composite->add_contract($contract);
         }
     }
     if (!$composite->contains_unit($location_code)) {
         //composite inneholder ikke unit -> legg den til
         $location = null;
         try {
             // We get the data from the property module
             $data = @execMethod('property.bolocation.read_single', array('location_code' => $location_code, 'extra' => array('view' => true)));
             if ($data != null) {
                 $level = -1;
                 $names = array();
                 $levelFound = false;
                 for ($i = 1; $i < 6; $i++) {
                     $loc_name = 'loc' . $i . '_name';
                     if (array_key_exists($loc_name, $data)) {
                         $level = $i;
                         $names[$level] = $data[$loc_name];
                     }
                 }
                 $gab_id = '';
                 $gabinfos = @execMethod('property.sogab.read', array('location_code' => $location_code, 'allrows' => true));
                 if ($gabinfos != null && is_array($gabinfos) && count($gabinfos) == 1) {
                     $gabinfo = array_shift($gabinfos);
                     $gab_id = $gabinfo['gab_id'];
                 }
                 $location = new rental_property_location($location_code, rental_uicommon::get_nicely_formatted_gab_id($gab_id), $level, $names);
                 if (isset($data['street_name']) && $data['street_name']) {
                     $location->set_address_1($data['street_name'] . ' ' . $data['street_number']);
                 }
                 //$location->set_address_1($data['address']);
                 foreach ($data['attributes'] as $attributes) {
                     switch ($attributes['column_name']) {
                         case 'area_gross':
                             $location->set_area_gros($attributes['value']);
                             break;
                         case 'area_net':
                             $location->set_area_net($attributes['value']);
                             break;
                     }
                 }
             } else {
                 $location = new rental_property_location($location_code, null, 1, array());
             }
         } catch (Exception $e) {
             $location = new rental_property_location($location_code, null, 1, array());
         }
         $composite->add_unit(new rental_unit($this->unmarshal($this->db->f('unit_id', true), 'int'), $composite_id, $location));
     }
     return $composite;
 }