--- /dev/null
+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
--- /dev/null
+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
+
--- /dev/null
+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
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= ();
-#!/usr/bin/env perl
+#!/usr/bin/perl
use strict;
use CGI;
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){
}
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);
}
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";
# 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});
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())
{
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;}
$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";
.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
<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
</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>
-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) {
}
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));
},
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){
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);
}
//app.getinfo();
$(document).ready(function() {
//TODO: get userrights
- //app.getinfo();
+ app.getinfo();
app.loadsites();
// if (app.info.appconfig == null){
// // $("#mnubtn_print").prop("disabled",true);
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){
//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() == "") {
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')
}else {
$('#' + dateobjid).datetimepicker({
locale: 'fr',
- format: "DD.MM.YYYY",
+ format: "YYYY-MM-DD",
});
}
//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],
});
}
function set_infoheader(strinfoheader) {
- globelreq.send_request({page:'infoheader',header:strinfoheader});
+ $("#pagehead").html(strinfoheader)
+ //globelreq.send_request({page:'infoheader',header:strinfoheader});
}
var globelreq = {
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:[]};
//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");
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));
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;
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;
}
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);
// 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){
});
},
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){
},
async:false
});
-
+ return retdata;
},
getforeignpreference: function(key){
var ret = null;
<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>
<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>
<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> 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> 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> 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> 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>
}
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;";
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;";
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");
}
}
// 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");
// 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; ";
// 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");
"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");
// 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; ";
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");
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);
}
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>');
}
}
}
$("#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 == '') {
$('#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();
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");
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;
//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> ");
+ $("#" + 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> ");
}
}
}
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 = {};
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; ";
<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>
<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>
<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>
</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> Filtre <span class="caret"></span></button>
- <ul class="dropdown-menu" id="cmb_childsfilter">
-
- </ul>
- </div>
- </div><!-- -->
- <!--<span class="pagehead" id="pagehead">Enfants - <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> Filtre <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" >-->
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,'');
$("#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,
$("#tbl_refperson").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
//"data": refpersondata.sqldata,
//"columns": headerdata,
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,
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,
$("#tbl_files").html("");
$("#tbl_files").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"data": atbody,
"columns": headerdata,
//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);
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");
$("#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,
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();
}
<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>
$("#tbl_workinghours").html("");
$("#tbl_workinghours").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"data": whdata.sqldata,
"columns": headerdata,
$("#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,
$("#tbl_planningtemplate").html("");
$("#tbl_planningtemplate").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"data": tmpldata.sqldata,
"columns": headerdata,
<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>
$("#tbl_forms").html("");
$("#tbl_forms").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"data": atbody,
"columns": headerdata,
tbllog = $("#tbl_logactivity").dataTable({
"language": {
- "url": "../../web/js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": true,
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);
tbllog = $("#tbl_logactivity").dataTable({
"language": {
- "url": "../../web/js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": true,
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);
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){
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");
tbllog = $("#tbl_logchild").dataTable({
"language": {
- "url": "../../web/js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": true,
$(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();
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({
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({
tbllog = $("#tbl_logcominterne").dataTable({
"language": {
- "url": "../../web/js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": true,
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;
tbllog = $("#tbl_logcominterne").dataTable({
"language": {
- "url": "../../web/js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": true,
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;
<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>
<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>
<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>
<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>
<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>
<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> -->
- <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> -->
+
<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>
};
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 = "";
$('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, "+
"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);
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":"")+'">'+
// //
$("#tbldailypresences").dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"scrollY": wh + "px",
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 !== ""){
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 + "';");
}
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('');
$("#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);
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) {
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){
};
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 = "";
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) ");
//
$("#tblgrp_" + groups[g].groupuuid).dataTable({
"language": {
- "url": "js/locale/datatable_fr.json"
+ "url": "../../js/locale/datatable_fr.json"
},
"paging": false,
"scrollY": wh + "px",
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",
"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);
}
function change_week() {
pconfig.presweek = $('#presweek').val();
- apppref.setpreference("pageconfig.weeklypresences",pconfig);
+ apppref.setpreference("weeklypresences",pconfig);
globelreq.send_request({
page: 'weeklypresences',
module: 'presences',
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]);
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',
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',
}
}
- $('#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);
<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> -->
- <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> -->
+
+
<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>
>
<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[
//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');
}
]]>
$("#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,
$("#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,
$("#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,
}
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);
$("#tbl_list" + cnt).dataTable({
"language": {
- "url": "../../../web/js/locale/datatable_fr.json"
+ "url": "../../../js/locale/datatable_fr.json"
},
"paging": false,
"ordering": false,
//}
// $("#tbl_list").dataTable({
// "language": {
- // "url": "../../../web/js/locale/datatable_fr.json"
+ // "url": "../../../js/locale/datatable_fr.json"
// },
// "paging": false,
// "ordering": false,
<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="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>
<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
<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> - 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
<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> - Page:
</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>
<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
<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>
<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>
<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
<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
<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>
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 + '?' ;
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!");
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;
},
<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);
</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>
<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>
}
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);
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';
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;
}
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'))]) {
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;
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> ");
+ $("#" + 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> ");
}
}
} catch (ex){
activityuuid:'',
location: '',
color: '',
- datefrom:new Date().toLocaleFormat("%d.%m.%Y"),
+ datefrom:new Date().toISOString().substring(0,10),
dateto:'',
staffuuid:'',
timefrom: '00:00',
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;
//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);
}
}
}
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;
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");
//}
}
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) ";
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 = [];
"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);
// 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");
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) {
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("");
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;
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;
// 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',
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");
}
}
"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);
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");
<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>
<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>
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");
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,
// 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) " +
activityuuid:'',
location: '',
color: '',
- datefrom:new Date().toLocaleFormat("%d.%m.%Y"),
+ datefrom:new Date().toISOString().substring(0,10),
dateto:'',
staffuuid: pconfig.uuid,
timefrom: '00:00',
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) " +
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");
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',
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) " +
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) " +
$("#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,
$("#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,
<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>
<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>
<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>
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,
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");
}
}
<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>
<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>
<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>
$("#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)){
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");
}
}
") 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");
<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>
-{"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
--- /dev/null
+{"printlayout":"list"}
\ No newline at end of file
--- /dev/null
+{"presday":"2019-04-02","db":"underatert"}
\ No newline at end of file
--- /dev/null
+{"printlayout":"list","order":[[0,"asc"]],"idfilter":0}
\ No newline at end of file
--- /dev/null
+{"groupuuid":"9cd95522-acab-a24a-87ee-74a2f0825401","printlayout":"multilist","presweek":null,"activetab":"tblgrp_9cd95522-acab-a24a-87ee-74a2f0825401"}
\ No newline at end of file
--- /dev/null
+{"lastpage":"rga/modules/creche/creche.html"}
\ No newline at end of file
--- /dev/null
+{"presweek":null,"activetab":"tblgrp_null","groupuuid":"null","printlayout":"multilist"}
\ No newline at end of file