public function getSearchFormsAsDOM()
 {
     $vo_forms = $this->opo_dom->createElement("searchForms");
     $qr_forms = $this->opo_db->query("SELECT * FROM ca_search_forms");
     while ($qr_forms->nextRow()) {
         /** @var ca_search_forms $t_form */
         $t_form = new ca_search_forms($qr_forms->get("form_id"));
         $vo_form = $this->opo_dom->createElement("searchForm");
         $vo_form->setAttribute("code", $this->makeIDNO($qr_forms->get("form_code")));
         $vo_form->setAttribute("type", $this->opo_dm->getTableName($qr_forms->get("table_num")));
         $vo_form->setAttribute("system", $qr_forms->get("is_system"));
         $vo_labels = $this->opo_dom->createElement("labels");
         $qr_form_labels = $this->opo_db->query("SELECT * FROM ca_search_form_labels WHERE form_id=?", $qr_forms->get("form_id"));
         while ($qr_form_labels->nextRow()) {
             $vo_label = $this->opo_dom->createElement("label");
             $vo_label->setAttribute("locale", $this->opt_locale->localeIDToCode($qr_form_labels->get("locale_id")));
             $vo_label->appendChild($this->opo_dom->createElement("name", caEscapeForXML($qr_form_labels->get("name"))));
             $vo_labels->appendChild($vo_label);
         }
         $vo_form->appendChild($vo_labels);
         if (is_array($t_form->getSettings())) {
             $vo_settings = $this->opo_dom->createElement("settings");
             foreach ($t_form->getSettings() as $vs_setting => $va_value) {
                 if (is_array($va_value)) {
                     foreach ($va_value as $vs_value) {
                         if (!is_array($vs_value)) {
                             // ignore legacy search form settings which usually have nested arrays
                             $vo_setting = $this->opo_dom->createElement("setting", $vs_value);
                             $vo_setting->setAttribute("name", $vs_setting);
                             $vo_settings->appendChild($vo_setting);
                         }
                     }
                 } else {
                     $vo_setting = $this->opo_dom->createElement("setting", $va_value);
                     $vo_setting->setAttribute("name", $vs_setting);
                     $vo_settings->appendChild($vo_setting);
                 }
             }
             $vo_form->appendChild($vo_settings);
         }
         // User and group access
         $va_users = $t_form->getUsers();
         if (sizeof($va_users) > 0) {
             $vo_user_access = $this->opo_dom->createElement("userAccess");
             $vo_form->appendChild($vo_user_access);
             foreach ($va_users as $va_user_info) {
                 $vo_permission = $this->opo_dom->createElement("permission");
                 $vo_user_access->appendChild($vo_permission);
                 $vo_permission->setAttribute("user", $va_user_info["user_name"]);
                 $vo_permission->setAttribute("access", $this->_convertUserGroupAccessToString(intval($va_user_info['access'])));
             }
         }
         $va_groups = $t_form->getUserGroups();
         if (sizeof($va_groups) > 0) {
             $vo_group_access = $this->opo_dom->createElement("groupAccess");
             $vo_form->appendChild($vo_group_access);
             foreach ($va_groups as $va_group_info) {
                 $vo_permission = $this->opo_dom->createElement("permission");
                 $vo_group_access->appendChild($vo_permission);
                 $vo_permission->setAttribute("group", $va_group_info["code"]);
                 $vo_permission->setAttribute("access", $this->_convertUserGroupAccessToString(intval($va_group_info['access'])));
             }
         }
         $vo_placements = $this->opo_dom->createElement("bundlePlacements");
         $qr_placements = $this->opo_db->query("SELECT * FROM ca_search_form_placements WHERE form_id=? ORDER BY placement_id", $qr_forms->get("form_id"));
         while ($qr_placements->nextRow()) {
             $vo_placement = $this->opo_dom->createElement("placement");
             $vo_placement->setAttribute("code", "p" . $qr_placements->get('placement_id'));
             $vo_placements->appendChild($vo_placement);
             $vo_placement->appendChild($this->opo_dom->createElement("bundle", caEscapeForXML($qr_placements->get("bundle_name"))));
             /** @var ca_search_form_placements $t_placement */
             $t_placement = new ca_search_form_placements($qr_placements->get("placement_id"));
             if (is_array($t_placement->getSettings())) {
                 $vo_settings = $this->opo_dom->createElement("settings");
                 foreach ($t_placement->getSettings() as $vs_setting => $va_values) {
                     if (is_array($va_values)) {
                         foreach ($va_values as $vs_key => $vs_value) {
                             $vo_setting = $this->opo_dom->createElement("setting", $vs_value);
                             $vo_setting->setAttribute("name", $vs_setting);
                             if ($vs_setting == "label" || $vs_setting == "add_label") {
                                 if (is_numeric($vs_key)) {
                                     $vs_key = $this->opt_locale->localeIDToCode($vs_key);
                                 }
                                 $vo_setting->setAttribute("locale", $vs_key);
                             }
                             $vo_settings->appendChild($vo_setting);
                         }
                     } else {
                         $vo_setting = $this->opo_dom->createElement("setting", $va_values);
                         $vo_setting->setAttribute("name", $vs_setting);
                         $vo_settings->appendChild($vo_setting);
                     }
                 }
                 $vo_placement->appendChild($vo_settings);
             }
         }
         $vo_form->appendChild($vo_placements);
         $vo_forms->appendChild($vo_form);
     }
     return $vo_forms;
 }