Commit graph

680 commits

Author SHA1 Message Date
Benjamin Renard
9ad151312e - LSsession :: relationCanAcces() && relationCanEdit()
-> Ajout d'un paramètre $LSobject au lieu de supposé que le type est celui
		 de authUserObject
	-> Modification en conséquence dans les autres fichiers
2008-10-08 14:50:48 +00:00
Benjamin Renard
08862558a7 - LSeegroup
-> Erreur de manipulation lors du dernier commit
2008-10-08 13:44:04 +00:00
Benjamin Renard
4c2a4efa7b - LSeegroup :
-> Utilisation des méthodes standardisées de manipulation des relations entre
		 LSldapObject
2008-10-08 13:42:42 +00:00
Benjamin Renard
82f715b3d9 - LSldapObject :
-> Ecriture de méthode standardisés pour la mise en relation de LSldapObject
		 entre eux.
2008-10-08 13:24:18 +00:00
Benjamin Renard
ea63665516 - LSformElement_text_field.js
-> Ajout d'une possibilite de mise en majuscule ou en minuscule
	-> Ajout d'une possibilite de replacement d'espace/tabulation
2008-10-07 16:10:44 +00:00
Benjamin Renard
ee3f348c88 - LSformElement_text_field.js : Bouton auto-génération manuelle pour tout les
champs dont l'auro génération est configurée
2008-10-07 15:48:48 +00:00
Benjamin Renard
c3a0b951f8 - LSattribute : Correction bug suit au commit précédent 2008-10-07 15:23:06 +00:00
Benjamin Renard
fa30a8c7f0 - LSformRule : Uniformisation du passage de paramètres dans la variable 'params'
et non pas 'param'
2008-10-07 15:16:33 +00:00
Benjamin Renard
213e779c31 - LSform_regex : Correction de la duplication du code d'erreur 301 2008-10-07 15:06:40 +00:00
Benjamin Renard
aba34f8439 - LSmail : input type text plutot qu'un select lorsqu'il y a qu'un seul mail
proposé
- LSformRule_email : possibilité de verifier si le domaine répond à une regex
- checkEmail() : ajout d'un paramètre en deuxième position pour tester le 
	domaine
2008-10-07 14:59:23 +00:00
Benjamin Renard
d5cb294d65 - LSformElement_select_object && LSattr_html_select_object
-> Correction d'un bug : inversion du cas par défaut de la méthode 
		 LSattr_html_select_object::refreshForm() (!$fromDNs)
2008-10-07 12:53:43 +00:00
Benjamin Renard
8b4d76a4f8 - LSformElement :: setValueFromPostData()
-> La méthode n'invoque plus la méthode refreshForm() de LSattr_html
- LSformElement_select_object :
	-> Surcharge de la méthode setValueFromPostData() pour invoquer la méthode
		 refreshForm() de LSattr_html_select_object
- LSattr_html_select_object :
	-> La méthode refreshForm() prend un deuxième paramètres pour passer ou non
		 en mode fromDNs (True par défaut)
2008-10-07 12:44:49 +00:00
Benjamin Renard
691b8fd26e - LSformElement_select_object && LSattr_html_select_object :
-> Refonte du cas de selection d'objet avec récupération d'une valeur autre
		 que le DN : 
			- Durant tout le traitement des données, les DN des objets sont manipulés
			- C'est seulement lors de la méthode exportValue() que les donnéés à 
				stocker sont récupérées.
2008-10-07 12:17:50 +00:00
Benjamin Renard
ea15514109 - LSdefault :: LSdebug
-> Modification de LSdebugHidden (a -> span)
	-> Lors d'un double clic sur la fenetre de debug -> fermeture
- LSattribute : Correction de la méthode getFormVal()
2008-10-06 15:53:52 +00:00
Benjamin Renard
f8b0a443db - LSaddon :: suppan : Correction de la méthode replaceAccents() 2008-10-06 15:18:17 +00:00
Benjamin Renard
172abab8a7 - LSaddon :: supann : Correction de la valeur de la constante
LS_SUPANN_FIRSTNAME_ATTR
2008-10-06 14:57:22 +00:00
Benjamin Renard
596aa41434 - LSattr_html_select_object : Correction d'un bug dans la méthode getValue()
- Lattribute : Correction d'un bug dans la méthode getFormVal()
2008-10-06 14:53:32 +00:00
Benjamin Renard
7560e44586 - modify.php : Pas de redirect lorsque le debug est activé 2008-10-06 13:46:41 +00:00
Benjamin Renard
3ebcb1b2fd - LSaddons : Correction des erreurs de génération CN & displayName 2008-10-06 13:36:41 +00:00
Benjamin Renard
d42aef9e4d - LSform : Correction de bugs d'affichage
- LSattr_html_select_object : Correction d'un problème de chargement de de type
  d'objet
- LSformElement_select : Affichage d'un texte lorsque l'attribut n'a pas de
  valeur
- LSformElement_text :
  -> Ajout d'une possibilité de suppression des accents lors de l'autogénération
  -> Ajout d'un bouton pour l'autogénération manuelle
- LSaddons.supann : Ajout d'un addon pour le support Suppan
- LSsmoothbox : Affichage d'une image durant l'ouverture d'une page
2008-10-06 13:11:14 +00:00
Benjamin Renard
f7f35108eb - LSformElement_select_object
-> Création d'un LSformElement_select_object_field pour séparer le traitement
     des champs entre eux.
  -> Utilisation des LSjsConfig[] au lieu de balise HTML pour la configuration.
  -> Ajout de la possibilité d'un attribut mono-valué et réaction à la variable
     de configuration multiple. Attention par défaut multiple vaut 0 et donc
     LSformElement_select_object passe en mono-valué.
- LSselect
  -> Correction d'un bug : Utilisation de la constante NB_LSOBJECT_LIST_SELECT
     plutôt que de NB_LSOBJECT_LIST
  -> Ajout d'une possibilité de sélection multiple ou simple en reaction a la
     variable GET multiple
- LSrelation : Modification pour activer la sélection multiple de LSselect
2008-09-28 11:05:02 +00:00
Benjamin Renard
ab7120b589 - LSform :
-> Redimentionnement des dt pour laisser plus de place aux labels
- LSformElement_boolean, LSformElement_select : Ajout d'un bouton clear
- L'ajout des boutons javascript a été déporté dans le code javascript :
  -> LSformElement_url
  -> LSformElement_mail
  -> LSformElement_rss
  -> LSformElement_xmp
- LSformElement_select_object
  -> Activation du champ de formulaire directement dans le javascript
2008-09-27 00:55:58 +00:00
Benjamin Renard
b88fca55cb - LStips : Ajout de bulles d'aide
-> help_info ajouté dans la configuration des attributs
- LSeepeople : Ajout d'une bulle d'aide pour loginshell
- LSdebug : Renomage des fonctions attachées :
    - debug() -> LSdebug()
    - debug_pring() -> LSdebug_print()
  -> Nétoyage des debug dans le code et renomage quand nécessaire.
  -> Ajout d'une fonctionnalité de dump de variable à LSdebug()
- LSsession : Correction d'un problème de chemin pour les scripts JS
2008-09-26 18:03:56 +00:00
Benjamin Renard
1f51f7601b - LSform : correction de la méthode checkRequired() qui prennait mal en compte
les chaines "0"
- Ajout du type de donnée boolean :
  - class.LSattr_ldap_boolean.php
  - class.LSattr_html_boolean.php
  - class.LSformElement_boolean.php
- LSeepeople : Utilisation du type boolean pour l'attribut loginshell
2008-09-26 13:57:11 +00:00
Benjamin Renard
d75a8823c2 - LSview : ajout de input hidden pour contenir les informations du type et du
DN de l'objet affiché.
- LSmail : Ajout d'une fonctionalité d'envoie de mail depuis l'interface.
  -> Modification de LSformElement_mail pour utiliser cette fonctionalité
  -> Agrémentation du fichier index_ajax.php
  -> Ajout d'un LSaddons :: mail
- LSsession :
  -> Ajout d'une méthode getEmailSender()
  -> Utilisation de la méthode getEmailSender() pour la partie de récupération
     de mot de passe
  -> Revue des méthodes loadLSaddon() et loadLSaddons()
- LSconfirmBox :
  -> Ajout de binding onClose() et onCancel()
- LSsmoothbox :
  -> Déport de la creation de la structure dans la méthode build()
  -> Suppression du principe de refreshElement au profit de binding sur les
     évenements onClose, onValid et onCancel
      -> Ajout des méthodes addEvent() et fireEvent()
      -> Suppression de la méthode setRefreshElement()
  -> Ajout de la méthode asNew() pour remettre l'objet dans son état d'origine
     pour l'utilisation simultané de l'objet par plusieurs autres
  -> Vérification lors du clique sur le closeBtn qu'une précédente confirmBox
     n'est pas déjà ouvert
  -> La méthode close() ne fait plus que fermer la LSsmoothbox et les méthodes
     valid() et cancel() gère les cas de fermeture et lance la méthode close()
  -> Ajout de la méthode openHTML() pour l'ouverture de la LSsmoothbox avec un
     code HTML passé en paramètre
  -> Ajout de la méthode setOption()
- LSrelation & LSformElement_select_object :
  -> Utilisation du principe d'évenement de la LSsmoothbox plutôt que du
     refreshElement
  -> Utilisation de la méthode asNew() pour eviter tout problème de concurence
- LSdefault : Ajout de la méthode displayInfos()
2008-09-25 15:15:33 +00:00
Benjamin Renard
0c28c1f921 - LSformElement : Correction des bugs de chargement des fichiers CSS
- base.css : min-height sur #main
2008-09-10 12:30:31 +00:00
Benjamin Renard
6f26e868b5 - LSform :
-> Ajout d'un espace entre deux champs de formulaire d'un même attribut
	-> Uniformisation de la non-appartenance des li a la classe LSform
2008-09-09 17:26:15 +00:00
Benjamin Renard
22e6e9ad77 - LSformElement :
- Création d'un fichier css pour chacun des types
	- Ajout du type ssh_key
2008-09-09 17:10:55 +00:00
Benjamin Renard
1ada7889e9 - login.tpl : Correction d'un oubli pour le support de LSinfos 2008-09-09 15:59:05 +00:00
Benjamin Renard
721eddd92f - LSsession :
-> Ajout de la methode redirect()
  -> Ajout d'une possibilité d'affichage d'infos à au chargement de la page
    -> methode addInfo()
    -> modification de la methode displayTemplate() en conséquence
    -> modification de LSdefault.js et LSdefault.css en conséquence
- remove.php
  -> Redirection vers la liste des objets du même type que l'objet supprimé
     après sa suppression avec une demande de rafraichissement.
- modify.php
  -> Redirection vers la fiche de l'objet après sa modification avec affichage
     d'un message. (Feature Request #1702)
- LSaddons :
  -> FTP : support FTP a travers la librairie PEAR :: Net_FTP
  -> Maildir : Pour la création et la suppresion de la Maildir d'un utilisateur
  -> Posix : Ajout de la méthode createHomeDirectoryByFTP() et correction d'un
     bug dans l'affichage des erreurs
  -> Samba : Correction d'un bug dans l'affichage des erreurs
- LSldapObject :
  -> Ajout d'une possibilité de trigger personnalisé à travers la configuration
     d'un LSobjet :
      -> after_create
      -> after_delete
  -> Renomage du trigger before_save et after_save en before_modify et
     after_modify.
2008-09-09 15:48:07 +00:00
Benjamin Renard
5b7570fe12 - config.inc.php :
-> Ajout d'une configuration Multi-niveau utilisant LSeecompany
- LSeecompany :
  -> Refonte
  -> Définition dans le schéma LSexample
- LSldapOject :
  -> container_auto_create : auto création des containers de LSobject dans les
  LSobjects définissant les subDn
  -> Ajout de trigger :
    -> Avant suppression beforeDelete() et après afterDelete()
      -> Gestion des LSrelations définies et ayant une méthode remove_function
      définie
    -> Après la création : afterCreate()
      -> auto création des containers de LSobject dans les LSobjects
      définissant les subDn
- LSldap :
  -> Nouvelle méthode getNewEntry()
  -> méthode getEntry() : utilisation de getNewEntry() en cas de nouvelle entrée
- create.php :
  -> Plus de redirection vers la fiche de l'objet après création si des erreurs
  sont définies.
- LSexample :
  -> Ajout de l'objectClass LSeecompany
  -> Adaptation du fichier ldif
2008-08-06 17:04:03 +00:00
Benjamin Renard
2e67cd7361 - LSformElement_mail & LSformElement_rss & LSformElement_xmpp :
-> Correction d'erreurs d'affichage
- LSformElement_mail.js & LSformElement_xmpp.js :
	-> Correction d'erreurs de comportement au clique sur les boutons
2008-08-04 10:45:42 +00:00
Benjamin Renard
764cf6c20a - LSrelation : Correction d'un bug : les boutons delete ne fonctionnaient plus. 2008-07-31 10:27:30 +00:00
Benjamin Renard
af0fef7119 - LSrelation :
-> Les noms des objets sont maintenant cliquable et nous emmènent sur la
  fiche de l'objet correspondant
- LSformElement_select_object :
  -> Les noms des objets sont maintenant cliquable et nous emmènent sur la
  fiche de l'objet correspondant
- LSformElement :
  -> Ajout de deux types d'élements de formulaire :
    -> LSformElement_mail : Adresse mail
    -> LSformElement_xmpp : Adresse xmpp
- LSattribute :
  -> uniformisation des données des attributs (tous des array())
    -> modifications des méthodes loadData() & reloadData()
  -> Correction des bugs induits par cette modification :
    - trunk/includes/class/class.LSattr_html_select_list.php
    - trunk/includes/class/class.LSldapObject.php
    - trunk/includes/class/class.LSattr_html_select_object.php
    - trunk/includes/class/class.LSattr_ldap_date.php
    - trunk/includes/class/class.LSsession.php
    - trunk/includes/addons/LSaddons.samba.php
  -> Correction d'un bug concernant le refresh des formulaires (#1695)
    -> modification de la méthode refreshForm()
- LSsession : Correction d'un bug d'affichage du nom de l'utilisateur connecté
2008-07-31 09:16:25 +00:00
Benjamin Renard
c857c680a4 - LSselect : Correction d'un bug de sélection du topDn lors d'une recherche
chargée à partir du cache lui même créé par LSsearch
2008-07-29 16:30:34 +00:00
Benjamin Renard
45856aca50 - LSldapObject : Correction d'un bug dans l'interprétation d'un rename 2008-07-29 15:57:04 +00:00
Benjamin Renard
c17f9224fa - LSrelation :
-> Correction d'un bug dans l'affichage des objets en relations après un
  refresh Ajax
  -> Le topDn pour l'affichage des objets en relation est maintenant celui de
  tout l'annuaire (màj de la méthode LSeegroup::listUserGroups())
- LSselect :
  -> Correction d'un bug JS pour l'affichage des infos de debug & des erreurs
  à l'ouverture.
2008-07-29 15:44:28 +00:00
Benjamin Renard
83922b5522 - LSldap : Ajout des messages d'erreurs Net_LDAP2 lors des remove() et
des move().
2008-07-29 14:23:47 +00:00
Benjamin Renard
c78a95c1d5 - LSldapObject :
-> Ajout de la possibilité de changer le RDN d'un objet
    -> Mise à jour automatique des relations définis avec les autres types
    d'objet à partir du moment que le paramètre 'rename_function' est défini
    dans la configuration de la relation
    -> Ajout des méthodes suivantes :
      -> beforeRename() : Executer avant le changement de DN elle permet de
      préparer le renomage.
      -> afterRename() : Executer après le changement de DN elle finalise le
      renomage.
    -> Méthode submitData() : prise en charge du changement du RDN
- LSrelation :
  -> Correction d'une erreur dans index_ajax.php : le paramètre
  $relationConf['remove_function'] n'était pas utilisé
- LSeegroup :
  -> Création d'une propriété $userObjectType pour stocké le type des objets
  utilisateurs
  -> Création de la méthode renameOneMember() pour assurer les modifications
  nécéssaire lors du changement de DN d'un utilisateur
- LSformElement_date : Suppression du chargement du fichier js : calendar-setup
  inutile l'utilisation faite de jscalendar.
- LSattribute :
  -> Ajout d'une possibilité pour générer une valeur à partir d'un format de
  chaine et la méthode getFData() des objets LSldapObject. Cette méthode fait
  référence au paramètre 'generate_value_format' de la configuration d'un
  attribut pour générer la valeur
- LSldap :
  -> Ajout d'une méthode move() pour changer le DN d'un objet
- LSsession :
  -> Ajout de la méthode changeAuthUser() pour changer l'utilisateur connecté
  en cour de session. (Utile lors de la modification de l'utilisateur par lui
  même)
- functions.php : Correction d'un bug dans la fontion getFData().
- modify.php : Vérification des droits de l'utilisateur après chargement et
  eventuellement modification de celui-ci pour intégrer les eventuelles
  modifications faites par l'utilisateur.
2008-07-29 13:45:02 +00:00
Benjamin Renard
eb64909db6 - LSformElement_text_field.js :
-> Correction d'un bug lors d'FX concurrent
	-> this.onChangeColor : mis en paramètre de la couleur lors d'un changement.
2008-07-28 17:14:37 +00:00
Benjamin Renard
dd5815ee8f - Correction d'erreur de syntaxe dans la composition d'expressions régulières 2008-07-28 17:06:40 +00:00
Benjamin Renard
1228e42fc7 - function.js :
-> création d'un fichier functions.js pour extraire la partie LSdebug de
  LSdefault.js.
  -> création d'une méthode getFData() sensiblement la même quand PHP
- LSformElement_text : Création d'une possibilité d'auto-génération en JS de la
  valeur à partir des autres champs du formulaire.
- LSconfirmBox && LSsmoothbox :
  -> ajout d'une méthode positionWhenScrolling() pour le placement de la box
  lors du scroll
- LSconfirmBox : Correction d'un bug IE à la fermeture
2008-07-28 16:30:40 +00:00
Benjamin Renard
6e217e07fa - Problème dans LSsession : assort() sur des tableaux vides
- LSselect : Selection d'un objet lorsqu'on clique sur son non
- LSconfirmBox : Correction erreur syntax JS
- LSformElement_url : Correction erreur JS avec Opera
2008-07-19 19:14:57 +00:00
Benjamin Renard
d4f4c5e387 - LSsession : Trie aplhabétique lors de la sélection du subDn
- LSldapObject : méthode getValue()
  -> Ajout des possibilité de retour :
    - 'subDn' => le DN du subDn
    - 'subDnName' => le nom du subDn
2008-07-18 15:20:52 +00:00
Benjamin Renard
fce0276f57 - trunk/includes/class/class.LSattr_html_textarea.php
-> Correction d'un bug : reste d'une impossibilité d'une valeur multiple
- trunk/includes/class/class.LSattr_html_image.php &
  trunk/includes/class/class.LSattr_html_password.php
  -> Correction d'un bug : Retour d'erreur lors d'une valeur multiple
- trunk/includes/class/class.LSattribute.php :
  -> Correction d'un bug lors d'un mauvais retour du LSattr_html::addToForm()
- trunk/includes/js/LSdefault.js : Correction d'un bug d'affichage des erreurs
2008-07-18 14:43:19 +00:00
Benjamin Renard
acd0c69e23 - config.inc.php : Ajout d'une constante LS_CSS_DIR
- Ajout d'un LSformElement Date :
  -> includes/class/class.LSattr_ldap_date.php
  -> includes/class/class.LSattr_html_date.php
  -> includes/class/class.LSformElement_date.php
  -> includes/class/class.LSformRule_date.php
  -> includes/libs/jscalendar
  -> includes/js/LSformElement_date.js
  -> includes/js/LSformElement_date_field.js
  -> templates/images/calendar.png
- LSformElement : Ajout d'une méthode exportValues() utilisée par
  LSform::exportValues()
- LSform :
  -> Utlisation de LSformElement::exportValues() pour exporter les données
  du formulaire
  -> Méthode setValuesFromPostData() est désormais invoqué à chaque invocation
  de la méthode validate()
- LSformElement_select_object : Ajout d'une méthode exportValues() pour coller
  au nouveau mode d'exportation des données de l'annuaire
- LSldapObjet : Correction d'un bug potentiel (foreach sur une variable à false)
  dans la méthode updateData()
- LSsession :
  -> Méthode addCssFile() & addJSscript() : ajout d'un paramètre pour la
  possibilité d'inclusion de fichier externe (hors des dossiers par défaut
  ex: les libs)
  -> Utilisation de la Constante LS_CSS_DIR au lieu d'une chemin en dure
  -> Paramètrage JS depuis Php :
    -> Méthode addJSconfigParam() : ajouter un paramètre de config. JS
    -> Méthode displayTemplate() adaptée pour
    -> top.tpl : adapté pour afficher une div contenant les paramètres JSONisés
    -> LSdefault.css : adapté pour ne pas afficher la div contenant les params.
    -> LSdefault.js : récupère les informations et Initialise une variable
    javascript LSjsConfig
- LSconfirmBox : Correction d'un debug : "delete this;"
2008-07-18 14:02:46 +00:00
Benjamin Renard
7c37c65366 - select.php & view.php : Correction d'un bug concernant le trie lors d'un
rafraichissement.
- base.css : netoyage
- LSform.js :
  -> initializeLSform_AddAndRemoveBtns() : Modularisation des ajouts 
     d'évenements
  -> Ajout du concept de modules permettant l'initialisation JS à l'ajout d'un
     field vide d'un type avancé
- Ajout de types de champs de formulaire : 
  -> LSformElement_url : Un liens web (URL)
  -> LSformElement_rss : Un lien RSS
- class.LSformElement.php :
  -> ajout de la méthode getTitle() : Texte descriptif du champ
- LSdefault.js : Correction de la déclaration de la variable LSdebug_active
- modify.php : Modification du titre des pages
2008-07-15 16:24:35 +00:00
Benjamin Renard
8d8ede930c - Passage à Mootools v1.2templates/LSrelations.tpl
-> config.inc.php : 
		- Deux fichiers js à include au lieu d'un seul
		- Suppression du Debugger (Debugger.js incompatible)
		- LSformElement_image : refonte de l'affichage
- Templates : 
	- LSview-action : Passage aux balises ul/li plutôt que p/a
	- select.tpl : correction d'un bug concernant la sélection du subDn actif
- Création de LSconfirmBox : module de confirmation
- JS :
	-> LSform.js : Modularisation du code :
		- LSformElement_select_object.js
		- LSformElement_image.js
		- LSformElement_password.js
- CSS : 
	-> Modularisation :
		- LSselect.css
		- LSrelation.css
- LSrelation : 
	-> Refonte du mécanisme JS
	-> Modification de l'affichage
	-> Ajout d'une confirmation à la suppresion (LSconfirmBox)
- LSsmoothbox : Refonte profonde
- view.php : 
 - Correction d'un bug : la colone action était vide lors de la mise en cache
   par LSselect.
- LSldapObject :
	- getDisplayValue() : ajout d'une possibilité de l'affichage du subDn en plus
	du nom
- LSsession : ajout d'un méthode haveSubDn()
- JS : 
 - Modularisation de la verification d'une requete Ajax
 	-> LSdefault : nouvelles méthodes :
		-> checkAjaxReturn() : Pour les retours JSON
		-> ajaxDisplayDebugAndError() : Pour les retours HTML (Type LSselect)
2008-07-05 20:28:49 +00:00
Benjamin Renard
b92c7d281a - LSformRule_telephonenumber : Ajout d'une règle de validation d'un numéro
de téléphone (syntaxe française : 10 chiffres)
2008-06-23 20:23:53 +00:00
Benjamin Renard
7f82e8eb49 - LSldapObject : Ajout des méthodes suivantes :
-> getSubDnValue()
  -> getSubDnName()
- LSview/LSselect : utilisation de la méthode getSubDnName() plutôt que le
  code en local
- config.inc.php :
  -> Modification du paramètre ldapServer['subDn']
  -> Ajout du paramètre LSaccess pour la composition du menu hors config subDn
  -> Suppression ldapServer['LSobjets'] : suppression du pré-chargement
     (cf.ci-dessous)
- LSsession :
  -> Rédéfinition de la méthode de construction du menu de l'interface
     (bug #1665)
  -> Mise en cache de LSaccess
  -> top.tpl : le bouton de rafraichissement subDn devient un bouton de
     rafraichissement génerale de LSsession (config / LSaccess / subDn)
  -> Suppression du pré-chargement des objets et donc de la méthode
     loadLSobjects()
  -> Ajout d'une méthode in_menu() utilisé entre par la méthode canAccess()
     pour valider les accès aux objets
- create.php : Correction d'un bug de chargement d'objet.
- config.error_code.php : Correction bug encodage
- index_ajax.php :
  -> Correction de bugs de chargement d'objets
  -> Suppression du code de gestion des retours d'erreur multiplié et inutile
2008-06-21 16:16:15 +00:00