<?xml version="1.0"?>
<!--
 -
 -  $Id$
 -
 -  This file is part of the OpenLink Software Virtuoso Open-Source (VOS)
 -  project.
 -
 -  Copyright (C) 1998-2018 OpenLink Software
 -
 -  This project is free software; you can redistribute it and/or modify it
 -  under the terms of the GNU General Public License as published by the
 -  Free Software Foundation; only version 2 of the License, dated June 1991.
 -
 -  This program is distributed in the hope that it will be useful, but
 -  WITHOUT ANY WARRANTY; without even the implied warranty of
 -  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 -  General Public License for more details.
 -
 -  You should have received a copy of the GNU General Public License along
 -  with this program; if not, write to the Free Software Foundation, Inc.,
 -  51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
 -
-->
<v:page name="blog_home_page"
        xmlns:vm="http://www.openlinksw.com/vspx/ods/"
        xmlns:v="http://www.openlinksw.com/vspx/"
        style="index.xsl"
        doctype="-//W3C//DTD XHTML 1.0 Transitional//EN"
        doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  <vm:page>
    <vm:header>
      <vm:title>Application Properties</vm:title>
    </vm:header>
    <v:on-init>
      <![CDATA[
        select WAI_MEMBER_MODEL, WAI_IS_PUBLIC, WAI_MEMBERS_VISIBLE, WAI_INST, WAI_NAME, WAI_TYPE_NAME, WAI_DESCRIPTION, WAI_LICENSE
          into self.imodel, self.is_public, self.is_visible, self.inst, self.iname, self.wa_type, self.idesc, self.ilic
          from WA_INSTANCE
         where WAI_ID = self.iid;
        if (self.instance_descr is null)
          self.instance_descr := WA_GET_APP_NAME (coalesce(get_keyword('wa_name', self.vc_event.ve_params), (select WAI_TYPE_NAME from WA_INSTANCE where WAI_ID = get_keyword('wai_id', self.vc_event.ve_params)), ''));

        self.ihome := self.inst.wa_home_url();
        if (self.wa_type in ('oMail'))
        {
          declare tmp varchar;

          tmp := self.iname;
          self.iname := subseq(tmp, 0, strstr(tmp, '@'));
          self.wa_domain := subseq(tmp, strstr(tmp, '@')+1);
        }
        if (self.wa_type in ('IM'))
        {
          declare tmp varchar;

          tmp := self.iname;
          tmp := subseq(tmp, strstr(tmp, '@')+1);
          self.wa_domain := subseq(tmp, 0, strstr(tmp, '/'));
          self.iname := subseq(tmp, strstr(tmp, '/')+1);
        }
        self.domains := '<domains/>';
        if (self.wa_type = 'oMail')
        {
          declare pos integer;
          self.domains := '';
          for (select WD_DOMAIN from DB.DBA.WA_DOMAINS) do
          {
            pos := strstr(concat(WD_DOMAIN, ':'), ':');
            self.domains := concat(self.domains, sprintf('<domain>%s</domain>', substring(WD_DOMAIN, 1, pos)));
          }
          if (self.domains = '')
            signal('22024', 'No domains available.');
          self.domains := concat('<domains>', self.domains, '</domains>');
        }
        if (self.wa_type = 'IM')
        {
          declare pos integer;
          self.domains := '';
          for (select WD_DOMAIN from DB.DBA.WA_DOMAINS) do
          {
            pos := strstr(concat(WD_DOMAIN, ':'), ':');
            self.domains := concat(self.domains, sprintf('<domain>%s</domain>', substring(WD_DOMAIN, 1, pos)));
          }
          if (self.domains = '')
            signal('22024', 'No domains available.');
          self.domains := concat('<domains>', self.domains, '</domains>');
        }
        self.domains := xml_tree_doc(self.domains);
      ]]>
    </v:on-init>
    <v:after-data-bind>
      <![CDATA[
        declare freeze varchar;
        freeze := (select WAI_IS_FROZEN from DB.DBA.WA_INSTANCE where WAI_ID = self.iid);
        if (freeze = 1 and not wa_user_is_dba (self.u_name, self.u_group))
        {
          http_request_status('HTTP/1.1 302 Found');
          http_header(sprintf('Location: services.vspx?sid=%s&realm=%s\r\n', self.sid, self.realm));
          return;
        }
      ]]>
    </v:after-data-bind>
    <vm:pagewrapper>
      <vm:variable name="inst" type="db.dba.web_app" default="null" persist="0" />
      <vm:variable name="wa_name" type="varchar" default="null" persist="0" param-name="wa_name"/>
      <vm:variable name="wa_type" type="varchar" default="null" persist="0"/>
      <vm:variable name="imodel" type="int" default="null" persist="0"/>
      <vm:variable name="is_public" type="int" default="null" persist="0"/>
      <vm:variable name="is_visible" type="int" default="null" persist="0"/>
      <vm:variable name="iid" type="int" default="null" persist="0" param-name="wai_id"/>
      <vm:variable name="iname" type="varchar" default="null" persist="0"/>
      <vm:variable name="idesc" type="varchar" default="null" persist="0"/>
      <vm:variable name="ilic" type="varchar" default="null" persist="0"/>
      <vm:variable name="ihome" type="varchar" default="null" persist="0"/>
      <vm:variable name="instance_descr" type="varchar" default="null" persist="0" />
      <vm:variable name="wa_domain" type="varchar" default="null" persist="0"/>
      <vm:variable name="domains" type="varchar" default="null" persist="0"/>
      <vm:variable name="switch_adv" type="int" default="1" persist="0"/>
      <vm:variable name="page_type" type="varchar" default="'edit'" persist="0"/>

      <vm:variable name="itemplate" type="varchar" default="null" persist="0"/>
      <vm:variable name="ilogo" type="varchar" default="null" persist="0"/>
      <vm:variable name="iwelcome_photo" type="varchar" default="null" persist="0"/>
      <vm:variable name="logo_isdav" type="int" default="1" persist="0"/>
      <vm:variable name="welcome_isdav" type="int" default="1" persist="0"/>
      <vm:variable name="logo_use_comboorupload" type="int" default="1" persist="0"/>
      <vm:variable name="welcome_use_comboorupload" type="int" default="1" persist="0"/>

      <vm:navigation on="settings"/>
      <vm:navigation1 on="services"/>
      <vm:rawheader caption="Application Properties"/>
      <vm:body>
        <vm:login redirect="index.vspx"/>
        <div class="box">
          <v:form type="simple" method="POST" name="eform1">
            <table  class="ctl_grp">
              <vm:instance-settings edit="yes" />
              <tr>
                 <td colspan="2">
                  <span class="fm_ctl_btn">
                    <v:button action="simple" name="cancel1" value="Cancel">
                      <v:on-post>
                        <![CDATA[
                          http_request_status ('HTTP/1.1 302 Found');
                          http_header (sprintf ('Location: services.vspx?sid=%s&realm=%s\r\n', self.sid, self.realm));
                        ]]>
                      </v:on-post>
                    </v:button>
                    <v:button action="simple" name="accept1" value="Save" >
                      <v:on-post>
                        <![CDATA[
                          declare freeze varchar;

                          freeze := (select WAI_IS_FROZEN from DB.DBA.WA_INSTANCE where WAI_ID = self.iid);
                          if (freeze = 1 and not wa_user_is_dba (self.u_name, self.u_group))
                          {
                            self.vc_error_message := 'Application is frozen';
                            self.vc_is_valid := 0;
                            goto err;
                          }

                          declare inst web_app;

                          inst := self.inst;
                          -- We don't edit the instance name
                          self.iname1.ufl_value := trim (self.iname1.ufl_value);

                          if (self.wa_type = 'oMail')
                          {
                            inst.wa_name := concat(self.iname1.ufl_value, '@', self.idomain1.ufl_value);
                          }
                          else if (self.wa_type = 'oWiki')
                          {
                            declare _instance_name varchar;
                            _instance_name := coalesce(self.iname1.ufl_value, '');
                            if (regexp_match ('[A-Za-z0-9_]+', _instance_name) <> _instance_name)
                            {
                              self.vc_error_message := 'Wiki instance must be single word without special characters';
                              self.vc_is_valid := 0;
                              self.iname1.ufl_failed := 1;
                              return;
                            }
                            declare _len any;
                            _len := length(coalesce(self.iname1.ufl_value, ''));
                            if (_len < 1 or _len > 55)
                            {
                              self.vc_error_message := 'Application name should not be empty and not longer 55 characters';
                              self.vc_is_valid := 0;
                              self.iname1.ufl_failed := 1;
                              return;
                            }
                            --inst.wa_name := self.iname1.ufl_value;
                          }
                          else if (self.wa_type = 'IM')
                          {
                            declare _inst_name varchar;

                            self.iname2.ufl_value := trim (self.iname2.ufl_value);
                            _inst_name := coalesce(self.iname2.ufl_value, '');
                            if (isnull (regexp_match ('^[A-Za-z0-9_]+\$', _inst_name)))
                            {
                              self.vc_error_message := 'IM instance must be single word without special characters';
                              self.vc_is_valid := 0;
                              self.iname2.ufl_failed := 1;
                              return;
                            }
                            inst.wa_name := concat(self.u_name, '@', self.idomain2.ufl_value, '/',self.iname2.ufl_value);
                          }
                          else
                          {
                            --inst.wa_name := self.iname1.ufl_value;
                            ;
                          }
                          inst.wa_member_model := atoi(self.imodel1.ufl_value);
                          if (self.wa_type not in ('oMail', 'IM'))
                          {
                            self.is_public := self.is_public1.ufl_selected;
                          }
                          if (self.wa_type not in ('oDrive', 'oMail', 'IM'))
                          {
                            self.is_visible := self.is_visible1.ufl_selected;
                          }

                          declare exit handler for sqlstate '23000'
                          {
                            rollback work;
                            self.vc_is_valid := 0;
                            self.vc_error_message := 'An instance with same name already exists, please specify unique instance name.';
                            return;
                          };

                          update WA_INSTANCE
                             set WAI_MEMBER_MODEL = atoi (self.imodel1.ufl_value),
                                 WAI_IS_PUBLIC = self.is_public,
                                 WAI_MEMBERS_VISIBLE = self.is_visible,
                                 WAI_INST = inst,
                                 WAI_NAME = inst.wa_name,
                                   WAI_DESCRIPTION = self.idesc1.ufl_value,
                                  WAI_LICENSE = self.ilic1.ufl_value
                           where WAI_ID = self.iid;
                          commit work;

                        err:;
                          http_request_status ('HTTP/1.1 302 Found');
                          http_header (sprintf ('Location: services.vspx?sid=%s&realm=%s\r\n', self.sid, self.realm));
                        ]]>
                      </v:on-post>
                    </v:button>
                  </span>
                 </td>
              </tr>
            </table>
          </v:form>
        </div>
      </vm:body>
    </vm:pagewrapper>
  </vm:page>
</v:page>
