diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000..8793e1ff --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,50 @@ + + + + +## Description + + + +### Suggested changelog entry + + + +### Related issues/external references + +Fixes # + + +## Types of changes + +- [ ] Bug fix _(non-breaking change which fixes)_ +- [ ] New feature _(non-breaking change which adds functionality)_ +- [ ] Breaking change _(fix or feature that would cause existing functionality to change)_ + - [ ] This change is only breaking for integrators, not for external standards or end-users. +- [ ] Documentation improvement + + +## PR checklist + +- [ ] I have checked there is no other PR open for the same change. +- [ ] I have read the [Contribution Guidelines](https://doc.jeedom.com/fr_FR/contribute/). +- [ ] I grant the project the right to include and distribute the code under the GNU. +- [ ] I have added tests to cover my changes. +- [ ] I have verified that the code complies with the projects coding standards. +- [ ] [Required for new sniffs] I have added MD documentation for the sniff. + + diff --git a/.github/workflows/codeLintGlobal.yml b/.github/workflows/codeLintGlobal.yml new file mode 100644 index 00000000..d10bd113 --- /dev/null +++ b/.github/workflows/codeLintGlobal.yml @@ -0,0 +1,62 @@ +on: + # Trigger the workflow on push or pull request, + # but only for the main branch + push: + branches: + - beta + pull_request: + branches: + - beta + - master + +name : 'Code Lint Global' + +jobs: + run-linters: + name: Test Linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v3 + + - name: Set up PHP + uses: shivammathur/setup-php@v2 + with: + php-version: "7.4" + coverage: none + tools: phpcs + + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.8 + + - name: Set up Node.js + uses: actions/setup-node@v1 + with: + node-version: 14 + + # ESLint and Prettier must be in `package.json` + - name: Install Node.js dependencies + run: npm i prettier + + - name: Install Python dependencies + run: pip install flake8 black + + - name: Run linters + uses: wearerequired/lint-action@v2 + with: + php_codesniffer: false + # Optional: Ignore warnings + php_codesniffer_args: "-n --ignore-annotations ./core ./desktop ./plugin_info" + flake8: true + prettier: true + prettier_extensions: css,html,js,json,jsx,md,sass,scss,ts,tsx,vue,yaml + auto_fix: true + prettier_auto_fix: true + git_email: commit@jeedom.com + git_name: 'JeedomBot lint Pretty' + commit: false + black: true + black_auto_fix: true diff --git a/.github/workflows/lint_Php73.yml b/.github/workflows/lint_Php73.yml new file mode 100644 index 00000000..e9f65cf4 --- /dev/null +++ b/.github/workflows/lint_Php73.yml @@ -0,0 +1,28 @@ +name : 'Php 7.3' + +on: + push: + branches: + - beta + paths: + - "**.php" + pull_request: + branches: + - beta + - master + paths: + - "**.php" + +jobs: + run-linters: + name: Run linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v3 + + - name: PHP syntax checker 7.3 + uses: prestashop/github-action-php-lint/7.3@v1 + with: + folder-to-exclude: "! -path \"./3rdparty/*\"" diff --git a/.github/workflows/lint_Php74.yml b/.github/workflows/lint_Php74.yml new file mode 100644 index 00000000..e87f5087 --- /dev/null +++ b/.github/workflows/lint_Php74.yml @@ -0,0 +1,28 @@ +name : 'Php 7.4' + +on: + push: + branches: + - beta + paths: + - "**.php" + pull_request: + branches: + - beta + - master + paths: + - "**.php" + +jobs: + run-linters: + name: Run linters + runs-on: ubuntu-latest + + steps: + - name: Check out Git repository + uses: actions/checkout@v3 + + - name: PHP syntax checker 7.4 + uses: prestashop/github-action-php-lint/7.4@v1 + with: + folder-to-exclude: "! -path \"./3rdparty/*\"" diff --git a/.github/workflows/php.yml b/.github/workflows/php.yml new file mode 100644 index 00000000..b6669dc1 --- /dev/null +++ b/.github/workflows/php.yml @@ -0,0 +1,23 @@ +name: "PHP" + +on: + push: + branches: + - beta + paths: + - "**.php" + pull_request: + branches: + - beta + - master + paths: + - "**.php" + +jobs: + phpcs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: michaelw90/PHP-Lint@master + + diff --git a/.gitignore b/.gitignore index f0307886..c6650da1 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,5 @@ core/config/common.config.php plugins .remote-sync.json .project +.DS_Store +.vscode diff --git a/3rdparty/animate/animate.css b/3rdparty/animate/animate.css new file mode 100755 index 00000000..4ebd1c4f --- /dev/null +++ b/3rdparty/animate/animate.css @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.6.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2018 Daniel Eden + */ + +.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} diff --git a/3rdparty/animate/animate.js b/3rdparty/animate/animate.js new file mode 100755 index 00000000..8c9255ff --- /dev/null +++ b/3rdparty/animate/animate.js @@ -0,0 +1,55 @@ +$.fn.extend({ + animateCss: function(animationName, callback) { + var animationEnd = (function(el) { + var animations = { + animation: 'animationend', + OAnimation: 'oAnimationEnd', + MozAnimation: 'mozAnimationEnd', + WebkitAnimation: 'webkitAnimationEnd', + }; + + for (var t in animations) { + if (el.style[t] !== undefined) { + return animations[t]; + } + } + })(document.createElement('div')); + + this.addClass('animated ' + animationName).one(animationEnd, function() { + $(this).removeClass('animated ' + animationName); + + if (typeof callback === 'function') callback(); + }); + + return this; + }, +}); + +/** +$('#yourElement').animateCss('bounce'); +or; +$('#yourElement').animateCss('bounce', function() { + // Do somthing after animation +}); + +https://daneden.github.io/animate.css/ +bounce flash pulse rubberBand +shake headShake swing tada +wobble jello bounceIn bounceInDown +bounceInLeft bounceInRight bounceInUp bounceOut +bounceOutDown bounceOutLeft bounceOutRight bounceOutUp +fadeIn fadeInDown fadeInDownBig fadeInLeft +fadeInLeftBig fadeInRight fadeInRightBig fadeInUp +fadeInUpBig fadeOut fadeOutDown fadeOutDownBig +fadeOutLeft fadeOutLeftBig fadeOutRight fadeOutRightBig +fadeOutUp fadeOutUpBig flipInX flipInY +flipOutX flipOutY lightSpeedIn lightSpeedOut +rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft +rotateInUpRight rotateOut rotateOutDownLeft rotateOutDownRight +rotateOutUpLeft rotateOutUpRight hinge jackInTheBox +rollIn rollOut zoomIn zoomInDown +zoomInLeft zoomInRight zoomInUp zoomOut +zoomOutDown zoomOutLeft zoomOutRight zoomOutUp +slideInDown slideInLeft slideInRight slideInUp +slideOutDown slideOutLeft slideOutRight slideOutUp +**/ diff --git a/3rdparty/css/animate/animate.css b/3rdparty/css/animate/animate.css new file mode 100755 index 00000000..4ebd1c4f --- /dev/null +++ b/3rdparty/css/animate/animate.css @@ -0,0 +1,11 @@ +@charset "UTF-8"; + +/*! + * animate.css -http://daneden.me/animate + * Version - 3.6.0 + * Licensed under the MIT license - http://opensource.org/licenses/MIT + * + * Copyright (c) 2018 Daniel Eden + */ + +.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.infinite{-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}@-webkit-keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}@keyframes bounce{0%,20%,53%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1);-webkit-transform:translateZ(0);transform:translateZ(0)}40%,43%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-30px,0);transform:translate3d(0,-30px,0)}70%{-webkit-animation-timing-function:cubic-bezier(.755,.05,.855,.06);animation-timing-function:cubic-bezier(.755,.05,.855,.06);-webkit-transform:translate3d(0,-15px,0);transform:translate3d(0,-15px,0)}90%{-webkit-transform:translate3d(0,-4px,0);transform:translate3d(0,-4px,0)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce;-webkit-transform-origin:center bottom;transform-origin:center bottom}@-webkit-keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,to{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes pulse{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}50%{-webkit-transform:scale3d(1.05,1.05,1.05);transform:scale3d(1.05,1.05,1.05)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes rubberBand{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}30%{-webkit-transform:scale3d(1.25,.75,1);transform:scale3d(1.25,.75,1)}40%{-webkit-transform:scale3d(.75,1.25,1);transform:scale3d(.75,1.25,1)}50%{-webkit-transform:scale3d(1.15,.85,1);transform:scale3d(1.15,.85,1)}65%{-webkit-transform:scale3d(.95,1.05,1);transform:scale3d(.95,1.05,1)}75%{-webkit-transform:scale3d(1.05,.95,1);transform:scale3d(1.05,.95,1)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.rubberBand{-webkit-animation-name:rubberBand;animation-name:rubberBand}@-webkit-keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}@keyframes shake{0%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}10%,30%,50%,70%,90%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}20%,40%,60%,80%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes headShake{0%{-webkit-transform:translateX(0);transform:translateX(0)}6.5%{-webkit-transform:translateX(-6px) rotateY(-9deg);transform:translateX(-6px) rotateY(-9deg)}18.5%{-webkit-transform:translateX(5px) rotateY(7deg);transform:translateX(5px) rotateY(7deg)}31.5%{-webkit-transform:translateX(-3px) rotateY(-5deg);transform:translateX(-3px) rotateY(-5deg)}43.5%{-webkit-transform:translateX(2px) rotateY(3deg);transform:translateX(2px) rotateY(3deg)}50%{-webkit-transform:translateX(0);transform:translateX(0)}}.headShake{-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;-webkit-animation-name:headShake;animation-name:headShake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes tada{0%{-webkit-transform:scaleX(1);transform:scaleX(1)}10%,20%{-webkit-transform:scale3d(.9,.9,.9) rotate(-3deg);transform:scale3d(.9,.9,.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(3deg);transform:scale3d(1.1,1.1,1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale3d(1.1,1.1,1.1) rotate(-3deg);transform:scale3d(1.1,1.1,1.1) rotate(-3deg)}to{-webkit-transform:scaleX(1);transform:scaleX(1)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes wobble{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}15%{-webkit-transform:translate3d(-25%,0,0) rotate(-5deg);transform:translate3d(-25%,0,0) rotate(-5deg)}30%{-webkit-transform:translate3d(20%,0,0) rotate(3deg);transform:translate3d(20%,0,0) rotate(3deg)}45%{-webkit-transform:translate3d(-15%,0,0) rotate(-3deg);transform:translate3d(-15%,0,0) rotate(-3deg)}60%{-webkit-transform:translate3d(10%,0,0) rotate(2deg);transform:translate3d(10%,0,0) rotate(2deg)}75%{-webkit-transform:translate3d(-5%,0,0) rotate(-1deg);transform:translate3d(-5%,0,0) rotate(-1deg)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}@keyframes jello{0%,11.1%,to{-webkit-transform:translateZ(0);transform:translateZ(0)}22.2%{-webkit-transform:skewX(-12.5deg) skewY(-12.5deg);transform:skewX(-12.5deg) skewY(-12.5deg)}33.3%{-webkit-transform:skewX(6.25deg) skewY(6.25deg);transform:skewX(6.25deg) skewY(6.25deg)}44.4%{-webkit-transform:skewX(-3.125deg) skewY(-3.125deg);transform:skewX(-3.125deg) skewY(-3.125deg)}55.5%{-webkit-transform:skewX(1.5625deg) skewY(1.5625deg);transform:skewX(1.5625deg) skewY(1.5625deg)}66.6%{-webkit-transform:skewX(-.78125deg) skewY(-.78125deg);transform:skewX(-.78125deg) skewY(-.78125deg)}77.7%{-webkit-transform:skewX(.390625deg) skewY(.390625deg);transform:skewX(.390625deg) skewY(.390625deg)}88.8%{-webkit-transform:skewX(-.1953125deg) skewY(-.1953125deg);transform:skewX(-.1953125deg) skewY(-.1953125deg)}}.jello{-webkit-animation-name:jello;animation-name:jello;-webkit-transform-origin:center;transform-origin:center}@-webkit-keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}@keyframes bounceIn{0%,20%,40%,60%,80%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}20%{-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}40%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}60%{opacity:1;-webkit-transform:scale3d(1.03,1.03,1.03);transform:scale3d(1.03,1.03,1.03)}80%{-webkit-transform:scale3d(.97,.97,.97);transform:scale3d(.97,.97,.97)}to{opacity:1;-webkit-transform:scaleX(1);transform:scaleX(1)}}.bounceIn{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInDown{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,-3000px,0);transform:translate3d(0,-3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,25px,0);transform:translate3d(0,25px,0)}75%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}90%{-webkit-transform:translate3d(0,5px,0);transform:translate3d(0,5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInLeft{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(-3000px,0,0);transform:translate3d(-3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(25px,0,0);transform:translate3d(25px,0,0)}75%{-webkit-transform:translate3d(-10px,0,0);transform:translate3d(-10px,0,0)}90%{-webkit-transform:translate3d(5px,0,0);transform:translate3d(5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInRight{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(3000px,0,0);transform:translate3d(3000px,0,0)}60%{opacity:1;-webkit-transform:translate3d(-25px,0,0);transform:translate3d(-25px,0,0)}75%{-webkit-transform:translate3d(10px,0,0);transform:translate3d(10px,0,0)}90%{-webkit-transform:translate3d(-5px,0,0);transform:translate3d(-5px,0,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes bounceInUp{0%,60%,75%,90%,to{-webkit-animation-timing-function:cubic-bezier(.215,.61,.355,1);animation-timing-function:cubic-bezier(.215,.61,.355,1)}0%{opacity:0;-webkit-transform:translate3d(0,3000px,0);transform:translate3d(0,3000px,0)}60%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}75%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}90%{-webkit-transform:translate3d(0,-5px,0);transform:translate3d(0,-5px,0)}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}@keyframes bounceOut{20%{-webkit-transform:scale3d(.9,.9,.9);transform:scale3d(.9,.9,.9)}50%,55%{opacity:1;-webkit-transform:scale3d(1.1,1.1,1.1);transform:scale3d(1.1,1.1,1.1)}to{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}}.bounceOut{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes bounceOutDown{20%{-webkit-transform:translate3d(0,10px,0);transform:translate3d(0,10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,-20px,0);transform:translate3d(0,-20px,0)}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes bounceOutLeft{20%{opacity:1;-webkit-transform:translate3d(20px,0,0);transform:translate3d(20px,0,0)}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes bounceOutRight{20%{opacity:1;-webkit-transform:translate3d(-20px,0,0);transform:translate3d(-20px,0,0)}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes bounceOutUp{20%{-webkit-transform:translate3d(0,-10px,0);transform:translate3d(0,-10px,0)}40%,45%{opacity:1;-webkit-transform:translate3d(0,20px,0);transform:translate3d(0,20px,0)}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}to{opacity:0}}@keyframes fadeOut{0%{opacity:1}to{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes fadeOutDown{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}@keyframes fadeOutDownBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,2000px,0);transform:translate3d(0,2000px,0)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes fadeOutLeft{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}@keyframes fadeOutLeftBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(-2000px,0,0);transform:translate3d(-2000px,0,0)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes fadeOutRight{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}@keyframes fadeOutRightBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(2000px,0,0);transform:translate3d(2000px,0,0)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes fadeOutUp{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}@keyframes fadeOutUpBig{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(0,-2000px,0);transform:translate3d(0,-2000px,0)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(-1turn);transform:perspective(400px) rotateY(-1turn);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-190deg);transform:perspective(400px) translateZ(150px) rotateY(-190deg);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(-170deg);transform:perspective(400px) translateZ(150px) rotateY(-170deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) scale3d(.95,.95,.95);transform:perspective(400px) scale3d(.95,.95,.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}to{-webkit-transform:perspective(400px);transform:perspective(400px);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateX(-5deg);transform:perspective(400px) rotateX(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInX{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-20deg);transform:perspective(400px) rotateY(-20deg);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}60%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg);opacity:1}80%{-webkit-transform:perspective(400px) rotateY(-5deg);transform:perspective(400px) rotateY(-5deg)}to{-webkit-transform:perspective(400px);transform:perspective(400px)}}.flipInY{-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateX(-20deg);transform:perspective(400px) rotateX(-20deg);opacity:1}to{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px);transform:perspective(400px)}30%{-webkit-transform:perspective(400px) rotateY(-15deg);transform:perspective(400px) rotateY(-15deg);opacity:1}to{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-animation-duration:.75s;animation-duration:.75s;-webkit-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translate3d(100%,0,0) skewX(-30deg);transform:translate3d(100%,0,0) skewX(-30deg);opacity:0}60%{-webkit-transform:skewX(20deg);transform:skewX(20deg);opacity:1}80%{-webkit-transform:skewX(-5deg);transform:skewX(-5deg);opacity:1}to{-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}@keyframes lightSpeedOut{0%{opacity:1}to{-webkit-transform:translate3d(100%,0,0) skewX(30deg);transform:translate3d(100%,0,0) skewX(30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:translateZ(0);transform:translateZ(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center;transform-origin:center;opacity:1}to{-webkit-transform-origin:center;transform-origin:center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;opacity:1}to{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-45deg);transform:rotate(-45deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;opacity:1}to{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}@keyframes hinge{0%{-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%,80%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out;opacity:1}to{-webkit-transform:translate3d(0,700px,0);transform:translate3d(0,700px,0);opacity:0}}.hinge{-webkit-animation-duration:2s;animation-duration:2s;-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes jackInTheBox{0%{opacity:0;-webkit-transform:scale(.1) rotate(30deg);transform:scale(.1) rotate(30deg);-webkit-transform-origin:center bottom;transform-origin:center bottom}50%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}70%{-webkit-transform:rotate(3deg);transform:rotate(3deg)}to{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}.jackInTheBox{-webkit-animation-name:jackInTheBox;animation-name:jackInTheBox}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translate3d(-100%,0,0) rotate(-120deg);transform:translate3d(-100%,0,0) rotate(-120deg)}to{opacity:1;-webkit-transform:translateZ(0);transform:translateZ(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}@keyframes rollOut{0%{opacity:1}to{opacity:0;-webkit-transform:translate3d(100%,0,0) rotate(120deg);transform:translate3d(100%,0,0) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{0%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{0%{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{0%{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}@-webkit-keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInDown{0%{-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInLeft{0%{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInRight{0%{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}@keyframes slideInUp{0%{-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0);visibility:visible}to{-webkit-transform:translateZ(0);transform:translateZ(0)}}.slideInUp{-webkit-animation-name:slideInUp;animation-name:slideInUp}@-webkit-keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}@keyframes slideOutDown{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,100%,0);transform:translate3d(0,100%,0)}}.slideOutDown{-webkit-animation-name:slideOutDown;animation-name:slideOutDown}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}@keyframes slideOutLeft{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}@keyframes slideOutRight{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}@keyframes slideOutUp{0%{-webkit-transform:translateZ(0);transform:translateZ(0)}to{visibility:hidden;-webkit-transform:translate3d(0,-100%,0);transform:translate3d(0,-100%,0)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp} diff --git a/3rdparty/js/animate/animate.js b/3rdparty/js/animate/animate.js new file mode 100755 index 00000000..8c9255ff --- /dev/null +++ b/3rdparty/js/animate/animate.js @@ -0,0 +1,55 @@ +$.fn.extend({ + animateCss: function(animationName, callback) { + var animationEnd = (function(el) { + var animations = { + animation: 'animationend', + OAnimation: 'oAnimationEnd', + MozAnimation: 'mozAnimationEnd', + WebkitAnimation: 'webkitAnimationEnd', + }; + + for (var t in animations) { + if (el.style[t] !== undefined) { + return animations[t]; + } + } + })(document.createElement('div')); + + this.addClass('animated ' + animationName).one(animationEnd, function() { + $(this).removeClass('animated ' + animationName); + + if (typeof callback === 'function') callback(); + }); + + return this; + }, +}); + +/** +$('#yourElement').animateCss('bounce'); +or; +$('#yourElement').animateCss('bounce', function() { + // Do somthing after animation +}); + +https://daneden.github.io/animate.css/ +bounce flash pulse rubberBand +shake headShake swing tada +wobble jello bounceIn bounceInDown +bounceInLeft bounceInRight bounceInUp bounceOut +bounceOutDown bounceOutLeft bounceOutRight bounceOutUp +fadeIn fadeInDown fadeInDownBig fadeInLeft +fadeInLeftBig fadeInRight fadeInRightBig fadeInUp +fadeInUpBig fadeOut fadeOutDown fadeOutDownBig +fadeOutLeft fadeOutLeftBig fadeOutRight fadeOutRightBig +fadeOutUp fadeOutUpBig flipInX flipInY +flipOutX flipOutY lightSpeedIn lightSpeedOut +rotateIn rotateInDownLeft rotateInDownRight rotateInUpLeft +rotateInUpRight rotateOut rotateOutDownLeft rotateOutDownRight +rotateOutUpLeft rotateOutUpRight hinge jackInTheBox +rollIn rollOut zoomIn zoomInDown +zoomInLeft zoomInRight zoomInUp zoomOut +zoomOutDown zoomOutLeft zoomOutRight zoomOutUp +slideInDown slideInLeft slideInRight slideInUp +slideOutDown slideOutLeft slideOutRight slideOutUp +**/ diff --git a/3rdparty/phpqrcode/CHANGELOG b/3rdparty/phpqrcode/CHANGELOG old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/INSTALL b/3rdparty/phpqrcode/INSTALL old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/LICENSE b/3rdparty/phpqrcode/LICENSE old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/README b/3rdparty/phpqrcode/README old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/VERSION b/3rdparty/phpqrcode/VERSION old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/bindings/tcpdf/qrcode.php b/3rdparty/phpqrcode/bindings/tcpdf/qrcode.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_1.dat b/3rdparty/phpqrcode/cache/frame_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_1.png b/3rdparty/phpqrcode/cache/frame_1.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_10.dat b/3rdparty/phpqrcode/cache/frame_10.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_10.png b/3rdparty/phpqrcode/cache/frame_10.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_11.dat b/3rdparty/phpqrcode/cache/frame_11.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_11.png b/3rdparty/phpqrcode/cache/frame_11.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_12.dat b/3rdparty/phpqrcode/cache/frame_12.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_12.png b/3rdparty/phpqrcode/cache/frame_12.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_13.dat b/3rdparty/phpqrcode/cache/frame_13.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_13.png b/3rdparty/phpqrcode/cache/frame_13.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_14.dat b/3rdparty/phpqrcode/cache/frame_14.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_14.png b/3rdparty/phpqrcode/cache/frame_14.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_15.dat b/3rdparty/phpqrcode/cache/frame_15.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_15.png b/3rdparty/phpqrcode/cache/frame_15.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_16.dat b/3rdparty/phpqrcode/cache/frame_16.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_16.png b/3rdparty/phpqrcode/cache/frame_16.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_17.dat b/3rdparty/phpqrcode/cache/frame_17.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_17.png b/3rdparty/phpqrcode/cache/frame_17.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_18.dat b/3rdparty/phpqrcode/cache/frame_18.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_18.png b/3rdparty/phpqrcode/cache/frame_18.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_19.dat b/3rdparty/phpqrcode/cache/frame_19.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_19.png b/3rdparty/phpqrcode/cache/frame_19.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_2.dat b/3rdparty/phpqrcode/cache/frame_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_2.png b/3rdparty/phpqrcode/cache/frame_2.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_20.dat b/3rdparty/phpqrcode/cache/frame_20.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_20.png b/3rdparty/phpqrcode/cache/frame_20.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_21.dat b/3rdparty/phpqrcode/cache/frame_21.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_21.png b/3rdparty/phpqrcode/cache/frame_21.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_22.dat b/3rdparty/phpqrcode/cache/frame_22.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_22.png b/3rdparty/phpqrcode/cache/frame_22.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_23.dat b/3rdparty/phpqrcode/cache/frame_23.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_23.png b/3rdparty/phpqrcode/cache/frame_23.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_24.dat b/3rdparty/phpqrcode/cache/frame_24.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_24.png b/3rdparty/phpqrcode/cache/frame_24.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_25.dat b/3rdparty/phpqrcode/cache/frame_25.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_25.png b/3rdparty/phpqrcode/cache/frame_25.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_26.dat b/3rdparty/phpqrcode/cache/frame_26.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_26.png b/3rdparty/phpqrcode/cache/frame_26.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_27.dat b/3rdparty/phpqrcode/cache/frame_27.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_27.png b/3rdparty/phpqrcode/cache/frame_27.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_28.dat b/3rdparty/phpqrcode/cache/frame_28.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_28.png b/3rdparty/phpqrcode/cache/frame_28.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_29.dat b/3rdparty/phpqrcode/cache/frame_29.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_29.png b/3rdparty/phpqrcode/cache/frame_29.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_3.dat b/3rdparty/phpqrcode/cache/frame_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_3.png b/3rdparty/phpqrcode/cache/frame_3.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_30.dat b/3rdparty/phpqrcode/cache/frame_30.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_30.png b/3rdparty/phpqrcode/cache/frame_30.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_31.dat b/3rdparty/phpqrcode/cache/frame_31.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_31.png b/3rdparty/phpqrcode/cache/frame_31.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_32.dat b/3rdparty/phpqrcode/cache/frame_32.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_32.png b/3rdparty/phpqrcode/cache/frame_32.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_33.dat b/3rdparty/phpqrcode/cache/frame_33.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_33.png b/3rdparty/phpqrcode/cache/frame_33.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_34.dat b/3rdparty/phpqrcode/cache/frame_34.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_34.png b/3rdparty/phpqrcode/cache/frame_34.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_35.dat b/3rdparty/phpqrcode/cache/frame_35.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_35.png b/3rdparty/phpqrcode/cache/frame_35.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_36.dat b/3rdparty/phpqrcode/cache/frame_36.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_36.png b/3rdparty/phpqrcode/cache/frame_36.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_37.dat b/3rdparty/phpqrcode/cache/frame_37.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_37.png b/3rdparty/phpqrcode/cache/frame_37.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_38.dat b/3rdparty/phpqrcode/cache/frame_38.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_38.png b/3rdparty/phpqrcode/cache/frame_38.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_39.dat b/3rdparty/phpqrcode/cache/frame_39.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_39.png b/3rdparty/phpqrcode/cache/frame_39.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_4.dat b/3rdparty/phpqrcode/cache/frame_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_4.png b/3rdparty/phpqrcode/cache/frame_4.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_40.dat b/3rdparty/phpqrcode/cache/frame_40.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_40.png b/3rdparty/phpqrcode/cache/frame_40.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_5.dat b/3rdparty/phpqrcode/cache/frame_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_5.png b/3rdparty/phpqrcode/cache/frame_5.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_6.dat b/3rdparty/phpqrcode/cache/frame_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_6.png b/3rdparty/phpqrcode/cache/frame_6.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_7.dat b/3rdparty/phpqrcode/cache/frame_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_7.png b/3rdparty/phpqrcode/cache/frame_7.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_8.dat b/3rdparty/phpqrcode/cache/frame_8.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_8.png b/3rdparty/phpqrcode/cache/frame_8.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_9.dat b/3rdparty/phpqrcode/cache/frame_9.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/frame_9.png b/3rdparty/phpqrcode/cache/frame_9.png old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_101_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_101_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_105_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_105_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_109_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_109_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_113_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_113_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_117_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_117_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_121_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_121_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_125_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_125_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_129_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_129_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_133_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_133_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_137_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_137_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_141_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_141_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_145_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_145_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_149_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_149_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_153_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_153_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_157_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_157_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_161_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_161_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_165_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_165_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_169_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_169_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_173_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_173_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_177_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_177_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_21_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_21_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_25_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_25_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_29_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_29_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_33_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_33_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_37_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_37_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_41_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_41_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_45_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_45_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_49_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_49_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_53_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_53_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_57_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_57_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_61_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_61_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_65_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_65_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_69_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_69_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_73_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_73_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_77_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_77_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_81_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_81_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_85_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_85_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_89_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_89_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_93_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_93_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_0/mask_97_0.dat b/3rdparty/phpqrcode/cache/mask_0/mask_97_0.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_101_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_101_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_105_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_105_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_109_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_109_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_113_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_113_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_117_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_117_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_121_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_121_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_125_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_125_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_129_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_129_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_133_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_133_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_137_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_137_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_141_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_141_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_145_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_145_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_149_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_149_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_153_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_153_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_157_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_157_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_161_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_161_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_165_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_165_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_169_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_169_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_173_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_173_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_177_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_177_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_21_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_21_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_25_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_25_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_29_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_29_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_33_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_33_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_37_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_37_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_41_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_41_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_45_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_45_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_49_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_49_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_53_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_53_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_57_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_57_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_61_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_61_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_65_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_65_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_69_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_69_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_73_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_73_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_77_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_77_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_81_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_81_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_85_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_85_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_89_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_89_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_93_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_93_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_1/mask_97_1.dat b/3rdparty/phpqrcode/cache/mask_1/mask_97_1.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_101_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_101_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_105_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_105_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_109_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_109_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_113_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_113_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_117_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_117_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_121_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_121_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_125_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_125_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_129_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_129_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_133_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_133_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_137_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_137_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_141_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_141_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_145_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_145_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_149_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_149_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_153_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_153_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_157_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_157_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_161_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_161_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_165_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_165_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_169_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_169_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_173_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_173_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_177_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_177_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_21_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_21_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_25_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_25_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_29_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_29_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_33_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_33_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_37_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_37_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_41_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_41_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_45_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_45_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_49_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_49_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_53_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_53_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_57_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_57_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_61_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_61_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_65_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_65_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_69_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_69_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_73_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_73_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_77_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_77_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_81_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_81_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_85_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_85_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_89_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_89_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_93_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_93_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_2/mask_97_2.dat b/3rdparty/phpqrcode/cache/mask_2/mask_97_2.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_101_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_101_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_105_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_105_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_109_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_109_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_113_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_113_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_117_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_117_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_121_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_121_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_125_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_125_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_129_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_129_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_133_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_133_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_137_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_137_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_141_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_141_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_145_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_145_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_149_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_149_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_153_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_153_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_157_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_157_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_161_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_161_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_165_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_165_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_169_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_169_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_173_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_173_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_177_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_177_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_21_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_21_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_25_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_25_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_29_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_29_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_33_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_33_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_37_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_37_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_41_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_41_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_45_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_45_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_49_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_49_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_53_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_53_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_57_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_57_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_61_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_61_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_65_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_65_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_69_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_69_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_73_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_73_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_77_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_77_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_81_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_81_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_85_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_85_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_89_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_89_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_93_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_93_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_3/mask_97_3.dat b/3rdparty/phpqrcode/cache/mask_3/mask_97_3.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_101_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_101_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_105_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_105_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_109_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_109_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_113_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_113_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_117_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_117_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_121_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_121_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_125_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_125_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_129_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_129_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_133_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_133_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_137_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_137_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_141_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_141_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_145_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_145_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_149_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_149_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_153_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_153_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_157_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_157_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_161_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_161_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_165_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_165_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_169_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_169_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_173_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_173_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_177_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_177_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_21_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_21_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_25_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_25_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_29_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_29_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_33_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_33_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_37_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_37_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_41_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_41_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_45_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_45_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_49_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_49_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_53_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_53_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_57_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_57_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_61_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_61_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_65_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_65_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_69_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_69_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_73_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_73_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_77_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_77_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_81_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_81_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_85_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_85_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_89_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_89_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_93_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_93_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_4/mask_97_4.dat b/3rdparty/phpqrcode/cache/mask_4/mask_97_4.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_101_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_101_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_105_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_105_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_109_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_109_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_113_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_113_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_117_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_117_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_121_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_121_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_125_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_125_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_129_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_129_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_133_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_133_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_137_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_137_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_141_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_141_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_145_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_145_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_149_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_149_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_153_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_153_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_157_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_157_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_161_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_161_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_165_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_165_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_169_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_169_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_173_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_173_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_177_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_177_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_21_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_21_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_25_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_25_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_29_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_29_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_33_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_33_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_37_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_37_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_41_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_41_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_45_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_45_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_49_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_49_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_53_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_53_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_57_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_57_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_61_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_61_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_65_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_65_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_69_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_69_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_73_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_73_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_77_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_77_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_81_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_81_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_85_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_85_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_89_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_89_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_93_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_93_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_5/mask_97_5.dat b/3rdparty/phpqrcode/cache/mask_5/mask_97_5.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_101_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_101_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_105_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_105_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_109_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_109_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_113_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_113_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_117_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_117_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_121_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_121_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_125_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_125_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_129_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_129_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_133_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_133_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_137_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_137_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_141_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_141_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_145_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_145_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_149_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_149_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_153_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_153_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_157_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_157_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_161_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_161_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_165_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_165_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_169_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_169_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_173_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_173_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_177_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_177_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_21_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_21_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_25_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_25_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_29_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_29_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_33_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_33_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_37_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_37_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_41_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_41_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_45_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_45_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_49_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_49_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_53_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_53_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_57_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_57_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_61_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_61_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_65_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_65_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_69_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_69_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_73_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_73_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_77_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_77_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_81_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_81_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_85_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_85_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_89_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_89_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_93_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_93_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_6/mask_97_6.dat b/3rdparty/phpqrcode/cache/mask_6/mask_97_6.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_101_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_101_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_105_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_105_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_109_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_109_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_113_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_113_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_117_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_117_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_121_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_121_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_125_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_125_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_129_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_129_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_133_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_133_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_137_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_137_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_141_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_141_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_145_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_145_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_149_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_149_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_153_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_153_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_157_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_157_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_161_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_161_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_165_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_165_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_169_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_169_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_173_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_173_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_177_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_177_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_21_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_21_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_25_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_25_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_29_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_29_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_33_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_33_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_37_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_37_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_41_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_41_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_45_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_45_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_49_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_49_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_53_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_53_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_57_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_57_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_61_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_61_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_65_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_65_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_69_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_69_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_73_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_73_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_77_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_77_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_81_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_81_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_85_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_85_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_89_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_89_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_93_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_93_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/cache/mask_7/mask_97_7.dat b/3rdparty/phpqrcode/cache/mask_7/mask_97_7.dat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/index.php b/3rdparty/phpqrcode/index.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/phpqrcode.php b/3rdparty/phpqrcode/phpqrcode.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrbitstream.php b/3rdparty/phpqrcode/qrbitstream.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrconfig.php b/3rdparty/phpqrcode/qrconfig.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrconst.php b/3rdparty/phpqrcode/qrconst.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrencode.php b/3rdparty/phpqrcode/qrencode.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrimage.php b/3rdparty/phpqrcode/qrimage.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrinput.php b/3rdparty/phpqrcode/qrinput.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrlib.php b/3rdparty/phpqrcode/qrlib.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrmask.php b/3rdparty/phpqrcode/qrmask.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrrscode.php b/3rdparty/phpqrcode/qrrscode.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrspec.php b/3rdparty/phpqrcode/qrspec.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrsplit.php b/3rdparty/phpqrcode/qrsplit.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/qrtools.php b/3rdparty/phpqrcode/qrtools.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/tools/merge.bat b/3rdparty/phpqrcode/tools/merge.bat old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/tools/merge.php b/3rdparty/phpqrcode/tools/merge.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/tools/merge.sh b/3rdparty/phpqrcode/tools/merge.sh old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/tools/merged_config.php b/3rdparty/phpqrcode/tools/merged_config.php old mode 100644 new mode 100755 diff --git a/3rdparty/phpqrcode/tools/merged_header.php b/3rdparty/phpqrcode/tools/merged_header.php old mode 100644 new mode 100755 diff --git a/README.md b/README.md new file mode 100644 index 00000000..cec97d77 --- /dev/null +++ b/README.md @@ -0,0 +1,23 @@ +# Plugin Mobile Jeedom + +Validation PHP Version (branche BETA) : + +![PHP 7.3](https://github.com/jeedom/plugin-mobile/actions/workflows/lint_Php73.yml/badge.svg?branch=beta) +![PHP 7.4](https://github.com/jeedom/plugin-mobile/actions/workflows/lint_Php74.yml/badge.svg?branch=beta) + +Validation Code int (branche BETA): + +![PHP](https://github.com/jeedom/plugin-mobile/actions/workflows/php.yml/badge.svg?branch=beta) +![PHP](https://github.com/jeedom/plugin-mobile/actions/workflows/codeLintGlobal.yml/badge.svg?branch=beta) + + +-------- +Validation PHP Version (branche MASTER) : + +![PHP 7.3](https://github.com/jeedom/plugin-mobile/actions/workflows/lint_Php73.yml/badge.svg?branch=master) +![PHP 7.4](https://github.com/jeedom/plugin-mobile/actions/workflows/lint_Php74.yml/badge.svg?branch=master) + +Validation Code int (branche MASTER): + +![PHP](https://github.com/jeedom/plugin-mobile/actions/workflows/php.yml/badge.svg?branch=master) +![PHP](https://github.com/jeedom/plugin-mobile/actions/workflows/codeLintGlobal.yml/badge.svg?branch=master) diff --git a/core/.DS_Store b/core/.DS_Store deleted file mode 100644 index 6d1569dc..00000000 Binary files a/core/.DS_Store and /dev/null differ diff --git a/core/ajax/mobile.ajax.php b/core/ajax/mobile.ajax.php old mode 100644 new mode 100755 index 252f98f4..eb1b0faa --- a/core/ajax/mobile.ajax.php +++ b/core/ajax/mobile.ajax.php @@ -24,12 +24,44 @@ if (!isConnect('admin')) { throw new Exception(__('401 - Accès non autorisé', __FILE__)); } - + if (init('action') == 'updatemobile') { mobile::updatemobile(); ajax::success(); } + if (init('action') == 'constructMenu') { + $reponse = mobile::constructMenu(init('eqId')); + ajax::success($reponse); + } + + +if (init('action') == 'getEqLogicConfigs') { + + $eqLogic = eqLogic::byId(intval(init('eqId'))); + if(is_object($eqLogic)){ + $j = 0; + $arrayMenuConfig = array(); + for($i=1;$i < 5;$i++){ + $arrayTemp = []; + ${ 'spanIcon' . $i} = $eqLogic->getConfiguration('spanIcon'.$i ,'pasencorela'); + ${ 'renameIcon' . $i} = $eqLogic->getConfiguration('renameIcon'.$i ,'pasencorela'); + ${ 'selectNameMenu' . $i} = $eqLogic->getConfiguration('selectNameMenu'.$i, 'pasencorela'); + array_push($arrayMenuConfig, [${ 'spanIcon' . $i}, ${ 'renameIcon' . $i}, ${ 'selectNameMenu' . $i}]); + $j++; + } + log::add('mobile','debug','RETURNAJAXGETCONFIG ' . json_encode($arrayMenuConfig)); + } +ajax::success($arrayMenuConfig); +} + + + +if (init('action') == 'saveMenuEqLogics') { + mobile::saveMenuEqLogics(init('eqId'), init('arrayMenu'), init('checkDefaultBtn'), init('nbIcones')); + ajax::success(); +} + if (init('action') == 'getQrCode') { $eqLogic = mobile::byId(init('id')); if (!is_object($eqLogic)) { @@ -39,48 +71,66 @@ } } + if (init('action') == 'getQrCodeV2') { + $user = user::byId(init('chooseUser')); + if (!is_object($user)) { + throw new Exception(__('User inexistant : ', __FILE__)); + } else { + ajax::success(mobile::getQrCodeV2($user->getId())); + } + } + + + + if (init('action') == 'regenConfig') { mobile::makeTemplateJson(); ajax::success(); } - + + if (init('action') == 'testPanel') { + log::add('mobile','debug','JETESTLEPANELLLLLLLL '); + log::add('mobile','debug','NUMEROICONE ' .init('method') ); + ajax::success(); + } + if (init('action') == 'getSaveDashboard'){ $iq = init('iq'); $jsonDashboard = mobile::getSaveJson($iq, 'dashboard'); if ($jsonDashboard == ""){ - $reponse = false; + $reponse = false; }else{ $reponse = true; } ajax::success($reponse); } - + if (init('action') == 'getSaveFavDash'){ $iq = init('iq'); $jsonFavDash = mobile::getSaveJson($iq, 'favdash'); if ($jsonFavDash == ""){ - $reponse = false; + $reponse = false; }else{ $reponse = true; } ajax::success($reponse); } - - if (init('action') == 'savescenario'){ - $id = init('id'); - $sendApp = init('valueSend'); - $scenario = scenario::byId($id); - if(!is_object($scenario)){ - ajax::error('{{scenario non trouvé}}'); - } - $scenario->setDisplay("sendToApp",$sendApp); - $scenario->save(); - ajax::success($reponse); - } + + if (init('action') == 'savescenario'){ + $id = init('id'); + $sendApp = init('valueSend'); + $scenario = scenario::byId($id); + if(!is_object($scenario)){ + throw new Exception(__('scenario non trouvé', __FILE__)); + } + $scenario->setDisplay("sendToApp",$sendApp); + $scenario->save(); + ajax::success(); + } throw new Exception(__('Aucune methode correspondante à : ', __FILE__) . init('action')); } catch (Exception $e) { - ajax::error(displayExeption($e), $e->getCode()); + ajax::error(displayException($e), $e->getCode()); } -?> \ No newline at end of file +?> diff --git a/core/api/mobile.api.php b/core/api/mobile.api.php old mode 100644 new mode 100755 index b03cd152..c8ee0db4 --- a/core/api/mobile.api.php +++ b/core/api/mobile.api.php @@ -25,16 +25,330 @@ throw new Exception(__('JSONRPC object not defined', __FILE__), -32699); } -$params = $jsonrpc->getParams(); +function createMobile($params, $nbIcones = 3){ + log::add('mobile','debug',' ---- CREATE_NEW_MOBILE WITH '.$nbIcones.' ICONS ----'); + $configs = $params['configs']; + $notification = $configs['notification']; + $user = user::byHash($params['apikey']); + $userId = $user->getId(); + $mobile = new mobile(); + $mobile->setEqType_name('mobile'); + $mobile->setName($notification['platform'] . '-' . $params['Iq']); + $isMobileActivId = config::byKey('checkdefaultID','mobile'); + if($isMobileActivId != 'noActivMobile' && $isMobileActivId != ''){ + $mobileActive = eqLogic::byId(intval($isMobileActivId)); + if(is_object($mobileActive)){ + for($i=1; $i<5; $i++){ + ${ 'selectNameMenu' . $i} = $mobileActive->getConfiguration('selectNameMenu'.$i, 'none'); + ${ 'renameIcon' . $i} = $mobileActive->getConfiguration('renameIcon'.$i, ''); + ${ 'spanIcon' . $i} = $mobileActive->getConfiguration('spanIcon'.$i, 'none'); + ${ 'urlUser' . $i} = $mobileActive->getConfiguration('urlUser'.$i, 'none'); + $mobile->setConfiguration('selectNameMenu'.$i, ${ 'selectNameMenu' . $i}); + $mobile->setConfiguration('renameIcon'.$i, ${ 'renameIcon' . $i}); + $mobile->setConfiguration('spanIcon'.$i, ${ 'spanIcon' . $i}); + $mobile->setConfiguration('urlUser'.$i, ${ 'urlUser' . $i}); + } + } + }else{ + $namesMenus = ['home', 'overview', 'health', 'home']; + $renamesIcons = ['Accueil', 'Synthese', 'Santé', 'Accueil']; + $spanIcons = ['icon jeedomapp-in', 'fab fa-hubspot', 'fas fa-medkit', 'icon jeedomapp-in']; + $urlUsers = ['none', 'none', 'none', 'none']; + $j = 0; + $countFor = intval($nbIcones) + 1; + for($i=1; $i < $countFor; $i++){ + $mobile->setConfiguration(${'selectNameMenu' . $i}, $namesMenus[$j]); + $mobile->setConfiguration(${'renameIcon' . $i}, $renamesIcons[$j]); + $mobile->setConfiguration(${'spanIcon' . $i}, $spanIcons[$j]); + $mobile->setConfiguration(${'urlUser' . $i}, $urlUsers[$j]); + $mobile->setConfiguration('nbIcones', intval($nbIcones)); + $j++; + } + } + + $mobile->setConfiguration('type_mobile', $notification['platform']); + $mobile->setConfiguration('affect_user', $userId); + $mobile->setConfiguration('validate', 'no'); + $mobile->setConfiguration('appVersion', '2'); + $mobile->setLogicalId($params['Iq']); + $mobile->setIsEnable(1); + return $mobile; +} + +function checkDateMenu($menu, $mobile){ + $dateMobile = $mobile->getConfiguration('DateMenu', 'pasdedate'); + if(isset($dateMobile) && isset($menu['date'])){ + if($dateMobile < $menu['date']){ + log::add('mobile','debug','SAVE MENU DEPUIS L APP'); + saveMenuFromAppV2($menu, $mobile); + }else{ + log::add('mobile','debug','SAVE MENU DEPUIS LE PLUGIN'); + } + }else{ + return; + } +} + + +function saveMenuFromAppV2($menu, $mobile){ + log::add('mobile','debug','MENU_SAVE_FRM_APPV2 ' .json_encode($menu)); + if(is_object($mobile)){ + $count = 0; + $i=1; + foreach ($menu as $key => $value){ + if (isset($value['active']) && $value['active'] === true) { + $count++; + + if($value['options']['objectType'] != 'dashboard' && $value['options']['objectType'] != 'views' && $value['options']['objectType'] != 'plan' && $value['options']['objectType'] != 'panel'){ + $mobile->setConfiguration('selectNameMenu'.$i, $value['options']['objectType']); + if($value['options']['objectType'] == 'url'){ + if($value['options']['objectId'] != ''){ + $mobile->setConfiguration('urlUser'.$i, $value['options']['objectId']); + }else{ + $mobile->setConfiguration('urlUser'.$i, 'https://www.jeedom.com/fr/'); + } + } + }else{ + $mobile->setConfiguration('selectNameMenu'.$i, $value['options']['objectId'].'_'.$value['options']['objectType']); + } + $mobile->setConfiguration('renameIcon'.$i, $value['name']); + $mobile->setConfiguration('spanIcon'.$i, 'icon '.$value['icon']['type'].'-'.$value['icon']['name']); + } + $i++; + } + $mobile->setConfiguration('nbIcones', $count); + $mobile->save(); + } +} -log::add('mobile', 'debug', 'Appel API Mobile > ' . $jsonrpc->getMethod()); -log::add('mobile', 'debug', 'paramettres passés > ' . json_encode($params)); +$params = $jsonrpc->getParams(); +log::add('mobile', 'debug', '|------------------------------------------------------------------------------------------------------|'); +log::add('mobile', 'debug', '| Appel API Mobile > ' . $jsonrpc->getMethod()); +log::add('mobile', 'debug', '| paramètres passés > ' . json_encode($params)); if($params['Iq']){ - log::add('mobile', 'debug', 'Mobile demandeur > ' . mobile::whoIsIq($params['Iq'])); + log::add('mobile', 'debug', '| Mobile demandeur > ' . mobile::whoIsIq($params['Iq'])); } +log::add('mobile', 'debug', '|-----------------------------------'); + +if($jsonrpc->getMethod() == 'setConfigs'){ + log::add('mobile', 'debug', '| App V2 Demande > ' . $jsonrpc->getMethod()); + //log::add('mobile', 'debug', 'APRAMS > ' . json_encode($params)); + $configs = $params['configs']; + $menu = $configs['menu']; + $notification = $configs['notification']; + log::add('mobile', 'debug', '| configs > ' . json_encode($configs)); + log::add('mobile', 'debug', '| menu > ' . json_encode($menu)); + log::add('mobile', 'debug', '| notification > ' . json_encode($notification)); + $mobile = null; + if(isset($params['Iq'])) { + $mobile = eqLogic::byLogicalId($params['Iq'], 'mobile'); + } + if (!is_object($mobile)) { + $mobile = createMobile($params, 3); + } + if(isset($notification['token'])) { + log::add('mobile', 'debug', 'token a ajouter > ' . $notification['token']); + if($notification['token'] == 'notifsBGDisabled'){ + message::removeAll(__CLASS__, 'alertNotifs'); + $phoneName = $mobile->getName(); + message::add('mobile', 'Les Notifications sur votre mobile : '.$phoneName.' sont desactivées', 'notifsbg', 'alertNotifs'); + } + if($notification['token'] != ''){ + $mobile->setConfiguration('notificationRegistrationToken', $notification['token']); + } + } + $mobile->save(); + // TEMPORAIREMENT DESACTIVE + checkDateMenu($menu, $mobile); + $geolocs = $params['geolocs']; + if($geolocs){ + if($geolocs != []){ + mobile::createCmdGeoLocV2($params['Iq'], $params['geolocs']); + } + } + // mobile::createCmdGeoLocV2($params); + $jsonrpc->makeSuccess('ok'); +} + + +if($jsonrpc->getMethod() == 'getJson'){ + + log::add('mobile', 'debug', 'Demande du RDK to get Json'); + log::add('mobile', 'debug', 'Demande du RDK'); + $registerDevice = $_USER_GLOBAL->getOptions('registerDevice', array()); + if (!is_array($registerDevice)) { + $registerDevice = array(); + } + $rdk = (!isset($params['rdk']) || !isset($registerDevice[sha512($params['rdk'])])) ? config::genKey() : $params['rdk']; + $registerDevice[sha512($rdk)] = array(); + $registerDevice[sha512($rdk)]['datetime'] = date('Y-m-d H:i:s'); + $registerDevice[sha512($rdk)]['ip'] = getClientIp(); + $registerDevice[sha512($rdk)]['session_id'] = session_id(); + $_USER_GLOBAL->setOptions('registerDevice', $registerDevice); + $_USER_GLOBAL->save(); + log::add('mobile', 'debug', 'RDK :' . $rdk); + log::add('mobile', 'debug', 'Demande du GetJson'); + $idBox = jeedom::getHardwareKey(); + $return = array(); + /* -------- MOBILE FIRST ------- */ + log::add('mobile', 'debug', 'Creation du retour de base pour l app'); + $objectsDashboard = []; + foreach(jeeObject::all() as $object){ + $obArray = utils::o2a($object); + $objectId = $obArray['id']; + $objectName = $obArray['name']; + $objectsDashboard[$objectId] = $objectName; + } + $return[$idBox]['informations']['objects']['dashboard'] = $objectsDashboard; + $objectsViews = []; + foreach(view::all() as $object){ + $obArray = utils::o2a($object); + $objectId = $obArray['id']; + $objectName = $obArray['name']; + $objectsViews[$objectId] = $objectName; + } + $return[$idBox]['informations']['objects']['views'] = $objectsViews; + + $objectsPlan = []; + foreach(planHeader::all() as $object){ + $obArray = utils::o2a($object); + $objectId = $obArray['id']; + $objectName = $obArray['name']; + $objectsPlan[$objectId] = $objectName; + } + $return[$idBox]['informations']['objects']['plan'] = $objectsPlan; + $return[$idBox]['userRights'] = $_USER_GLOBAL->getProfils(); + $return[$idBox]['apikeyUser'] = $_USER_GLOBAL->getHash(); + $return[$idBox]['configs'] = 'undefined'; + $return[$idBox]['externalIp'] = network::getNetworkAccess('external'); + $return[$idBox]['localIp'] = network::getNetworkAccess('internal'); + $return[$idBox]['hardware'] = jeedom::getHardwareName(); + $return[$idBox]['hwkey'] = jeedom::getHardwareKey(); + $return[$idBox]['appMobile'] = '0.1'; + $return[$idBox]['ping'] = true; + $return[$idBox]['informations']['userRights'] = $_USER_GLOBAL->getProfils(); + $return[$idBox]['informations']['hardware'] = jeedom::getHardwareName(); + $return[$idBox]['informations']['language'] = config::byKey('language'); + $return[$idBox]['informations']['nbMessage'] = message::nbMessage(); + $arrayObjectMessages = message::all(); + $arrayMessages = []; + foreach($arrayObjectMessages as $message){ + $messageArray = utils::o2a($message); + array_push($arrayMessages, $messageArray); + } + $return[$idBox]['informations']['messages'] = $arrayMessages; + $arrayPlugins = []; + $changeLogs = []; + $healthPlugins = []; + $deamons_infos = []; + $objectsPanel = []; + foreach ((plugin::listPlugin()) as $plugin) { + $obArray = utils::o2a($plugin); + $objectId = $obArray['id']; + $objectName = $obArray['name']; + if($plugin->getDisplay() != '' || $plugin->getMobile() != ''){ + $objectsPanel[$objectId] = $objectName; + } + $update = $plugin->getUpdate(); + if(is_object($update)){ + $pluginUpdateArray = utils::o2a($update); + $arrayDataPlugins = utils::o2a($plugin); + if($plugin->getHasOwnDeamon() == 1){ + $deamons_infos[$plugin->getId()] = $plugin->deamon_info(); + }else{ + $deamons_infos[$plugin->getId()] = array('launchable_message' => 'nodemon', 'launchable' => 'nodemon', 'state' => 'nodemon', 'log' => 'nodemon', 'auto' => 0); + } + $changeLogs[$arrayDataPlugins['id']]['changelog'] = $arrayDataPlugins['changelog']; + $changeLogs[$arrayDataPlugins['id']]['changelog_beta'] = $arrayDataPlugins['changelog_beta']; + array_push($arrayPlugins, $pluginUpdateArray); + } + } + $return[$idBox]['informations']['objects']['panel'] = $objectsPanel; + $categories = []; + foreach (jeedom::getConfiguration('eqLogic:category') as $key => $value) { + $categories[$value['icon']] = $value['name']; + } + $return[$idBox]['informations']['objects']['categories'] = $categories; + sleep(1); + $coreData = []; + $resultCore = utils::o2a(update::byLogicalId('jeedom')); + array_push($coreData, $resultCore); + $return[$idBox]['informations']['coreBranch'] = config::byKey('core::branch'); + $return[$idBox]['informations']['coreData'] = $coreData; + $return[$idBox]['informations']['plugins'] = $arrayPlugins; + $return[$idBox]['informations']['changelog'] = $changeLogs; + $return[$idBox]['informations']['infosDemon'] = $deamons_infos; + $return[$idBox]['informations']['nbUpdate'] = update::nbNeedUpdate(); + $return[$idBox]['informations']['uname'] = system::getDistrib() . ' ' . method_exists('system','getOsVersion') ? system::getOsVersion() : 'UnknownVersion'; + $return[$idBox]['jeedom_version'] = jeedom::version(); + $return[$idBox]['rdk'] = $rdk; + $return[$idBox]['name'] = config::byKey('name'); + log::add('mobile', 'debug', 'retour de base > '.json_encode($return)); + + log::add('mobile', 'debug', 'recherche du mobile via sont Iq >'.$params['Iq']); + $mobile = eqLogic::byLogicalId($params['Iq'], 'mobile'); + log::add('mobile', 'debug', 'mobile object'); + if(is_object($mobile)){ + log::add('mobile', 'debug', 'mobile bien trouvé > '.$mobile->getName()); + $return[$idBox]['configs'] = array(); + $return[$idBox]['configs']['menu'] = mobile::configMenuCustom($mobile->getId(), jeedom::version()); + }else{ + if(jeedom::version() < '4.4.0'){ + //$return[$idBox]['configs']['menu'] = mobile::configMenuCustom($mobile->getId(), jeedom::version()); + }else{ + $defaultMenuJson = '{"tab0":{"active":true,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"}, + "tab1":{"active":true,"icon":{"name":"hubspot","type":"fa"},"name":"Synthese","options":{"uri":"\/index.php?v=m&p=overview"},"type":"WebviewApp"}, + "tab2":{"active":true,"icon":{"name":"medkit","type":"fa"},"name":"Sant\u00e9","options":{"uri":"\/index.php?v=m&p=health"},"type":"WebviewApp"}, + "tab3":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1"},"type":"WebviewApp"}}'; + $defaultMenuArray = json_decode($defaultMenuJson, true); + $return[$idBox]['configs']['menu'] = $defaultMenuArray; + } + } + log::add('mobile', 'debug', 'CustomENVOICONFIGSAPI GETJSON' .json_encode($return[$idBox]['configs'])); + log::add('mobile','debug','INFOS GETJSONINITAL : '.json_encode($return)); + $jsonrpc->makeSuccess($return); + +} + +if ($jsonrpc->getMethod() == 'deleteMessage') { + $message = message::byId($params['appInfos']['idmessage']); + if(is_object($message)){ + $message->remove(); + $jsonrpc->makeSuccess("true"); + } + $jsonrpc->makeSuccess("false"); + } + + + if ($jsonrpc->getMethod() == 'deleteAllMessageByType') { + if(isset($params['appInfos']['messageType'])){ + if($params['appInfos']['messageType'] == 'jeedom'){ + message::removeAll('jeedom'); + $jsonrpc->makeSuccess("true"); + }elseif($params['appInfos']['messageType'] == 'plugins'){ + $messages = message::all(); + foreach($messages as $message){ + if(is_object($message)){ + if($message->getPlugin() != 'jeedom'){ + $message->remove(); + } + }else{ + $jsonrpc->makeSuccess("false"); + } + } + $jsonrpc->makeSuccess("true"); + } + }else{ + $jsonrpc->makeSuccess("false"); + } + } + + + if ($jsonrpc->getMethod() == 'sync') { if (jeedom::version() >= '3.2.0') { + log::add('mobile', 'debug', 'SYNC'); log::add('mobile', 'debug', 'Demande du RDK'); $registerDevice = $_USER_GLOBAL->getOptions('registerDevice', array()); if (!is_array($registerDevice)) { @@ -160,7 +474,11 @@ } if ($jsonrpc->getMethod() == 'askText') { - log::add('mobile', 'debug', 'arriver reponse ask Textuel depuis le mobile > ' . $params['Iq']); + log::add('mobile', 'debug', 'TESTAPIASK'); + log::add('mobile', 'debug', 'Arrivée reponse ask Textuel depuis le mobile > ' . $params['Iq']); + /*$configs = $params['configs']; + $menu = $configs['menu']; + $notification = $configs['notification'];*/ $mobile = eqLogic::byLogicalId($params['Iq'], 'mobile'); log::add('mobile', 'debug', 'mobile >' . json_encode($mobile)); if (is_object($mobile)) { @@ -173,7 +491,15 @@ $cmd = $mobile->getCmd(null, 'notif'); log::add('mobile', 'debug', 'IQ > ' . $params['Iq'] . ' demande cmd > ' . $cmd->getId()); if ($cmd->askResponse($textCasse)) { - log::add('mobile', 'debug', 'ask bien trouvé réponse validée'); + log::add('mobile', 'debug', 'ask bien trouvé : Réponse validée'); + $jsonrpc->makeSuccess(); + }else{ + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $cmd->generateAskResponseLink($params['text'])); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + $output = curl_exec($ch); + curl_close($ch); + log::add('mobile', 'debug', $output); $jsonrpc->makeSuccess(); } } @@ -202,7 +528,7 @@ mobile::SaveGeoloc($params); $jsonrpc->makeSuccess(); }else{ - throw new Exception(__('pas d\'id : ', __FILE__) . $params['name']); + throw new Exception(__('pas d\'id : ', __FILE__) . $params['name']); } } @@ -212,6 +538,60 @@ $jsonrpc->makeSuccess(); } +if($jsonrpc->getMethod() == 'mobile::geoloc'){ + log::add('mobile', 'debug', '|-----------------------------------'); + log::add('mobile', 'debug', '|-GeoLocV2 geofencing --'); + log::add('mobile', 'debug', '| event > '.$params['event']); + + if($params['event'] == 'geofence'){ + $geofence = $params['geofence']; + log::add('mobile', 'debug', '| event > '.json_encode($geofence)); + $eqLogicMobile = eqLogic::byLogicalId($params['Iq'], 'mobile'); + if($eqLogicMobile){ + log::add('mobile', 'debug', '| Mobile trouvé'); + $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoloc_' . $geofence['identifier']); + if(is_object($cmdgeoloc)){ + log::add('mobile', 'debug', '| commande trouvé'); + if($geofence['action'] == 'ENTER'){ + log::add('mobile', 'debug', '| commande passé à 1'); + $cmdgeoloc->event(1); + }elseif($geofence['action'] == 'EXIT'){ + log::add('mobile', 'debug', '| commande passé à 0'); + $cmdgeoloc->event(0); + } + } + } + log::add('mobile', 'debug', '|-----------------------------------'); + $jsonrpc->makeSuccess(); + }else{ + throw new Exception(__('pas de parametre de geofencing : ', __FILE__)); + } +} + +if($jsonrpc->getMethod() == "qrcodemethod"){ + log::add('mobile', 'debug', 'QrCode > '.json_encode($params)); + if($params['appInfos']){ + log::add('mobile', 'debug', 'valeur du QrCode > '.json_encode($params['appInfos']['qrCode'])); + if(isset($params['appInfos']['qrCode']['displayValue'])){ + mobile::cmdForApi($params['Iq'],"barrecodemethod",$params['appInfos']['qrCode']['displayValue'],"CodeBarre"); + }else{ + mobile::cmdForApi($params['Iq'],"qrcodemethod",json_encode($params['appInfos']['qrCode']),"QrCode"); + } + $jsonrpc->makeSuccess(); + } +} + +if($jsonrpc->getMethod() == "nfc"){ + $id = (isset($params['appInfos']['payload']['id'])) ? $params['appInfos']['payload']['id'] : ""; + $payload = (isset($params['appInfos']['payload']['payload'])) ? $params['appInfos']['payload']['payload'] : ""; + mobile::cmdForApi($params['Iq'], "nfcId", $id, "Nfc Id"); + mobile::cmdForApi($params['Iq'], "nfcPayload", json_encode($payload), "Nfc Payload"); + + log::add('mobile', 'debug', '| Id > ' . $id); + log::add('mobile', 'debug', '| Payload > ' . $payload); + + $jsonrpc->makeSuccess(); +} throw new Exception(__('Aucune demande', __FILE__)); ?> diff --git a/core/class/mobile.class.php b/core/class/mobile.class.php old mode 100644 new mode 100755 index 4f58332a..c07fe830 --- a/core/class/mobile.class.php +++ b/core/class/mobile.class.php @@ -19,10 +19,11 @@ /* * ***************************Includes********************************* */ require_once dirname(__FILE__) . '/../../../../core/php/core.inc.php'; -class mobile extends eqLogic { +class mobile extends eqLogic +{ /* * *************************Attributs****************************** */ - public static $_pluginSuported = array('mobile', 'openzwave', 'rfxcom', 'edisio', 'mpower', 'mySensors', 'Zibasedom', 'virtual', 'camera', 'weather', 'philipsHue', 'enocean', 'wifipower', 'alarm', 'mode', 'apcupsd', 'btsniffer', 'dsc', 'rflink', 'mysensors', 'relaynet', 'remora', 'unipi', 'eibd', 'thermostat', 'netatmoThermostat', 'espeasy', 'jeelink', 'teleinfo', 'tahoma', 'protexiom','boilerThermostat', 'lifx', 'wattlet', 'rfplayer', 'openenocean', 'netatmoWeather', 'Volets', 'vmczehnder','zigbee'); + public static $_pluginSuported = array('mobile', 'openzwave', 'rfxcom', 'edisio', 'mpower', 'mySensors', 'Zibasedom', 'virtual', 'camera', 'weather', 'philipsHue', 'enocean', 'wifipower', 'alarm', 'mode', 'apcupsd', 'btsniffer', 'dsc', 'rflink', 'mysensors', 'relaynet', 'remora', 'unipi', 'eibd', 'thermostat', 'netatmoThermostat', 'espeasy', 'jeelink', 'teleinfo', 'tahoma', 'protexiom', 'boilerThermostat', 'lifx', 'wattlet', 'rfplayer', 'openenocean', 'netatmoWeather', 'Volets', 'vmczehnder', 'zigbee'); public static $_pluginWidget = array('alarm', 'camera', 'thermostat', 'netatmoThermostat', 'weather', 'mode', 'mobile'); @@ -30,20 +31,22 @@ class mobile extends eqLogic { //public static $_urlAws = 'https://api-notif.jeedom.com/notif/'; - public static $_listenEvents = array('cmd::update', 'scenario::update','jeeObject::summary::update'); + public static $_listenEvents = array('cmd::update', 'scenario::update', 'jeeObject::summary::update'); /* * ***********************Methode static*************************** */ - public static function whoIsIq($iq){ + public static function whoIsIq($iq) + { $search = eqLogic::byLogicalId($iq, 'mobile'); - if(is_object($search)){ + if (is_object($search)) { return $search->getName(); - }else{ + } else { return 'mobile non detecte'; } } - public static function pluginToSend() { + public static function pluginToSend() + { $return = []; $plugins = plugin::listPlugin(true); foreach ($plugins as $plugin) { @@ -69,7 +72,8 @@ public static function pluginToSend() { return $return; } - public static function makeTemplateJson() { + public static function makeTemplateJson() + { $pluginToSend = mobile::pluginToSend(); $discover_eqLogic = mobile::discovery_eqLogic($pluginToSend); $sync_new = mobile::change_cmdAndeqLogic(mobile::discovery_cmd($pluginToSend, $discover_eqLogic), $discover_eqLogic); @@ -77,7 +81,7 @@ public static function makeTemplateJson() { 'url_internal' => network::getNetworkAccess('internal'), 'url_external' => network::getNetworkAccess('external'), ); - $objectReturn = mobile::delete_object_eqlogic_null(mobile::discovery_object(), $sync_new['eqLogics']); + $objectReturn = mobile::delete_object_eqlogic_null(mobile::discovery_object(), $sync_new['eqLogics']); $data = array( 'eqLogics' => $sync_new['eqLogics'], 'cmds' => $sync_new['cmds'], @@ -102,14 +106,16 @@ public static function makeTemplateJson() { cache::set('mobile::event', $event_cmd); } - public static function getTemplateJson() { + public static function getTemplateJson() + { if (!file_exists(dirname(__FILE__) . '/../../data/mobile.json')) { self::makeTemplateJson(); } return json_decode(cmd::cmdToValue(file_get_contents(dirname(__FILE__) . '/../../data/mobile.json')), true); } - public static function makeSaveJson($data = array(), $mobileID, $type = 'dashboard') { + public static function makeSaveJson($data = array(), $mobileID, $type = 'dashboard') + { $path = dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json'; if (!file_exists(dirname(__FILE__) . '/../../data')) { mkdir(dirname(__FILE__) . '/../../data'); @@ -123,14 +129,16 @@ public static function makeSaveJson($data = array(), $mobileID, $type = 'dashboa file_put_contents(dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json', json_encode($data)); } - public static function getSaveJson($mobileID, $type = 'dashboard') { + public static function getSaveJson($mobileID, $type = 'dashboard') + { if (!file_exists(dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json')) { self::makeSaveJson(array(), $mobileID, $type); } return json_decode(file_get_contents(dirname(__FILE__) . '/../../data/' . $mobileID . '/' . $type . '.json'), true); } - public static function discovery_eqLogic($plugin = array(), $hash = null) { + public static function discovery_eqLogic($plugin = array(), $hash = null) + { $return = array(); foreach ($plugin as $plugin_type) { $eqLogics = eqLogic::byType($plugin_type, true); @@ -145,10 +153,10 @@ public static function discovery_eqLogic($plugin = array(), $hash = null) { if ($eqLogic->getObject_id() == null) { continue; } - $objectNow = $eqLogic->getObject(); - if(!is_object($objectNow)){ - continue; - } + $objectNow = $eqLogic->getObject(); + if (!is_object($objectNow)) { + continue; + } if (($eqLogic->getIsVisible() != 1 && (!in_array($eqLogic->getEqType_name(), self::$_pluginWidget)) || $objectNow->getDisplay('sendToApp', 1) != 1)) { continue; } @@ -162,8 +170,8 @@ public static function discovery_eqLogic($plugin = array(), $hash = null) { if (isset($eqLogic_array["configuration"]["localApiKey"])) { $eqLogic_array["localApiKey"] = $eqLogic_array["configuration"]["localApiKey"]; } - if ($eqLogic_array['eqType_name'] == 'jeelink'){ - if(isset($eqLogic_array['configuration']['real_eqType'])){ + if ($eqLogic_array['eqType_name'] == 'jeelink') { + if (isset($eqLogic_array['configuration']['real_eqType'])) { $eqLogic_array['eqType_name'] = $eqLogic_array['configuration']['real_eqType']; } } @@ -173,7 +181,7 @@ public static function discovery_eqLogic($plugin = array(), $hash = null) { unset($eqLogic_array['logicalId']); unset($eqLogic_array['isVisible']); unset($eqLogic_array['isEnable']); - if(!in_array($eqLogic_array['eqType_name'], self::$_pluginWidget)){ + if (!in_array($eqLogic_array['eqType_name'], self::$_pluginWidget)) { unset($eqLogic_array['eqType_name']); } $return[] = $eqLogic_array; @@ -182,7 +190,8 @@ public static function discovery_eqLogic($plugin = array(), $hash = null) { return $return; } - public static function discovery_cmd($plugin = array(), $eqLogics = null, $_withValue = false) { + public static function discovery_cmd($plugin = array(), $eqLogics = null, $_withValue = false) + { $return = array(); $genericisvisible = array(); foreach (jeedom::getConfiguration('cmd::generic_type') as $key => $info) { @@ -233,9 +242,9 @@ public static function discovery_cmd($plugin = array(), $eqLogics = null, $_with } if (isset($info['display']['icon'])) { $info['display']['icon'] = str_replace(array(''), '', $info['display']['icon']); - if (strstr($info['display']['icon'], ' icon_')){ + if (strstr($info['display']['icon'], ' icon_')) { $info['display']['icon'] = strstr($info['display']['icon'], ' icon_', true); - } + } } foreach ($info['display'] as $key => $value) { if (trim($value) == '') { @@ -270,7 +279,8 @@ public static function discovery_cmd($plugin = array(), $eqLogics = null, $_with return $return; } - public static function discovery_multi($cmds) { + public static function discovery_multi($cmds) + { $array_final = array(); $tableData = self::$_pluginMulti; foreach ($cmds as $cmd) { @@ -295,7 +305,8 @@ public static function discovery_multi($cmds) { return $array_cmd_multi; } - public static function change_cmdAndeqLogic($_cmds, $_eqLogics) { + public static function change_cmdAndeqLogic($_cmds, $_eqLogics) + { $findEqLogic = array(); foreach ($_cmds as $cmd) { $findEqLogic[$cmd['eqLogic_id']] = $cmd['eqLogic_id']; @@ -343,7 +354,8 @@ public static function change_cmdAndeqLogic($_cmds, $_eqLogics) { return array('cmds' => $_cmds, 'eqLogics' => $eqLogics); } - public static function discovery_object() { + public static function discovery_object() + { $all = utils::o2a(jeeObject::all()); $return = array(); foreach ($all as $object) { @@ -356,22 +368,22 @@ public static function discovery_object() { unset($object['display']['desktop::summaryTextColor']); unset($object['display']['dashboard::size']); unset($object['display']['summaryTextColor']); - unset($object['image']); - unset($object['img']); + unset($object['image']); + unset($object['img']); unset($object['father_id']); if (isset($object['display']['icon'])) { if ($object['display']['icon'] == '') { unset($object['display']['icon']); } else { $object['display']['icon'] = str_replace(array(''), '', $object['display']['icon']); - $tableEx = array(); - $explodes = explode(' ', $object['display']['icon']); - foreach ($explodes as $explode){ - if(substr($explode, 0, 5) != 'icon_'){ - $tableEx[] = $explode; - } - } - $object['display']['icon'] = implode(' ', $tableEx); + $tableEx = array(); + $explodes = explode(' ', $object['display']['icon']); + foreach ($explodes as $explode) { + if (substr($explode, 0, 5) != 'icon_') { + $tableEx[] = $explode; + } + } + $object['display']['icon'] = implode(' ', $tableEx); } } $return[] = $object; @@ -379,7 +391,8 @@ public static function discovery_object() { return $return; } - public static function discovery_scenario() { + public static function discovery_scenario() + { $all = utils::o2a(scenario::all()); $return = array(); foreach ($all as &$scenario) { @@ -401,12 +414,14 @@ public static function discovery_scenario() { return $return; } - public static function discovery_message() { + public static function discovery_message() + { //return utils::o2a(message::all()); - return array(); + return array(); } - public static function discovery_plan() { + public static function discovery_plan() + { $plans = utils::o2a(planHeader::all()); foreach ($plans as &$plan) { if (isset($plan['image'])) { @@ -421,7 +436,8 @@ public static function discovery_plan() { return $plans; } - public static function discovery_summary() { + public static function discovery_summary() + { $return = array(); $def = config::byKey('object:summary'); foreach ($def as $key => &$value) { @@ -431,55 +447,57 @@ public static function discovery_summary() { unset($value['icon']); } else { $value['icon'] = str_replace(array(''), '', $value['icon']); - $tableEx = array(); - $explodes = explode(' ', $value['icon']); - foreach ($explodes as $explode){ - if(substr($explode, 0, 5) != 'icon_'){ - $tableEx[] = $explode; - } - } - $value['icon'] = implode(' ', $tableEx); + $tableEx = array(); + $explodes = explode(' ', $value['icon']); + foreach ($explodes as $explode) { + if (substr($explode, 0, 5) != 'icon_') { + $tableEx[] = $explode; + } + } + $value['icon'] = implode(' ', $tableEx); } } } return $def; } - public static function discovery_summaryValue($jeeObjectEnvoi){ - $def = config::byKey('object:summary'); - $tableKey = array(); + public static function discovery_summaryValue($jeeObjectEnvoi) + { + $def = config::byKey('object:summary'); + $tableKey = array(); foreach ($def as $key => $value) { - $tableKey[] = $key; - } + $tableKey[] = $key; + } $table = array(); - foreach ($jeeObjectEnvoi as $jeeobject){ + foreach ($jeeObjectEnvoi as $jeeobject) { $object = jeeObject::byId($jeeobject['id']); if (is_object($object)) { - foreach ($tableKey as $key){ - if($object->getSummary($key) != null){ - $tableObject = array(); - $tableObject['object_id'] = $object->getId(); - $tableObject['key'] = $key; - $tableObject['value'] = $object->getSummary($key); - $table[] = $tableObject; - } - } - } - } - foreach ($tableKey as $key){ - if(jeeObject::getGlobalSummary($key) != null){ - $tableObject = array(); - $tableObject['object_id'] = 'global'; - $tableObject['key'] = $key; - $tableObject['value'] = jeeObject::getGlobalSummary($key); - $table[] = $tableObject; - } - } + foreach ($tableKey as $key) { + if ($object->getSummary($key) != null) { + $tableObject = array(); + $tableObject['object_id'] = $object->getId(); + $tableObject['key'] = $key; + $tableObject['value'] = $object->getSummary($key); + $table[] = $tableObject; + } + } + } + } + foreach ($tableKey as $key) { + if (jeeObject::getGlobalSummary($key) != null) { + $tableObject = array(); + $tableObject['object_id'] = 'global'; + $tableObject['key'] = $key; + $tableObject['value'] = jeeObject::getGlobalSummary($key); + $table[] = $tableObject; + } + } return $table; } - public static function delete_object_eqlogic_null($objects, $eqLogics) { + public static function delete_object_eqlogic_null($objects, $eqLogics) + { $return = array(); $object_id = array(); foreach ($eqLogics as $eqLogic) { @@ -494,8 +512,9 @@ public static function delete_object_eqlogic_null($objects, $eqLogics) { return $return; } - public function getQrCode() { - require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php'; + public function getQrCode() + { + require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php'; $interne = network::getNetworkAccess('internal'); $externe = network::getNetworkAccess('external'); if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') { @@ -523,12 +542,43 @@ public function getQrCode() { } ob_start(); QRcode::png(json_encode($request_qrcode)); - $imageString = base64_encode( ob_get_contents() ); + $imageString = base64_encode(ob_get_contents()); + ob_end_clean(); + return $imageString; + } + + + public static function getQrCodeV2($userId) + { + require_once dirname(__FILE__) . '/../../3rdparty/phpqrcode/qrlib.php'; + $interne = network::getNetworkAccess('internal'); + $externe = network::getNetworkAccess('external'); + if ($interne == null || $interne == 'http://:80' || $interne == 'https://:80') { + return 'internalError'; + } + if ($externe == null || $externe == 'http://:80' || $externe == 'https://:80') { + return 'externalError'; + } + if (!is_object(user::byId($userId))) { + return 'UserError'; + } + $request_qrcode = array( + 'url_internal' => $interne, + 'url_external' => $externe + ); + if (is_object($user = user::byId($userId))) { + $request_qrcode['username'] = $user->getLogin(); + $request_qrcode['apikey'] = $user->getHash(); + } + ob_start(); + QRcode::png(json_encode($request_qrcode)); + $imageString = base64_encode(ob_get_contents()); ob_end_clean(); return $imageString; } - public static function jsonPublish($os, $titre, $message, $badge = 'null', $type, $idNotif, $answer, $timeout, $token, $photo) { + public static function jsonPublish($os, $titre, $message, $badge = 'null', $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif = [], $critical = false) + { $dateNotif = date("Y-m-d H:i:s"); $badge = 0; if ($timeout != 'nok') { @@ -539,92 +589,221 @@ public static function jsonPublish($os, $titre, $message, $badge = 'null', $type $addAsk = '\"category\":\"TEXT_CATEGORY\",\"answer\":\"' . $answer . '\",\"timeout\":\"' . $timeout . '\",'; } - if($token == null){ - $message = preg_replace("# {2,}#", " ", preg_replace("#(\r\n|\n\r|\n|\r)#", "\\\\\\n", $message)); - if ($os == 'ios') { - if ($badge == 'null') { - $publish = '{"default": "test", "APNS": "{\"aps\":{\"content-available\":\"1\",' . $addAsk . '\"alert\": {\"title\":\"' . $titre . '\",\"body\":\"' . $message . '\"},\"badge\":\"0\",\"sound\":\"silence.caf\",\"date\":\"' . $dateNotif . '\",\"idNotif\":\"' . $idNotif . '\"}}"}'; - } else { - $publish = '{"default": "test", "APNS": "{\"aps\":{\"content-available\":\"1\",' . $addAsk . '\"alert\": {\"title\":\"' . $titre . '\",\"body\":\"' . $message . '\"},\"badge\":\"'. $badge .'\",\"sound\":\"silence.caf\",\"date\":\"' . $dateNotif . '\",\"idNotif\":\"' . $idNotif . '\"}}"}'; - } - } else if ($os == 'android') { - $publish = '{"default": "Erreur de texte de notification", "GCM": "{ \"notification\": {\"e\":0,\"title\":\"test\",\"body\":\"NotficationTEST\"},\"data\":{\"ticker\":\"test\",\"android_channel_id\":\"JEEDOM_CHANNEL\",\"notificationId\":\"' . $idNotif . '\",\"title\":\"' . $titre . '\",\"text\":\"' . $message . '\",' . $addAsk . '\"sound\":\"default\",\"idNotif\":\"' . $idNotif . '\",\"date\":\"' . $dateNotif . '\",\"smallIcon\":\"notificon\",\"largeIcon\":\"appicon.png\"}}"}'; - } else if ($os == 'microsoft') { - - } - }else{ - if ($os == 'android') { - $android = [ - 'notification' => [ - 'title' => $titre, - 'body' => $message, - 'channel_id' => 'default', - 'color' => '#0000FF' - ] - ]; - - $data = [ - 'title' => $titre, - 'text' => $message, - 'idNotif' => strval($idNotif), - 'channelId' => 'default', - 'date' => $dateNotif - ]; - - if($photo != null){ - $notification = [ - 'title' => $titre, - 'body' => $message, - 'image' => $photo - ]; - }else{ - $notification = [ - 'title' => $titre, - 'body' => $message - ]; - } - - $publish = [ - 'token' => $token, - 'notification' => $notification, - 'android' => $android, - 'data' => $data - ]; - - } - } + if ($token == null) { + $message = preg_replace("# {2,}#", " ", preg_replace("#(\r\n|\n\r|\n|\r)#", "\\\\\\n", $message)); + if ($os == 'ios') { + if ($badge == 'null') { + $publish = '{"default": "test", "APNS": "{\"aps\":{\"content-available\":\"1\",' . $addAsk . '\"alert\": {\"title\":\"' . $titre . '\",\"body\":\"' . $message . '\"},\"badge\":\"0\",\"sound\":\"silence.caf\",\"date\":\"' . $dateNotif . '\",\"idNotif\":\"' . $idNotif . '\"}}"}'; + } else { + $publish = '{"default": "test", "APNS": "{\"aps\":{\"content-available\":\"1\",' . $addAsk . '\"alert\": {\"title\":\"' . $titre . '\",\"body\":\"' . $message . '\"},\"badge\":\"' . $badge . '\",\"sound\":\"silence.caf\",\"date\":\"' . $dateNotif . '\",\"idNotif\":\"' . $idNotif . '\"}}"}'; + } + } else if ($os == 'android') { + $publish = '{"default": "Erreur de texte de notification", "GCM": "{ \"notification\": {\"e\":0,\"title\":\"test\",\"body\":\"NotficationTEST\"},\"data\":{\"ticker\":\"test\",\"android_channel_id\":\"JEEDOM_CHANNEL\",\"notificationId\":\"' . $idNotif . '\",\"title\":\"' . $titre . '\",\"text\":\"' . $message . '\",' . $addAsk . '\"sound\":\"default\",\"idNotif\":\"' . $idNotif . '\",\"date\":\"' . $dateNotif . '\",\"smallIcon\":\"notificon\",\"largeIcon\":\"appicon.png\"}}"}'; + } else if ($os == 'microsoft') { + } + } else { + if ($os == 'android' && $version == 1) { + $android = [ + 'notification' => [ + 'title' => $titre, + 'body' => $message, + 'channel_id' => 'default', + 'color' => '#0000FF' + ] + ]; + + $data = [ + 'title' => $titre, + 'text' => $message, + 'idNotif' => strval($idNotif), + 'channelId' => 'default', + 'date' => $dateNotif + + ]; + + if ($photo != null) { + $notification = [ + 'title' => $titre, + 'body' => $message, + 'image' => $photo + ]; + } else { + $notification = [ + 'title' => $titre, + 'body' => $message + ]; + } + + $publish = [ + 'token' => $token, + 'notification' => $notification, + 'android' => $android, + 'data' => $data + ]; + } + if ($version == 2) { + + if ($addAsk != '') { + $askParams = [ + 'choices' => $answer, + 'idVariable' => $optionsNotif['askVariable'], + 'boxName' => config::byKey('name'), + 'hwKey' => jeedom::getHardwareKey(), + 'timeout' => (strtotime($timeout) - time()) * 1000, + 'isBack' => false + ]; + $askParams = json_encode($askParams); + } else { + + $askParams = 'noAsk'; + $optionsNotif['askVariable'] = 'rien'; + } + + $optionsNotif['askParams'] = $askParams; + + $channelId = "default"; + if ($os == 'android' && $critical == true) { + $channelId = "critical"; + } + + $customData = [ + 'title' => $titre, + 'body' => $message, + 'idNotif' => strval($idNotif), + 'channelId' => $channelId, + 'date' => $dateNotif, + 'boxName' => config::byKey('name'), + 'boxApiKey' => jeedom::getHardwareKey() + ]; + + $notification = [ + 'title' => $titre, + 'body' => $message, + ]; + + $data = array_merge($customData, $optionsNotif); + + $android = [ + 'data' => $data, + 'priority' => 'high', + ]; + + $apns = [ + 'headers' => [ + 'apns-priority' => '5', + 'apns-collapse-id' => strval($idNotif), + 'apns-push-type' => 'alert', + 'apns-topic' => 'com.jeedom.jeedomobile' + ], + 'payload' => [ + 'aps' => [ + 'content-available' => true, + 'sound' => [ + 'name' => 'default', + 'critical' => $critical + ], + 'alert' => [ + 'subtitle' => config::byKey('name'), + 'title' => $titre, + 'body' => $message + ] + ], + 'notifee_options' => [ + 'ios' => [ + 'sound' => 'default', + 'critical' => $critical, + 'foregroundPresentationOptions' => [ + 'alert' => true, + 'badge' => true, + 'sound' => true + ] + ] + ] + ] + + ]; + + + if ($photo != null) { + $android['data']['image'] = $photo; + $apns['payload']['notifee_options']['image'] = $photo; + $apns['payload']['notifee_options']['ios']['attachments'] = [ + [ + 'url' => $photo, + 'typeHint' => $optionsNotif['typeHint'] + ] + ]; + } + + if ($os == 'android') { + $publish = [ + 'token' => $token, + 'android' => $android, + 'data' => $data, + ]; + } else { + $publish = [ + 'token' => $token, + 'data' => $data, + 'apns' => $apns, + ]; + } + } + } + log::add('mobile', 'debug', 'JSON publish > : ' . json_encode($publish)); return $publish; } - public static function notification($arn, $os, $titre, $message, $badge = 'null', $type, $idNotif, $answer, $timeout, $token, $photo) { + public static function notification($arn, $os, $titre, $message, $badge = 'null', $type, $idNotif, $answer, $timeout, $token, $photo, $version = 1, $optionsNotif = [], $critical = false) + { log::add('mobile', 'debug', 'notification en cours !'); - $publish = ($badge == 'null') ? mobile::jsonPublish($os, $titre, $message, $badge, $type, $idNotif, $answer, $timeout, $token, $photo) : mobile::jsonPublish($os, $titre, $message, $badge, $type, $idNotif, $answer, $timeout, $token, $photo); - if($token != null){ - $url = config::byKey('service::cloud::url','core','https://cloud.jeedom.com').'/service/fcm'; - $post = ['message' => $publish]; - log::add('mobile', 'debug', 'JSON envoyé : ' . json_encode($post)); - }else{ - log::add('mobile', 'debug', 'JSON envoyé : ' . $publish); - $post = [ + $publish = ($badge == 'null') ? mobile::jsonPublish($os, $titre, $message, $badge, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif, $critical) : mobile::jsonPublish($os, $titre, $message, $badge, $type, $idNotif, $answer, $timeout, $token, $photo, $version, $optionsNotif, $critical); + log::add('mobile', 'debug', 'JSON publish > : ' . json_encode($publish)); + if ($token != null) { + if ($token == 'notifsBGDisabled') { + log::add('mobile', 'debug', 'NOTIFICATION NON ENVOYEE : SERVICES NOTIF DESACTIVE SUR VOTRE TELEPHONE : '); + message::removeAll(__CLASS__, 'alertNotifsSend'); + message::add(__CLASS__, 'Echec envoie de notification : service desactive dans les parametres de votre telephone', 'notifsbgSend', 'alertNotifsSend'); + return; + } + $url = config::byKey('service::cloud::url', 'core', 'https://cloud.jeedom.com') . '/service/fcm'; + $options = [ + 'contentAvailable' => true, + 'mutableContent' => true, + 'priority' => 'high', + 'collapseKey' => strval($publish['data']['idNotif']) + ]; + + $post = ['message' => $publish, 'options' => $options]; + log::add('mobile', 'debug', 'JSON envoyé en mode FCM : ' . json_encode($post)); + } elseif ($token == null && $version == 2) { + log::add('mobile', 'debug', 'NOTIFICATION NON ENVOYEE : PAS DE TOKEN ENREGISTRE SUR VOTRE TELEPHONE : '); + message::removeAll(__CLASS__, 'noValidToken'); + message::add(__CLASS__, 'NOTIFICATION NON ENVOYEE : PAS DE TOKEN ENREGISTRE SUR VOTRE TELEPHONE :', 'noValidTok', 'noValidToken'); + return; + } else { + log::add('mobile', 'debug', 'JSON envoyé : APN' . $publish); + $post = [ 'arn' => $arn, 'text' => $publish, ]; - $url = config::byKey('service::cloud::url','core','https://cloud.jeedom.com').'/service/notif'; - } + $url = config::byKey('service::cloud::url', 'core', 'https://cloud.jeedom.com') . '/service/notif'; + } $request_http = new com_http($url); - $request_http->setHeader(array( - 'Content-Type: application/json', - 'Autorization: '.sha512(strtolower(config::byKey('market::username')).':'.config::byKey('market::password')) - )); - $request_http->setPost(json_encode($post)); - $result = json_decode($request_http->exec(3,5),true); - if(!isset($result['state']) || $result['state'] != 'ok'){ + $request_http->setHeader(array( + 'Content-Type: application/json', + 'Autorization: ' . sha512(strtolower(config::byKey('market::username')) . ':' . config::byKey('market::password')) + )); + $request_http->setPost(json_encode($post)); + $result = json_decode($request_http->exec(3, 5), true); + if (!isset($result['state']) || $result['state'] != 'ok') { throw new Exception(__('Echec de l\'envoi de la notification :', __FILE__) . json_encode($result)); } } - public function SaveGeoloc($geoloc) { + public function SaveGeoloc($geoloc) + { log::add('mobile', 'debug', '|-----------------------------------'); log::add('mobile', 'debug', '|--debut de la fonction SaveGeoLoc--'); log::add('mobile', 'debug', '|-----------------------------------'); @@ -641,9 +820,10 @@ public function SaveGeoloc($geoloc) { $cmdgeoloc->setEqLogic_id($eqLogicMobile->getId()); $cmdgeoloc->setType('info'); $cmdgeoloc->setSubType('binary'); + $cmdgeoloc->setGeneric_type('PRESENCE'); $cmdgeoloc->setIsVisible(1); } - $cmdgeoloc->setName(__($geoloc['id'].'-'.$geoloc['name'], __FILE__)); + $cmdgeoloc->setName(__($geoloc['id'] . '-' . $geoloc['name'], __FILE__)); $cmdgeoloc->setConfiguration('latitude', $geoloc['latitude']); $cmdgeoloc->setConfiguration('longitude', $geoloc['longitude']); $cmdgeoloc->setConfiguration('subtitle', $geoloc['subtitle']); @@ -653,37 +833,383 @@ public function SaveGeoloc($geoloc) { } } - public function delGeoloc($geoloc) { - log::add('mobile', 'debug', 'Geoloc lancement DEL du mobile > '.$geoloc['Iq'].' pour '.$geoloc['id']); + + public static function createCmdGeoLocV2($Iq, $geolocs) + { + log::add('mobile', 'debug', '|-----------------------------------'); + log::add('mobile', 'debug', '|-GeoLocV2--'); + $mobile = eqLogic::byLogicalId($Iq, 'mobile'); + if (is_object($mobile)) { + log::add('mobile', 'debug', '| Mobile existant'); + log::add('mobile', 'debug', '| GEOLOCS > ' . $geolocs); + + $noExistCmd = 0; + $decodedGeolocs = json_decode($geolocs, true); + foreach ($decodedGeolocs as $index => $geoloc) { + log::add('mobile', 'debug', '| index > ' . $index . ' / ' . $geoloc['name']); + $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($mobile->getId(), 'geoloc_' . $index); + if (!is_object($cmdgeoloc)) { + $noExistCmd = 1; + $cmdgeoloc = new mobileCmd(); + $cmdgeoloc->setLogicalId('geoloc_' . $index); + $cmdgeoloc->setEqLogic_id($mobile->getId()); + $cmdgeoloc->setType('info'); + $cmdgeoloc->setSubType('binary'); + $cmdgeoloc->setIsVisible(1); + $cmdgeoloc->setGeneric_type('PRESENCE'); + $cmdgeoloc->setIsHistorized(1); + } + $cmdgeoloc->setName($geoloc['name']); + $cmdgeoloc->setConfiguration('latitude', $geoloc['latitude']); + $cmdgeoloc->setConfiguration('longitude', $geoloc['longitude']); + $cmdgeoloc->setConfiguration('radius', $geoloc['radius']); + $cmdgeoloc->save(); + if ($noExistCmd == 1) { + $cmdgeoloc->event($geoloc['value']); + log::add('mobile', 'debug', '| valeur enregistrée > ' . $geoloc['value']); + } + $noExistCmd = 0; + } + log::add('mobile', 'debug', '|-----------------------------------'); + } else { + log::add('mobile', 'debug', 'Mobile inexistant'); + } + } + + public function delGeoloc($geoloc) + { + log::add('mobile', 'debug', 'Geoloc lancement DEL du mobile > ' . $geoloc['Iq'] . ' pour ' . $geoloc['id']); $eqLogicMobile = eqLogic::byLogicalId($geoloc['Iq'], 'mobile'); $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoId_' . $geoloc['id']); - if(isset($cmdgeoloc)) { + if (isset($cmdgeoloc)) { $cmdgeoloc->remove(); } } - public function EventGeoloc($geoloc) { - log::add('mobile', 'debug', 'Geoloc Event du mobile > '.$geoloc['Iq'].' pour '.$geoloc['id']); + public function EventGeoloc($geoloc) + { + log::add('mobile', 'debug', 'Geoloc Event du mobile > ' . $geoloc['Iq'] . ' pour ' . $geoloc['id']); $eqLogicMobile = eqLogic::byLogicalId($geoloc['Iq'], 'mobile'); $cmdgeoloc = cmd::byEqLogicIdAndLogicalId($eqLogicMobile->getId(), 'geoId_' . $geoloc['id']); - if (isset($cmdgeoloc)) { - log::add('mobile', 'debug', 'commande trouvé'); - if($geoloc['value'] !== $cmdgeoloc->execCmd()){ - log::add('mobile', 'debug', 'Valeur non pareil.'); + if (is_object($cmdgeoloc)) { + log::add('mobile', 'debug', 'commande trouvé'); + if ($geoloc['value'] !== $cmdgeoloc->execCmd()) { + log::add('mobile', 'debug', 'Valeur non pareille.'); $cmdgeoloc->event($geoloc['value']); - }else{ - log::add('mobile', 'debug', 'Valeur pareil. >'.$geoloc['value'].' / '.$cmdgeoloc->execCmd()); - } + } else { + log::add('mobile', 'debug', 'Valeur pareille. >' . $geoloc['value'] . ' / ' . $cmdgeoloc->execCmd()); + } } } - public function postInsert() { - $key = config::genKey(32); - $this->setLogicalId($key); - $this->save(); + public function postInsert() + { + if ($this->getLogicalId() == '') { + $key = config::genKey(32); + $this->setLogicalId($key); + $this->save(); + } + } + + public static function deleteFileImg() + { + $directory = dirname(__FILE__) . '/../../data/images'; // Chemin vers le répertoire contenant les fichiers + // Récupérer la liste des fichiers dans le répertoire + $files = glob($directory . '/*'); + // Date actuelle + $currentDate = time(); + // Parcourir tous les fichiers + foreach ($files as $file) { + // Vérifier la date de modification du fichier + $modifiedDate = filemtime($file); + $differenceInDays = floor(($currentDate - $modifiedDate) / (60 * 60 * 24)); + // Vérifier si le fichier a plus de 30 jours + if ($differenceInDays > 30) { + // Supprimer le fichier + unlink($file); + } + } + } + + + public static function saveMenuEqLogics($eqId, $arrayMenus, $checkDefault, $nbIcones) + { + $eqLogic = eqLogic::byId(intval($eqId)); + if (is_object($eqLogic)) { + $i = 1; + log::add('mobile', 'debug', 'ELEMENTSMENUS : ' . json_encode($arrayMenus)); + $eqLogic->setConfiguration('nbIcones', $nbIcones); + foreach ($arrayMenus as $menu) { + $eqLogic->setConfiguration('checkboxWebViewMenu' . $i, $menu[4]); + if ($menu[0] == 'none') { + $eqLogic->setConfiguration('selectNameMenu' . $i, 'none'); + } else if ($menu[0] == 'overview') { + $eqLogic->setConfiguration('selectNameMenu' . $i, 'overview'); + } else if ($menu[0] == 'health') { + $eqLogic->setConfiguration('selectNameMenu' . $i, 'health'); + } else if ($menu[0] == 'timeline') { + $eqLogic->setConfiguration('selectNameMenu' . $i, 'timeline'); + } else if ($menu[0] == 'home') { + $eqLogic->setConfiguration('selectNameMenu' . $i, 'home'); + } else { + $result = explode('_', $menu[0]); + $objectId = intval($result[0]); + $typeObject = $result[1]; + $eqLogic->setConfiguration('selectNameMenu' . $i, $menu[0]); + } + $nameUser = $menu[1]; + if ($nameUser != '') { + $eqLogic->setConfiguration('renameIcon' . $i, $nameUser); + } else { + $eqLogic->setConfiguration('renameIcon' . $i, 'none'); + } + $iconName = $menu[2]; + if ($iconName == '' || $iconName == 'none') { + $eqLogic->setConfiguration('spanIcon' . $i, 'icon jeedomapp-in'); + } else { + $eqLogic->setConfiguration('spanIcon' . $i, $iconName); + } + //$eqLogic->setConfiguration('spanIcon'.$i, $iconName); + if ($menu[3] != '') { + $eqLogic->setConfiguration('urlUser' . $i, trim($menu[3])); + } else { + $eqLogic->setConfiguration('urlUser' . $i, 'none'); + } + $i++; + } + log::add('mobile', 'debug', 'SAVEMENU >>>>> ' . time()); + $eqLogic->setConfiguration('DateMenu', time()); + $eqLogic->save(); + if ($checkDefault == 'true') { + // $eqLogic->setConfiguration('checkdefaultID', 'yes'); + config::save('checkdefaultID', $eqId, 'mobile'); + self::handleDefaultMenu($eqId); + } else { + config::save('checkdefaultID', 'noActivMobile', 'mobile'); + } + } + } + + public static function handleDefaultMenu($mobileActiveDefault) + { + $mobileActive = eqLogic::byId(intval($mobileActiveDefault)); + if (is_object($mobileActive)) { + $eqlogics = eqLogic::byType('mobile'); + $nbIcons = $mobileActive->getConfiguration('nbIcones', 4); + foreach ($eqlogics as $eqlogic) { + for ($i = 1; $i < 5; $i++) { + ${'selectNameMenu' . $i} = $mobileActive->getConfiguration('selectNameMenu' . $i, 'none'); + ${'renameIcon' . $i} = $mobileActive->getConfiguration('renameIcon' . $i, ''); + ${'spanIcon' . $i} = $mobileActive->getConfiguration('spanIcon' . $i, 'none'); + ${'urlUser' . $i} = $mobileActive->getConfiguration('urlUser' . $i, 'none'); + $eqlogic->setConfiguration('selectNameMenu' . $i, ${'selectNameMenu' . $i}); + $eqlogic->setConfiguration('renameIcon' . $i, ${'renameIcon' . $i}); + $eqlogic->setConfiguration('spanIcon' . $i, ${'spanIcon' . $i}); + $eqlogic->setConfiguration('urlUser' . $i, ${'urlUser' . $i}); + } + $eqlogic->setConfiguration('nbIcones', $nbIcons); + $eqlogic->save(); + } + } + } + + public static function configMenuCustom($eqId, $jeedomVersion) + { + + if($jeedomVersion <'4.4.0'){ + log::add('mobile', 'debug', '|-----------------------------------'); + log::add('mobile', 'debug', '|-CONFIGMENU CUSTOM JEEDOM 4.3.0--'); + $defaultMenuJson = '{"tab0":{"active":true,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"}, + "tab1":{"active":false,"icon":{"name":"hubspot","type":"fa"},"name":"Synthese","options":{"uri":"\/index.php?v=m&p=overview"},"type":"WebviewApp"}, + "tab2":{"active":false,"icon":{"name":"medkit","type":"fa"},"name":"Sant\u00e9","options":{"uri":"\/index.php?v=m&p=health"},"type":"WebviewApp"}, + "tab3":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home"},"type":"WebviewApp"}}'; + $defaultMenuArray = json_decode($defaultMenuJson, true); + return $defaultMenuArray; + }else if($jeedomVersion >='4.4.0'){ + + log::add('mobile', 'debug', '|-----------------------------------'); + log::add('mobile', 'debug', '|-CONFIGMENU CUSTOM JEEDOM 4.4.0--'); + $defaultMenuJson = '{"tab0":{"active":true,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&p=home","objectType":"home","mobile":"m","objectId" : ""},"type":"WebviewApp"}, + "tab1":{"active":true,"icon":{"name":"hubspot","type":"fa"},"name":"Synthese","options":{"uri":"\/index.php?v=m&p=overview","objectType":"overview","mobile":"m","objectId" : ""},"type":"WebviewApp"}, + "tab2":{"active":true,"icon":{"name":"medkit","type":"fa"},"name":"Sant\u00e9","options":{"uri":"\/index.php?v=m&p=health","objectType":"health","mobile":"m","objectId" : ""},"type":"WebviewApp"}, + "tab3":{"active":false,"icon":{"name":"in","type":"jeedomapp"},"name":"Accueil","options":{"uri":"\/index.php?v=m&app_mode=1","objectType":"home","mobile":"m","objectId" : ""},"type":"WebviewApp"}}'; + $defaultMenuArray = json_decode($defaultMenuJson, true); + $eqLogic = eqLogic::byId($eqId); + if (is_object($eqLogic)) { + $nbIcones = $eqLogic->getConfiguration('nbIcones', 3); + $arrayElements = array(); + /* $eqLogic->setConfiguration('DateMenu', time()); + $eqLogic->save();*/ + $j = 0; + $count = 1; + for ($i = 1; $i < 5; $i++) { + //$webviewUrl = ''; + $isActive = true; + /*$webview = $eqLogic->getConfiguration('checkboxWebViewMenu' . $i, 'WebviewDesktop'); + if ($webview == 'WebviewDesktop') { + $webviewUrl = 'd'; + } else if ($webview == 'WebviewMobile') { + $webviewUrl = 'm'; + }*/ + $webviewUrl = 'd'; + ${'tabIconName' . $i} = $eqLogic->getConfiguration('spanIcon' . $i, 'none'); + log::add('mobile', 'debug', '| CHANGETABICON ' . ${'tabIconName' . $i}); + config::save('icon' . $i . 'NoCut', ${'tabIconName' . $i}, 'mobile'); + if (${'tabIconName' . $i} != 'none') { + $arrayIcon = explode(' ', ${'tabIconName' . $i}); + ${'tabIconName' . $i} = substr(strstr($arrayIcon[1], '-'), 1); + ${'tabLibName' . $i} = strstr($arrayIcon[1], '-', true); + if (${'tabLibName' . $i} == 'mdi') { + ${'tabLibName' . $i} = 'Mdi'; + } + } else { + ${'tabIconName' . $i} = 'in'; + ${'tabLibName' . $i} = 'jeedomapp'; + } + ${'tabRenameInput' . $i} = $eqLogic->getConfiguration('renameIcon' . $i, 'none'); + if (${'tabRenameInput' . $i} == 'none') { + ${'tabRenameInput' . $i} = 'Accueil'; + } + $objectId = $eqLogic->getConfiguration('selectNameMenu' . $i); + //log::add('mobile','debug', 'OBECTIDCUSTOMMENU : ' . $objectId ); + if ($objectId && $objectId != -1 && $objectId != 'none' && $objectId != 'url') { + // $typeObject; + if ($objectId != 'overview' && $objectId != 'health' && $objectId != 'home' && $objectId != 'timeline') { + + $arrayObjects = explode('_', $objectId); + $objectId = $arrayObjects[0]; + $typeObject = $arrayObjects[1]; + $idUrl = $objectId; + ${'typeObject' . $i} = $typeObject; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = $idUrl; + if ($typeObject == 'views') { + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=view&view_id={$objectId}"; + } else if ($typeObject == 'dashboard') { + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=dashboard&object_id={$objectId}"; + } else if ($typeObject == 'plan') { + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=plan&plan_id={$objectId}"; + } else if ($typeObject == 'panel') { + ${'tabUrl' . $i} = "/index.php?v=m&p={$objectId}"; + log::add('mobile', 'debug', 'PANEL : ' . ${'$tabUrl' . $i}); + } + } else if ($objectId == 'overview') { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = ''; + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=overview"; + } else if ($objectId == 'home') { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = ''; + ${'tabUrl' . $i} = "/index.php?v=m&p=home"; + // log::add('mobile','debug','HOHMHOHO '.${ 'tabUrl' . $i}); + } else if ($objectId == 'health') { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = ''; + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=health"; + } else if ($objectId == 'timeline') { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = ''; + ${'tabUrl' . $i} = "/index.php?v={$webviewUrl}&p=timeline"; + } + } else if ($objectId == 'url') { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = $webviewUrl; + ${'typeobjectId' . $i} = 'url'; + ${'tabUrl' . $i} = $eqLogic->getConfiguration('urlUser' . $i); + } else { + ${'typeObject' . $i} = $objectId; + ${'typewebviewurl' . $i} = 'm'; + ${'typeobjectId' . $i} = ''; + ${'tabUrl' . $i} = '/index.php?v=m&app_mode=1'; + } + if ($count > intval($nbIcones)) { + $isActive = false; + } + log::add('mobile', 'debug', '| - Construction jsonTemplate'); + $jsonTemplate = array( + 'active' => $isActive, + 'icon' => [ + 'name' => ${'tabIconName' . $i}, + 'type' => ${'tabLibName' . $i} + ], + 'name' => ${'tabRenameInput' . $i}, + 'options' => [ + 'uri' => ${'tabUrl' . $i}, + 'objectType' => ${'typeObject' . $i}, + 'mobile' => ${'typewebviewurl' . $i}, + 'objectId' => ${'typeobjectId' . $i} + ], + 'type' => strpos(${'tabUrl' . $i}, 'www') !== false ? 'urlwww' : 'WebviewApp' + ); + $arrayElements['tab' . $j] = $jsonTemplate; + $j++; + $count++; + } + log::add('mobile', 'debug', '| - Function MobileconfigMenuCustom :' . json_encode($arrayElements)); + log::add('mobile', 'debug', '|-----------------------------------'); + if (count($arrayElements) == 4) { + $j = 0; + for ($i = 0; $i < 4; $i++) { + $isBool = is_bool($arrayElements['tab' . $i]['active']); + if ($isBool) { + if ($arrayElements['tab' . $i]['active'] == true) { + $j++; + } + } else { + return $defaultMenuArray; + } + } + if ($j == 0) { + return $defaultMenuArray; + } + return $arrayElements; + } else { + return $defaultMenuArray; + } + // return $arrayElements; + } else { + return $defaultMenuArray; + } } +} - public function postSave() { + /* + * Call by + - jsonrpc -> nfc + - jsonrpc -> qrcodemethod + */ + public function cmdForApi($Iq, $logicalId, $value, $name = "", $subtype = "string") + { + $mobile = eqLogic::byLogicalId($Iq, 'mobile'); + if (is_object($mobile)) { + $cmd = $mobile->getCmd(null, $logicalId); + if (!is_object($cmd)) { + if ($name == "") { + $name = $logicalId; + } + $cmd = new mobileCmd(); + $cmd->setLogicalId($logicalId); + $cmd->setName($name); + $cmd->setOrder(0); + $cmd->setEqLogic_id($mobile->getId()); + $cmd->setType('info'); + $cmd->setSubType($subtype); + $cmd->setIsVisible(1); + if (in_array($logicalId, array('barrecodemethod', 'nfcPayload', 'nfcId'))) { + $cmd->setConfiguration('repeatEventManagement', 'always'); + } + $cmd->save(); + } + $cmd->event($value); + } + } + + public function postSave() + { $cmdNotif = $this->getCmd(null, 'notif'); if (!is_object($cmdNotif)) { $cmdNotif = new mobileCmd(); @@ -698,6 +1224,22 @@ public function postSave() { $cmdNotif->setIsVisible(1); $cmdNotif->save(); + if ($this->getConfiguration('appVersion', 1) == 2) { + $cmdNotif = $this->getCmd(null, 'notifCritical'); + if (!is_object($cmdNotif)) { + $cmdNotif = new mobileCmd(); + } + $cmdNotif->setLogicalId('notifCritical'); + $cmdNotif->setName(__('Notification Critique', __FILE__)); + $cmdNotif->setOrder(0); + $cmdNotif->setEqLogic_id($this->getId()); + $cmdNotif->setDisplay('generic_type', 'GENERIC_ACTION'); + $cmdNotif->setType('action'); + $cmdNotif->setSubType('message'); + $cmdNotif->setIsVisible(1); + $cmdNotif->save(); + } + $cmdaskText = $this->getCmd(null, 'ask_Text'); if (is_object($cmdaskText)) { $cmdaskText->remove(); @@ -708,83 +1250,161 @@ public function postSave() { } } + public function preRemove() + { + $eqId = $this->getId(); + $idMobileActive = config::byKey('checkdefaultID', 'mobile'); + if ($idMobileActive == $eqId) { + config::save('checkdefaultID', 'noActivMobile', 'mobile'); + } + } + + + /* public function postRemove() { + $eqId = $this->getId(); + $mobileActive = eqLogic::byId(intval($mobileActiveDefault)); + + }*/ + /* * *********************Méthodes d'instance************************* */ /* * **********************Getteur Setteur*************************** */ - public static function cronDaily() { - mobile::makeTemplateJson(); - } + public static function cronDaily() + { + mobile::makeTemplateJson(); + mobile::deleteFileImg(); + } } -class mobileCmd extends cmd { +class mobileCmd extends cmd +{ /* * *************************Attributs****************************** */ /* * ***********************Methode static*************************** */ /* * *********************Methode d'instance************************* */ - public function dontRemoveCmd() { + /*public function dontRemoveCmd() { return true; + }*/ + + public static function fileInMessage($data) + { + log::add('mobile', 'debug', 'test FileInMessage'); + $dataArray = explode('|', $data); + $result = array(); + foreach ($dataArray as $item) { + + $arg = explode('=', trim($item), 2); + if (count($arg) == 2) { + $result[trim($arg[0])] = trim($arg[1]); + } + } + $result['message'] = $dataArray[0]; + log::add('mobile', 'debug', 'file Parse > ' . json_encode($result)); + if (array_key_exists('file', $result)) { + log::add('mobile', 'debug', 'file > ' . $result['file']); + return $result; + } else { + log::add('mobile', 'debug', 'null'); + return null; + } } - public function execute($_options = array()) { + public function execute($_options = array()) + { if ($this->getType() != 'action') { return; } + $optionsNotif = []; $eqLogic = $this->getEqLogic(); - log::add('mobile', 'debug', 'Notif > ' . json_encode($_options) . ' / ' . $eqLogic->getId() . ' / ' . $this->getLogicalId() . ' / idNotif =' . $idNotif, 'config'); - if ($this->getLogicalId() == 'notif') { + + if ($this->getLogicalId() == 'notif' || $this->getLogicalId() == 'notifCritical') { + if ($_options['title'] == '' || $_options['title'] == $_options['message'] || $_options['title'] == ' ') { $_options['title'] = config::byKey('product_name'); } + $critical = false; + + if ($this->getLogicalId() == 'notifCritical') { + $critical = true; + } + + $file = mobileCmd::fileInMessage($_options['message']); + if (!isset($_options['files']) && $file != null) { + $_options['files'] = array(); + array_push($_options['files'], $file['file']); + $_options['message'] = $file['message']; + log::add('mobile', 'debug', 'file detected ' . json_encode($file)); + } + $answer = ($_options['answer']) ? join(';', $_options['answer']) : null; + $askVariable = $_options['variable']; $askType = ($_options['answer']) ? 'ask_Text' : 'notif'; $timeout = ($_options['timeout']) ? $_options['timeout'] : 'nok'; + $optionsNotif['askVariable'] = $askVariable; + log::add('mobile', 'debug', 'Commande de notification ' . $askType, 'config'); - if (($eqLogic->getConfiguration('notificationArn', null) != null || $eqLogic->getConfiguration('notificationRegistrationToken', null) != null ) && $eqLogic->getConfiguration('type_mobile', null) != null) { + if (($eqLogic->getConfiguration('notificationArn', null) != null || $eqLogic->getConfiguration('notificationRegistrationToken', null) != null) && $eqLogic->getConfiguration('type_mobile', null) != null) { $idNotif = $eqLogic->getConfiguration('idNotif', 0); $idNotif = $idNotif + 1; $eqLogic->setConfiguration('idNotif', $idNotif); $eqLogic->save(); - - if (isset($options['file'])) { - log::add('mobile', 'debug', 'FILE'); - unset($data['file']); - $_options['files'] = explode(',', $options['file']); - } - if (isset($_options['files']) && is_array($_options['files'])) { - log::add('mobile', 'debug', 'FILES'); - foreach ($_options['files'] as $file) { - log::add('mobile', 'debug', 'FILES as FILE'); - if (trim($file) == '') { - continue; + log::add('mobile', 'debug', 'Notif > ' . json_encode($_options) . ' / ' . $eqLogic->getId() . ' / ' . $this->getLogicalId() . ' / idNotif =' . $idNotif, 'config'); + if (isset($options['file'])) { + log::add('mobile', 'debug', 'FILE'); + unset($data['file']); + $_options['files'] = explode(',', $options['file']); } - log::add('mobile', 'debug', 'Continue'); - $ext = pathinfo($file, PATHINFO_EXTENSION); - log::add('mobile', 'debug', $ext.' pour > '.$file); - if (in_array($ext, array('gif', 'jpeg', 'jpg', 'png'))) { - log::add('mobile', 'debug', 'type photo !'); - - $url = network::getNetworkAccess('external'); - $url .= '/plugins/mobile/core/php/image.php?'; - $nameFile = base64_encode($file).'.'.$ext; - $newfile = dirname(__FILE__) .'/../../data/images/'.$nameFile; - if (!copy($file, $newfile)) { - log::add('mobile', 'debug', 'la copie a echouée'); + if (isset($_options['files']) && is_array($_options['files'])) { + log::add('mobile', 'debug', 'FILES'); + foreach ($_options['files'] as $file) { + log::add('mobile', 'debug', 'FILES as FILE'); + if (trim($file) == '') { + continue; + } + log::add('mobile', 'debug', 'Continue'); + $ext = pathinfo($file, PATHINFO_EXTENSION); + log::add('mobile', 'debug', $ext . ' pour > ' . $file); + if (in_array($ext, array('gif', 'jpeg', 'jpg', 'png'))) { + log::add('mobile', 'debug', 'type photo !'); + if ($ext == "gif") { + $typeHint = "com.compuserve.gif"; + } else if ($ext == "jpeg") { + $typeHint = "public.jpeg"; + } else if ($ext == "jpg") { + $typeHint = "public.jpeg"; + } else if ($ext == "png") { + $typeHint = "public.png"; + } else { + $typeHint = "public.jpeg"; + } + $optionsNotif['typeHint'] = $typeHint; + $url = network::getNetworkAccess('external'); + $url .= '/plugins/mobile/core/php/image.php?'; + $nameFile = base64_encode($file) . '.' . $ext; + $path = dirname(__FILE__) . '/../../data/images'; + $newfile = $path . '/' . $nameFile; + log::add('mobile', 'debug', 'copie sur > ' . $newfile); + if (!file_exists($path)) { + mkdir($path); + } + if (!copy($file, $newfile)) { + log::add('mobile', 'error', 'la copie de l\'image a echoué'); + } + $keyFile = md5_file($newfile); + $url .= 'key=' . $keyFile . '&name=' . $nameFile; + log::add('mobile', 'debug', 'url > ' . $url); + mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), $url, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical); + } else { + mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), null, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical); + } } - $keyFile = md5_file($newfile); - $url .= 'name='.$nameFile.'&key='.$keyFile; - log::add('mobile', 'debug', 'url > '.$url); - mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout,$eqLogic->getConfiguration('notificationRegistrationToken', null), $url); - }else{ - mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout,$eqLogic->getConfiguration('notificationRegistrationToken', null), null); - } - } - }else{ - mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout,$eqLogic->getConfiguration('notificationRegistrationToken', null), null); - } + } else { + mobile::notification($eqLogic->getConfiguration('notificationArn', null), $eqLogic->getConfiguration('type_mobile', null), $_options['title'], $_options['message'], null, $askType, $idNotif, $answer, $timeout, $eqLogic->getConfiguration('notificationRegistrationToken', null), null, $eqLogic->getConfiguration('appVersion', 1), $optionsNotif, $critical); + } log::add('mobile', 'debug', 'Action : Envoi d\'une configuration ', 'config'); } else { diff --git a/core/data/wizard.json b/core/data/wizard.json new file mode 100755 index 00000000..74876dd3 --- /dev/null +++ b/core/data/wizard.json @@ -0,0 +1,56 @@ +{ +"trame": { + "firstPage" : + { + "title": "Bien demarrer", + "wizard": "firstPage", + "order": 1, + "custom": "", + "visible": 1 + } + , + "SecPage" : + { + "title": "Identification", + "wizard": "secPage", + "order": 2, + "custom": "", + "visible": 1 + }, + "ThirdPage" : + { + "title": "Mes Boxs", + "wizard": "thirdPage", + "order": 3, + "custom": "", + "visible": 1 + } + , + "FourPage" : + { + "title": "Synchronisation Boxs", + "wizard": "fourPage", + "order": 4, + "custom": "", + "visible": 1 + } + , + "FivePage" : + { + "title": "Geolocalisation", + "wizard": "fivePage", + "order": 5, + "custom": "", + "visible": 1 + } + , + "SixPage" : + { + "title": "Personnalisation Menu", + "wizard": "sixPage", + "order": 6, + "custom": "", + "visible": 1 + } + } +} diff --git a/core/i18n/de_DE.json b/core/i18n/de_DE.json old mode 100644 new mode 100755 index 9f99aaa1..d355b8f9 --- a/core/i18n/de_DE.json +++ b/core/i18n/de_DE.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plattform", - "Equipement": "Gerät", + "Équipement": "Gerät", "ID": "Identifikation", - "User": "Verschleiß", - "Depuis": "Seit", + "Utilisateur": "Benutzer", + "Dernière activité": "Letzte Aktivität", + "Date création": "Erstellungsdatum", "Utilisateur non trouvé": "Benutzer nicht gefunden" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff", + "COMPTE MARKET": "MARKTKONTO", + "BOX ID": "BOX-ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Sie müssen lediglich Ihre Markt-ID und Ihr Passwort eingeben", + "Plusieurs choix sur cet écran :": "Mehrere Auswahlmöglichkeiten auf diesem Bildschirm:", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Sie geben die URL Ihres Jeedom (intern oder extern) sowie die Zugangskennungen dazu ein und bestätigen mit dem LOGIN-Button", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Sie klicken auf QR-Code: ein neuer Bildschirm erscheint; Sie können einen QRCode aus dem Mobile-Plugin der Box, die Sie hinzufügen möchten, über die Registerkarte QRCODE des Plugins scannen" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Handy, Mobiltelefon", + "ID": "ICH WÜRDE", + "User": "Benutzer", + "Menu Defaut": "Standardmenü", + "Nb Icones": "Nb-Symbole", + "Utilisateur non trouvé": "Benutzer nicht gefunden", + " Icone 1": "Symbol 1", + "Type": "Nett", + "Choisir un Type": "Wählen Sie einen Typ", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Armaturenbrett", + "Vue": "Gesehen", + "Design": "Design", + "Panel": "Tafel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Wählen Sie Symbol", + " Icone 2": "Symbol 2", + " Icone 3": "Symbol 3", + " Icone 4": "Symbol 4", + "Menu Custom": "Benutzerdefiniertes Menü" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Kompatible Spezial-Plugins", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Verfügbar in der Liste der Plugins und in das Dashboard der Mobile App integriert", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins nicht getestet und nicht übertragen", "Ne sont pas transmis à l’App Mobile": "Werden nicht an die Mobile App übertragen" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "HINZUFÜGEN DER BOX ZU IHRER MOBILEN APP", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Sie können einen Benutzer auswählen: Es wird ein QRCode generiert. Anschließend können Sie den QRCode aus der neuen Anwendung scannen und so dieses Feld zu Ihrer Anwendung hinzufügen", + "Utilisateur": "Benutzer", + "Aucun": "Keiner", + "QRCode": "QR-Code", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Fehler Keine interne Adresse (siehe Konfiguration Ihres Jeedom!)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Fehler Keine externe Adresse (siehe Konfiguration Ihres Jeedom!)", + "Erreur Pas d\\'utilisateur selectionné": "Fehler Kein Benutzer ausgewählt" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "So verbinden Sie Ihr Telefon: Es gibt 2 mögliche Methoden" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff", "Pause": "Pause", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Dieses Plugin ist voll kompatibel und erfordert keine Aktion von Ihrer Seite", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Dieses Plugin ist kompatibel. Denken Sie daran, die allgemeinen Auftragstypen zu überprüfen", "Activer": "Aktivieren", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Das Plugin ist nicht kompatibel, Sie können es aktivieren, wenn Sie möchten", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Das Plugin ist nicht kompatibel, Sie können es bei Bedarf aktivieren", "Type Générique du Plugin": "Generischer Plugin-Typ", "Sauvegarder": "Speichern", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Design", "Configurations": "Konfigurationen" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 – Unbefugter Zugriff" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff", - "Gestion": "Verwaltung", - "Ajouter": "Hinzufügen", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 – (NUR PRIVATE ALPHA-VERSION)", "Configuration": "Konfiguration", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objekte \/ Stücke", - "Scénarios": "Szenarien", + "Menu Custom": "Benutzerdefiniertes Menü", + "QR Code": "QR-Code", + "Documentation APP V2": "APP V2-Dokumentation", "Santé": "Gesundheit", - "Régénérer la configuration": "Konfiguration neu generieren", "Mes Téléphones Mobiles": "Meine Handys", "Rechercher": "Suchen nach", + "Équipement visible": "Sichtbare Ausrüstung", + "Équipement non visible": "Ausrüstung nicht sichtbar", + "App V1": "Anwendung V1", + "Ajouter": "Hinzufügen", + "Plugins": "Plugins", + "Objets\/Pièces": "Artikel\/Teile", + "Scénarios": "Szenarien", + "Régénérer la configuration": "Konfiguration neu generieren", "Configuration avancée": "Erweiterte Konfiguration", "Infos envoyées à l'app": "Info an die App gesendet", "Sauvegarder": "Speichern", @@ -106,33 +179,54 @@ "Notifications": "Benachrichtigungen", "Sauvegarde Mobile": "Mobile Backup", "Commandes": "Befehle", - "Nom de l'équipement mobile": "Name der mobilen Ausrüstung", - "Nom de l'équipement template": "Gerätename Vorlage", + "Paramètres généraux": "Allgemeine Einstellungen", + "Nom de l'équipement": "Ausrüstungsname", "Objet parent": "Übergeordnetes Objekt", "Aucun": "Ohne", + "Catégorie": "Kategorie", + "Options": "Optionen", "Activer": "Aktivieren", "Visible": "Sichtbar", + "Paramètres spécifiques": "Spezifische Einstellungen", "Type de Mobile": "Mobiler Typ", "iPhone": "iphone", "Android": "Androide", "Windows (non officiel)": "Windows (inoffiziell)", - "Utilisateurs": "Benutzer", + "Utilisateur": "Benutzer", "QRCode": "QR-Code", - "Id Mobile :": "Mobile ID:", + "Id Mobile": "IdMobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile:", + "ARN Mobile": "ARN Mobile", "ARN": "RNA", - "TOKEN Mobile :": "TOKEN Mobile:", + "TOKEN Mobile": "TOKEN Mobil", "TOKEN": "ZEICHEN", - "ARN pour Monitoring :": "RNA zur Überwachung:", "ARN pour Monitoring": "ARN zur Überwachung", "Copier pour Monitoring": "Kopie zur Überwachung", - "Sauvegarde Dashboard :": "Dashboard-Sicherung:", + "Sauvegarde": "Sicherung", + "Sauvegarde Dashboard": "Dashboard-Sicherung", "Vérification en Cours": "Überprüfung läuft", - "Sauvegarde Favoris :": "Favoriten speichern:", + "Sauvegarde Favoris": "Favoriten speichern", "Nom": "Name", "Type": "Typ", - "Action": "Aktion" + "Valeur": "Wert", + "Actions": "Aktionen" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Art", + "Choisir un Type": "Wählen Sie einen Typ", + "Accueil": "Willkommen", + "Synthese": "Synthese", + "Dashboard": "Armaturenbrett", + "Vue": "Gesehen", + "Design": "Design", + "Panel": "Tafel", + "URL externe": "Externe URL", + "Santé": "Gesundheit", + "TimeLine": "Zeitleiste", + "Choix TypeWebView": "AuswahltypWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "IKONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Mobile Gesundheit", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objekte \/ Stücke", "Scénarios": "Szenarien", "Informations envoyées à l'app": "Informationen an die App gesendet", + "Menu Custom": "Benutzerdefiniertes Menü", + "QrCode": "QR-Code", + "Bien demarrer": "Einen guten Start hinlegen", "Configuration Mobile du Plugin \"+name_plugin+": "Mobile Konfiguration des Plugins \"+ name_plugin +", "Configuration Mobile de la Pièce": "Konfiguration des mobilen Raums", - "Configuration Mobile du Scnéario \"+name_scenario+": "Mobile Konfiguration des Szenarios \"+ name_scenario +", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Fehler Keine interne Adresse (siehe Konfiguration Ihres Jeedom!)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Fehler Keine externe Adresse (siehe Konfiguration Ihres Jeedom!)", - "Erreur Pas d\\'utilisateur selectionné": "Fehler Kein Benutzer ausgewählt", + "Configuration Mobile du Scénario \"+name_scenario+": "Mobile Konfiguration des Szenarios „+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Fehler Keine interne Adresse (siehe Konfiguration Ihres Jeedom!)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Fehler Keine externe Adresse (siehe Konfiguration Ihres Jeedom!)", + "Erreur pas d\\'utilisateur selectionné": "Fehler Kein Benutzer ausgewählt", "Configuration mise à jour": "Aktualisierte Konfiguration", - "Nom": "Name", + "Nom de la commande": "Befehlsname", + "Choisir une icône": "Wählen Sie ein Symbol", + "Afficher": "Anzeige", + "Historiser": "Historisiere", + "Min": "Mindest", + "Max": "Max", + "Unité": "Einheit", "Tester": "Test" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Nicht autorisierter Zugriff", "Equipement non trouvé : ": "Ausrüstung nicht gefunden:", - "Aucune methode correspondante à : ": "Keine Methode entsprechend:", - "scenario non trouvé": "Szenario nicht gefunden" + "User inexistant : ": "Nicht vorhandener Benutzer:", + "scenario non trouvé": "Szenario nicht gefunden", + "Aucune methode correspondante à : ": "Keine Methode entsprechend:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Benachrichtigung konnte nicht gesendet werden:", - "$geoloc['id'].'-'.$geoloc['name']": "$ geoloc ['id'] .'- '. $ geoloc [' name ']", - "Notification": "Benachrichtigung" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Benachrichtigung", + "Notification Critique": "Kritische Benachrichtigung" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Farbe des Wertindikators", + "Pas du changement de valeur": "Keine Wertänderung", + "Inverse la position de l'indicateur de valeur": "Kehrt die Position der Wertanzeige um", + "Affiche durée ou date de la valeur": "Zeigt die Dauer oder das Datum des Werts an", + "Date de valeur": "Datum der Wertstellung", + "Date de collecte": "Datum der Abholung" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC-Objekt nicht definiert", "EqLogic inconnu : ": "Unbekanntes EqLogic:", "Cmd inconnu : ": "Unbekannter Befehl:", "pas d\\'id : ": "keine ID:", + "pas de parametre de geofencing : ": "kein Geofencing-Parameter:", "Aucune demande": "Keine Anfrage" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es über lokales WLAN oder über das 3G \/ 4G-Netzwerk Ihres Betreibers. Die App stellt automatisch eine Verbindung zu Ihrem Jeedom mit automatischer Initialisierung per QRcode her. Es ist keine Konfiguration erforderlich. (Möglichkeit es manuell zu machen) Sie finden alle Funktionen Ihres Jeedom auf Ihrem Handy. Sie können Ihre Anwendung mit Verknüpfungen und mehr anpassen ... Aktuelle Funktionen: - Verwaltung Ihrer Szenarien. - Management Ihrer Hausautomation nach Ihren Teilen und Geräten. - Automatische Aktualisierung und Rückgabe - Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw. - Anpassbare Oberfläche mit Verknüpfungen. - Allgemeine Zusammenfassung der Hausautomation und nach Raum - Benachrichtigungen (mit ASK-Unterstützung) - Anzeige von Designs Weitere Funktionen und Kompatibilitäten werden in den nächsten Updates verfügbar sein! Respekt für das Privatleben. Auf unseren Servern werden keine Daten (Heimautomation oder persönliche Daten) gespeichert oder gespeichert" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Achtung: Die v1-App ist nicht mit dem neuesten Android kompatibel. Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es im lokalen WLAN oder im 3G\/4G-Netzwerk Ihres Betreibers. Die App verbindet sich automatisch mit Ihrem Jeedom mit automatischer Initialisierung per QR-Code, eine Konfiguration ist nicht erforderlich. (Möglichkeit, dies manuell zu tun) Auf Ihrem Handy finden Sie alle Funktionen Ihres Jeedom. Sie können Ihre Anwendung mit Verknüpfungen und mehr anpassen ... Aktuelle Funktionen: - Verwaltung Ihrer Szenarien. - Verwaltung Ihrer Hausautomation entsprechend Ihren Räumen und Ihrer Ausstattung. - Umschalten und automatische Statusrückgabe - Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw. - Anpassbare Benutzeroberfläche mit Verknüpfungen. - Allgemeine Zusammenfassung der Hausautomation und nach Raum - Benachrichtigungen (mit ASK-Unterstützung) - Anzeige von Designs Weitere Funktionen und Kompatibilitäten folgen in zukünftigen Updates! Privatsphäre. Auf unseren Servern werden keine Daten (hausautomatische oder persönliche) gespeichert oder gespeichert" } } \ No newline at end of file diff --git a/core/i18n/en_US.json b/core/i18n/en_US.json old mode 100644 new mode 100755 index 9c318355..c6adf43d --- a/core/i18n/en_US.json +++ b/core/i18n/en_US.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Platform", - "Equipement": "Device", + "Équipement": "Device", "ID": "Id", - "User": "Wear", - "Depuis": "Since", + "Utilisateur": "User", + "Dernière activité": "Last activity", + "Date création": "Creation Date", "Utilisateur non trouvé": "User not found" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access", + "COMPTE MARKET": "MARKET ACCOUNT", + "BOX ID": "BOX-ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "All you have to do is enter your Market ID and password", + "Plusieurs choix sur cet écran :": "Several choices on this screen:", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- You enter the url of your Jeedom (internal or external), as well as the access identifiers to it and you confirm with the LOGIN button", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- You click on QR Code: a new screen appears; you can scan a QRCode from the Mobile plugin of the box you want to add, via the QRCODE tab of the plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Default menu", + "Nb Icones": "Nb Icons", + "Utilisateur non trouvé": "User not found", + " Icone 1": "Icon 1", + "Type": "Kind", + "Choisir un Type": "Choose a Type", + "Accueil": "Accueil", + "Synthese": "Synthesis", + "Dashboard": "Dashboard", + "Vue": "Seen", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choose Icon", + " Icone 2": "Icon 2", + " Icone 3": "Icon 3", + " Icone 4": "Icon 4", + "Menu Custom": "Custom menu" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Compatible Special Plugins", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Available in the list of plugins and integrated into the Dashboard of the Mobile App", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins not tested and not transmitted", "Ne sont pas transmis à l’App Mobile": "Are not transmitted to the Mobile App" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "ADDING THE BOX TO YOUR MOBILE APP", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "You can choose a user: a QRCode will be generated. You can then scan the QRCode from the new application, and thus add this box to your application", + "Utilisateur": "User", + "Aucun": "None", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error No internal address (see configuration of your Jeedom!)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error No external address (see configuration of your Jeedom!)", + "Erreur Pas d\\'utilisateur selectionné": "Error No user selected" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "To connect your phone: there are 2 possible methods" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Unauthorized access", "Pause": "Pause", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "This plugin is fully compatible, it requires no action on your part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "This plugin is compatible, remember to check the Generic Types of Orders", "Activer": "Activate", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "The Plugin is not compatible, you can activate it if you wish", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "The Plugin is not compatible, you can activate it if you wish", "Type Générique du Plugin": "Generic Plugin Type", "Sauvegarder": "Save", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Designs", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Unauthorized Access" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Unauthorized access", - "Gestion": "Management", - "Ajouter": "Add", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (PRIVATE ALPHA VERSION ONLY)", "Configuration": "Setup", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objects \/ Pieces", - "Scénarios": "Scenarios", + "Menu Custom": "Custom menu", + "QR Code": "QR Code", + "Documentation APP V2": "APP V2 documentation", "Santé": "Health", - "Régénérer la configuration": "Regenerate configuration", "Mes Téléphones Mobiles": "My Mobile Phones", "Rechercher": "Search", + "Équipement visible": "Visible equipment", + "Équipement non visible": "Equipment not visible", + "App V1": "App V1", + "Ajouter": "Add", + "Plugins": "Plugins", + "Objets\/Pièces": "Items\/Parts", + "Scénarios": "Scenarios", + "Régénérer la configuration": "Regenerate configuration", "Configuration avancée": "Advanced configuration", "Infos envoyées à l'app": "Info sent to the app", "Sauvegarder": "Save", @@ -106,33 +179,54 @@ "Notifications": "Notifications", "Sauvegarde Mobile": "Mobile Backup", "Commandes": "Commands", - "Nom de l'équipement mobile": "Name of mobile equipment", - "Nom de l'équipement template": "Equipment name template", + "Paramètres généraux": "General settings", + "Nom de l'équipement": "Equipment Name", "Objet parent": "Parent object", "Aucun": "None", + "Catégorie": "Category", + "Options": "Options", "Activer": "Activate", "Visible": "Visible", + "Paramètres spécifiques": "Specific settings", "Type de Mobile": "Mobile Type", "iPhone": "iphone", "Android": "Android", "Windows (non officiel)": "Windows (unofficial)", - "Utilisateurs": "Users", + "Utilisateur": "User", "QRCode": "QRCode", - "Id Mobile :": "Mobile Id:", + "Id Mobile": "IdMobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile:", + "ARN Mobile": "ARN Mobile", "ARN": "RNA", - "TOKEN Mobile :": "TOKEN Mobile:", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "RNA for Monitoring:", "ARN pour Monitoring": "ARN for Monitoring", "Copier pour Monitoring": "Copy for Monitoring", - "Sauvegarde Dashboard :": "Dashboard backup:", + "Sauvegarde": "Backup", + "Sauvegarde Dashboard": "Dashboard Backup", "Vérification en Cours": "Verification in progress", - "Sauvegarde Favoris :": "Save Favorites:", + "Sauvegarde Favoris": "Save Favorites", "Nom": "Name", "Type": "Type", - "Action": "Action" + "Valeur": "Value", + "Actions": "Shares" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Kind", + "Choisir un Type": "Choose a Type", + "Accueil": "Welcome", + "Synthese": "Synthesis", + "Dashboard": "Dashboard", + "Vue": "Seen", + "Design": "Design", + "Panel": "Panel", + "URL externe": "External URL", + "Santé": "Health", + "TimeLine": "Timeline", + "Choix TypeWebView": "Choice TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICON 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Mobile Health", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objects \/ Pieces", "Scénarios": "Scenarios", "Informations envoyées à l'app": "Information sent to the app", + "Menu Custom": "Custom menu", + "QrCode": "QrCode", + "Bien demarrer": "Get off to a good start", "Configuration Mobile du Plugin \"+name_plugin+": "Mobile configuration of the plugin \"+ name_plugin +", "Configuration Mobile de la Pièce": "Mobile Room Configuration", - "Configuration Mobile du Scnéario \"+name_scenario+": "Mobile Configuration of the Scenario \"+ name_scenario +", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error No internal address (see configuration of your Jeedom!)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error No external address (see configuration of your Jeedom!)", - "Erreur Pas d\\'utilisateur selectionné": "Error No user selected", + "Configuration Mobile du Scénario \"+name_scenario+": "Mobile Configuration of Scenario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error No internal address (see configuration of your Jeedom!)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error No external address (see configuration of your Jeedom!)", + "Erreur pas d\\'utilisateur selectionné": "Error No user selected", "Configuration mise à jour": "Updated configuration", - "Nom": "Name", + "Nom de la commande": "Command name", + "Choisir une icône": "Choose an icon", + "Afficher": "Display", + "Historiser": "Historize", + "Min": "Min", + "Max": "Max", + "Unité": "Unit", "Tester": "Test" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Unauthorized access", "Equipement non trouvé : ": "Equipment not found:", - "Aucune methode correspondante à : ": "No method corresponding to:", - "scenario non trouvé": "scenario not found" + "User inexistant : ": "Non-existent user:", + "scenario non trouvé": "scenario not found", + "Aucune methode correspondante à : ": "No method corresponding to:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Failed to send notification:", - "$geoloc['id'].'-'.$geoloc['name']": "$ geoloc ['id'] .'- '. $ geoloc [' name ']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Critical Notification" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Value indicator color", + "Pas du changement de valeur": "No change in value", + "Inverse la position de l'indicateur de valeur": "Reverses the position of the value indicator", + "Affiche durée ou date de la valeur": "Displays duration or date of the value", + "Date de valeur": "Value date", + "Date de collecte": "Date of collection" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "Unknown EqLogic:", "Cmd inconnu : ": "Unknown Cmd:", "pas d\\'id : ": "no id:", + "pas de parametre de geofencing : ": "no geofencing parameter:", "Aucune demande": "No request" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "The official Jeedom application allows you to control your Jeedom home automation system, whether over local WiFi, or on your operator's 3G \/ 4G network. The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually) You will find all the features of your Jeedom on your mobile. You will be able to customize your application with shortcuts and more ... Current features: - Management of your scenarios. - Management of your home automation according to your parts and equipment. - Automatic update and return - Compatibility with plugins, such as thermostat, alarm, camera etc ... - Customizable interface with shortcuts. - General home automation summary and by room - Notifications (with ASK support) - Display of Designs Other features and compatibilities are coming in the next updates! Respect for private life. No data (home automation or personal) is stored or kept on our servers" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion the v1 app is not compatible with the latest Android. The official Jeedom application allows you to control your Jeedom home automation system, whether in local Wifi, or on your operator's 3G\/4G network. The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually) You will find on your mobile all the features of your Jeedom. You will be able to customize your application with shortcuts and more... Current features: - Management of your scenarios. - Management of your home automation according to your rooms and equipment. - Shift and automatic status return - Compatibility with plugins, such as thermostat, alarm, camera etc... - Customizable interface with shortcuts. - General home automation summary and by room - Notifications (with ASK support) - Display of Designs More features and compatibilities are coming in future updates! Privacy. No data (home automation or personal) is stored or kept on our servers" } } \ No newline at end of file diff --git a/core/i18n/es_ES.json b/core/i18n/es_ES.json old mode 100644 new mode 100755 index 917b2b4a..1c1355b5 --- a/core/i18n/es_ES.json +++ b/core/i18n/es_ES.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plataforma", - "Equipement": "Dispositivos", + "Équipement": "Dispositivos", "ID": "Identificación", - "User": "Desgaste", - "Depuis": "Desde", + "Utilisateur": "Usuario", + "Dernière activité": "Última actividad", + "Date création": "Fecha de creación", "Utilisateur non trouvé": "Usuario no encontrado" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado", + "COMPTE MARKET": "CUENTA DE MERCADO", + "BOX ID": "BOX-ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Todo lo que tiene que hacer es ingresar su Market ID y contraseña", + "Plusieurs choix sur cet écran :": "Varias opciones en esta pantalla:", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Ingresas la url de tu Jeedom (interna o externa), así como los identificadores de acceso a la misma y confirmas con el botón LOGIN", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Haces clic en Código QR: aparece una nueva pantalla; puede escanear un QRCode desde el complemento móvil del cuadro que desea agregar, a través de la pestaña QRCODE del complemento" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Móvil", + "ID": "IDENTIFICACIÓN", + "User": "Usuario", + "Menu Defaut": "Menú predeterminado", + "Nb Icones": "Iconos Nb", + "Utilisateur non trouvé": "Usuario no encontrado", + " Icone 1": "Icono 1", + "Type": "Tipo", + "Choisir un Type": "Elija un tipo", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Tablero", + "Vue": "Visto", + "Design": "Diseño", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Elegir icono", + " Icone 2": "Icono 2", + " Icone 3": "Icono 3", + " Icone 4": "icono 4", + "Menu Custom": "Menú personalizado" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Complementos especiales compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponible en la lista de complementos e integrado en el Panel de la aplicación móvil", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Complementos no probados y no transmitidos", "Ne sont pas transmis à l’App Mobile": "No se transmiten a la aplicación móvil" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AGREGAR LA CAJA A SU APLICACIÓN MÓVIL", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Puedes elegir un usuario: se generará un QRCode. Luego podrás escanear el QRCode desde la nueva aplicación, y así agregar este cuadro a tu aplicación", + "Utilisateur": "Usuario", + "Aucun": "Ninguno", + "QRCode": "Código QR", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error Sin dirección interna (ver configuración de su Jeedom!)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error Sin dirección externa (ver configuración de su Jeedom!)", + "Erreur Pas d\\'utilisateur selectionné": "Error Ningún usuario seleccionado" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Para conectar su teléfono: hay 2 métodos posibles" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Acceso no autorizado", "Pause": "Pausa", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Este complemento es totalmente compatible, no requiere ninguna acción por su parte", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Este complemento es compatible, recuerde verificar los tipos genéricos de pedidos", "Activer": "Activar", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "El complemento no es compatible, puede activarlo si lo desea", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "El Plugin no es compatible, puedes activarlo si lo deseas", "Type Générique du Plugin": "Tipo de complemento genérico", "Sauvegarder": "Guardar", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Diseños", "Configurations": "Configuraciones" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Acceso no autorizado" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Acceso no autorizado", - "Gestion": "Gestión", - "Ajouter": "Añadir", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "Aplicación V2 - (SOLO VERSIÓN ALFA PRIVADA)", "Configuration": "Configuración", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objetos \/ Piezas", - "Scénarios": "Escenarios", + "Menu Custom": "Menú personalizado", + "QR Code": "Código QR", + "Documentation APP V2": "Documentación de la aplicación V2", "Santé": "Salud", - "Régénérer la configuration": "Regenerar configuración", "Mes Téléphones Mobiles": "Mis teléfonos móviles", "Rechercher": "Buscar", + "Équipement visible": "Equipos visibles", + "Équipement non visible": "Equipo no visible", + "App V1": "Aplicación V1", + "Ajouter": "Añadir", + "Plugins": "Plugins", + "Objets\/Pièces": "Artículos\/Piezas", + "Scénarios": "Escenarios", + "Régénérer la configuration": "Regenerar configuración", "Configuration avancée": "Configuración avanzada", "Infos envoyées à l'app": "Información enviada a la aplicación", "Sauvegarder": "Guardar", @@ -106,33 +179,54 @@ "Notifications": "Notificaciones", "Sauvegarde Mobile": "Copia de seguridad móvil", "Commandes": "Comandos", - "Nom de l'équipement mobile": "Nombre del equipo móvil", - "Nom de l'équipement template": "Plantilla de nombre de equipo", + "Paramètres généraux": "Configuración general", + "Nom de l'équipement": "Nombre del equipo", "Objet parent": "Objeto padre", "Aucun": "Ninguna", + "Catégorie": "Categoría", + "Options": "Opciones", "Activer": "Activar", "Visible": "Visible", + "Paramètres spécifiques": "Configuraciones específicas", "Type de Mobile": "Tipo de móvil", "iPhone": "IPhone", "Android": "Androide", "Windows (non officiel)": "Windows (no oficial)", - "Utilisateurs": "Usuarios", + "Utilisateur": "Usuario", "QRCode": "Código QR", - "Id Mobile :": "Identificación móvil:", + "Id Mobile": "IDMobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile:", + "ARN Mobile": "ARN Móvil", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Móvil:", + "TOKEN Mobile": "TOKEN Móvil", "TOKEN": "SIMBÓLICO", - "ARN pour Monitoring :": "ARN para monitoreo:", "ARN pour Monitoring": "ARN para monitoreo", "Copier pour Monitoring": "Copia para monitoreo", - "Sauvegarde Dashboard :": "Copia de seguridad del tablero de instrumentos:", + "Sauvegarde": "Respaldo", + "Sauvegarde Dashboard": "Copia de seguridad del panel", "Vérification en Cours": "Verificación en progreso", - "Sauvegarde Favoris :": "Guardar favoritos:", + "Sauvegarde Favoris": "Guardar favoritos", "Nom": "Nombre", "Type": "Tipo", - "Action": "Acción" + "Valeur": "Valor", + "Actions": "Comportamiento" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Amable", + "Choisir un Type": "Elija un tipo", + "Accueil": "Bienvenida", + "Synthese": "Síntesis", + "Dashboard": "Panel", + "Vue": "Visto", + "Design": "Diseño", + "Panel": "Panel", + "URL externe": "URL externa", + "Santé": "Salud", + "TimeLine": "Línea de tiempo", + "Choix TypeWebView": "Tipo de elecciónWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONO 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Salud móvil", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objetos \/ Piezas", "Scénarios": "Escenarios", "Informations envoyées à l'app": "Información enviada a la aplicación", + "Menu Custom": "Menú personalizado", + "QrCode": "Código QR", + "Bien demarrer": "Empezar bien", "Configuration Mobile du Plugin \"+name_plugin+": "Configuración móvil del complemento \"+ name_plugin +", "Configuration Mobile de la Pièce": "Configuración de sala móvil", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuración móvil del escenario \"+ name_scenario +", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error Sin dirección interna (¡vea la configuración de su Jeedom!)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error Sin dirección externa (¡vea la configuración de su Jeedom!)", - "Erreur Pas d\\'utilisateur selectionné": "Error Ningún usuario seleccionado", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuración Móvil del Escenario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Error Sin dirección interna (¡vea la configuración de su Jeedom!)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Error Sin dirección externa (¡vea la configuración de su Jeedom!)", + "Erreur pas d\\'utilisateur selectionné": "Error Ningún usuario seleccionado", "Configuration mise à jour": "Configuración actualizada", - "Nom": "Nombre", + "Nom de la commande": "Nombre del comando", + "Choisir une icône": "Elige un icono", + "Afficher": "Mostrar", + "Historiser": "Historizar", + "Min": "Mín.", + "Max": "Máx.", + "Unité": "Unidad", "Tester": "Probar" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Acceso no autorizado", "Equipement non trouvé : ": "Equipo no encontrado:", - "Aucune methode correspondante à : ": "Ningún método correspondiente a:", - "scenario non trouvé": "escenario no encontrado" + "User inexistant : ": "Usuario inexistente:", + "scenario non trouvé": "escenario no encontrado", + "Aucune methode correspondante à : ": "Ningún método correspondiente a:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Error al enviar la notificación:", - "$geoloc['id'].'-'.$geoloc['name']": "$ geoloc ['id'] .'- '. $ geoloc [' nombre ']", - "Notification": "Notificación" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-'. $geoloc['nombre']", + "Notification": "Notificación", + "Notification Critique": "Notificación crítica" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Color del indicador de valor", + "Pas du changement de valeur": "Sin cambio de valor", + "Inverse la position de l'indicateur de valeur": "Invierte la posición del indicador de valor", + "Affiche durée ou date de la valeur": "Muestra la duración o la fecha del valor", + "Date de valeur": "Fecha valor", + "Date de collecte": "Fecha de recogida" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "Objeto JSONRPC no definido", "EqLogic inconnu : ": "EqLogic desconocido:", "Cmd inconnu : ": "Cmd desconocido:", "pas d\\'id : ": "sin identificación:", + "pas de parametre de geofencing : ": "sin parámetro de geocerca:", "Aucune demande": "Ninguna solicitud" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "La aplicación oficial Jeedom le permite controlar su sistema de automatización del hogar Jeedom, ya sea en WiFi local o en la red 3G \/ 4G de su operador. La aplicación se conecta automáticamente a su Jeedom con inicialización automática por QRcode, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente) Encontrarás todas las características de tu Jeedom en tu móvil. Podrá personalizar su aplicación con accesos directos y más ... Características actuales: - Gestión de sus escenarios. - Gestión de su domótica según sus piezas y equipos. - Actualización automática y devolución - Compatibilidad con complementos, como termostato, alarma, cámara, etc. - Interfaz personalizable con accesos directos. - Resumen general de domótica y por habitación - Notificaciones (con soporte ASK) - Exhibición de diseños ¡Otras características y compatibilidades llegarán en las próximas actualizaciones! Respeto a la vida privada. No se almacenan ni guardan datos (domótica o personales) en nuestros servidores" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion, la aplicación v1 no es compatible con la última versión de Android. La aplicación oficial Jeedom le permite controlar su sistema domótico Jeedom, ya sea en Wifi local o en la red 3G\/4G de su operador. La aplicación se conecta automáticamente a su Jeedom con inicialización automática por código QR, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente) Encontrará en su móvil todas las características de su Jeedom. Podrás personalizar tu aplicación con accesos directos y más... Características actuales: - Gestión de sus escenarios. - Gestión de la domótica de tu hogar según tus estancias y equipamientos. - Turno y retorno de estado automático - Compatibilidad con complementos, como termostato, alarma, cámara, etc. - Interfaz personalizable con accesos directos. - Resumen domótica general y por estancias - Notificaciones (con soporte ASK) - Exhibición de Diseños ¡Más características y compatibilidades vendrán en futuras actualizaciones! Privacidad. Ningún dato (domótico o personal) es almacenado o guardado en nuestros servidores" } } \ No newline at end of file diff --git a/core/i18n/fr_FR.json b/core/i18n/fr_FR.json old mode 100644 new mode 100755 index 332561d1..7d43d05c --- a/core/i18n/fr_FR.json +++ b/core/i18n/fr_FR.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "Equipement", + "Équipement": "Équipement", "ID": "ID", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin." + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Accès non autorisé", "Pause": "Pause", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "Activer", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "Sauvegarder", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Designs", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Accès non autorisé", - "Gestion": "Gestion", - "Ajouter": "Ajouter", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "Configuration", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "Scénarios", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "Santé", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "Rechercher", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "Ajouter", + "Plugins": "Plugins", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "Scénarios", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "Configuration avancée", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "Sauvegarder", @@ -106,33 +179,54 @@ "Notifications": "Notifications", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "Commandes", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "Nom de l'équipement template", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "Objet parent", "Aucun": "Aucun", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "Activer", "Visible": "Visible", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "Utilisateurs", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "Nom", "Type": "Type", - "Action": "Action" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "Scénarios", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "Nom", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "Tester" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Accès non autorisé", "Equipement non trouvé : ": "Equipement non trouvé : ", - "Aucune methode correspondante à : ": "Aucune methode correspondante à : ", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant : ", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "Aucune methode correspondante à : " }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu : ", "Cmd inconnu : ": "Cmd inconnu : ", "pas d\\'id : ": "pas d\\'id : ", + "pas de parametre de geofencing : ": "pas de parametre de geofencing : ", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs." + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs." } } \ No newline at end of file diff --git a/core/i18n/id_ID.json b/core/i18n/id_ID.json old mode 100644 new mode 100755 index 6b443fb4..418f3362 --- a/core/i18n/id_ID.json +++ b/core/i18n/id_ID.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "Peralatan", + "Équipement": "Peralatan", "ID": "ID", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Akses tidak sah", "Pause": "Berhenti Sebentar", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "Mengaktifkan", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "Menyimpan", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Desain", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Akses tidak sah", - "Gestion": "Manajemen", - "Ajouter": "Tambahan", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "Konfigurasi", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "Skenario", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "Bidang Kesehatan", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "Pencarian", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "Tambahan", + "Plugins": "Plugins", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "Skenario", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "Konfigurasi lanjutan", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "Menyimpan", @@ -106,33 +179,54 @@ "Notifications": "Pemberitahuan", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "Perintah", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "Nama peralatan contoh", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "Objek induk", "Aucun": "Tak ada", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "Mengaktifkan", "Visible": "Terlihat", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "Pengguna", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "Nama", "Type": "Jenis", - "Action": "Tindakan" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "Skenario", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "Nama", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "Coba" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Akses tidak sah", "Equipement non trouvé : ": "Equipement non trouvé :", - "Aucune methode correspondante à : ": "Aucune methode correspondante à :", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant :", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "Aucune methode correspondante à :" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu :", "Cmd inconnu : ": "Cmd inconnu :", "pas d\\'id : ": "pas d\\'id :", + "pas de parametre de geofencing : ": "pas de parametre de geofencing :", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" } } \ No newline at end of file diff --git a/core/i18n/it_IT.json b/core/i18n/it_IT.json old mode 100644 new mode 100755 index 4291f4fb..aabc6c7e --- a/core/i18n/it_IT.json +++ b/core/i18n/it_IT.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "Dispositivo", + "Équipement": "Dispositivo", "ID": "ID", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Accesso non autorizzato", "Pause": "Pausa", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "Attivare", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "Salva", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Disegni", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Accesso non autorizzato", - "Gestion": "Gestione", - "Ajouter": "Aggiungi", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "Configurazione", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "Scenari", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "Salute", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "Ricercare", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "Aggiungi", + "Plugins": "Plugins", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "Scenari", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "Configurazione avanzata", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "Salva", @@ -106,33 +179,54 @@ "Notifications": "Notifiche", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "Comandi", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "Nome di attrezzature template", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "Oggetto padre", "Aucun": "Nessuno", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "Attivare", "Visible": "Visibile", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "Nome utente", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "Nome", "Type": "Tipo", - "Action": "Azione" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "Scenari", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "Nome", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "Prova" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Accesso non autorizzato", "Equipement non trouvé : ": "Equipement non trouvé :", - "Aucune methode correspondante à : ": "Nessun metodo corrispondente a:", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant :", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "Nessun metodo corrispondente a:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu :", "Cmd inconnu : ": "Cmd sconosciuto:", "pas d\\'id : ": "pas d\\'id :", + "pas de parametre de geofencing : ": "pas de parametre de geofencing :", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" } } \ No newline at end of file diff --git a/core/i18n/ja_JP.json b/core/i18n/ja_JP.json old mode 100644 new mode 100755 index c493bfc7..f97f5cf1 --- a/core/i18n/ja_JP.json +++ b/core/i18n/ja_JP.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "設備", + "Équipement": "設備", "ID": "ID", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401-不正アクセス", "Pause": "休止", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "アクティブ", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "セーブ", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "デザイン", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401-不正アクセス", - "Gestion": "管理", - "Ajouter": "加えます", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "コンフィギュレーション", - "Plugins": "プラグイン", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "シナリオ", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "健康", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "検索", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "加えます", + "Plugins": "プラグイン", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "シナリオ", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "高度な構成", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "セーブ", @@ -106,33 +179,54 @@ "Notifications": "通知", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "コマンド", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "テンプレート機器の名称", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "親オブジェクト", "Aucun": "何でもありません", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "アクティブ", "Visible": "目に見えます", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "ユーザー", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "表題", "Type": "タイプ", - "Action": "アクション" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "シナリオ", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "表題", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "テスト" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401-不正アクセス", "Equipement non trouvé : ": "Equipement non trouvé :", - "Aucune methode correspondante à : ": "以下に対応するメソッドはありません:", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant :", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "以下に対応するメソッドはありません:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu :", "Cmd inconnu : ": "不明なコマンド:", "pas d\\'id : ": "pas d\\'id :", + "pas de parametre de geofencing : ": "pas de parametre de geofencing :", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" } } \ No newline at end of file diff --git a/core/i18n/pt_PT.json b/core/i18n/pt_PT.json old mode 100644 new mode 100755 index 9e12d3a4..c5c69c78 --- a/core/i18n/pt_PT.json +++ b/core/i18n/pt_PT.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plataforma", - "Equipement": "Equipamento", + "Équipement": "Equipamento", "ID": "ID", - "User": "Usuário", - "Depuis": "Desde", + "Utilisateur": "Do utilizador", + "Dernière activité": "Ultima atividade", + "Date création": "Data de criação", "Utilisateur non trouvé": "Usuário não encontrado" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado", + "COMPTE MARKET": "CONTA DE MERCADO", + "BOX ID": "BOX-ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Tudo o que você precisa fazer é inserir seu Market ID e senha", + "Plusieurs choix sur cet écran :": "Várias opções nesta tela:", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Você insere a url do seu Jeedom (interno ou externo), bem como os identificadores de acesso a ele e confirma com o botão LOGIN", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Você clica em QR Code: uma nova tela aparece; você pode digitalizar um QRCode do plug-in Mobile da caixa que deseja adicionar, por meio da guia QRCODE do plug-in" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Móvel", + "ID": "EU IRIA", + "User": "Do utilizador", + "Menu Defaut": "Menu padrão", + "Nb Icones": "Ícones Nb", + "Utilisateur non trouvé": "Usuário não encontrado", + " Icone 1": "Ícone 1", + "Type": "Gentil", + "Choisir un Type": "Escolha um tipo", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Painel", + "Vue": "Visto", + "Design": "Projeto", + "Panel": "Painel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Escolha o ícone", + " Icone 2": "Ícone 2", + " Icone 3": "ícone 3", + " Icone 4": "ícone 4", + "Menu Custom": "Menu customizado" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Especiais Compatíveis", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponível na lista de plug-ins e integrado ao Painel do aplicativo móvel", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins não testados e não transmitidos", "Ne sont pas transmis à l’App Mobile": "Não são transmitidos para o aplicativo móvel" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "ADICIONANDO A CAIXA AO SEU APLICATIVO MÓVEL", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Você pode escolher um usuário: um QRCode será gerado. Você pode então escanear o QRCode do novo aplicativo, e assim adicionar esta caixa ao seu aplicativo", + "Utilisateur": "Do utilizador", + "Aucun": "Nenhum", + "QRCode": "Código QR", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erro Sem endereço interno (veja a configuração do seu Jeedom!)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erro Sem endereço externo (veja a configuração do seu Jeedom!)", + "Erreur Pas d\\'utilisateur selectionné": "Erro Nenhum usuário selecionado" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Para conectar seu telefone: existem 2 métodos possíveis" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Acesso não autorizado", "Pause": "Pausa", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Este plugin é totalmente compatível, não requer nenhuma ação de sua parte", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Este plugin é compatível, lembre-se de verificar os tipos genéricos de pedidos", "Activer": "Ativar", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "O plug-in não é compatível, você pode ativá-lo se desejar", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "O Plugin não é compatível, você pode ativá-lo se desejar", "Type Générique du Plugin": "Tipo genérico de plug-in", "Sauvegarder": "Salvar", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Projetos", "Configurations": "Configurações" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Acesso não autorizado" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Acesso não autorizado", - "Gestion": "Gestão", - "Ajouter": "Adicionar", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (SOMENTE VERSÃO ALFA PRIVADA)", "Configuration": "Configuração", - "Plugins": "Plugins", - "Objets \/ Pièces": "Objetos \/ Peças", - "Scénarios": "Cenas", + "Menu Custom": "Menu customizado", + "QR Code": "Código QR", + "Documentation APP V2": "Documentação do APP V2", "Santé": "Saúde", - "Régénérer la configuration": "Regenerar configuração", "Mes Téléphones Mobiles": "Meus telefones móveis", "Rechercher": "Pesquisa", + "Équipement visible": "Equipamento visível", + "Équipement non visible": "Equipamento não visível", + "App V1": "Aplicativo V1", + "Ajouter": "Adicionar", + "Plugins": "Plugins", + "Objets\/Pièces": "Itens\/peças", + "Scénarios": "Cenas", + "Régénérer la configuration": "Regenerar configuração", "Configuration avancée": "Configuração avançada", "Infos envoyées à l'app": "Informações enviadas para o aplicativo", "Sauvegarder": "Salvar", @@ -106,33 +179,54 @@ "Notifications": "Notificações", "Sauvegarde Mobile": "Backup móvel", "Commandes": "Comandos", - "Nom de l'équipement mobile": "Nome do equipamento móvel", - "Nom de l'équipement template": "Nome do equipamento modelo", + "Paramètres généraux": "Configurações Gerais", + "Nom de l'équipement": "Nome do equipamento", "Objet parent": "Objeto pai", "Aucun": "Nemhum", + "Catégorie": "Categoria", + "Options": "Opções", "Activer": "Ativar", "Visible": "Visivél", + "Paramètres spécifiques": "Configurações específicas", "Type de Mobile": "Tipo de celular", "iPhone": "Iphone", "Android": "Andróide", "Windows (non officiel)": "Windows (não oficial)", - "Utilisateurs": "Usuários", + "Utilisateur": "Do utilizador", "QRCode": "Código QR", - "Id Mobile :": "ID para celular:", + "Id Mobile": "IdMobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile:", + "ARN Mobile": "ARN móvel", "ARN": "RNA", - "TOKEN Mobile :": "TOKEN Mobile:", + "TOKEN Mobile": "TOKEN Móvel", "TOKEN": "SÍMBOLO", - "ARN pour Monitoring :": "RNA para monitoramento:", "ARN pour Monitoring": "ARN para Monitoramento", "Copier pour Monitoring": "Cópia para monitoramento", - "Sauvegarde Dashboard :": "Backup do painel:", + "Sauvegarde": "Cópia de segurança", + "Sauvegarde Dashboard": "Backup do painel", "Vérification en Cours": "Verificação em andamento", - "Sauvegarde Favoris :": "Salvar Favoritos:", + "Sauvegarde Favoris": "Salvar Favoritos", "Nom": "Nome", "Type": "Tipo", - "Action": "Ação" + "Valeur": "Valor", + "Actions": "Ações" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Tipo", + "Choisir un Type": "Escolha um tipo", + "Accueil": "Bem-vindo", + "Synthese": "Síntese", + "Dashboard": "Painel", + "Vue": "Visto", + "Design": "Projeto", + "Panel": "Painel", + "URL externe": "URL externo", + "Santé": "Saúde", + "TimeLine": "Linha do tempo", + "Choix TypeWebView": "Escolha TipoWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ÍCONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Saúde móvel", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objetos \/ Peças", "Scénarios": "Cenas", "Informations envoyées à l'app": "Informações enviadas para o aplicativo", + "Menu Custom": "Menu customizado", + "QrCode": "Código QR", + "Bien demarrer": "Comece bem", "Configuration Mobile du Plugin \"+name_plugin+": "Configuração móvel do plug-in \"+ name_plugin +", "Configuration Mobile de la Pièce": "Configuração da sala móvel", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuração móvel do cenário \"+ name_scenario +", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erro Sem endereço interno (consulte a configuração do seu Jeedom!)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erro Sem endereço externo (consulte a configuração do seu Jeedom!)", - "Erreur Pas d\\'utilisateur selectionné": "Erro Nenhum usuário selecionado", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuração Móvel do Cenário \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erro Sem endereço interno (consulte a configuração do seu Jeedom!)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erro Sem endereço externo (consulte a configuração do seu Jeedom!)", + "Erreur pas d\\'utilisateur selectionné": "Erro Nenhum usuário selecionado", "Configuration mise à jour": "Configuração atualizada", - "Nom": "Nome", + "Nom de la commande": "Nome do comando", + "Choisir une icône": "Escolha um ícone", + "Afficher": "Mostrar", + "Historiser": "Historicizar", + "Min": "Mínimo", + "Max": "Máx.", + "Unité": "Unidade", "Tester": "Teste" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Acesso não autorizado", "Equipement non trouvé : ": "Equipamento não encontrado:", - "Aucune methode correspondante à : ": "Aucune methode correspondante à :", - "scenario non trouvé": "cenário não encontrado" + "User inexistant : ": "Usuário inexistente:", + "scenario non trouvé": "cenário não encontrado", + "Aucune methode correspondante à : ": "Aucune methode correspondante à :" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Falha ao enviar notificação:", - "$geoloc['id'].'-'.$geoloc['name']": "$ geoloc ['id'] .'- '. $ geoloc [' name ']", - "Notification": "Notificação" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['nome']", + "Notification": "Notificação", + "Notification Critique": "Notificação Crítica" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Cor do indicador de valor", + "Pas du changement de valeur": "Sem alteração no valor", + "Inverse la position de l'indicateur de valeur": "Inverte a posição do indicador de valor", + "Affiche durée ou date de la valeur": "Exibe a duração ou data do valor", + "Date de valeur": "Data de validade", + "Date de collecte": "Data de coleta" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "Objeto JSONRPC não definido", "EqLogic inconnu : ": "EqLogic desconhecido:", "Cmd inconnu : ": "Cmd desconhecido:", "pas d\\'id : ": "no id:", + "pas de parametre de geofencing : ": "nenhum parâmetro de geofencing:", "Aucune demande": "Nenhum pedido" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "O aplicativo oficial da Jeedom permite controlar o sistema de automação residencial da Jeedom, seja por WiFi local ou na rede 3G \/ 4G da sua operadora. O aplicativo se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, nenhuma configuração é necessária. (possibilidade de fazê-lo manualmente) Você encontrará todos os recursos do seu Jeedom no seu celular. Você poderá personalizar seu aplicativo com atalhos e muito mais ... Recursos atuais: - Gerenciamento de seus cenários. - Gerenciamento de sua automação residencial de acordo com suas peças e equipamentos. - Atualização e retorno automáticos - Compatibilidade com plugins, como termostato, alarme, câmera etc ... - Interface personalizável com atalhos. - Resumo geral da automação residencial e por divisão - Notificações (com suporte a ASK) - Exibição de desenhos Outros recursos e compatibilidade estão disponíveis nas próximas atualizações! Respeito pela vida privada. Nenhum dado (automação residencial ou pessoal) é armazenado ou mantido em nossos servidores" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion, o aplicativo v1 não é compatível com o Android mais recente. O aplicativo oficial Jeedom permite que você controle seu sistema de automação residencial Jeedom, seja no Wifi local, seja na rede 3G\/4G da sua operadora. O app se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, não sendo necessária nenhuma configuração. (possibilidade de fazer manualmente) Você encontrará no seu celular todas as funcionalidades do seu Jeedom. Você poderá customizar seu aplicativo com atalhos e muito mais... Características atuais: - Gestão dos seus cenários. - Gestão da sua domótica de acordo com as suas divisões e equipamentos. - Turno e retorno automático de status - Compatibilidade com plugins, como termostato, alarme, câmera etc... - Interface personalizável com atalhos. - Resumo da domótica geral e por divisão - Notificações (com suporte ASK) - Exibição de Projetos Mais recursos e compatibilidades estão chegando em futuras atualizações! Privacidade. Nenhum dado (doméstico ou pessoal) é armazenado ou mantido em nossos servidores" } } \ No newline at end of file diff --git a/core/i18n/ru_RU.json b/core/i18n/ru_RU.json old mode 100644 new mode 100755 index 49f8764c..c53bfc29 --- a/core/i18n/ru_RU.json +++ b/core/i18n/ru_RU.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "Оборудование", + "Équipement": "Оборудование", "ID": "Идентификатор", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Несанкционированный доступ", "Pause": "Пауза", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "активировать", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "Сохранить", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "конструкции", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Несанкционированный доступ", - "Gestion": "Управление", - "Ajouter": "Добавить", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "Конфигурация", - "Plugins": "Плагины", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "Сценарии", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "Здоровье", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "поиск", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "Добавить", + "Plugins": "Плагины", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "Сценарии", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "Расширенные настройки", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "Сохранить", @@ -106,33 +179,54 @@ "Notifications": "Уведомления", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "Команды", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "Название шаблона оборудования", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "Родительский объект", "Aucun": "Нет", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "активировать", "Visible": "Видимый", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "Пользователи", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "Имя", "Type": "Тип", - "Action": "Действие" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "Сценарии", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "Имя", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "Тест" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Несанкционированный доступ", "Equipement non trouvé : ": "Equipement non trouvé :", - "Aucune methode correspondante à : ": "Aucune methode correspondante à :", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant :", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "Aucune methode correspondante à :" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu :", "Cmd inconnu : ": "Cmd inconnu :", "pas d\\'id : ": "pas d\\'id :", + "pas de parametre de geofencing : ": "pas de parametre de geofencing :", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" } } \ No newline at end of file diff --git a/core/i18n/tr.json b/core/i18n/tr.json old mode 100644 new mode 100755 index c5e90d37..5b23ca58 --- a/core/i18n/tr.json +++ b/core/i18n/tr.json @@ -8,12 +8,47 @@ }, "plugins\/mobile\/desktop\/modal\/health.php": { "Plateforme": "Plateforme", - "Equipement": "Cihaz", + "Équipement": "Cihaz", "ID": "Kimlik", - "User": "User", - "Depuis": "Depuis", + "Utilisateur": "Utilisateur", + "Dernière activité": "Dernière activité", + "Date création": "Date création", "Utilisateur non trouvé": "Utilisateur non trouvé" }, + "plugins\/mobile\/desktop\/modal\/secPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "COMPTE MARKET": "COMPTE MARKET", + "BOX ID": "BOX ID", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "Plusieurs choix sur cet écran :": "Plusieurs choix sur cet écran :", + "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.": "- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin" + }, + "plugins\/mobile\/desktop\/modal\/menuCustom.php": { + "Mobile": "Mobile", + "ID": "ID", + "User": "User", + "Menu Defaut": "Menu Defaut", + "Nb Icones": "Nb Icones", + "Utilisateur non trouvé": "Utilisateur non trouvé", + " Icone 1": " Icone 1", + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choisir Icone": "Choisir Icone", + " Icone 2": " Icone 2", + " Icone 3": " Icone 3", + " Icone 4": " Icone 4", + "Menu Custom": "Menu Custom" + }, "plugins\/mobile\/desktop\/modal\/plugin.php": { "Plugins Spéciaux Compatibles": "Plugins Spéciaux Compatibles", "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile.": "Disponibles dans la liste des plugins et intégrés au Dashboard de l’App Mobile", @@ -26,6 +61,32 @@ "Plugins non testés et non transmis": "Plugins non testés et non transmis", "Ne sont pas transmis à l’App Mobile": "Ne sont pas transmis à l’App Mobile" }, + "plugins\/mobile\/desktop\/modal\/fivePage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/qrcodev2.php": { + "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE ": "AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE", + "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application": "Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application", + "Utilisateur": "Utilisateur", + "Aucun": "Aucun", + "QRCode": "QRCode", + "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné" + }, + "plugins\/mobile\/desktop\/modal\/thirdPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/wizard.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/sixPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/firstPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé", + "Pour connecter votre téléphone : il y a 2 méthodes possible": "Pour connecter votre téléphone : il y a 2 méthodes possible" + }, "plugins\/mobile\/desktop\/modal\/update.mobile.php": { "401 - Accès non autorisé": "401 - Yetkisiz erişim", "Pause": "Durdur", @@ -37,7 +98,7 @@ "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part": "Ce Plugin est entièrement compatible, il ne nécessite aucune action de votre part", "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes": "Ce plugin est compatible, pensez à vérifier les Types Génériques des Commandes", "Activer": "Etkinleştir", - "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez": "Le Plugin n\\'est pas compatible, vous pouvez l\\'activer si vous le souhaitez", + "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez": "Le Plugin n est pas compatible, vous pouvez l activer si vous le souhaitez", "Type Générique du Plugin": "Type Générique du Plugin", "Sauvegarder": "Kaydet", "Id Cmd": "Id Cmd", @@ -86,18 +147,30 @@ "Designs": "Tasarımlar", "Configurations": "Configurations" }, + "plugins\/mobile\/desktop\/modal\/fiveModal.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, + "plugins\/mobile\/desktop\/modal\/fourPage.php": { + "401 - Accès non autorisé": "401 - Accès non autorisé" + }, "plugins\/mobile\/desktop\/php\/mobile.php": { "401 - Accès non autorisé": "401 - Yetkisiz erişim", - "Gestion": "Idare", - "Ajouter": "Ekle", + "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)": "App V2 - (VERSION ALPHA PRIVEE SEULEMENT)", "Configuration": "Ayar", - "Plugins": "Ekler", - "Objets \/ Pièces": "Objets \/ Pièces", - "Scénarios": "Senaryolar", + "Menu Custom": "Menu Custom", + "QR Code": "QR Code", + "Documentation APP V2": "Documentation APP V2", "Santé": "Sağlık", - "Régénérer la configuration": "Régénérer la configuration", "Mes Téléphones Mobiles": "Mes Téléphones Mobiles", "Rechercher": "Arayın", + "Équipement visible": "Équipement visible", + "Équipement non visible": "Équipement non visible", + "App V1": "App V1", + "Ajouter": "Ekle", + "Plugins": "Ekler", + "Objets\/Pièces": "Objets\/Pièces", + "Scénarios": "Senaryolar", + "Régénérer la configuration": "Régénérer la configuration", "Configuration avancée": "Gelişmiş ayarlar", "Infos envoyées à l'app": "Infos envoyées à l'app", "Sauvegarder": "Kaydet", @@ -106,33 +179,54 @@ "Notifications": "Bildirimler", "Sauvegarde Mobile": "Sauvegarde Mobile", "Commandes": "Komutalar", - "Nom de l'équipement mobile": "Nom de l'équipement mobile", - "Nom de l'équipement template": "Şablon cihazının ismi", + "Paramètres généraux": "Paramètres généraux", + "Nom de l'équipement": "Nom de l'équipement", "Objet parent": "Üst nesne", "Aucun": "Hiçbir", + "Catégorie": "Catégorie", + "Options": "Options", "Activer": "Etkinleştir", "Visible": "Görülebilir", + "Paramètres spécifiques": "Paramètres spécifiques", "Type de Mobile": "Type de Mobile", "iPhone": "iPhone", "Android": "Android", "Windows (non officiel)": "Windows (non officiel)", - "Utilisateurs": "Kulanıcılar", + "Utilisateur": "Utilisateur", "QRCode": "QRCode", - "Id Mobile :": "Id Mobile :", + "Id Mobile": "Id Mobile", "Iq": "Iq", - "ARN Mobile :": "ARN Mobile :", + "ARN Mobile": "ARN Mobile", "ARN": "ARN", - "TOKEN Mobile :": "TOKEN Mobile :", + "TOKEN Mobile": "TOKEN Mobile", "TOKEN": "TOKEN", - "ARN pour Monitoring :": "ARN pour Monitoring :", "ARN pour Monitoring": "ARN pour Monitoring", "Copier pour Monitoring": "Copier pour Monitoring", - "Sauvegarde Dashboard :": "Sauvegarde Dashboard :", + "Sauvegarde": "Sauvegarde", + "Sauvegarde Dashboard": "Sauvegarde Dashboard", "Vérification en Cours": "Vérification en Cours", - "Sauvegarde Favoris :": "Sauvegarde Favoris :", + "Sauvegarde Favoris": "Sauvegarde Favoris", "Nom": "İsim", "Type": "Çeşit", - "Action": "Eylem" + "Valeur": "Valeur", + "Actions": "Actions" + }, + "plugins\/mobile\/desktop\/php\/panelMenuCustom.php": { + "Type": "Type", + "Choisir un Type": "Choisir un Type", + "Accueil": "Accueil", + "Synthese": "Synthese", + "Dashboard": "Dashboard", + "Vue": "Vue", + "Design": "Design", + "Panel": "Panel", + "URL externe": "URL externe", + "Santé": "Santé", + "TimeLine": "TimeLine", + "Choix TypeWebView": "Choix TypeWebView" + }, + "plugins\/mobile\/desktop\/php\/panelWebApp.php": { + "ICONE 1": "ICONE 1" }, "plugins\/mobile\/desktop\/js\/mobile.js": { "Santé Mobile": "Santé Mobile", @@ -140,35 +234,55 @@ "Objets \/ Pièces": "Objets \/ Pièces", "Scénarios": "Senaryolar", "Informations envoyées à l'app": "Informations envoyées à l'app", + "Menu Custom": "Menu Custom", + "QrCode": "QrCode", + "Bien demarrer": "Bien demarrer", "Configuration Mobile du Plugin \"+name_plugin+": "Configuration Mobile du Plugin \"+name_plugin+", "Configuration Mobile de la Pièce": "Configuration Mobile de la Pièce", - "Configuration Mobile du Scnéario \"+name_scenario+": "Configuration Mobile du Scnéario \"+name_scenario+", - "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", - "Erreur Pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", + "Configuration Mobile du Scénario \"+name_scenario+": "Configuration Mobile du Scénario \"+name_scenario+", + "Erreur pas d\\'adresse interne (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse interne (voir configuration de votre Jeedom !)", + "Erreur pas d\\'adresse externe (voir configuration de votre Jeedom !)": "Erreur Pas d\\'adresse externe (voir configuration de votre Jeedom !)", + "Erreur pas d\\'utilisateur selectionné": "Erreur Pas d\\'utilisateur selectionné", "Configuration mise à jour": "Configuration mise à jour", - "Nom": "İsim", + "Nom de la commande": "Nom de la commande", + "Choisir une icône": "Choisir une icône", + "Afficher": "Afficher", + "Historiser": "Historiser", + "Min": "Min", + "Max": "Max", + "Unité": "Unité", "Tester": "Test et" }, "plugins\/mobile\/core\/ajax\/mobile.ajax.php": { "401 - Accès non autorisé": "401 - Yetkisiz erişim", "Equipement non trouvé : ": "Equipement non trouvé :", - "Aucune methode correspondante à : ": "Aşağıdakilere karşılık gelen bir yöntem yok:", - "scenario non trouvé": "scenario non trouvé" + "User inexistant : ": "User inexistant :", + "scenario non trouvé": "scenario non trouvé", + "Aucune methode correspondante à : ": "Aşağıdakilere karşılık gelen bir yöntem yok:" }, "plugins\/mobile\/core\/class\/mobile.class.php": { "Echec de l\\'envoi de la notification :": "Echec de l\\'envoi de la notification :", - "$geoloc['id'].'-'.$geoloc['name']": "$geoloc['id'].'-'.$geoloc['name']", - "Notification": "Notification" + "$geoloc['id'] . '-' . $geoloc['name']": "$geoloc['id'] . '-' . $geoloc['name']", + "Notification": "Notification", + "Notification Critique": "Notification Critique" + }, + "plugins\/mobile\/core\/template\/widgets.html": { + "Couleur de l'indicateur de valeur": "Couleur de l'indicateur de valeur", + "Pas du changement de valeur": "Pas du changement de valeur", + "Inverse la position de l'indicateur de valeur": "Inverse la position de l'indicateur de valeur", + "Affiche durée ou date de la valeur": "Affiche durée ou date de la valeur", + "Date de valeur": "Date de valeur", + "Date de collecte": "Date de collecte" }, "plugins\/mobile\/core\/api\/mobile.api.php": { "JSONRPC object not defined": "JSONRPC object not defined", "EqLogic inconnu : ": "EqLogic inconnu :", "Cmd inconnu : ": "Cmd inconnu :", "pas d\\'id : ": "pas d\\'id :", + "pas de parametre de geofencing : ": "pas de parametre de geofencing :", "Aucune demande": "Aucune demande" }, "info.json": { - "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" } } \ No newline at end of file diff --git a/core/img/Button_Dashboard_icon@3x.png b/core/img/Button_Dashboard_icon@3x.png new file mode 100755 index 00000000..3eafc626 Binary files /dev/null and b/core/img/Button_Dashboard_icon@3x.png differ diff --git a/core/img/Button_Design_icon@3x.png b/core/img/Button_Design_icon@3x.png new file mode 100755 index 00000000..e5e6d7af Binary files /dev/null and b/core/img/Button_Design_icon@3x.png differ diff --git a/core/img/Button_Synthese_icon@3x.png b/core/img/Button_Synthese_icon@3x.png new file mode 100755 index 00000000..eaab45c0 Binary files /dev/null and b/core/img/Button_Synthese_icon@3x.png differ diff --git a/core/img/Button_URL_icon@3x.png b/core/img/Button_URL_icon@3x.png new file mode 100755 index 00000000..6af241c1 Binary files /dev/null and b/core/img/Button_URL_icon@3x.png differ diff --git a/core/img/IMG_0738.PNG b/core/img/IMG_0738.PNG new file mode 100755 index 00000000..2b3367ab Binary files /dev/null and b/core/img/IMG_0738.PNG differ diff --git a/core/img/android.png b/core/img/android.png old mode 100644 new mode 100755 diff --git a/core/img/ios.png b/core/img/ios.png old mode 100644 new mode 100755 diff --git a/core/img/mobile_icon.png b/core/img/mobile_icon.png old mode 100644 new mode 100755 diff --git a/core/img/v22methods.jpeg b/core/img/v22methods.jpeg new file mode 100755 index 00000000..4b0d0f6a Binary files /dev/null and b/core/img/v22methods.jpeg differ diff --git a/core/img/v2ActualBoxFlouted.jpeg b/core/img/v2ActualBoxFlouted.jpeg new file mode 100755 index 00000000..4fb7c69d Binary files /dev/null and b/core/img/v2ActualBoxFlouted.jpeg differ diff --git a/core/img/v2AddZone.jpeg b/core/img/v2AddZone.jpeg new file mode 100755 index 00000000..926f7d9c Binary files /dev/null and b/core/img/v2AddZone.jpeg differ diff --git a/core/img/v2ConnectBox.jpeg b/core/img/v2ConnectBox.jpeg new file mode 100755 index 00000000..c0da35a3 Binary files /dev/null and b/core/img/v2ConnectBox.jpeg differ diff --git a/core/img/v2FullMenu.jpeg b/core/img/v2FullMenu.jpeg new file mode 100755 index 00000000..757f5264 Binary files /dev/null and b/core/img/v2FullMenu.jpeg differ diff --git a/core/img/v2MenuBoxs.PNG b/core/img/v2MenuBoxs.PNG new file mode 100755 index 00000000..1b0bd7f8 Binary files /dev/null and b/core/img/v2MenuBoxs.PNG differ diff --git a/core/img/v2MenuBoxs.jpeg b/core/img/v2MenuBoxs.jpeg new file mode 100755 index 00000000..1b0bd7f8 Binary files /dev/null and b/core/img/v2MenuBoxs.jpeg differ diff --git a/core/img/v2ModalMenuCustom.png b/core/img/v2ModalMenuCustom.png new file mode 100755 index 00000000..4ae1f831 Binary files /dev/null and b/core/img/v2ModalMenuCustom.png differ diff --git a/core/img/v2ModalQrCode.png b/core/img/v2ModalQrCode.png new file mode 100755 index 00000000..33c7290c Binary files /dev/null and b/core/img/v2ModalQrCode.png differ diff --git a/core/img/v2ModifyBigRadius.jpeg b/core/img/v2ModifyBigRadius.jpeg new file mode 100755 index 00000000..e27354fb Binary files /dev/null and b/core/img/v2ModifyBigRadius.jpeg differ diff --git a/core/img/v2ModifyLittleRadius.jpeg b/core/img/v2ModifyLittleRadius.jpeg new file mode 100755 index 00000000..ffbf2b27 Binary files /dev/null and b/core/img/v2ModifyLittleRadius.jpeg differ diff --git a/core/img/v2QRCodeConnect.PNG b/core/img/v2QRCodeConnect.PNG new file mode 100755 index 00000000..e7647963 Binary files /dev/null and b/core/img/v2QRCodeConnect.PNG differ diff --git a/core/img/v2ZoneInactive.jpeg b/core/img/v2ZoneInactive.jpeg new file mode 100755 index 00000000..7bce54cf Binary files /dev/null and b/core/img/v2ZoneInactive.jpeg differ diff --git a/core/img/v2connectMarket.jpeg b/core/img/v2connectMarket.jpeg new file mode 100755 index 00000000..03c218dc Binary files /dev/null and b/core/img/v2connectMarket.jpeg differ diff --git a/core/img/v2firstConnect.jpeg b/core/img/v2firstConnect.jpeg new file mode 100755 index 00000000..966fcdda Binary files /dev/null and b/core/img/v2firstConnect.jpeg differ diff --git a/core/img/v2floutedBoxs.png b/core/img/v2floutedBoxs.png new file mode 100755 index 00000000..3e0118e2 Binary files /dev/null and b/core/img/v2floutedBoxs.png differ diff --git a/core/img/v2greenBtnAdd.PNG b/core/img/v2greenBtnAdd.PNG new file mode 100755 index 00000000..d205d20a Binary files /dev/null and b/core/img/v2greenBtnAdd.PNG differ diff --git a/core/php/image.php b/core/php/image.php old mode 100644 new mode 100755 index 5ae4f513..1009acf2 --- a/core/php/image.php +++ b/core/php/image.php @@ -29,16 +29,18 @@ if(!file_exists($file)){ + echo "FILE NON EXISTE !"; die(); } $nameMD5 = md5_file($file); if($nameMD5 != $keyFile){ + echo "KEY NOK !"; die(); } //ob_clean(); -header('Content-Type: image/jpeg'); +header('Content-Type: image/'.pathinfo($file, PATHINFO_EXTENSION)); echo file_get_contents($file); -unlink($file); +//unlink($file); diff --git a/core/template/.DS_Store b/core/template/.DS_Store deleted file mode 100644 index f96f6d4c..00000000 Binary files a/core/template/.DS_Store and /dev/null differ diff --git a/core/template/images/.DS_Store b/core/template/images/.DS_Store deleted file mode 100644 index 555cda85..00000000 Binary files a/core/template/images/.DS_Store and /dev/null differ diff --git a/core/template/images/alarm/alarm1.jpg b/core/template/images/alarm/alarm1.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/alarm/alarme.jpg b/core/template/images/alarm/alarme.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/camera/camera.jpg b/core/template/images/camera/camera.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/camera/camera1.jpg b/core/template/images/camera/camera1.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/netatmothermostat/thermostat.jpg b/core/template/images/netatmothermostat/thermostat.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/netatmothermostat/thermostat1.jpg b/core/template/images/netatmothermostat/thermostat1.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/thermostat/thermostat.jpg b/core/template/images/thermostat/thermostat.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/thermostat/thermostat1.jpg b/core/template/images/thermostat/thermostat1.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/weather/weather.jpg b/core/template/images/weather/weather.jpg old mode 100644 new mode 100755 diff --git a/core/template/images/weather/weather1.jpg b/core/template/images/weather/weather1.jpg old mode 100644 new mode 100755 diff --git a/core/template/mobile/cmd.action.slider.sliderAppV2.html b/core/template/mobile/cmd.action.slider.sliderAppV2.html new file mode 100644 index 00000000..92744afa --- /dev/null +++ b/core/template/mobile/cmd.action.slider.sliderAppV2.html @@ -0,0 +1,148 @@ + + + +
+
+
#name_display#
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + + + +
diff --git a/core/template/mobile/cmd.action.slider.verticalSlider.html b/core/template/mobile/cmd.action.slider.verticalSlider.html new file mode 100644 index 00000000..30f14226 --- /dev/null +++ b/core/template/mobile/cmd.action.slider.verticalSlider.html @@ -0,0 +1,140 @@ + + + +
+
+
#name_display#
+
+
+
+
+
+
+
+ +
+
+
+
+
+ + + + + +
diff --git a/core/template/mobile/cmd.info.numeric.arcSlider.html b/core/template/mobile/cmd.info.numeric.arcSlider.html new file mode 100644 index 00000000..a9d6e1ee --- /dev/null +++ b/core/template/mobile/cmd.info.numeric.arcSlider.html @@ -0,0 +1,75 @@ + + + + +
+
+ #name_display# +
+
+
+ #state# #unite# +
+ #minHistoryValue#|#averageHistoryValue#|#maxHistoryValue# +
+ + +
diff --git a/data/.htaccess b/data/.htaccess new file mode 100755 index 00000000..e13f6181 --- /dev/null +++ b/data/.htaccess @@ -0,0 +1 @@ +Order allow,deny diff --git a/desktop/css/panel.css b/desktop/css/panel.css new file mode 100755 index 00000000..e69de29b diff --git a/desktop/js/mobile.js b/desktop/js/mobile.js old mode 100644 new mode 100755 index e7c82830..823a199b --- a/desktop/js/mobile.js +++ b/desktop/js/mobile.js @@ -14,58 +14,287 @@ * You should have received a copy of the GNU General Public License * along with Jeedom. If not, see . */ - $('#bt_healthmobile').on('click', function () { - $('#md_modal').dialog({title: "{{Santé Mobile}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=health').dialog('open'); -}) - $('#bt_pluguinmobile').on('click', function () { - $('#md_modal').dialog({title: "{{Plugins compatibles}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=plugin').dialog('open'); -}) - $('#bt_piecemobile').on('click', function () { - $('#md_modal').dialog({title: "{{Objets / Pièces}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=piece').dialog('open'); -}) - $('#bt_scenariomobile').on('click', function () { - $('#md_modal').dialog({title: "{{Scénarios}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=scenario').dialog('open'); + +if(typeof jeeDialog !== 'undefined'){ + document.querySelector('#bt_healthmobile').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'santémobile', + title: "{{Santé Mobile}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=health' + }) + }) + + document.querySelector('#bt_pluguinmobile').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'pluginsCompatibles', + title: "{{Plugins compatibles}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=plugin' + }) + }) + + document.querySelector('#bt_piecemobile').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'objectsModal', + title: "{{Objets / Pièces}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=piece' + }) + }) + + document.querySelector('#bt_scenariomobile').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'scenariosModal', + title: "{{Scénarios}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=scenario' + }) + }) + + document.querySelector('#info_app').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'infosApp', + title: "{{Informations envoyées à l'app}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=info_app.mobile' + }) + }) + + document.querySelector('#bt_customMenu')?.addEventListener('click', function(event) { + jeedom.version({ + success: function(version) { + if(version >= '4.4.0'){ + jeeDialog.dialog({ + id: 'menuCustom', + title: "{{Menu Custom}}", + fullScreen:1, + contentUrl: 'index.php?v=d&plugin=mobile&modal=menuCustom' + }) + }else{ + $('#div_alert').showAlert({message: 'Module compatible uniquement avec la version core 4.4.0 et supérieure', level: 'warning'}); + return; + } + } + }) + + }) + + document.querySelector('#bt_qrCodev2').addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'qrcodev2', + title: "{{QrCode}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=qrcodev2' + }) + }) + + document.querySelector('#bt_startTuto')?.addEventListener('click', function(event) { + jeeDialog.dialog({ + id: 'startTuto', + title: "{{Bien demarrer}}", + + fullScreen:1, + contentUrl: 'index.php?v=d&plugin=mobile&modal=wizard' + }) + }) + + + +}else{ + $('#bt_healthmobile').on('click', function () { + $('#md_modal').dialog({title: "{{Santé Mobile}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=health').dialog('open'); + }) + $('#bt_startTuto').on('click', function () { + $('#md_modal').dialog({title: "{{Bien demarrer}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=wizard').dialog('open'); }) - $('#info_app').on('click', function(){ - $('#md_modal').dialog({title: "{{Informations envoyées à l'app}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=info_app.mobile').dialog('open'); + $('#bt_pluguinmobile').on('click', function () { + $('#md_modal').dialog({title: "{{Plugins compatibles}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=plugin').dialog('open'); + }) + $('#bt_piecemobile').on('click', function () { + $('#md_modal').dialog({title: "{{Objets / Pièces}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=piece').dialog('open'); }) + $('#bt_scenariomobile').on('click', function () { + $('#md_modal').dialog({title: "{{Scénarios}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=scenario').dialog('open'); + }) + $('#info_app').on('click', function(){ + $('#md_modal').dialog({title: "{{Informations envoyées à l'app}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=info_app.mobile').dialog('open'); + }) + $('#bt_customMenu').on('click', function(){ + jeedom.version({ + success: function(version) { + if(version >= '4.4.0'){ + $('#md_modal').dialog({title: "{{Menu Custom}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=menuCustom').dialog('open'); + }else{ + $('#div_alert').showAlert({message: 'Module compatible uniquement avec la version core 4.4.0 et supérieure', level: 'warning'}); + return; + } + } + }) + + }) + + $('#bt_qrCodev2').on('click', function(){ + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=qrcodev2').dialog('open'); + }) + + +} + + function clickplugin(id_plugin,name_plugin){ + if(typeof jeeDialog !== 'undefined'){ + jeeDialog.dialog({ + id: 'configMobile', + title: "{{Configuration Mobile du Plugin "+name_plugin+"}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=plugin.mobile&plugin_id=' +id_plugin + }) + }else{ $('#md_modal').dialog({title: "{{Configuration Mobile du Plugin "+name_plugin+"}}"}); $('#md_modal').load('index.php?v=d&plugin=mobile&modal=plugin.mobile&plugin_id=' +id_plugin).dialog('open'); + } } function clickobject(id_object){ - $('#md_modal').dialog({title: "{{Configuration Mobile de la Pièce}}"}); - $('#md_modal').load('index.php?v=d&plugin=mobile&modal=object.mobile&object_id=' +id_object).dialog('open'); + if(typeof jeeDialog !== 'undefined'){ + jeeDialog.dialog({ + id: 'configMobilePiece', + title: "{{Configuration Mobile de la Pièce}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=object.mobile&object_id=' +id_object + }) + }else{ + $('#md_modal').dialog({title: "{{Configuration Mobile de la Pièce}}"}); + $('#md_modal').load('index.php?v=d&plugin=mobile&modal=object.mobile&object_id=' +id_object).dialog('open'); + } + + } function clickscenario(id_scenario,name_scenario){ - $('#md_modal').dialog({title: "{{Configuration Mobile du Scnéario "+name_scenario+"}}"}); + if(typeof jeeDialog !== 'undefined'){ + jeeDialog.dialog({ + id: 'configMobileScenario', + title: "{{Configuration Mobile du Scénario "+name_scenario+"}}", + contentUrl: 'index.php?v=d&plugin=mobile&modal=scenario.mobile&scenario_id=' +id_scenario + }) + }else{ + $('#md_modal').dialog({title: "{{Configuration Mobile du Scénario "+name_scenario+"}}"}); $('#md_modal').load('index.php?v=d&plugin=mobile&modal=scenario.mobile&scenario_id=' +id_scenario).dialog('open'); + } + } -$('li').click(function(){ + document.querySelector('li').click(function(){ setTimeout(function(){ $('.eqLogicThumbnailContainer').packery(); },50); }); + var hash = document.location.hash; if (hash) { - $('.nav-tabs a[href="'+hash+'"]').tab('show'); + $('.nav-tabs a[href="'+hash+'"]').tab('show'); + /*document.querySelector('.nav-tabs a[href="'+hash+'"]').tab('show');*/ } -$('.nav-tabs a').on('shown.bs.tab', function (e) { + +/* +var aTabs = document.querySelectorAll('a[data-toggle="tabPlug"'); +for (let i = 0; i < aTabs.length; i++) { + console.log(aTabs[i].id); + aTabs[i].addEventListener('click', function(event) { + window.location.hash = e.target.hash; + }); +}*/ + + + +document.querySelector('.nav-tabs a').addEventListener('shown.bs.tab', function (e) { window.location.hash = e.target.hash; }); -/* - * Fonction pour l'ajout de commande, appellé automatiquement par plugin.template - */ + + + +document.querySelectorAll('.renameDivClass').forEach(el => { + el.addEventListener('input', function(e){ + let idElement = this.getAttribute('id'); + let eqLogicId = this.getAttribute('eqId'); + let numElement = idElement.substr(-1, 1); + let areatitleEl = document.querySelector('#titleArea'+numElement) + areatitleEl.innerHTML = '' + areatitleEl.innerHTML = this.children[1].value + }); +}) + + + + +document.querySelectorAll('.btIconClass').forEach(el => { + el.addEventListener('click', function(e){ + let idElement = this.getAttribute('id'); + let eqLogicId = this.getAttribute('eqId'); + let numElement = idElement.substr(-1, 1); + var _icon = false; + jeedomUtils.chooseIcon(function(_icon) { + let spanIcon = document.querySelector('#spanIconTest'+numElement+'[eqid="'+eqLogicId+'"]') + spanIcon.innerHTML = '' + spanIcon.insertAdjacentHTML("beforeend",_icon); + $('#spanIconTest'+numElement).children('i:nth-child(1)').css('font-size', '60px'); + spanIcon.setAttribute('eqId', eqLogicId) + $('#spanIconTest'+numElement).children('i:nth-child(1)').attr('id', 'area'+numElement); + }, { + icon: _icon + }) + }); +}) + + +function userSelect(idSelect){ + let eqLogicId = document.getElementById(idSelect).getAttribute('eqid'); + let numElement = idSelect.substr(-1, 1); + let typeObject = document.getElementById(idSelect).value; + let selectorsObject = document.querySelectorAll('.item_dash'); + selectorsObject.forEach(selector => { + let idSelector = selector.id; + let eqId = selector.getAttribute('eqId'); + if(idSelector.includes(typeObject) && idSelector.includes(numElement) && eqId == eqLogicId){ + selector.style.display = 'block'; + selector.value = 'none'; + selector.select = 'selected'; + } + if(!idSelector.includes(typeObject) && idSelector.includes(numElement) && eqId == eqLogicId){ + selector.style.display = 'none'; + } + }) + if(typeObject == 'url'){ + document.querySelector('#urlUser'+numElement+'[eqId="'+eqLogicId+'"]').style.display = 'block'; + }else{ + /*let urlsUser = document.querySelectorAll('.urlUser'); + urlsUser.forEach(el => { + el.style.display = 'none'; + })*/ + document.querySelector('#urlUser'+numElement+'[eqId="'+eqLogicId+'"]').style.display = 'none'; + } +} + + function printEqLogic(_eqLogic){ + let appVersion = _eqLogic.configuration.appVersion; + var monitoringElements = document.querySelectorAll('.monitoringToDisable'); + var saveTab = document.querySelector('.saveTab'); + if(appVersion == 2){ + monitoringElements.forEach(el => { + el.style.display = 'none'; + + }) + saveTab.style.display = 'none'; + }else{ + monitoringElements.forEach(el => { + el.style.display = 'block'; + }) + saveTab.style.display = 'block'; + } + $.ajax({ type: "POST", url: "plugins/mobile/core/ajax/mobile.ajax.php", @@ -83,14 +312,16 @@ $('.nav-tabs a').on('shown.bs.tab', function (e) { $('#div_alert').showAlert({message: data.result, level: 'danger'}); return; } + let el = document.querySelector('.qrCodeImg') + el.innerHTML = ''; if (data.result == 'internalError') { - $('.qrCodeImg').empty().append('{{Erreur Pas d\'adresse interne (voir configuration de votre Jeedom !)}}'); + el.innerHTML = '{{Erreur pas d\'adresse interne (voir configuration de votre Jeedom !)}}'; }else if(data.result == 'externalError'){ - $('.qrCodeImg').empty().append('{{Erreur Pas d\'adresse externe (voir configuration de votre Jeedom !)}}'); + el.innerHTML = '{{Erreur pas d\'adresse externe (voir configuration de votre Jeedom !)}}' }else if(data.result == 'UserError'){ - $('.qrCodeImg').empty().append('{{Erreur Pas d\'utilisateur selectionné}}'); + el.innerHTML = '{{Erreur pas d\'utilisateur selectionné}}' }else{ - $('.qrCodeImg').empty().append(''); + el.innerHTML = '' } } }); @@ -111,12 +342,13 @@ $('.nav-tabs a').on('shown.bs.tab', function (e) { $('#div_alert').showAlert({message: data.result, level: 'danger'}); return; } + let savedash = document.querySelector('#SaveDash') if (data.result == true) { - $('#SaveDash').addClass('badge-success'); - $('#SaveDash').text('OK'); + savedash.classList.add('badge-success'); + savedash.innerHTML = 'OK'; }else if(data.result == false){ - $('#SaveDash').addClass('badge-danger'); - $('#SaveDash').text('NOK'); + savedash.classList.add('badge-danger'); + savedash.innerHTML = 'NOK'; } } }); @@ -137,52 +369,63 @@ $('.nav-tabs a').on('shown.bs.tab', function (e) { $('#div_alert').showAlert({message: data.result, level: 'danger'}); return; } + let savefav = document.querySelector('#SaveFav') if (data.result == true) { - $('#SaveFav').addClass('badge-success'); - $('#SaveFav').text('OK'); + savefav.classList.add('badge-success'); + savefav.innerHTML = 'OK'; }else if(data.result == false){ - $('#SaveFav').addClass('badge-danger'); - $('#SaveFav').text('NOK'); + savefav.classList.add('badge-danger'); + savefav.innerHTML = 'NOK'; } } }); + } -$('#bt_regenConfig').on('click',function(){ - $.ajax({ - type: "POST", - url: "plugins/mobile/core/ajax/mobile.ajax.php", - data: { - action: "regenConfig" - }, - dataType: 'json', - error: function (request, status, error) { - handleAjaxError(request, status, error); - }, - success: function (data) { - if (data.state != 'ok') { - $('#div_alert').showAlert({message: data.result, level: 'danger'}); - return; - } - $('#div_alert').showAlert({message: '{{Configuration mise à jour}}', level: 'success'}); - } - }); -}); + + + + + + +document.getElementById('bt_regenConfig').addEventListener('click', function(){ + $.ajax({ + type: "POST", + url: "plugins/mobile/core/ajax/mobile.ajax.php", + data: { + action: "regenConfig" + }, + dataType: 'json', + error: function (request, status, error) { + handleAjaxError(request, status, error); + }, + success: function (data) { + if (data.state != 'ok') { + $('#div_alert').showAlert({message: data.result, level: 'danger'}); + return; + } + $('#div_alert').showAlert({message: '{{Configuration mise à jour}}', level: 'success'}); + } + }); + }); + // Copie pour monitoring -var toCopy = document.getElementById( 'to-copy-monitoring' ), - arnComplet = document.getElementById( 'arnComplet' ), - btnCopy = document.getElementById( 'copy-monitoring' ); +var toCopy = document.getElementById('to-copy-monitoring'); +var arnComplet = document.getElementById('arnComplet'); +var btnCopy = document.getElementById('copy-monitoring'); + -btnCopy.addEventListener( 'click', function(){ + +btnCopy.addEventListener('click', function(){ var fichier = arnComplet.value; var fichierCouper = fichier.substr(44); - toCopy.value = fichierCouper; + toCopy.value = fichierCouper; toCopy.select(); document.execCommand( 'copy' ); return false; -} ); + }); $("#table_cmd").sortable({axis: "y", cursor: "move", items: ".cmd", placeholder: "ui-state-highlight", tolerance: "intersect", forcePlaceholderSize: true}); /* @@ -196,22 +439,40 @@ function addCmdToTable(_cmd) { _cmd.configuration = {}; } - var tr = ''; - tr += ''; - tr += ''; - tr += ''; - tr += ''; + var tr = ''; + tr += '' + tr += '' + tr += '' + tr += '' + tr += '
' + tr += '' + tr += '' + tr += '' + tr += '
' tr += ''; tr += '' + jeedom.cmd.availableType() + ''; tr += ''; tr += ''; tr += ''; + tr += ' ' + tr += ' ' + tr += '
' + tr += '' + tr += '' + tr += '' + tr += '
' + tr += ''; + tr += ''; + tr += ''; + tr += ''; if (is_numeric(_cmd.id)) { - tr += ' '; - tr += ' {{Tester}}'; + tr += ' '; + tr += ' {{Tester}}'; } - if (init(_cmd.logicalId) !== 'notif'){ - tr += ''; + tr += ''; + tr += ''; + if (init(_cmd.logicalId) !== 'notif' && init(_cmd.logicalId) !== 'notifCritical' ){ + tr += ''; } tr += ''; tr += ''; diff --git a/desktop/js/panelMenuCustom.js b/desktop/js/panelMenuCustom.js new file mode 100755 index 00000000..5bcaa582 --- /dev/null +++ b/desktop/js/panelMenuCustom.js @@ -0,0 +1,266 @@ + +/* This file is part of Jeedom. + * + * Jeedom is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * Jeedom is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Jeedom. If not, see . + */ + + + + const btnMenu = document.querySelector('.btn-validate-menuCustom'); + const menusSelectPanel = document.querySelectorAll('.menuSelectPanel'); + const mainContainer = document.querySelector('.mainContainer'); + const renamesDivs = document.querySelectorAll('.renameDivClass'); + const eqLogicId = mainContainer.getAttribute('eqId'); + const nbIconesPanel = mainContainer.getAttribute('nbIconesPanel'); + + const inputsPanel = document.querySelectorAll('.inputPanel'); + const selectorsDefault = document.querySelectorAll('.selectMenuMobile'); + const btnsChooseIcon = document.querySelectorAll('.btn-chooseIcon-panel'); + const spanIconsPanel = document.querySelectorAll('.spanIconPanel'); + +// INIT DEFAULT DISPLAY BY EQLOGICCONFIG + document.addEventListener("DOMContentLoaded", () => { + let defaultDivIcon = document.querySelector('.mainContainer > div'); + defaultDivIcon.children[0].classList.remove("whiteApp"); + defaultDivIcon.children[0].classList.add("greenApp"); + let defaultSelect = defaultDivIcon.getAttribute('selectName'); + let numElPanel = defaultDivIcon.getAttribute('numElPanel'); + document.getElementById(`panelModal${numElPanel}`).style.display = 'flex'; + document.getElementById(`typeMenu${numElPanel}`).value = defaultSelect; + for (let i = 1; i < parseInt(nbIconesPanel) + 1; i++) { + let typeObject = document.querySelector(`.icon${i}`).getAttribute('selectName'); + let entireSelect = document.querySelector(`.icon${i}`).getAttribute('selectNameEntire'); + let webviewType = document.querySelector(`.icon${i}`).getAttribute('webviewType'); + document.getElementById(`checkboxWebViewMenu${i}`).value = webviewType; + if(entireSelect.includes(typeObject)) { + if(typeObject != 'home' && typeObject != 'overview' && typeObject != 'health' && typeObject != 'timeline'){ + if(typeObject == 'url'){ + document.querySelector(`#urlUser${i}`).style.display = 'block'; + window['urlUser'+i] = document.querySelector(`#numElPanel${i}`).getAttribute('urlUser'); + if(window['urlUser'+i] != 'none'){ + document.querySelector(`#urlUser${i}`).value = window['urlUser'+i]; + } + //document.querySelector(`#urlUser${i}`).value = 'block'; + }else{ + document.querySelector(`#item_${typeObject}${i}`).style.display = 'block'; + document.querySelector(`#item_${typeObject}${i}`).value = entireSelect; + } + /* document.querySelector(`#item_${typeObject}${i}`).style.display = 'block'; + document.querySelector(`#item_${typeObject}${i}`).value = entireSelect;*/ + } + } + } + selectorsDefault.forEach(el => { + let id = el.getAttribute('id'); + let numElement = id.substr(-1, 1); + let selectElement = document.querySelector('.icon'+numElement)?.getAttribute('selectName'); + document.getElementById(`typeMenu${numElement}`).value = selectElement; + }); + inputsPanel.forEach(el => { + let id = el.getAttribute('id'); + let numElement = id.substr(-1, 1); + el.value = document.getElementById(`actualMenuNameUser${numElement}`)?.textContent; + }); + }); + + + +// CHANGE NAMEICONES BY USER + inputsPanel.forEach(el => { + el.addEventListener('input', function(event) { + let id = el.getAttribute('id'); + let numElement = id.substr(-1, 1); + let actualMenuNameUser = document.getElementById(`actualMenuNameUser${numElement}`); + actualMenuNameUser.innerHTML = ''; + actualMenuNameUser.innerHTML = el.value; + }); + }); + + + // CHANGE NAMEICONES BY USER + btnsChooseIcon.forEach(el => { + el.addEventListener('click', function(event) { + + let idElement = this.getAttribute('id'); + let numElement = idElement.substr(-1, 1); + var _icon = false; + let spanIcon = document.querySelector('#spanIconPanel'+numElement) + jeedomUtils.chooseIcon(function(_icon) { + spanIcon.innerHTML = '' + let iconName = spanIcon.getAttribute('iconName'); + let arraySplits = (iconName.trim()).split(' '); + if(iconName !== 'undefined'){ + for(let j=0;j < parseInt(arraySplits.length);j++){ + spanIcon.classList.remove(arraySplits[j]); + } + } + spanIcon.insertAdjacentHTML("beforeend",_icon); + $('#spanIconPanel'+numElement).css('font-size', '60px'); + const htmlString = _icon; + const classRegex = / { + let idSelector = selector.id; + if(idSelector.includes(typeObject) && idSelector.includes(numElement)){ + selector.style.display = 'block'; + selector.value = 'none'; + selector.select = 'selected'; + } + if(!idSelector.includes(typeObject) && idSelector.includes(numElement)){ + selector.style.display = 'none'; + } + }) + if(typeObject == 'url'){ + document.querySelector('#urlUser'+numElement).style.display = 'block'; + } + } diff --git a/desktop/js/widgetSlider.js b/desktop/js/widgetSlider.js new file mode 100755 index 00000000..9862f7ff --- /dev/null +++ b/desktop/js/widgetSlider.js @@ -0,0 +1,27 @@ +var elem = document.querySelector('input[type="range"]'); +var elemBis = document.querySelector('input'); +var getTest = parseInt(elem.getAttribute('data-cmd_id')); +var cmdName = document.querySelector('.cmdName'); + + + +$( document ).ready(function() { + + elem.addEventListener("touchend", function( event ) { + jeedom.cmd.execute({id: cmdId , value: {slider: elem.value}}); + }); + + + +var rangeValue = function(){ + var newValue = elem.value; + var target = document.querySelector('.value'); + target.innerHTML = newValue; + + + +} + +elem.addEventListener("input", rangeValue); + +}) diff --git a/desktop/js/widgetSwitch.js b/desktop/js/widgetSwitch.js new file mode 100755 index 00000000..e69de29b diff --git a/desktop/modal/firstPage.php b/desktop/modal/firstPage.php new file mode 100755 index 00000000..e677ebc9 --- /dev/null +++ b/desktop/modal/firstPage.php @@ -0,0 +1,30 @@ + + + + +
+
+
+ +
+
+

{{Pour connecter votre téléphone : il y a 2 méthodes possible}}

+

{{Sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box. +}}

+
+ + + \ No newline at end of file diff --git a/desktop/modal/fiveModal.php b/desktop/modal/fiveModal.php new file mode 100755 index 00000000..be87ccbc --- /dev/null +++ b/desktop/modal/fiveModal.php @@ -0,0 +1,58 @@ + + +
+ +

Fonctionnement de la Geolocalisation

+ +
+
+

On ajoute une zone de Geolocalisation

+

On recherce l'adresse, on nomme la Zone, et on valide

+
+
+

La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone

+

Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes

+
+
+

Modifier largueur de la zone

+
+
+

Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + + + +
+ +

Fonctionnement de la Geolocalisation

+ +
+
+

On ajoute une zone de Geolocalisation

+

On recherce l'adresse, on nomme la Zone, et on valide

+
+
+

La zone apparaitra en rouge, signifiant que l'on se trouve pas dans la Zone

+

Si vous vous trouvé dans la zone à sa création, elle passera en vert apres quelques secondes

+
+
+

Modifier largueur de la zone

+
+
+

Ajouter une zone ajoutera dans votre équipement téléphone dans le plugin Mobile une commande binaire, qui pourra nous servir à programmer des actions en fonction de son état.

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + + + +
+ +

Pour acceder aux fonctionnalités comme les Notifications, la Personnalisation du Menu ou la Geolocalisation, il faut au préalable avoir selectionné au moins une box 'actuelle'

+ + +
+
+

Pour cela, dans l'onglet Boxs, il faut selectionner une box, et s'identifier.

+

Une fois les identifiants entrés, la box passe en haut de liste.

+

Si elle est repond au ping, elle a un voyant vert

+

On peut cliquer sur Synchroniser pour mettre à jour le statut des boxs

+
+
+

Pour acceder a toutes les fonctionnalités, il faut cliquer sur la box configurée; cela permettra à l'application de recuperer ses informations, et donc autoriser les affichages du menu.

+
+
+

Menu Complet

+
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+ + + + {{Plateforme}} - {{Equipement}} + {{Équipement}} {{ID}} - {{User}} - {{Depuis}} + {{Utilisateur}} + {{Dernière activité}} + {{Date création}} - getConfiguration('type_mobile'); - $file = 'plugins/mobile/docs/images/' . $typeMobile . '.png'; - if (file_exists($file)) { - $path = 'plugins/mobile/docs/images/' . $typeMobile . '.png'; - $img = ' '.$typeMobile; - } else { - $path = 'plugins/mobile/docs/images/mobile_icon.png'; - $img = ' '.$typeMobile; - } - $userId = $eqLogic->getConfiguration('affect_user'); - $userType = user::byId($userId); - if(is_object($userType)){ - $username = $userType->getLogin(); - echo '' . $img . '' . $eqLogic->getHumanName(true) . ''; - echo '' . $eqLogic->getId() . ''; - echo '' . $username . ''; - echo '' . $eqLogic->getConfiguration('createtime') . ''; - }else{ - echo '' . $img . '' . $eqLogic->getHumanName(true) . ''; - echo '' . $eqLogic->getId() . ''; - echo '{{Utilisateur non trouvé}}'; - echo '' . $eqLogic->getConfiguration('createtime') . ''; - } -} -?> + getConfiguration('type_mobile'); + $file = 'plugins/mobile/core/img/' . $typeMobile . '.png'; + if (file_exists($file)) { + $path = 'plugins/mobile/core/img/' . $typeMobile . '.png'; + $img = ' ' . $typeMobile; + } else { + $path = 'plugins/mobile/core/img/mobile_icon.png'; + $img = ' ' . $typeMobile; + } + $userId = $eqLogic->getConfiguration('affect_user'); + $userType = user::byId($userId); + if (is_object($userType)) { + $username = $userType->getLogin(); + echo '' . $img . '' . $eqLogic->getHumanName(true) . ''; + echo '' . $eqLogic->getId() . ''; + echo '' . $username . ''; + echo '' . $eqLogic->getStatus('lastCommunication') . ''; + echo '' . $eqLogic->getConfiguration('createtime') . ''; + } else { + echo '' . $img . '' . $eqLogic->getHumanName(true) . ''; + echo '' . $eqLogic->getId() . ''; + echo '{{Utilisateur non trouvé}}'; + echo '' . $eqLogic->getStatus('lastCommunication') . ''; + echo '' . $eqLogic->getConfiguration('createtime') . ''; + } + } + ?> \ No newline at end of file diff --git a/desktop/modal/info_app.mobile.php b/desktop/modal/info_app.mobile.php old mode 100644 new mode 100755 index 4687f6e0..ae08f686 --- a/desktop/modal/info_app.mobile.php +++ b/desktop/modal/info_app.mobile.php @@ -36,7 +36,7 @@
  • {{Designs}}
  • {{Configurations}}
  • -
    +
    
     		
    @@ -64,5 +64,5 @@
    
     	
    -
    -
    +
    +
    \ No newline at end of file diff --git a/desktop/modal/menuCustom.php b/desktop/modal/menuCustom.php new file mode 100755 index 00000000..8bdc1f13 --- /dev/null +++ b/desktop/modal/menuCustom.php @@ -0,0 +1,851 @@ +. +*/ + +if (!isConnect('admin')) { + throw new Exception('401 Unauthorized'); +} +$eqLogics = mobile::byType('mobile'); + +?> + + + + + + + + + + + + + getConfiguration('affect_user'); + $userType = user::byId($userId); + if (is_object($userType)) { + $username = $userType->getLogin(); + echo ''; + echo ''; + echo ''; + if ($eqLogic->getConfiguration('appVersion') == 2) { + if (intval($activeMobileId) == $eqLogic->getId()) { + echo ''; + } else { + echo ''; + } + } + if ($eqLogic->getConfiguration('appVersion') == 2) { + echo ''; + echo ''; + } else { + echo ''; + } + echo ''; + } else { + echo ''; + echo ''; + echo ''; + } + } + ?> + +
    {{Mobile}}{{ID}}{{User}}{{Menu Defaut}}{{Nb Icones}}
    ' . $eqLogic->getHumanName(true) . '' . $eqLogic->getId() . '' . $username . 'PAS D\'APP V2 SUR CE MOBILE
    ' . $eqLogic->getHumanName(true) . '' . $eqLogic->getId() . '{{Utilisateur non trouvé}}
    + + + + + + + + + + + +
    - +
    - '; - echo '{{Envoyer cette pièce vers l\'application}}'; - $check = 'checked'; - if ($object->getDisplay('sendToApp', 1) == 0) { - $check = 'unchecked'; - } - echo ''; - ?> + '; + echo '{{Envoyer cette pièce vers l\'application}}'; + $check = 'checked'; + if ($object->getDisplay('sendToApp', 1) == 0) { + $check = 'unchecked'; + } + echo ''; + ?>
    -
    - {{Type Générique de cet objet}} - {{Sauvegarder}} - +
    + {{Type Générique de cet objet}} + {{Sauvegarder}} + -
    +
    getEqLogic(); - $checkHomebridge = ''; - echo '
    '; - foreach ($eqLogics as $eqLogic) { - echo '
    '; - echo '
    + $tableau_cmd = array(); + $eqLogics = $object->getEqLogic(); + $checkHomebridge = ''; + echo '
    '; + foreach ($eqLogics as $eqLogic) { + echo '
    '; + echo ' '; - echo '
    '; - echo '
    '; - $cmds = null; - $cmds = cmd::byEqLogicId($eqLogic->getId()); - echo ''; - echo ' + echo '
    '; + echo '
    '; + $cmds = null; + $cmds = cmd::byEqLogicId($eqLogic->getId()); + echo '
    '; + echo ''; - foreach ($cmds as $cmd) { - array_push($tableau_cmd, $cmd->getId()); - echo ''; - echo ''; - echo ''; + echo ''; + echo ''; - echo ''; + echo ''; - } - echo '
    {{Id Cmd}} {{Nom de la Commande}} {{Type Générique}}
    '; - echo '' . $cmd->getId() . ''; - echo ''; - echo $cmd->getName(); - $display_icon = 'none'; - $icon = ''; - if (in_array($cmd->getGeneric_type(), ['GENERIC_INFO', 'GENERIC_ACTION'])) { - $display_icon = 'block'; - $icon = $cmd->getDisplay('icon'); - } - echo '
    + foreach ($cmds as $cmd) { + array_push($tableau_cmd, $cmd->getId()); + echo '
    '; + echo '' . $cmd->getId() . ''; + echo ''; + echo $cmd->getName(); + $display_icon = 'none'; + $icon = ''; + if (in_array($cmd->getGeneric_type(), ['GENERIC_INFO', 'GENERIC_ACTION'])) { + $display_icon = 'block'; + $icon = $cmd->getDisplay('icon'); + } + echo '
    ' . $icon . ' - {{Icône}} + {{Icône}}
    '; - echo '
    '; + echo ''; ?> - + + $info) { + if ($cmd->getType() == 'info' && $info['type'] == 'Action') { + continue; + } elseif ($cmd->getType() == 'action' && $info['type'] == 'Info') { + continue; + } elseif (isset($info['ignore']) && $info['ignore'] == true) { + continue; } - if ($info['key'] == $cmd->getGeneric_type()) { - echo ''; + $info['key'] = $key; + if (!isset($groups[$info['family']])) { + $groups[$info['family']][0] = $info; } else { - echo ''; + array_push($groups[$info['family']], $info); } } - echo ''; - } - ?> - + ksort($groups); + foreach ($groups as $group) { + usort($group, function ($a, $b) { + return strcmp($a['name'], $b['name']); + }); + foreach ($group as $key => $info) { + if ($key == 0) { + echo ''; + } + if ($info['key'] == $cmd->getGeneric_type()) { + echo ''; + } else { + echo ''; + } + } + echo ''; + } + ?> + '; - echo '
    '; - echo '
    '; - echo '
    '; - echo '
    '; + echo ''; + echo ''; + } + echo ''; + echo '
    '; + echo '
    '; + echo '
    '; } echo '
    '; ?> @@ -156,105 +156,125 @@
    + $('#md_modal').on('dialogclose', function() { + if (changed == 1) { + location.reload(); + } + }) + \ No newline at end of file diff --git a/desktop/modal/piece.php b/desktop/modal/piece.php old mode 100644 new mode 100755 index 2d8bd648..e7b9a6c1 --- a/desktop/modal/piece.php +++ b/desktop/modal/piece.php @@ -25,9 +25,9 @@ $plugin_widget = mobile::$_pluginWidget; ?> - {{Les Pièces}} + {{Les Pièces}}
    -getId() . '" onclick="clickobject(\'' . $object->getId() . '\')">'; - $_echo .= $object->getDisplay('icon', ''); + $_echo .= $object->getDisplay('icon', ''); $_echo .= '
    ' . $object->getName() . '
    '; $_echo .= '
    '; } echo $_echo; -?> + ?>
    +include_file('desktop', 'mobile', 'js', 'mobile'); +include_file('core', 'plugin.template', 'js'); +?> \ No newline at end of file diff --git a/desktop/modal/plugin.mobile.php b/desktop/modal/plugin.mobile.php old mode 100644 new mode 100755 index 4dddbfb9..cb6168f8 --- a/desktop/modal/plugin.mobile.php +++ b/desktop/modal/plugin.mobile.php @@ -27,20 +27,20 @@
    - {{Envoi auprès de l'app mobile}} + {{Envoi auprès de l'app mobile}} getId(), $plugin_widget)) { $div = ''; echo ''; echo ''; - ?> - + + $info) { + if (strtolower($cmd->getType()) != strtolower($info['type'])) { + continue; + } + $info['key'] = $key; + if (!isset($groups[$info['family']])) { + $groups[$info['family']][0] = $info; + } else { + array_push($groups[$info['family']], $info); + } } - $name = $info['name']; - if (isset($info['noapp']) && $info['noapp']) { - $name .= ' (Non géré par Application Mobile)'; + ksort($groups); + foreach ($groups as $group) { + usort($group, function ($a, $b) { + return strcmp($a['name'], $b['name']); + }); + foreach ($group as $key => $info) { + if ($key == 0) { + echo ''; + } + $name = $info['name']; + if (isset($info['noapp']) && $info['noapp']) { + $name .= ' (Non géré par Application Mobile)'; + } + if ($info['key'] == $cmd->getGeneric_type()) { + echo ''; + } else { + echo ''; + } + } + echo ''; } - if ($info['key'] == $cmd->getGeneric_type()) { - echo ''; - } else { - echo ''; - } - } - echo ''; - } - ?> - - '; - echo ''; + ?> + + '; + echo ''; } echo ''; echo '
    '; echo '
    '; echo ''; - } - echo ''; - ?> - {{Sauvegarder}} + } + echo ''; + ?> + {{Sauvegarder}} '; + echo ''; } ?> @@ -207,103 +207,163 @@ + \ No newline at end of file diff --git a/desktop/modal/plugin.php b/desktop/modal/plugin.php old mode 100644 new mode 100755 index 667a5e61..09a16289 --- a/desktop/modal/plugin.php +++ b/desktop/modal/plugin.php @@ -30,26 +30,28 @@
    getId() != 'mobile' && $plugin->getId() != 'homebridge') { - if (in_array($plugin->getId(), $plugin_compatible)) { - if (in_array($plugin->getId(), $plugin_widget)) { - $_echo .= '
    '; - $_echo .= '
    '; - $_echo .= ''; - $_echo .= '
    '; - $_echo .= '' . $plugin->getName() . ''; - $_echo .= '
    '; - $num++; - } + $num = 0; + $_echo = ''; + foreach ($plugins as $plugin) { + $opacity = ''; + if ($plugin->getId() != 'mobile' && $plugin->getId() != 'homebridge') { + if (in_array($plugin->getId(), $plugin_compatible)) { + if (in_array($plugin->getId(), $plugin_widget)) { + $_echo .= '
    '; + $_echo .= '
    '; + $_echo .= ''; + $_echo .= '
    '; + $_echo .= '' . $plugin->getName() . ''; + $_echo .= '
    '; + $num++; } } } - echo $_echo; - if($num == 0){ echo '';} + } + echo $_echo; + if ($num == 0) { + echo ''; + } ?>
    @@ -58,26 +60,28 @@
    getId() != 'mobile' && $plugin->getId() != 'homebridge') { - if (in_array($plugin->getId(), $plugin_compatible)) { - if (config::byKey('sendToApp', $plugin->getId(), 1) == 1 && !in_array($plugin->getId(), $plugin_widget)) { - $_echo .= '
    '; - $_echo .= '
    '; - $_echo .= ''; - $_echo .= '
    '; - $_echo .= '' . $plugin->getName() . ''; - $_echo .= '
    '; - $num++; - } + $num = 0; + $_echo = ''; + foreach ($plugins as $plugin) { + $opacity = ''; + if ($plugin->getId() != 'mobile' && $plugin->getId() != 'homebridge') { + if (in_array($plugin->getId(), $plugin_compatible)) { + if (config::byKey('sendToApp', $plugin->getId(), 1) == 1 && !in_array($plugin->getId(), $plugin_widget)) { + $_echo .= '
    '; + $_echo .= '
    '; + $_echo .= ''; + $_echo .= '
    '; + $_echo .= '' . $plugin->getName() . ''; + $_echo .= '
    '; + $num++; } } } - echo $_echo; - if($num == 0){ echo '';} + } + echo $_echo; + if ($num == 0) { + echo ''; + } ?>
    @@ -86,27 +90,29 @@
    getId() != 'mobile' && $plugin->getId() != 'homebridge') { - if (in_array($plugin->getId(), $plugin_compatible)) { - if (config::byKey('sendToApp', $plugin->getId(), 1) != 1 && !in_array($plugin->getId(), $plugin_widget)) { - $opacity = jeedom::getConfiguration('eqLogic:style:noactive'); - $_echo .= '
    '; - $_echo .= '
    '; - $_echo .= ''; - $_echo .= '
    '; - $_echo .= '' . $plugin->getName() . ''; - $_echo .= '
    '; - $num++; - } + $num = 0; + $_echo = ''; + foreach ($plugins as $plugin) { + $opacity = ''; + if ($plugin->getId() != 'mobile' && $plugin->getId() != 'homebridge') { + if (in_array($plugin->getId(), $plugin_compatible)) { + if (config::byKey('sendToApp', $plugin->getId(), 1) != 1 && !in_array($plugin->getId(), $plugin_widget)) { + $opacity = jeedom::getConfiguration('eqLogic:style:noactive'); + $_echo .= '
    '; + $_echo .= '
    '; + $_echo .= ''; + $_echo .= '
    '; + $_echo .= '' . $plugin->getName() . ''; + $_echo .= '
    '; + $num++; } } } - echo $_echo; - if($num == 0){ echo '';} + } + echo $_echo; + if ($num == 0) { + echo ''; + } ?>
    @@ -115,26 +121,28 @@
    getId() != 'mobile' && $plugin->getId() != 'homebridge') { - if (!in_array($plugin->getId(), $plugin_compatible)) { - if (config::byKey('sendToApp', $plugin->getId(), 0) == 1) { - $_echo .= '
    '; - $_echo .= '
    '; - $_echo .= ''; - $_echo .= '
    '; - $_echo .= '' . $plugin->getName() . ''; - $_echo .= '
    '; - $num++; - } + $num = 0; + $_echo = ''; + foreach ($plugins as $plugin) { + $opacity = ''; + if ($plugin->getId() != 'mobile' && $plugin->getId() != 'homebridge') { + if (!in_array($plugin->getId(), $plugin_compatible)) { + if (config::byKey('sendToApp', $plugin->getId(), 0) == 1) { + $_echo .= '
    '; + $_echo .= '
    '; + $_echo .= ''; + $_echo .= '
    '; + $_echo .= '' . $plugin->getName() . ''; + $_echo .= '
    '; + $num++; } } } - echo $_echo; - if($num == 0){ echo '';} + } + echo $_echo; + if ($num == 0) { + echo ''; + } ?>
    @@ -143,41 +151,43 @@
    getId() != 'mobile' && $plugin->getId() != 'homebridge') { - if (!in_array($plugin->getId(), $plugin_compatible)) { - if (config::byKey('sendToApp', $plugin->getId(), 0) != 1) { - $opacity = jeedom::getConfiguration('eqLogic:style:noactive'); - $_echo .= '
    '; - $_echo .= '
    '; - $_echo .= ''; - $_echo .= '
    '; - $_echo .= '' . $plugin->getName() . ''; - $_echo .= '
    '; - $num++; - } + $num = 0; + $_echo = ''; + foreach ($plugins as $plugin) { + $opacity = ''; + if ($plugin->getId() != 'mobile' && $plugin->getId() != 'homebridge') { + if (!in_array($plugin->getId(), $plugin_compatible)) { + if (config::byKey('sendToApp', $plugin->getId(), 0) != 1) { + $opacity = jeedom::getConfiguration('eqLogic:style:noactive'); + $_echo .= '
    '; + $_echo .= '
    '; + $_echo .= ''; + $_echo .= '
    '; + $_echo .= '' . $plugin->getName() . ''; + $_echo .= '
    '; + $num++; } } } - echo $_echo; - if($num == 0){ echo '';} + } + echo $_echo; + if ($num == 0) { + echo ''; + } ?>
    + $(window).resize(function() { + $('.pluginListContainer').packery() + }) + \ No newline at end of file diff --git a/desktop/modal/qrcodev2.php b/desktop/modal/qrcodev2.php new file mode 100755 index 00000000..069d112d --- /dev/null +++ b/desktop/modal/qrcodev2.php @@ -0,0 +1,113 @@ +. +*/ + +$eqLogics = mobile::byType('mobile'); + +?> + +
    +
    +

        {{AJOUT DE LA BOX SUR VOTRE APPLICATiON MOBILE }}

    +
    +
    +
    +

    {{Vous pouvez choisir un utilisateur : un QRCode sera généré. Vous pourrez ensuite scanner le QRCode depuis la nouvelle application, et ainsi ajouter cette box à votre application}}

    +
    +
    +
    +
    + + +
    +
    + +
    + +
    + +
    + + + + -
    - {{Scénarios}} - - +
    + {{Scénarios}} + + -
    - - - - - - - - - - - +
    {{ID}}{{Scénario}}{{Transmis}}
    + + + + + + + + + + getId(); - if($scenario->getDisplay('sendToApp', 0) == 1){ - $check = 'checked'; - } - $tr = ''; - $tr .= ''; - $tr .= ''; + if ($scenario->getDisplay('sendToApp', 0) == 1) { + $check = 'checked'; + } + $tr = ''; + $tr .= ''; + $tr .= ''; /*$tr .= ''; echo $tr; - } - ?> - -
    {{ID}}{{Scénario}}{{Transmis}}
    '.$scenario_id.''.$scenario->getHumanName().'
    ' . $scenario_id . '' . $scenario->getHumanName() . '';*/ $tr .= '
    -
    + } + ?> + + +
    - diff --git a/desktop/modal/secPage.php b/desktop/modal/secPage.php new file mode 100755 index 00000000..c9955f5d --- /dev/null +++ b/desktop/modal/secPage.php @@ -0,0 +1,48 @@ + + +
    +
    +
    +

    {{COMPTE MARKET}}

    + +
    +
    +

    {{BOX ID}}

    + +
    +
    +
    +
    +

    {{Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe.}}

    +
    +
    +

    {{Plusieurs choix sur cet écran :}}

    +

    {{- Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION}}

    +

    {{- Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin.}}

    +
    +
    +
    + + + + + +
    + +

    Personnalisation du Menu

    +

    Vous pouvez personnaliser le Menu de votre WebView via le plugin Mobile ou l'application

    + +
    +
    +

    On clique sur Menu Custom

    +

    Une modale s'ouvre et vous propose vos téléphones deja connectés

    +

    Cliquer sur Configurer Menu sur le téléphone choisi

    +

    Le nombre d'icones peut aller de 1 à 4

    +

    En cochant Menu Default, le menu configuré sur ce téléphone devient celui par défaut sur tous vos téléphones

    +
    +
    +

    Via l'application Mobile : si vous avez configuré une box par défaut, alors le Menu Custom apparait dans le menu de l'application

    +

    Meme principe que via le plugin Mobile

    +
    +
    + +
    +
    + + + +
    +
    +

    Menu Custom Mobile

    + + +
    +
    +
    + + + + + +
    +

    Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market

    +
    + + + + +
    + +
    + + + + - {{Pause}} + {{Pause}} -


    +


    
     
     
    \ No newline at end of file
    diff --git a/desktop/modal/wizard.php b/desktop/modal/wizard.php
    new file mode 100755
    index 00000000..9180d07b
    --- /dev/null
    +++ b/desktop/modal/wizard.php
    @@ -0,0 +1,263 @@
    +
    +
    +
    + +
    + +
    +
    + $b['order']; + }); + foreach ($step as $key => $value) { + if ($i == 0) + $current_step = ' js-active current'; + else + $current_step = ''; + + echo ''; + + $i++; + } + ?> +
    +
    +
    +
    + +
    + +
    +
    + +
    + +
    + + + + + += '4.4.0') { + include_file('3rdparty', 'animate/animate', 'css'); +} else { + include_file('3rdparty', 'animate/animate', 'css'); + include_file('3rdparty', 'animate/animate', 'js'); +} + +//include('plugins/mobile/3rdparty/animate/animate.css'); +//include('plugins/mobile/3rdparty/animate/animate.js'); +//include_file('plugins/mobile/3rdparty', 'animate/animate', 'js'); +?> \ No newline at end of file diff --git a/desktop/php/mobile.php b/desktop/php/mobile.php old mode 100644 new mode 100755 index f6247a4f..d3de1ef7 --- a/desktop/php/mobile.php +++ b/desktop/php/mobile.php @@ -8,227 +8,302 @@ $plugins = plugin::listPlugin(true); $plugin_compatible = mobile::$_pluginSuported; $plugin_widget = mobile::$_pluginWidget; +//$pathImgMenu = 'plugins/mobile/core/img/imgMenuPerso.jpg'; ?> +
    - {{Gestion}} + {{App V2 - (VERSION BETA PUBLIQUE SEULEMENT)}} +
    +
    +
    + {{Configuration}} +
    + = '4.4.0') { + /* + echo '
    '; + echo '
    '; + echo '{{Menu Custom}}'; + echo '
    '; + }else{ + echo '
    '; + echo '
    '; + echo '{{Menu Custom}}'; + echo '
    ';*/ + } + ?> +
    +
    + {{QR Code}} +
    + +
    +
    + {{Santé}} +
    +
    + {{Mes Téléphones Mobiles}} +
    + +
    + + +
    +
    +
    + getConfiguration('appVersion', '1') == '2') { + $opacity = ($eqLogic->getIsEnable()) ? '' : 'disableCard'; + echo '
    '; + $file = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; + if (file_exists($file)) { + $path = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; + echo ''; + } else { + $path = 'plugins/mobile/core/img/mobile_icon.png'; + echo ''; + } + echo '
    '; + echo '' . $eqLogic->getHumanName(true, true) . ''; + echo ''; + echo '
    '; + } + } + ?> +
    +
    +
    + {{App V1}}

    {{Ajouter}}
    -
    -
    - {{Configuration}} -

    {{Plugins}}

    - {{Objets / Pièces}} + {{Objets/Pièces}}

    {{Scénarios}}
    -
    -
    - {{Santé}} -

    {{Régénérer la configuration}}
    - {{Mes Téléphones Mobiles}} - - + {{Mes Téléphones Mobiles}}
    getIsEnable()) ? '' : 'disableCard'; - echo '
    '; - $file = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; - if (file_exists($file)) { - $path = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; - echo ''; - } else { - $path = 'plugins/mobile/core/img/mobile_icon.png'; - echo ''; + if ($eqLogic->getConfiguration('appVersion', '1') != '2') { + $opacity = ($eqLogic->getIsEnable()) ? '' : 'disableCard'; + echo '
    '; + $file = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; + if (file_exists($file)) { + $path = 'plugins/mobile/core/img/' . $eqLogic->getConfiguration('type_mobile') . '.png'; + echo ''; + } else { + $path = 'plugins/mobile/core/img/mobile_icon.png'; + echo ''; + } + echo '
    '; + echo '' . $eqLogic->getHumanName(true, true) . ''; + echo ''; + echo '
    '; } - echo '
    '; - echo '' . $eqLogic->getHumanName(true, true) . ''; - echo '
    '; } ?>
    -
    - - - + ?> diff --git a/desktop/php/modalConfigPlugin.php b/desktop/php/modalConfigPlugin.php new file mode 100644 index 00000000..32552615 --- /dev/null +++ b/desktop/php/modalConfigPlugin.php @@ -0,0 +1,47 @@ +. +*/ + +if (!isConnect('admin')) +{ + throw new Exception('401 Unauthorized'); +} + + + $logicalPlugin = secureXSS(init('logicalPlugin')); + echo '
    '; + if(!@include('plugins/'.$logicalPlugin.'/plugin_info/configuration.php')) throw new Exception("Pas de configuration sur ce plugin"); + //if(!@include('plugins/zigbee/plugin_info/configuration.php')) throw new Exception("Pas de configuration sur ce plugin"); + echo '
    '; + + + + + + ?> + + + + diff --git a/desktop/php/panelMenuCustom.php b/desktop/php/panelMenuCustom.php new file mode 100755 index 00000000..5cd1618c --- /dev/null +++ b/desktop/php/panelMenuCustom.php @@ -0,0 +1,600 @@ +. +*/ + +if (!isConnect('admin')) +{ + throw new Exception('401 Unauthorized'); +} +$eqLogics = mobile::byType('mobile'); + + +if(isset($_GET["Iq"])){ + $mobile = eqLogic::byLogicalId($_GET["Iq"], 'mobile'); + if(is_object($mobile)){ + $arrayConfigs = array('Icones' => [],'SelectName' => [],'RenameIcon' => [],'UrlUser' => []); + $nbIcones = $mobile->getConfiguration('nbIcones'); + + echo '
    '; + echo '
    NOMBRE ICONES
    '; + echo ''; + echo '
    '; + ?> + + + MENU ACTUEL
    '; + echo '
    '; + $j=0; + for($i=1;$i<5;$i++){ + $selectName = $mobile->getConfiguration('selectNameMenu'.$i , 'home'); + $selectEntire = $mobile->getConfiguration('selectNameMenu'.$i , 'home'); + $urlUser = $mobile->getConfiguration('urlUser'.$i , 'none'); + $webviewType = $mobile->getConfiguration('checkboxWebViewMenu'.$i, 'WebviewMobile'); + if(strpos($selectName, 'panel') != false || strpos($selectName, 'dashboard') != false){ + $arrayReturn = explode('_', $selectName); + $selectName = $arrayReturn[1]; + } + echo ''; + $j++; + + } + ?> + + $nbIcones){ + ?> + + '; + +?> + +
    + + + + +
    +
    + +
    + +'; + echo '
    Pas de mobile enregistré sur l\'application mobile.
    '; + echo '
    Scanner le QRCode du plugin mobile depuis l\'application
    '; + echo '
    Version minimale du core pour etre fonctionnel : 4.4.0
    '; + if(jeedom::version() >= '4.4.0'){ + echo '
    Cliquer sur synchronisation de l\'application
    '; + echo '
    '; + echo '
    '; + echo '
    '; + echo ''; + ?> + + '; + } +}else{ + + echo '
    '; + echo '
    Pas de mobile enregistré sur l\'application mobile.
    '; + echo '
    Scanner le QRCode du plugin mobile depuis l\'application
    '; + echo '
    Version minimale du core pour etre fonctionnel : 4.4.0
    '; + if(jeedom::version() >= '4.4.0'){ + echo '
    Cliquer sur synchronisation de l\'application
    '; + echo '
    '; + echo '
    '; + echo '
    '; + echo ''; + ?> + + '; + +} + + + ?> + + + + + + diff --git a/desktop/php/panelWebApp.php b/desktop/php/panelWebApp.php new file mode 100755 index 00000000..55b70430 --- /dev/null +++ b/desktop/php/panelWebApp.php @@ -0,0 +1,71 @@ + + +
    +
    +
    Parametrer Icone 1
    + +
    +
    +
    Parametrer Icone 2
    + +
    {{ICONE 1}}
    +
    +
    +
    Parametrer Icone 3
    + +
    +
    +
    Parametrer Icone 4
    +

    IMG

    +

    +
    + + + + + + + diff --git a/desktop/php/widgetLight.php b/desktop/php/widgetLight.php new file mode 100755 index 00000000..2f0cedca --- /dev/null +++ b/desktop/php/widgetLight.php @@ -0,0 +1,238 @@ +. +*/ + +if (!isConnect('admin')) +{ + throw new Exception('401 Unauthorized'); +} + +?> + + + + + + + +
    +
    +
    +
    +
    +
    +
    +
    23°
    +
    °
    +
    Bedroom
    +
    +
    +
    +

    Drag the handle, click at the temp you want, or directly type your number in

    +
    +
    + + + + + + + + + \ No newline at end of file diff --git a/desktop/php/widgetSlider.php b/desktop/php/widgetSlider.php new file mode 100755 index 00000000..1b201ece --- /dev/null +++ b/desktop/php/widgetSlider.php @@ -0,0 +1,177 @@ + + +. +*/ + +if (!isConnect('admin')) +{ + throw new Exception('401 Unauthorized'); +} +$sliderId = $_GET["cmdId"]; +$eqId = $_GET["eqId"]; +$cmdSlider = cmd::byId($sliderId); +if(is_object($cmdSlider)){ + + $nameCmd = $cmdSlider->getName(); + $cmdInfo = cmd::byId($cmdSlider->getValue()); + $valueActual = $cmdInfo->execCmd(); + +}else{ + echo '
    ERREUR SUR LA COMMANDE
    '; + return; + +} + + +sendVarToJs('valeurActuel',$valueActual); +sendVarToJs('cmdId',$sliderId); + + + echo '
    '; + echo '
    '; + echo '
    '.$nameCmd.'
    '; + echo '
    '.$valueActual.'
    '; + echo '
    '; + echo '
    '; + echo '
    '; + + + + +?> + + + + + + diff --git a/desktop/php/widgetThermo.php b/desktop/php/widgetThermo.php new file mode 100755 index 00000000..802563fb --- /dev/null +++ b/desktop/php/widgetThermo.php @@ -0,0 +1,711 @@ +. +*/ + +if (!isConnect('admin')) +{ + throw new Exception('401 Unauthorized'); +} + +?> + +
    +
    + +
    + + + + + + + +
    + +
    + + + + + + + \ No newline at end of file diff --git a/docs/de_DE/changelog.md b/docs/de_DE/changelog.md old mode 100644 new mode 100755 index 97dbaf5a..51f7f917 --- a/docs/de_DE/changelog.md +++ b/docs/de_DE/changelog.md @@ -4,6 +4,36 @@ > >Zur Erinnerung: Wenn keine Informationen zum Update vorhanden sind, bedeutet dies, dass es sich nur um die Aktualisierung von Dokumentation, Übersetzung oder Text handelt +# 09.06.2023 + +- Benachrichtigungen korrigieren +- Hinzufügung einer Geräteanzeige nach Tisch + +# 19.05.2023 + +- PR von PHPVarious +- Beheben Sie kleinere Fehler + + +# 10.05.2023 + +- GeoLoc V2-Befehle +- Entfernen Sie den mobilen RNA-Teil von AppV2 +- Aktualisieren Sie mobile.api + + +# 10.01.2023 + +- ZUKÜNFTIGE APPV2 ALPHA INTEGRATION IN MOBILE PLUGIN +- Neue Schnittstelle Future AppV2 +- Modales benutzerdefiniertes Menü Zukünftige AppV2 +- Modale QrCode Future AppV2 + +# 13.12.2021 + +- Offline-Modus für QrCode (Erstellung von QrCode ohne Internet.). +- Kompatibilität 4.2 Jeedom-Kern + # 11.10.2021 - Hinzufügen des Zigbee-Plugins in kompatible Plugins. diff --git a/docs/de_DE/index.md b/docs/de_DE/index.md old mode 100644 new mode 100755 index 74123de8..5012cfcb --- a/docs/de_DE/index.md +++ b/docs/de_DE/index.md @@ -4,6 +4,77 @@ Plugin zur Verwendung der Jeedom Mobile-Anwendung. Die mobile Jeedom-Anwendung erfordert die Installation dieses Plugins, damit die Box mit der mobilen Anwendung kommunizieren kann. + + +# Konfiguration des Mobile-Plugins für Application V2 + +Nach der Installation des Plugins müssen Sie es nur noch aktivieren : + +![mobile1](../images/mobile1.png) + + +# Erste Verbindung mit der V2-Anwendung + +Um Ihr Telefon zu verbinden : es gibt 2 mögliche Methoden; +Auf dem ersten Bildschirm der Anwendung wird Ihnen angeboten, Ihr Marktkonto zu verbinden und so alle mit diesem Konto verknüpften Boxen zu finden oder einfach eine Box hinzuzufügen. + +![v2ConnectMarket](../images/v2firstConnect.jpeg) + + +#### __LOGIN ÜBER DAS MARKET ACCOUNT__ : + +![v2ConnectMarket](../images/v2connectMarket.PNG) + +Sie müssen lediglich Ihre Markt-ID und Ihr Passwort eingeben. + + +#### __LOGIN ÜBER BOX-ID__ : + +![v22methods](../images/v22methods.PNG) + +Mehrere Auswahlmöglichkeiten auf diesem Bildschirm : + + - Sie geben die URL Ihres Jeedoms (intern oder extern) sowie die Zugangskennungen dazu ein und bestätigen mit dem LOGIN-Button + + + - Sie klicken auf QR-Code : ein neuer Bildschirm erscheint; Sie können einen QRCode aus dem Mobile-Plugin der Box, die Sie hinzufügen möchten, über die Registerkarte QRCODE des Plugins scannen. + +![v2ModalQrApp](../images/v2QRCodeConnect.PNG) + + +> Registerkarte „Qr-Code“ des Mobile-Plugins + +>> ![v2ModalPlugin](../images/v2ModalQrCode.png) + + + +Nach diesem ersten Schritt sind Sie in der Anwendung registriert: Wenn Sie das Mobile-Plugin haben, haben Sie über das Menü Zugriff auf Benachrichtigungen, QrCodes, Menüanpassung .... + + +Im Menü haben Sie eine Registerkarte Boxen, die alle auf diesem Marktkonto vorhandenen Boxen zusammenfasst + +![v2MenuBoxs](../images/v2MenuBoxs.PNG) + +![v2floutedBoxs](../images/v2floutedBoxs.png) + +Klicken Sie einfach auf das Kästchen, in dem das Mobile-Plugin installiert ist, und identifizieren Sie sich dann, um auf das Kästchen zuzugreifen. + +Das Feld wird an den Anfang der Liste gestellt, nachdem es seine Authentifizierung validiert hat. +Sie können dies für mehrere Boxen tun. + +Sie können auch unten rechts auf die Schaltfläche + klicken, um auf verschiedene Optionen zuzugreifen + - QRCode zum Hinzufügen einer Box zur Liste über das Mobile-Plugin, + - Manuell, um eine Box manuell hinzuzufügen + - Erkennung Atlas und Luna (wenn Sie mit WLAN verbunden sind, erkennen die Boxen im Netzwerk) + - Market-Synchronisierung, um konfigurierte Market-Kontoinformationen zu aktualisieren + +![v2greenBtnAdd](../images/v2greenBtnAdd.PNG) + + + + + + # Konfiguration des mobilen Plugins Nach der Installation des Plugins müssen Sie es nur noch aktivieren : @@ -64,7 +135,7 @@ Sie finden die Anwendungen auf den mobilen Jalousien : Wenn Sie die Mobile-Anwendung zum ersten Mal starten, wird Ihnen ein Lernprogramm angeboten, das Sie bei der Konfiguration unterstützt. -Starten Sie die Anwendung nach dem Herunterladen und Installieren Ihrer mobilen Jeedom-Anwendung auf Ihrem Smartphone. +Nachdem Sie Ihre Jeedom-Mobilanwendung heruntergeladen und installiert haben, starten Sie die Anwendung auf Ihrem Smartphone. Sie gelangen dann zu einem Konfigurations-Tutorial, dem Sie folgen sollten. Einige Schritte wurden zuvor ausgeführt. diff --git a/docs/en_US/changelog.md b/docs/en_US/changelog.md old mode 100644 new mode 100755 index b6ef8afd..3b7b7045 --- a/docs/en_US/changelog.md +++ b/docs/en_US/changelog.md @@ -4,6 +4,36 @@ > >As a reminder if there is no information on the update, it means that it only concerns the updating of documentation, translation or text +# 06/09/2023 + +- Fix Notifications +- Addition of Equipment Display by Table + +# 05/19/2023 + +- PR by PhpVarious +- Fix minor bugs + + +# 05/10/2023 + +- GeoLoc V2 commands +- Remove AppV2 mobile RNA part +- Update mobile.api + + +# 01/10/2023 + +- FUTURE APPV2 ALPHA INTEGRATION IN MOBILE PLUGIN +- New Interface Future AppV2 +- Modal Custom Menu Future AppV2 +- Modal QrCode Future AppV2 + +# 12/13/2021 + +- Offline mode for QrCode (creation of QrCode without internet.). +- Compatibility 4.2 Jeedom Core + # 10/11/2021 - Addition of the Zigbee plugin in compatible plugins. diff --git a/docs/en_US/index.md b/docs/en_US/index.md old mode 100644 new mode 100755 index 84da94fa..9608e521 --- a/docs/en_US/index.md +++ b/docs/en_US/index.md @@ -4,6 +4,77 @@ Plugin for using the Jeedom Mobile application. The Jeedom mobile application requires the installation of this plugin so that the box can communicate with the Mobile application. + + +# Configuration of the Mobile plugin for Application V2 + +After installing the plugin, you just need to activate it : + +![mobile1](../images/mobile1.png) + + +# First connection to the V2 application + +To connect your phone : there are 2 possible methods; +on the first screen of the application, you are offered to connect your market account, and thus find all the boxes associated with this account, or simply add a box. + +![v2ConnectMarket](../images/v2firstConnect.jpeg) + + +#### __LOGIN VIA THE MARKET ACCOUNT__ : + +![v2ConnectMarket](../images/v2connectMarket.PNG) + +All you have to do is enter your Market ID and password. + + +#### __LOGIN VIA BOX ID__ : + +![v22methods](../images/v22methods.PNG) + +Several choices on this screen : + + - You enter the url of your Jeedom (internal or external), as well as the access identifiers to it and you confirm with the LOGIN button + + + - You click on QR Code : a new screen appears; you can scan a QRCode from the Mobile plugin of the box you want to add, via the QRCODE tab of the plugin. + +![v2ModalQrApp](../images/v2QRCodeConnect.PNG) + + +> Qr Code tab of the Mobile plugin + +>> ![v2ModalPlugin](../images/v2ModalQrCode.png) + + + +Once this first step has been completed, you are registered in the application: if you have the Mobile plugin, you will have access via the menu to Notifications, QrCodes, Menu customization .... + + +In the menu, you will have a Boxs tab, which groups together all the boxes present on this market account + +![v2MenuBoxs](../images/v2MenuBoxs.PNG) + +![v2floutedBoxs](../images/v2floutedBoxs.png) + +Simply click on the box where the Mobile plugin is installed, then identify yourself to access the box. + +The box will go to the top of the list, having validated its authentication. +You can do this for several boxes. + +You can also click on the + button at the bottom right to access different options; + - QrCode to add a box to the list via the Mobile plugin, + - Manual to manually add a box + - Detection Atlas and Luna (if you are on Wifi, will detect the boxes on the network) + - Market sync to update configured Market account information + +![v2greenBtnAdd](../images/v2greenBtnAdd.PNG) + + + + + + # Mobile plugin configuration After installing the plugin, you just need to activate it : diff --git a/docs/es_ES/changelog.md b/docs/es_ES/changelog.md old mode 100644 new mode 100755 index 4881d0e7..00139ba8 --- a/docs/es_ES/changelog.md +++ b/docs/es_ES/changelog.md @@ -4,6 +4,36 @@ > >Como recordatorio si no hay información sobre la actualización, significa que solo se refiere a la actualización de documentación, traducción o texto +# 09/06/2023 + +- Reparar notificaciones +- Adición de visualización de equipos por mesa + +# 19/05/2023 + +- Relaciones públicas por PhpVarious +- Corregir errores menores + + +# 10/05/2023 + +- Comandos GeoLoc V2 +- Eliminar la parte de ARN móvil de AppV2 +- Actualizar mobile.api + + +# 10/01/2023 + +- FUTURA INTEGRACIÓN DE APPV2 ALPHA EN PLUGIN MÓVIL +- Nueva interfaz Future AppV2 +- Menú personalizado modal Future AppV2 +- Modal QrCode Future AppV2 + +# 13/12/2021 + +- Modo sin conexión para QrCode (creación de QrCode sin Internet.). +- Compatibilidad 4.2 Jeedom Core + # 11/10/2021 - Adición del complemento Zigbee en complementos compatibles. diff --git a/docs/es_ES/index.md b/docs/es_ES/index.md old mode 100644 new mode 100755 index adaea62f..f0bee920 --- a/docs/es_ES/index.md +++ b/docs/es_ES/index.md @@ -4,6 +4,77 @@ Complemento para usar la aplicación Jeedom Mobile. La aplicación móvil Jeedom requiere la instalación de este complemento para que la caja pueda comunicarse con la aplicación móvil. + + +# Configuración del complemento móvil para la aplicación V2 + +Después de instalar el complemento, solo necesita activarlo : + +![mobile1](../images/mobile1.png) + + +# Primera conexión a la aplicación V2 + +Para conectar tu teléfono : hay 2 métodos posibles; +en la primera pantalla de la aplicación, se le ofrece conectar su cuenta de mercado y así encontrar todas las casillas asociadas a esta cuenta, o simplemente agregar una casilla. + +![v2ConnectMarket](../images/v2firstConnect.jpeg) + + +#### __ENTRAR A TRAVÉS DE LA CUENTA DE MERCADO__ : + +![v2ConnectMarket](../images/v2connectMarket.PNG) + +Todo lo que tiene que hacer es ingresar su Market ID y contraseña. + + +#### __INICIO DE SESIÓN A TRAVÉS DE BOX ID__ : + +![v22methods](../images/v22methods.PNG) + +Varias opciones en esta pantalla : + + - Ingresas la url de tu Jeedom (interna o externa), así como los identificadores de acceso a la misma y confirmas con el botón LOGIN + + + - Haces clic en el código QR : aparece una nueva pantalla; puede escanear un QRCode desde el complemento móvil del cuadro que desea agregar, a través de la pestaña QRCODE del complemento. + +![v2ModalQrApp](../images/v2QRCodeConnect.PNG) + + +> Pestaña Código QR del complemento móvil + +>> ![Complemento v2Modal](../images/v2ModalQrCode.png) + + + +Una vez realizado este primer paso, ya estás registrado en la aplicación: si tiene el complemento móvil, tendrá acceso a través del menú a Notificaciones, QrCodes, Personalización del menú .... + + +En el menú, tendrá una pestaña Cajas, que agrupa todas las cajas presentes en esta cuenta de mercado + +![v2MenuBoxs](../images/v2MenuBoxs.PNG) + +![v2floutedBoxs](../images/v2floutedBoxs.png) + +Simplemente haga clic en el cuadro donde está instalado el complemento móvil, luego identifíquese para acceder al cuadro. + +La casilla irá al principio de la lista, habiendo validado su autenticación. +Puedes hacer esto para varias cajas. + +También puede hacer clic en el botón + en la parte inferior derecha para acceder a diferentes opciones; + - QrCode para agregar un cuadro a la lista a través del complemento móvil, + - Manual para agregar una caja manualmente + - Detección Atlas y Luna (si estás en Wifi, detectará las cajas en la red) + - Sincronización de Market para actualizar la información de la cuenta de Market configurada + +![v2greenBtnAdd](../images/v2greenBtnAdd.PNG) + + + + + + # Configuración de complemento móvil Después de instalar el complemento, solo necesita activarlo : diff --git a/docs/fr_FR/changelog.md b/docs/fr_FR/changelog.md old mode 100644 new mode 100755 index 26c0b133..5d6962d5 --- a/docs/fr_FR/changelog.md +++ b/docs/fr_FR/changelog.md @@ -4,6 +4,31 @@ > >Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte +# 09/06/2023 + +- Fix Notifications +- Ajout Affichage Equipements par Tableau + +# 19/05/2023 + +- PR by PhpVarious +- Fix bugs mineurs + + +# 10/05/2023 + +- Commandes GeoLoc V2 +- Suppression partie ARN mobile AppV2 +- MAJ mobile.api + + +# 10/01/2023 + +- FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE +- Nouvelle Interface Future AppV2 +- Modale Custom Menu Future AppV2 +- Modale QrCode Future AppV2 + # 13/12/2021 - Mode offline pour le QrCode (creation du QrCode sans internet.). diff --git a/docs/fr_FR/index.md b/docs/fr_FR/index.md old mode 100644 new mode 100755 index b727a354..e91538ee --- a/docs/fr_FR/index.md +++ b/docs/fr_FR/index.md @@ -4,6 +4,77 @@ Plugin permettant d’utiliser l’application Mobile Jeedom. L’application mobile Jeedom nécessite l’installation de ce plugin afin que la box puisse dialoguer avec l’application Mobile. + + +# Configuration du plugin Mobile pour Application V2 + +Après installation du plugin, il vous suffit de l’activer : + +![mobile1](../images/mobile1.png) + + +# Premiere connexion à l'application V2 + +Pour connecter votre téléphone : il y a 2 méthodes possible; +sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box. + +![v2ConnectMarket](../images/v2firstConnect.jpeg) + + +#### __CONNEXION VIA LE COMPTE MARKET__ : + +![v2ConnectMarket](../images/v2connectMarket.PNG) + +Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe. + + +#### __CONNEXION VIA BOX ID__ : + +![v22methods](../images/v22methods.PNG) + +Plusieurs choix sur cet écran : + + - Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION + + + - Vous cliquez sur QR Code : un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin. + +![v2ModalQrApp](../images/v2QRCodeConnect.PNG) + + +> Onglet Qr Code du plugin Mobile + +>> ![v2ModalPlugin](../images/v2ModalQrCode.png) + + + +Une fois cette premiere étape passée, vous êtes enregistré dans l'application: si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu .... + + +Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market + +![v2MenuBoxs](../images/v2MenuBoxs.PNG) + +![v2floutedBoxs](../images/v2floutedBoxs.png) + +Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box. + +La box passera en haut de la liste, ayant validée son authentification. +Vous pouvez faire ainsi pour plusieurs boxs. + +Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options; + - QrCode pour ajouter une box à la liste via le plugin Mobile, + - Manuel pour ajouter manuellement une box + - Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau) + - Synchronisation Market pour actualiser les informations du compte Market configuré + +![v2greenBtnAdd](../images/v2greenBtnAdd.PNG) + + + + + + # Configuration du plugin Mobile Après installation du plugin, il vous suffit de l’activer : @@ -64,7 +135,7 @@ Vous trouverez les applications sur les stores mobiles : Au 1er lancement de l’application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci. -Après avoir téléchargée et installée votre application mobile Jeedom, lancez l’application sur votre smartphone. +Après avoir téléchargé et installé votre application mobile Jeedom, lancez l’application sur votre smartphone. Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre. Certaines étapes ont étés faites précédemment. diff --git a/docs/i18n/de_DE.json b/docs/i18n/de_DE.json old mode 100644 new mode 100755 index 7d923541..712f3706 --- a/docs/i18n/de_DE.json +++ b/docs/i18n/de_DE.json @@ -2,6 +2,25 @@ "changelog.md": { "Changelog App Mobile": "Changelog Mobile App", "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Zur Erinnerung: Wenn keine Informationen zum Update vorhanden sind, bedeutet dies, dass es sich nur um die Aktualisierung von Dokumentation, Übersetzung oder Text handelt", + "09\/06\/2023": "09.06.2023", + "Fix Notifications": "Benachrichtigungen korrigieren", + "Ajout Affichage Equipements par Tableau": "Hinzufügung einer Geräteanzeige nach Tisch", + "19\/05\/2023": "19.05.2023", + "PR by PhpVarious": "PR von PHPVarious", + "Fix bugs mineurs": "Beheben Sie kleinere Fehler", + "10\/05\/2023": "10.05.2023", + "Commandes GeoLoc V2": "GeoLoc V2-Befehle", + "Suppression partie ARN mobile AppV2": "Entfernen Sie den mobilen RNA-Teil von AppV2", + "MAJ mobile.api": "Aktualisieren Sie mobile.api", + "10\/01\/2023": "10.01.2023", + "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE": "ZUKÜNFTIGE APPV2 ALPHA INTEGRATION IN MOBILE PLUGIN", + "Nouvelle Interface Future AppV2": "Neue Schnittstelle Future AppV2", + "Modale Custom Menu Future AppV2": "Modales benutzerdefiniertes Menü Zukünftige AppV2", + "Modale QrCode Future AppV2": "Modale QrCode Future AppV2", + "13\/12\/2021": "13.12.2021", + "Mode offline pour le QrCode (creation du QrCode sans internet": "Offline-Modus für QrCode (Erstellung von QrCode ohne Internet", + "Compatibilité 4": "Kompatibilität 4", + "2 Jeedom Core": "2 Jeedom-Kern", "11\/10\/2021": "11.10.2021", "Ajout du plugin Zigbee dans les plugins compatible": "Hinzufügen des Zigbee-Plugins in kompatible Plugins", "21\/06\/2021": "21.06.2021", @@ -93,8 +112,33 @@ "Plugin Mobile": "Mobiles Plugin", "Plugin permettant d'utiliser l'application Mobile Jeedom": "Plugin zur Verwendung der Jeedom Mobile-Anwendung", "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile": "Die mobile Jeedom-Anwendung erfordert die Installation dieses Plugins, damit die Box mit der mobilen Anwendung kommunizieren kann", - "Configuration du plugin Mobile": "Konfiguration des mobilen Plugins", + "Configuration du plugin Mobile pour Application V2": "Konfiguration des Mobile-Plugins für Application V2", "Après installation du plugin, il vous suffit de l'activer": "Nach der Installation des Plugins müssen Sie es nur noch aktivieren", + "Premiere connexion à l'application V2": "Erste Verbindung mit der V2-Anwendung", + "Pour connecter votre téléphone": "Um Ihr Telefon zu verbinden", + "il y a 2 méthodes possible;": "es gibt 2 mögliche Methoden;", + "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box": "Auf dem ersten Bildschirm der Anwendung wird Ihnen angeboten, Ihr Marktkonto zu verbinden und so alle mit diesem Konto verknüpften Boxen zu finden oder einfach eine Box hinzuzufügen", + "__CONNEXION VIA LE COMPTE MARKET__": "__LOGIN ÜBER DAS MARKET ACCOUNT__", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe": "Sie müssen lediglich Ihre Markt-ID und Ihr Passwort eingeben", + "__CONNEXION VIA BOX ID__": "__LOGIN ÜBER BOX-ID__", + "Plusieurs choix sur cet écran": "Mehrere Auswahlmöglichkeiten auf diesem Bildschirm", + "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "Sie geben die URL Ihres Jeedoms (intern oder extern) sowie die Zugangskennungen dazu ein und bestätigen mit dem LOGIN-Button", + "Vous cliquez sur QR Code": "Sie klicken auf QR-Code", + "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin": "ein neuer Bildschirm erscheint; Sie können einen QRCode aus dem Mobile-Plugin der Box, die Sie hinzufügen möchten, über die Registerkarte QRCODE des Plugins scannen", + "Onglet Qr Code du plugin Mobile": "Registerkarte „Qr-Code“ des Mobile-Plugins", + "v2ModalPlugin": "v2ModalPlugin", + "Une fois cette premiere étape passée, vous êtes enregistré dans l'application": "Nach diesem ersten Schritt sind Sie in der Anwendung registriert", + "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu": "Wenn Sie das Mobile-Plugin haben, haben Sie über das Menü Zugriff auf Benachrichtigungen, QrCodes, Menüanpassung", + "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market": "Im Menü haben Sie eine Registerkarte Boxen, die alle auf diesem Marktkonto vorhandenen Boxen zusammenfasst", + "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box": "Klicken Sie einfach auf das Kästchen, in dem das Mobile-Plugin installiert ist, und identifizieren Sie sich dann, um auf das Kästchen zuzugreifen", + "La box passera en haut de la liste, ayant validée son authentification": "Das Feld wird an den Anfang der Liste gestellt, nachdem es seine Authentifizierung validiert hat", + "Vous pouvez faire ainsi pour plusieurs boxs": "Sie können dies für mehrere Boxen tun", + "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;": "Sie können auch unten rechts auf die Schaltfläche + klicken, um auf verschiedene Optionen zuzugreifen", + "QrCode pour ajouter une box à la liste via le plugin Mobile": "QRCode zum Hinzufügen einer Box zur Liste über das Mobile-Plugin", + "Manuel pour ajouter manuellement une box": "Manuell, um eine Box manuell hinzuzufügen", + "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau": "Erkennung Atlas und Luna (wenn Sie mit WLAN verbunden sind, erkennen die Boxen im Netzwerk", + "Synchronisation Market pour actualiser les informations du compte Market configuré": "Market-Synchronisierung, um konfigurierte Market-Kontoinformationen zu aktualisieren", + "Configuration du plugin Mobile": "Konfiguration des mobilen Plugins", "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom": "Um das Plugin zu konfigurieren, müssen Sie die Telefone hinzufügen, die auf Jeedom zugreifen können", "Pour Ajouter un téléphone": "So fügen Sie ein Telefon hinzu", "→": "→", @@ -117,7 +161,7 @@ "Apple App Store": "Apple App Store", "Premier lancement de l'app": "Erster Start der App", "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci": "Wenn Sie die Mobile-Anwendung zum ersten Mal starten, wird Ihnen ein Lernprogramm angeboten, das Sie bei der Konfiguration unterstützt", - "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone": "Starten Sie die Anwendung nach dem Herunterladen und Installieren Ihrer mobilen Jeedom-Anwendung auf Ihrem Smartphone", + "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone": "Nachdem Sie Ihre Jeedom-Mobilanwendung heruntergeladen und installiert haben, starten Sie die Anwendung auf Ihrem Smartphone", "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre": "Sie gelangen dann zu einem Konfigurations-Tutorial, dem Sie folgen sollten", "Certaines étapes ont étés faites précédemment": "Einige Schritte wurden zuvor ausgeführt", "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode": "Sie haben dann die Wahl zwischen einer manuellen oder automatischen Konfiguration per QRcode", diff --git a/docs/i18n/en_US.json b/docs/i18n/en_US.json old mode 100644 new mode 100755 index e5cb9ae0..c1720380 --- a/docs/i18n/en_US.json +++ b/docs/i18n/en_US.json @@ -2,6 +2,25 @@ "changelog.md": { "Changelog App Mobile": "Changelog Mobile App", "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "As a reminder if there is no information on the update, it means that it only concerns the updating of documentation, translation or text", + "09\/06\/2023": "06\/09\/2023", + "Fix Notifications": "Fix Notifications", + "Ajout Affichage Equipements par Tableau": "Addition of Equipment Display by Table", + "19\/05\/2023": "05\/19\/2023", + "PR by PhpVarious": "PR by PhpVarious", + "Fix bugs mineurs": "Fix minor bugs", + "10\/05\/2023": "05\/10\/2023", + "Commandes GeoLoc V2": "GeoLoc V2 commands", + "Suppression partie ARN mobile AppV2": "Remove AppV2 mobile RNA part", + "MAJ mobile.api": "Update mobile.api", + "10\/01\/2023": "01\/10\/2023", + "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE": "FUTURE APPV2 ALPHA INTEGRATION IN MOBILE PLUGIN", + "Nouvelle Interface Future AppV2": "New Interface Future AppV2", + "Modale Custom Menu Future AppV2": "Modal Custom Menu Future AppV2", + "Modale QrCode Future AppV2": "Modal QrCode Future AppV2", + "13\/12\/2021": "12\/13\/2021", + "Mode offline pour le QrCode (creation du QrCode sans internet": "Offline mode for QrCode (creation of QrCode without internet", + "Compatibilité 4": "Compatibility 4", + "2 Jeedom Core": "2 Jeedom Core", "11\/10\/2021": "10\/11\/2021", "Ajout du plugin Zigbee dans les plugins compatible": "Addition of the Zigbee plugin in compatible plugins", "21\/06\/2021": "06\/21\/2021", @@ -93,8 +112,33 @@ "Plugin Mobile": "Mobile Plugin", "Plugin permettant d'utiliser l'application Mobile Jeedom": "Plugin for using the Jeedom Mobile application", "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile": "The Jeedom mobile application requires the installation of this plugin so that the box can communicate with the Mobile application", - "Configuration du plugin Mobile": "Mobile plugin configuration", + "Configuration du plugin Mobile pour Application V2": "Configuration of the Mobile plugin for Application V2", "Après installation du plugin, il vous suffit de l'activer": "After installing the plugin, you just need to activate it", + "Premiere connexion à l'application V2": "First connection to the V2 application", + "Pour connecter votre téléphone": "To connect your phone", + "il y a 2 méthodes possible;": "there are 2 possible methods;", + "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box": "on the first screen of the application, you are offered to connect your market account, and thus find all the boxes associated with this account, or simply add a box", + "__CONNEXION VIA LE COMPTE MARKET__": "__LOGIN VIA THE MARKET ACCOUNT__", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe": "All you have to do is enter your Market ID and password", + "__CONNEXION VIA BOX ID__": "__LOGIN VIA BOX ID__", + "Plusieurs choix sur cet écran": "Several choices on this screen", + "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "You enter the url of your Jeedom (internal or external), as well as the access identifiers to it and you confirm with the LOGIN button", + "Vous cliquez sur QR Code": "You click on QR Code", + "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin": "a new screen appears; you can scan a QRCode from the Mobile plugin of the box you want to add, via the QRCODE tab of the plugin", + "Onglet Qr Code du plugin Mobile": "Qr Code tab of the Mobile plugin", + "v2ModalPlugin": "v2ModalPlugin", + "Une fois cette premiere étape passée, vous êtes enregistré dans l'application": "Once this first step has been completed, you are registered in the application", + "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu": "if you have the Mobile plugin, you will have access via the menu to Notifications, QrCodes, Menu customization", + "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market": "In the menu, you will have a Boxs tab, which groups together all the boxes present on this market account", + "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box": "Simply click on the box where the Mobile plugin is installed, then identify yourself to access the box", + "La box passera en haut de la liste, ayant validée son authentification": "The box will go to the top of the list, having validated its authentication", + "Vous pouvez faire ainsi pour plusieurs boxs": "You can do this for several boxes", + "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;": "You can also click on the + button at the bottom right to access different options;", + "QrCode pour ajouter une box à la liste via le plugin Mobile": "QrCode to add a box to the list via the Mobile plugin", + "Manuel pour ajouter manuellement une box": "Manual to manually add a box", + "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau": "Detection Atlas and Luna (if you are on Wifi, will detect the boxes on the network", + "Synchronisation Market pour actualiser les informations du compte Market configuré": "Market sync to update configured Market account information", + "Configuration du plugin Mobile": "Mobile plugin configuration", "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom": "To configure the plugin, you must add the phones that will be able to access Jeedom", "Pour Ajouter un téléphone": "To Add a phone", "→": "→", @@ -117,7 +161,7 @@ "Apple App Store": "Apple App Store", "Premier lancement de l'app": "First launch of the app", "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci": "When you launch the Mobile application for the first time, you will be offered a tutorial to help you configure it", - "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone": "After downloading and installing your Jeedom mobile application, launch the application on your smartphone", + "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone": "After downloading and installing your Jeedom mobile application, launch the application on your smartphone", "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre": "You then arrive in a configuration tutorial which we advise you to follow", "Certaines étapes ont étés faites précédemment": "Some steps have been done previously", "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode": "You will then have the choice between a manual or automatic configuration by QRcode", diff --git a/docs/i18n/es_ES.json b/docs/i18n/es_ES.json old mode 100644 new mode 100755 index 89fdb755..27ac4e4b --- a/docs/i18n/es_ES.json +++ b/docs/i18n/es_ES.json @@ -2,6 +2,25 @@ "changelog.md": { "Changelog App Mobile": "Changelog Mobile App", "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Como recordatorio si no hay información sobre la actualización, significa que solo se refiere a la actualización de documentación, traducción o texto", + "09\/06\/2023": "09\/06\/2023", + "Fix Notifications": "Reparar notificaciones", + "Ajout Affichage Equipements par Tableau": "Adición de visualización de equipos por mesa", + "19\/05\/2023": "19\/05\/2023", + "PR by PhpVarious": "Relaciones públicas por PhpVarious", + "Fix bugs mineurs": "Corregir errores menores", + "10\/05\/2023": "10\/05\/2023", + "Commandes GeoLoc V2": "Comandos GeoLoc V2", + "Suppression partie ARN mobile AppV2": "Eliminar la parte de ARN móvil de AppV2", + "MAJ mobile.api": "Actualizar mobile.api", + "10\/01\/2023": "10\/01\/2023", + "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE": "FUTURA INTEGRACIÓN DE APPV2 ALPHA EN PLUGIN MÓVIL", + "Nouvelle Interface Future AppV2": "Nueva interfaz Future AppV2", + "Modale Custom Menu Future AppV2": "Menú personalizado modal Future AppV2", + "Modale QrCode Future AppV2": "Modal QrCode Future AppV2", + "13\/12\/2021": "13\/12\/2021", + "Mode offline pour le QrCode (creation du QrCode sans internet": "Modo sin conexión para QrCode (creación de QrCode sin Internet", + "Compatibilité 4": "Compatibilidad 4", + "2 Jeedom Core": "2 Jeedom Core", "11\/10\/2021": "11\/10\/2021", "Ajout du plugin Zigbee dans les plugins compatible": "Adición del complemento Zigbee en complementos compatibles", "21\/06\/2021": "21\/06\/2021", @@ -93,8 +112,33 @@ "Plugin Mobile": "Complemento móvil", "Plugin permettant d'utiliser l'application Mobile Jeedom": "Complemento para usar la aplicación Jeedom Mobile", "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile": "La aplicación móvil Jeedom requiere la instalación de este complemento para que la caja pueda comunicarse con la aplicación móvil", - "Configuration du plugin Mobile": "Configuración de complemento móvil", + "Configuration du plugin Mobile pour Application V2": "Configuración del complemento móvil para la aplicación V2", "Après installation du plugin, il vous suffit de l'activer": "Después de instalar el complemento, solo necesita activarlo", + "Premiere connexion à l'application V2": "Primera conexión a la aplicación V2", + "Pour connecter votre téléphone": "Para conectar tu teléfono", + "il y a 2 méthodes possible;": "hay 2 métodos posibles;", + "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box": "en la primera pantalla de la aplicación, se le ofrece conectar su cuenta de mercado y así encontrar todas las casillas asociadas a esta cuenta, o simplemente agregar una casilla", + "__CONNEXION VIA LE COMPTE MARKET__": "__ENTRAR A TRAVÉS DE LA CUENTA DE MERCADO__", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe": "Todo lo que tiene que hacer es ingresar su Market ID y contraseña", + "__CONNEXION VIA BOX ID__": "__INICIO DE SESIÓN A TRAVÉS DE BOX ID__", + "Plusieurs choix sur cet écran": "Varias opciones en esta pantalla", + "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "Ingresas la url de tu Jeedom (interna o externa), así como los identificadores de acceso a la misma y confirmas con el botón LOGIN", + "Vous cliquez sur QR Code": "Haces clic en el código QR", + "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin": "aparece una nueva pantalla; puede escanear un QRCode desde el complemento móvil del cuadro que desea agregar, a través de la pestaña QRCODE del complemento", + "Onglet Qr Code du plugin Mobile": "Pestaña Código QR del complemento móvil", + "v2ModalPlugin": "Complemento v2Modal", + "Une fois cette premiere étape passée, vous êtes enregistré dans l'application": "Una vez realizado este primer paso, ya estás registrado en la aplicación", + "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu": "si tiene el complemento móvil, tendrá acceso a través del menú a Notificaciones, QrCodes, Personalización del menú", + "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market": "En el menú, tendrá una pestaña Cajas, que agrupa todas las cajas presentes en esta cuenta de mercado", + "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box": "Simplemente haga clic en el cuadro donde está instalado el complemento móvil, luego identifíquese para acceder al cuadro", + "La box passera en haut de la liste, ayant validée son authentification": "La casilla irá al principio de la lista, habiendo validado su autenticación", + "Vous pouvez faire ainsi pour plusieurs boxs": "Puedes hacer esto para varias cajas", + "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;": "También puede hacer clic en el botón + en la parte inferior derecha para acceder a diferentes opciones;", + "QrCode pour ajouter une box à la liste via le plugin Mobile": "QrCode para agregar un cuadro a la lista a través del complemento móvil", + "Manuel pour ajouter manuellement une box": "Manual para agregar una caja manualmente", + "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau": "Detección Atlas y Luna (si estás en Wifi, detectará las cajas en la red", + "Synchronisation Market pour actualiser les informations du compte Market configuré": "Sincronización de Market para actualizar la información de la cuenta de Market configurada", + "Configuration du plugin Mobile": "Configuración de complemento móvil", "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom": "Para configurar el complemento, debe agregar los teléfonos que podrán acceder a Jeedom", "Pour Ajouter un téléphone": "Para agregar un teléfono", "→": "→", @@ -117,7 +161,7 @@ "Apple App Store": "Apple App Store", "Premier lancement de l'app": "Primer lanzamiento de la aplicación", "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci": "Cuando inicie la aplicación móvil por primera vez, se le ofrecerá un tutorial para ayudarlo a configurarla", - "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone": "Después de descargar e instalar su aplicación móvil Jeedom, inicie la aplicación en su teléfono inteligente", + "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone": "Después de descargar e instalar su aplicación móvil Jeedom, inicie la aplicación en su teléfono inteligente", "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre": "Luego llega a un tutorial de configuración que le recomendamos que siga", "Certaines étapes ont étés faites précédemment": "Algunos pasos se han realizado previamente", "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode": "Luego podrá elegir entre una configuración manual o automática por QRcode", diff --git a/docs/i18n/fr_FR.json b/docs/i18n/fr_FR.json old mode 100644 new mode 100755 index 67fde6ee..8d7ac52b --- a/docs/i18n/fr_FR.json +++ b/docs/i18n/fr_FR.json @@ -3,6 +3,25 @@ "Changelog App Mobile": "Changelog App Mobile", "IMPORTANT": "IMPORTANT", "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte", + "09\/06\/2023": "09\/06\/2023", + "Fix Notifications": "Fix Notifications", + "Ajout Affichage Equipements par Tableau": "Ajout Affichage Equipements par Tableau", + "19\/05\/2023": "19\/05\/2023", + "PR by PhpVarious": "PR by PhpVarious", + "Fix bugs mineurs": "Fix bugs mineurs", + "10\/05\/2023": "10\/05\/2023", + "Commandes GeoLoc V2": "Commandes GeoLoc V2", + "Suppression partie ARN mobile AppV2": "Suppression partie ARN mobile AppV2", + "MAJ mobile.api": "MAJ mobile.api", + "10\/01\/2023": "10\/01\/2023", + "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE": "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE", + "Nouvelle Interface Future AppV2": "Nouvelle Interface Future AppV2", + "Modale Custom Menu Future AppV2": "Modale Custom Menu Future AppV2", + "Modale QrCode Future AppV2": "Modale QrCode Future AppV2", + "13\/12\/2021": "13\/12\/2021", + "Mode offline pour le QrCode (creation du QrCode sans internet": "Mode offline pour le QrCode (creation du QrCode sans internet", + "Compatibilité 4": "Compatibilité 4", + "2 Jeedom Core": "2 Jeedom Core", "11\/10\/2021": "11\/10\/2021", "Ajout du plugin Zigbee dans les plugins compatible": "Ajout du plugin Zigbee dans les plugins compatible", "21\/06\/2021": "21\/06\/2021", @@ -93,8 +112,33 @@ "Plugin Mobile": "Plugin Mobile", "Plugin permettant d'utiliser l'application Mobile Jeedom": "Plugin permettant d'utiliser l'application Mobile Jeedom", "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile": "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile", - "Configuration du plugin Mobile": "Configuration du plugin Mobile", + "Configuration du plugin Mobile pour Application V2": "Configuration du plugin Mobile pour Application V2", "Après installation du plugin, il vous suffit de l'activer": "Après installation du plugin, il vous suffit de l'activer", + "Premiere connexion à l'application V2": "Premiere connexion à l'application V2", + "Pour connecter votre téléphone": "Pour connecter votre téléphone", + "il y a 2 méthodes possible;": "il y a 2 méthodes possible;", + "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box": "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box", + "__CONNEXION VIA LE COMPTE MARKET__": "__CONNEXION VIA LE COMPTE MARKET__", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe": "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe", + "__CONNEXION VIA BOX ID__": "__CONNEXION VIA BOX ID__", + "Plusieurs choix sur cet écran": "Plusieurs choix sur cet écran", + "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION", + "Vous cliquez sur QR Code": "Vous cliquez sur QR Code", + "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin": "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin", + "Onglet Qr Code du plugin Mobile": "Onglet Qr Code du plugin Mobile", + "v2ModalPlugin": "v2ModalPlugin", + "Une fois cette premiere étape passée, vous êtes enregistré dans l'application": "Une fois cette premiere étape passée, vous êtes enregistré dans l'application", + "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu": "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu", + "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market": "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market", + "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box": "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box", + "La box passera en haut de la liste, ayant validée son authentification": "La box passera en haut de la liste, ayant validée son authentification", + "Vous pouvez faire ainsi pour plusieurs boxs": "Vous pouvez faire ainsi pour plusieurs boxs", + "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;": "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;", + "QrCode pour ajouter une box à la liste via le plugin Mobile": "QrCode pour ajouter une box à la liste via le plugin Mobile", + "Manuel pour ajouter manuellement une box": "Manuel pour ajouter manuellement une box", + "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau": "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau", + "Synchronisation Market pour actualiser les informations du compte Market configuré": "Synchronisation Market pour actualiser les informations du compte Market configuré", + "Configuration du plugin Mobile": "Configuration du plugin Mobile", "Configuration": "Configuration", "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom": "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom", "Plugins": "Plugins", @@ -126,7 +170,7 @@ "Apple App Store": "Apple App Store", "Premier lancement de l'app": "Premier lancement de l'app", "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci": "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci", - "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone": "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone", + "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone": "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone", "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre": "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre", "Certaines étapes ont étés faites précédemment": "Certaines étapes ont étés faites précédemment", "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode": "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode", diff --git a/docs/i18n/pt_PT.json b/docs/i18n/pt_PT.json old mode 100644 new mode 100755 index 65c6a786..97da959f --- a/docs/i18n/pt_PT.json +++ b/docs/i18n/pt_PT.json @@ -2,6 +2,25 @@ "changelog.md": { "Changelog App Mobile": "Changelog Mobile App", "Pour rappel s'il n'y a pas d'information sur la mise à jour, c'est que celle-ci concerne uniquement de la mise à jour de documentation, de traduction ou de texte": "Como lembrete, se não houver informações sobre a atualização, isso significa que se trata apenas da atualização da documentação, tradução ou texto", + "09\/06\/2023": "06\/09\/2023", + "Fix Notifications": "Consertar Notificações", + "Ajout Affichage Equipements par Tableau": "Adição de exibição de equipamentos por tabela", + "19\/05\/2023": "19\/05\/2023", + "PR by PhpVarious": "PR por PhpVarious", + "Fix bugs mineurs": "Corrigir pequenos bugs", + "10\/05\/2023": "10\/05\/2023", + "Commandes GeoLoc V2": "Comandos GeoLoc V2", + "Suppression partie ARN mobile AppV2": "Remova a parte do RNA móvel do AppV2", + "MAJ mobile.api": "Atualizar mobile.api", + "10\/01\/2023": "10\/01\/2023", + "FUTURE APPV2 ALPHA INTEGRATION DANS PLUGIN MOBILE": "FUTURA INTEGRAÇÃO APPV2 ALPHA EM PLUGIN MÓVEL", + "Nouvelle Interface Future AppV2": "Nova Interface Futuro AppV2", + "Modale Custom Menu Future AppV2": "Menu Personalizado Modal Futuro AppV2", + "Modale QrCode Future AppV2": "Modal QrCode Future AppV2", + "13\/12\/2021": "13\/12\/2021", + "Mode offline pour le QrCode (creation du QrCode sans internet": "Modo offline para QrCode (criação de QrCode sem internet", + "Compatibilité 4": "Compatibilidade 4", + "2 Jeedom Core": "2 Jeedom Core", "11\/10\/2021": "11\/10\/2021", "Ajout du plugin Zigbee dans les plugins compatible": "Adição do plug-in Zigbee em plug-ins compatíveis", "21\/06\/2021": "21\/06\/2021", @@ -93,8 +112,33 @@ "Plugin Mobile": "Mobile Plugin", "Plugin permettant d'utiliser l'application Mobile Jeedom": "Plug-in para usar o aplicativo Jeedom Mobile", "L'application mobile Jeedom nécessite l'installation de ce plugin afin que la box puisse dialoguer avec l'application Mobile": "O aplicativo móvel Jeedom requer a instalação deste plug-in para que a caixa possa se comunicar com o aplicativo móvel", - "Configuration du plugin Mobile": "Configuração de plug-in móvel", + "Configuration du plugin Mobile pour Application V2": "Configuração do plugin Mobile para Application V2", "Après installation du plugin, il vous suffit de l'activer": "Depois de instalar o plugin, você só precisa ativá-lo", + "Premiere connexion à l'application V2": "Primeira conexão com o aplicativo V2", + "Pour connecter votre téléphone": "Para conectar seu telefone", + "il y a 2 méthodes possible;": "existem 2 métodos possíveis;", + "sur le premier écran de l'application, il vous est proposé de connecter votre compte market, et ainsi de retrouver toutes les boxs associées à ce compte, ou bien simplement ajouter une box": "na primeira tela do aplicativo, você pode conectar sua conta de mercado e, assim, encontrar todas as caixas associadas a esta conta ou simplesmente adicionar uma caixa", + "__CONNEXION VIA LE COMPTE MARKET__": "__LOGIN ATRAVÉS DA CONTA DO MERCADO__", + "Il vous faut simplement rentrer votre identifiant Market ainsi que votre mot de passe": "Tudo o que você precisa fazer é inserir seu Market ID e senha", + "__CONNEXION VIA BOX ID__": "__LOGIN VIA BOX ID__", + "Plusieurs choix sur cet écran": "Várias opções nesta tela", + "Vous entrez l'url de votre Jeedom (interne ou externe), ainsi que les identifiants d'accès à celle-ci et vous confirmez avec le bouton CONNEXION": "Você insere a url do seu Jeedom (interno ou externo), bem como os identificadores de acesso a ele e confirma com o botão LOGIN", + "Vous cliquez sur QR Code": "Você clica no QR Code", + "un nouvel écran apparait; vous pourrez scanner un QRCode depuis le plugin Mobile de la box que vous souhaitez ajoutée, via l'onglet QRCODE du plugin": "uma nova tela aparece; você pode digitalizar um QRCode do plugin Mobile da caixa que deseja adicionar, através da guia QRCODE do plugin", + "Onglet Qr Code du plugin Mobile": "Aba Qr Code do plugin Mobile", + "v2ModalPlugin": "v2ModalPlugin", + "Une fois cette premiere étape passée, vous êtes enregistré dans l'application": "Uma vez que esta primeira etapa foi concluída, você está registrado no aplicativo", + "si vous possédez le plugin Mobile, vous aurez accès via le menu aux Notifications, aux QrCodes, la customisation du Menu": "se você tiver o plugin Mobile, terá acesso através do menu a Notificações, QrCodes, personalização de Menu", + "Dans le menu, vous aurez un onglet Boxs, qui regroupe toutes les box présentes sur ce compte market": "No menu, você terá a aba Caixas, que agrupa todas as caixas presentes nesta conta de mercado", + "Il vous suffit de cliquer sur la box où le plugin Mobile est installé, puis de vous identifiez pour accéder a la box": "Basta clicar na caixa onde está instalado o plugin Mobile, depois se identificar para acessar a caixa", + "La box passera en haut de la liste, ayant validée son authentification": "A caixa irá para o topo da lista, validada a sua autenticação", + "Vous pouvez faire ainsi pour plusieurs boxs": "Você pode fazer isso para várias caixas", + "Vous pouvez aussi cliquer sur le bouton + en bas à droite pour accéder à différentes options;": "Você também pode clicar no botão + no canto inferior direito para acessar diferentes opções;", + "QrCode pour ajouter une box à la liste via le plugin Mobile": "QrCode para adicionar uma caixa à lista através do plugin Mobile", + "Manuel pour ajouter manuellement une box": "Manual para adicionar manualmente uma caixa", + "Detection Atlas et Luna (si vous êtes en Wifi, détectera les boxs sur le réseau": "Detecção Atlas e Luna (se estiver no Wifi, irá detectar as caixas na rede", + "Synchronisation Market pour actualiser les informations du compte Market configuré": "Sincronização do Market para atualizar as informações configuradas da conta do Market", + "Configuration du plugin Mobile": "Configuração de plug-in móvel", "Pour configurer le plugin, vous devez ajouter les téléphones qui pourront accéder à Jeedom": "Para configurar o plug-in, você deve adicionar os telefones que poderão acessar o Jeedom", "Pour Ajouter un téléphone": "Para adicionar um telefone", "→": "→", @@ -117,7 +161,7 @@ "Apple App Store": "Apple App Store", "Premier lancement de l'app": "Primeiro lançamento do aplicativo", "Au 1er lancement de l'application Mobile, un tutorial vous sera proposé afin de vous accompagner dans la configuration de celle-ci": "Ao iniciar o aplicativo Mobile pela primeira vez, você receberá um tutorial para ajudá-lo a configurá-lo", - "Après avoir téléchargée et installée votre application mobile Jeedom, lancez l'application sur votre smartphone": "Após baixar e instalar o aplicativo móvel Jeedom, inicie o aplicativo no seu smartphone", + "Après avoir téléchargé et installé votre application mobile Jeedom, lancez l'application sur votre smartphone": "Depois de baixar e instalar seu aplicativo móvel Jeedom, inicie o aplicativo em seu smartphone", "Vous arrivez alors dans un didacticiel de configuration que nous vous conseillons de suivre": "Você chega em um tutorial de configuração que recomendamos que você siga", "Certaines étapes ont étés faites précédemment": "Algumas etapas foram realizadas anteriormente", "Vous aurez ensuite le choix entre une configuration manuelle ou automatique par QRcode": "Você poderá escolher entre uma configuração manual ou automática pelo QRcode", diff --git a/docs/images/ACTION.jpg b/docs/images/ACTION.jpg old mode 100644 new mode 100755 diff --git a/docs/images/App_Store_FR.png b/docs/images/App_Store_FR.png old mode 100644 new mode 100755 diff --git a/docs/images/ENERGY_1.jpg b/docs/images/ENERGY_1.jpg old mode 100644 new mode 100755 diff --git a/docs/images/ENERGY_2.jpg b/docs/images/ENERGY_2.jpg old mode 100644 new mode 100755 diff --git a/docs/images/ENERGY_3.jpg b/docs/images/ENERGY_3.jpg old mode 100644 new mode 100755 diff --git a/docs/images/FLAP_1.jpg b/docs/images/FLAP_1.jpg old mode 100644 new mode 100755 diff --git a/docs/images/FLAP_2.jpg b/docs/images/FLAP_2.jpg old mode 100644 new mode 100755 diff --git a/docs/images/FLOOD.jpg b/docs/images/FLOOD.jpg old mode 100644 new mode 100755 diff --git a/docs/images/Google_Play_FR.png b/docs/images/Google_Play_FR.png old mode 100644 new mode 100755 diff --git a/docs/images/INFO.jpg b/docs/images/INFO.jpg old mode 100644 new mode 100755 diff --git a/docs/images/LIGHT_1.jpg b/docs/images/LIGHT_1.jpg old mode 100644 new mode 100755 diff --git a/docs/images/LIGHT_2.jpg b/docs/images/LIGHT_2.jpg old mode 100644 new mode 100755 diff --git a/docs/images/LIGHT_3.jpg b/docs/images/LIGHT_3.jpg old mode 100644 new mode 100755 diff --git a/docs/images/LIGHT_4.jpg b/docs/images/LIGHT_4.jpg old mode 100644 new mode 100755 diff --git a/docs/images/LOCK.jpg b/docs/images/LOCK.jpg old mode 100644 new mode 100755 diff --git a/docs/images/OPENING.jpg b/docs/images/OPENING.jpg old mode 100644 new mode 100755 diff --git a/docs/images/PRESENCE.jpg b/docs/images/PRESENCE.jpg old mode 100644 new mode 100755 diff --git a/docs/images/SIREN.jpg b/docs/images/SIREN.jpg old mode 100644 new mode 100755 diff --git a/docs/images/SMOKE.jpg b/docs/images/SMOKE.jpg old mode 100644 new mode 100755 diff --git a/docs/images/TEMPERATURE.jpg b/docs/images/TEMPERATURE.jpg old mode 100644 new mode 100755 diff --git a/docs/images/android.png b/docs/images/android.png old mode 100644 new mode 100755 diff --git a/docs/images/appareil-ios.png b/docs/images/appareil-ios.png old mode 100644 new mode 100755 diff --git a/docs/images/attention.jpg b/docs/images/attention.jpg old mode 100644 new mode 100755 diff --git a/docs/images/config-piece.png b/docs/images/config-piece.png old mode 100644 new mode 100755 diff --git a/docs/images/config-plugin-1.png b/docs/images/config-plugin-1.png old mode 100644 new mode 100755 diff --git a/docs/images/config-plugin.png b/docs/images/config-plugin.png old mode 100644 new mode 100755 diff --git a/docs/images/config-pluginhb.png b/docs/images/config-pluginhb.png old mode 100644 new mode 100755 diff --git a/docs/images/cuisine-homekit.jpg b/docs/images/cuisine-homekit.jpg old mode 100644 new mode 100755 diff --git a/docs/images/demonHB.png b/docs/images/demonHB.png old mode 100644 new mode 100755 diff --git "a/docs/images/d\303\251mon-homebridge.png" "b/docs/images/d\303\251mon-homebridge.png" old mode 100644 new mode 100755 diff --git "a/docs/images/d\303\251pendances-homebridge.png" "b/docs/images/d\303\251pendances-homebridge.png" old mode 100644 new mode 100755 diff --git a/docs/images/garage-homekit.png b/docs/images/garage-homekit.png old mode 100644 new mode 100755 diff --git a/docs/images/generic_type_in_plugin.jpg b/docs/images/generic_type_in_plugin.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-1.jpg b/docs/images/home-1.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-2.jpg b/docs/images/home-2.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-3.jpg b/docs/images/home-3.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-4.jpg b/docs/images/home-4.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-5.jpg b/docs/images/home-5.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-6.jpg b/docs/images/home-6.jpg old mode 100644 new mode 100755 diff --git a/docs/images/home-7.jpg b/docs/images/home-7.jpg old mode 100644 new mode 100755 diff --git a/docs/images/homekit-logo.jpg b/docs/images/homekit-logo.jpg old mode 100644 new mode 100755 diff --git a/docs/images/ios.png b/docs/images/ios.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile1.png b/docs/images/mobile1.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile10.png b/docs/images/mobile10.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile11.png b/docs/images/mobile11.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile12.png b/docs/images/mobile12.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile2.png b/docs/images/mobile2.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile3.png b/docs/images/mobile3.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile4.png b/docs/images/mobile4.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile5.png b/docs/images/mobile5.png old mode 100644 new mode 100755 diff --git a/docs/images/mobile6.jpg b/docs/images/mobile6.jpg old mode 100644 new mode 100755 diff --git a/docs/images/mobile7.jpg b/docs/images/mobile7.jpg old mode 100644 new mode 100755 diff --git a/docs/images/mobile8.jpg b/docs/images/mobile8.jpg old mode 100644 new mode 100755 diff --git a/docs/images/mobile9.jpg b/docs/images/mobile9.jpg old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_1.PNG b/docs/images/mobile_dashboard_1.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_2.PNG b/docs/images/mobile_dashboard_2.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_3.PNG b/docs/images/mobile_dashboard_3.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_4.PNG b/docs/images/mobile_dashboard_4.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_5.PNG b/docs/images/mobile_dashboard_5.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_6.PNG b/docs/images/mobile_dashboard_6.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_7.PNG b/docs/images/mobile_dashboard_7.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_dashboard_8.PNG b/docs/images/mobile_dashboard_8.PNG old mode 100644 new mode 100755 diff --git a/docs/images/mobile_icon.png b/docs/images/mobile_icon.png old mode 100644 new mode 100755 diff --git a/docs/images/piece-homekit.jpg b/docs/images/piece-homekit.jpg old mode 100644 new mode 100755 diff --git a/docs/images/reference-etat.png b/docs/images/reference-etat.png old mode 100644 new mode 100755 diff --git a/docs/images/sans-reponse.jpg b/docs/images/sans-reponse.jpg old mode 100644 new mode 100755 diff --git a/docs/images/siri-01.jpg b/docs/images/siri-01.jpg old mode 100644 new mode 100755 diff --git a/docs/images/siri-02.jpg b/docs/images/siri-02.jpg old mode 100644 new mode 100755 diff --git a/docs/images/typegen-1.png b/docs/images/typegen-1.png old mode 100644 new mode 100755 diff --git a/docs/images/typeginfo.png b/docs/images/typeginfo.png old mode 100644 new mode 100755 diff --git a/docs/images/windows.png b/docs/images/windows.png old mode 100644 new mode 100755 diff --git a/docs/images/ypegeaction.png b/docs/images/ypegeaction.png old mode 100644 new mode 100755 diff --git a/docs/images/ypegelumi.png b/docs/images/ypegelumi.png old mode 100644 new mode 100755 diff --git a/docs/pt_PT/changelog.md b/docs/pt_PT/changelog.md old mode 100644 new mode 100755 index b80536fc..0cdbd043 --- a/docs/pt_PT/changelog.md +++ b/docs/pt_PT/changelog.md @@ -4,6 +4,36 @@ > >Como lembrete, se não houver informações sobre a atualização, isso significa que se trata apenas da atualização da documentação, tradução ou texto +# 06/09/2023 + +- Consertar Notificações +- Adição de exibição de equipamentos por tabela + +# 19/05/2023 + +- PR por PhpVarious +- Corrigir pequenos bugs + + +# 10/05/2023 + +- Comandos GeoLoc V2 +- Remova a parte do RNA móvel do AppV2 +- Atualizar mobile.api + + +# 10/01/2023 + +- FUTURA INTEGRAÇÃO APPV2 ALPHA EM PLUGIN MÓVEL +- Nova Interface Futuro AppV2 +- Menu Personalizado Modal Futuro AppV2 +- Modal QrCode Future AppV2 + +# 13/12/2021 + +- Modo offline para QrCode (criação de QrCode sem internet.). +- Compatibilidade 4.2 Jeedom Core + # 11/10/2021 - Adição do plug-in Zigbee em plug-ins compatíveis. diff --git a/docs/pt_PT/index.md b/docs/pt_PT/index.md old mode 100644 new mode 100755 index cb5e45f9..05fae6e6 --- a/docs/pt_PT/index.md +++ b/docs/pt_PT/index.md @@ -4,6 +4,77 @@ Plug-in para usar o aplicativo Jeedom Mobile. O aplicativo móvel Jeedom requer a instalação deste plug-in para que a caixa possa se comunicar com o aplicativo móvel. + + +# Configuração do plugin Mobile para Application V2 + +Depois de instalar o plugin, você só precisa ativá-lo : + +![mobile1](../images/mobile1.png) + + +# Primeira conexão com o aplicativo V2 + +Para conectar seu telefone : existem 2 métodos possíveis; +na primeira tela do aplicativo, você pode conectar sua conta de mercado e, assim, encontrar todas as caixas associadas a esta conta ou simplesmente adicionar uma caixa. + +![v2ConnectMarket](../images/v2firstConnect.jpeg) + + +#### __LOGIN ATRAVÉS DA CONTA DO MERCADO__ : + +![v2ConnectMarket](../images/v2connectMarket.PNG) + +Tudo o que você precisa fazer é inserir seu Market ID e senha. + + +#### __LOGIN VIA BOX ID__ : + +![v22methods](../images/v22methods.PNG) + +Várias opções nesta tela : + + - Você insere a url do seu Jeedom (interno ou externo), bem como os identificadores de acesso a ele e confirma com o botão LOGIN + + + - Você clica no QR Code : uma nova tela aparece; você pode digitalizar um QRCode do plugin Mobile da caixa que deseja adicionar, através da guia QRCODE do plugin. + +![v2ModalQrApp](../images/v2QRCodeConnect.PNG) + + +> Aba Qr Code do plugin Mobile + +>> ![v2ModalPlugin](../images/v2ModalQrCode.png) + + + +Uma vez que esta primeira etapa foi concluída, você está registrado no aplicativo: se você tiver o plugin Mobile, terá acesso através do menu a Notificações, QrCodes, personalização de Menu .... + + +No menu, você terá a aba Caixas, que agrupa todas as caixas presentes nesta conta de mercado + +![v2MenuBoxs](../images/v2MenuBoxs.PNG) + +![v2floutedBoxs](../images/v2floutedBoxs.png) + +Basta clicar na caixa onde está instalado o plugin Mobile, depois se identificar para acessar a caixa. + +A caixa irá para o topo da lista, validada a sua autenticação. +Você pode fazer isso para várias caixas. + +Você também pode clicar no botão + no canto inferior direito para acessar diferentes opções; + - QrCode para adicionar uma caixa à lista através do plugin Mobile, + - Manual para adicionar manualmente uma caixa + - Detecção Atlas e Luna (se estiver no Wifi, irá detectar as caixas na rede) + - Sincronização do Market para atualizar as informações configuradas da conta do Market + +![v2greenBtnAdd](../images/v2greenBtnAdd.PNG) + + + + + + # Configuração de plug-in móvel Depois de instalar o plugin, você só precisa ativá-lo : @@ -64,7 +135,7 @@ Você encontrará os aplicativos nas persianas móveis : Ao iniciar o aplicativo Mobile pela primeira vez, você receberá um tutorial para ajudá-lo a configurá-lo. -Após baixar e instalar o aplicativo móvel Jeedom, inicie o aplicativo no seu smartphone. +Depois de baixar e instalar seu aplicativo móvel Jeedom, inicie o aplicativo em seu smartphone. Você chega em um tutorial de configuração que recomendamos que você siga. Algumas etapas foram realizadas anteriormente. diff --git a/plugin_info/configuration.php b/plugin_info/configuration.php old mode 100644 new mode 100755 index de519213..0955b1e8 --- a/plugin_info/configuration.php +++ b/plugin_info/configuration.php @@ -30,9 +30,9 @@
    - +
    -
    - +
    + \ No newline at end of file diff --git a/plugin_info/info.json b/plugin_info/info.json old mode 100644 new mode 100755 index 8af8a14d..f5e7f574 --- a/plugin_info/info.json +++ b/plugin_info/info.json @@ -2,20 +2,20 @@ "id": "mobile", "name": "App Mobile", "description": { - "fr_FR": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.", - "en_US": "The official Jeedom application allows you to control your Jeedom home automation system, whether over local WiFi, or on your operator's 3G \/ 4G network. The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually) You will find all the features of your Jeedom on your mobile. You will be able to customize your application with shortcuts and more ... Current features: - Management of your scenarios. - Management of your home automation according to your parts and equipment. - Automatic update and return - Compatibility with plugins, such as thermostat, alarm, camera etc ... - Customizable interface with shortcuts. - General home automation summary and by room - Notifications (with ASK support) - Display of Designs Other features and compatibilities are coming in the next updates! Respect for private life. No data (home automation or personal) is stored or kept on our servers", - "es_ES": "La aplicación oficial Jeedom le permite controlar su sistema de automatización del hogar Jeedom, ya sea en WiFi local o en la red 3G \/ 4G de su operador. La aplicación se conecta automáticamente a su Jeedom con inicialización automática por QRcode, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente) Encontrarás todas las características de tu Jeedom en tu móvil. Podrá personalizar su aplicación con accesos directos y más ... Características actuales: - Gestión de sus escenarios. - Gestión de su domótica según sus piezas y equipos. - Actualización automática y devolución - Compatibilidad con complementos, como termostato, alarma, cámara, etc. - Interfaz personalizable con accesos directos. - Resumen general de domótica y por habitación - Notificaciones (con soporte ASK) - Exhibición de diseños ¡Otras características y compatibilidades llegarán en las próximas actualizaciones! Respeto a la vida privada. No se almacenan ni guardan datos (domótica o personales) en nuestros servidores", - "de_DE": "Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es über lokales WLAN oder über das 3G \/ 4G-Netzwerk Ihres Betreibers. Die App stellt automatisch eine Verbindung zu Ihrem Jeedom mit automatischer Initialisierung per QRcode her. Es ist keine Konfiguration erforderlich. (Möglichkeit es manuell zu machen) Sie finden alle Funktionen Ihres Jeedom auf Ihrem Handy. Sie können Ihre Anwendung mit Verknüpfungen und mehr anpassen ... Aktuelle Funktionen: - Verwaltung Ihrer Szenarien. - Management Ihrer Hausautomation nach Ihren Teilen und Geräten. - Automatische Aktualisierung und Rückgabe - Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw. - Anpassbare Oberfläche mit Verknüpfungen. - Allgemeine Zusammenfassung der Hausautomation und nach Raum - Benachrichtigungen (mit ASK-Unterstützung) - Anzeige von Designs Weitere Funktionen und Kompatibilitäten werden in den nächsten Updates verfügbar sein! Respekt für das Privatleben. Auf unseren Servern werden keine Daten (Heimautomation oder persönliche Daten) gespeichert oder gespeichert", - "pt_PT": "O aplicativo oficial da Jeedom permite controlar o sistema de automação residencial da Jeedom, seja por WiFi local ou na rede 3G \/ 4G da sua operadora. O aplicativo se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, nenhuma configuração é necessária. (possibilidade de fazê-lo manualmente) Você encontrará todos os recursos do seu Jeedom no seu celular. Você poderá personalizar seu aplicativo com atalhos e muito mais ... Recursos atuais: - Gerenciamento de seus cenários. - Gerenciamento de sua automação residencial de acordo com suas peças e equipamentos. - Atualização e retorno automáticos - Compatibilidade com plugins, como termostato, alarme, câmera etc ... - Interface personalizável com atalhos. - Resumo geral da automação residencial e por divisão - Notificações (com suporte a ASK) - Exibição de desenhos Outros recursos e compatibilidade estão disponíveis nas próximas atualizações! Respeito pela vida privada. Nenhum dado (automação residencial ou pessoal) é armazenado ou mantido em nossos servidores", - "ru_RU": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", - "id_ID": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", - "it_IT": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", - "ja_JP": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", - "tr": "L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" + "fr_FR": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs.", + "en_US": "Attzltion the v1 app is not compatible with the latest Android. The official Jeedom application allows you to control your Jeedom home automation system, whether in local Wifi, or on your operator's 3G\/4G network. The app automatically connects to your Jeedom with automatic initialization by QRcode, no configuration is necessary. (possibility to do it manually) You will find on your mobile all the features of your Jeedom. You will be able to customize your application with shortcuts and more... Current features: - Management of your scenarios. - Management of your home automation according to your rooms and equipment. - Shift and automatic status return - Compatibility with plugins, such as thermostat, alarm, camera etc... - Customizable interface with shortcuts. - General home automation summary and by room - Notifications (with ASK support) - Display of Designs More features and compatibilities are coming in future updates! Privacy. No data (home automation or personal) is stored or kept on our servers", + "es_ES": "Attzltion, la aplicación v1 no es compatible con la última versión de Android. La aplicación oficial Jeedom le permite controlar su sistema domótico Jeedom, ya sea en Wifi local o en la red 3G\/4G de su operador. La aplicación se conecta automáticamente a su Jeedom con inicialización automática por código QR, no es necesaria ninguna configuración. (posibilidad de hacerlo manualmente) Encontrará en su móvil todas las características de su Jeedom. Podrás personalizar tu aplicación con accesos directos y más... Características actuales: - Gestión de sus escenarios. - Gestión de la domótica de tu hogar según tus estancias y equipamientos. - Turno y retorno de estado automático - Compatibilidad con complementos, como termostato, alarma, cámara, etc. - Interfaz personalizable con accesos directos. - Resumen domótica general y por estancias - Notificaciones (con soporte ASK) - Exhibición de Diseños ¡Más características y compatibilidades vendrán en futuras actualizaciones! Privacidad. Ningún dato (domótico o personal) es almacenado o guardado en nuestros servidores", + "de_DE": "Achtung: Die v1-App ist nicht mit dem neuesten Android kompatibel. Mit der offiziellen Jeedom-Anwendung können Sie Ihr Jeedom-Hausautomationssystem steuern, sei es im lokalen WLAN oder im 3G\/4G-Netzwerk Ihres Betreibers. Die App verbindet sich automatisch mit Ihrem Jeedom mit automatischer Initialisierung per QR-Code, eine Konfiguration ist nicht erforderlich. (Möglichkeit, dies manuell zu tun) Auf Ihrem Handy finden Sie alle Funktionen Ihres Jeedom. Sie können Ihre Anwendung mit Verknüpfungen und mehr anpassen ... Aktuelle Funktionen: - Verwaltung Ihrer Szenarien. - Verwaltung Ihrer Hausautomation entsprechend Ihren Räumen und Ihrer Ausstattung. - Umschalten und automatische Statusrückgabe - Kompatibilität mit Plugins wie Thermostat, Alarm, Kamera usw. - Anpassbare Benutzeroberfläche mit Verknüpfungen. - Allgemeine Zusammenfassung der Hausautomation und nach Raum - Benachrichtigungen (mit ASK-Unterstützung) - Anzeige von Designs Weitere Funktionen und Kompatibilitäten folgen in zukünftigen Updates! Privatsphäre. Auf unseren Servern werden keine Daten (hausautomatische oder persönliche) gespeichert oder gespeichert", + "pt_PT": "Attzltion, o aplicativo v1 não é compatível com o Android mais recente. O aplicativo oficial Jeedom permite que você controle seu sistema de automação residencial Jeedom, seja no Wifi local, seja na rede 3G\/4G da sua operadora. O app se conecta automaticamente ao seu Jeedom com inicialização automática por QRcode, não sendo necessária nenhuma configuração. (possibilidade de fazer manualmente) Você encontrará no seu celular todas as funcionalidades do seu Jeedom. Você poderá customizar seu aplicativo com atalhos e muito mais... Características atuais: - Gestão dos seus cenários. - Gestão da sua domótica de acordo com as suas divisões e equipamentos. - Turno e retorno automático de status - Compatibilidade com plugins, como termostato, alarme, câmera etc... - Interface personalizável com atalhos. - Resumo da domótica geral e por divisão - Notificações (com suporte ASK) - Exibição de Projetos Mais recursos e compatibilidades estão chegando em futuras atualizações! Privacidade. Nenhum dado (doméstico ou pessoal) é armazenado ou mantido em nossos servidores", + "ru_RU": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", + "id_ID": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", + "it_IT": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", + "ja_JP": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs", + "tr": "Attzltion l'app v1 n'est pas compatible avec le dernier Android. L'application officielle Jeedom permet le pilotage de votre système domotique Jeedom, que ce soit en Wifi local, ou sur le réseau 3G\/4G de votre opérateur.L'app se connecte automatiquement à votre Jeedom avec une initialisation automatique par QRcode, aucune configuration n'est nécessaire. (possibilité de le faire manuellement)Vous retrouverez sur votre mobile toutes les fonctionnalités de votre Jeedom.Vous pourrez personnaliser votre application avec des raccourcis et plus encore...Fonctionnalités actuelles:- Gestion de vos scénarios.- Gestion de votre domotique en fonction de vos pièces et équipements.- Maj et retour d'état automatique- Compatibilité aves les plugins, tel que thermostat, alarme, caméra etc...- Interface personnalisable avec les raccourcis.- Résumé domotique général et par pièce- Notifications (avec prise en charge du ASK)- Affichage des Designs D'autres fonctionnalités et compatibilités sont à venir dans les prochaines mises à jour !Respect de la vie privée.Aucune donnée (domotique ou personnelle) n'est stockée ou conservée sur nos serveurs" }, "licence": "AGPL", "author": "Jeedom SAS", - "require": "3.3.39", + "require": "4.0", "installation": "Aucune", "hasDependency": false, "hasOwnDeamon": false, @@ -43,8 +43,9 @@ "docker", "diy", "mobile", - "v4" + "v4", + "luna" ], "changelog_beta": "https:\/\/doc.jeedom.com\/#language#\/plugins\/communication\/mobile\/beta\/changelog", "documentation_beta": "https:\/\/doc.jeedom.com\/#language#\/plugins\/communication\/mobile\/beta" -} \ No newline at end of file +} diff --git a/plugin_info/install.php b/plugin_info/install.php old mode 100644 new mode 100755 index e8e29a1d..02a50dde --- a/plugin_info/install.php +++ b/plugin_info/install.php @@ -15,12 +15,23 @@ * along with Jeedom. If not, see . */ require_once dirname(__FILE__) . '/../../../core/php/core.inc.php'; -function mobile_update(){ - foreach (eqLogic::byType('mobile') as $mobile){ - if($mobile->getLogicalId() == null || $mobile->getLogicalId() == ""){ + +function mobile_install() +{ + //config::save('displayMobilePanel',1, 'mobile'); + jeedom::getApiKey('mobile'); +} + + + +function mobile_update() +{ + // config::save('displayMobilePanel',1, 'mobile'); + jeedom::getApiKey('mobile'); + foreach (eqLogic::byType('mobile') as $mobile) { + if ($mobile->getLogicalId() == null || $mobile->getLogicalId() == "") { $mobile->remove(); } } mobile::makeTemplateJson(); } -?> diff --git a/plugin_info/mobile_icon.png b/plugin_info/mobile_icon.png old mode 100644 new mode 100755