creorga page links and data connections
authorKilian Saffran <ksaffran@dks.lu>
Tue, 26 Mar 2019 10:49:09 +0000 (11:49 +0100)
committerKilian Saffran <ksaffran@dks.lu>
Tue, 26 Mar 2019 10:49:09 +0000 (11:49 +0100)
83 files changed:
api/lib/JSON/PP.pm [new file with mode: 0644]
api/lib/JSON/PP/Boolean.pm [new file with mode: 0644]
api/lib/URI/Encode.pm [new file with mode: 0644]
api/prefs.cgi
api/sqlite.cgi
apps/creorga/css/creorga.css
apps/creorga/index.html
apps/creorga/js/app.js
apps/creorga/js/creorga.js
apps/creorga/js/webdatabase.js
apps/creorga/js/webpreferences.js
apps/creorga/modules/calendar/calglobal.html
apps/creorga/modules/calendar/callunch.html
apps/creorga/modules/calendar/index.html
apps/creorga/modules/calendar/js/calchilds.js
apps/creorga/modules/calendar/js/calglobal.js
apps/creorga/modules/calendar/js/callunch.js
apps/creorga/modules/childs/child.html
apps/creorga/modules/childs/index.html
apps/creorga/modules/childs/js/child.js
apps/creorga/modules/childs/js/childs.js
apps/creorga/modules/creche/creche.html
apps/creorga/modules/creche/creche.js
apps/creorga/modules/forms/forms.html
apps/creorga/modules/forms/js/forms.js
apps/creorga/modules/logbook/js/logactivity.js
apps/creorga/modules/logbook/js/logactivity_basic.js
apps/creorga/modules/logbook/js/logchild.js
apps/creorga/modules/logbook/js/logcominterne.js
apps/creorga/modules/logbook/js/logcominterne_basic.js
apps/creorga/modules/logbook/logactivity.html
apps/creorga/modules/logbook/logactivity_basic.html
apps/creorga/modules/logbook/logchild.html
apps/creorga/modules/logbook/logcominterne.html
apps/creorga/modules/logbook/logcominterne_basic.html
apps/creorga/modules/presences/dailypresences.html
apps/creorga/modules/presences/js/dailypresences.js
apps/creorga/modules/presences/js/weeklypresences.js
apps/creorga/modules/presences/weeklypresences.html
apps/creorga/modules/reports/dlg/dlgpdfviewer.xul
apps/creorga/modules/reports/js/print_child.js
apps/creorga/modules/reports/js/print_logchild.js
apps/creorga/modules/reports/js/print_multilist.js
apps/creorga/modules/reports/js/print_table.js
apps/creorga/modules/reports/print_book.html
apps/creorga/modules/reports/print_calendar.html
apps/creorga/modules/reports/print_child.html
apps/creorga/modules/reports/print_list.html
apps/creorga/modules/reports/print_logchild.html
apps/creorga/modules/reports/print_multilist.html
apps/creorga/modules/reports/print_table.html
apps/creorga/modules/support/multisite.html
apps/creorga/modules/support/update.html
apps/hourtrax/index.html
apps/hourtrax/js/app.js
apps/hourtrax/modules/calendar/calactivity.html
apps/hourtrax/modules/calendar/calvacancy.html
apps/hourtrax/modules/calendar/js/calactivity.js
apps/hourtrax/modules/calendar/js/calvacancy.js
apps/hourtrax/modules/staff/coworker.html
apps/hourtrax/modules/staff/coworker_basic.html
apps/hourtrax/modules/staff/js/coworker.js
apps/hourtrax/modules/staff/js/coworker_basic.js
apps/hourtrax/modules/staff/js/staff.js
apps/hourtrax/modules/staff/js/staff_basic.js
apps/hourtrax/modules/staff/staff.html
apps/hourtrax/modules/staff/staff_basic.html
apps/invoicejournal_co/modules/bilan/accountingyear.html
apps/invoicejournal_co/modules/bilan/js/accountingyear.js
apps/invoicejournal_co/modules/bychild/accountingchild.html
apps/invoicejournal_co/modules/checkservice/checkservice.html
apps/invoicejournal_co/modules/monthly/accounting.html
apps/invoicejournal_co/modules/monthly/js/accounting.js
apps/invoicejournal_co/modules/openinvoices/accountingopeninvoice.html
data/auth/kilian.auth.json
data/db/lechatpotte.sqlite [new file with mode: 0644]
data/db/underatert.sqlite [new file with mode: 0644]
data/user/kilian.childs.json [new file with mode: 0644]
data/user/kilian.dailypresences.json [new file with mode: 0644]
data/user/kilian.pageconfig.childs.json [new file with mode: 0644]
data/user/kilian.pageconfig.weeklypresences.json [new file with mode: 0644]
data/user/kilian.service.json [new file with mode: 0644]
data/user/kilian.weeklypresences.json [new file with mode: 0644]

diff --git a/api/lib/JSON/PP.pm b/api/lib/JSON/PP.pm
new file mode 100644 (file)
index 0000000..714c848
--- /dev/null
@@ -0,0 +1,2853 @@
+package JSON::PP;
+
+# JSON-2.0
+
+use 5.005;
+use strict;
+
+use Exporter ();
+BEGIN { @JSON::PP::ISA = ('Exporter') }
+
+use overload ();
+use JSON::PP::Boolean;
+
+use Carp ();
+#use Devel::Peek;
+
+$JSON::PP::VERSION = '2.97001';
+
+@JSON::PP::EXPORT = qw(encode_json decode_json from_json to_json);
+
+# instead of hash-access, i tried index-access for speed.
+# but this method is not faster than what i expected. so it will be changed.
+
+use constant P_ASCII                => 0;
+use constant P_LATIN1               => 1;
+use constant P_UTF8                 => 2;
+use constant P_INDENT               => 3;
+use constant P_CANONICAL            => 4;
+use constant P_SPACE_BEFORE         => 5;
+use constant P_SPACE_AFTER          => 6;
+use constant P_ALLOW_NONREF         => 7;
+use constant P_SHRINK               => 8;
+use constant P_ALLOW_BLESSED        => 9;
+use constant P_CONVERT_BLESSED      => 10;
+use constant P_RELAXED              => 11;
+
+use constant P_LOOSE                => 12;
+use constant P_ALLOW_BIGNUM         => 13;
+use constant P_ALLOW_BAREKEY        => 14;
+use constant P_ALLOW_SINGLEQUOTE    => 15;
+use constant P_ESCAPE_SLASH         => 16;
+use constant P_AS_NONBLESSED        => 17;
+
+use constant P_ALLOW_UNKNOWN        => 18;
+
+use constant OLD_PERL => $] < 5.008 ? 1 : 0;
+use constant USE_B => 0;
+
+BEGIN {
+if (USE_B) {
+    require B;
+}
+}
+
+BEGIN {
+    my @xs_compati_bit_properties = qw(
+            latin1 ascii utf8 indent canonical space_before space_after allow_nonref shrink
+            allow_blessed convert_blessed relaxed allow_unknown
+    );
+    my @pp_bit_properties = qw(
+            allow_singlequote allow_bignum loose
+            allow_barekey escape_slash as_nonblessed
+    );
+
+    # Perl version check, Unicode handling is enabled?
+    # Helper module sets @JSON::PP::_properties.
+    if ( OLD_PERL ) {
+        my $helper = $] >= 5.006 ? 'JSON::PP::Compat5006' : 'JSON::PP::Compat5005';
+        eval qq| require $helper |;
+        if ($@) { Carp::croak $@; }
+    }
+
+    for my $name (@xs_compati_bit_properties, @pp_bit_properties) {
+        my $property_id = 'P_' . uc($name);
+
+        eval qq/
+            sub $name {
+                my \$enable = defined \$_[1] ? \$_[1] : 1;
+
+                if (\$enable) {
+                    \$_[0]->{PROPS}->[$property_id] = 1;
+                }
+                else {
+                    \$_[0]->{PROPS}->[$property_id] = 0;
+                }
+
+                \$_[0];
+            }
+
+            sub get_$name {
+                \$_[0]->{PROPS}->[$property_id] ? 1 : '';
+            }
+        /;
+    }
+
+}
+
+
+
+# Functions
+
+my $JSON; # cache
+
+sub encode_json ($) { # encode
+    ($JSON ||= __PACKAGE__->new->utf8)->encode(@_);
+}
+
+
+sub decode_json { # decode
+    ($JSON ||= __PACKAGE__->new->utf8)->decode(@_);
+}
+
+# Obsoleted
+
+sub to_json($) {
+   Carp::croak ("JSON::PP::to_json has been renamed to encode_json.");
+}
+
+
+sub from_json($) {
+   Carp::croak ("JSON::PP::from_json has been renamed to decode_json.");
+}
+
+
+# Methods
+
+sub new {
+    my $class = shift;
+    my $self  = {
+        max_depth   => 512,
+        max_size    => 0,
+        indent_length => 3,
+    };
+
+    bless $self, $class;
+}
+
+
+sub encode {
+    return $_[0]->PP_encode_json($_[1]);
+}
+
+
+sub decode {
+    return $_[0]->PP_decode_json($_[1], 0x00000000);
+}
+
+
+sub decode_prefix {
+    return $_[0]->PP_decode_json($_[1], 0x00000001);
+}
+
+
+# accessor
+
+
+# pretty printing
+
+sub pretty {
+    my ($self, $v) = @_;
+    my $enable = defined $v ? $v : 1;
+
+    if ($enable) { # indent_length(3) for JSON::XS compatibility
+        $self->indent(1)->space_before(1)->space_after(1);
+    }
+    else {
+        $self->indent(0)->space_before(0)->space_after(0);
+    }
+
+    $self;
+}
+
+# etc
+
+sub max_depth {
+    my $max  = defined $_[1] ? $_[1] : 0x80000000;
+    $_[0]->{max_depth} = $max;
+    $_[0];
+}
+
+
+sub get_max_depth { $_[0]->{max_depth}; }
+
+
+sub max_size {
+    my $max  = defined $_[1] ? $_[1] : 0;
+    $_[0]->{max_size} = $max;
+    $_[0];
+}
+
+
+sub get_max_size { $_[0]->{max_size}; }
+
+
+sub filter_json_object {
+    if (defined $_[1] and ref $_[1] eq 'CODE') {
+        $_[0]->{cb_object} = $_[1];
+    } else {
+        delete $_[0]->{cb_object};
+    }
+    $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
+    $_[0];
+}
+
+sub filter_json_single_key_object {
+    if (@_ == 1 or @_ > 3) {
+        Carp::croak("Usage: JSON::PP::filter_json_single_key_object(self, key, callback = undef)");
+    }
+    if (defined $_[2] and ref $_[2] eq 'CODE') {
+        $_[0]->{cb_sk_object}->{$_[1]} = $_[2];
+    } else {
+        delete $_[0]->{cb_sk_object}->{$_[1]};
+        delete $_[0]->{cb_sk_object} unless %{$_[0]->{cb_sk_object} || {}};
+    }
+    $_[0]->{F_HOOK} = ($_[0]->{cb_object} or $_[0]->{cb_sk_object}) ? 1 : 0;
+    $_[0];
+}
+
+sub indent_length {
+    if (!defined $_[1] or $_[1] > 15 or $_[1] < 0) {
+        Carp::carp "The acceptable range of indent_length() is 0 to 15.";
+    }
+    else {
+        $_[0]->{indent_length} = $_[1];
+    }
+    $_[0];
+}
+
+sub get_indent_length {
+    $_[0]->{indent_length};
+}
+
+sub sort_by {
+    $_[0]->{sort_by} = defined $_[1] ? $_[1] : 1;
+    $_[0];
+}
+
+sub allow_bigint {
+    Carp::carp("allow_bigint() is obsoleted. use allow_bignum() instead.");
+    $_[0]->allow_bignum;
+}
+
+###############################
+
+###
+### Perl => JSON
+###
+
+
+{ # Convert
+
+    my $max_depth;
+    my $indent;
+    my $ascii;
+    my $latin1;
+    my $utf8;
+    my $space_before;
+    my $space_after;
+    my $canonical;
+    my $allow_blessed;
+    my $convert_blessed;
+
+    my $indent_length;
+    my $escape_slash;
+    my $bignum;
+    my $as_nonblessed;
+
+    my $depth;
+    my $indent_count;
+    my $keysort;
+
+
+    sub PP_encode_json {
+        my $self = shift;
+        my $obj  = shift;
+
+        $indent_count = 0;
+        $depth        = 0;
+
+        my $props = $self->{PROPS};
+
+        ($ascii, $latin1, $utf8, $indent, $canonical, $space_before, $space_after, $allow_blessed,
+            $convert_blessed, $escape_slash, $bignum, $as_nonblessed)
+         = @{$props}[P_ASCII .. P_SPACE_AFTER, P_ALLOW_BLESSED, P_CONVERT_BLESSED,
+                    P_ESCAPE_SLASH, P_ALLOW_BIGNUM, P_AS_NONBLESSED];
+
+        ($max_depth, $indent_length) = @{$self}{qw/max_depth indent_length/};
+
+        $keysort = $canonical ? sub { $a cmp $b } : undef;
+
+        if ($self->{sort_by}) {
+            $keysort = ref($self->{sort_by}) eq 'CODE' ? $self->{sort_by}
+                     : $self->{sort_by} =~ /\D+/       ? $self->{sort_by}
+                     : sub { $a cmp $b };
+        }
+
+        encode_error("hash- or arrayref expected (not a simple scalar, use allow_nonref to allow this)")
+             if(!ref $obj and !$props->[ P_ALLOW_NONREF ]);
+
+        my $str  = $self->object_to_json($obj);
+
+        $str .= "\n" if ( $indent ); # JSON::XS 2.26 compatible
+
+        unless ($ascii or $latin1 or $utf8) {
+            utf8::upgrade($str);
+        }
+
+        if ($props->[ P_SHRINK ]) {
+            utf8::downgrade($str, 1);
+        }
+
+        return $str;
+    }
+
+
+    sub object_to_json {
+        my ($self, $obj) = @_;
+        my $type = ref($obj);
+
+        if($type eq 'HASH'){
+            return $self->hash_to_json($obj);
+        }
+        elsif($type eq 'ARRAY'){
+            return $self->array_to_json($obj);
+        }
+        elsif ($type) { # blessed object?
+            if (blessed($obj)) {
+
+                return $self->value_to_json($obj) if ( $obj->isa('JSON::PP::Boolean') );
+
+                if ( $convert_blessed and $obj->can('TO_JSON') ) {
+                    my $result = $obj->TO_JSON();
+                    if ( defined $result and ref( $result ) ) {
+                        if ( refaddr( $obj ) eq refaddr( $result ) ) {
+                            encode_error( sprintf(
+                                "%s::TO_JSON method returned same object as was passed instead of a new one",
+                                ref $obj
+                            ) );
+                        }
+                    }
+
+                    return $self->object_to_json( $result );
+                }
+
+                return "$obj" if ( $bignum and _is_bignum($obj) );
+
+                if ($allow_blessed) {
+                    return $self->blessed_to_json($obj) if ($as_nonblessed); # will be removed.
+                    return 'null';
+                }
+                encode_error( sprintf("encountered object '%s', but neither allow_blessed "
+                    . "nor convert_blessed settings are enabled", $obj)
+                );
+            }
+            else {
+                return $self->value_to_json($obj);
+            }
+        }
+        else{
+            return $self->value_to_json($obj);
+        }
+    }
+
+
+    sub hash_to_json {
+        my ($self, $obj) = @_;
+        my @res;
+
+        encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
+                                         if (++$depth > $max_depth);
+
+        my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
+        my $del = ($space_before ? ' ' : '') . ':' . ($space_after ? ' ' : '');
+
+        for my $k ( _sort( $obj ) ) {
+            if ( OLD_PERL ) { utf8::decode($k) } # key for Perl 5.6 / be optimized
+            push @res, $self->string_to_json( $k )
+                          .  $del
+                          . ( ref $obj->{$k} ? $self->object_to_json( $obj->{$k} ) : $self->value_to_json( $obj->{$k} ) );
+        }
+
+        --$depth;
+        $self->_down_indent() if ($indent);
+
+        return '{}' unless @res;
+        return '{' . $pre . join( ",$pre", @res ) . $post . '}';
+    }
+
+
+    sub array_to_json {
+        my ($self, $obj) = @_;
+        my @res;
+
+        encode_error("json text or perl structure exceeds maximum nesting level (max_depth set too low?)")
+                                         if (++$depth > $max_depth);
+
+        my ($pre, $post) = $indent ? $self->_up_indent() : ('', '');
+
+        for my $v (@$obj){
+            push @res, ref($v) ? $self->object_to_json($v) : $self->value_to_json($v);
+        }
+
+        --$depth;
+        $self->_down_indent() if ($indent);
+
+        return '[]' unless @res;
+        return '[' . $pre . join( ",$pre", @res ) . $post . ']';
+    }
+
+    sub _looks_like_number {
+        my $value = shift;
+        if (USE_B) {
+            my $b_obj = B::svref_2object(\$value);
+            my $flags = $b_obj->FLAGS;
+            return 1 if $flags & ( B::SVp_IOK() | B::SVp_NOK() ) and !( $flags & B::SVp_POK() );
+            return;
+        } else {
+            no warnings 'numeric';
+            # if the utf8 flag is on, it almost certainly started as a string
+            return if utf8::is_utf8($value);
+            # detect numbers
+            # string & "" -> ""
+            # number & "" -> 0 (with warning)
+            # nan and inf can detect as numbers, so check with * 0
+            return unless length((my $dummy = "") & $value);
+            return unless 0 + $value eq $value;
+            return 1 if $value * 0 == 0;
+            return -1; # inf/nan
+        }
+    }
+
+    sub value_to_json {
+        my ($self, $value) = @_;
+
+        return 'null' if(!defined $value);
+
+        my $type = ref($value);
+
+        if (!$type) {
+            if (_looks_like_number($value)) {
+                return $value;
+            }
+            return $self->string_to_json($value);
+        }
+        elsif( blessed($value) and  $value->isa('JSON::PP::Boolean') ){
+            return $$value == 1 ? 'true' : 'false';
+        }
+        else {
+            if ((overload::StrVal($value) =~ /=(\w+)/)[0]) {
+                return $self->value_to_json("$value");
+            }
+
+            if ($type eq 'SCALAR' and defined $$value) {
+                return   $$value eq '1' ? 'true'
+                       : $$value eq '0' ? 'false'
+                       : $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ? 'null'
+                       : encode_error("cannot encode reference to scalar");
+            }
+
+            if ( $self->{PROPS}->[ P_ALLOW_UNKNOWN ] ) {
+                return 'null';
+            }
+            else {
+                if ( $type eq 'SCALAR' or $type eq 'REF' ) {
+                    encode_error("cannot encode reference to scalar");
+                }
+                else {
+                    encode_error("encountered $value, but JSON can only represent references to arrays or hashes");
+                }
+            }
+
+        }
+    }
+
+
+    my %esc = (
+        "\n" => '\n',
+        "\r" => '\r',
+        "\t" => '\t',
+        "\f" => '\f',
+        "\b" => '\b',
+        "\"" => '\"',
+        "\\" => '\\\\',
+        "\'" => '\\\'',
+    );
+
+
+    sub string_to_json {
+        my ($self, $arg) = @_;
+
+        $arg =~ s/([\x22\x5c\n\r\t\f\b])/$esc{$1}/g;
+        $arg =~ s/\//\\\//g if ($escape_slash);
+        $arg =~ s/([\x00-\x08\x0b\x0e-\x1f])/'\\u00' . unpack('H2', $1)/eg;
+
+        if ($ascii) {
+            $arg = JSON_PP_encode_ascii($arg);
+        }
+
+        if ($latin1) {
+            $arg = JSON_PP_encode_latin1($arg);
+        }
+
+        if ($utf8) {
+            utf8::encode($arg);
+        }
+
+        return '"' . $arg . '"';
+    }
+
+
+    sub blessed_to_json {
+        my $reftype = reftype($_[1]) || '';
+        if ($reftype eq 'HASH') {
+            return $_[0]->hash_to_json($_[1]);
+        }
+        elsif ($reftype eq 'ARRAY') {
+            return $_[0]->array_to_json($_[1]);
+        }
+        else {
+            return 'null';
+        }
+    }
+
+
+    sub encode_error {
+        my $error  = shift;
+        Carp::croak "$error";
+    }
+
+
+    sub _sort {
+        defined $keysort ? (sort $keysort (keys %{$_[0]})) : keys %{$_[0]};
+    }
+
+
+    sub _up_indent {
+        my $self  = shift;
+        my $space = ' ' x $indent_length;
+
+        my ($pre,$post) = ('','');
+
+        $post = "\n" . $space x $indent_count;
+
+        $indent_count++;
+
+        $pre = "\n" . $space x $indent_count;
+
+        return ($pre,$post);
+    }
+
+
+    sub _down_indent { $indent_count--; }
+
+
+    sub PP_encode_box {
+        {
+            depth        => $depth,
+            indent_count => $indent_count,
+        };
+    }
+
+} # Convert
+
+
+sub _encode_ascii {
+    join('',
+        map {
+            $_ <= 127 ?
+                chr($_) :
+            $_ <= 65535 ?
+                sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
+        } unpack('U*', $_[0])
+    );
+}
+
+
+sub _encode_latin1 {
+    join('',
+        map {
+            $_ <= 255 ?
+                chr($_) :
+            $_ <= 65535 ?
+                sprintf('\u%04x', $_) : sprintf('\u%x\u%x', _encode_surrogates($_));
+        } unpack('U*', $_[0])
+    );
+}
+
+
+sub _encode_surrogates { # from perlunicode
+    my $uni = $_[0] - 0x10000;
+    return ($uni / 0x400 + 0xD800, $uni % 0x400 + 0xDC00);
+}
+
+
+sub _is_bignum {
+    $_[0]->isa('Math::BigInt') or $_[0]->isa('Math::BigFloat');
+}
+
+
+
+#
+# JSON => Perl
+#
+
+my $max_intsize;
+
+BEGIN {
+    my $checkint = 1111;
+    for my $d (5..64) {
+        $checkint .= 1;
+        my $int   = eval qq| $checkint |;
+        if ($int =~ /[eE]/) {
+            $max_intsize = $d - 1;
+            last;
+        }
+    }
+}
+
+{ # PARSE 
+
+    my %escapes = ( #  by Jeremy Muhlich <jmuhlich [at] bitflood.org>
+        b    => "\x8",
+        t    => "\x9",
+        n    => "\xA",
+        f    => "\xC",
+        r    => "\xD",
+        '\\' => '\\',
+        '"'  => '"',
+        '/'  => '/',
+    );
+
+    my $text; # json data
+    my $at;   # offset
+    my $ch;   # first character
+    my $len;  # text length (changed according to UTF8 or NON UTF8)
+    # INTERNAL
+    my $depth;          # nest counter
+    my $encoding;       # json text encoding
+    my $is_valid_utf8;  # temp variable
+    my $utf8_len;       # utf8 byte length
+    # FLAGS
+    my $utf8;           # must be utf8
+    my $max_depth;      # max nest number of objects and arrays
+    my $max_size;
+    my $relaxed;
+    my $cb_object;
+    my $cb_sk_object;
+
+    my $F_HOOK;
+
+    my $allow_bignum;   # using Math::BigInt/BigFloat
+    my $singlequote;    # loosely quoting
+    my $loose;          # 
+    my $allow_barekey;  # bareKey
+
+    sub _detect_utf_encoding {
+        my $text = shift;
+        my @octets = unpack('C4', $text);
+        return 'unknown' unless defined $octets[3];
+        return ( $octets[0] and  $octets[1]) ? 'UTF-8'
+             : (!$octets[0] and  $octets[1]) ? 'UTF-16BE'
+             : (!$octets[0] and !$octets[1]) ? 'UTF-32BE'
+             : ( $octets[2]                ) ? 'UTF-16LE'
+             : (!$octets[2]                ) ? 'UTF-32LE'
+             : 'unknown';
+    }
+
+    sub PP_decode_json {
+        my ($self, $want_offset);
+
+        ($self, $text, $want_offset) = @_;
+
+        ($at, $ch, $depth) = (0, '', 0);
+
+        if ( !defined $text or ref $text ) {
+            decode_error("malformed JSON string, neither array, object, number, string or atom");
+        }
+
+        my $props = $self->{PROPS};
+
+        ($utf8, $relaxed, $loose, $allow_bignum, $allow_barekey, $singlequote)
+            = @{$props}[P_UTF8, P_RELAXED, P_LOOSE .. P_ALLOW_SINGLEQUOTE];
+
+        if ( $utf8 ) {
+            $encoding = _detect_utf_encoding($text);
+            if ($encoding ne 'UTF-8' and $encoding ne 'unknown') {
+                require Encode;
+                Encode::from_to($text, $encoding, 'utf-8');
+            } else {
+                utf8::downgrade( $text, 1 ) or Carp::croak("Wide character in subroutine entry");
+            }
+        }
+        else {
+            utf8::upgrade( $text );
+            utf8::encode( $text );
+        }
+
+        $len = length $text;
+
+        ($max_depth, $max_size, $cb_object, $cb_sk_object, $F_HOOK)
+             = @{$self}{qw/max_depth  max_size cb_object cb_sk_object F_HOOK/};
+
+        if ($max_size > 1) {
+            use bytes;
+            my $bytes = length $text;
+            decode_error(
+                sprintf("attempted decode of JSON text of %s bytes size, but max_size is set to %s"
+                    , $bytes, $max_size), 1
+            ) if ($bytes > $max_size);
+        }
+
+        white(); # remove head white space
+
+        decode_error("malformed JSON string, neither array, object, number, string or atom") unless defined $ch; # Is there a first character for JSON structure?
+
+        my $result = value();
+
+        if ( !$props->[ P_ALLOW_NONREF ] and !ref $result ) {
+                decode_error(
+                'JSON text must be an object or array (but found number, string, true, false or null,'
+                       . ' use allow_nonref to allow this)', 1);
+        }
+
+        Carp::croak('something wrong.') if $len < $at; # we won't arrive here.
+
+        my $consumed = defined $ch ? $at - 1 : $at; # consumed JSON text length
+
+        white(); # remove tail white space
+
+        return ( $result, $consumed ) if $want_offset; # all right if decode_prefix
+
+        decode_error("garbage after JSON object") if defined $ch;
+
+        $result;
+    }
+
+
+    sub next_chr {
+        return $ch = undef if($at >= $len);
+        $ch = substr($text, $at++, 1);
+    }
+
+
+    sub value {
+        white();
+        return          if(!defined $ch);
+        return object() if($ch eq '{');
+        return array()  if($ch eq '[');
+        return string() if($ch eq '"' or ($singlequote and $ch eq "'"));
+        return number() if($ch =~ /[0-9]/ or $ch eq '-');
+        return word();
+    }
+
+    sub string {
+        my $utf16;
+        my $is_utf8;
+
+        ($is_valid_utf8, $utf8_len) = ('', 0);
+
+        my $s = ''; # basically UTF8 flag on
+
+        if($ch eq '"' or ($singlequote and $ch eq "'")){
+            my $boundChar = $ch;
+
+            OUTER: while( defined(next_chr()) ){
+
+                if($ch eq $boundChar){
+                    next_chr();
+
+                    if ($utf16) {
+                        decode_error("missing low surrogate character in surrogate pair");
+                    }
+
+                    utf8::decode($s) if($is_utf8);
+
+                    return $s;
+                }
+                elsif($ch eq '\\'){
+                    next_chr();
+                    if(exists $escapes{$ch}){
+                        $s .= $escapes{$ch};
+                    }
+                    elsif($ch eq 'u'){ # UNICODE handling
+                        my $u = '';
+
+                        for(1..4){
+                            $ch = next_chr();
+                            last OUTER if($ch !~ /[0-9a-fA-F]/);
+                            $u .= $ch;
+                        }
+
+                        # U+D800 - U+DBFF
+                        if ($u =~ /^[dD][89abAB][0-9a-fA-F]{2}/) { # UTF-16 high surrogate?
+                            $utf16 = $u;
+                        }
+                        # U+DC00 - U+DFFF
+                        elsif ($u =~ /^[dD][c-fC-F][0-9a-fA-F]{2}/) { # UTF-16 low surrogate?
+                            unless (defined $utf16) {
+                                decode_error("missing high surrogate character in surrogate pair");
+                            }
+                            $is_utf8 = 1;
+                            $s .= JSON_PP_decode_surrogates($utf16, $u) || next;
+                            $utf16 = undef;
+                        }
+                        else {
+                            if (defined $utf16) {
+                                decode_error("surrogate pair expected");
+                            }
+
+                            if ( ( my $hex = hex( $u ) ) > 127 ) {
+                                $is_utf8 = 1;
+                                $s .= JSON_PP_decode_unicode($u) || next;
+                            }
+                            else {
+                                $s .= chr $hex;
+                            }
+                        }
+
+                    }
+                    else{
+                        unless ($loose) {
+                            $at -= 2;
+                            decode_error('illegal backslash escape sequence in string');
+                        }
+                        $s .= $ch;
+                    }
+                }
+                else{
+
+                    if ( ord $ch  > 127 ) {
+                        unless( $ch = is_valid_utf8($ch) ) {
+                            $at -= 1;
+                            decode_error("malformed UTF-8 character in JSON string");
+                        }
+                        else {
+                            $at += $utf8_len - 1;
+                        }
+
+                        $is_utf8 = 1;
+                    }
+
+                    if (!$loose) {
+                        if ($ch =~ /[\x00-\x1f\x22\x5c]/)  { # '/' ok
+                            $at--;
+                            decode_error('invalid character encountered while parsing JSON string');
+                        }
+                    }
+
+                    $s .= $ch;
+                }
+            }
+        }
+
+        decode_error("unexpected end of string while parsing JSON string");
+    }
+
+
+    sub white {
+        while( defined $ch  ){
+            if($ch eq '' or $ch =~ /\A[ \t\r\n]\z/){
+                next_chr();
+            }
+            elsif($relaxed and $ch eq '/'){
+                next_chr();
+                if(defined $ch and $ch eq '/'){
+                    1 while(defined(next_chr()) and $ch ne "\n" and $ch ne "\r");
+                }
+                elsif(defined $ch and $ch eq '*'){
+                    next_chr();
+                    while(1){
+                        if(defined $ch){
+                            if($ch eq '*'){
+                                if(defined(next_chr()) and $ch eq '/'){
+                                    next_chr();
+                                    last;
+                                }
+                            }
+                            else{
+                                next_chr();
+                            }
+                        }
+                        else{
+                            decode_error("Unterminated comment");
+                        }
+                    }
+                    next;
+                }
+                else{
+                    $at--;
+                    decode_error("malformed JSON string, neither array, object, number, string or atom");
+                }
+            }
+            else{
+                if ($relaxed and $ch eq '#') { # correctly?
+                    pos($text) = $at;
+                    $text =~ /\G([^\n]*(?:\r\n|\r|\n|$))/g;
+                    $at = pos($text);
+                    next_chr;
+                    next;
+                }
+
+                last;
+            }
+        }
+    }
+
+
+    sub array {
+        my $a  = $_[0] || []; # you can use this code to use another array ref object.
+
+        decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
+                                                    if (++$depth > $max_depth);
+
+        next_chr();
+        white();
+
+        if(defined $ch and $ch eq ']'){
+            --$depth;
+            next_chr();
+            return $a;
+        }
+        else {
+            while(defined($ch)){
+                push @$a, value();
+
+                white();
+
+                if (!defined $ch) {
+                    last;
+                }
+
+                if($ch eq ']'){
+                    --$depth;
+                    next_chr();
+                    return $a;
+                }
+
+                if($ch ne ','){
+                    last;
+                }
+
+                next_chr();
+                white();
+
+                if ($relaxed and $ch eq ']') {
+                    --$depth;
+                    next_chr();
+                    return $a;
+                }
+
+            }
+        }
+
+        $at-- if defined $ch and $ch ne '';
+        decode_error(", or ] expected while parsing array");
+    }
+
+
+    sub object {
+        my $o = $_[0] || {}; # you can use this code to use another hash ref object.
+        my $k;
+
+        decode_error('json text or perl structure exceeds maximum nesting level (max_depth set too low?)')
+                                                if (++$depth > $max_depth);
+        next_chr();
+        white();
+
+        if(defined $ch and $ch eq '}'){
+            --$depth;
+            next_chr();
+            if ($F_HOOK) {
+                return _json_object_hook($o);
+            }
+            return $o;
+        }
+        else {
+            while (defined $ch) {
+                $k = ($allow_barekey and $ch ne '"' and $ch ne "'") ? bareKey() : string();
+                white();
+
+                if(!defined $ch or $ch ne ':'){
+                    $at--;
+                    decode_error("':' expected");
+                }
+
+                next_chr();
+                $o->{$k} = value();
+                white();
+
+                last if (!defined $ch);
+
+                if($ch eq '}'){
+                    --$depth;
+                    next_chr();
+                    if ($F_HOOK) {
+                        return _json_object_hook($o);
+                    }
+                    return $o;
+                }
+
+                if($ch ne ','){
+                    last;
+                }
+
+                next_chr();
+                white();
+
+                if ($relaxed and $ch eq '}') {
+                    --$depth;
+                    next_chr();
+                    if ($F_HOOK) {
+                        return _json_object_hook($o);
+                    }
+                    return $o;
+                }
+
+            }
+
+        }
+
+        $at-- if defined $ch and $ch ne '';
+        decode_error(", or } expected while parsing object/hash");
+    }
+
+
+    sub bareKey { # doesn't strictly follow Standard ECMA-262 3rd Edition
+        my $key;
+        while($ch =~ /[^\x00-\x23\x25-\x2F\x3A-\x40\x5B-\x5E\x60\x7B-\x7F]/){
+            $key .= $ch;
+            next_chr();
+        }
+        return $key;
+    }
+
+
+    sub word {
+        my $word =  substr($text,$at-1,4);
+
+        if($word eq 'true'){
+            $at += 3;
+            next_chr;
+            return $JSON::PP::true;
+        }
+        elsif($word eq 'null'){
+            $at += 3;
+            next_chr;
+            return undef;
+        }
+        elsif($word eq 'fals'){
+            $at += 3;
+            if(substr($text,$at,1) eq 'e'){
+                $at++;
+                next_chr;
+                return $JSON::PP::false;
+            }
+        }
+
+        $at--; # for decode_error report
+
+        decode_error("'null' expected")  if ($word =~ /^n/);
+        decode_error("'true' expected")  if ($word =~ /^t/);
+        decode_error("'false' expected") if ($word =~ /^f/);
+        decode_error("malformed JSON string, neither array, object, number, string or atom");
+    }
+
+
+    sub number {
+        my $n    = '';
+        my $v;
+        my $is_dec;
+        my $is_exp;
+
+        if($ch eq '-'){
+            $n = '-';
+            next_chr;
+            if (!defined $ch or $ch !~ /\d/) {
+                decode_error("malformed number (no digits after initial minus)");
+            }
+        }
+
+        # According to RFC4627, hex or oct digits are invalid.
+        if($ch eq '0'){
+            my $peek = substr($text,$at,1);
+            if($peek =~ /^[0-9a-dfA-DF]/){ # e may be valid (exponential)
+                decode_error("malformed number (leading zero must not be followed by another digit)");
+            }
+            $n .= $ch;
+            next_chr;
+        }
+
+        while(defined $ch and $ch =~ /\d/){
+            $n .= $ch;
+            next_chr;
+        }
+
+        if(defined $ch and $ch eq '.'){
+            $n .= '.';
+            $is_dec = 1;
+
+            next_chr;
+            if (!defined $ch or $ch !~ /\d/) {
+                decode_error("malformed number (no digits after decimal point)");
+            }
+            else {
+                $n .= $ch;
+            }
+
+            while(defined(next_chr) and $ch =~ /\d/){
+                $n .= $ch;
+            }
+        }
+
+        if(defined $ch and ($ch eq 'e' or $ch eq 'E')){
+            $n .= $ch;
+            $is_exp = 1;
+            next_chr;
+
+            if(defined($ch) and ($ch eq '+' or $ch eq '-')){
+                $n .= $ch;
+                next_chr;
+                if (!defined $ch or $ch =~ /\D/) {
+                    decode_error("malformed number (no digits after exp sign)");
+                }
+                $n .= $ch;
+            }
+            elsif(defined($ch) and $ch =~ /\d/){
+                $n .= $ch;
+            }
+            else {
+                decode_error("malformed number (no digits after exp sign)");
+            }
+
+            while(defined(next_chr) and $ch =~ /\d/){
+                $n .= $ch;
+            }
+
+        }
+
+        $v .= $n;
+
+        if ($is_dec or $is_exp) {
+            if ($allow_bignum) {
+                require Math::BigFloat;
+                return Math::BigFloat->new($v);
+            }
+        } else {
+            if (length $v > $max_intsize) {
+                if ($allow_bignum) { # from Adam Sussman
+                    require Math::BigInt;
+                    return Math::BigInt->new($v);
+                }
+                else {
+                    return "$v";
+                }
+            }
+        }
+
+        return $is_dec ? $v/1.0 : 0+$v;
+    }
+
+
+    sub is_valid_utf8 {
+
+        $utf8_len = $_[0] =~ /[\x00-\x7F]/  ? 1
+                  : $_[0] =~ /[\xC2-\xDF]/  ? 2
+                  : $_[0] =~ /[\xE0-\xEF]/  ? 3
+                  : $_[0] =~ /[\xF0-\xF4]/  ? 4
+                  : 0
+                  ;
+
+        return unless $utf8_len;
+
+        my $is_valid_utf8 = substr($text, $at - 1, $utf8_len);
+
+        return ( $is_valid_utf8 =~ /^(?:
+             [\x00-\x7F]
+            |[\xC2-\xDF][\x80-\xBF]
+            |[\xE0][\xA0-\xBF][\x80-\xBF]
+            |[\xE1-\xEC][\x80-\xBF][\x80-\xBF]
+            |[\xED][\x80-\x9F][\x80-\xBF]
+            |[\xEE-\xEF][\x80-\xBF][\x80-\xBF]
+            |[\xF0][\x90-\xBF][\x80-\xBF][\x80-\xBF]
+            |[\xF1-\xF3][\x80-\xBF][\x80-\xBF][\x80-\xBF]
+            |[\xF4][\x80-\x8F][\x80-\xBF][\x80-\xBF]
+        )$/x )  ? $is_valid_utf8 : '';
+    }
+
+
+    sub decode_error {
+        my $error  = shift;
+        my $no_rep = shift;
+        my $str    = defined $text ? substr($text, $at) : '';
+        my $mess   = '';
+        my $type   = 'U*';
+
+        if ( OLD_PERL ) {
+            my $type   =  $] <  5.006           ? 'C*'
+                        : utf8::is_utf8( $str ) ? 'U*' # 5.6
+                        : 'C*'
+                        ;
+        }
+
+        for my $c ( unpack( $type, $str ) ) { # emulate pv_uni_display() ?
+            $mess .=  $c == 0x07 ? '\a'
+                    : $c == 0x09 ? '\t'
+                    : $c == 0x0a ? '\n'
+                    : $c == 0x0d ? '\r'
+                    : $c == 0x0c ? '\f'
+                    : $c <  0x20 ? sprintf('\x{%x}', $c)
+                    : $c == 0x5c ? '\\\\'
+                    : $c <  0x80 ? chr($c)
+                    : sprintf('\x{%x}', $c)
+                    ;
+            if ( length $mess >= 20 ) {
+                $mess .= '...';
+                last;
+            }
+        }
+
+        unless ( length $mess ) {
+            $mess = '(end of string)';
+        }
+
+        Carp::croak (
+            $no_rep ? "$error" : "$error, at character offset $at (before \"$mess\")"
+        );
+
+    }
+
+
+    sub _json_object_hook {
+        my $o    = $_[0];
+        my @ks = keys %{$o};
+
+        if ( $cb_sk_object and @ks == 1 and exists $cb_sk_object->{ $ks[0] } and ref $cb_sk_object->{ $ks[0] } ) {
+            my @val = $cb_sk_object->{ $ks[0] }->( $o->{$ks[0]} );
+            if (@val == 1) {
+                return $val[0];
+            }
+        }
+
+        my @val = $cb_object->($o) if ($cb_object);
+        if (@val == 0 or @val > 1) {
+            return $o;
+        }
+        else {
+            return $val[0];
+        }
+    }
+
+
+    sub PP_decode_box {
+        {
+            text    => $text,
+            at      => $at,
+            ch      => $ch,
+            len     => $len,
+            depth   => $depth,
+            encoding      => $encoding,
+            is_valid_utf8 => $is_valid_utf8,
+        };
+    }
+
+} # PARSE
+
+
+sub _decode_surrogates { # from perlunicode
+    my $uni = 0x10000 + (hex($_[0]) - 0xD800) * 0x400 + (hex($_[1]) - 0xDC00);
+    my $un  = pack('U*', $uni);
+    utf8::encode( $un );
+    return $un;
+}
+
+
+sub _decode_unicode {
+    my $un = pack('U', hex shift);
+    utf8::encode( $un );
+    return $un;
+}
+
+#
+# Setup for various Perl versions (the code from JSON::PP58)
+#
+
+BEGIN {
+
+    unless ( defined &utf8::is_utf8 ) {
+       require Encode;
+       *utf8::is_utf8 = *Encode::is_utf8;
+    }
+
+    if ( !OLD_PERL ) {
+        *JSON::PP::JSON_PP_encode_ascii      = \&_encode_ascii;
+        *JSON::PP::JSON_PP_encode_latin1     = \&_encode_latin1;
+        *JSON::PP::JSON_PP_decode_surrogates = \&_decode_surrogates;
+        *JSON::PP::JSON_PP_decode_unicode    = \&_decode_unicode;
+
+        if ($] < 5.008003) { # join() in 5.8.0 - 5.8.2 is broken.
+            package JSON::PP;
+            require subs;
+            subs->import('join');
+            eval q|
+                sub join {
+                    return '' if (@_ < 2);
+                    my $j   = shift;
+                    my $str = shift;
+                    for (@_) { $str .= $j . $_; }
+                    return $str;
+                }
+            |;
+        }
+    }
+
+
+    sub JSON::PP::incr_parse {
+        local $Carp::CarpLevel = 1;
+        ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_parse( @_ );
+    }
+
+
+    sub JSON::PP::incr_skip {
+        ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_skip;
+    }
+
+
+    sub JSON::PP::incr_reset {
+        ( $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new )->incr_reset;
+    }
+
+    eval q{
+        sub JSON::PP::incr_text : lvalue {
+            $_[0]->{_incr_parser} ||= JSON::PP::IncrParser->new;
+
+            if ( $_[0]->{_incr_parser}->{incr_pos} ) {
+                Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
+            }
+            $_[0]->{_incr_parser}->{incr_text};
+        }
+    } if ( $] >= 5.006 );
+
+} # Setup for various Perl versions (the code from JSON::PP58)
+
+
+###############################
+# Utilities
+#
+
+BEGIN {
+    eval 'require Scalar::Util';
+    unless($@){
+        *JSON::PP::blessed = \&Scalar::Util::blessed;
+        *JSON::PP::reftype = \&Scalar::Util::reftype;
+        *JSON::PP::refaddr = \&Scalar::Util::refaddr;
+    }
+    else{ # This code is from Scalar::Util.
+        # warn $@;
+        eval 'sub UNIVERSAL::a_sub_not_likely_to_be_here { ref($_[0]) }';
+        *JSON::PP::blessed = sub {
+            local($@, $SIG{__DIE__}, $SIG{__WARN__});
+            ref($_[0]) ? eval { $_[0]->a_sub_not_likely_to_be_here } : undef;
+        };
+        require B;
+        my %tmap = qw(
+            B::NULL   SCALAR
+            B::HV     HASH
+            B::AV     ARRAY
+            B::CV     CODE
+            B::IO     IO
+            B::GV     GLOB
+            B::REGEXP REGEXP
+        );
+        *JSON::PP::reftype = sub {
+            my $r = shift;
+
+            return undef unless length(ref($r));
+
+            my $t = ref(B::svref_2object($r));
+
+            return
+                exists $tmap{$t} ? $tmap{$t}
+              : length(ref($$r)) ? 'REF'
+              :                    'SCALAR';
+        };
+        *JSON::PP::refaddr = sub {
+          return undef unless length(ref($_[0]));
+
+          my $addr;
+          if(defined(my $pkg = blessed($_[0]))) {
+            $addr .= bless $_[0], 'Scalar::Util::Fake';
+            bless $_[0], $pkg;
+          }
+          else {
+            $addr .= $_[0]
+          }
+
+          $addr =~ /0x(\w+)/;
+          local $^W;
+          #no warnings 'portable';
+          hex($1);
+        }
+    }
+}
+
+
+# shamelessly copied and modified from JSON::XS code.
+
+$JSON::PP::true  = do { bless \(my $dummy = 1), "JSON::PP::Boolean" };
+$JSON::PP::false = do { bless \(my $dummy = 0), "JSON::PP::Boolean" };
+
+sub is_bool { blessed $_[0] and $_[0]->isa("JSON::PP::Boolean"); }
+
+sub true  { $JSON::PP::true  }
+sub false { $JSON::PP::false }
+sub null  { undef; }
+
+###############################
+
+package JSON::PP::IncrParser;
+
+use strict;
+
+use constant INCR_M_WS   => 0; # initial whitespace skipping
+use constant INCR_M_STR  => 1; # inside string
+use constant INCR_M_BS   => 2; # inside backslash
+use constant INCR_M_JSON => 3; # outside anything, count nesting
+use constant INCR_M_C0   => 4;
+use constant INCR_M_C1   => 5;
+
+$JSON::PP::IncrParser::VERSION = '1.01';
+
+sub new {
+    my ( $class ) = @_;
+
+    bless {
+        incr_nest    => 0,
+        incr_text    => undef,
+        incr_pos     => 0,
+        incr_mode    => 0,
+    }, $class;
+}
+
+
+sub incr_parse {
+    my ( $self, $coder, $text ) = @_;
+
+    $self->{incr_text} = '' unless ( defined $self->{incr_text} );
+
+    if ( defined $text ) {
+        if ( utf8::is_utf8( $text ) and !utf8::is_utf8( $self->{incr_text} ) ) {
+            utf8::upgrade( $self->{incr_text} ) ;
+            utf8::decode( $self->{incr_text} ) ;
+        }
+        $self->{incr_text} .= $text;
+    }
+
+    if ( defined wantarray ) {
+        my $max_size = $coder->get_max_size;
+        my $p = $self->{incr_pos};
+        my @ret;
+        {
+            do {
+                unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
+                    $self->_incr_parse( $coder );
+
+                    if ( $max_size and $self->{incr_pos} > $max_size ) {
+                        Carp::croak("attempted decode of JSON text of $self->{incr_pos} bytes size, but max_size is set to $max_size");
+                    }
+                    unless ( $self->{incr_nest} <= 0 and $self->{incr_mode} == INCR_M_JSON ) {
+                        # as an optimisation, do not accumulate white space in the incr buffer
+                        if ( $self->{incr_mode} == INCR_M_WS and $self->{incr_pos} ) {
+                            $self->{incr_pos} = 0;
+                            $self->{incr_text} = '';
+                        }
+                        last;
+                    }
+                }
+
+                my ($obj, $offset) = $coder->PP_decode_json( $self->{incr_text}, 0x00000001 );
+                push @ret, $obj;
+                use bytes;
+                $self->{incr_text} = substr( $self->{incr_text}, $offset || 0 );
+                $self->{incr_pos} = 0;
+                $self->{incr_nest} = 0;
+                $self->{incr_mode} = 0;
+                last unless wantarray;
+            } while ( wantarray );
+        }
+
+        if ( wantarray ) {
+            return @ret;
+        }
+        else { # in scalar context
+            return $ret[0] ? $ret[0] : undef;
+        }
+    }
+}
+
+
+sub _incr_parse {
+    my ($self, $coder) = @_;
+    my $text = $self->{incr_text};
+    my $len = length $text;
+    my $p = $self->{incr_pos};
+
+INCR_PARSE:
+    while ( $len > $p ) {
+        my $s = substr( $text, $p, 1 );
+        last INCR_PARSE unless defined $s;
+        my $mode = $self->{incr_mode};
+
+        if ( $mode == INCR_M_WS ) {
+            while ( $len > $p ) {
+                $s = substr( $text, $p, 1 );
+                last INCR_PARSE unless defined $s;
+                if ( ord($s) > 0x20 ) {
+                    if ( $s eq '#' ) {
+                        $self->{incr_mode} = INCR_M_C0;
+                        redo INCR_PARSE;
+                    } else {
+                        $self->{incr_mode} = INCR_M_JSON;
+                        redo INCR_PARSE;
+                    }
+                }
+                $p++;
+            }
+        } elsif ( $mode == INCR_M_BS ) {
+            $p++;
+            $self->{incr_mode} = INCR_M_STR;
+            redo INCR_PARSE;
+        } elsif ( $mode == INCR_M_C0 or $mode == INCR_M_C1 ) {
+            while ( $len > $p ) {
+                $s = substr( $text, $p, 1 );
+                last INCR_PARSE unless defined $s;
+                if ( $s eq "\n" ) {
+                    $self->{incr_mode} = $self->{incr_mode} == INCR_M_C0 ? INCR_M_WS : INCR_M_JSON;
+                    last;
+                }
+                $p++;
+            }
+            next;
+        } elsif ( $mode == INCR_M_STR ) {
+            while ( $len > $p ) {
+                $s = substr( $text, $p, 1 );
+                last INCR_PARSE unless defined $s;
+                if ( $s eq '"' ) {
+                    $p++;
+                    $self->{incr_mode} = INCR_M_JSON;
+
+                    last INCR_PARSE unless $self->{incr_nest};
+                    redo INCR_PARSE;
+                }
+                elsif ( $s eq '\\' ) {
+                    $p++;
+                    if ( !defined substr($text, $p, 1) ) {
+                        $self->{incr_mode} = INCR_M_BS;
+                        last INCR_PARSE;
+                    }
+                }
+                $p++;
+            }
+        } elsif ( $mode == INCR_M_JSON ) {
+            while ( $len > $p ) {
+                $s = substr( $text, $p++, 1 );
+                if ( $s eq "\x00" ) {
+                    $p--;
+                    last INCR_PARSE;
+                } elsif ( $s eq "\x09" or $s eq "\x0a" or $s eq "\x0d" or $s eq "\x20" ) {
+                    if ( !$self->{incr_nest} ) {
+                        $p--; # do not eat the whitespace, let the next round do it
+                        last INCR_PARSE;
+                    }
+                    next;
+                } elsif ( $s eq '"' ) {
+                    $self->{incr_mode} = INCR_M_STR;
+                    redo INCR_PARSE;
+                } elsif ( $s eq '[' or $s eq '{' ) {
+                    if ( ++$self->{incr_nest} > $coder->get_max_depth ) {
+                        Carp::croak('json text or perl structure exceeds maximum nesting level (max_depth set too low?)');
+                    }
+                    next;
+                } elsif ( $s eq ']' or $s eq '}' ) {
+                    if ( --$self->{incr_nest} <= 0 ) {
+                        last INCR_PARSE;
+                    }
+                } elsif ( $s eq '#' ) {
+                    $self->{incr_mode} = INCR_M_C1;
+                    redo INCR_PARSE;
+                }
+            }
+        }
+    }
+
+    $self->{incr_pos} = $p;
+    $self->{incr_parsing} = $p ? 1 : 0; # for backward compatibility
+}
+
+
+sub incr_text {
+    if ( $_[0]->{incr_pos} ) {
+        Carp::croak("incr_text cannot be called when the incremental parser already started parsing");
+    }
+    $_[0]->{incr_text};
+}
+
+
+sub incr_skip {
+    my $self  = shift;
+    $self->{incr_text} = substr( $self->{incr_text}, $self->{incr_pos} );
+    $self->{incr_pos}     = 0;
+    $self->{incr_mode}    = 0;
+    $self->{incr_nest}    = 0;
+}
+
+
+sub incr_reset {
+    my $self = shift;
+    $self->{incr_text}    = undef;
+    $self->{incr_pos}     = 0;
+    $self->{incr_mode}    = 0;
+    $self->{incr_nest}    = 0;
+}
+
+###############################
+
+
+1;
+__END__
+=pod
+
+=head1 NAME
+
+JSON::PP - JSON::XS compatible pure-Perl module.
+
+=head1 SYNOPSIS
+
+ use JSON::PP;
+
+ # exported functions, they croak on error
+ # and expect/generate UTF-8
+
+ $utf8_encoded_json_text = encode_json $perl_hash_or_arrayref;
+ $perl_hash_or_arrayref  = decode_json $utf8_encoded_json_text;
+
+ # OO-interface
+
+ $json = JSON::PP->new->ascii->pretty->allow_nonref;
+ $pretty_printed_json_text = $json->encode( $perl_scalar );
+ $perl_scalar = $json->decode( $json_text );
+ # Note that JSON version 2.0 and above will automatically use
+ # JSON::XS or JSON::PP, so you should be able to just:
+ use JSON;
+
+
+=head1 VERSION
+
+    2.97001
+
+=head1 DESCRIPTION
+
+JSON::PP is a pure perl JSON decoder/encoder (as of RFC4627, which
+we know is obsolete but we still stick to; see below for an option
+to support part of RFC7159), and (almost) compatible to much
+faster L<JSON::XS> written by Marc Lehmann in C. JSON::PP works as
+a fallback module when you use L<JSON> module without having
+installed JSON::XS.
+
+Because of this fallback feature of JSON.pm, JSON::PP tries not to
+be more JavaScript-friendly than JSON::XS (i.e. not to escape extra
+characters such as U+2028 and U+2029 nor support RFC7159/ECMA-404),
+in order for you not to lose such JavaScript-friendliness silently
+when you use JSON.pm and install JSON::XS for speed or by accident.
+If you need JavaScript-friendly RFC7159-compliant pure perl module,
+try L<JSON::Tiny>, which is derived from L<Mojolicious> web
+framework and is also smaller and faster than JSON::PP.
+
+JSON::PP has been in the Perl core since Perl 5.14, mainly for
+CPAN toolchain modules to parse META.json.
+
+=head1 FUNCTIONAL INTERFACE
+
+This section is taken from JSON::XS almost verbatim. C<encode_json>
+and C<decode_json> are exported by default.
+
+=head2 encode_json
+
+    $json_text = encode_json $perl_scalar
+
+Converts the given Perl data structure to a UTF-8 encoded, binary string
+(that is, the string contains octets only). Croaks on error.
+
+This function call is functionally identical to:
+
+    $json_text = JSON::PP->new->utf8->encode($perl_scalar)
+
+Except being faster.
+
+=head2 decode_json
+
+    $perl_scalar = decode_json $json_text
+
+The opposite of C<encode_json>: expects an UTF-8 (binary) string and tries
+to parse that as an UTF-8 encoded JSON text, returning the resulting
+reference. Croaks on error.
+
+This function call is functionally identical to:
+
+    $perl_scalar = JSON::PP->new->utf8->decode($json_text)
+
+Except being faster.
+
+=head2 JSON::PP::is_bool
+
+    $is_boolean = JSON::PP::is_bool($scalar)
+
+Returns true if the passed scalar represents either JSON::PP::true or
+JSON::PP::false, two constants that act like C<1> and C<0> respectively
+and are also used to represent JSON C<true> and C<false> in Perl strings.
+
+See L<MAPPING>, below, for more information on how JSON values are mapped to
+Perl.
+
+=head1 OBJECT-ORIENTED INTERFACE
+
+This section is also taken from JSON::XS.
+
+The object oriented interface lets you configure your own encoding or
+decoding style, within the limits of supported formats.
+
+=head2 new
+
+    $json = JSON::PP->new
+
+Creates a new JSON::PP object that can be used to de/encode JSON
+strings. All boolean flags described below are by default I<disabled>.
+
+The mutators for flags all return the JSON::PP object again and thus calls can
+be chained:
+
+   my $json = JSON::PP->new->utf8->space_after->encode({a => [1,2]})
+   => {"a": [1, 2]}
+
+=head2 ascii
+
+    $json = $json->ascii([$enable])
+    
+    $enabled = $json->get_ascii
+
+If C<$enable> is true (or missing), then the C<encode> method will not
+generate characters outside the code range C<0..127> (which is ASCII). Any
+Unicode characters outside that range will be escaped using either a
+single \uXXXX (BMP characters) or a double \uHHHH\uLLLLL escape sequence,
+as per RFC4627. The resulting encoded JSON text can be treated as a native
+Unicode string, an ascii-encoded, latin1-encoded or UTF-8 encoded string,
+or any other superset of ASCII.
+
+If C<$enable> is false, then the C<encode> method will not escape Unicode
+characters unless required by the JSON syntax or other flags. This results
+in a faster and more compact format.
+
+See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
+
+The main use for this flag is to produce JSON texts that can be
+transmitted over a 7-bit channel, as the encoded JSON texts will not
+contain any 8 bit characters.
+
+  JSON::PP->new->ascii(1)->encode([chr 0x10401])
+  => ["\ud801\udc01"]
+
+=head2 latin1
+
+    $json = $json->latin1([$enable])
+    
+    $enabled = $json->get_latin1
+
+If C<$enable> is true (or missing), then the C<encode> method will encode
+the resulting JSON text as latin1 (or iso-8859-1), escaping any characters
+outside the code range C<0..255>. The resulting string can be treated as a
+latin1-encoded JSON text or a native Unicode string. The C<decode> method
+will not be affected in any way by this flag, as C<decode> by default
+expects Unicode, which is a strict superset of latin1.
+
+If C<$enable> is false, then the C<encode> method will not escape Unicode
+characters unless required by the JSON syntax or other flags.
+
+See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
+
+The main use for this flag is efficiently encoding binary data as JSON
+text, as most octets will not be escaped, resulting in a smaller encoded
+size. The disadvantage is that the resulting JSON text is encoded
+in latin1 (and must correctly be treated as such when storing and
+transferring), a rare encoding for JSON. It is therefore most useful when
+you want to store data structures known to contain binary data efficiently
+in files or databases, not when talking to other JSON encoders/decoders.
+
+  JSON::PP->new->latin1->encode (["\x{89}\x{abc}"]
+  => ["\x{89}\\u0abc"]    # (perl syntax, U+abc escaped, U+89 not)
+
+=head2 utf8
+
+    $json = $json->utf8([$enable])
+    
+    $enabled = $json->get_utf8
+
+If C<$enable> is true (or missing), then the C<encode> method will encode
+the JSON result into UTF-8, as required by many protocols, while the
+C<decode> method expects to be handled an UTF-8-encoded string.  Please
+note that UTF-8-encoded strings do not contain any characters outside the
+range C<0..255>, they are thus useful for bytewise/binary I/O. In future
+versions, enabling this option might enable autodetection of the UTF-16
+and UTF-32 encoding families, as described in RFC4627.
+
+If C<$enable> is false, then the C<encode> method will return the JSON
+string as a (non-encoded) Unicode string, while C<decode> expects thus a
+Unicode string.  Any decoding or encoding (e.g. to UTF-8 or UTF-16) needs
+to be done yourself, e.g. using the Encode module.
+
+See also the section I<ENCODING/CODESET FLAG NOTES> later in this document.
+
+Example, output UTF-16BE-encoded JSON:
+
+  use Encode;
+  $jsontext = encode "UTF-16BE", JSON::PP->new->encode ($object);
+
+Example, decode UTF-32LE-encoded JSON:
+
+  use Encode;
+  $object = JSON::PP->new->decode (decode "UTF-32LE", $jsontext);
+
+=head2 pretty
+
+    $json = $json->pretty([$enable])
+
+This enables (or disables) all of the C<indent>, C<space_before> and
+C<space_after> (and in the future possibly more) flags in one call to
+generate the most readable (or most compact) form possible.
+
+=head2 indent
+
+    $json = $json->indent([$enable])
+    
+    $enabled = $json->get_indent
+
+If C<$enable> is true (or missing), then the C<encode> method will use a multiline
+format as output, putting every array member or object/hash key-value pair
+into its own line, indenting them properly.
+
+If C<$enable> is false, no newlines or indenting will be produced, and the
+resulting JSON text is guaranteed not to contain any C<newlines>.
+
+This setting has no effect when decoding JSON texts.
+
+The default indent space length is three.
+You can use C<indent_length> to change the length.
+
+=head2 space_before
+
+    $json = $json->space_before([$enable])
+    
+    $enabled = $json->get_space_before
+
+If C<$enable> is true (or missing), then the C<encode> method will add an extra
+optional space before the C<:> separating keys from values in JSON objects.
+
+If C<$enable> is false, then the C<encode> method will not add any extra
+space at those places.
+
+This setting has no effect when decoding JSON texts. You will also
+most likely combine this setting with C<space_after>.
+
+Example, space_before enabled, space_after and indent disabled:
+
+   {"key" :"value"}
+
+=head2 space_after
+
+    $json = $json->space_after([$enable])
+    
+    $enabled = $json->get_space_after
+
+If C<$enable> is true (or missing), then the C<encode> method will add an extra
+optional space after the C<:> separating keys from values in JSON objects
+and extra whitespace after the C<,> separating key-value pairs and array
+members.
+
+If C<$enable> is false, then the C<encode> method will not add any extra
+space at those places.
+
+This setting has no effect when decoding JSON texts.
+
+Example, space_before and indent disabled, space_after enabled:
+
+   {"key": "value"}
+
+=head2 relaxed
+
+    $json = $json->relaxed([$enable])
+    
+    $enabled = $json->get_relaxed
+
+If C<$enable> is true (or missing), then C<decode> will accept some
+extensions to normal JSON syntax (see below). C<encode> will not be
+affected in anyway. I<Be aware that this option makes you accept invalid
+JSON texts as if they were valid!>. I suggest only to use this option to
+parse application-specific files written by humans (configuration files,
+resource files etc.)
+
+If C<$enable> is false (the default), then C<decode> will only accept
+valid JSON texts.
+
+Currently accepted extensions are:
+
+=over 4
+
+=item * list items can have an end-comma
+
+JSON I<separates> array elements and key-value pairs with commas. This
+can be annoying if you write JSON texts manually and want to be able to
+quickly append elements, so this extension accepts comma at the end of
+such items not just between them:
+
+   [
+      1,
+      2, <- this comma not normally allowed
+   ]
+   {
+      "k1": "v1",
+      "k2": "v2", <- this comma not normally allowed
+   }
+
+=item * shell-style '#'-comments
+
+Whenever JSON allows whitespace, shell-style comments are additionally
+allowed. They are terminated by the first carriage-return or line-feed
+character, after which more white-space and comments are allowed.
+
+  [
+     1, # this comment not allowed in JSON
+        # neither this one...
+  ]
+
+=item * C-style multiple-line '/* */'-comments (JSON::PP only)
+
+Whenever JSON allows whitespace, C-style multiple-line comments are additionally
+allowed. Everything between C</*> and C<*/> is a comment, after which
+more white-space and comments are allowed.
+
+  [
+     1, /* this comment not allowed in JSON */
+        /* neither this one... */
+  ]
+
+=item * C++-style one-line '//'-comments (JSON::PP only)
+
+Whenever JSON allows whitespace, C++-style one-line comments are additionally
+allowed. They are terminated by the first carriage-return or line-feed
+character, after which more white-space and comments are allowed.
+
+  [
+     1, // this comment not allowed in JSON
+        // neither this one...
+  ]
+
+=back
+
+=head2 canonical
+
+    $json = $json->canonical([$enable])
+    
+    $enabled = $json->get_canonical
+
+If C<$enable> is true (or missing), then the C<encode> method will output JSON objects
+by sorting their keys. This is adding a comparatively high overhead.
+
+If C<$enable> is false, then the C<encode> method will output key-value
+pairs in the order Perl stores them (which will likely change between runs
+of the same script, and can change even within the same run from 5.18
+onwards).
+
+This option is useful if you want the same data structure to be encoded as
+the same JSON text (given the same overall settings). If it is disabled,
+the same hash might be encoded differently even if contains the same data,
+as key-value pairs have no inherent ordering in Perl.
+
+This setting has no effect when decoding JSON texts.
+
+This setting has currently no effect on tied hashes.
+
+=head2 allow_nonref
+
+    $json = $json->allow_nonref([$enable])
+    
+    $enabled = $json->get_allow_nonref
+
+If C<$enable> is true (or missing), then the C<encode> method can convert a
+non-reference into its corresponding string, number or null JSON value,
+which is an extension to RFC4627. Likewise, C<decode> will accept those JSON
+values instead of croaking.
+
+If C<$enable> is false, then the C<encode> method will croak if it isn't
+passed an arrayref or hashref, as JSON texts must either be an object
+or array. Likewise, C<decode> will croak if given something that is not a
+JSON object or array.
+
+Example, encode a Perl scalar as JSON value with enabled C<allow_nonref>,
+resulting in an invalid JSON text:
+
+   JSON::PP->new->allow_nonref->encode ("Hello, World!")
+   => "Hello, World!"
+
+=head2 allow_unknown
+
+    $json = $json->allow_unknown ([$enable])
+    
+    $enabled = $json->get_allow_unknown
+
+If C<$enable> is true (or missing), then C<encode> will I<not> throw an
+exception when it encounters values it cannot represent in JSON (for
+example, filehandles) but instead will encode a JSON C<null> value. Note
+that blessed objects are not included here and are handled separately by
+c<allow_blessed>.
+
+If C<$enable> is false (the default), then C<encode> will throw an
+exception when it encounters anything it cannot encode as JSON.
+
+This option does not affect C<decode> in any way, and it is recommended to
+leave it off unless you know your communications partner.
+
+=head2 allow_blessed
+
+    $json = $json->allow_blessed([$enable])
+    
+    $enabled = $json->get_allow_blessed
+
+See L<OBJECT SERIALISATION> for details.
+
+If C<$enable> is true (or missing), then the C<encode> method will not
+barf when it encounters a blessed reference that it cannot convert
+otherwise. Instead, a JSON C<null> value is encoded instead of the object.
+
+If C<$enable> is false (the default), then C<encode> will throw an
+exception when it encounters a blessed object that it cannot convert
+otherwise.
+
+This setting has no effect on C<decode>.
+
+=head2 convert_blessed
+
+    $json = $json->convert_blessed([$enable])
+    
+    $enabled = $json->get_convert_blessed
+
+See L<OBJECT SERIALISATION> for details.
+
+If C<$enable> is true (or missing), then C<encode>, upon encountering a
+blessed object, will check for the availability of the C<TO_JSON> method
+on the object's class. If found, it will be called in scalar context and
+the resulting scalar will be encoded instead of the object.
+
+The C<TO_JSON> method may safely call die if it wants. If C<TO_JSON>
+returns other blessed objects, those will be handled in the same
+way. C<TO_JSON> must take care of not causing an endless recursion cycle
+(== crash) in this case. The name of C<TO_JSON> was chosen because other
+methods called by the Perl core (== not by the user of the object) are
+usually in upper case letters and to avoid collisions with any C<to_json>
+function or method.
+
+If C<$enable> is false (the default), then C<encode> will not consider
+this type of conversion.
+
+This setting has no effect on C<decode>.
+
+=head2 filter_json_object
+
+    $json = $json->filter_json_object([$coderef])
+
+When C<$coderef> is specified, it will be called from C<decode> each
+time it decodes a JSON object. The only argument is a reference to the
+newly-created hash. If the code references returns a single scalar (which
+need not be a reference), this value (i.e. a copy of that scalar to avoid
+aliasing) is inserted into the deserialised data structure. If it returns
+an empty list (NOTE: I<not> C<undef>, which is a valid scalar), the
+original deserialised hash will be inserted. This setting can slow down
+decoding considerably.
+
+When C<$coderef> is omitted or undefined, any existing callback will
+be removed and C<decode> will not change the deserialised hash in any
+way.
+
+Example, convert all JSON objects into the integer 5:
+
+   my $js = JSON::PP->new->filter_json_object (sub { 5 });
+   # returns [5]
+   $js->decode ('[{}]'); # the given subroutine takes a hash reference.
+   # throw an exception because allow_nonref is not enabled
+   # so a lone 5 is not allowed.
+   $js->decode ('{"a":1, "b":2}');
+
+=head2 filter_json_single_key_object
+
+    $json = $json->filter_json_single_key_object($key [=> $coderef])
+
+Works remotely similar to C<filter_json_object>, but is only called for
+JSON objects having a single key named C<$key>.
+
+This C<$coderef> is called before the one specified via
+C<filter_json_object>, if any. It gets passed the single value in the JSON
+object. If it returns a single value, it will be inserted into the data
+structure. If it returns nothing (not even C<undef> but the empty list),
+the callback from C<filter_json_object> will be called next, as if no
+single-key callback were specified.
+
+If C<$coderef> is omitted or undefined, the corresponding callback will be
+disabled. There can only ever be one callback for a given key.
+
+As this callback gets called less often then the C<filter_json_object>
+one, decoding speed will not usually suffer as much. Therefore, single-key
+objects make excellent targets to serialise Perl objects into, especially
+as single-key JSON objects are as close to the type-tagged value concept
+as JSON gets (it's basically an ID/VALUE tuple). Of course, JSON does not
+support this in any way, so you need to make sure your data never looks
+like a serialised Perl hash.
+
+Typical names for the single object key are C<__class_whatever__>, or
+C<$__dollars_are_rarely_used__$> or C<}ugly_brace_placement>, or even
+things like C<__class_md5sum(classname)__>, to reduce the risk of clashing
+with real hashes.
+
+Example, decode JSON objects of the form C<< { "__widget__" => <id> } >>
+into the corresponding C<< $WIDGET{<id>} >> object:
+
+   # return whatever is in $WIDGET{5}:
+   JSON::PP
+      ->new
+      ->filter_json_single_key_object (__widget__ => sub {
+            $WIDGET{ $_[0] }
+         })
+      ->decode ('{"__widget__": 5')
+
+   # this can be used with a TO_JSON method in some "widget" class
+   # for serialisation to json:
+   sub WidgetBase::TO_JSON {
+      my ($self) = @_;
+
+      unless ($self->{id}) {
+         $self->{id} = ..get..some..id..;
+         $WIDGET{$self->{id}} = $self;
+      }
+
+      { __widget__ => $self->{id} }
+   }
+
+=head2 shrink
+
+    $json = $json->shrink([$enable])
+    
+    $enabled = $json->get_shrink
+
+If C<$enable> is true (or missing), the string returned by C<encode> will
+be shrunk (i.e. downgraded if possible).
+
+The actual definition of what shrink does might change in future versions,
+but it will always try to save space at the expense of time.
+
+If C<$enable> is false, then JSON::PP does nothing.
+
+=head2 max_depth
+
+    $json = $json->max_depth([$maximum_nesting_depth])
+    
+    $max_depth = $json->get_max_depth
+
+Sets the maximum nesting level (default C<512>) accepted while encoding
+or decoding. If a higher nesting level is detected in JSON text or a Perl
+data structure, then the encoder and decoder will stop and croak at that
+point.
+
+Nesting level is defined by number of hash- or arrayrefs that the encoder
+needs to traverse to reach a given point or the number of C<{> or C<[>
+characters without their matching closing parenthesis crossed to reach a
+given character in a string.
+
+Setting the maximum depth to one disallows any nesting, so that ensures
+that the object is only a single hash/object or array.
+
+If no argument is given, the highest possible setting will be used, which
+is rarely useful.
+
+See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
+
+=head2 max_size
+
+    $json = $json->max_size([$maximum_string_size])
+    
+    $max_size = $json->get_max_size
+
+Set the maximum length a JSON text may have (in bytes) where decoding is
+being attempted. The default is C<0>, meaning no limit. When C<decode>
+is called on a string that is longer then this many bytes, it will not
+attempt to decode the string but throw an exception. This setting has no
+effect on C<encode> (yet).
+
+If no argument is given, the limit check will be deactivated (same as when
+C<0> is specified).
+
+See L<JSON::XS/SECURITY CONSIDERATIONS> for more info on why this is useful.
+
+=head2 encode
+
+    $json_text = $json->encode($perl_scalar)
+
+Converts the given Perl value or data structure to its JSON
+representation. Croaks on error.
+
+=head2 decode
+
+    $perl_scalar = $json->decode($json_text)
+
+The opposite of C<encode>: expects a JSON text and tries to parse it,
+returning the resulting simple scalar or reference. Croaks on error.
+
+=head2 decode_prefix
+
+    ($perl_scalar, $characters) = $json->decode_prefix($json_text)
+
+This works like the C<decode> method, but instead of raising an exception
+when there is trailing garbage after the first JSON object, it will
+silently stop parsing there and return the number of characters consumed
+so far.
+
+This is useful if your JSON texts are not delimited by an outer protocol
+and you need to know where the JSON text ends.
+
+   JSON::PP->new->decode_prefix ("[1] the tail")
+   => ([1], 3)
+
+=head1 FLAGS FOR JSON::PP ONLY
+
+The following flags and properties are for JSON::PP only. If you use
+any of these, you can't make your application run faster by replacing
+JSON::PP with JSON::XS. If you need these and also speed boost,
+try L<Cpanel::JSON::XS>, a fork of JSON::XS by Reini Urban, which
+supports some of these.
+
+=head2 allow_singlequote
+
+    $json = $json->allow_singlequote([$enable])
+    $enabled = $json->get_allow_singlequote
+
+If C<$enable> is true (or missing), then C<decode> will accept
+invalid JSON texts that contain strings that begin and end with
+single quotation marks. C<encode> will not be affected in anyway.
+I<Be aware that this option makes you accept invalid JSON texts
+as if they were valid!>. I suggest only to use this option to
+parse application-specific files written by humans (configuration
+files, resource files etc.)
+
+If C<$enable> is false (the default), then C<decode> will only accept
+valid JSON texts.
+
+    $json->allow_singlequote->decode(qq|{"foo":'bar'}|);
+    $json->allow_singlequote->decode(qq|{'foo':"bar"}|);
+    $json->allow_singlequote->decode(qq|{'foo':'bar'}|);
+
+=head2 allow_barekey
+
+    $json = $json->allow_barekey([$enable])
+    $enabled = $json->get_allow_barekey
+
+If C<$enable> is true (or missing), then C<decode> will accept
+invalid JSON texts that contain JSON objects whose names don't
+begin and end with quotation marks. C<encode> will not be affected
+in anyway. I<Be aware that this option makes you accept invalid JSON
+texts as if they were valid!>. I suggest only to use this option to
+parse application-specific files written by humans (configuration
+files, resource files etc.)
+
+If C<$enable> is false (the default), then C<decode> will only accept
+valid JSON texts.
+
+    $json->allow_barekey->decode(qq|{foo:"bar"}|);
+
+=head2 allow_bignum
+
+    $json = $json->allow_bignum([$enable])
+    $enabled = $json->get_allow_bignum
+
+If C<$enable> is true (or missing), then C<decode> will convert
+big integers Perl cannot handle as integer into L<Math::BigInt>
+objects and convert floating numbers into L<Math::BigFloat>
+objects. C<encode> will convert C<Math::BigInt> and C<Math::BigFloat>
+objects into JSON numbers.
+
+   $json->allow_nonref->allow_bignum;
+   $bigfloat = $json->decode('2.000000000000000000000000001');
+   print $json->encode($bigfloat);
+   # => 2.000000000000000000000000001
+
+See also L<MAPPING>.
+
+=head2 loose
+
+    $json = $json->loose([$enable])
+    $enabled = $json->get_loose
+
+If C<$enable> is true (or missing), then C<decode> will accept
+invalid JSON texts that contain unescaped [\x00-\x1f\x22\x5c]
+characters. C<encode> will not be affected in anyway.
+I<Be aware that this option makes you accept invalid JSON texts
+as if they were valid!>. I suggest only to use this option to
+parse application-specific files written by humans (configuration
+files, resource files etc.)
+
+If C<$enable> is false (the default), then C<decode> will only accept
+valid JSON texts.
+
+    $json->loose->decode(qq|["abc
+                                   def"]|);
+
+=head2 escape_slash
+
+    $json = $json->escape_slash([$enable])
+    $enabled = $json->get_escape_slash
+
+If C<$enable> is true (or missing), then C<encode> will explicitly
+escape I<slash> (solidus; C<U+002F>) characters to reduce the risk of
+XSS (cross site scripting) that may be caused by C<< </script> >>
+in a JSON text, with the cost of bloating the size of JSON texts.
+
+This option may be useful when you embed JSON in HTML, but embedding
+arbitrary JSON in HTML (by some HTML template toolkit or by string
+interpolation) is risky in general. You must escape necessary
+characters in correct order, depending on the context.
+
+C<decode> will not be affected in anyway.
+
+=head2 indent_length
+
+    $json = $json->indent_length($number_of_spaces)
+    $length = $json->get_indent_length
+
+This option is only useful when you also enable C<indent> or C<pretty>.
+
+JSON::XS indents with three spaces when you C<encode> (if requested
+by C<indent> or C<pretty>), and the number cannot be changed.
+JSON::PP allows you to change/get the number of indent spaces with these
+mutator/accessor. The default number of spaces is three (the same as
+JSON::XS), and the acceptable range is from C<0> (no indentation;
+it'd be better to disable indentation by C<indent(0)>) to C<15>.
+
+=head2 sort_by
+
+    $json = $json->sort_by($code_ref)
+    $json = $json->sort_by($subroutine_name)
+
+If you just want to sort keys (names) in JSON objects when you
+C<encode>, enable C<canonical> option (see above) that allows you to
+sort object keys alphabetically.
+
+If you do need to sort non-alphabetically for whatever reasons,
+you can give a code reference (or a subroutine name) to C<sort_by>,
+then the argument will be passed to Perl's C<sort> built-in function.
+
+As the sorting is done in the JSON::PP scope, you usually need to
+prepend C<JSON::PP::> to the subroutine name, and the special variables
+C<$a> and C<$b> used in the subrontine used by C<sort> function.
+
+Example:
+
+   my %ORDER = (id => 1, class => 2, name => 3);
+   $json->sort_by(sub {
+       ($ORDER{$JSON::PP::a} // 999) <=> ($ORDER{$JSON::PP::b} // 999)
+       or $JSON::PP::a cmp $JSON::PP::b
+   });
+   print $json->encode([
+       {name => 'CPAN', id => 1, href => 'http://cpan.org'}
+   ]);
+   # [{"id":1,"name":"CPAN","href":"http://cpan.org"}]
+
+Note that C<sort_by> affects all the plain hashes in the data structure.
+If you need finer control, C<tie> necessary hashes with a module that
+implements ordered hash (such as L<Hash::Ordered> and L<Tie::IxHash>).
+C<canonical> and C<sort_by> don't affect the key order in C<tie>d
+hashes.
+
+   use Hash::Ordered;
+   tie my %hash, 'Hash::Ordered',
+       (name => 'CPAN', id => 1, href => 'http://cpan.org');
+   print $json->encode([\%hash]);
+   # [{"name":"CPAN","id":1,"href":"http://cpan.org"}] # order is kept
+
+=head1 INCREMENTAL PARSING
+
+This section is also taken from JSON::XS.
+
+In some cases, there is the need for incremental parsing of JSON
+texts. While this module always has to keep both JSON text and resulting
+Perl data structure in memory at one time, it does allow you to parse a
+JSON stream incrementally. It does so by accumulating text until it has
+a full JSON object, which it then can decode. This process is similar to
+using C<decode_prefix> to see if a full JSON object is available, but
+is much more efficient (and can be implemented with a minimum of method
+calls).
+
+JSON::PP will only attempt to parse the JSON text once it is sure it
+has enough text to get a decisive result, using a very simple but
+truly incremental parser. This means that it sometimes won't stop as
+early as the full parser, for example, it doesn't detect mismatched
+parentheses. The only thing it guarantees is that it starts decoding as
+soon as a syntactically valid JSON text has been seen. This means you need
+to set resource limits (e.g. C<max_size>) to ensure the parser will stop
+parsing in the presence if syntax errors.
+
+The following methods implement this incremental parser.
+
+=head2 incr_parse
+
+    $json->incr_parse( [$string] ) # void context
+    
+    $obj_or_undef = $json->incr_parse( [$string] ) # scalar context
+    
+    @obj_or_empty = $json->incr_parse( [$string] ) # list context
+
+This is the central parsing function. It can both append new text and
+extract objects from the stream accumulated so far (both of these
+functions are optional).
+
+If C<$string> is given, then this string is appended to the already
+existing JSON fragment stored in the C<$json> object.
+
+After that, if the function is called in void context, it will simply
+return without doing anything further. This can be used to add more text
+in as many chunks as you want.
+
+If the method is called in scalar context, then it will try to extract
+exactly I<one> JSON object. If that is successful, it will return this
+object, otherwise it will return C<undef>. If there is a parse error,
+this method will croak just as C<decode> would do (one can then use
+C<incr_skip> to skip the erroneous part). This is the most common way of
+using the method.
+
+And finally, in list context, it will try to extract as many objects
+from the stream as it can find and return them, or the empty list
+otherwise. For this to work, there must be no separators (other than
+whitespace) between the JSON objects or arrays, instead they must be
+concatenated back-to-back. If an error occurs, an exception will be
+raised as in the scalar context case. Note that in this case, any
+previously-parsed JSON texts will be lost.
+
+Example: Parse some JSON arrays/objects in a given string and return
+them.
+
+    my @objs = JSON::PP->new->incr_parse ("[5][7][1,2]");
+
+=head2 incr_text
+
+    $lvalue_string = $json->incr_text
+
+This method returns the currently stored JSON fragment as an lvalue, that
+is, you can manipulate it. This I<only> works when a preceding call to
+C<incr_parse> in I<scalar context> successfully returned an object. Under
+all other circumstances you must not call this function (I mean it.
+although in simple tests it might actually work, it I<will> fail under
+real world conditions). As a special exception, you can also call this
+method before having parsed anything.
+
+That means you can only use this function to look at or manipulate text
+before or after complete JSON objects, not while the parser is in the
+middle of parsing a JSON object.
+
+This function is useful in two cases: a) finding the trailing text after a
+JSON object or b) parsing multiple JSON objects separated by non-JSON text
+(such as commas).
+
+=head2 incr_skip
+
+    $json->incr_skip
+
+This will reset the state of the incremental parser and will remove
+the parsed text from the input buffer so far. This is useful after
+C<incr_parse> died, in which case the input buffer and incremental parser
+state is left unchanged, to skip the text parsed so far and to reset the
+parse state.
+
+The difference to C<incr_reset> is that only text until the parse error
+occurred is removed.
+
+=head2 incr_reset
+
+    $json->incr_reset
+
+This completely resets the incremental parser, that is, after this call,
+it will be as if the parser had never parsed anything.
+
+This is useful if you want to repeatedly parse JSON objects and want to
+ignore any trailing data, which means you have to reset the parser after
+each successful decode.
+
+=head1 MAPPING
+
+Most of this section is also taken from JSON::XS.
+
+This section describes how JSON::PP maps Perl values to JSON values and
+vice versa. These mappings are designed to "do the right thing" in most
+circumstances automatically, preserving round-tripping characteristics
+(what you put in comes out as something equivalent).
+
+For the more enlightened: note that in the following descriptions,
+lowercase I<perl> refers to the Perl interpreter, while uppercase I<Perl>
+refers to the abstract Perl language itself.
+
+=head2 JSON -> PERL
+
+=over 4
+
+=item object
+
+A JSON object becomes a reference to a hash in Perl. No ordering of object
+keys is preserved (JSON does not preserve object key ordering itself).
+
+=item array
+
+A JSON array becomes a reference to an array in Perl.
+
+=item string
+
+A JSON string becomes a string scalar in Perl - Unicode codepoints in JSON
+are represented by the same codepoints in the Perl string, so no manual
+decoding is necessary.
+
+=item number
+
+A JSON number becomes either an integer, numeric (floating point) or
+string scalar in perl, depending on its range and any fractional parts. On
+the Perl level, there is no difference between those as Perl handles all
+the conversion details, but an integer may take slightly less memory and
+might represent more values exactly than floating point numbers.
+
+If the number consists of digits only, JSON::PP will try to represent
+it as an integer value. If that fails, it will try to represent it as
+a numeric (floating point) value if that is possible without loss of
+precision. Otherwise it will preserve the number as a string value (in
+which case you lose roundtripping ability, as the JSON number will be
+re-encoded to a JSON string).
+
+Numbers containing a fractional or exponential part will always be
+represented as numeric (floating point) values, possibly at a loss of
+precision (in which case you might lose perfect roundtripping ability, but
+the JSON number will still be re-encoded as a JSON number).
+
+Note that precision is not accuracy - binary floating point values cannot
+represent most decimal fractions exactly, and when converting from and to
+floating point, JSON::PP only guarantees precision up to but not including
+the least significant bit.
+
+When C<allow_bignum> is enabled, big integer values and any numeric
+values will be converted into L<Math::BigInt> and L<Math::BigFloat>
+objects respectively, without becoming string scalars or losing
+precision.
+
+=item true, false
+
+These JSON atoms become C<JSON::PP::true> and C<JSON::PP::false>,
+respectively. They are overloaded to act almost exactly like the numbers
+C<1> and C<0>. You can check whether a scalar is a JSON boolean by using
+the C<JSON::PP::is_bool> function.
+
+=item null
+
+A JSON null atom becomes C<undef> in Perl.
+
+=item shell-style comments (C<< # I<text> >>)
+
+As a nonstandard extension to the JSON syntax that is enabled by the
+C<relaxed> setting, shell-style comments are allowed. They can start
+anywhere outside strings and go till the end of the line.
+
+=back
+
+
+=head2 PERL -> JSON
+
+The mapping from Perl to JSON is slightly more difficult, as Perl is a
+truly typeless language, so we can only guess which JSON type is meant by
+a Perl value.
+
+=over 4
+
+=item hash references
+
+Perl hash references become JSON objects. As there is no inherent
+ordering in hash keys (or JSON objects), they will usually be encoded
+in a pseudo-random order. JSON::PP can optionally sort the hash keys
+(determined by the I<canonical> flag and/or I<sort_by> property), so
+the same data structure will serialise to the same JSON text (given
+same settings and version of JSON::PP), but this incurs a runtime
+overhead and is only rarely useful, e.g. when you want to compare some
+JSON text against another for equality.
+
+=item array references
+
+Perl array references become JSON arrays.
+
+=item other references
+
+Other unblessed references are generally not allowed and will cause an
+exception to be thrown, except for references to the integers C<0> and
+C<1>, which get turned into C<false> and C<true> atoms in JSON. You can
+also use C<JSON::PP::false> and C<JSON::PP::true> to improve
+readability.
+
+   to_json [\0, JSON::PP::true]      # yields [false,true]
+
+=item JSON::PP::true, JSON::PP::false
+
+These special values become JSON true and JSON false values,
+respectively. You can also use C<\1> and C<\0> directly if you want.
+
+=item JSON::PP::null
+
+This special value becomes JSON null.
+
+=item blessed objects
+
+Blessed objects are not directly representable in JSON, but C<JSON::PP>
+allows various ways of handling objects. See L<OBJECT SERIALISATION>,
+below, for details.
+
+=item simple scalars
+
+Simple Perl scalars (any scalar that is not a reference) are the most
+difficult objects to encode: JSON::PP will encode undefined scalars as
+JSON C<null> values, scalars that have last been used in a string context
+before encoding as JSON strings, and anything else as number value:
+
+   # dump as number
+   encode_json [2]                      # yields [2]
+   encode_json [-3.0e17]                # yields [-3e+17]
+   my $value = 5; encode_json [$value]  # yields [5]
+
+   # used as string, so dump as string
+   print $value;
+   encode_json [$value]                 # yields ["5"]
+
+   # undef becomes null
+   encode_json [undef]                  # yields [null]
+
+You can force the type to be a string by stringifying it:
+
+   my $x = 3.1; # some variable containing a number
+   "$x";        # stringified
+   $x .= "";    # another, more awkward way to stringify
+   print $x;    # perl does it for you, too, quite often
+                # (but for older perls)
+
+You can force the type to be a number by numifying it:
+
+   my $x = "3"; # some variable containing a string
+   $x += 0;     # numify it, ensuring it will be dumped as a number
+   $x *= 1;     # same thing, the choice is yours.
+
+You cannot currently force the type in other, less obscure, ways.
+
+Note that numerical precision has the same meaning as under Perl (so
+binary to decimal conversion follows the same rules as in Perl, which
+can differ to other languages). Also, your perl interpreter might expose
+extensions to the floating point numbers of your platform, such as
+infinities or NaN's - these cannot be represented in JSON, and it is an
+error to pass those in.
+
+JSON::PP (and JSON::XS) trusts what you pass to C<encode> method
+(or C<encode_json> function) is a clean, validated data structure with
+values that can be represented as valid JSON values only, because it's
+not from an external data source (as opposed to JSON texts you pass to
+C<decode> or C<decode_json>, which JSON::PP considers tainted and
+doesn't trust). As JSON::PP doesn't know exactly what you and consumers
+of your JSON texts want the unexpected values to be (you may want to
+convert them into null, or to stringify them with or without
+normalisation (string representation of infinities/NaN may vary
+depending on platforms), or to croak without conversion), you're advised
+to do what you and your consumers need before you encode, and also not
+to numify values that may start with values that look like a number
+(including infinities/NaN), without validating.
+
+=back
+
+=head2 OBJECT SERIALISATION
+
+As for Perl objects, JSON::PP only supports a pure JSON representation (without the ability to deserialise the object automatically again).
+
+=head3 SERIALISATION
+
+What happens when C<JSON::PP> encounters a Perl object depends on the
+C<allow_blessed>, C<convert_blessed> and C<allow_bignum> settings, which are
+used in this order:
+
+=over 4
+
+=item 1. C<convert_blessed> is enabled and the object has a C<TO_JSON> method.
+
+In this case, the C<TO_JSON> method of the object is invoked in scalar
+context. It must return a single scalar that can be directly encoded into
+JSON. This scalar replaces the object in the JSON text.
+
+For example, the following C<TO_JSON> method will convert all L<URI>
+objects to JSON strings when serialised. The fact that these values
+originally were L<URI> objects is lost.
+
+   sub URI::TO_JSON {
+      my ($uri) = @_;
+      $uri->as_string
+   }
+
+=item 2. C<allow_bignum> is enabled and the object is a C<Math::BigInt> or C<Math::BigFloat>.
+
+The object will be serialised as a JSON number value.
+
+=item 3. C<allow_blessed> is enabled.
+
+The object will be serialised as a JSON null value.
+
+=item 4. none of the above
+
+If none of the settings are enabled or the respective methods are missing,
+C<JSON::PP> throws an exception.
+
+=back
+
+=head1 ENCODING/CODESET FLAG NOTES
+
+This section is taken from JSON::XS.
+
+The interested reader might have seen a number of flags that signify
+encodings or codesets - C<utf8>, C<latin1> and C<ascii>. There seems to be
+some confusion on what these do, so here is a short comparison:
+
+C<utf8> controls whether the JSON text created by C<encode> (and expected
+by C<decode>) is UTF-8 encoded or not, while C<latin1> and C<ascii> only
+control whether C<encode> escapes character values outside their respective
+codeset range. Neither of these flags conflict with each other, although
+some combinations make less sense than others.
+
+Care has been taken to make all flags symmetrical with respect to
+C<encode> and C<decode>, that is, texts encoded with any combination of
+these flag values will be correctly decoded when the same flags are used
+- in general, if you use different flag settings while encoding vs. when
+decoding you likely have a bug somewhere.
+
+Below comes a verbose discussion of these flags. Note that a "codeset" is
+simply an abstract set of character-codepoint pairs, while an encoding
+takes those codepoint numbers and I<encodes> them, in our case into
+octets. Unicode is (among other things) a codeset, UTF-8 is an encoding,
+and ISO-8859-1 (= latin 1) and ASCII are both codesets I<and> encodings at
+the same time, which can be confusing.
+
+=over 4
+
+=item C<utf8> flag disabled
+
+When C<utf8> is disabled (the default), then C<encode>/C<decode> generate
+and expect Unicode strings, that is, characters with high ordinal Unicode
+values (> 255) will be encoded as such characters, and likewise such
+characters are decoded as-is, no changes to them will be done, except
+"(re-)interpreting" them as Unicode codepoints or Unicode characters,
+respectively (to Perl, these are the same thing in strings unless you do
+funny/weird/dumb stuff).
+
+This is useful when you want to do the encoding yourself (e.g. when you
+want to have UTF-16 encoded JSON texts) or when some other layer does
+the encoding for you (for example, when printing to a terminal using a
+filehandle that transparently encodes to UTF-8 you certainly do NOT want
+to UTF-8 encode your data first and have Perl encode it another time).
+
+=item C<utf8> flag enabled
+
+If the C<utf8>-flag is enabled, C<encode>/C<decode> will encode all
+characters using the corresponding UTF-8 multi-byte sequence, and will
+expect your input strings to be encoded as UTF-8, that is, no "character"
+of the input string must have any value > 255, as UTF-8 does not allow
+that.
+
+The C<utf8> flag therefore switches between two modes: disabled means you
+will get a Unicode string in Perl, enabled means you get an UTF-8 encoded
+octet/binary string in Perl.
+
+=item C<latin1> or C<ascii> flags enabled
+
+With C<latin1> (or C<ascii>) enabled, C<encode> will escape characters
+with ordinal values > 255 (> 127 with C<ascii>) and encode the remaining
+characters as specified by the C<utf8> flag.
+
+If C<utf8> is disabled, then the result is also correctly encoded in those
+character sets (as both are proper subsets of Unicode, meaning that a
+Unicode string with all character values < 256 is the same thing as a
+ISO-8859-1 string, and a Unicode string with all character values < 128 is
+the same thing as an ASCII string in Perl).
+
+If C<utf8> is enabled, you still get a correct UTF-8-encoded string,
+regardless of these flags, just some more characters will be escaped using
+C<\uXXXX> then before.
+
+Note that ISO-8859-1-I<encoded> strings are not compatible with UTF-8
+encoding, while ASCII-encoded strings are. That is because the ISO-8859-1
+encoding is NOT a subset of UTF-8 (despite the ISO-8859-1 I<codeset> being
+a subset of Unicode), while ASCII is.
+
+Surprisingly, C<decode> will ignore these flags and so treat all input
+values as governed by the C<utf8> flag. If it is disabled, this allows you
+to decode ISO-8859-1- and ASCII-encoded strings, as both strict subsets of
+Unicode. If it is enabled, you can correctly decode UTF-8 encoded strings.
+
+So neither C<latin1> nor C<ascii> are incompatible with the C<utf8> flag -
+they only govern when the JSON output engine escapes a character or not.
+
+The main use for C<latin1> is to relatively efficiently store binary data
+as JSON, at the expense of breaking compatibility with most JSON decoders.
+
+The main use for C<ascii> is to force the output to not contain characters
+with values > 127, which means you can interpret the resulting string
+as UTF-8, ISO-8859-1, ASCII, KOI8-R or most about any character set and
+8-bit-encoding, and still get the same data structure back. This is useful
+when your channel for JSON transfer is not 8-bit clean or the encoding
+might be mangled in between (e.g. in mail), and works because ASCII is a
+proper subset of most 8-bit and multibyte encodings in use in the world.
+
+=back
+
+=head1 SEE ALSO
+
+The F<json_pp> command line utility for quick experiments.
+
+L<JSON::XS>, L<Cpanel::JSON::XS>, and L<JSON::Tiny> for faster alternatives.
+L<JSON> and L<JSON::MaybeXS> for easy migration.
+
+L<JSON::PP::Compat5005> and L<JSON::PP::Compat5006> for older perl users.
+
+RFC4627 (L<http://www.ietf.org/rfc/rfc4627.txt>)
+
+=head1 AUTHOR
+
+Makamaka Hannyaharamitu, E<lt>makamaka[at]cpan.orgE<gt>
+
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright 2007-2016 by Makamaka Hannyaharamitu
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself. 
+
+=cut
diff --git a/api/lib/JSON/PP/Boolean.pm b/api/lib/JSON/PP/Boolean.pm
new file mode 100644 (file)
index 0000000..1d1c5c4
--- /dev/null
@@ -0,0 +1,35 @@
+package JSON::PP::Boolean;
+
+use strict;
+use overload (
+    "0+"     => sub { ${$_[0]} },
+    "++"     => sub { $_[0] = ${$_[0]} + 1 },
+    "--"     => sub { $_[0] = ${$_[0]} - 1 },
+    fallback => 1,
+);
+
+$JSON::PP::Boolean::VERSION = '2.97001';
+
+1;
+
+__END__
+
+=head1 NAME
+
+JSON::PP::Boolean - dummy module providing JSON::PP::Boolean
+
+=head1 SYNOPSIS
+
+ # do not "use" yourself
+
+=head1 DESCRIPTION
+
+This module exists only to provide overload resolution for Storable and similar modules. See
+L<JSON::PP> for more info about this class.
+
+=head1 AUTHOR
+
+This idea is from L<JSON::XS::Boolean> written by Marc Lehmann <schmorp[at]schmorp.de>
+
+=cut
+
diff --git a/api/lib/URI/Encode.pm b/api/lib/URI/Encode.pm
new file mode 100644 (file)
index 0000000..ab16d38
--- /dev/null
@@ -0,0 +1,362 @@
+package URI::Encode;
+
+#######################
+# LOAD MODULES
+#######################
+use strict;
+use warnings FATAL => 'all';
+
+use 5.008001;
+use Encode qw();
+use Carp qw(croak carp);
+
+#######################
+# VERSION
+#######################
+our $VERSION = '1.1.1';
+
+#######################
+# EXPORT
+#######################
+use base qw(Exporter);
+our (@EXPORT_OK);
+
+@EXPORT_OK = qw(uri_encode uri_decode);
+
+#######################
+# SETTINGS
+#######################
+
+# Reserved characters
+my $reserved_re
+  = qr{([^a-zA-Z0-9\-\_\.\~\!\*\'\(\)\;\:\@\&\=\+\$\,\/\?\#\[\]\%])}x;
+
+# Un-reserved characters
+my $unreserved_re = qr{([^a-zA-Z0-9\Q-_.~\E\%])}x;
+
+# Encoded character set
+my $encoded_chars = qr{%([a-fA-F0-9]{2})}x;
+
+#######################
+# CONSTRUCTOR
+#######################
+sub new {
+    my ( $class, @in ) = @_;
+
+    # Check Input
+    my $defaults = {
+
+        #   this module, unlike URI::Escape,
+        #   does not encode reserved characters
+        encode_reserved => 0,
+
+        #   Allow Double encoding?
+        #   defaults to YES
+        double_encode => 1,
+    };
+
+    my $input = {};
+    if   ( ref $in[0] eq 'HASH' ) { $input = $in[0]; }
+    else                          { $input = {@in}; }
+
+    # Set options
+    my $options = {
+
+        # Defaults
+        %{$defaults},
+
+        # Input
+        %{$input},
+
+        # Encoding Map
+        enc_map =>
+          { ( map { chr($_) => sprintf( "%%%02X", $_ ) } ( 0 ... 255 ) ) },
+
+        # Decoding Map
+        dec_map =>
+          { ( map { sprintf( "%02X", $_ ) => chr($_) } ( 0 ... 255 ) ), },
+    };
+
+    # Return
+    my $self = bless $options, $class;
+  return $self;
+} ## end sub new
+
+#######################
+# ENCODE
+#######################
+sub encode {
+    my ( $self, $data, $options ) = @_;
+
+    # Check for data
+    # Allow to be '0'
+  return unless defined $data;
+
+    my $enc_res       = $self->{encode_reserved};
+    my $double_encode = $self->{double_encode};
+
+    if ( defined $options ) {
+        if ( ref $options eq 'HASH' ) {
+            $enc_res = $options->{encode_reserved}
+              if exists $options->{encode_reserved};
+            $double_encode = $options->{double_encode}
+              if exists $options->{double_encode};
+        } ## end if ( ref $options eq 'HASH')
+        else {
+            $enc_res = $options;
+        }
+    } ## end if ( defined $options )
+
+    # UTF-8 encode
+    $data = Encode::encode( 'utf-8-strict', $data );
+
+    # Encode a literal '%'
+    if ($double_encode) { $data =~ s{(\%)}{$self->_get_encoded_char($1)}gex; }
+    else { $data =~ s{(\%)(.*)}{$self->_encode_literal_percent($1, $2)}gex; }
+
+    # Percent Encode
+    if ($enc_res) {
+        $data =~ s{$unreserved_re}{$self->_get_encoded_char($1)}gex;
+    }
+    else {
+        $data =~ s{$reserved_re}{$self->_get_encoded_char($1)}gex;
+    }
+
+    # Done
+  return $data;
+} ## end sub encode
+
+#######################
+# DECODE
+#######################
+sub decode {
+    my ( $self, $data ) = @_;
+
+    # Check for data
+    # Allow to be '0'
+  return unless defined $data;
+
+    # Percent Decode
+    $data =~ s{$encoded_chars}{ $self->_get_decoded_char($1) }gex;
+
+  return $data;
+} ## end sub decode
+
+#######################
+# EXPORTED FUNCTIONS
+#######################
+
+# Encoder
+sub uri_encode { return __PACKAGE__->new()->encode(@_); }
+
+# Decoder
+sub uri_decode { return __PACKAGE__->new()->decode(@_); }
+
+#######################
+# INTERNAL
+#######################
+
+
+sub _get_encoded_char {
+    my ( $self, $char ) = @_;
+  return $self->{enc_map}->{$char} if exists $self->{enc_map}->{$char};
+  return $char;
+} ## end sub _get_encoded_char
+
+
+sub _encode_literal_percent {
+    my ( $self, $char, $post ) = @_;
+
+  return $self->_get_encoded_char($char) if not defined $post;
+
+    my $return_char;
+    if ( $post =~ m{^([a-fA-F0-9]{2})}x ) {
+        if ( exists $self->{dec_map}->{$1} ) {
+            $return_char = join( '', $char, $post );
+        }
+    } ## end if ( $post =~ m{^([a-fA-F0-9]{2})}x)
+
+    $return_char ||= join( '', $self->_get_encoded_char($char), $post );
+  return $return_char;
+} ## end sub _encode_literal_percent
+
+
+sub _get_decoded_char {
+    my ( $self, $char ) = @_;
+  return $self->{dec_map}->{ uc($char) }
+      if exists $self->{dec_map}->{ uc($char) };
+  return $char;
+} ## end sub _get_decoded_char
+
+#######################
+1;
+
+__END__
+
+#######################
+# POD SECTION
+#######################
+=pod
+
+=head1 NAME
+
+URI::Encode - Simple percent Encoding/Decoding
+
+=for html <a href="https://travis-ci.org/mithun/perl-uri-encode"><img src="https://travis-ci.org/mithun/perl-uri-encode.svg?branch=master"></a>
+
+=head1 SYNOPSIS
+
+    # OOP Interface
+    use URI::Encode;
+    my $uri     = URI::Encode->new( { encode_reserved => 0 } );
+    my $encoded = $uri->encode($data);
+    my $decoded = $uri->decode($encoded);
+
+    # Functional
+    use URI::Encode qw(uri_encode uri_decode);
+    my $encoded = uri_encode($data);
+    my $decoded = uri_decode($encoded);
+
+
+=head1 DESCRIPTION
+
+This modules provides simple URI (Percent) encoding/decoding
+
+The main purpose of this module (at least for me) was to provide an
+easy method to encode strings (mainly URLs) into a format which can be
+pasted into a plain text emails, and that those links are 'click-able'
+by the person reading that email. This can be accomplished by NOT
+encoding the reserved characters.
+
+This module can also be useful when using L<HTTP::Tiny> to ensure the
+URLs are properly escaped.
+
+B<This module does not encode reserved characters by default>. If you
+are looking for speed and want to encode reserved characters, use
+L<URI::Escape::XS>
+
+See L<this
+script|https://github.com/mithun/perl-uri-encode/raw/master/.author/benchmark.pl>
+for a comparison on encoding results and performance.
+
+=head1 METHODS
+
+=head2 new()
+
+Creates a new object, no arguments are required
+
+    my $encoder = URI::Encode->new(\%options);
+
+The following options can be passed to the constructor
+
+=over
+
+=item encode_reserved
+
+    my $encoder = URI::Encode->new({encode_reserved => 0});
+
+If true, L</"Reserved Characters"> are also encoded. Defaults to false.
+
+=item double_encode
+
+    my $encoder = URI::Encode->new({double_encode => 1});
+
+If false, characters that are already percent-encoded will not be
+encoded again. Defaults to true.
+
+    my $encoder = URI::Encode->new({double_encode => 0});
+    print $encoder->encode('http://perl.com/foo%20bar'); # prints http://perl.com/foo%20bar
+
+=back
+
+=head2 C<encode($url, \%options)>
+
+This method encodes the URL provided. The C<$url> provided is first
+converted into UTF-8 before percent encoding. Options set in the
+constructor, or defaults, can be overridden by passing them as the
+(optional) second argument. Options passed must be a hashref.
+
+    $uri->encode("http://perl.com/foo bar");
+    $uri->encode( "http://perl.com/foo bar", { encode_reserved => 1 } );
+
+=head2 C<decode($url)>
+
+This method decodes a 'percent' encoded URL. If you had encoded the URL
+using this module (or any other method), chances are that the URL was
+converted to UTF-8 before 'percent' encoding. Be sure to check the
+format and convert back if required.
+
+    $uri->decode("http%3A%2F%2Fperl.com%2Ffoo%20bar");
+
+=head1 EXPORTED FUNCTIONS
+
+The following functions are exported upon request. This provides a
+non-OOP interface
+
+=over
+
+=item C<uri_encode($url, \%options)>
+
+=item C<uri_decode($url)>
+
+=back
+
+=head1 CHARACTER CLASSES
+
+=head2 Reserved Characters
+
+The following characters are considered as reserved (L<RFC
+3986|http://tools.ietf.org/html/rfc3986>). They will be encoded only if
+requested.
+
+     ! * ' ( ) ; : @ & = + $ , / ? # [ ]
+
+=head2 Unreserved Characters
+
+The following characters are considered as Unreserved. They will not be
+encoded
+
+    a-z
+    A-Z
+    0-9
+    - _ . ~
+
+=head1 DEPENDENCIES
+
+L<Encode>
+
+=head1 ACKNOWLEDGEMENTS
+
+Gisle Aas for L<URI::Escape>
+
+David Nicol for L<Tie::UrlEncoder>
+
+=head1 SEE ALSO
+
+L<RFC 3986|http://tools.ietf.org/html/rfc3986>
+
+L<URI::Escape>
+
+L<URI::Escape::XS>
+
+L<URI::Escape::JavaScript>
+
+L<Tie::UrlEncoder>
+
+=head1 BUGS AND LIMITATIONS
+
+Please report any bugs or feature requests at
+L<https://github.com/mithun/perl-uri-encode/issues>
+
+=head1 AUTHOR
+
+Mithun Ayachit C<mithun@cpan.org>
+
+=head1 LICENSE AND COPYRIGHT
+
+Copyright (c) 2014, Mithun Ayachit. All rights reserved.
+
+This module is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself. See L<perlartistic>.
+
+=cut
index b047569..262ddf9 100644 (file)
@@ -51,7 +51,7 @@ if (exists($p->{set}) && (exists($p->{page}))){
   foreach my $k (keys(%{$nd})){
     $html->{$k} = $nd->{$k};
   }
-  open(CFG,$datapath.'/user/'.$ENV{REMOTE_USER}.'.'.$p->{page}.'.json');
+  open(CFG,">".$datapath.'/user/'.$ENV{REMOTE_USER}.'.'.$p->{page}.'.json');
   print CFG JSON::PP::encode_json($html); 
   close(CFG);
   $html= ();
index ea65651..6de18f4 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/env perl
+#!/usr/bin/perl
 
 use strict;
 use CGI;
@@ -6,11 +6,12 @@ use CGI::Carp;
 use File::Basename;
 use DBI;
 use lib (dirname($0).'/lib');
-use DBD::sqlite;
+use DBD::SQLite;
 use JSON::PP;
+use Encode;
 
 my $cgi = new CGI();
-
+my $scriptpath = $cgi->url(-absolute => 1); 
 my $p = ();
 my @params = $cgi->param();
 foreach my $pe (@params){
@@ -18,17 +19,23 @@ foreach my $pe (@params){
 }
 print $cgi->header(-type=>"application/json", -charset => "utf-8");
 my $html = ();
-if (exists($p->{db}) && (-e dirname($0).'/data/db/'.$p->{db}.'.sqlite')){
+my $datapath=$ENV{"DOCUMENT_ROOT"}.dirname(dirname($scriptpath)).'/data/db/';
+ $html->{params} = $p;
+# $html->{datapath} = $datapath;
+# print JSON::PP::encode_json($html);
+# exit(0);
+if (exists($p->{db}) && (-e $datapath.$p->{db}.'.sqlite')){
+  
   if (exists($p->{type}) && exists($p->{sql})){
     
     if (($p->{type} eq "query") && (exists($p->{key}))){
-      $html->{sqldata} = &dbquery($p->{key},$p->{sql});
+      $html->{result}->{sqldata} = &dbquery($p->{key},$p->{sql});
     } elsif ($p->{type} eq "querysorted"){
-      $html->{sqldata} = &dbquerysorted($p->{sql});
+      $html->{result}->{sqldata} = &dbquerysorted($p->{sql});
     } elsif ($p->{type} eq "queryarray"){
-      $html->{sqldata} = &dbqueryarray($p->{sql});
+      ($html->{result}->{sqlhead},$html->{result}->{sqldata}) = &dbqueryarray($p->{sql});
     } elsif ($p->{type} eq "exec"){
-      $html->{sqldata} = &dbexec($p->{sql});
+      $html->{result}->{sqldata} = &dbexec($p->{sql});
     }
     print JSON::PP::encode_json($html);
   }
@@ -45,7 +52,7 @@ sub dbquery(){
     my $key = shift;
     my $stat = shift;
     my $retdata =();
-    my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/data/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return ();
+    my $dbh = DBI->connect('DBI:SQLite:dbname='.$datapath.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return ();
     #$stat = encode("utf8", $stat);
 
    #open FILE,">>/tmp/sql.log";
@@ -53,8 +60,7 @@ sub dbquery(){
    #  close FILE;
     my $sth = $dbh->prepare($stat);
    $sth->execute() or return (); #or print "dbquery: ".$sth->errstr;
-   while(my $data = $sth->fetchrow_hashref())
-   {
+   while(my $data = $sth->fetchrow_hashref()) {
      if (exists $data->{$key}){
         foreach my $k (keys %{$data}){
             $retdata->{$data->{$key}}{$k} = decode( "utf8", $data->{$k});
@@ -72,14 +78,14 @@ sub dbquery(){
 sub dbquerysorted(){
     my $stat = shift;
     my $retdata = ();
-     my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/data/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return (); #or die "dbquery Connection Error!".$!;
+     my $dbh = DBI->connect('DBI:SQLite:dbname='.$datapath.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1}) or return ();
     #$stat = encode("utf8", $stat);
     #open FILE,">>/tmp/sql.log";
     #print  "$stat\n";
     # close FILE;
     my $sth = $dbh->prepare($stat);
 
-   $sth->execute() or return (); #print "dbquery: ".$sth->errstr;
+   $sth->execute() or return ();
    my $count = 0;
    while(my $data = $sth->fetchrow_hashref())
    {
@@ -98,16 +104,16 @@ sub dbquerysorted(){
 sub dbqueryarray(){
     my $stat = shift;
     my @retdata = ();
-     my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/data/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return (); #or die "dbquery Connection Error!".$!;
+     my $dbh = DBI->connect('DBI:SQLite:dbname='.$datapath.$p->{db}.'.sqlite',"","",{PrintError=>1,RaiseError=>1,AutoCommit=>1})  or return ();
     #$stat = encode("utf8", $stat);
     #open FILE,">>/tmp/sql.log";
     #print  "$stat\n";
     # close FILE;
     my $sth = $dbh->prepare($stat);
 
-   $sth->execute() or return (); #print "dbquery: ".$sth->errstr;
+   $sth->execute() or return ();
    my $count = 0;
-   
+   my @fields =  @{ $sth->{NAME_lc} };
    while(my $valdata = $sth->fetchrow_arrayref())
    {
                if ($valdata == undef){ last;}
@@ -121,12 +127,12 @@ sub dbqueryarray(){
    $sth->finish();
    $dbh->disconnect();
    #%retdata = sort {$a <=> $b} keys %retdata;
-   return \@retdata;
+   return (\@fields,\@retdata);
 }
 
 sub dbexec(){
     my $stat = shift;
-    my $dbh = DBI->connect('DBI:SQLite:dbname='.$dirname($0).'/data/db/'.$p->{db}.'.sqlite',"","",{PrintError=>1,AutoCommit=>1})  or return (); #or die "dbexec Connection Error!".$!;
+    my $dbh = DBI->connect('DBI:SQLite:dbname='.$datapath.$p->{db}.'.sqlite',"","",{PrintError=>1,AutoCommit=>1})  or return (); #or die "dbexec Connection Error!".$!;
     #$stat = encode("utf8", $stat);
     #print $stat."\n";
     #open FILE,">>/Users/kilian/sql.log";
index 410c780..e98027f 100644 (file)
@@ -264,4 +264,10 @@ fieldset[disabled] .btn-absent2.focus {
 .btn-absent2 .badge {
   color: #d96f4f;
   background-color: #fff;
+}
+
+input[type="date"]::-webkit-inner-spin-button,
+input[type="date"]::-webkit-calendar-picker-indicator {
+    display: none;
+    -webkit-appearance: none;
 }
\ No newline at end of file
index 242579e..f9ea675 100644 (file)
@@ -19,7 +19,7 @@
 
       <div class="mr-auto">
       <div class="btn-group" role="group" aria-label="Main">
-      <button class="btn btn-default" id="mnubtn_childs" onclick="app.loadpage('modules/childs/childs.html');"><img src="img/Children.svg" style="width: 32px; height: 32px;"/><br/>Enfants</button>
+      <button class="btn btn-default" id="mnubtn_childs" onclick="app.loadpage('modules/childs/index.html');"><img src="img/Children.svg" style="width: 32px; height: 32px;"/><br/>Enfants</button>
       <div class="btn-group" role="group">
     <button  type="button" id="mnubtn_presences" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
       <img src="img/Check.svg" style="width: 32px; height: 32px;"/><br/>Présences
@@ -30,7 +30,7 @@
     </div>
   </div>
       <!-- <button class="btn btn-default"  id="mnubtn_staff" onclick="app.loadpage('modules/staff/staff.html');"><img src="img/Team.svg" style="width: 32px; height: 32px;"/><br/>Personnel</button> -->
-      <button class="btn btn-default"  id="mnubtn_calendar" onclick="app.loadpage('modules/calendar/calchilds.html');"><img src="img/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendrier</button>
+      <button class="btn btn-default"  id="mnubtn_calendar" onclick="app.loadpage('modules/calendar/index.html');"><img src="img/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendrier</button>
       <!-- <div class="btn-group" role="group">
     <button  type="button" id="mnubtn_calendar" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
       <img src="img/Calendar.svg" style="width: 32px; height: 32px;"/><br/>Calendriers
       <div class="btn-group" role="group" aria-label="Right">
       <div class="btn-group">
   <button type="button" class="btn btn-default" id="mnubtn_creche" onclick="app.loadpage('modules/creche/creche.html');"><img src="img/Home.svg" style="width: 32px; height: 32px;"/><br/>Crèche</button>
-  <button type="button" class="btn btn-default dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+  <select id="crechelist" class="btn btn-default" class="form-control" onchange="app.changesite();">
+
+  </select>
+  <!--<button type="button" class="btn btn-default dropdown-toggle dropdown-toggle-split" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
     <span class="sr-only">Toggle Dropdown</span>
   </button>
   <div class="dropdown-menu" id="crechelist">
-  </div>
+  </div>-->
 </div>
-      <button class="btn btn-default" id="mnubtn_print" onclick="app.loadprintpreview();"><img src="img/Print.svg" style="width: 32px; height: 32px;"/><br/>Impression</button>
-      <div class="btn-group" role="group">
+      <!-- <button class="btn btn-default" id="mnubtn_print" onclick="app.loadprintpreview();"><img src="img/Print.svg" style="width: 32px; height: 32px;"/><br/>Impression</button> -->
+      <!-- <div class="btn-group" role="group">
     <button id="btnGroupInfo" type="button" id="mnubtn_info" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
       <img src="img/Info.svg" style="width: 32px; height: 32px;"/><br/>Info
-    </button>
-    <div class="dropdown-menu" style="left: -140px;" aria-labelledby="btnGroupInfo">
+    </button> -->
+    <!-- <div class="dropdown-menu" style="left: -140px;" aria-labelledby="btnGroupInfo">
       <a class="dropdown-item" href="javascript:app.loadpage('modules/info/about.html');">About</a>
-      <!-- <a class="dropdown-item" href="javascript:app.loadpage('modules/info/settings.html');">Configuration Logiciel</a> -->
-    </div>
-  </div>
+      <a class="dropdown-item" href="javascript:app.loadpage('modules/info/settings.html');">Configuration Logiciel</a>
+    </div> -->
+  <!-- </div> -->
       </div>
       
       </div>
index 8aa4339..0bc93ef 100644 (file)
@@ -1,15 +1,15 @@
-var eventMethod = window.addEventListener? "addEventListener": "attachEvent";
-var eventer = window[eventMethod];
-var messageEvent = eventMethod === "attachEvent"? "onmessage": "message";
-eventer(messageEvent, function (e) {
-       // if (e.origin !== 'http://the-trusted-iframe-origin.com') return;
-       if (e.data === "updatecrechelist" || e.message === "updatecrechelist") {
-               //alert('Message from iframe just came!');
-               // app.getinfo();
-         app.loadsites();
-               // console.log(e);
-       }
-});
+// var eventMethod = window.addEventListener? "addEventListener": "attachEvent";
+// var eventer = window[eventMethod];
+// var messageEvent = eventMethod === "attachEvent"? "onmessage": "message";
+// eventer(messageEvent, function (e) {
+//     // if (e.origin !== 'http://the-trusted-iframe-origin.com') return;
+//     if (e.data === "updatecrechelist" || e.message === "updatecrechelist") {
+//             //alert('Message from iframe just came!');
+//             // app.getinfo();
+//       app.loadsites();
+//             // console.log(e);
+//     }
+// });
 
 document.addEventListener("keydown", function(e) {
     //document.onkeydown = function(e) {
@@ -45,19 +45,25 @@ document.addEventListener("keydown", function(e) {
     }
 
   var app = {
-      url: location.protocol + '//' + location.host + '/apps_dks_lu/creorga/',
+      url: location.protocol + '//' + location.host + '/apps_dks_lu/apps/creorga/',
       api: location.protocol + '//' + location.host + '/apps_dks_lu/api/',
                  currentdb: null,
                  info: null,
-                 loadpage: function(page){
+                 loadpage: function(page,data = null){
                          // console.log("load Page => " + page);
         // console.log(app);
-        
+        var da = [];
+        if (data){
+          
+          for (var i in data){
+            da.push(i + "=" + data[i]);
+          }
+        }
                          var pageurl= app.url + page + '?' ;
-                         console.log(app.info);
-                         pageurl += 'db=' + app.info.appconfig.db[app.info.appconfig.currentdb].id;
+                         //console.log(app.info);
+                         pageurl += 'db=' + app.currentdb + ((da.length > 0)?'&' + da.join("&"):'');
 
-                         
+                         console.log("loadpage: " + pageurl);
                                $('#appframe').attr('src',pageurl);
                                //path += '&data=' + encodeURIComponent(JSON.stringify(data.data));
                  },
@@ -92,28 +98,54 @@ document.addEventListener("keydown", function(e) {
                          console.log("Params: " + params);
                          console.log("Printfile: " + reportfilepath + '/' + reportfile +'?'+ encodeURIComponent(params));
                          //?file='+ encodeURIComponent(reportfilepath + '/' + reportfile +'?'+ params)
-                         //let modal = window.open('pdfjs/web/viewer.html?file=' + encodeURIComponent('../../' +moduledir + '/' + reportfile));
+                         //let modal = window.open('pdfjs/viewer.html?file=' + encodeURIComponent('../../' +moduledir + '/' + reportfile));
                          let modal = window.open(reportfilepath + '/' + reportfile +'?'+  params);
                          //modal.document.write('<h1>Hello</h1>');
                          //alert("TODO: load print preview!");
                  },
                  loadsites: function(){
+        $.ajax({
+          encoding:"UTF-8",
+          url: app.api + 'prefs.cgi?get=auth' ,
+          success: function (data){
+            console.log(data);
+            if (data.result.db){
+              for (var s in data.result.db){
+                //console.log(s);
+                $("#crechelist").append('<option value="'+data.result.db[s].dbname+'">'+data.result.db[s].name+'</option>');
+                //$("#crechelist").append('<a class="dropdown-item" href="javascript:app.changesite(\''+ data.result.db[s].dbname +'\');">' + data.result.db[s].name +'</a>');
+              }
+              if (app.currentdb == null){
+                app.currentdb = data.result.db[0].dbname;
+              }
+            }
+            
+            
+            //   app.info=data.result;
+            },
+            error: function(data){
+              //alert("Error:" + JSON.stringify(data));
+              console.log("Error:" + JSON.stringify(data));
+            },
+            async:false
+        });
                          // console.log(app.info);
-                         for (var s in app.info.appconfig.db){
-                                 $("#crechelist").append('<a class="dropdown-item" href="javascript:app.changesite(\''+ s +'\');">' + app.info.appconfig.db[s].name +'</a>');
-                         }
+                         
                          
                  },
-                 changesite: function(num){
-                         app.info.appconfig.currendb = num;
+                 changesite: function(){
+        var dbname = $("#crechelist :selected").val();
+        console.log(dbname);
+        //app.info.appconfig.currendb = num;
+        app.currentdb = dbname;
                          $.ajax({
                                        encoding:"UTF-8",
-                                       url:'http://localhost:6060/app/preferences?page=service&set=' +encodeURIComponent('{"currentdb":'+ num+'}') ,
+                                       url:app.api + 'prefs.cgi?page=currentdb&set=' + dbname ,
                                        //crossDomain: true,
                                        success: function (data){
                                                //dump(data + "\n");
                                                //console.log("from service:" + JSON.stringify(data));
-                                                       app.info.appconfig=data.result;
+                                                       //app.info.appconfig=data.result;
                                                        
                                                },
                                                error: function(data){
@@ -121,8 +153,9 @@ document.addEventListener("keydown", function(e) {
                                                        console.log("Error:" + JSON.stringify(data));
                                                },
                                                async:false
-                               });
-                         app.loadpage(app.info.appconfig.lastpage);
+        });
+        document.getElementById('appframe').contentWindow.location.reload(true);
+                         //app.loadpage(app.info.appconfig.lastpage);
                  }
                  
                  
@@ -130,7 +163,7 @@ document.addEventListener("keydown", function(e) {
   //app.getinfo();
   $(document).ready(function() {
     //TODO: get userrights
-         //app.getinfo();
+         app.getinfo();
          app.loadsites();
 //       if (app.info.appconfig == null){
 // //            $("#mnubtn_print").prop("disabled",true);
@@ -162,8 +195,9 @@ document.addEventListener("keydown", function(e) {
                        url:app.api +'prefs.cgi?page=service&set=' +encodeURIComponent('{"lastpage":"'+ src+'"}') ,
                        //crossDomain: true,
                        success: function (data){
-          
-        app.info.appconfig=data.result;
+        //console.log("appdata");
+        //console.log(data);  
+        //app.info.appconfig=data.result;
                                        
                                },
                                error: function(data){
index 97dc225..430b712 100644 (file)
@@ -1,5 +1,12 @@
 //Source-code licensed under EUPL v1.2 ( Copyright 2019 By DKS s.à r.l. - Kilian Saffran - Luxembourg )
 
+function getSearchParams(k){
+  var p={};
+  // console.log("params =>" + location.search);
+  location.search.replace(/[?&]+([^=&]+)=([^&]*)/gi,function(s,k,v){p[k]=v});
+  return k?p[k]:p;
+}
+
 function check_birthdate_valid(){
    var dx = new Array;
    if ($("#childs_birthday").val() == "") {
@@ -305,13 +312,13 @@ function load_helpers(){
         if ($('#' + dateobjid).attr('limits') == '1'){
             $('#' + dateobjid).datetimepicker({
                 locale: 'fr',
-                format: "DD.MM.YYYY",
+                format: "YYYY-MM-DD",
                 daysOfWeekDisabled: [0]
             });
         } else if ($('#' + dateobjid).attr('widgetpos')){
           $('#' + dateobjid).datetimepicker({
                 locale: 'fr',
-                format: "DD.MM.YYYY",
+                format: "YYYY-MM-DD",
                 widgetPositioning:{
                    horizontal: 'auto',
                    vertical: $('#' + dateobjid).attr('widgetpos')
@@ -321,7 +328,7 @@ function load_helpers(){
           }else {
             $('#' + dateobjid).datetimepicker({
                 locale: 'fr',
-                format: "DD.MM.YYYY",
+                format: "YYYY-MM-DD",
             });
         }
         
@@ -335,7 +342,7 @@ function load_helpers(){
     //dump("load week helper\n");
     $(".input-group.week input[type='date']").datetimepicker({
     locale: 'fr',
-    format: "DD.MM.YYYY",
+    format: "YYYY-MM-DD",
     calendarWeeks: true,
     daysOfWeekDisabled: [0,2,3,4,5,6],
     });
@@ -353,7 +360,8 @@ function load_helpers(){
 }
 
 function set_infoheader(strinfoheader) {
-  globelreq.send_request({page:'infoheader',header:strinfoheader});
+  $("#pagehead").html(strinfoheader)
+  //globelreq.send_request({page:'infoheader',header:strinfoheader});
 }
 
 var globelreq = {
index 07f4815..1190201 100644 (file)
@@ -1,6 +1,6 @@
 var appdb = {
-               dbfile: null,
-               url: location.protocol + '://' + location.host + '/creorga_lu/api/sqlite.cgi?',
+               dbfile: parent.app.currentdb,
+               url: 'http://' + location.host + '/apps_dks_lu/api/sqlite.cgi?',
                dbquery: function(sQuery){
                        var type='querysorted';
                        var result= {sqldata:[]};
@@ -8,7 +8,7 @@ var appdb = {
                        //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n");
                        $.ajax({
                                encoding:"UTF-8",
-                               url:this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ,
+                               url:appdb.url + 'db=' + appdb.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ,
                                crossDomain: true,
                                success: function (data){
                                        //dump(data + "\n");
@@ -25,14 +25,17 @@ var appdb = {
                dbqueryarray: function(sQuery){
                        var type='queryarray';
                        var result= {sqldata:[]};
-                       //console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery));
+                       //console.log(appdb.url + 'db=' + appdb.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery));
                        //alert(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n");
                        $.ajax({
                                encoding:"UTF-8",
-                               url:this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ,
-                               crossDomain: true,
+        url:appdb.url  ,
+        method: "POST",
+        data: 'db=' + appdb.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery),
+                               //crossDomain: true,
                                success: function (data){
-                                               result=data.result;
+            
+            result=data.result;
                                        },
                                error: function(data){
                                        alert("Error:" + JSON.stringify(data));
@@ -46,10 +49,10 @@ var appdb = {
                        var type='exec';
                        var result= {sqldata:[]};
                        //dump(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) + "\n");
-                       console.log(this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) );
+                       console.log(appdb.url + 'db=' + appdb.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) );
                        $.ajax({
                                encoding:"UTF-8",
-                               url:this.url + 'db=' + this.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ,
+                               url:appdb.url + 'db=' + appdb.dbfile + '&type=' + type + '&sql=' +encodeURIComponent(sQuery) ,
                                crossDomain: true,
                                success: function (data){
                                                result=data.result;
index e23e0a4..6a7495e 100644 (file)
@@ -9,7 +9,7 @@ var globalreq = {
                                        console.log(page);
                                        $.ajax({
                                                encoding:"UTF-8",
-                                               url: location.protocol + '://' + location.host + '/creorga_lu/api/prefs.cgi??page=' + page + '&set=' +encodeURIComponent('{"data":' + JSON.stringify(data.data) +'}') ,
+                                               url: location.protocol + '://' + location.host + '/apps_dks_lu/api/api/prefs.cgi?page=' + page + '&set=' +encodeURIComponent('{"data":' + JSON.stringify(data.data) +'}') ,
                                                crossDomain: true,
                                                success: function (data){
                                                        var result=data.result;
@@ -31,6 +31,8 @@ var globalreq = {
 }
 
 var apppref ={
+    url: location.protocol + '//' + location.host + '/apps_dks_lu/creorga/',
+    api: location.protocol + '//' + location.host + '/apps_dks_lu/api/',
                curcfg: null,
                getSearchParams: function (k){
                        //alert(location.href);
@@ -62,19 +64,21 @@ var apppref ={
                        // appdb.url = "http://localhost:6060/sqlite?";
                        $("#current_site").html(decodeURI(this.curcfg.sitename));
                },
-               setpreference:function(section,key,value){
-                       if (!apppref.curcfg.pageconfig[section]){
-                               apppref.curcfg.pageconfig[section] = {};
-                       }
-                       apppref.curcfg.pageconfig[section][key] = value;
+               setpreference:function(key,value){
+                       // if (!apppref.curcfg.pageconfig[section]){
+                       //      apppref.curcfg.pageconfig[section] = {};
+                       // }
+                       // apppref.curcfg.pageconfig[section][key] = value;
 
-                       var page = location.pathname.substring(location.pathname.lastIndexOf("/"));
-                       page = page.replace(/\.html/,'');
+      
+      //var page = location.pathname.substring(location.pathname.lastIndexOf("/"));
+                       //page = page.replace(/\.html/,'');
                        $.ajax({
                                encoding:"UTF-8",
-                               url: app.api + 'prefs.cgi?page=' + page + '&set=' +encodeURIComponent(JSON.stringify(apppref.curcfg.pageconfig)) ,
-                               crossDomain: true,
+                               url: apppref.api + 'prefs.cgi?page=' + key + '&set=' +encodeURIComponent(JSON.stringify(value)) ,
+                               //crossDomain: true,
                                success: function (data){
+          
                                        var result=data.result;
                                },
                                error: function(data){
@@ -84,20 +88,24 @@ var apppref ={
                        });
                },
                getpreference: function(key){
-      if ((apppref) && (appref.curcfg)){
-        apppref.curcfg['pageconfig'] = {};
-      }else {
-        apppref['curcfg']['pageconfig'] = {};
-      }
-      
+      // if ((apppref) && (apppref.curcfg)){
+      //   apppref.curcfg['pageconfig'] = {};
+      // }else {
+      //   apppref['curcfg']['pageconfig'] = {};
+      // }
+      var retdata = null;
                        $.ajax({
                                encoding:"UTF-8",
-                               url: app.api + 'prefs.cgi?get=' + key ,
+                               url: apppref.api + 'prefs.cgi?get=' + key ,
                                crossDomain: true,
                                success: function (data){
-                                       if (data.result){
-                                               apppref.curcfg.pageconfig = data.result;
-                                       }
+          retdata = data.result;
+          // console.log("DATA");
+          // console.log(data);
+          // if (data.result){
+
+                                       //      apppref.curcfg.pageconfig = data.result;
+                                       // }
 
                                },
                                error: function(data){
@@ -106,7 +114,7 @@ var apppref ={
                                },
                                async:false
                        });
-
+      return retdata;
                }, 
                getforeignpreference: function(key){
                        var ret = null;
index 7fa05d2..3088319 100644 (file)
@@ -9,15 +9,15 @@
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"><!--<link href="css/glyphicons.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"><!--<link href="css/glyphicons.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
         </div>
     
   </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="js/rrule.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   <script src="js/calglobal.js" type="text/javascript"></script>
 </body>
 </html>
index cedb4f9..e9cd87d 100644 (file)
@@ -9,15 +9,15 @@
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"><!--<link href="css/glyphicons.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"><!--<link href="css/glyphicons.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
     </div>
     
   </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="js/rrule.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   <script src="js/callunch.js" type="text/javascript"></script>
 </body>
 </html>
index 775ee18..af49a97 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/style.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/style.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 <style>
 
 </style>
 </head>
 
 <body>
-    <div class="container-fluid">
-     
-        <div id="frmchart_child" class="form-inline" style="margin-bottom: 7px;">
-          <div class="input-group month btn-group">
-            <span class="input-group-addon">du mois:</span>
-            <input type="date" class="form-control" value="" placeholder="mm.yyyy" style="width: 80px;" id="calmonth">
-            <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-          </div>
-            <button class="btn btn-primary" onclick="onpreviousmonth();"><span class="glyphicon glyphicon-chevron-left"></span></button>
-            <button class="btn btn-primary" onclick="onnextmonth();"><span class="glyphicon glyphicon-chevron-right"></span></button>
-                    
-        <!--<div class="btn-group" data-toggle="buttons">
-        <label class="btn btn-primary">
-          <input name="view" id="view_bymonth" value="month" type="radio"><span class="glyphicons glyphicons-calendar"></span>
-        </label>
-
-        <label class="btn btn-primary">
-          <input name="view" id="view_bylist" value="list" type="radio"><span class="glyphicons glyphicons-list"></span>
-        </label>
-        <label class="btn btn-primary">
-          <input name="view" id="view_bytable" value="table" type="radio"><span class="glyphicons glyphicons-table"></span>
-        </label>
+  <nav class="navbar navbar-inverse navbar-fixed-top">
+    <div class="">
+      <ul class="nav navbar-nav navbar-left">
+       <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Calendrier</li>
+          <li style="padding-top: 7px; padding-left: 10px;">
+            <div id="frmchart_child" class="form-inline" style="margin-bottom: 7px;">
+              <div class="input-group month btn-group">
+                <span class="input-group-addon">du mois:</span>
+                <input type="date" class="form-control" value="" placeholder="mm.yyyy" style="width: 120px;" id="calmonth">
+                <span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+              </div>
+                <button class="btn btn-primary" onclick="onpreviousmonth();"><span class="glyphicon glyphicon-chevron-left"></span></button>
+                <button class="btn btn-primary" onclick="onnextmonth();"><span class="glyphicon glyphicon-chevron-right"></span></button>
+                        
+            <!--<div class="btn-group" data-toggle="buttons">
+            <label class="btn btn-primary">
+              <input name="view" id="view_bymonth" value="month" type="radio"><span class="glyphicons glyphicons-calendar"></span>
+            </label>
+    
+            <label class="btn btn-primary">
+              <input name="view" id="view_bylist" value="list" type="radio"><span class="glyphicons glyphicons-list"></span>
+            </label>
+            <label class="btn btn-primary">
+              <input name="view" id="view_bytable" value="table" type="radio"><span class="glyphicons glyphicons-table"></span>
+            </label>
+          </div>-->
+            <!--<div class="input-group" id="divfiltergroupe">
+          <div class="input-group-addon"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp; Groupe</div>
+          <select id="filter_group"  onchange="onselgroupe(this.id);">
+          
+      </select>
+      
       </div>-->
-        <!--<div class="input-group" id="divfiltergroupe">
-      <div class="input-group-addon"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp; Groupe</div>
-      <select id="filter_group"  onchange="onselgroupe(this.id);">
+            <div class="input-group" id="divfiltercalendar">
+          <div class="input-group-addon"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp; Calendrier</div>
+          <select id="filter_calendar">
+          <option value="childsbyplan">enfants heures planifié</option>
+          <!--<option value="childsbyhour">enfants par heure de présence planifié</option>-->
+          <!--<option value="childsbydayrange">enfants par matin/midi/après-midi</option>-->
+          <option value="childsbyweekhours">enfants par heures contractuelles</option>
+          <!--<option value="lunch">Déjeuner</option>-->
+      </select>
       
-  </select>
-  
-  </div>-->
-        <div class="input-group" id="divfiltercalendar">
-      <div class="input-group-addon"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp; Calendrier</div>
-      <select id="filter_calendar">
-      <option value="childsbyplan">enfants heures planifié</option>
-      <!--<option value="childsbyhour">enfants par heure de présence planifié</option>-->
-      <!--<option value="childsbydayrange">enfants par matin/midi/après-midi</option>-->
-      <option value="childsbyweekhours">enfants par heures contractuelles</option>
-      <!--<option value="lunch">Déjeuner</option>-->
-  </select>
-  
-  </div>
-        </div>
+      </div>
+            </div>
+      <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
+      </ul>
+    </div>
+    
+  </nav>
+    <div class="container-fluid" style="padding-top: 55px;">
+     
+        
     <div class="row" id="view_table">
       <table id="tbl_timetable" class="table table-bordered">
         
     </div>
 
       </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="js/rrule.js" type="text/javascript"></script>
   <script src="js/nlp.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/calchilds.js" type="text/javascript"></script>
 </body>
 </html>
index 0cbbd59..12b0fb2 100644 (file)
@@ -439,7 +439,7 @@ function getplannedtimesbygroup(groupfilter){
     }  
    sql += adt3.join(",") + ' from childs ch join planning pl on (ch.uuid = pl.childuuid) JOIN ('
       + drsql + ") dd on ( dd.daydate BETWEEN pl.datebegin AND pl.dateend) " +
-      "where ch.leavedate >= date('"+initdate.toLocaleFormat('%Y-%m-%d')+"') and ch.entrydate <= date('"+endmdate.toLocaleFormat('%Y-%m-%d')+"')  " +
+      "where ch.leavedate >= date('"+initdate.toISOString().substring(0,10)+"') and ch.entrydate <= date('"+endmdate.toISOString().substring(0,10)+"')  " +
        " GROUP BY daydate, pl.childuuid) aa " +
   "group by daydate,childuuid,montime,tuetime,wedtime,thutime,fritime,sattime) where daytime is not null and groupuuid='"+ groupfilter +"' group by daydate,daytime,groupuuid  "+
   "order by daydate,daytime;";
@@ -483,7 +483,7 @@ function getchildweekhoursbygroup(groupfilter) {
            sql += adt4.join(" + ") + "as weekhours2 " +
            "from childs ch join planning pl on (ch.uuid = pl.childuuid) JOIN " +
            " ("+ drsql + ") dd on (  " +
-                " dd.daydate BETWEEN pl.datebegin AND pl.dateend) where ch.leavedate >= date('"+initdate.toLocaleFormat('%Y-%m-%d')+"') and ch.entrydate <= date('"+endmdate.toLocaleFormat('%Y-%m-%d')+"')  GROUP BY daydate,pl.childuuid )" +
+                " dd.daydate BETWEEN pl.datebegin AND pl.dateend) where ch.leavedate >= date('"+initdate.toISOString().substring(0,10)+"') and ch.entrydate <= date('"+endmdate.toISOString().substring(0,10)+"')  GROUP BY daydate,pl.childuuid )" +
                " group by daydate, childuuid, groupuuid ) " +
 "where weekhours is not null and groupuuid='"+ groupfilter +"'" +
 " group by daydate, weekhours, groupuuid  order by daydate,weekhours;";
@@ -501,7 +501,7 @@ function getdaterangesql(){
   var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
   for (var cdt = bdate; cdt <= bend; cdt.setDate(cdt.getDate() + 1)) {
     if ((cdt.getDay() !== 0)){
-      adays.push("select date('" + cdt.toLocaleFormat('%Y-%m-%d') + "') as daydate");
+      adays.push("select date('" + cdt.toISOString().substring(0,10) + "') as daydate");
     }
     
   }
@@ -540,10 +540,10 @@ function getcolumndays(){
 //  var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
 //  var staffsql = "select dd.daydate as daydate,uuid as staffuuid from ( "+
 //"select uuid, "+
-//"case when entrydate is null or entrydate < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  entrydate end as entrydate, "+
-//"case when exitdate is null or exitdate > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else exitdate end as exitdate "+
+//"case when entrydate is null or entrydate < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  entrydate end as entrydate, "+
+//"case when exitdate is null or exitdate > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else exitdate end as exitdate "+
 //"from staff st  "+
-//"where (entrydate is null or entrydate <= '"+bend.toLocaleFormat("%Y-%m-%d")+"') and (exitdate is null or exitdate >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) sf "+
+//"where (entrydate is null or entrydate <= '"+bend.toISOString().substring(0,10)+"') and (exitdate is null or exitdate >= '"+bdate.toISOString().substring(0,10)+"')) sf "+
 //"join ("+drsql+") dd  "+
 //"on (dd.daydate between sf.entrydate and sf.exitdate) order by daydate";
 //  //dump("\n\n\nGLOBSQL: " + staffsql + "\n\n\n");
@@ -557,10 +557,10 @@ function getcolumndays(){
 //  var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
 //  var actsql = "select dd.daydate as daydate,ev.staffuuid as staffuuid,st.prename || ' ' || st.surname as staffname,st.color as color, ev.timefrom as timefrom,ev.timeto as timeto from ( "+
 //"select sp.staffuuid, "+
-//"case when datefrom < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  datefrom end as datefrom, "+
-//"case when dateto > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else dateto end as dateto, "+
+//"case when datefrom < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  datefrom end as datefrom, "+
+//"case when dateto > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else dateto end as dateto, "+
 //"timefrom,timeto  "+
-//"from eventcalendar ec join staffplanning sp on (ec.uuid=sp.eventcalendaruuid) where datefrom <= '"+bend.toLocaleFormat("%Y-%m-%d")+"' and (dateto is null or dateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) ev "+
+//"from eventcalendar ec join staffplanning sp on (ec.uuid=sp.eventcalendaruuid) where datefrom <= '"+bend.toISOString().substring(0,10)+"' and (dateto is null or dateto >= '"+bdate.toISOString().substring(0,10)+"')) ev "+
 //"join staff st on (ev.staffuuid=st.uuid) "+
 //"join ("+ drsql+") dd  "+
 //"on (dd.daydate between ev.datefrom and ev.dateto) order by staffname,dd.daydate,ev.timefrom,ev.timeto; ";
@@ -575,10 +575,10 @@ function getcolumndays(){
 //  var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
 //  var vacsql = "select dd.daydate as daydate,staffuuid, timefrom,timeto from ( "+
 //"select staffuuid, "+
-//"case when datefrom < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  datefrom end as datefrom, "+
-//"case when dateto > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else dateto end as dateto, "+
+//"case when datefrom < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  datefrom end as datefrom, "+
+//"case when dateto > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else dateto end as dateto, "+
 //"timefrom,timeto "+
-//"from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toLocaleFormat("%Y-%m-%d")+"') and (dateto is null or dateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) vc "+
+//"from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toISOString().substring(0,10)+"') and (dateto is null or dateto >= '"+bdate.toISOString().substring(0,10)+"')) vc "+
 //"join ("+drsql+") dd  "+
 //"on (dd.daydate between vc.datefrom and vc.dateto); ";
 // //dump("\n\n\nVACSQL: " + vacsql + "\n\n\n");
@@ -594,7 +594,7 @@ function get_vacancydays(){
 "select vacancydate,  "+
 "case when vacancydateto is null then vacancydate else vacancydateto end as vacancydateto, "+
 "case when vacancydateto is null then 'vacancy' else 'holiday' end as type, "+
-"vacancydescription from vacancy where (vacancydate between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and (vacancydateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and vacancydate < '"+bdate.toLocaleFormat("%Y-%m-%d")+"') or ((vacancydate <= '"+bdate.toLocaleFormat("%Y-%m-%d")+"') and (vacancydateto >= '"+bend.toLocaleFormat("%Y-%m-%d")+"')) order by vacancydate,vacancydateto) vc "+
+"vacancydescription from vacancy where (vacancydate between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and (vacancydateto >= '"+bdate.toISOString().substring(0,10)+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and vacancydate < '"+bdate.toISOString().substring(0,10)+"') or ((vacancydate <= '"+bdate.toISOString().substring(0,10)+"') and (vacancydateto >= '"+bend.toISOString().substring(0,10)+"')) order by vacancydate,vacancydateto) vc "+
 "join ( "+ drsql +") dd  "+
 "on (dd.daydate between vc.vacancydate and vc.vacancydateto) group by dd.daydate order by daydate;";
  //dump("VACSQL: " + sql + "\n");
@@ -777,7 +777,7 @@ function onselcalendar(objid){
 //       sqlret += drsql + " )) oph " +
 // "ON ( oph.daydate BETWEEN pl.datebegin AND pl.dateend) " +
 // "WHERE oph.daydate IS NOT NULL " +
-// "AND oph.daydate not in (select vacancydate from vacancy where vacancydateto is null and vacancydate between '"+initdate.toLocaleFormat("%Y-%m-%d") + "' AND '" + dateto2.toLocaleFormat("%Y-%m-%d")+"') " +
+// "AND oph.daydate not in (select vacancydate from vacancy where vacancydateto is null and vacancydate between '"+initdate.toISOString().substring(0,10) + "' AND '" + dateto2.toISOString().substring(0,10)+"') " +
 // "GROUP BY daydate,gr.uuid " +
 // "ORDER BY oph.daydate, gr.minage, gr.maxage " +
 // ") group by daydate,grpname; ";
index 36424a0..d3a5431 100644 (file)
@@ -66,8 +66,8 @@ function load_calendar_month() {
   for (var cdate = firstmonday; cdate <= lastsunday; cdate.setDate(cdate.getDate() + 1)) {
     dayident = "day" + weeknum + cdate.toLocaleFormat('%w');
 
-    linkpos[cdate.toLocaleFormat('%Y-%m-%d')] = "day" + weeknum + cdate.toLocaleFormat('%w');
-    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toLocaleFormat('%Y-%m-%d');
+    linkpos[cdate.toISOString().substring(0,10)] = "day" + weeknum + cdate.toLocaleFormat('%w');
+    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toISOString().substring(0,10);
     $("#" + dayident + " > div.panel-day > div.panel-dayhead").html(cdate.toLocaleFormat('%d'));
    if (cdate.getMonth() == cmonth) {
       $("#" + dayident + " > div.panel-day > div.panel-dayhead").addClass("panel-dayheadcurrent");
@@ -155,7 +155,7 @@ function load_calendar_month() {
 function load_calendar_data() {
   $("div.panel-daybody").html("");
   var sql = "select vacancydate,strftime('%Y%m%d',vacancydate) as strvacancydate,vacancydateto,case when vacancydateto is not null then strftime('%Y%m%d',vacancydateto) else null end as strvacancydateto,vacancydescription from vacancy " +
-  "where (vacancydate between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and (vacancydateto >= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and vacancydate < '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') or ((vacancydate <= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') and (vacancydateto >= '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "')) " +
+  "where (vacancydate between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and (vacancydateto >= '" + firstmonday.toISOString().substring(0,10) + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and vacancydate < '" + firstmonday.toISOString().substring(0,10) + "') or ((vacancydate <= '" + firstmonday.toISOString().substring(0,10) + "') and (vacancydateto >= '" + lastsunday.toISOString().substring(0,10) + "')) " +
   "order by vacancydate,vacancydateto;";
 
   var caldata = appdb.dbquery(sql);
@@ -177,7 +177,7 @@ function load_calendar_data() {
     }
     for (var r in rall){
       var bgstyle='background-color: ' + ((caldata[c].vacancydateto == '')?'#0099cc':'#0000cc');
-      $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-daybody").append('<div class="calevent" onclick="dlg_vacancyrange({vacancydate:\''+caldata[c].vacancydate+'\',vacancydateto:\''+caldata[c].vacancydateto+'\'},\'upd\');" style="' + bgstyle + '; color: #fff;">' + caldata[c].vacancydescription + '</div>');
+      $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-daybody").append('<div class="calevent" onclick="dlg_vacancyrange({vacancydate:\''+caldata[c].vacancydate+'\',vacancydateto:\''+caldata[c].vacancydateto+'\'},\'upd\');" style="' + bgstyle + '; color: #fff;">' + caldata[c].vacancydescription + '</div>');
     }
   }
 }
@@ -225,7 +225,7 @@ function dlg_vacancyrange(data, type) {
   $("#frmeditvacancyrange #vacancydescription").val("");
   var evdata = {
       vacancydescription: '',
-      vacancydate:new Date(initdate.getFullYear(),initdate.getMonth(),initdate.getDate()).toLocaleFormat("%d.%m.%Y"),
+      vacancydate:new Date(initdate.getFullYear(),initdate.getMonth(),initdate.getDate()).toISOString().substring(0,10),
       vacancydateto: null
     };
   if (data.vacancydateto == '') {
@@ -236,7 +236,7 @@ function dlg_vacancyrange(data, type) {
     $('#dt_vacancydateto').show();
     $('#dlgvacancytitle').html("Editer vacance scolaire");
     $('#lbldatevacancy').html("Date debut / fin");
-    evdata.vacancydateto = new Date(initdate.getFullYear(),initdate.getMonth(),initdate.getDate()).toLocaleFormat("%d.%m.%Y");
+    evdata.vacancydateto = new Date(initdate.getFullYear(),initdate.getMonth(),initdate.getDate()).toISOString().substring(0,10);
   }
   if (type == 'ins') {
     $('#btndeletevacancy').hide();
index 38cb97a..a117091 100644 (file)
@@ -59,8 +59,8 @@ function load_calendar_month() {
   for (var cdate = firstmonday; cdate <= lastsunday; cdate.setDate(cdate.getDate() + 1)) {
     dayident = "day" + weeknum + cdate.toLocaleFormat('%w');
 
-    linkpos[cdate.toLocaleFormat('%Y-%m-%d')] = "day" + weeknum + cdate.toLocaleFormat('%w');
-    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toLocaleFormat('%Y-%m-%d');
+    linkpos[cdate.toISOString().substring(0,10)] = "day" + weeknum + cdate.toLocaleFormat('%w');
+    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toISOString().substring(0,10);
     $("#" + dayident + " > div.panel-day > div.panel-dayhead").html(cdate.toLocaleFormat('%d'));
     if (cdate.getMonth() == cmonth) {
       $("#" + dayident + " > div.panel-day > div.panel-dayhead").addClass("panel-dayheadcurrent");
@@ -103,7 +103,7 @@ function load_calendar_month() {
 
 function load_vacancy_data() {
   var sql = "select vacancydate,strftime('%Y%m%d',vacancydate) as strvacancydate,vacancydateto,case when vacancydateto is not null then strftime('%Y%m%d',vacancydateto) else null end as strvacancydateto,vacancydescription from vacancy " +
-  "where (vacancydate between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and (vacancydateto >= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and vacancydate < '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') or ((vacancydate <= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') and (vacancydateto >= '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "')) " +
+  "where (vacancydate between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and (vacancydateto >= '" + firstmonday.toISOString().substring(0,10) + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and vacancydate < '" + firstmonday.toISOString().substring(0,10) + "') or ((vacancydate <= '" + firstmonday.toISOString().substring(0,10) + "') and (vacancydateto >= '" + lastsunday.toISOString().substring(0,10) + "')) " +
   "order by vacancydate,vacancydateto;";
   var caldata = appdb.dbquery(sql);
   caldata = caldata.sqldata;
@@ -123,9 +123,9 @@ function load_vacancy_data() {
       //dump("ERROR! loading data!" + ex  + " FREQ:" + freq + "\n");
     }
     for (var r in rall){
-      $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead").addClass(((caldata[c].vacancydateto == '')?'calvacancy':'calvacrange'));
-      $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead > div#vacname").remove();
-      $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead").prepend('<div id="vacname" class="calvacheader" >'+ caldata[c].vacancydescription + "</div>&nbsp;");
+      $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead").addClass(((caldata[c].vacancydateto == '')?'calvacancy':'calvacrange'));
+      $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead > div#vacname").remove();
+      $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead").prepend('<div id="vacname" class="calvacheader" >'+ caldata[c].vacancydescription + "</div>&nbsp;");
     }
   }
 }
@@ -134,7 +134,7 @@ function load_vacancy_data() {
 function load_calendar_data() {
 
   $("div.panel-daybody").html("");
-  var sql = getsql(new Date(initdate.toLocaleFormat("%Y-%m-%d")),new Date(lastmonthday.toLocaleFormat("%Y-%m-%d")));
+  var sql = getsql(new Date(initdate.toISOString().substring(0,10)),new Date(lastmonthday.toISOString().substring(0,10)));
   var caldata = appdb.dbquery(sql);
   caldata = caldata.sqldata;
   var totals = {};
@@ -166,14 +166,14 @@ function getsql(datefrom2,dateto2) {
       
       for (var cdate2=datefrom2;cdate2<=dateto2;cdate2.setDate(cdate2.getDate() +1)){
             if ((cdate2.getDay() != 0) && (cdate2.getDay() != 6)){
-                  sqldays.push ("SELECT date('" + cdate2.toLocaleFormat('%Y-%m-%d') +"') as daydate");
+                  sqldays.push ("SELECT date('" + cdate2.toISOString().substring(0,10) +"') as daydate");
             }
       }
 
       sqlret += sqldays.join(' UNION ALL ') + " )) oph " +
 "ON ( oph.daydate BETWEEN pl.datebegin AND pl.dateend) " +
 "WHERE oph.daydate IS NOT NULL " +
-"AND oph.daydate not in (select vacancydate from vacancy where vacancydateto is null and vacancydate between '"+initdate.toLocaleFormat("%Y-%m-%d") + "' AND '" + dateto2.toLocaleFormat("%Y-%m-%d")+"') " +
+"AND oph.daydate not in (select vacancydate from vacancy where vacancydateto is null and vacancydate between '"+initdate.toISOString().substring(0,10) + "' AND '" + dateto2.toISOString().substring(0,10)+"') " +
 "GROUP BY daydate,gr.uuid " +
 "ORDER BY oph.daydate, gr.minage, gr.maxage " +
 ") group by daydate,grpname; ";
index 89085e4..fa10015 100644 (file)
@@ -6,24 +6,32 @@
 
   <title>Détails - Enfant</title>
     <meta name="viewport" content="width=device-width, initial-scale=1">
-  <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
   <meta http-equiv="cache-control" content="max-age=0" />
   <meta http-equiv="cache-control" content="no-cache" />
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
   <!--<link href="css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
   <!-- <link href="css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
 </head>
 
-<body>
-    <div class="container-fluid">
+<nav class="navbar navbar-inverse navbar-fixed-top">
+  <div class="">
+    <ul class="nav navbar-nav navbar-left">
+     <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Enfant</li>
+    
+    </ul>
+  </div>
+  
+</nav>
+  <div class="container-fluid" style="padding-top: 55px;">
         <form name="frmchild" id="frmchild">
           <input type="hidden" value="" id="childs_uuid">
           <table>
@@ -44,7 +52,7 @@
             <label for="childs_checkserviceexpiration">Date d'expiration</label>
 
             <div id="dt_childs_checkserviceexpiration" class="input-group date">
-              <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy" id="childs_checkserviceexpiration"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+              <input type="date" class="form-control" value="" limits="0"  id="childs_checkserviceexpiration"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
             </div>
           </div>
               </td>
             <label for="childs_birthday">Date de naissance</label>
 
             <div id="dt_childs_birthday" class="input-group date">
-              <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy" id="childs_birthday"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+              <input type="date" class="form-control" value="" limits="0"  id="childs_birthday"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
             </div>
           </div><div class="field" id="date-container">
                       <label for="childs_entrydate">Date d'entrée</label>
 
                       <div id="dt_childs_entrydate" class="input-group date">
-                        <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy"  id="childs_entrydate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+                        <input type="date" class="form-control" value="" limits="0"   id="childs_entrydate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
                       </div>
                     </div>
 
@@ -67,7 +75,7 @@
                       <label for="childs_leavedate">Date de sortie</label>
 
                       <div id="dt_childs_leavedate" class="input-group date">
-                        <input type="date" class="form-control" value="" limits="0" placeholder="dd.mm.yyyy" id="childs_leavedate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+                        <input type="date" class="form-control" value="" limits="0"  id="childs_leavedate"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
                       </div>
                     </div>
               </td>
             </div>
           </div>
     </div>
-  <script src="js/jquery.min.js" type="text/javascript"></script>
-  <script src="js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="js/datatables.min.js" type="text/javascript"></script>
-  <script src="js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
   <!-- <script src="js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="js/summernote.min.js" type="text/javascript"></script>
-  <script src="js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-  <script src="js/labels.js" type="text/javascript"></script>
-  <script src="js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <!-- <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script> -->
+  <!-- <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script> -->
+  <script src="../../js/webpreferences.js" type="text/javascript"></script>
+  <script src="../../js/webdatabase.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   <script src="js/child.js" type="text/javascript"></script>
 </body>
 </html>
index 496806a..6f72f0e 100644 (file)
 </head>
 
 <body>
-  
-    <div class="container-fluid" style="padding-top: 5px;">
-        <!--<form method="post" class="form-inline">-->
-          <div class="btn-group" role="group" aria-label="topbar" style="z-index: 10;">
-            <button onclick="addchild();" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
-            <!--<button class="btn btn-primary" onclick="window.print_list();" id="btnprintlist" class="btn btn-primary"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> </button>-->
-            <div class="btn-group" role="group">
-            <button id="filterchilds" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp;Filtre&nbsp;<span class="caret"></span></button>
-            <ul class="dropdown-menu" id="cmb_childsfilter">
-              
-            </ul>
-            </div>
-          </div><!--&nbsp;&nbsp;-->
-        <!--<span class="pagehead" id="pagehead">Enfants&nbsp;-&nbsp;<span id="filtername"></span></span>-->
-        <!--</form>-->
+  <nav class="navbar navbar-inverse navbar-fixed-top">
+    <div class="">
+      <ul class="nav navbar-nav navbar-left">
+       <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Enfants</li>
+          <li style="padding-top: 7px; padding-left: 10px;"><div class="btn-group" role="group" aria-label="topbar" style="z-index: 10;">
+          <button onclick="addchild();" class="btn btn-primary"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span></button>
+          
+          <div class="btn-group" role="group">
+          <button id="filterchilds" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"><span class="glyphicon glyphicon-filter" aria-hidden="true"></span>&nbsp;Filtre&nbsp;<span class="caret"></span></button>
+          <ul class="dropdown-menu" id="cmb_childsfilter">
+            
+          </ul>
+          </div>
+        </div>
+      <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
+      </ul>
+    </div>
+    
+  </nav>
+    <div class="container-fluid" style="padding-top: 55px;">
+     
 
         <div id="childstable" style="margin-top: -32px;z-index: -10;" >
           <!--<div id="tbl_childs_wrapper" class="dataTables_wrapper" >-->
index c465593..df1891c 100644 (file)
@@ -110,19 +110,19 @@ function setborderdates() {
   var dtbday = new Date(bday);
   var dtminentrydate = new Date(dtbday.getFullYear(),dtbday.getMonth() + parseInt(minamonths.sqldata[0].minage), dtbday.getDate());
   var today = new Date();
-  if (centrydate < dtminentrydate.toLocaleFormat("%Y-%m-%d") || (centrydate==cleavedate)) {
+  if (centrydate < dtminentrydate.toISOString().substring(0,10) || (centrydate==cleavedate)) {
 
     if (dtminentrydate > today) {
-      $('#childs_entrydate').val(dtminentrydate.toLocaleFormat("%d.%m.%Y"));
+      $('#childs_entrydate').val(dtminentrydate.toISOString().substring(0,10));
     }else {
-      $('#childs_entrydate').val(today.toLocaleFormat("%d.%m.%Y"));
+      $('#childs_entrydate').val(today.toISOString().substring(0,10));
     }
     
   }
   var dtmaxleavedate = new Date(dtbday.getFullYear(),dtbday.getMonth() + parseInt(minamonths.sqldata[0].maxage), dtbday.getDate());
-  if (cleavedate > dtmaxleavedate.toLocaleFormat("%Y-%m-%d") || (centrydate==cleavedate)) {
+  if (cleavedate > dtmaxleavedate.toISOString().substring(0,10) || (centrydate==cleavedate)) {
 
-    $('#childs_leavedate').val(dtmaxleavedate.toLocaleFormat("%d.%m.%Y"));
+    $('#childs_leavedate').val(dtmaxleavedate.toISOString().substring(0,10));
   }
   centrydate = encodeparam($('#childs_entrydate').val(),'date').replace(/'/g,'');
   cleavedate = encodeparam($('#childs_leavedate').val(),'date').replace(/'/g,'');
@@ -169,7 +169,7 @@ function load_table_presence() {
   $("#tbl_planning").html("");
   var tblplan = $("#tbl_planning").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": plandata.sqldata,
     "columns": headerdata,
@@ -228,7 +228,7 @@ function load_table_refperson() {
   
   $("#tbl_refperson").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     //"data": refpersondata.sqldata,
     //"columns": headerdata,
@@ -249,7 +249,7 @@ function load_table_caution(){
   var headerdata = getlabels("action,daydate,amount,statementnumber");
   $("#tbl_cautionstatus").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": caudata.sqldata,
     "columns": headerdata,
@@ -268,7 +268,7 @@ function load_table_files(){
   var headerdata = getlabels("action,filename,description,daydate,filetype");
   $("#tbl_files").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     //"data": refpersondata.sqldata,
     "columns": headerdata,
@@ -866,7 +866,7 @@ function load_table_files(){
       $("#tbl_files").html("");
       $("#tbl_files").dataTable({
         "language": {
-          "url": "js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "data": atbody,
         "columns": headerdata,
index bc9939d..3e4db1d 100644 (file)
@@ -13,29 +13,34 @@ var wh= window.innerHeight -125;
 //var btnprintchild = "";
 var candelete = 0;
 function initdata(){
-  var configdata = apppref.getpreference("pageconfig.childs");
-  if (configdata !== '') {
-    pconfig = JSON.parse(configdata);
-  }
+  //appdb.dbfile=parent.app.currentdb;
+  var pconfig = apppref.getpreference("childs");
+  console.log("CFG"); 
+  //console.log(configdata);
+  // if (configdata) {
+  //   pconfig = JSON.parse(configdata);
+  // }
   if (!pconfig.printlayout) {
     pconfig.printlayout = 'list';
-    apppref.setpreference("pageconfig.childs",pconfig);
+    apppref.setpreference("childs",pconfig);
   }
-  if (system.appinfo().ID.indexOf("director") > 0){
+  console.log("get appinfo");
+  console.log(parent.app.info);
+  if (parent.app.info.modules.childs.delete === true){
     candelete = 1;
   }
     var filters = getallfilters();
+    console.log(filters);
     var strfilters = "";
     for (var f in filters) {
-      if (pconfig.filterid === "") {
+      if (!pconfig.filterid) {
         idfilter = 0;
         filter = filters[0];
         set_infoheader(filter.description);
        
         pconfig.idfilter = 0;
         apppref.setpreference("pageconfig.childs",pconfig);
-      }
-      if (pconfig.filterid == f) {
+      } else {
         idfilter = f;
         filter = filters[f];
         set_infoheader(filter.description);
@@ -52,14 +57,15 @@ function initdata(){
 
 
 function loadtable() {
-  var actionbtnsql = "<button onclick=\"globelreq.send_request({page:''child'',data:{uuid:''' || uuid || '''},header:''Enfant''});\" class=\"btn btn-primary\"><span class=\"glyphicon glyphicon-pencil\" aria-hidden=\"true\"></span></button>";
+  var actionbtnsql = "<button onclick=\"parent.app.loadpage(''modules/childs/child.html'',{uuid:''' || uuid || '''});\" class=\"btn btn-primary\"><span class=\"glyphicon glyphicon-pencil\" aria-hidden=\"true\"></span></button>";
   if (candelete == 1){
     actionbtnsql += "<button onclick=\"confirm_delete_child(''' || uuid || ''');\" class=\"btn btn-danger\"><span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span></button>";
   }
   var sql = filter.sql;
   sql = sql.replace('%%ACTION%%',actionbtnsql);
-  var actionbtnsql2 = "<button onclick=\"globelreq.send_request({page:''child'',data:{uuid:''' || ch.uuid || '''},header:''Enfant''});\" class=\"btn btn-primary\"><span class=\"glyphicon glyphicon-pencil\" aria-hidden=\"true\"></span></button>";
+  var actionbtnsql2 = "<button onclick=\"parent.app.loadpage(''modules/childs/child.html'',{uuid:''' || ch.uuid || '''});\" class=\"btn btn-primary\"><span class=\"glyphicon glyphicon-pencil\" aria-hidden=\"true\"></span></button>";
   sql = sql.replace('%%ACTION2%%',actionbtnsql2);
+  console.log(appdb.url);
   var data = appdb.dbqueryarray(sql);
   //dump("SQL:" + sql + "\n");
   //dump(JSON.stringify(data) + "\n");
@@ -78,7 +84,7 @@ function loadtable() {
   $("#tbl_childs").append();
   childtbl = $("#tbl_childs").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": data.sqldata,
     "columns": nhd,
@@ -118,14 +124,16 @@ function loadtable() {
 function setfilter(fid) {
   idfilter = fid;
   filter = getfilter(fid);
+  console.log("Set Filter:" + idfilter);
   //cond = fnew.filtersql;
   pconfig.filterid = fid;
-  apppref.setpreference("pageconfig.childs",pconfig);
-  globelreq.send_request({
-           page: 'childs',
-           data: null,
-           header: 'Enfants'
-         });
+  apppref.setpreference("childs",pconfig);
+  parent.app.loadpage('modules/childs/index.html');
+  // globelreq.send_request({
+       //     page: 'childs',
+       //     data: null,
+       //     header: 'Enfants'
+       //   });
   //set_infoheader(filter.description);
   //loadtable();
 }
index ed500d1..b1d898d 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
   <!--<link href="css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
   <!-- <link href="css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="css/jquery.minicolors.css" rel="stylesheet" type="text/css">
-  <link href="css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/jquery.minicolors.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
-    <div class="container-fluid">
+  <nav class="navbar navbar-inverse navbar-fixed-top">
+    <div class="">
+      <ul class="nav navbar-nav navbar-left">
+       <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Crèche</li>
+          
+      <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
+      </ul>
+    </div>
+    
+  </nav>
+    <div class="container-fluid" style="padding-top: 55px;">
       <div id="main" class="main">
         <!--<h2>Crèche</h2>-->
         <br/>
       <!-- end vacancy -->
     </div>
   </div>
-  <script src="js/jquery.min.js" type="text/javascript"></script>
-  <script src="js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="js/jquery.minicolors.min.js" type="text/javascript"></script>
-  <script src="js/datatables.min.js" type="text/javascript"></script>
-  <script src="js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-
-<script src="js/creorga.js" type="text/javascript"></script>
-<script src="js/labels.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.minicolors.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/webpreferences.js" type="text/javascript"></script>
+  <script src="../../js/webdatabase.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
 <script src="js/creche.js" type="text/javascript"></script>
 </body>
 </html>
index fdaebe6..d5dfee1 100644 (file)
@@ -87,7 +87,7 @@ function load_table_workinghours() {
   $("#tbl_workinghours").html("");
   $("#tbl_workinghours").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": whdata.sqldata,
     "columns": headerdata,
@@ -117,7 +117,7 @@ function load_table_groups() {
   $("#tbl_groups").html("");
   var dtbl_groups = $("#tbl_groups").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": grdata.sqldata,
     "columns": headerdata,
@@ -149,7 +149,7 @@ function load_table_planningtemplate() {
   $("#tbl_planningtemplate").html("");
   $("#tbl_planningtemplate").dataTable({
     "language": {
-      "url": "js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": tmpldata.sqldata,
     "columns": headerdata,
index 52753ab..43ae0b2 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
             </div>
           </div>
         </div>  
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
 
-<script src="../../web/js/creorga.js" type="text/javascript"></script>
-<script src="../../web/js/labels.js" type="text/javascript"></script>
+<script src="../../js/creorga.js" type="text/javascript"></script>
+<script src="../../js/labels.js" type="text/javascript"></script>
 <script src="js/forms.js" type="text/javascript"></script>
   </body>
 </html>
index 0a9a794..a585c62 100644 (file)
@@ -44,7 +44,7 @@ function load_table_forms(){
       $("#tbl_forms").html("");
       $("#tbl_forms").dataTable({
         "language": {
-          "url": "js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "data": atbody,
         "columns": headerdata,
index d612c06..5f6082e 100644 (file)
@@ -107,7 +107,7 @@ function load_logactivity_table(){
 
   tbllog = $("#tbl_logactivity").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -168,7 +168,7 @@ function load_logactivity_table(){
 
 function newlogactivity(){
   var nuuid = appdb.generate_uuid();
-  var sql = "INSERT INTO activitylog (uuid,logtitle,logdatefrom,logdateto) VALUES ('"+nuuid+"','nouvelle Activité',date('"+initdate.toLocaleFormat('%Y-%m-%d')+"'),date('"+initdate.toLocaleFormat('%Y-%m-%d')+"'));";
+  var sql = "INSERT INTO activitylog (uuid,logtitle,logdatefrom,logdateto) VALUES ('"+nuuid+"','nouvelle Activité',date('"+initdate.toISOString().substring(0,10)+"'),date('"+initdate.toISOString().substring(0,10)+"'));";
   appdb.dbexec(sql);
   pconfig.activityuuid=nuuid;
   apppref.setpreference("pageconfig.logactivity",pconfig);
index 153f2de..738e15a 100644 (file)
@@ -105,7 +105,7 @@ function load_logactivity_table(){
 
   tbllog = $("#tbl_logactivity").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -159,7 +159,7 @@ function load_logactivity_table(){
 
 function newlogactivity(){
   var nuuid = appdb.generate_uuid();
-  var sql = "INSERT INTO activitylog (uuid,logtitle,logdatefrom,logdateto) VALUES ('"+nuuid+"','nouvelle Activité',date('"+initdate.toLocaleFormat('%Y-%m-%d')+"'),date('"+initdate.toLocaleFormat('%Y-%m-%d')+"'));";
+  var sql = "INSERT INTO activitylog (uuid,logtitle,logdatefrom,logdateto) VALUES ('"+nuuid+"','nouvelle Activité',date('"+initdate.toISOString().substring(0,10)+"'),date('"+initdate.toISOString().substring(0,10)+"'));";
   appdb.dbexec(sql);
   pconfig.activityuuid=nuuid;
   apppref.setpreference("pageconfig.logactivity",pconfig);
index c6f6e2b..e144307 100644 (file)
@@ -32,8 +32,8 @@ function initdata(){
     initdate = new Date(encodeparam(pconfig.logdate, 'date').replace(/'/g, ''));
     $("#logdate").val(pconfig.logdate);
   } else {
-    $("#logdate").val(initdate.toLocaleFormat('%d.%m.%Y'));
-    pconfig.logdate = initdate.toLocaleFormat('%d.%m.%Y');
+    $("#logdate").val(initdate.toISOString().substring(0,10));
+    pconfig.logdate = initdate.toISOString().substring(0,10);
   }
   var childname = "";
   if (pconfig.childuuid){
@@ -56,7 +56,7 @@ function load_logchild_table(){
   if (mins > 0){
     mins = '+' + mins;
   }
-  var sqlchilds = "select distinct(ch.uuid) as uuid, ch.prename || ' ' || ch.surname AS childname, ch.checkservicenumber,gr.grpname,'<span style=\"display:none\">' || cl.lastmodified || '</span>' || strftime('%d.%m.%Y %H:%M',cl.lastmodified,'"+mins+" minutes') as lastmodified,cl.editor as editor from childs ch left join planning pl on (ch.uuid=pl.childuuid) left join groups gr on (pl.groupuuid=gr.uuid) left join childslog cl on (ch.uuid=cl.childuuid and logdate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"')) where date('"+ initdate.toLocaleFormat('%Y-%m-%d')+"') between pl.datebegin and pl.dateend order by childname;"; 
+  var sqlchilds = "select distinct(ch.uuid) as uuid, ch.prename || ' ' || ch.surname AS childname, ch.checkservicenumber,gr.grpname,'<span style=\"display:none\">' || cl.lastmodified || '</span>' || strftime('%d.%m.%Y %H:%M',cl.lastmodified,'"+mins+" minutes') as lastmodified,cl.editor as editor from childs ch left join planning pl on (ch.uuid=pl.childuuid) left join groups gr on (pl.groupuuid=gr.uuid) left join childslog cl on (ch.uuid=cl.childuuid and logdate=date('"+initdate.toISOString().substring(0,10)+"')) where date('"+ initdate.toISOString().substring(0,10)+"') between pl.datebegin and pl.dateend order by childname;"; 
   //dump("SQLChilds:" + sqlchilds + "\n");
   var logdata = appdb.dbquery(sqlchilds);  
   //dump("load childs Log!\n");
@@ -111,7 +111,7 @@ function load_logchild_table(){
 
   tbllog = $("#tbl_logchild").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -153,7 +153,7 @@ $('#tbl_logchild tbody').on( 'click', 'tr', function () {
             $(this).addClass('selected');
             var curchild = $(this).attr('data-child');
             pconfig.childuuid = curchild;
-            var chsel = appdb.dbquery("select lastmodified,editor from childslog where childuuid='"+pconfig.childuuid+"' and logdate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');");
+            var chsel = appdb.dbquery("select lastmodified,editor from childslog where childuuid='"+pconfig.childuuid+"' and logdate=date('"+initdate.toISOString().substring(0,10)+"');");
             //dump(JSON.stringify(chsel) + "\n");
             $("#btnadd").hide();
            $("#btnedit").hide();
@@ -307,7 +307,7 @@ function set_logdate(){
 function onnextdate() {
   var tmpmonth = new Date(encodeparam(pconfig.logdate, 'date').replace(/'/g, ''));
   var nmonth = new Date(tmpmonth.getFullYear(), tmpmonth.getMonth(), tmpmonth.getDate()+1);
-  pconfig.logdate = nmonth.toLocaleFormat('%d.%m.%Y');
+  pconfig.logdate = nmonth.toISOString().substring(0,10);
   apppref.setpreference("pageconfig.logchild", pconfig);
   removeeditorhost();
   globelreq.send_request({
@@ -320,7 +320,7 @@ function onnextdate() {
 function onpreviousdate() {
   var tmpmonth = new Date(encodeparam(pconfig.logdate, 'date').replace(/'/g, ''));
   var nmonth = new Date(tmpmonth.getFullYear(), tmpmonth.getMonth(), tmpmonth.getDate()-1);
-  pconfig.logdate = nmonth.toLocaleFormat('%d.%m.%Y');
+  pconfig.logdate = nmonth.toISOString().substring(0,10);
   apppref.setpreference("pageconfig.logchild", pconfig);
   removeeditorhost();
   globelreq.send_request({
index 4fa664e..e3717ae 100644 (file)
@@ -123,7 +123,7 @@ function load_logmessage_table(){
 
   tbllog = $("#tbl_logcominterne").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -181,7 +181,7 @@ $('#tbl_logcominterne tbody').on( 'click', 'tr', function () {
 
 function newlogmessage(){
   var nuuid = appdb.generate_uuid();
-  var sql = "INSERT INTO messagelog (uuid,logtitle,logdate) VALUES ('"+nuuid+"','nouveau message',date('"+xcurdate.toLocaleFormat('%Y-%m-%d')+"'));";
+  var sql = "INSERT INTO messagelog (uuid,logtitle,logdate) VALUES ('"+nuuid+"','nouveau message',date('"+xcurdate.toISOString().substring(0,10)+"'));";
   //dump(sql + "\n");
   appdb.dbexec(sql);
   pconfig.messageuuid=nuuid;
index dfec7f2..c2526ff 100644 (file)
@@ -121,7 +121,7 @@ function load_logmessage_table(){
 
   tbllog = $("#tbl_logcominterne").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -175,7 +175,7 @@ $('#tbl_logcominterne tbody').on( 'click', 'tr', function () {
 
 function newlogmessage(){
   var nuuid = appdb.generate_uuid();
-  var sql = "INSERT INTO messagelog (uuid,logtitle,logdate) VALUES ('"+nuuid+"','nouveau message',date('"+xcurdate.toLocaleFormat('%Y-%m-%d')+"'));";
+  var sql = "INSERT INTO messagelog (uuid,logtitle,logdate) VALUES ('"+nuuid+"','nouveau message',date('"+xcurdate.toISOString().substring(0,10)+"'));";
   //dump(sql + "\n");
   appdb.dbexec(sql);
   pconfig.messageuuid=nuuid;
index 41fbda3..9e5139f 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: 15px;
    </div>
    
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/summernote.min.js" type="text/javascript"></script>
-  <script src="../../web/js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/logactivity.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index b68930b..929cbe6 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: 15px;
    </div>
    
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/summernote.min.js" type="text/javascript"></script>
-  <script src="../../web/js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/logactivity.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index b8c316b..8e65d08 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: 15px;
    </div>
   
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/summernote.min.js" type="text/javascript"></script>
-  <script src="../../web/js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/logchild.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 79ddc8d..9a10f25 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: 15px;
    </div>
    
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/summernote.min.js" type="text/javascript"></script>
-  <script src="../../web/js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/logcominterne.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 0d82130..a50067a 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/summernote.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/summernote.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: 15px;
    </div>
    
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/summernote.min.js" type="text/javascript"></script>
-  <script src="../../web/js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/summernote.min.js" type="text/javascript"></script>
+  <script src="../../js/lang/summernote-fr-FR.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/logcominterne.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 30fdcc6..81e9bac 100644 (file)
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
   <!--<link href="css/glyphicons-bootstrap.css" rel="stylesheet">-->
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: -86px;
 </head>
 
 <body>
-    <div class="container-fluid" style="padding-top: 5px;">
-    <!--<span class="pagehead" id="pagehead">Présences</span>&nbsp;-->
-    <div class="btn-group" style=" margin-bottom: 10px;">
+  <nav class="navbar navbar-inverse navbar-fixed-top">
+    <div class="">
+      <ul class="nav navbar-nav navbar-left">
+       <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Présences quotidiennes</li>
+          <li style="padding-top: 7px; padding-left: 10px;">
+            <div class="btn-group" style=" margin-bottom: 10px;">
   
-  <div class="input-group date btn-group">
-    <span class="input-group-addon">Date du:</span>
-    <input type="date" class="form-control" value="" style="width: 100px;" limits="1" placeholder="dd.mm.yyyy" id="presday"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
-  </div>
-  <button class="btn btn-primary" onclick="onpreviousday();"><span class="glyphicon glyphicon-chevron-left"></span></button>
-  <button class="btn btn-primary" onclick="onnextday();"><span class="glyphicon glyphicon-chevron-right"></span></button>
-  <!--<button title="imprimer" onclick="print_report();" id="btnprintreport" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> </button>-->
-  <button onclick="setalltopresent();" class="btn btn-success" id="btnreload"><span class="glyphicons glyphicons-check" aria-hidden="true"></span></button>
-  <div class="dropdown btn-group">
-  <button class="btn btn-primary dropdown-toggle" type="button" id="mnulegend" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-   Légende
-    <span class="caret"></span>
-  </button>
-  <ul class="dropdown-menu" aria-labelledby="mnulegend">
-    <li><button class="btn btn-default" style="width: 100%;"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> non configuré</button></li>
-    <li><button class="btn btn-success" style="width: 100%;"><span class="glyphicons glyphicons-ok" aria-hidden="true"></span> présent</button></li>
-    <li><button class="btn btn-warning" style="width: 100%;"><span class="glyphicons glyphicons-stethoscope" aria-hidden="true"></span> malade</button></li>
-    <li><button class="btn btn-danger" style="width: 100%;"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence non verifé</button></li>
-    <li><button class="btn btn-absent2" style="width: 100%;"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence verifié</button></li>
-    <li><button class="btn btn-info" style="width: 100%;"><span class="glyphicon glyphicon-plane" aria-hidden="true"></span> vacances</button></li>
-    <li><button class="btn btn-primary" style="width: 100%;"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> essaie</button></li>
-  </ul>
-</div>
+              <div class="input-group date btn-group">
+                <span class="input-group-addon">Date du:</span>
+                <input type="date" class="form-control" value="" style="width: 120px;" limits="1"  id="presday"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+              </div>
+              <button class="btn btn-primary" onclick="onpreviousday();"><span class="glyphicon glyphicon-chevron-left"></span></button>
+              <button class="btn btn-primary" onclick="onnextday();"><span class="glyphicon glyphicon-chevron-right"></span></button>
+              <!--<button title="imprimer" onclick="print_report();" id="btnprintreport" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> </button>-->
+              <button onclick="setalltopresent();" class="btn btn-success" id="btnreload"><span class="glyphicons glyphicons-check" aria-hidden="true"></span></button>
+              <div class="dropdown btn-group">
+              <button class="btn btn-primary dropdown-toggle" type="button" id="mnulegend" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+               Légende
+                <span class="caret"></span>
+              </button>
+              <ul class="dropdown-menu" aria-labelledby="mnulegend">
+                <li><button class="btn btn-default" style="width: 100%;"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> non configuré</button></li>
+                <li><button class="btn btn-success" style="width: 100%;"><span class="glyphicons glyphicons-ok" aria-hidden="true"></span> présent</button></li>
+                <li><button class="btn btn-warning" style="width: 100%;"><span class="glyphicons glyphicons-stethoscope" aria-hidden="true"></span> malade</button></li>
+                <li><button class="btn btn-danger" style="width: 100%;"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence non verifé</button></li>
+                <li><button class="btn btn-absent2" style="width: 100%;"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence verifié</button></li>
+                <li><button class="btn btn-info" style="width: 100%;"><span class="glyphicon glyphicon-plane" aria-hidden="true"></span> vacances</button></li>
+                <li><button class="btn btn-primary" style="width: 100%;"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> essaie</button></li>
+              </ul>
+            </div>
+                </div>
+      <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
+      </ul>
     </div>
+    
+  </nav>
+    <div class="container-fluid" style="padding-top: 55px;">
+    <!--<span class="pagehead" id="pagehead">Présences</span>&nbsp;-->
+    
     <div>
        <table class="display dataTable cell-border" style="width: 100%;" id="tbldailypresences" role="grid"><thead></thead><tfoot></tfoot><tbody></tbody></table>  
     </div>
             </div>
           </div>
         </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-  
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/webpreferences.js" type="text/javascript"></script>
+  <script src="../../js/webdatabase.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/dailypresences.js" type="text/javascript"></script>
 </body>
 </html>
index dbd734d..c667540 100644 (file)
@@ -6,7 +6,8 @@ var pconfig = {
 };
 var weekdates = null;
 var initdate = new Date();
-var cdate = initdate.toLocaleFormat('%Y-%m-%d');
+var cdate = initdate.toISOString().substring(0,10);
+console.log(cdate);
 var wh= window.innerHeight -190;
 //var groups = {}; 
 var tableheadssql = "";
@@ -71,25 +72,29 @@ function initdata() {
       $('input').on("click", function () {
             $(this).select();
           });
-      var pdata = apppref.getpreference("pageconfig.dailypresences");
-      if (pdata !== '') {
-        pconfig = JSON.parse(pdata);
-      }
-        pconfig.printlayout = 'multilist';
-        apppref.setpreference("pageconfig.dailypresences",pconfig);
+      pconfig = getSearchParams();
+      console.log(pconfig);
+      //var pdata = apppref.getpreference("dailypresences");
+      // if (pdata) {
+      //   pconfig = JSON.parse(pdata);
+      // }
+        // pconfig.printlayout = 'multilist';
+        // apppref.setpreference("dailypresences",pconfig);
 
       if (pconfig.presday) {
-            initdate = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, ''));
+            initdate = new Date(pconfig.presday);
 
             $("#presday").val(pconfig.presday);
       }else{
-            $("#presday").val(initdate.toLocaleFormat('%d.%m.%Y'));
+            $("#presday").val(initdate.toISOString().substring(0,10));
       }
       $("#presday").on("dp.hide", function () {
         change_day();
       });
-      set_infoheader("");
-      cdate = initdate.toLocaleFormat('%Y-%m-%d');
+      //set_infoheader("");
+      console.log("INITDATE read");
+      console.log(initdate);
+      cdate = initdate.toISOString().substring(0,10);
       var daygroupsql = "SELECT ch.uuid as childuuid, ch.prename || ' ' || ch.surname AS childname, "+
             "gr.uuid as groupuuid, gr.grpname as grpname, " +
             "pr.begintime1 as begintime1, pr.endtime1 as endtime1, pr.begintime2 as begintime2, pr.endtime2 as endtime2, pr.status as status, pr.lunch as lunch, "+
@@ -101,7 +106,7 @@ function initdata() {
             "left join planning pl on (pl.childuuid = ch.uuid and date('"+cdate+"') between pl.datebegin and pl.dateend ) "+
             "LEFT JOIN groups gr ON (pl.groupuuid = gr.uuid) "+
             " where ch.entrydate <= date('"+cdate+"') and ch.leavedate >= date('"+cdate+"')";
-       set_infoheader("Date du " + initdate.toLocaleFormat("%d.%m.%Y"));
+       //set_infoheader("Date du " + initdate.toISOString().substring(0,10));
        //jsdump("DAY GROUP SQL");
       //jsdump(daygroupsql);
       var dpresdata = appdb.dbquery(daygroupsql);
@@ -119,6 +124,7 @@ function initdata() {
             
             for (var b in dpdata){
               var row = dpdata[b];
+              //console.log(row);
               var rdata = '<td>'+ row.grpname +'</td><td>'+row.childname+'</td>';
    
               rdata += '<td style="min-width: 350px;max-width: 350px;"><div class="form-inline" id="frm_'+ row.childuuid +'" style="white-space: nowrap; '+ ((row.status != 0 && row.status != 1 && row.status != 5)?"display: none":"")+'">'+
@@ -162,7 +168,7 @@ function initdata() {
       //      //
             $("#tbldailypresences").dataTable({
               "language": {
-                "url": "js/locale/datatable_fr.json"
+                "url": "../../js/locale/datatable_fr.json"
               },
               "paging": false,
               "scrollY": wh + "px",
@@ -211,20 +217,20 @@ function savetime(obj){
                   if (ddltype == 'upd'){
                          
                          if (fdata[0] == "txtbegintime1"){
-                                 psqltime = "update presence set begintime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');";
+                                 psqltime = "update presence set begintime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toISOString().substring(0,10)+"');";
                          } else if (fdata[0] == "txtendtime1"){
-                                 psqltime = "update presence set endtime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');";
+                                 psqltime = "update presence set endtime1="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toISOString().substring(0,10)+"');";
                          } else if (fdata[0] == "txtbegintime2"){
-                                 psqltime = "update presence set begintime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');";
+                                 psqltime = "update presence set begintime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toISOString().substring(0,10)+"');";
                          } else if (fdata[0] == "txtendtime2") {
-                                 psqltime = "update presence set endtime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toLocaleFormat('%Y-%m-%d')+"');";
+                                 psqltime = "update presence set endtime2="+timeval+" where childuuid='"+fdata[1]+"' and daydate=date('"+initdate.toISOString().substring(0,10)+"');";
                          } else {
                         return false;
                          }
                   } else if (ddltype == 'ins'){
                          var xfield = fdata[0].substring(3);
                          var psqltime = "INSERT INTO presence (status,childuuid,daydate,lunch,"+xfield+") VALUES ";
-                         psqltime +=  "(1,'" + fdata[1] + "',date('" + initdate.toLocaleFormat("%Y-%m-%d") + "')," + 
+                         psqltime +=  "(1,'" + fdata[1] + "',date('" + initdate.toISOString().substring(0,10) + "')," + 
                          ((($("#planlunch_" + fdata[1]).exists()) && ($("#planlunch_" + fdata[1]).html() != ''))?"'1'":'null') + ","+timeval+");";
                   }
                   if (psqltime !== ""){
@@ -249,7 +255,7 @@ function setlunch(childuuid,status) {
             lunch = "'0'";
       }
 
-      appdb.dbexec("update presence set lunch=" + lunch + " where daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "') and childuuid='" + childuuid + "';");
+      appdb.dbexec("update presence set lunch=" + lunch + " where daydate=date('" + initdate.toISOString().substring(0,10) + "') and childuuid='" + childuuid + "';");
 
 }
 
@@ -266,12 +272,12 @@ function setpresence(childuuid,newstatus) {
       if ((ddltype=='ins') && (newstatus != 0)){
          
          usql = "INSERT INTO presence (status,childuuid,daydate,lunch) "+
-         "VALUES (" + newstatus + ",'" + childuuid + "',date('" + initdate.toLocaleFormat("%Y-%m-%d") + "')," + 
+         "VALUES (" + newstatus + ",'" + childuuid + "',date('" + initdate.toISOString().substring(0,10) + "')," + 
          ((($("#planlunch_" + childuuid).exists()) && ($("#planlunch_" + childuuid).html() != '') && newstatus==1)?"'1'":'null') + ");";
          
       } else if (newstatus == 0) {
            
-            usql = "DELETE FROM presence where childuuid='" + childuuid + "' and daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "');";
+            usql = "DELETE FROM presence where childuuid='" + childuuid + "' and daydate=date('" + initdate.toISOString().substring(0,10) + "');";
             $("#txtbegintime1_" + childuuid).val('');
             $("#txtendtime1_" + childuuid).val('');
             $("#txtbegintime2_" + childuuid).val('');
@@ -280,7 +286,7 @@ function setpresence(childuuid,newstatus) {
             $("#btn_" +  childuuid+ "_lunch").addClass('btn-default');
       
       } else {
-         var usql = "UPDATE presence SET status=" + newstatus + " where childuuid='" + childuuid + "' and daydate=date('" + initdate.toLocaleFormat("%Y-%m-%d") + "');";
+         var usql = "UPDATE presence SET status=" + newstatus + " where childuuid='" + childuuid + "' and daydate=date('" + initdate.toISOString().substring(0,10) + "');";
          
       }
       appdb.dbexec(usql);
@@ -318,17 +324,12 @@ function setalltopresent(){
 function change_day() {
       pconfig.presday = $('#presday').val();
       
-      apppref.setpreference("pageconfig.dailypresences",pconfig);
-      globelreq.send_request({
-            page: 'dailypresences',
-            module: 'presences',
-            data: null,
-            header: 'Présences par jour'
-      });
+      apppref.setpreference("dailypresences",pconfig);
+      parent.appl.loadpage('modules/presences/dailypresences.html',{presday:pconfig.presday});
 }
 
 function setallpresences() {
-      var prsql = "select daydate,childuuid,status,lunch from presence where daydate = date('" +initdate.toLocaleFormat("%Y-%m-%d") + "');";
+      var prsql = "select daydate,childuuid,status,lunch from presence where daydate = date('" +initdate.toISOString().substring(0,10) + "');";
       var presdata = appdb.dbquery(prsql);
       presdata = presdata.sqldata;
       if (presdata) {
@@ -350,42 +351,44 @@ function setallpresences() {
 
 function onpreviousday() {
   pconfig.presday = $('#presday').val();
-  var tmpweek = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, ''));
-  var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-1);
+  console.log(pconfig);
+  var tmpweek = new Date(pconfig.presday);
+  var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-2);
   if (nweek.getDay() == 0){
-      nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-2);
+      nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-3);
   }
 //   if (nweek.getDay() == 6){
 //       nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-2);
 //   }
-  pconfig.presday = nweek.toLocaleFormat('%d.%m.%Y');
-      apppref.setpreference("pageconfig.dailypresences",pconfig);
-      globelreq.send_request({
-            page: 'dailypresences',
-            module: 'presences',
-            data: null,
-            header: 'Présences par jour'
-      });
+  pconfig.presday = nweek.toISOString().substring(0,10);
+  apppref.setpreference("dailypresences",pconfig);
+  parent.app.loadpage('modules/presences/dailypresences.html',{presday:pconfig.presday});
+      
+      // globelreq.send_request({
+      //       page: 'dailypresences',
+      //       module: 'presences',
+      //       data: null,
+      //       header: 'Présences par jour'
+      // });
 }
 
 function onnextday() {
   pconfig.presday = $('#presday').val();
-  var tmpweek = new Date(encodeparam(pconfig.presday, 'date').replace(/'/g, ''));
-  var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+1);
+  console.log(pconfig);
+  var tmpweek = new Date(pconfig.presday);
+  var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+2);
    if (nweek.getDay() == 0){
-      nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+2);
+      nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+3);
   }
+  console.log("new next Date");
+  console.log(nweek);
 //   if (nweek.getDay() == 6){
 //       nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+3);
 //   }
-  pconfig.presday = nweek.toLocaleFormat('%d.%m.%Y');
-      apppref.setpreference("pageconfig.dailypresences",pconfig);
-      globelreq.send_request({
-            page: 'dailypresences',
-            module: 'presences',
-            data: null,
-            header: 'Présences par jour'
-      });
+pconfig.presday = nweek.toISOString().substring(0,10);
+
+apppref.setpreference("dailypresences",pconfig);
+parent.app.loadpage('modules/presences/dailypresences.html',{presday:pconfig.presday});
 }
 
 function timefocus(obj){
index d3acbf2..0a57ab1 100644 (file)
@@ -6,7 +6,7 @@ var pconfig = {
 };
 var weekdates = null;
 var initdate = new Date();
-var cdate = initdate.toLocaleFormat('%Y-%m-%d');
+var cdate = initdate.toISOString().substring(0,10);
 var wh= window.innerHeight -190;
 var groups = {}; 
 var tableheadssql = "";
@@ -84,25 +84,25 @@ var presenceids = {
 
 function initdata() {
       load_helpers();
-      var pdata = apppref.getpreference("pageconfig.weeklypresences");
-      if (pdata !== '') {
-        pconfig = JSON.parse(pdata);
-      }
+      var pdata = getSearchParams();
+      // if (pdata !== '') {
+      //   pconfig = JSON.parse(pdata);
+      // }
         pconfig.printlayout = 'multilist';
-        apppref.setpreference("pageconfig.weeklypresences",pconfig);
+        apppref.setpreference("weeklypresences",pconfig);
 
       if (pconfig.presweek) {
-            initdate = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, ''));
+            initdate = new Date(pconfig.presweek);
 
             $("#presweek").val(pconfig.presweek);
       }else{
-            $("#presweek").val(initdate.toLocaleFormat('%d.%m.%Y'));
+            $("#presweek").val(initdate.toISOString().substring(0,10));
       }
       $("#presweek").on("dp.hide", function () {
         change_week();
       });
       set_infoheader("");
-      cdate = initdate.toLocaleFormat('%Y-%m-%d');
+      cdate = initdate.toISOString().substring(0,10);
       
       weekdates = appdb.dbquery("select weekdaybegin as mon, date(weekdaybegin,'+1 day') as tue, date(weekdaybegin,'+2 days') as wed, date(weekdaybegin,'+3 days') as thu, date(weekdaybegin,'+4 days') as fri from (select case when strftime('%w','" + cdate + "') = '1' then strftime('%Y-%m-%d','" + cdate + "') else strftime('%Y-%m-%d', date(date('" + cdate + "','-7 days'),'weekday 1')) end as weekdaybegin) ");
 
@@ -171,7 +171,7 @@ function initdata() {
             //
             $("#tblgrp_" + groups[g].groupuuid).dataTable({
               "language": {
-                "url": "js/locale/datatable_fr.json"
+                "url": "../../js/locale/datatable_fr.json"
               },
               "paging": false,
               "scrollY": wh + "px",
@@ -188,11 +188,11 @@ function initdata() {
         var tn =  e.target.toString();
         pconfig.groupuuid = tn.substring(tn.lastIndexOf("#")+8);
         pconfig.activetab = 'tblgrp_' +pconfig.groupuuid;
-        apppref.setpreference("pageconfig.weeklypresences",pconfig);
-       
+        apppref.setpreference("weeklypresences",pconfig);
+      // if ($("#tblgrp_" + pconfig.groupuuid)){
       $("#tblgrp_" + pconfig.groupuuid).dataTable({
               "language": {
-                "url": "js/locale/datatable_fr.json"
+                "url": "../../js/locale/datatable_fr.json"
               },
               "paging": false,
               "scrollY": wh + "px",
@@ -203,15 +203,16 @@ function initdata() {
               "destroy": true
             });
       });
+    //}
       if (!pconfig.groupuuid) {
             $('#tabgrouphead a[href="#tabgrp_' + groups[0].groupuuid + '"]').tab('show');
             pconfig.groupuuid = groups[0].groupuuid;
             pconfig.activetab = '#tabgrp_' + groups[0].groupuuid;
-            apppref.setpreference("pageconfig.weeklypresences",pconfig);
+            apppref.setpreference("weeklypresences",pconfig);
       } else {
             $('#tabgrouphead a[href="#tabgrp_' + pconfig.groupuuid + '"]').tab('show');
             pconfig.activetab = '#tabgrp_' + groups[0].groupuuid;
-            apppref.setpreference("pageconfig.weeklypresences",pconfig);
+            apppref.setpreference("weeklypresences",pconfig);
       }
       
       
@@ -288,7 +289,7 @@ function setalltopresent(){
 function change_week() {
       pconfig.presweek = $('#presweek').val();
       
-      apppref.setpreference("pageconfig.weeklypresences",pconfig);
+      apppref.setpreference("weeklypresences",pconfig);
       globelreq.send_request({
             page: 'weeklypresences',
             module: 'presences',
@@ -330,7 +331,7 @@ function configure_presence(obj) {
   var xx = obj.id.split("_");
   var chid = xx[2];
   //var lblcday=getlabels(xx[3]);
-  var cfgdate = new Date(weekdates[xx[3]]).toLocaleFormat("%Y-%m-%d");
+  var cfgdate = new Date(weekdates[xx[3]]).toISOString().substring(0,10);
   $('#planning > #plandate').val(cfgdate);
   $('#planning > #childuuid').val(chid);
   $('#planning > #planday').val(xx[3]);
@@ -382,8 +383,8 @@ function onpreviousweek() {
   pconfig.presweek = $('#presweek').val();
   var tmpweek = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, ''));
   var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()-7);
-  pconfig.presweek = nweek.toLocaleFormat('%d.%m.%Y');
-      apppref.setpreference("pageconfig.weeklypresences",pconfig);
+  pconfig.presweek = nweek.toISOString().substring(0,10);
+      apppref.setpreference("weeklypresences",pconfig);
       globelreq.send_request({
             page: 'weeklypresences',
             module: 'presences',
@@ -396,8 +397,8 @@ function onnextweek() {
   pconfig.presweek = $('#presweek').val();
   var tmpweek = new Date(encodeparam(pconfig.presweek, 'date').replace(/'/g, ''));
   var nweek = new Date(tmpweek.getFullYear(), tmpweek.getMonth(), tmpweek.getDate()+7);
-  pconfig.presweek = nweek.toLocaleFormat('%d.%m.%Y');
-      apppref.setpreference("pageconfig.weeklypresences",pconfig);
+  pconfig.presweek = nweek.toISOString().substring(0,10);
+      apppref.setpreference("weeklypresences",pconfig);
       globelreq.send_request({
             page: 'weeklypresences',
             module: 'presences',
@@ -424,7 +425,7 @@ function dlgchangegrp(obj) {
     }
   }
   
-  $('#dlg_changegrp #dategrpchange').val(new Date(weekdates.mon).toLocaleFormat('%d.%m.%Y'));
+  $('#dlg_changegrp #dategrpchange').val(new Date(weekdates.mon).toISOString().substring(0,10));
   $('#dlg_changegrp #childuuid').val(chid);
   $('#dlg_changegrp #groupuuid').val(pconfig.groupuuid);
   $('#dlg_changegrp #curgrp').val(pconfig.groupuuid);
index 0ee1f1c..2c1f6c5 100644 (file)
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
   <!--<link href="css/glyphicons-bootstrap.css" rel="stylesheet">-->
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: -86px;
     }
   </style>
 </head>
-
 <body>
-    <div class="container-fluid" style="padding-top: 5px;">
-    <!--<span class="pagehead" id="pagehead">Présences</span>&nbsp;-->
-    <div class="btn-group" style=" margin-bottom: 10px;">
+<nav class="navbar navbar-inverse navbar-fixed-top">
+  <div class="">
+    <ul class="nav navbar-nav navbar-left">
+     <li style="padding-top: 7px; padding-left: 10px; color: #fff;font-size: 24px;">Présences hebdomaire</li>
+        <li style="padding-top: 7px; padding-left: 10px;">
+          <div class="btn-group" style=" margin-bottom: 10px;">
   
-  <div class="input-group week btn-group">
-    <span class="input-group-addon">Semaine du:</span>
-    <input type="date" class="form-control" value="" style="width: 100px;" placeholder="dd.mm.yyyy" id="presweek"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+            <div class="input-group week btn-group">
+              <span class="input-group-addon">Semaine du:</span>
+              <input type="date" class="form-control" value="" style="width: 120px;" placeholder="dd.mm.yyyy" id="presweek"><span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>
+            </div>
+            <button class="btn btn-primary" onclick="onpreviousweek();"><span class="glyphicon glyphicon-chevron-left"></span></button>
+            <button class="btn btn-primary" onclick="onnextweek();"><span class="glyphicon glyphicon-chevron-right"></span></button>
+            <!--<button title="imprimer" onclick="print_report();" id="btnprintreport" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> </button>-->
+            <button onclick="setalltopresent();" class="btn btn-success" id="btnreload"><span class="glyphicons glyphicons-check" aria-hidden="true"></span></button>
+              <div class="dropdown btn-group">
+            <button class="btn btn-primary dropdown-toggle" type="button" id="mnulegend" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+             Légende
+              <span class="caret"></span>
+            </button>
+            <ul class="dropdown-menu" aria-labelledby="mnulegend">
+              <li class="btn-primary"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> non configuré</li>
+              <li class="btn-success"><span class="glyphicons glyphicons-ok" aria-hidden="true"></span> présent</li>
+              <li class="btn-warning"><span class="glyphicons glyphicons-stethoscope" aria-hidden="true"></span> malade</li>
+              <li class="btn-danger"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence non verifé</li>
+              <li class="btn-absent2"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence verifié</li>
+              <li class="btn-info"><span class="glyphicon glyphicon-plane" aria-hidden="true"></span> vacences</li>
+              <li class="btn-primary"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> essaie</li>
+            </ul>
+          </div>
+              </div>  
+    <span class="pagehead" id="pagehead" style="color: #fff"></span></li>
+    </ul>
   </div>
-  <button class="btn btn-primary" onclick="onpreviousweek();"><span class="glyphicon glyphicon-chevron-left"></span></button>
-  <button class="btn btn-primary" onclick="onnextweek();"><span class="glyphicon glyphicon-chevron-right"></span></button>
-  <!--<button title="imprimer" onclick="print_report();" id="btnprintreport" class="btn btn-primary" type="button"><span class="glyphicon glyphicon-print" aria-hidden="true"></span> </button>-->
-  <button onclick="setalltopresent();" class="btn btn-success" id="btnreload"><span class="glyphicons glyphicons-check" aria-hidden="true"></span></button>
-    <div class="dropdown btn-group">
-  <button class="btn btn-primary dropdown-toggle" type="button" id="mnulegend" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
-   Légende
-    <span class="caret"></span>
-  </button>
-  <ul class="dropdown-menu" aria-labelledby="mnulegend">
-    <li class="btn-primary"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> non configuré</li>
-    <li class="btn-success"><span class="glyphicons glyphicons-ok" aria-hidden="true"></span> présent</li>
-    <li class="btn-warning"><span class="glyphicons glyphicons-stethoscope" aria-hidden="true"></span> malade</li>
-    <li class="btn-danger"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence non verifé</li>
-    <li class="btn-absent2"><span class="glyphicons glyphicons-eye-close" aria-hidden="true"></span> absence verifié</li>
-    <li class="btn-info"><span class="glyphicon glyphicon-plane" aria-hidden="true"></span> vacences</li>
-    <li class="btn-primary"><span class="glyphicons glyphicons-circle-question-mark" aria-hidden="true"></span> essaie</li>
-  </ul>
-</div>
-    </div>
-    <div>
-      
-    </div>
+  
+</nav>
+  <div class="container-fluid" style="padding-top: 55px;">
+    <!--<span class="pagehead" id="pagehead">Présences</span>&nbsp;-->
+    
+   
   <div class="tabbable">
             <ul class="nav nav-tabs" id="tabgrouphead">
               
             </div>
           </div>
         </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
-  <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-  
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/webpreferences.js" type="text/javascript"></script>
+  <script src="../../js/webdatabase.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/weeklypresences.js" type="text/javascript"></script>
 </body>
 </html>
index 255bb8c..6180c0c 100644 (file)
@@ -12,7 +12,7 @@
         >
     <script type="application/javascript" src="chrome://creorga/content/js/system.js" />
     <vbox flex="1">
-        <browser id="pdfviewer" flex="1" src="chrome://creorga/web/pdfjs/web/viewer.html" type="content-primary" style="background-color: #fff;"/>
+        <browser id="pdfviewer" flex="1" src="chrome://creorga/pdfjs/viewer.html" type="content-primary" style="background-color: #fff;"/>
     </vbox>
 <script><![CDATA[
       
@@ -34,7 +34,7 @@
         //npath.join("/") +
         //?file=" +abspath file:///
         
-          document.getElementById("pdfviewer").loadURI("chrome://creorga/content/web/pdfjs/web/viewer.html?file=" +abspath, null, 'UTF-8');
+          document.getElementById("pdfviewer").loadURI("chrome://creorga/content/pdfjs/viewer.html?file=" +abspath, null, 'UTF-8');
 
       }
 ]]>
index 933d904..6be1f2f 100644 (file)
@@ -72,7 +72,7 @@ function load_table_presence(){
   $("#tbl_planning").html("");
   var tblplan = $("#tbl_planning").dataTable({
     "language": {
-          "url": "L../../web/js/locale/datatable_fr.json"
+          "url": "L../../js/locale/datatable_fr.json"
         },
     "data": plandata.sqldata,
     "columns": headerdata,
@@ -102,7 +102,7 @@ function load_table_parents() {
   $("#tbl_parents").html("");
   $("#tbl_parents").dataTable({
 "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
     "data": parentsdata.sqldata,
     "columns": headerdata,
@@ -135,7 +135,7 @@ function load_table_refpersons() {
   $("#tbl_refpersons").html("");
   $("#tbl_refpersons").dataTable({
     "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
     "data": refpersonsdata.sqldata,
     "columns": headerdata,
index 8a56aca..e62af3e 100644 (file)
@@ -31,7 +31,7 @@ function initdata(){
 }
 
 function load_table_logchilds(){
-    var logsql = "select  ch.prename || ' ' || ch.surname AS childname, ch.checkservicenumber,lc.logmessage from childs ch left join planning pl on (ch.uuid=pl.childuuid) left join childslog lc on (lc.childuuid=ch.uuid) where date('"+ initdate.toLocaleFormat('%Y-%m-%d')+"') between pl.datebegin and pl.dateend and lc.logmessage is not null and lc.logmessage != '' order by childname;";
+    var logsql = "select  ch.prename || ' ' || ch.surname AS childname, ch.checkservicenumber,lc.logmessage from childs ch left join planning pl on (ch.uuid=pl.childuuid) left join childslog lc on (lc.childuuid=ch.uuid) where date('"+ initdate.toISOString().substring(0,10)+"') between pl.datebegin and pl.dateend and lc.logmessage is not null and lc.logmessage != '' order by childname;";
     
     var logdata = appdb.dbquery(logsql);
     
index 7842314..41e3d7b 100644 (file)
@@ -57,7 +57,7 @@ function initdata(){
             
             $("#tbl_list" + cnt).dataTable({
               "language": {
-                "url": "../../../web/js/locale/datatable_fr.json"
+                "url": "../../../js/locale/datatable_fr.json"
               },
               "paging":   false,
               "ordering": false,
index 30daaf1..bf0b56a 100644 (file)
@@ -81,7 +81,7 @@ function initdata(){
       //}
       // $("#tbl_list").dataTable({
       //  "language": {
-      //    "url": "../../../web/js/locale/datatable_fr.json"
+      //    "url": "../../../js/locale/datatable_fr.json"
       //  },
       //  "paging":   false,
       //  "ordering": false,
index 248f817..77cdde5 100644 (file)
@@ -9,10 +9,10 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <link href="../../web/css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
-    <link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
+    <link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">
     <link href="css/print.css" rel="stylesheet" type="text/css">
 </head>
 
@@ -33,8 +33,8 @@
     <div id="bookdata">
       
     </div>
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/datatables.min.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
index c834e6f..b8e8d4b 100644 (file)
@@ -9,12 +9,12 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <link href="../../web/css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
     <link href="css/print.css" rel="stylesheet" type="text/css">
-    <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+    <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
     <style>
       .panel-daybody {
   height: 10.5vh;
   <table class="table table-bordered" id="cal_month" style="width: 100%;">
     </table>
     
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/datatables.min.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_calendar.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
\ No newline at end of file
index 4e2c4d6..e4001e3 100644 (file)
@@ -9,10 +9,10 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <link href="../../web/css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
-    <link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/jquery.dataTables.min.css" rel="stylesheet" type="text/css">
+    <link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">
     <link href="css/print.css" rel="stylesheet" type="text/css">
 </head>
 
     <!--<div id="print-foot">
       Date: <span id="printdatetime">00.00.0000 00:00</span>&nbsp;&nbsp;-&nbsp;Page: 
     </div>-->
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/datatables.min.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_child.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
\ No newline at end of file
index 3ff81b5..b8e6cd4 100644 (file)
@@ -9,13 +9,13 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <!-- <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css"> -->
-    <link href="../../web/css/glyphicons.css" rel="stylesheet">
-    <!--<link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <!-- <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css"> -->
+    <link href="../../css/glyphicons.css" rel="stylesheet">
+    <!--<link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
     <link href="css/print.css" rel="stylesheet" type="text/css">
-    <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+    <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
     <!--<div id="print-foot">
       Date: <span id="printdatetime">00.00.0000 00:00</span>&nbsp;&nbsp;-&nbsp;Page:&nbsp;
     </div>-->
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-    <!-- <script src="../../web/js/datatables.min.js" type="text/javascript"></script> -->
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+    <!-- <script src="../../js/datatables.min.js" type="text/javascript"></script> -->
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_loaddata.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
index f41f7bf..e2ef030 100644 (file)
@@ -9,7 +9,7 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
     <link href="css/print.css" rel="stylesheet" type="text/css">
     <style>
         .panel-heading {
                 </table>
     </div>
     <div id="div_data" style="margin-top: 20px;"></div>
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <!--<script src="../../web/js/datatables.min.js" type="text/javascript"></script>-->
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <!--<script src="../../js/datatables.min.js" type="text/javascript"></script>-->
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_logchild.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
\ No newline at end of file
index 8b7a52b..61d050f 100644 (file)
@@ -9,11 +9,11 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/glyphicons.css" rel="stylesheet">-->
-    <!--<link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/glyphicons.css" rel="stylesheet">-->
+    <!--<link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
     <link href="css/print.css" rel="stylesheet" type="text/css">
     <style>
       .mpage {
     </table>
     </div>
     </div>
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-    <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-    <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+    <script src="../../js/datatables.min.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_multilist.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
index d4a0374..2129b80 100644 (file)
@@ -9,13 +9,13 @@
     <meta http-equiv="expires" content="0" />
     <meta http-equiv="expires" content="Tue, 01 Jan 1980 1:00:00 GMT" />
     <meta http-equiv="pragma" content="no-cache" />
-    <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-    <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-    <!--<link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">-->
-    <link href="../../web/css/glyphicons.css" rel="stylesheet">
-    <!--<link href="../../web/css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+    <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+    <!--<link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">-->
+    <link href="../../css/glyphicons.css" rel="stylesheet">
+    <!--<link href="../../css/jquery.dataTables_themeroller.css" rel="stylesheet" type="text/css">-->
     <link href="css/print.css" rel="stylesheet" type="text/css">
-    <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+    <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
     <table class="table table-bordered table-striped" style="width: 100%;" id="tbl_list" role="grid">
 
     </table>
-    <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
+    <script src="../../js/jquery.min.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
     <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     <script src="js/print.js" type="text/javascript"></script>
     <script src="js/print_table.js" type="text/javascript"></script>
-    <script src="../../web/js/labels.js" type="text/javascript"></script>
+    <script src="../../js/labels.js" type="text/javascript"></script>
 </body>
 </html>
index 55d8ab4..56c40de 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
 </head>
 
 <body>
           </div>
         </div> -->
       
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/tools.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/multisite.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
\ No newline at end of file
index 980dcc9..491604c 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
 </head>
 
 <body>
 
         </div>
       
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="js/update.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
\ No newline at end of file
index 189aeb3..31995bb 100644 (file)
 
     <script src="node_modules/jquery/dist/jquery.min.js"></script>
     <script src="node_modules/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
-    <script src="js/modules.js"></script>
+    <!-- <script src="js/modules.js"></script> -->
     <script src="js/app.js"></script>
 
   </body>
index 88ff786..33da04b 100644 (file)
@@ -48,7 +48,7 @@ document.addEventListener("keydown", function(e) {
                  currentdb: "0",
                  info: null,
                  loadpage: function(page){
-                         // console.log("load Page => " + page);
+                         console.log("load Page => " + page);
         // console.log(app);
         
                          var pageurl= location.protocol + '://' + location.host + '/apps_dks_lu/hourtrax/' + page + '?' ;
@@ -95,7 +95,7 @@ document.addEventListener("keydown", function(e) {
                          console.log("Params: " + params);
                          console.log("Printfile: " + reportfilepath + '/' + reportfile +'?'+ encodeURIComponent(params));
                          //?file='+ encodeURIComponent(reportfilepath + '/' + reportfile +'?'+ params)
-                         //let modal = window.open('pdfjs/web/viewer.html?file=' + encodeURIComponent('../../' +moduledir + '/' + reportfile));
+                         //let modal = window.open('pdfjs/viewer.html?file=' + encodeURIComponent('../../' +moduledir + '/' + reportfile));
                          let modal = window.open(reportfilepath + '/' + reportfile +'?'+  params);
                          //modal.document.write('<h1>Hello</h1>');
                          //alert("TODO: load print preview!");
@@ -163,6 +163,8 @@ document.addEventListener("keydown", function(e) {
                        url:'http://localhost:6060/app/preferences?page=service&set=' +encodeURIComponent('{"lastpage":"'+ src+'"}') ,
                        //crossDomain: true,
                        success: function (data){
+        
+          console.log(data);
                                        app.info.appconfig=data.result;
                                        
                                },
index 333c09f..fa20c3e 100644 (file)
@@ -9,15 +9,15 @@
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/jquery.minicolors.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/jquery.minicolors.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
   <style>
     #tbl_timetable {
       height: calc(100vh - 90px);
@@ -462,22 +462,22 @@ td.vacday {
         </div>
     
   </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
-  <script src="../../web/js/jquery.minicolors.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.minicolors.min.js" type="text/javascript"></script>
   <script src="js/rrule.js" type="text/javascript"></script>
   <script src="js/nlp.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/calactivity.js" type="text/javascript"></script>
 </body>
 </html>
index 7de44c4..d38587c 100644 (file)
@@ -9,16 +9,16 @@
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/calendar.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/calendar.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
           </div> 
         </div>-->
   </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="js/rrule.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   <script src="js/calvacancy.js" type="text/javascript"></script>
 </body>
 </html>
index c8378cb..70f0840 100644 (file)
@@ -185,7 +185,7 @@ function load_calendar_data() {
   }
   var sql = "SELECT cal.uuid, cal.datefrom, cal.dateto, '<div style=\"display:none;\">' || strftime('%Y%m%d',cal.datefrom) ||'</div>' || strftime('%d.%m.%Y',cal.datefrom) AS tbldatefrom ,strftime('%Y%m%d',cal.datefrom) AS strdatefrom, strftime('%Y%m%d',cal.dateto)   AS strdateto,cal.timefrom, cal.timeto, cal.description, cal.location, cal.color, cal.freq, '[\"' || GROUP_CONCAT(sp.staffuuid,'\",\"') || '\"]' as staffuuid, GROUP_CONCAT(coalesce(st.surname,'') || ' ' || coalesce(st.prename,''), '<br/>' ) as staffnames ,'[\"' || GROUP_CONCAT(st.color,'\",\"') || '\"]' as staffcolors from eventcalendar cal " + ((pconfig.filterstaff)?"":" left ") +" join staffplanning sp on (cal.uuid=sp.eventcalendaruuid " + ((pconfig.filterstaff)?" AND sp.staffuuid in ('"+ pconfig.filterstaff.join("','") + "')":"") +") left join staff st on (sp.staffuuid=st.uuid) "+
 
-  " where (cal.datefrom between '" + initdate.toLocaleFormat('%Y-%m-%d') + "' and '" + lastmonthday.toLocaleFormat('%Y-%m-%d') + "' and (cal.dateto >= '" + initdate.toLocaleFormat('%Y-%m-%d') + "' or cal.dateto is null)) or (cal.dateto between '" + initdate.toLocaleFormat('%Y-%m-%d') + "' and '" + lastmonthday.toLocaleFormat('%Y-%m-%d') + "' and cal.datefrom < '" + initdate.toLocaleFormat('%Y-%m-%d') + "') or ((cal.datefrom <= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') and ((cal.dateto >= '" + lastmonthday.toLocaleFormat('%Y-%m-%d') + "') or cal.dateto is null)) "+ ((where.length > 0)?" AND (" + where.join(" or ") + ")":"")+"  group by cal.uuid order by cal.datefrom,cal.dateto;";
+  " where (cal.datefrom between '" + initdate.toISOString().substring(0,10) + "' and '" + lastmonthday.toISOString().substring(0,10) + "' and (cal.dateto >= '" + initdate.toISOString().substring(0,10) + "' or cal.dateto is null)) or (cal.dateto between '" + initdate.toISOString().substring(0,10) + "' and '" + lastmonthday.toISOString().substring(0,10) + "' and cal.datefrom < '" + initdate.toISOString().substring(0,10) + "') or ((cal.datefrom <= '" + firstmonday.toISOString().substring(0,10) + "') and ((cal.dateto >= '" + lastmonthday.toISOString().substring(0,10) + "') or cal.dateto is null)) "+ ((where.length > 0)?" AND (" + where.join(" or ") + ")":"")+"  group by cal.uuid order by cal.datefrom,cal.dateto;";
 
   var caldata = appdb.dbquery(sql);
 
@@ -199,7 +199,7 @@ function load_calendar_data() {
     var freq = caldata[c].freq;
     if (freq !== '') {
       freq += ';DTSTART='+caldata[c].strdatefrom + 'T000000Z';
-      if ((caldata[c].dateto !== '') && (caldata[c].dateto <= lastmonthday.toLocaleFormat('%Y-%m-%d'))){
+      if ((caldata[c].dateto !== '') && (caldata[c].dateto <= lastmonthday.toISOString().substring(0,10))){
         freq += ';UNTIL='+caldata[c].strdateto + 'T000000Z';
       }else {
         freq += ';UNTIL='+lastmonthday.toLocaleFormat('%Y%m%d') + 'T000000Z';
@@ -217,9 +217,9 @@ function load_calendar_data() {
       continue;
     }
     for (var r in rall){
-      //dump(rall[r].toLocaleFormat('%Y-%m-%d') + " " +  initdate.toLocaleFormat('%Y-%m-%d')+ " " + lastmonthday.toLocaleFormat('%Y-%m-%d') + "\n" );
-      if ((rall[r].toLocaleFormat('%Y-%m-%d') >= initdate.toLocaleFormat('%Y-%m-%d')) && (rall[r].toLocaleFormat('%Y-%m-%d') <= lastmonthday.toLocaleFormat('%Y-%m-%d'))) {
-        //dump("OK " + rall[r].toLocaleFormat('%Y-%m-%d') + " " +  initdate.toLocaleFormat('%Y-%m-%d')+ " " + lastmonthday.toLocaleFormat('%Y-%m-%d') + "\n" );
+      //dump(rall[r].toISOString().substring(0,10) + " " +  initdate.toISOString().substring(0,10)+ " " + lastmonthday.toISOString().substring(0,10) + "\n" );
+      if ((rall[r].toISOString().substring(0,10) >= initdate.toISOString().substring(0,10)) && (rall[r].toISOString().substring(0,10) <= lastmonthday.toISOString().substring(0,10))) {
+        //dump("OK " + rall[r].toISOString().substring(0,10) + " " +  initdate.toISOString().substring(0,10)+ " " + lastmonthday.toISOString().substring(0,10) + "\n" );
         if (!eventdates[caldata[c].uuid][rall[r].toLocaleFormat('%d')]) {
           eventdates[caldata[c].uuid][rall[r].toLocaleFormat('%d')] = 1;
         }
@@ -239,7 +239,7 @@ function load_timetable() {
   var totalstaff = [];
   var weekrange = {};
   var ltd = "";
-  var bdate = new Date(initdate.toLocaleFormat('%Y-%m-%d'));
+  var bdate = new Date(initdate.toISOString().substring(0,10));
   var enddate = new Date(initdate.getFullYear(),initdate.getMonth() + 1, 0);
   while (bdate <= enddate){
     if (!weekrange[parseInt(bdate.toLocaleFormat('%W'))]) {
@@ -447,7 +447,7 @@ function sortHTML(id, sel, sortvalue) {
 
 function load_vacancy_data() {
   var sql = "select vacancydate,strftime('%Y%m%d',vacancydate) as strvacancydate,vacancydateto,case when vacancydateto is not null then strftime('%Y%m%d',vacancydateto) else null end as strvacancydateto,vacancydescription from vacancy " +
-  "where (vacancydate between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and (vacancydateto >= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "' and '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "' and vacancydate < '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') or ((vacancydate <= '" + firstmonday.toLocaleFormat('%Y-%m-%d') + "') and (vacancydateto >= '" + lastsunday.toLocaleFormat('%Y-%m-%d') + "')) " +
+  "where (vacancydate between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and (vacancydateto >= '" + firstmonday.toISOString().substring(0,10) + "' or vacancydateto is null)) or (vacancydateto between '" + firstmonday.toISOString().substring(0,10) + "' and '" + lastsunday.toISOString().substring(0,10) + "' and vacancydate < '" + firstmonday.toISOString().substring(0,10) + "') or ((vacancydate <= '" + firstmonday.toISOString().substring(0,10) + "') and (vacancydateto >= '" + lastsunday.toISOString().substring(0,10) + "')) " +
   "order by vacancydate,vacancydateto;";
   var caldata = appdb.dbquery(sql);
   caldata = caldata.sqldata;
@@ -465,11 +465,11 @@ function load_vacancy_data() {
     var rall = rule.all();
     
     for (var r in rall){
-      if ((rall[r].toLocaleFormat('%Y-%m-%d') >= initdate.toLocaleFormat('%Y-%m-%d')) && (rall[r].toLocaleFormat('%Y-%m-%d') <= lastmonthday.toLocaleFormat('%Y-%m-%dT00:00.000Z'))) {
+      if ((rall[r].toISOString().substring(0,10) >= initdate.toISOString().substring(0,10)) && (rall[r].toISOString().substring(0,10) <= lastmonthday.toLocaleFormat('%Y-%m-%dT00:00.000Z'))) {
 
-        $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead").addClass(((caldata[c].vacancydateto == '')?'calvacancy':'calvacrange'));
-        $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead > div#vacname").remove();
-        $("#" + linkpos["" + rall[r].toLocaleFormat('%Y-%m-%d')] + " > div.panel-day > div.panel-dayhead").prepend('<div id="vacname" class="calvacheader">'+ caldata[c].vacancydescription + "</div>&nbsp;");
+        $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead").addClass(((caldata[c].vacancydateto == '')?'calvacancy':'calvacrange'));
+        $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead > div#vacname").remove();
+        $("#" + linkpos["" + rall[r].toISOString().substring(0,10)] + " > div.panel-day > div.panel-dayhead").prepend('<div id="vacname" class="calvacheader">'+ caldata[c].vacancydescription + "</div>&nbsp;");
       }
     }
     } catch (ex){
@@ -620,7 +620,7 @@ function dlg_event(uuid, type) {
       activityuuid:'',
       location: '',
       color: '',
-      datefrom:new Date().toLocaleFormat("%d.%m.%Y"),
+      datefrom:new Date().toISOString().substring(0,10),
       dateto:'',
       staffuuid:'',
       timefrom: '00:00',
@@ -932,7 +932,7 @@ function get_vacancy_data() {
   if ((pconfig.filterstaff) && (pconfig.filterstaff.length > 0)) {
     where = " st.uuid in ('"+ pconfig.filterstaff.join("','") + "')";
   }
-  var sql = getvacancysql(new Date(initdate.toLocaleFormat("%Y-%m-%d")),new Date(lastmonthday.toLocaleFormat("%Y-%m-%d")),where);
+  var sql = getvacancysql(new Date(initdate.toISOString().substring(0,10)),new Date(lastmonthday.toISOString().substring(0,10)),where);
   vacdata = appdb.dbquery(sql);
   vacdata = vacdata.sqldata;
   
@@ -952,12 +952,12 @@ function get_vacancy_data() {
       //dump("ERROR! loading data!" + ex  + " FREQ:" + freq + "\n");
     }
     for (var r in vacrall){
-      if ((vacrall[r].toLocaleFormat('%Y-%m-%d') >= initdate.toLocaleFormat('%Y-%m-%d')) && (vacrall[r].toLocaleFormat('%Y-%m-%d') <= lastmonthday.toLocaleFormat('%Y-%m-%dT00:00.000Z'))) {
-        if (!vacpos[vacrall[r].toLocaleFormat('%Y-%m-%d')]) {
-          vacpos[vacrall[r].toLocaleFormat('%Y-%m-%d')] = {'staffuuid':[vacdata[v].staffuuid],color:[vacdata[v].color]};
+      if ((vacrall[r].toISOString().substring(0,10) >= initdate.toISOString().substring(0,10)) && (vacrall[r].toISOString().substring(0,10) <= lastmonthday.toLocaleFormat('%Y-%m-%dT00:00.000Z'))) {
+        if (!vacpos[vacrall[r].toISOString().substring(0,10)]) {
+          vacpos[vacrall[r].toISOString().substring(0,10)] = {'staffuuid':[vacdata[v].staffuuid],color:[vacdata[v].color]};
         }else {
-          vacpos[vacrall[r].toLocaleFormat('%Y-%m-%d')]['staffuuid'].push(vacdata[v].staffuuid);
-          vacpos[vacrall[r].toLocaleFormat('%Y-%m-%d')]['color'].push(vacdata[v].color);
+          vacpos[vacrall[r].toISOString().substring(0,10)]['staffuuid'].push(vacdata[v].staffuuid);
+          vacpos[vacrall[r].toISOString().substring(0,10)]['color'].push(vacdata[v].color);
         }
       }
     }
@@ -972,14 +972,14 @@ function getvacancysql(datefrom2,dateto2,where) {
       
       for (var cdate2=datefrom2;cdate2<=dateto2;cdate2.setDate(cdate2.getDate() +1)){
             if ((cdate2.getDay() != 0)){
-                  sqldays.push ("SELECT date('" + cdate2.toLocaleFormat('%Y-%m-%d') +"') as daydate");
+                  sqldays.push ("SELECT date('" + cdate2.toISOString().substring(0,10) +"') as daydate");
             }
       }
 
       sqlret += sqldays.join(' UNION ALL ') + " )) oph " +
       "ON (oph.daydate BETWEEN vc.datefrom AND vc.dateto) " +
         "WHERE oph.daydate IS NOT NULL and strftime('%w',oph.daydate) not in ('0') " +
-        "AND oph.daydate NOT IN ( SELECT vacancydate FROM vacancy WHERE vacancydateto IS NULL AND vacancydate BETWEEN '"+initdate.toLocaleFormat("%Y-%m-%d") + "' AND '" + dateto2.toLocaleFormat("%Y-%m-%d")+"') " +
+        "AND oph.daydate NOT IN ( SELECT vacancydate FROM vacancy WHERE vacancydateto IS NULL AND vacancydate BETWEEN '"+initdate.toISOString().substring(0,10) + "' AND '" + dateto2.toISOString().substring(0,10)+"') " +
         ((where != '')?" AND " + where + " ":"") +
         " GROUP BY vc.uuid ORDER BY st.uuid,vc.datefrom, vc.dateto; ";
       return sqlret;
@@ -1015,7 +1015,7 @@ function getdaterangesql(){
   var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
   for (var cdt = bdate; cdt <= bend; cdt.setDate(cdt.getDate() + 1)) {
     //if ((cdt.getDay() != 0)){
-      adays.push("select date('" + cdt.toLocaleFormat('%Y-%m-%d') + "') as daydate");
+      adays.push("select date('" + cdt.toISOString().substring(0,10) + "') as daydate");
     //}
     
   }
@@ -1027,10 +1027,10 @@ function getstaffactivity() {
   var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
   var actsql = "select dd.daydate as daydate, '[\"' || GROUP_CONCAT(ev.staffuuid,'\",\"') || '\"]' AS staffuuid,'[\"' || GROUP_CONCAT(st.color,'\",\"') || '\"]' as staffcolor,'[\"' || GROUP_CONCAT(coalesce(substr(st.surname,1,2),'') || ' ' || coalesce(substr(st.prename,1,2),''), '\",\"' ) || '\"]' as staffnames, ev.timefrom as timefrom,ev.timeto as timeto, ev.description as description,ev.color as eventcolor,ev.uuid as eventuuid from ( "+
 "select sp.staffuuid,ec.description,ec.color,ec.uuid, "+
-"case when datefrom < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  datefrom end as datefrom, "+
-"case when dateto > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else dateto end as dateto, "+
+"case when datefrom < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  datefrom end as datefrom, "+
+"case when dateto > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else dateto end as dateto, "+
 "timefrom,timeto  "+
-"from eventcalendar ec join staffplanning sp on (ec.uuid=sp.eventcalendaruuid) where datefrom <= '"+bend.toLocaleFormat("%Y-%m-%d")+"' and (dateto is null or dateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) ev "+
+"from eventcalendar ec join staffplanning sp on (ec.uuid=sp.eventcalendaruuid) where datefrom <= '"+bend.toISOString().substring(0,10)+"' and (dateto is null or dateto >= '"+bdate.toISOString().substring(0,10)+"')) ev "+
 "join staff st on (ev.staffuuid=st.uuid) "+
 "join ("+ drsql+") dd  "+
 "on (dd.daydate between ev.datefrom and ev.dateto) ";
@@ -1059,10 +1059,10 @@ function getstaffvacancy() {
   var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
   var vacsql = "select dd.daydate as daydate,staffuuid, timefrom,timeto,type from ( "+
 "select staffuuid, "+
-"case when datefrom < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  datefrom end as datefrom, "+
-"case when dateto > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else dateto end as dateto, "+
+"case when datefrom < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  datefrom end as datefrom, "+
+"case when dateto > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else dateto end as dateto, "+
 "timefrom,timeto, type "+
-"from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toLocaleFormat("%Y-%m-%d")+"') and (dateto is null or dateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) vc "+
+"from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toISOString().substring(0,10)+"') and (dateto is null or dateto >= '"+bdate.toISOString().substring(0,10)+"')) vc "+
 "join ("+drsql+") dd  "+
 "on (dd.daydate between vc.datefrom and vc.dateto); ";
 var wh = [];
@@ -1085,7 +1085,7 @@ function get_vacancydays(){
 "select vacancydate,  "+
 "case when vacancydateto is null then vacancydate else vacancydateto end as vacancydateto, "+
 "case when vacancydateto is null then 'vacancy' else 'holiday' end as type, "+
-"vacancydescription from vacancy where (vacancydate between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and (vacancydateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and vacancydate < '"+bdate.toLocaleFormat("%Y-%m-%d")+"') or ((vacancydate <= '"+bdate.toLocaleFormat("%Y-%m-%d")+"') and (vacancydateto >= '"+bend.toLocaleFormat("%Y-%m-%d")+"')) order by vacancydate,vacancydateto) vc "+
+"vacancydescription from vacancy where (vacancydate between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and (vacancydateto >= '"+bdate.toISOString().substring(0,10)+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and vacancydate < '"+bdate.toISOString().substring(0,10)+"') or ((vacancydate <= '"+bdate.toISOString().substring(0,10)+"') and (vacancydateto >= '"+bend.toISOString().substring(0,10)+"')) order by vacancydate,vacancydateto) vc "+
 "join ( "+ drsql +") dd  "+
 "on (dd.daydate between vc.vacancydate and vc.vacancydateto) group by dd.daydate order by daydate;";
   var hdata = appdb.dbquery(sql);
index 50f5394..5cdd506 100644 (file)
@@ -62,7 +62,7 @@ function initdata() {
   //     var tmpdt1 = encodeparam($('#frmeditvacancy #datefrom').val(),'date');
   //     var nd = new Date(tmpdt1.replace(/'/g,''));
   //     var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff);
-  //     $('#frmeditvacancy #dateto').val(xd.toLocaleFormat("%d.%m.%Y"));
+  //     $('#frmeditvacancy #dateto').val(xd.toISOString().substring(0,10));
   //     var tmpdt2 = encodeparam($('#frmeditvacancy #dateto').val(),'date');
   //     if (tmpdt1 > tmpdt2) {
   //       $('#btn_save_vacancy').attr("disabled","1");
@@ -114,8 +114,8 @@ function load_calendar_month() {
   for (var cdate = firstmonday; cdate <= lastsunday; cdate.setDate(cdate.getDate() + 1)) {
     dayident = "day" + weeknum + cdate.toLocaleFormat('%w');
 
-    linkpos[cdate.toLocaleFormat('%Y-%m-%d')] = "day" + weeknum + cdate.toLocaleFormat('%w');
-    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toLocaleFormat('%Y-%m-%d');
+    linkpos[cdate.toISOString().substring(0,10)] = "day" + weeknum + cdate.toLocaleFormat('%w');
+    posday["day" + weeknum + cdate.toLocaleFormat('%w')] = cdate.toISOString().substring(0,10);
     $("#" + dayident + " > div.panel-day > div.panel-dayhead").html(cdate.toLocaleFormat('%d'));
 
     if (cdate.getMonth() == cmonth) {
@@ -143,7 +143,7 @@ function load_calendar_month() {
 function load_calendar_data() {
   var where = "";
 
-  var sql = getmonthlysql(new Date(initdate.toLocaleFormat("%Y-%m-%d")),new Date(lastmonthday.toLocaleFormat("%Y-%m-%d")),where);
+  var sql = getmonthlysql(new Date(initdate.toISOString().substring(0,10)),new Date(lastmonthday.toISOString().substring(0,10)),where);
   //jsdump("monthlysql");
   //jsdump(sql);
   $("#tbl_timetable").html("");
@@ -219,7 +219,7 @@ function load_calendar_data() {
 function setcrechevacancydata(thead,hdays){
        var vacdata = getstaffvacancy();
                //dump(JSON.stringify(vacdata) + "\n" );
-      var staffsql = "SELECT uuid,prename || ' ' || substr(surname,1,2) as fullname,color from staff where entrydate <= date('"+initdate.toLocaleFormat('%Y-%m-%d')+"','+1 month','-1 day') and (exitdate is null or exitdate >= date('"+initdate.toLocaleFormat('%Y-%m-%d')+"'));";
+      var staffsql = "SELECT uuid,prename || ' ' || substr(surname,1,2) as fullname,color from staff where entrydate <= date('"+initdate.toISOString().substring(0,10)+"','+1 month','-1 day') and (exitdate is null or exitdate >= date('"+initdate.toISOString().substring(0,10)+"'));";
          //dump("SSQL:" + staffsql + "\n");
       var staffnames = appdb.dbquery(staffsql);   
          staffnames = staffnames.sqldata;
@@ -283,14 +283,14 @@ function getmonthlysql(datefrom2,dateto2,where) {
       
       for (var cdate2=datefrom2;cdate2<=dateto2;cdate2.setDate(cdate2.getDate() +1)){
             if ((cdate2.getDay() != 0) && (cdate2.getDay() != 6)){
-                  sqldays.push ("SELECT date('" + cdate2.toLocaleFormat('%Y-%m-%d') +"') as daydate");
+                  sqldays.push ("SELECT date('" + cdate2.toISOString().substring(0,10) +"') as daydate");
             }
       }
 
       sqlret += sqldays.join(' UNION ALL ') + " )) oph " +
       "ON (oph.daydate BETWEEN vc.datefrom AND vc.dateto) " +
         "WHERE oph.daydate IS NOT NULL and strftime('%w',oph.daydate) not in ('0') " +
-        "AND oph.daydate NOT IN ( SELECT vacancydate FROM vacancy WHERE vacancydateto IS NULL AND vacancydate BETWEEN '"+initdate.toLocaleFormat("%Y-%m-%d") + "' AND '" + dateto2.toLocaleFormat("%Y-%m-%d")+"') " +
+        "AND oph.daydate NOT IN ( SELECT vacancydate FROM vacancy WHERE vacancydateto IS NULL AND vacancydate BETWEEN '"+initdate.toISOString().substring(0,10) + "' AND '" + dateto2.toISOString().substring(0,10)+"') " +
         ((where != '')?" AND " + where + " ":"") +
         " GROUP BY vc.uuid ORDER BY st.uuid,vc.datefrom, vc.dateto; ";
       return sqlret;
@@ -364,8 +364,8 @@ function set_creche(){
 //     var evdata = {
 //       uuid: '0',
 //       description: '',
-//       datefrom:new Date().toLocaleFormat("%d.%m.%Y"),
-//       dateto:new Date().toLocaleFormat("%d.%m.%Y"),
+//       datefrom:new Date().toISOString().substring(0,10),
+//       dateto:new Date().toISOString().substring(0,10),
 //       staffuuid:'',
 //       timefrom: '00:00',
 //       hours: '1',
@@ -589,7 +589,7 @@ function onselcreche(){
          var bend = new Date(initdate.getFullYear(), initdate.getMonth() + 1, 0);
          for (var cdt = bdate; cdt <= bend; cdt.setDate(cdt.getDate() + 1)) {
            if ((cdt.getDay() != 0)){
-             adays.push("select date('" + cdt.toLocaleFormat('%Y-%m-%d') + "') as daydate");
+             adays.push("select date('" + cdt.toISOString().substring(0,10) + "') as daydate");
            }
            
          }
@@ -603,7 +603,7 @@ function onselcreche(){
                "select vacancydate,  "+
                "case when vacancydateto is null then vacancydate else vacancydateto end as vacancydateto, "+
                "case when vacancydateto is null then 'vacancy' else 'holiday' end as type, "+
-               "vacancydescription from vacancy where (vacancydate between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and (vacancydateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toLocaleFormat("%Y-%m-%d")+"' and '"+bend.toLocaleFormat("%Y-%m-%d")+"' and vacancydate < '"+bdate.toLocaleFormat("%Y-%m-%d")+"') or ((vacancydate <= '"+bdate.toLocaleFormat("%Y-%m-%d")+"') and (vacancydateto >= '"+bend.toLocaleFormat("%Y-%m-%d")+"')) order by vacancydate,vacancydateto) vc "+
+               "vacancydescription from vacancy where (vacancydate between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and (vacancydateto >= '"+bdate.toISOString().substring(0,10)+"' or vacancydateto is null)) or (vacancydateto between '"+bdate.toISOString().substring(0,10)+"' and '"+bend.toISOString().substring(0,10)+"' and vacancydate < '"+bdate.toISOString().substring(0,10)+"') or ((vacancydate <= '"+bdate.toISOString().substring(0,10)+"') and (vacancydateto >= '"+bend.toISOString().substring(0,10)+"')) order by vacancydate,vacancydateto) vc "+
                "join ( "+ drsql +") dd  "+
                "on (dd.daydate between vc.vacancydate and vc.vacancydateto) group by dd.daydate order by daydate;";
       var hdata = appdb.dbquery(sql);
@@ -623,10 +623,10 @@ function onselcreche(){
                  var vacsql = "SELECT vc.uuid as uuid, dd.daydate AS daydate, vc.staffuuid as staffuuid, printf(\"%.2f\",CASE WHEN vc.timefrom=vc.timeto THEN CAST(st.weekhours/5.00 AS REAL) ELSE CAST((CAST(strftime(\"%s\",vc.timeto) AS REAL)- CAST(strftime(\"%s\",vc.timefrom) AS REAL))/3600.00 AS REAL) END) AS hours, vc.type as type" +
                  " from ( "+
                "select uuid,staffuuid, "+
-               "case when datefrom < '"+bdate.toLocaleFormat("%Y-%m-%d")+"' then '"+bdate.toLocaleFormat("%Y-%m-%d")+"' else  datefrom end as datefrom, "+
-               "case when dateto > '"+bend.toLocaleFormat("%Y-%m-%d")+"' then '"+bend.toLocaleFormat("%Y-%m-%d")+"' else dateto end as dateto, "+
+               "case when datefrom < '"+bdate.toISOString().substring(0,10)+"' then '"+bdate.toISOString().substring(0,10)+"' else  datefrom end as datefrom, "+
+               "case when dateto > '"+bend.toISOString().substring(0,10)+"' then '"+bend.toISOString().substring(0,10)+"' else dateto end as dateto, "+
                "timefrom,timeto, type "+
-               "from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toLocaleFormat("%Y-%m-%d")+"') and (dateto is null or dateto >= '"+bdate.toLocaleFormat("%Y-%m-%d")+"')) vc "+
+               "from vacancycalendar where (datefrom is null or datefrom <= '"+bend.toISOString().substring(0,10)+"') and (dateto is null or dateto >= '"+bdate.toISOString().substring(0,10)+"')) vc "+
                "join ("+drsql+") dd  "+
                "on (dd.daydate between vc.datefrom and vc.dateto) left join staff st on (st.uuid=vc.staffuuid); ";
                  //dump("VACCALSQL:" +vacsql + "\n");
index 156ecf5..608a744 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/jquery.minicolors.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/jquery.minicolors.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
         
         
       </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <script src="../../web/js/jquery.minicolors.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.minicolors.min.js" type="text/javascript"></script>
   <script src="../calendar/js/rrule.js" type="text/javascript"></script>
   <script src="../calendar/js/nlp.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/encrypt.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/coworker.js" type="text/javascript"></script>
 </body>
 </html>
index e3fc868..1c77190 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/jquery.minicolors.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/jquery.minicolors.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
 </head>
 
 <body>
         
         
       </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="../calendar/js/rrule.js" type="text/javascript"></script>
   <script src="../calendar/js/nlp.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/encrypt.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/coworker_basic.js" type="text/javascript"></script>
 </body>
 </html>
index 16a3e98..48223e7 100644 (file)
@@ -74,7 +74,7 @@ function initdata() {
       var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date');
       var nd = new Date(tmpdt1.replace(/'/g,''));
       var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff);
-      $('#frmeditvacancy #vacdateto').val(xd.toLocaleFormat("%d.%m.%Y"));
+      $('#frmeditvacancy #vacdateto').val(xd.toISOString().substring(0,10));
       var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date');
       if (tmpdt1 > tmpdt2) {
         $('#btn_save_vacancy').attr("disabled","1");
@@ -410,8 +410,8 @@ function dlg_vacancy(uuid, type) {
     var evdata = {
       uuid: 0,
       description: '',
-      vacdatefrom:new Date().toLocaleFormat("%d.%m.%Y"),
-      vacdateto:new Date().toLocaleFormat("%d.%m.%Y"),
+      vacdatefrom:new Date().toISOString().substring(0,10),
+      vacdateto:new Date().toISOString().substring(0,10),
       staffuuid:[pconfig.uuid],
       timefrom: '00:00',
       hours: maxdayhours,
@@ -584,7 +584,7 @@ function set_selectyears() {
 //   var dt = new Date(pconfig.year,11,31);
 //   var yd = [];
 //   for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){
-//     yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate");
+//     yd.push("select date('"+dx.toISOString().substring(0,10)+"') as daydate");
 //   }
 //   vcalcsql += yd.join(" UNION ") + 
 //   ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+pconfig.year+"-01-01' and '"+pconfig.year+"-12-31' and vacancydateto is null) " +
@@ -802,7 +802,7 @@ function dlg_event(uuid, type) {
       activityuuid:'',
       location: '',
       color: '',
-      datefrom:new Date().toLocaleFormat("%d.%m.%Y"),
+      datefrom:new Date().toISOString().substring(0,10),
       dateto:'',
       staffuuid: pconfig.uuid,
       timefrom: '00:00',
@@ -1135,7 +1135,7 @@ function getlastyearsrest(){
     
     var yd = [];
     for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){
-      yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate");
+      yd.push("select date('"+dx.toISOString().substring(0,10)+"') as daydate");
     }
     vcalcrestsql += yd.join(" UNION ") + 
     ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+df.getFullYear()+"-01-01' and '"+dt.getFullYear()+"-12-31' and vacancydateto is null) " +
index ed14da0..af58ae8 100644 (file)
@@ -74,7 +74,7 @@ pconfig.vacancyunit = "hours";
       var tmpdt1 = encodeparam($('#frmeditvacancy #vacdatefrom').val(),'date');
       var nd = new Date(tmpdt1.replace(/'/g,''));
       var xd = new Date(nd.getFullYear(),nd.getMonth(),nd.getDate() + curdatediff);
-      $('#frmeditvacancy #vacdateto').val(xd.toLocaleFormat("%d.%m.%Y"));
+      $('#frmeditvacancy #vacdateto').val(xd.toISOString().substring(0,10));
       var tmpdt2 = encodeparam($('#frmeditvacancy #vacdateto').val(),'date');
       if (tmpdt1 > tmpdt2) {
         $('#btn_save_vacancy').attr("disabled","1");
@@ -406,8 +406,8 @@ function dlg_vacancy(uuid, type) {
     var evdata = {
       uuid: 0,
       description: '',
-      vacdatefrom:new Date().toLocaleFormat("%d.%m.%Y"),
-      vacdateto:new Date().toLocaleFormat("%d.%m.%Y"),
+      vacdatefrom:new Date().toISOString().substring(0,10),
+      vacdateto:new Date().toISOString().substring(0,10),
       staffuuid:pconfig.uuid,
       timefrom: '00:00',
       hours: '1',
@@ -633,7 +633,7 @@ function calcvacancy() {
     var dt = new Date(pconfig.year,11,31);
     var yd = [];
     for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){
-      yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate");
+      yd.push("select date('"+dx.toISOString().substring(0,10)+"') as daydate");
     }
     vcalcsql += yd.join(" UNION ") + 
     ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+pconfig.year+"-01-01' and '"+pconfig.year+"-12-31' and vacancydateto is null) " +
@@ -836,7 +836,7 @@ function getlastyearsrest(){
     
     var yd = [];
     for (var dx=df;dx<=dt;dx.setDate(dx.getDate()+1)){
-      yd.push("select date('"+dx.toLocaleFormat('%Y-%m-%d')+"') as daydate");
+      yd.push("select date('"+dx.toISOString().substring(0,10)+"') as daydate");
     }
     vcalcrestsql += yd.join(" UNION ") + 
     ") yd where strftime('%w',daydate) not in ('0','6') and daydate not in (select vacancydate from vacancy where vacancydate between '"+df.getFullYear()+"-01-01' and '"+dt.getFullYear()+"-12-31' and vacancydateto is null) " +
index 6fb9b4b..abac30e 100644 (file)
@@ -23,7 +23,7 @@ function loadtable() {
   $("#tbl_staff").html("");
   tblstaff = $("#tbl_staff").dataTable({
     "language": {
-      "url": "../../web/js/locale/datatable_fr.json"
+      "url": "../../js/locale/datatable_fr.json"
     },
     "data": data.sqldata,
     "columns": headerdata,
index ca49f1c..cca94fc 100644 (file)
@@ -27,7 +27,7 @@ function loadtable_staff() {
          $("#tbl_staff").html("");
          tblstaff = $("#tbl_staff").dataTable({
            "language": {
-             "url": "../../web/js/locale/datatable_fr.json"
+             "url": "../../js/locale/datatable_fr.json"
            },
            "data": data.sqldata,
            "columns": headerdata,
index 7c05876..2e786ce 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/style.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/style.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
   
   <link rel="shortcut icon" href="img/favicon.png">
 </head>
         </div>
         </div>
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/staff.js" type="text/javascript"></script>
 </body>
 </html>
index 4688e9b..e7f96b1 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/style.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/style.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css"><!-- Fav and touch icons -->
   
   <link rel="shortcut icon" href="img/favicon.png">
 </head>
         </div>
     </div>
   
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/encrypt.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/staff_basic.js" type="text/javascript"></script>
 </body>
 </html>
index ac28392..5b0349a 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: -30px;
    </div>
    
    </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/accountingyear.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 959fef4..481a9ac 100644 (file)
@@ -256,7 +256,7 @@ accsql += ") GROUP BY childuuid,calweek) GROUP BY childuuid,calweek) px    " +
   winh = window.innerHeight -130 - ((pconfig.filteramount.length == 0)? 80:pconfig.filteramount.length*16);
   tblacc = $("#tbl_accounting").dataTable({
         "language": {
-          "url": "../../web/js/locale/datatable_fr.json"
+          "url": "../../js/locale/datatable_fr.json"
         },
         "paging":   false,
         "ordering": true,
@@ -441,7 +441,7 @@ function getsqldaterange(ydb,yde) {
   var sday = new Array();
   for (var cdate=dtydb;cdate<=dtyde;cdate.setDate(cdate.getDate() +1)){
             if ((cdate.getDay() != 0) && (cdate.getDay() != 6)){
-                sday.push("select date('" + cdate.toLocaleFormat('%Y-%m-%d') +"') as daydate");
+                sday.push("select date('" + cdate.toISOString().substring(0,10) +"') as daydate");
             }
   }
   
index 31afc11..dd724d6 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <!-- <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css"> -->
-  <!-- <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <!-- <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css"> -->
+  <!-- <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <!-- <style type="text/css">
     .dataTables_filter {
       margin-top: -30px;
                 <button aria-hidden="true" data-dismiss="modal" class="btn">Non</button> <button onclick="delete_accounting();" class="btn btn-primary">Oui</button>
               </div>
             </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/datatables.min.js" type="text/javascript"></script> -->
-  <script src="../../web/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/datatables.min.js" type="text/javascript"></script> -->
+  <script src="../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/accountingchild.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 82bbd27..3c7a7c7 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <style type="text/css">
     .dataTables_filter {
       margin-top: -30px;
     
    </div>
     
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/js/datatables.min.js" type="text/javascript"></script>
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../js/datatables.min.js" type="text/javascript"></script>
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/checkservice.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index f99c500..ea726c9 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <!--<link href="../../web/css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
-  <!--<link href="../../web/css/datatables.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">-->
-  <link href="../../web/vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <!-- <link href="../../web/css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <!--<link href="../../css/bootstrap-theme.min.css" rel="stylesheet" type="text/css">-->
+  <!--<link href="../../css/datatables.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/dataTables.bootstrap.min.css" rel="stylesheet" type="text/css">-->
+  <link href="../../vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <!-- <link href="../../css/bootstrap-timepicker.min.css" rel="stylesheet" type="text/css"> -->
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
   <!-- <style type="text/css">
     .dataTables_filter {
       margin-top: -30px;
             </div>
           </div>
   </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/datatables.min.js" type="text/javascript"></script> -->
-  <script src="../../web/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/datatables.min.js" type="text/javascript"></script> -->
+  <script src="../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/accounting.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 8ed17da..f5eb071 100644 (file)
@@ -47,7 +47,7 @@ function initdata(){
     $("#accmonth").val(initdate.toLocaleFormat('%m.%Y'));
     pconfig.accmonth=initdate.toLocaleFormat('%m.%Y');
   }
-  cdate = initdate.toLocaleFormat('%Y-%m-%d');
+  cdate = initdate.toISOString().substring(0,10);
   var cmonth = initdate.getMonth() +1;
   mpdffile = system.getDirectory(appdb.dbFile.path) +  system.sep() + 'imports' + system.sep() + crecheuuid +system.sep() + initdate.getFullYear() + "." + cmonth + ".pdf"; 
        if (system.fileexists(mpdffile)){
@@ -150,7 +150,7 @@ function getdaterangesql(xmonthmin,xmonthmax){
          var bend = new Date(xmonthmax);
          for (var cdt = bdate; cdt <= bend; cdt.setDate(cdt.getDate() + 1)) {
            if ((cdt.getDay() !== 0) ){
-             adays.push("select date('" + cdt.toLocaleFormat('%Y-%m-%d') + "') as daydate");
+             adays.push("select date('" + cdt.toISOString().substring(0,10) + "') as daydate");
            }
            
          }
@@ -359,7 +359,7 @@ function generatecsv(){
        ") xx " +
        "WHERE xx.daydate BETWEEN '"+monthmin+"' AND '"+monthmax+"') GROUP BY childuuid,calweek) GROUP BY childuuid,calweek) px " +
        "ON ( pch.childuuid=px.childuuid) GROUP BY pch.childuuid,px.calweek ) ttl " +
-       "LEFT JOIN accounting acc ON ( ttl.childuuid = acc.childuuid AND acc.accmonth='"+ initdate.toLocaleFormat("%Y-%m-%d")+ "') where calweek is not null) group by childuuid,calweek) d1 ";
+       "LEFT JOIN accounting acc ON ( ttl.childuuid = acc.childuuid AND acc.accmonth='"+ initdate.toISOString().substring(0,10)+ "') where calweek is not null) group by childuuid,calweek) d1 ";
        accsql +=  " on (d1.idjoin=planned.idjoin) order by planned.childuuid,planned.pcalweek;";
 
         dump("EXPSQL:" + accsql + "\n");
index 06f2684..d7221dc 100644 (file)
   <meta http-equiv="expires" content="0" />
   <meta http-equiv="expires" content="Tue, 01 Jan 1970 1:00:00 GMT" />
   <meta http-equiv="pragma" content="no-cache" />
-  <link href="../../web/css/bootstrap.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/glyphicons.css" rel="stylesheet" type="text/css">
-  <link href="../../web/css/creorga.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap.min.css" rel="stylesheet" type="text/css">
+  <link href="../../vendor/bootstrap-table/bootstrap-table.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-datetimepicker.min.css" rel="stylesheet" type="text/css">
+  <link href="../../css/bootstrap-multiselect.css" rel="stylesheet" type="text/css">
+  <link href="../../css/glyphicons.css" rel="stylesheet" type="text/css">
+  <link href="../../css/creorga.css" rel="stylesheet" type="text/css">
 
 </head>
 
 
               
             </div>
-  <script src="../../web/js/jquery.min.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
-  <script src="../../web/vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
-  <!-- <script src="../../web/js/datatables.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/moment-with-locales.js" type="text/javascript"></script>
-  <script src="../../web/js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
-  <!-- <script src="../../web/js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
-  <script src="../../web/js/bootstrap-multiselect.js" type="text/javascript"></script>
+  <script src="../../js/jquery.min.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/bootstrap-table.min.js" type="text/javascript"></script>
+  <script src="../../vendor/bootstrap-table/locale/bootstrap-table-fr-FR.js" type="text/javascript"></script> 
+  <!-- <script src="../../js/datatables.min.js" type="text/javascript"></script> -->
+  <script src="../../js/moment-with-locales.js" type="text/javascript"></script>
+  <script src="../../js/bootstrap-datetimepicker.min.js" type="text/javascript"></script>
+  <!-- <script src="../../js/bootstrap-timepicker.min.js" type="text/javascript"></script> -->
+  <script src="../../js/bootstrap-multiselect.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/navigation.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/preferences.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/system.js" type="text/javascript"></script>
   <script src="chrome://creorga/content/js/database.js" type="text/javascript"></script>
     
-  <script src="../../web/js/labels.js" type="text/javascript"></script>
+  <script src="../../js/labels.js" type="text/javascript"></script>
   <script src="js/accountingopeninvoice.js" type="text/javascript"></script>
-  <script src="../../web/js/creorga.js" type="text/javascript"></script>
+  <script src="../../js/creorga.js" type="text/javascript"></script>
   
 </body>
 </html>
index 971998e..fb596af 100644 (file)
@@ -1 +1,11 @@
-{"db":[{"Creche Un der Atert":"underatert"},{"Le Chat Potté":"lechatpotte"}]}
+{
+    "db": [
+        {
+            "name":"Creche Un der Atert","dbname":"underatert"
+        },
+        {
+            "name":"Le Chat Potté","dbname":"lechatpotte"
+        }
+    ],
+    "modules":{"childs":{"delete":true}}
+}
\ No newline at end of file
diff --git a/data/db/lechatpotte.sqlite b/data/db/lechatpotte.sqlite
new file mode 100644 (file)
index 0000000..57f400b
Binary files /dev/null and b/data/db/lechatpotte.sqlite differ
diff --git a/data/db/underatert.sqlite b/data/db/underatert.sqlite
new file mode 100644 (file)
index 0000000..4cb5ad3
Binary files /dev/null and b/data/db/underatert.sqlite differ
diff --git a/data/user/kilian.childs.json b/data/user/kilian.childs.json
new file mode 100644 (file)
index 0000000..aec1b1a
--- /dev/null
@@ -0,0 +1 @@
+{"printlayout":"list"}
\ No newline at end of file
diff --git a/data/user/kilian.dailypresences.json b/data/user/kilian.dailypresences.json
new file mode 100644 (file)
index 0000000..8a9d540
--- /dev/null
@@ -0,0 +1 @@
+{"presday":"2019-04-02","db":"underatert"}
\ No newline at end of file
diff --git a/data/user/kilian.pageconfig.childs.json b/data/user/kilian.pageconfig.childs.json
new file mode 100644 (file)
index 0000000..a2db8f7
--- /dev/null
@@ -0,0 +1 @@
+{"printlayout":"list","order":[[0,"asc"]],"idfilter":0}
\ No newline at end of file
diff --git a/data/user/kilian.pageconfig.weeklypresences.json b/data/user/kilian.pageconfig.weeklypresences.json
new file mode 100644 (file)
index 0000000..e5e3f9f
--- /dev/null
@@ -0,0 +1 @@
+{"groupuuid":"9cd95522-acab-a24a-87ee-74a2f0825401","printlayout":"multilist","presweek":null,"activetab":"tblgrp_9cd95522-acab-a24a-87ee-74a2f0825401"}
\ No newline at end of file
diff --git a/data/user/kilian.service.json b/data/user/kilian.service.json
new file mode 100644 (file)
index 0000000..a3e4d89
--- /dev/null
@@ -0,0 +1 @@
+{"lastpage":"rga/modules/creche/creche.html"}
\ No newline at end of file
diff --git a/data/user/kilian.weeklypresences.json b/data/user/kilian.weeklypresences.json
new file mode 100644 (file)
index 0000000..ba871e5
--- /dev/null
@@ -0,0 +1 @@
+{"presweek":null,"activetab":"tblgrp_null","groupuuid":"null","printlayout":"multilist"}
\ No newline at end of file