Compare commits
246 Commits
Author | SHA1 | Date | |
---|---|---|---|
f6a224b49d | |||
957fe8115e | |||
13b172e37b | |||
83bda397d0 | |||
14fe38324a | |||
753592db49 | |||
7194f27adc | |||
714dadf709 | |||
b2af0dedb4 | |||
a3beeeebef | |||
caad081edb | |||
18b254da46 | |||
f45c57b456 | |||
8fd41782ad | |||
|
f18a03c6cb | ||
|
4d29dc6376 | ||
|
ae6e4afb3d | ||
|
1594b9bfa1 | ||
|
6c1321ecb0 | ||
|
a2d129ca80 | ||
|
4429991822 | ||
|
dcd264adb4 | ||
|
41abd55f43 | ||
|
0f9fa51219 | ||
|
e5f5037fc7 | ||
|
8e0d3c2513 | ||
|
ea5af3c9d8 | ||
284992a9f1 | |||
|
813ebf945a | ||
|
84be4dd642 | ||
|
dbcdb38961 | ||
|
01655b20f8 | ||
|
254ad9ef7e | ||
|
38eed2b322 | ||
|
d53a836aff | ||
|
0a3afeb959 | ||
|
36536f02f0 | ||
|
72c33f1d3c | ||
90fb3640ed | |||
|
6a64bfa9fd | ||
|
2bbce7dc93 | ||
|
33bc6efe2a | ||
|
095387b5d5 | ||
|
fc66a216d4 | ||
|
adae8f875a | ||
|
dc630840d2 | ||
|
4a579950a1 | ||
|
2e8dbf7804 | ||
|
c3f9c9a502 | ||
|
88be3ea745 | ||
|
686c7f5d75 | ||
|
437656b635 | ||
|
013931ff72 | ||
|
d86d239fdc | ||
|
c229c42c83 | ||
|
91634dbbfc | ||
|
886e589136 | ||
|
48edaf243d | ||
|
11fd49e393 | ||
|
4ab2a44cf5 | ||
|
166407ea5d | ||
|
737bfcefaa | ||
|
d67fa0d733 | ||
|
eb533db847 | ||
|
ce7e2c4b33 | ||
|
87db8183c1 | ||
|
8137268a06 | ||
|
a40f6dd7b6 | ||
|
ed9739e029 | ||
|
a5f56b84f5 | ||
|
f75c33bb46 | ||
|
0125e4c9ed | ||
|
4fd13b6189 | ||
|
b3376d6928 | ||
|
397a11f135 | ||
|
86cf2aa050 | ||
|
e809e6a630 | ||
a3431b400a | |||
1a367ae2d0 | |||
|
f950cf07d7 | ||
|
6be734c453 | ||
|
da85af62d0 | ||
668202faaf | |||
|
30c28e826f | ||
33429880a2 | |||
21e520f83a | |||
|
b4989ac740 | ||
|
44757a93a6 | ||
|
85e91b54a0 | ||
|
c8129b55fd | ||
|
3d2704235c | ||
|
8886602547 | ||
|
66f7547e0d | ||
|
bd903de0ab | ||
|
76821e16c2 | ||
|
d319150ca7 | ||
a88fc9704c | |||
|
0ed72582f5 | ||
|
028953cbb7 | ||
|
34e0b6ba13 | ||
|
5f815e6afe | ||
|
622f771ffb | ||
|
14c094e369 | ||
|
1ebefbeea7 | ||
|
9746154da4 | ||
|
3aaca43a6e | ||
2977a7511b | |||
8745daae4f | |||
0f4db7e2cc | |||
|
fcdd116b20 | ||
|
8f8cfea110 | ||
|
0c6419577b | ||
|
afc3d2c390 | ||
|
3dee123b8d | ||
|
016784a47b | ||
09f4bd924e | |||
aa371a26fb | |||
458e12ca17 | |||
eed9ab9ad6 | |||
6a7b84196a | |||
97b2b3673d | |||
d356ed757d | |||
a53b5634d0 | |||
71bf74c890 | |||
d745608232 | |||
078e3d9f60 | |||
5cb073552f | |||
4971133501 | |||
e34ccee121 | |||
555a8daae2 | |||
e101021374 | |||
29e2738660 | |||
6d8bd8aee6 | |||
|
663b947f98 | ||
c988f0b3af | |||
598923db7a | |||
b03c0ac1ad | |||
c2eae55f09 | |||
d7c6eb3937 | |||
59b3213f2f | |||
c04ca8ddea | |||
34d91f1e0c | |||
55d2f6bb25 | |||
c38a6883c6 | |||
1ba6588148 | |||
57bde5c7fe | |||
db267632d2 | |||
c0e3bc4c63 | |||
bdf4a656d0 | |||
41e81b6bc2 | |||
39160cb2c8 | |||
90abf17501 | |||
c556f23903 | |||
|
3fbcae3c33 | ||
|
6c63f1492c | ||
|
cda35f9995 | ||
|
d9d74d6dfd | ||
|
4ab58545d1 | ||
e545548862 | |||
3df5d9224d | |||
b3a9dc5ad4 | |||
bd985c9cf3 | |||
|
ab0898c571 | ||
|
df40491a2f | ||
|
0618081fda | ||
|
a71911cf69 | ||
|
9546faeb9e | ||
|
7a7de175ff | ||
58240541f7 | |||
|
086a70421f | ||
8da102888c | |||
95472cd80e | |||
|
785a255648 | ||
|
99bfc45b79 | ||
84f25e646c | |||
|
acb8d33992 | ||
|
eeac30121a | ||
9e5d0b281e | |||
|
797a098c58 | ||
c27366211e | |||
|
7785300490 | ||
|
d83b13ed38 | ||
|
5acec1cc2b | ||
b9e146bc0e | |||
|
abe6bcea29 | ||
76aee54566 | |||
a1ccf4cc81 | |||
|
f770a2edb2 | ||
9a4aff77ea | |||
|
ffdc94eac2 | ||
|
7f76620dd6 | ||
bf9cb29d65 | |||
87a094c845 | |||
|
6524137cea | ||
|
780bbc8c06 | ||
|
c94c913b2b | ||
33bc0a5160 | |||
|
9c0b2dcf1a | ||
123920777c | |||
913fa1fa1a | |||
dd9e7ab430 | |||
5a68269480 | |||
f045974e6e | |||
91e2043058 | |||
9fe9322c80 | |||
f184c7ccff | |||
f7d1776f96 | |||
|
197db5b5e4 | ||
|
fb1f295541 | ||
a64e613d7e | |||
6819890a92 | |||
|
1ac62d7351 | ||
e417595006 | |||
5402ad1e60 | |||
153b50c391 | |||
3ed98be1df | |||
65495a2ea1 | |||
dd58d7a98f | |||
6444197b8b | |||
0b5b8a8017 | |||
ef81ab02d6 | |||
52230f8f73 | |||
3a9ced6c9f | |||
6e6a2da771 | |||
ea1ff1f2a9 | |||
68c7958812 | |||
76ded375ff | |||
fbbd27efcf | |||
45d747a294 | |||
fda404aaac | |||
3381e18458 | |||
222e9a1c15 | |||
16d1fec3af | |||
5641398ed0 | |||
5f1a87b7b8 | |||
589ae7564c | |||
388c593a3c | |||
f45f6412f1 | |||
0713cedfde | |||
b540008fb3 | |||
5d86ae58c4 | |||
511eeceaf2 | |||
6c8f705011 | |||
299f8d9c8a | |||
41186df469 | |||
|
6f3f2ca020 |
167
.drone.yml
Normal file
|
@ -0,0 +1,167 @@
|
|||
kind: pipeline
|
||||
type: docker
|
||||
name: debug
|
||||
|
||||
steps:
|
||||
- name: restore-cache
|
||||
image: drillster/drone-volume-cache
|
||||
settings:
|
||||
restore: true
|
||||
mount:
|
||||
- .gradle/caches
|
||||
- .gradle/wrapper
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /cache
|
||||
|
||||
- name: fetch-tags
|
||||
image: drone/git:latest
|
||||
commands:
|
||||
- git fetch --tags
|
||||
|
||||
- name: build
|
||||
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
|
||||
environment:
|
||||
GRADLE_USER_HOME: /drone/src/.gradle
|
||||
commands:
|
||||
# Build
|
||||
- ./gradlew buildDebug
|
||||
|
||||
- name: test
|
||||
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
|
||||
privileged: true
|
||||
environment:
|
||||
GRADLE_USER_HOME: /drone/src/.gradle
|
||||
commands:
|
||||
# Create and run emulator
|
||||
- echo "no" | avdmanager --verbose create avd --force --name "generic_34" --package "system-images;android-34;google_apis;x86_64" --tag "google_apis" --abi "x86_64"
|
||||
- emulator -avd "generic_34" -no-window -no-audio -no-boot-anim -netdelay none -no-snapshot -wipe-data -partition-size 1024 &
|
||||
# Wait for emulator to be ready
|
||||
- android-wait-for-emulator.sh
|
||||
# Run tests
|
||||
- ./gradlew connectedCheck -i
|
||||
|
||||
- name: assemble
|
||||
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
|
||||
environment:
|
||||
GRADLE_USER_HOME: /drone/src/.gradle
|
||||
commands:
|
||||
# Assemble APK
|
||||
- ./gradlew assembleDebug
|
||||
|
||||
#- name: code-analysis
|
||||
# image: drone-plugins/sonarqube-scanner:latest
|
||||
# settings:
|
||||
# sonar_host:
|
||||
# from_secret: sonar_host
|
||||
# sonar_token:
|
||||
# from_secret: sonar_token
|
||||
|
||||
- name: rebuild-cache
|
||||
image: drillster/drone-volume-cache
|
||||
settings:
|
||||
rebuild: true
|
||||
mount:
|
||||
- .gradle/caches
|
||||
- .gradle/wrapper
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /cache
|
||||
|
||||
volumes:
|
||||
- name: cache
|
||||
host:
|
||||
path: /share/CACHEDEV1_DATA/homes/admin/drone/cache
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
- pull_request
|
||||
---
|
||||
kind: pipeline
|
||||
type: docker
|
||||
name: release
|
||||
|
||||
steps:
|
||||
- name: restore-cache
|
||||
image: drillster/drone-volume-cache
|
||||
settings:
|
||||
restore: true
|
||||
mount:
|
||||
- .gradle/caches
|
||||
- .gradle/wrapper
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /cache
|
||||
|
||||
- name: fetch-tags
|
||||
image: drone/git:latest
|
||||
commands:
|
||||
- git fetch --tags
|
||||
|
||||
- name: build
|
||||
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
|
||||
environment:
|
||||
GRADLE_USER_HOME: /drone/src/.gradle
|
||||
commands:
|
||||
# Build
|
||||
- ./gradlew buildRelease
|
||||
|
||||
- name: assemble
|
||||
image: git.cuernodehipnos.es/marown/android-sdk-docker:latest
|
||||
environment:
|
||||
GRADLE_USER_HOME: /drone/src/.gradle
|
||||
RELEASE_KEY_ALIAS:
|
||||
from_secret: release_key_alias
|
||||
RELEASE_KEY_PASSWORD:
|
||||
from_secret: release_key_password
|
||||
RELEASE_KEYSTORE_BASE64:
|
||||
from_secret: release_keystore_base64
|
||||
RELEASE_STORE_FILE:
|
||||
from_secret: release_store_file
|
||||
RELEASE_STORE_PASSWORD:
|
||||
from_secret: release_store_password
|
||||
commands:
|
||||
# Encrypt keystore & set $RELEASE_KEYSTORE_BASE64 environment variable in Drone CI
|
||||
# - openssl base64 -A -in keystore.jks
|
||||
# Decrypt keystore
|
||||
- echo $RELEASE_KEYSTORE_BASE64 | base64 -d > SWADroid/keystore.jks
|
||||
# Assemble APK
|
||||
- ./gradlew assembleRelease
|
||||
|
||||
- name: gitea-release
|
||||
image: plugins/gitea-release
|
||||
settings:
|
||||
api_key:
|
||||
from_secret: gitea_api_key
|
||||
base_url: https://git.cuernodehipnos.es
|
||||
files:
|
||||
- SWADroid/build/outputs/apk/release/SWADroid-release.apk
|
||||
- SWADroid/build/outputs/apk/release/SWADroid-release.apk.idsig
|
||||
checksum:
|
||||
- md5
|
||||
- sha1
|
||||
- sha256
|
||||
- sha512
|
||||
- adler32
|
||||
- crc32
|
||||
|
||||
- name: rebuild-cache
|
||||
image: drillster/drone-volume-cache
|
||||
settings:
|
||||
rebuild: true
|
||||
mount:
|
||||
- .gradle/caches
|
||||
- .gradle/wrapper
|
||||
volumes:
|
||||
- name: cache
|
||||
path: /cache
|
||||
|
||||
volumes:
|
||||
- name: cache
|
||||
host:
|
||||
path: /share/CACHEDEV1_DATA/homes/admin/drone/cache
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- tag
|
|
@ -3,7 +3,7 @@
|
|||
*Before opening a pull request*, consider:
|
||||
|
||||
- Is the change important and ready enough to ask the community to spend time reviewing?
|
||||
- Have you searched for existing, related GitHub issues and pull requests?
|
||||
- Have you searched for existing, related Gitea issues and pull requests?
|
||||
- Is the change being proposed clearly explained and motivated?
|
||||
|
||||
When you contribute code, you affirm that the contribution is your original work and that you
|
|
@ -7,4 +7,4 @@
|
|||
(Please explain how this patch was tested. E.g. unit tests, integration tests, manual tests)
|
||||
(If this patch involves UI changes, please attach a screenshot; otherwise, remove this)
|
||||
|
||||
Please review https://github.com/Amab/SWADroid/blob/develop/CONTRIBUTING.md before opening a pull request.
|
||||
Please review https://git.cuernodehipnos.es/Marown/SWADroid/src/branch/main/.gitea/CONTRIBUTING.md before opening a pull request.
|
36
.github/workflows/android-build.yml
vendored
|
@ -1,36 +0,0 @@
|
|||
name: Android CI for builds
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ develop, master ]
|
||||
pull_request:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Git repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fetch Git tags
|
||||
run: git fetch --tags
|
||||
- name: set up JDK 11
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 11
|
||||
- name: Cache local Gradle repository
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build
|
79
.github/workflows/android-release.yml
vendored
|
@ -1,79 +0,0 @@
|
|||
name: Android CI for releases
|
||||
|
||||
on:
|
||||
push:
|
||||
# Pattern matched against refs/tags
|
||||
tags:
|
||||
- '*' # Push events to every tag
|
||||
|
||||
jobs:
|
||||
release:
|
||||
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- name: Checkout Git repository
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Fetch Git tags
|
||||
run: git fetch --tags
|
||||
- name: set up JDK 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
- name: Cache local Gradle repository
|
||||
uses: actions/cache@v2
|
||||
with:
|
||||
path: |
|
||||
~/.gradle/caches
|
||||
~/.gradle/wrapper
|
||||
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-gradle-
|
||||
- name: Grant execute permission for gradlew
|
||||
run: chmod +x gradlew
|
||||
- name: Build with Gradle
|
||||
run: ./gradlew build -Pbuild=prod
|
||||
- name: Sign artifact
|
||||
id: signArtifact
|
||||
uses: r0adkll/sign-android-release@v1
|
||||
with:
|
||||
releaseDirectory: app/build/outputs/apk/release/release
|
||||
alias: ${{ secrets.ALIAS }}
|
||||
signingKeyBase64: ${{ secrets.KEYSTORE }}
|
||||
keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }}
|
||||
keyPassword: ${{ secrets.KEY_PASSWORD }}
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v2
|
||||
with:
|
||||
name: Release artifact
|
||||
path: app/build/outputs/apk/release/release/SWADroid-*.apk
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
tag_name: ${{ github.ref }}
|
||||
release_name: Release ${{ github.ref }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
- name: Save name of Artifact
|
||||
id: set-result-artifact
|
||||
run: |
|
||||
ARTIFACT_PATHNAME_APK=$(ls app/build/outputs/apk/release/release/*.apk | head -n 1)
|
||||
ARTIFACT_NAME_APK=$(basename $ARTIFACT_PATHNAME_APK)
|
||||
echo "ARTIFACT_NAME_APK is " ${ARTIFACT_NAME_APK}
|
||||
echo "ARTIFACT_PATHNAME_APK=${ARTIFACT_PATHNAME_APK}" >> $GITHUB_ENV
|
||||
echo "ARTIFACT_NAME_APK=${ARTIFACT_NAME_APK}" >> $GITHUB_ENV
|
||||
- name: Upload Artifact Assets
|
||||
id: upload-release-asset
|
||||
uses: actions/upload-release-asset@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
||||
asset_path: ${{ env.ARTIFACT_PATHNAME_APK }}
|
||||
asset_name: ${{ env.ARTIFACT_NAME_APK }}
|
||||
asset_content_type: application/zip
|
53
.travis.yml
|
@ -1,53 +0,0 @@
|
|||
os: linux
|
||||
dist: xenial
|
||||
language: android
|
||||
jdk: oraclejdk8
|
||||
env:
|
||||
global:
|
||||
- ANDROID_API=30
|
||||
- ANDROID_BUILD_TOOLS=30.0.3
|
||||
- secure: eY3bGKw4jZ+HHkkMBZHiL2dhcz+RJYHib0WC77SSVHLJcCg63pBvs420i4rjNQHycMs+PhRSlR79jdglDTm8svphhRjSts6VMkHDxObwJIyLF8vAZ0PfjhqfOXO+4+Fx6pRIjwM7cBMOQrDfSimJHRB+z/f2AJfUIsaMSlltGVya7nmrLY/fO4dtl4wPnejslj3mhnBAxr+a2Or978RwI2TMpxBovHZKFT/46wJTcMzKXGdXU64M8nmQmpcKHeIKIBiR4g+A2tahC+Us4tFxxoTDd3R+IAzj7Gvjd5JuMlYmQ3quRv2M08u9OJNiT14LpDXy19fZKdw/QNHg3S8JVis8kJDkv6z4HyZXTIBgISZpCZZti04GP29Lj+1f4ISRFc6uxankDuRgfX8ucsxoEPJVq3PfJlpTdP7wjlQtEGv0HF/3MNNyruNbLHFiCgHOANwEOX44INtw6XylPEftmw4y4ptntFG3VXyV1Zi+732Qe4b2QNTbvLPrsmkCRKzo59vKKAzBBhvYvFVITcWbySqdx9/n1H25SRL2Q96nPGQSQyBF6obzzFcjMKkknPle1PXvAfb171964cdIK6/zo9rh/ZCL3+gAKZibmGWvbeztWYl5ON8B8x8mgLO/qgPIotY+aqwmsY06pKrqi6adYZacMF+UgtbLJlhnird6ugk=
|
||||
- secure: EmcSyXk/5pEJhbRX9DSFzhQGYvGaYdxjDuQwmLuxUGitGpFQZbWexTAK/l0LLcIRsiSmucY7KJgOpL7I6odh2kVUZedarj8/5K1P69ljDDB7bfG8jyOLZvHJ1JTZRuKvUnT846zQwQWTnLXF9N4LaQ86FVqSW2bGHqptIivEjDEVh78V3g4PDsbX5aQ5LjTlSn7bezu9chpVS0fnRlqjAa6U2kUwUt+DDaSHEOs35Z89jT7JoonGFrMsyA7S26CQhOBYE3w76AllIea+MWzPJX3V364ZIzPBnQAkCz02oVI3n+LHZkzUCYHkY8DXWXNy6+/sulFa6L1v6bt8DzF1vwJ+nTNVqmqSDYBe2s1qAUZ+4o8l/THMndxC11LjbbEExG4ekBRFvRsOOf0pBps3Yr4ry27gaj4+9Ap2JCKKOQwm0izh48AJiy0Y8pzIzTO5wB5B7a4czLJmzaNWkPVXw4lKg2ldJ4sd6EBqUZqG2vRmN6VwHb8gHFNaQTH3feBRhYTpkv1wWUuhvclNn5yoZzcSxMT/b8d89e5DahoBYMW48c6jb5wL/EoY3bHp3mjtnTW8oIIjyZK8FjYX+8IqeEoue8bDDqNUN71xmRvp+0CX1iXnfgUeDWnYhXHTewOlJu6i509wGrZPxYjgwAdnpfTyGXPq7Vin9CkNHMw9fbA=
|
||||
- secure: WS7Jgz0L0aMEZmg4/HxPb9nO7oER9z23n8n508UVQ0DyKL92UPhfVol7+Cob8zuO5SJl5TPOh58gd/C0Prq8t5q3mwlDA9buhnb1uef7pwZOFzQOF0o8RuPSpxLgu8tFlDooWrG9oxZObXwh84TXGX7zgoiWr9Y318qsQSHCiv9Ue9kgJxkjk9wVanJws7zHWAevfFzyoEvqtkDTqNie4RJbMEOdeX+TyUpc77Si2UpAC23Mpl8q+qZr32cgxk3MzSdhJk2C3Vz5MS6LBZ7ynyv+em+/vz2RBlFLetrcknHY8lgE060itWcns6Pj/8tv2SQbJptVFToXbfay/EVleApojHG4w5DFDzQt8a3Az0lBnqOxv3BiAPRcr49/A08qXAKh30p6YBiSvVd8zK+MZoMoj2dDQhdXb72nv0yHZmzkiaQEOGnsBD4Gt3epn/KoJke3W0ffBZOfJNScACW0Gta2XLImZsekb4sjfOF84HrISSMiXunlLpgtcC4C3Pn9VV/6+uciIMqMFDYkJMe2gyRNA2vSyZ61n/ioTLOHYzhYHjZUXB4MOlonYTiFuF4HmVVHO2J9CpOdFFP7hrkWK3HzvcQm9k8dxUkuKDoOlRb+CSlrEZO24V+TaY2DDr1bcitA77VJp90Cz2RpLC3tvSvThgY2VNk+OEbeSrP5DNA=
|
||||
before_cache:
|
||||
- rm -f $HOME/.gradle/caches/modules-2/modules-2.lock
|
||||
- rm -rf $HOME/.gradle/caches/*/plugin-resolution/
|
||||
cache:
|
||||
directories:
|
||||
- "$HOME/.gradle/caches/"
|
||||
- "$HOME/.gradle/wrapper/"
|
||||
- "$HOME/.android/build-cache"
|
||||
before_install:
|
||||
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./.travis/run_on_non_pull_requests.sh; fi'
|
||||
- yes | sdkmanager "build-tools;${ANDROID_BUILD_TOOLS}"
|
||||
- yes | sdkmanager "platform-tools"
|
||||
- yes | sdkmanager "tools"
|
||||
- yes | sdkmanager "platforms;android-${ANDROID_API}"
|
||||
- yes | sdkmanager "extras;android;m2repository"
|
||||
- yes | sdkmanager --list
|
||||
- chmod +x gradlew
|
||||
script:
|
||||
- "./gradlew clean test build connectedCheck -Pbuild=prod"
|
||||
after_failure: cat $TRAVIS_BUILD_DIR/SWADroid/build/reports/lint-results.xml
|
||||
before_deploy:
|
||||
- 'if [ "$TRAVIS_PULL_REQUEST" = "false" ]; then bash ./.travis/run_on_before_deploy.sh; fi'
|
||||
- "cd $TRAVIS_BUILD_DIR/SWADroid/build/outputs/apk/prod"
|
||||
- "${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}/apksigner sign --ks ${TRAVIS_BUILD_DIR}/keystore.jks --ks-pass pass:$storepass --key-pass pass:$keypass --out SWADroid-release.apk SWADroid-prod-unsigned.apk"
|
||||
- "${ANDROID_HOME}/build-tools/${ANDROID_BUILD_TOOLS}/apksigner verify SWADroid-release.apk"
|
||||
deploy:
|
||||
provider: releases
|
||||
token:
|
||||
secure: "IzDdPlY0KyCF1TUdUUeYYU/vBCNmJpxZ/w3B7QeVd1BhyL947jiyJpdEckJhMB7z4MWt5IHRGOXU2pYGxoJC86ES/33Acn91eo22FuaeRmIwjxL9yczae5KmakrSUA8iDjubfjLeWRy/MXAIGJ9qAuLOreAe/xGEoAILCxlJMjANw0AuJG+dBabBc2pt67bjaJO4WNFCkfDK9AC8XGJPXlwWB4L1IDwPQLBWEVRyhf3Ac1Om0lzf7kF240xCcR/cmLqOXArU8iRr3n30HaRQOBibCMjnds7etA+Fs1HiyB8B5gqMXpUM02hI35R9GHOrgqO/+N5lNMdDveLjLhwjPXrkIoWrzI/QifXxnnpa/bCqo4knjy7B8CGAZ5Z3w9Hq/zN2YAkLUIMyl9z1b2LzN9pzAh5SrtuRCBJKUfB7I/qv+wEVj8vrFrZDnMuQntAfBtKu6bD0L/lupkKD31L1i3G9bG3vSaaGauQGqi2/ORyPtLVhgH7LQI7gMzghi2DP1BhgrJCUHK4O7dky0klr0spfEiOLKhZQhzVosjXySh2CLzo/pqkCzWCjr6ozvzyc2VTxh5EvheJvw1gxl5eGlTDzCIu4U9ebQ5X5jXm7uec2c9tn9IYxBjASC7ay9x6UuM7khdbqg4RQ0JLo/6032ZIkxuloZMGF8P1jzHHCtko="
|
||||
file: "$TRAVIS_BUILD_DIR/SWADroid/build/outputs/apk/prod/SWADroid-release.apk"
|
||||
cleanup: false
|
||||
skip_cleanup: true
|
||||
name: SWADroid $TRAVIS_TAG
|
||||
release_notes: Automated release from Travis CI.
|
||||
target_commitish: "$TRAVIS_COMMIT"
|
||||
on:
|
||||
tags: true
|
||||
repo: Amab/SWADroid
|
||||
branch: master
|
||||
notifications:
|
||||
slack:
|
||||
secure: FDRqQsWyWvSg3uXYV1jtxh209yYdE9wqMRx2Jmf9ivRMowSDqAfLaOD8hlAjD/DnBCBhVpSkOzT4+treByU1qpLXcWBpewl1GukK3jD6AoqD4Xtmp3xOAJsG1BvqeYp48Q95lZFgZ8WxV2IXO4/rAi3GcCDKVYGs3fEEwk/aVEfFDyHE7oT+mruZqrFHbwcPbObTucJWjFLu+VdCSdJ6HTN/gm/04TVg5ox0fqeyxqyAxW3QOEu/2EUOZ78ijrab7+Cn32KluoTlTDJY0+iSszYQll08+g2LsJruyzqWJzp8y0jZMs23e63ge16WrnzCHknTFIUXNG8/OVwCb2gsBA+RIchqEWLiKuOPtkSTZoMCqulDPYVOdGBJbv1CdJW4TKNmnLfsA9EMHlcv+50zcz7rq9115i4qPsous0gKw8Bc+tSL3S28YP81J8UmvTeQjAPgC7iQIeXHNvPpM62hP2v/sK9BUhmsfrFopeQGPVY5vLKXvAF+dJHuyUNK1T17iVyxa55D9Et6QeHqLsHgLKUx22RW128a0FuaFwD1EIKNuj0q+Fn8DNcXtyHoKVdGCD/K3nbDPwx+IsIvHTJfPwDL/cX8eXj+ggK32nuJVQwXLDMloz3xFKe+wO19/7kMzyKQD4Brq4xX2qQ3fiE5uRj6BIxJ2q8wuey3uuJMPVA=
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/bash
|
||||
openssl aes-256-cbc -K "$encrypted_855ad244b8b2_key" -iv "$encrypted_855ad244b8b2_iv" -in keystore.jks.enc -out keystore.jks -d
|
|
@ -1,2 +0,0 @@
|
|||
#!/bin/bash
|
||||
openssl aes-256-cbc -K "$encrypted_b7f76037f2f7_key" -iv "$encrypted_b7f76037f2f7_iv" -in "$TRAVIS_BUILD_DIR/SWADroid/src/prod/google-services.json.enc" -out "$TRAVIS_BUILD_DIR/SWADroid/src/prod/google-services.json" -d
|
10
README.md
|
@ -7,14 +7,6 @@ Android client for e-learning platform [![SWADroid](https://openswad.org/logo/sw
|
|||
|
||||
[![SWADroid](http://upload.wikimedia.org/wikipedia/commons/c/c8/Farm-Fresh_twitter_1.png)](http://twitter.com/SWADroid)[![SWADroid](http://upload.wikimedia.org/wikipedia/commons/4/4d/Farm-Fresh_facebook.png)](https://www.facebook.com/SWADroid)[![SWADroid](https://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Telegram_Messenger.png/35px-Telegram_Messenger.png?uselang=es)](https://telegram.me/swadroid)[![SWADroid](https://s.w.org/about/images/logos/wordpress-logo-32-blue.png)](http://swadroid.wordpress.com)
|
||||
|
||||
CI Status
|
||||
---------
|
||||
|
||||
[![Releases](https://img.shields.io/github/release/Amab/SWADroid.svg)](https://github.com/Amab/SWADroid/releases/latest)
|
||||
[![Build Status Master](https://github.com/Amab/SWADroid/actions/workflows/android-build.yml/badge.svg?branch=master)](https://github.com/Amab/SWADroid/actions/workflows/android-build.yml/badge.svg?branch=master)
|
||||
[![libraries.io](https://img.shields.io/librariesio/github/Amab/SWADroid.svg)](https://libraries.io/github/Amab/SWADroid)
|
||||
[![Codacy Badge](https://api.codacy.com/project/badge/Grade/41ded03ee87d4ceaaafc976a7529bcf3)](https://www.codacy.com/manual/Amab/SWADroid?utm_source=github.com&utm_medium=referral&utm_content=Amab/SWADroid&utm_campaign=Badge_Grade)
|
||||
|
||||
Copyright and License
|
||||
---------------------
|
||||
|
||||
|
@ -55,8 +47,6 @@ Contributing
|
|||
|
||||
SWADroid is an open source project. I encourage contributions.
|
||||
|
||||
The Github team has also been kind enough to write up some great [documentation](https://help.github.com/articles/about-pull-requests/) on working with pull requests.
|
||||
|
||||
### Notice
|
||||
|
||||
Requests to the SWAD web service require an API key. This API key has not been uploaded to the repository for security reasons.
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
import io.github.reactivecircus.appversioning.SemVer
|
||||
|
||||
plugins {
|
||||
id 'com.gladed.androidgitversion' version '0.4.14'
|
||||
id("io.github.reactivecircus.app-versioning") version "1.3.1"
|
||||
}
|
||||
apply plugin: 'com.android.application'
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
|
||||
//return a BuildConfigField from a properties file.
|
||||
def static getBuildConfigField(String property){
|
||||
|
@ -20,44 +21,35 @@ def static getBuildConfigField(String property){
|
|||
return value
|
||||
}
|
||||
|
||||
def build_param = "${build}"
|
||||
appVersioning {
|
||||
overrideVersionCode { gitTag, providers, variantInfo ->
|
||||
//SemVer-based version code
|
||||
def semVer = SemVer.fromGitTag(gitTag)
|
||||
semVer.major * 1000000 + semVer.minor * 1000 + semVer.patch
|
||||
|
||||
if (build_param != "prod") {
|
||||
//exclude development build
|
||||
android.variantFilter { variant ->
|
||||
if (variant.buildType.name == 'prod') {
|
||||
variant.setIgnore(true)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//exclude all except development build
|
||||
android.variantFilter { variant ->
|
||||
if (variant.buildType.name != 'prod') {
|
||||
variant.setIgnore(true)
|
||||
}
|
||||
//Timestamp-based version code
|
||||
//Instant.now().epochSecond.toInt()
|
||||
}
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion 32
|
||||
buildToolsVersion "32.0.0"
|
||||
namespace 'es.ugr.swad.swadroid'
|
||||
compileSdk 34
|
||||
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_11
|
||||
targetCompatibility JavaVersion.VERSION_11
|
||||
lint {
|
||||
abortOnError false
|
||||
}
|
||||
|
||||
lintOptions {
|
||||
abortOnError false
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "es.ugr.swad.swadroid"
|
||||
versionName androidGitVersion.name()
|
||||
versionCode androidGitVersion.code()
|
||||
|
||||
minSdkVersion 24
|
||||
targetSdkVersion 32
|
||||
targetSdkVersion 34
|
||||
|
||||
testApplicationId "es.ugr.swad.swadroid.test"
|
||||
testInstrumentationRunner "android.test.InstrumentationTestRunner"
|
||||
|
@ -65,25 +57,47 @@ android {
|
|||
buildConfigField "String", "SWAD_APP_KEY", getBuildConfigField("SWAD_APP_KEY")
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
prod {
|
||||
minifyEnabled true
|
||||
zipAlignEnabled true
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
||||
def RELEASE_STORE_FILE = System.getenv("RELEASE_STORE_FILE")
|
||||
buildFeatures {
|
||||
buildConfig true
|
||||
}
|
||||
|
||||
if (RELEASE_STORE_FILE) {
|
||||
signingConfigs {
|
||||
release {
|
||||
storeFile file(RELEASE_STORE_FILE)
|
||||
storePassword System.getenv("RELEASE_STORE_PASSWORD")
|
||||
keyAlias System.getenv("RELEASE_KEY_ALIAS")
|
||||
keyPassword System.getenv("RELEASE_KEY_PASSWORD")
|
||||
|
||||
v1SigningEnabled true
|
||||
v2SigningEnabled true
|
||||
|
||||
enableV3Signing = true
|
||||
enableV4Signing = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (RELEASE_STORE_FILE) {
|
||||
buildTypes {
|
||||
release {
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
}
|
||||
} else {
|
||||
project.logger.warn("RELEASE_STORE_FILE is not defined. Skipping signing step")
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
|
||||
implementation 'androidx.appcompat:appcompat:1.4.1'
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'com.google.code.ksoap2-android:ksoap2-android:3.6.4'
|
||||
implementation 'commons-io:commons-io:2.11.0'
|
||||
implementation 'com.nostra13.universalimageloader:universal-image-loader:1.9.5'
|
||||
implementation 'com.journeyapps:zxing-android-embedded:4.3.0@aar'
|
||||
implementation 'com.google.zxing:core:3.5.0'
|
||||
implementation 'com.google.code.gson:gson:2.9.0'
|
||||
implementation 'com.google.android.material:material:1.6.0'
|
||||
implementation platform('com.google.firebase:firebase-bom:30.0.2')
|
||||
implementation 'com.google.firebase:firebase-analytics'
|
||||
implementation 'com.google.zxing:core:3.5.2'
|
||||
implementation 'com.google.code.gson:gson:2.10.1'
|
||||
implementation 'com.google.android.material:material:1.11.0'
|
||||
}
|
||||
|
|
|
@ -1,56 +0,0 @@
|
|||
{
|
||||
"project_info": {
|
||||
"project_number": "398995989132",
|
||||
"firebase_url": "https://swadroid-1190.firebaseio.com",
|
||||
"project_id": "swadroid-1190",
|
||||
"storage_bucket": "swadroid-1190.appspot.com"
|
||||
},
|
||||
"client": [
|
||||
{
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:398995989132:android:cf9fabf2a9cd64da",
|
||||
"android_client_info": {
|
||||
"package_name": "es.ugr.swad.swadroid"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
{
|
||||
"client_id": "398995989132-23hrn3d7s4unrfftra30hekdtvrk1pdv.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "es.ugr.swad.swadroid",
|
||||
"certificate_hash": "11890c064b1d34fe0e6486e214439c9aa1083a70"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "398995989132-olrnp4ilkdh8ggh54ruj65rocacs2pgc.apps.googleusercontent.com",
|
||||
"client_type": 1,
|
||||
"android_info": {
|
||||
"package_name": "es.ugr.swad.swadroid",
|
||||
"certificate_hash": "17c4f28f7db5404990ebfcf626b582cc8e8b54de"
|
||||
}
|
||||
},
|
||||
{
|
||||
"client_id": "398995989132-os2h8neftvc80bq785s4bqj4osmanc7l.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
],
|
||||
"api_key": [
|
||||
{
|
||||
"current_key": "AIzaSyCyEiJ-L6CrIsiF99OUXi4UvQV2TzCVNMA"
|
||||
}
|
||||
],
|
||||
"services": {
|
||||
"appinvite_service": {
|
||||
"other_platform_oauth_client": [
|
||||
{
|
||||
"client_id": "398995989132-os2h8neftvc80bq785s4bqj4osmanc7l.apps.googleusercontent.com",
|
||||
"client_type": 3
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"configuration_version": "1"
|
||||
}
|
|
@ -1,6 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="es.ugr.swad.swadroid"
|
||||
android:installLocation="auto" >
|
||||
|
||||
<!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
||||
|
@ -15,9 +14,13 @@
|
|||
<uses-permission android:name="android.permission.USE_CREDENTIALS" android:maxSdkVersion="22" />
|
||||
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28" />
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
<uses-permission android:name="android.permission.VIBRATE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
|
||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||
|
||||
<uses-feature
|
||||
android:name="android.hardware.touchscreen"
|
||||
|
@ -45,12 +48,9 @@
|
|||
android:label="@string/app_name"
|
||||
android:theme="@style/Theme.AppCompat.Light"
|
||||
android:hardwareAccelerated="true">
|
||||
<meta-data android:name="com.google.android.gms.version"
|
||||
android:value="@integer/google_play_services_version" />
|
||||
<activity
|
||||
android:name="es.ugr.swad.swadroid.SWADMain"
|
||||
android:icon="@drawable/ic_launcher_swadroid"
|
||||
android:label="@string/app_name"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
@ -357,7 +357,8 @@
|
|||
</service>
|
||||
<service
|
||||
android:name="es.ugr.swad.swadroid.modules.notifications.NotificationsSyncAdapterService"
|
||||
android:exported="false" >
|
||||
android:exported="false"
|
||||
android:foregroundServiceType="dataSync" >
|
||||
<intent-filter>
|
||||
<action android:name="android.content.SyncAdapter" />
|
||||
</intent-filter>
|
||||
|
@ -367,6 +368,25 @@
|
|||
android:resource="@xml/sync_notifications" />
|
||||
</service>
|
||||
|
||||
<receiver
|
||||
android:name="es.ugr.swad.swadroid.modules.notifications.RestarterNotificationsReceiver"
|
||||
android:enabled="true"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.REBOOT" />
|
||||
<action android:name="android.intent.action.SCREEN_ON" />
|
||||
<action android:name="android.intent.action.SCREEN_OFF" />
|
||||
<action android:name="android.intent.action.USER_PRESENT" />
|
||||
<action android:name="android.intent.action.PACKAGE_DATA_CLEARED" />
|
||||
<action android:name="android.intent.action.PACKAGE_REPLACED" />
|
||||
<action android:name="android.intent.action.PACKAGE_RESTARTED" />
|
||||
<action android:name="android.intent.action.MY_PACKAGE_SUSPENDED" />
|
||||
<action android:name="android.intent.action.PACKAGE_FULLY_REMOVED" />
|
||||
<action android:name="android.intent.action.PACKAGE_REMOVED" />
|
||||
<action android:name="android.intent.action.MY_PACKAGE_REPLACED" />
|
||||
</intent-filter>
|
||||
</receiver>
|
||||
|
||||
<provider
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
android:authorities="es.ugr.swad.swadroid.fileprovider"
|
||||
|
|
|
@ -267,6 +267,10 @@ public class Constants {
|
|||
* Request code for PERMISSION_MULTIPLE permissions
|
||||
*/
|
||||
public static final int PERMISSION_MULTIPLE = 102;
|
||||
/**
|
||||
* Request code for POST_NOTIFICATIONS permission
|
||||
*/
|
||||
public static final int PERMISSIONS_REQUEST_POST_NOTIFICATIONS = 103;
|
||||
/**
|
||||
* Prefix tag name for Logcat
|
||||
*/
|
||||
|
|
|
@ -19,11 +19,14 @@
|
|||
|
||||
package es.ugr.swad.swadroid;
|
||||
|
||||
import android.Manifest;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.database.Cursor;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
|
@ -43,6 +46,10 @@ import android.widget.Spinner;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
|
@ -50,6 +57,7 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
|
||||
import es.ugr.swad.swadroid.database.DataBaseHelper;
|
||||
import es.ugr.swad.swadroid.gui.AlertNotificationFactory;
|
||||
import es.ugr.swad.swadroid.gui.DialogFactory;
|
||||
import es.ugr.swad.swadroid.gui.MenuExpandableListActivity;
|
||||
import es.ugr.swad.swadroid.gui.ProgressScreen;
|
||||
|
@ -59,8 +67,8 @@ import es.ugr.swad.swadroid.model.Model;
|
|||
import es.ugr.swad.swadroid.modules.courses.Courses;
|
||||
import es.ugr.swad.swadroid.modules.downloads.DownloadsManager;
|
||||
import es.ugr.swad.swadroid.modules.groups.MyGroupsManager;
|
||||
import es.ugr.swad.swadroid.modules.information.Information;
|
||||
import es.ugr.swad.swadroid.modules.indoorlocation.IndoorLocation;
|
||||
import es.ugr.swad.swadroid.modules.information.Information;
|
||||
import es.ugr.swad.swadroid.modules.login.Login;
|
||||
import es.ugr.swad.swadroid.modules.login.LoginActivity;
|
||||
import es.ugr.swad.swadroid.modules.messages.Messages;
|
||||
|
@ -166,6 +174,11 @@ public class SWADMain extends MenuExpandableListActivity {
|
|||
initializeMainViews();
|
||||
|
||||
try {
|
||||
// Create Notifications channel
|
||||
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
||||
AlertNotificationFactory.createNotificationChanel(this);
|
||||
}
|
||||
|
||||
//Check if this is the first run after an install or upgrade
|
||||
lastVersion = Preferences.getLastVersion();
|
||||
currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
|
||||
|
@ -191,6 +204,20 @@ public class SWADMain extends MenuExpandableListActivity {
|
|||
}
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.TIRAMISU)
|
||||
@Override
|
||||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
||||
// Check Android 13 permission
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ActivityCompat.requestPermissions(this,
|
||||
new String[]{Manifest.permission.POST_NOTIFICATIONS},
|
||||
Constants.PERMISSIONS_REQUEST_POST_NOTIFICATIONS);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
* @see android.app.Activity#onResume()
|
||||
|
@ -282,7 +309,7 @@ public class SWADMain extends MenuExpandableListActivity {
|
|||
SyncUtils.removePeriodicSync(Constants.AUTHORITY, Bundle.EMPTY, this);
|
||||
if(!Preferences.getSyncTime().equals("0") && Preferences.isSyncEnabled()) {
|
||||
SyncUtils.addPeriodicSync(Constants.AUTHORITY, Bundle.EMPTY,
|
||||
Long.valueOf(Preferences.getSyncTime()), this);
|
||||
Long.parseLong(Preferences.getSyncTime()), this);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -653,96 +680,91 @@ public class SWADMain extends MenuExpandableListActivity {
|
|||
mProgressScreen = new ProgressScreen(mProgressScreenView, mCoursesListView,
|
||||
getString(R.string.coursesProgressDescription), this);
|
||||
|
||||
OnChildClickListener mExpandableClickListener = new OnChildClickListener() {
|
||||
OnChildClickListener mExpandableClickListener = (parent, v, groupPosition, childPosition, id) -> {
|
||||
// Get the item that was clicked
|
||||
Object o = parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
|
||||
@SuppressWarnings("unchecked")
|
||||
String keyword = (String) ((Map<String, Object>) o).get(NAME);
|
||||
Intent activity;
|
||||
Context ctx = getApplicationContext();
|
||||
|
||||
@Override
|
||||
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
|
||||
int childPosition, long id) {
|
||||
// Get the item that was clicked
|
||||
Object o = parent.getExpandableListAdapter().getChild(groupPosition, childPosition);
|
||||
@SuppressWarnings("unchecked")
|
||||
String keyword = (String) ((Map<String, Object>) o).get(NAME);
|
||||
Intent activity;
|
||||
Context ctx = getApplicationContext();
|
||||
|
||||
if (keyword.equals(getString(R.string.notificationsModuleLabel))) {
|
||||
activity = new Intent(ctx, Notifications.class);
|
||||
startActivityForResult(activity, Constants.NOTIFICATIONS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.testsModuleLabel))) {
|
||||
activity = new Intent(ctx, Tests.class);
|
||||
startActivityForResult(activity, Constants.TESTS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.messagesModuleLabel))) {
|
||||
activity = new Intent(ctx, Messages.class);
|
||||
activity.putExtra("eventCode", Long.valueOf(0));
|
||||
startActivityForResult(activity, Constants.MESSAGES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.noticesModuleLabel))) {
|
||||
activity = new Intent(ctx, Notices.class);
|
||||
startActivityForResult(activity, Constants.NOTICES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.rollcallModuleLabel))) {
|
||||
if (Utils.connectionAvailable(ctx)) {
|
||||
activity = new Intent(ctx, Rollcall.class);
|
||||
startActivityForResult(activity, Constants.ROLLCALL_REQUEST_CODE);
|
||||
} else {
|
||||
Toast.makeText(ctx, R.string.noConnectionMsg, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
} else if (keyword.equals(getString(R.string.generateQRModuleLabel))) {
|
||||
activity = new Intent(ctx, GenerateQR.class);
|
||||
startActivityForResult(activity, Constants.GENERATE_QR_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.manageLocation))) {
|
||||
activity = new Intent(ctx, IndoorLocation.class);
|
||||
startActivityForResult(activity, Constants.MANAGE_LOCATION);
|
||||
} else if (keyword.equals(getString(R.string.documentsDownloadModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.DOCUMENTS_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.sharedsDownloadModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.SHARE_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.marksModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.MARKS_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.myGroupsModuleLabel))) {
|
||||
activity = new Intent(ctx, MyGroupsManager.class);
|
||||
activity.putExtra("courseCode", Courses.getSelectedCourseCode());
|
||||
startActivityForResult(activity, Constants.MYGROUPSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.introductionModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.INTRODUCTION_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.INTRODUCTION_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.faqsModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.FAQS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.FAQS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.bibliographyModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.BIBLIOGRAPHY_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.BIBLIOGRAPHY_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.syllabusPracticalsModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.syllabusLecturesModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.SYLLABUSLECTURES_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.SYLLABUSLECTURES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.linksModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.LINKS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.LINKS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.teachingguideModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.TEACHINGGUIDE_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.TEACHINGGUIDE_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.assessmentModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.ASSESSMENT_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.ASSESSMENT_REQUEST_CODE);
|
||||
if (keyword.equals(getString(R.string.notificationsModuleLabel))) {
|
||||
activity = new Intent(ctx, Notifications.class);
|
||||
startActivityForResult(activity, Constants.NOTIFICATIONS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.testsModuleLabel))) {
|
||||
activity = new Intent(ctx, Tests.class);
|
||||
startActivityForResult(activity, Constants.TESTS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.messagesModuleLabel))) {
|
||||
activity = new Intent(ctx, Messages.class);
|
||||
activity.putExtra("eventCode", Long.valueOf(0));
|
||||
startActivityForResult(activity, Constants.MESSAGES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.noticesModuleLabel))) {
|
||||
activity = new Intent(ctx, Notices.class);
|
||||
startActivityForResult(activity, Constants.NOTICES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.rollcallModuleLabel))) {
|
||||
if (Utils.connectionAvailable(ctx)) {
|
||||
activity = new Intent(ctx, Rollcall.class);
|
||||
startActivityForResult(activity, Constants.ROLLCALL_REQUEST_CODE);
|
||||
} else {
|
||||
Toast.makeText(ctx, R.string.noConnectionMsg, Toast.LENGTH_LONG).show();
|
||||
}
|
||||
|
||||
return true;
|
||||
} else if (keyword.equals(getString(R.string.generateQRModuleLabel))) {
|
||||
activity = new Intent(ctx, GenerateQR.class);
|
||||
startActivityForResult(activity, Constants.GENERATE_QR_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.manageLocation))) {
|
||||
activity = new Intent(ctx, IndoorLocation.class);
|
||||
startActivityForResult(activity, Constants.MANAGE_LOCATION);
|
||||
} else if (keyword.equals(getString(R.string.documentsDownloadModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.DOCUMENTS_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.sharedsDownloadModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.SHARE_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.marksModuleLabel))) {
|
||||
activity = new Intent(ctx, DownloadsManager.class);
|
||||
activity.putExtra("downloadsAreaCode", Constants.MARKS_AREA_CODE);
|
||||
startActivityForResult(activity, Constants.DOWNLOADSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.myGroupsModuleLabel))) {
|
||||
activity = new Intent(ctx, MyGroupsManager.class);
|
||||
activity.putExtra("courseCode", Courses.getSelectedCourseCode());
|
||||
startActivityForResult(activity, Constants.MYGROUPSMANAGER_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.introductionModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.INTRODUCTION_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.INTRODUCTION_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.faqsModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.FAQS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.FAQS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.bibliographyModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.BIBLIOGRAPHY_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.BIBLIOGRAPHY_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.syllabusPracticalsModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.SYLLABUSPRACTICALS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.syllabusLecturesModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.SYLLABUSLECTURES_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.SYLLABUSLECTURES_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.linksModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.LINKS_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.LINKS_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.teachingguideModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.TEACHINGGUIDE_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.TEACHINGGUIDE_REQUEST_CODE);
|
||||
} else if (keyword.equals(getString(R.string.assessmentModuleLabel))) {
|
||||
activity = new Intent(ctx, Information.class);
|
||||
activity.putExtra("requestCode", Constants.ASSESSMENT_REQUEST_CODE);
|
||||
startActivityForResult(activity, Constants.ASSESSMENT_REQUEST_CODE);
|
||||
}
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
mExpandableListView.setOnChildClickListener(mExpandableClickListener);
|
||||
|
|
|
@ -19,118 +19,150 @@
|
|||
|
||||
package es.ugr.swad.swadroid.gui;
|
||||
|
||||
import static es.ugr.swad.swadroid.utils.NotificationUtils.SWADROID_CHANNEL_ID;
|
||||
|
||||
import android.app.Notification;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.BitmapFactory;
|
||||
import android.graphics.Color;
|
||||
import android.os.Build;
|
||||
|
||||
import androidx.annotation.RequiresApi;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
|
||||
import es.ugr.swad.swadroid.modules.notifications.Notifications;
|
||||
import es.ugr.swad.swadroid.utils.NotificationUtils;
|
||||
|
||||
import static es.ugr.swad.swadroid.utils.NotificationUtils.SWADROID_CHANNEL_ID;
|
||||
|
||||
/**
|
||||
* Class for create notification alerts.
|
||||
*
|
||||
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
|
||||
*/
|
||||
public class AlertNotificationFactory {
|
||||
public static NotificationCompat.Builder createAlertNotificationBuilder(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
|
||||
|
||||
int flags = 0;
|
||||
public static final String CHANNEL_NAME = "Background Service";
|
||||
public static NotificationCompat.Builder createAlertNotificationBuilder(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
|
||||
.setAutoCancel(autocancel)
|
||||
.setSmallIcon(smallIcon)
|
||||
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
|
||||
.setContentTitle(contentTitle)
|
||||
.setContentText(contentText)
|
||||
.setTicker(ticker)
|
||||
.setOngoing(ongoing)
|
||||
.setOnlyAlertOnce(onlyAlertOnce)
|
||||
.setWhen(System.currentTimeMillis());
|
||||
//.setLights(Color.GREEN, 500, 500);
|
||||
int flags = 0;
|
||||
|
||||
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
|
||||
.setAutoCancel(autocancel)
|
||||
.setSmallIcon(smallIcon)
|
||||
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
|
||||
.setContentTitle(contentTitle)
|
||||
.setContentText(contentText)
|
||||
.setTicker(ticker)
|
||||
.setOngoing(ongoing)
|
||||
.setOnlyAlertOnce(onlyAlertOnce)
|
||||
.setWhen(System.currentTimeMillis());
|
||||
//.setLights(Color.GREEN, 500, 500);
|
||||
|
||||
//Launch activity on alert click
|
||||
if(pendingIntent != null) {
|
||||
if (pendingIntent != null) {
|
||||
notifBuilder.setContentIntent(pendingIntent);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//Add sound, vibration and lights
|
||||
flags |= Notification.DEFAULT_SOUND;
|
||||
flags |= Notification.DEFAULT_VIBRATE;
|
||||
flags |= Notification.DEFAULT_LIGHTS;
|
||||
|
||||
notifBuilder.setDefaults(flags);
|
||||
|
||||
return notifBuilder;
|
||||
}
|
||||
|
||||
public static NotificationCompat.Builder createProgressNotificationBuilder(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce);
|
||||
|
||||
notifBuilder.setProgress(maxProgress, progress, indeterminate);
|
||||
|
||||
return notifBuilder;
|
||||
}
|
||||
|
||||
public static Notification createAlertNotification(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce);
|
||||
|
||||
notifBuilder.setDefaults(flags);
|
||||
|
||||
return notifBuilder;
|
||||
}
|
||||
|
||||
public static NotificationCompat.Builder createProgressNotificationBuilder(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce);
|
||||
|
||||
notifBuilder.setProgress(maxProgress, progress, indeterminate);
|
||||
|
||||
return notifBuilder;
|
||||
}
|
||||
|
||||
public static Notification createAlertNotification(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createAlertNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce);
|
||||
|
||||
//Create alert
|
||||
return notifBuilder.build();
|
||||
}
|
||||
|
||||
public static Notification createProgressNotification(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createProgressNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce,
|
||||
maxProgress,
|
||||
progress,
|
||||
indeterminate);
|
||||
|
||||
public static Notification createProgressNotification(Context context, String contentTitle, String contentText,
|
||||
String ticker, PendingIntent pendingIntent, int smallIcon, int largeIcon,
|
||||
boolean autocancel, boolean ongoing, boolean onlyAlertOnce, int maxProgress, int progress, boolean indeterminate) {
|
||||
|
||||
NotificationCompat.Builder notifBuilder = createProgressNotificationBuilder(context,
|
||||
contentTitle,
|
||||
contentText,
|
||||
ticker,
|
||||
pendingIntent,
|
||||
smallIcon,
|
||||
largeIcon,
|
||||
autocancel,
|
||||
ongoing,
|
||||
onlyAlertOnce,
|
||||
maxProgress,
|
||||
progress,
|
||||
indeterminate);
|
||||
|
||||
//Create alert
|
||||
return notifBuilder.build();
|
||||
}
|
||||
|
||||
public static void showAlertNotification(Context context, Notification notif, int notifId) {
|
||||
|
||||
public static Notification createBackgroundNotification(Context context, String contentTitle, int smallIcon, int largeIcon, PendingIntent pendingIntent) {
|
||||
NotificationCompat.Builder notifBuilder = new NotificationCompat.Builder(context, SWADROID_CHANNEL_ID)
|
||||
.setOngoing(true)
|
||||
.setSmallIcon(smallIcon)
|
||||
.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), largeIcon))
|
||||
.setContentTitle(contentTitle)
|
||||
.setPriority(NotificationManager.IMPORTANCE_HIGH)
|
||||
.setCategory(Notification.CATEGORY_SERVICE)
|
||||
.setContentIntent(pendingIntent);
|
||||
|
||||
//Create alert
|
||||
return notifBuilder.build();
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.O)
|
||||
public static void createNotificationChanel(Context context) {
|
||||
NotificationChannel channel = new NotificationChannel(SWADROID_CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
|
||||
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||
|
||||
assert manager != null;
|
||||
channel.setLightColor(Color.BLUE);
|
||||
manager.createNotificationChannel(channel);
|
||||
}
|
||||
|
||||
public static void showAlertNotification(Context context, Notification notif, int notifId) {
|
||||
NotificationManager notifManager;
|
||||
|
||||
//Obtain a reference to the notification service
|
||||
|
@ -144,5 +176,5 @@ public class AlertNotificationFactory {
|
|||
|
||||
//Send alert
|
||||
notifManager.notify(notifId, notif);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,8 +29,6 @@ import android.os.Bundle;
|
|||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
|
||||
import org.ksoap2.SoapFault;
|
||||
import org.ksoap2.transport.HttpResponseException;
|
||||
import org.kxml2.kdom.Element;
|
||||
|
@ -65,10 +63,6 @@ public abstract class Module extends MenuActivity {
|
|||
* Class Module's tag name for Logcat
|
||||
*/
|
||||
private static final String TAG = Constants.APP_TAG + " Module";
|
||||
/**
|
||||
* Obtain Firebase Analytics instance
|
||||
*/
|
||||
protected FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
|
||||
/**
|
||||
* Async Task for background jobs
|
||||
*/
|
||||
|
@ -207,6 +201,8 @@ public abstract class Module extends MenuActivity {
|
|||
*/
|
||||
@Override
|
||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
|
||||
if (resultCode == Activity.RESULT_OK) {
|
||||
switch (requestCode) {
|
||||
case Constants.LOGIN_REQUEST_CODE:
|
||||
|
|
|
@ -21,8 +21,6 @@ package es.ugr.swad.swadroid.modules.account;
|
|||
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
|
||||
import org.ksoap2.SoapFault;
|
||||
import org.ksoap2.serialization.SoapObject;
|
||||
|
||||
|
@ -124,10 +122,6 @@ public class CreateAccount extends Module {
|
|||
|
||||
//Request finalized without errors
|
||||
setResult(RESULT_OK);
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FirebaseAnalytics.Param.METHOD, "requestService");
|
||||
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SIGN_UP, bundle);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -214,10 +214,10 @@ public class DirectoryNavigator {
|
|||
if (firstChild != null) {
|
||||
switch (tag) {
|
||||
case "code":
|
||||
fileCode = Long.valueOf(firstChild.getNodeValue());
|
||||
fileCode = Long.parseLong(firstChild.getNodeValue());
|
||||
break;
|
||||
case "time":
|
||||
time = Long.valueOf(firstChild.getNodeValue());
|
||||
time = Long.parseLong(firstChild.getNodeValue());
|
||||
break;
|
||||
case "license":
|
||||
license = firstChild.getNodeValue();
|
||||
|
@ -397,4 +397,4 @@ public class DirectoryNavigator {
|
|||
*/
|
||||
class InvalidPathException extends IllegalArgumentException {
|
||||
private static final long serialVersionUID = 1L;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,11 +18,9 @@
|
|||
*/
|
||||
package es.ugr.swad.swadroid.modules.downloads;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.DownloadManager;
|
||||
import android.content.Context;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -50,7 +48,6 @@ public class DownloadFactory {
|
|||
* @param title title of the download notification
|
||||
* @param description description of the download notification
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public static boolean downloadFile(Context context, String url, String fileName, String title,
|
||||
String description) {
|
||||
|
||||
|
@ -77,7 +74,7 @@ public class DownloadFactory {
|
|||
|
||||
/**
|
||||
* Method to show file size in bytes in a human readable way
|
||||
* http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java
|
||||
* @see <a href="http://stackoverflow.com/questions/3758606/how-to-convert-byte-size-into-human-readable-format-in-java">how-to-convert-byte-size-into-human-readable-format-in-java</a>
|
||||
*/
|
||||
public static String humanReadableByteCount(long bytes, boolean si) {
|
||||
int unit = si ? 1000 : 1024;
|
||||
|
|
|
@ -18,7 +18,6 @@
|
|||
*/
|
||||
package es.ugr.swad.swadroid.modules.downloads;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.ContentResolver;
|
||||
import android.content.ContentUris;
|
||||
import android.content.ContentValues;
|
||||
|
@ -27,7 +26,6 @@ import android.database.Cursor;
|
|||
import android.database.CursorWrapper;
|
||||
import android.net.ConnectivityManager;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Environment;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.provider.BaseColumns;
|
||||
|
@ -827,7 +825,6 @@ public class DownloadManager {
|
|||
* method will only work when called from within the download manager's process.
|
||||
* @param ids the IDs of the downloads
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.KITKAT)
|
||||
public void restartDownload(long... ids) {
|
||||
try (Cursor cursor = query(new Query().setFilterById(ids))) {
|
||||
for (cursor.moveToFirst(); !cursor.isAfterLast(); cursor.moveToNext()) {
|
||||
|
@ -1019,7 +1016,7 @@ public class DownloadManager {
|
|||
private long translateLong(String column) {
|
||||
if (!isLongColumn(column)) {
|
||||
// mimic behavior of underlying cursor -- most likely, throw NumberFormatException
|
||||
return Long.valueOf(translateString(column));
|
||||
return Long.parseLong(translateString(column));
|
||||
}
|
||||
|
||||
if (column.equals(COLUMN_ID)) {
|
||||
|
@ -1139,4 +1136,4 @@ public class DownloadManager {
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1215,4 +1215,4 @@ public final class Downloads {
|
|||
public static final String INSERT_KEY_PREFIX = "http_header_";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package es.ugr.swad.swadroid.modules.downloads;
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
|
@ -31,10 +30,6 @@ import android.graphics.Typeface;
|
|||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Environment;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
import android.util.Log;
|
||||
import android.view.KeyEvent;
|
||||
import android.view.View;
|
||||
|
@ -48,6 +43,11 @@ import android.widget.Spinner;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.core.content.FileProvider;
|
||||
|
||||
import java.io.File;
|
||||
import java.net.URLConnection;
|
||||
import java.util.ArrayList;
|
||||
|
@ -190,9 +190,11 @@ public class DownloadsManager extends MenuActivity {
|
|||
protected void onStart() {
|
||||
super.onStart();
|
||||
|
||||
// check Android 6 permission
|
||||
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
// check permissions
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q
|
||||
&& ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
ActivityCompat.requestPermissions(this,
|
||||
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
|
||||
Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
|
||||
|
@ -238,28 +240,18 @@ public class DownloadsManager extends MenuActivity {
|
|||
|
||||
TextView homeButton = (TextView) this
|
||||
.findViewById(R.id.home_button);
|
||||
homeButton.setOnClickListener((new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (navigator != null) {
|
||||
updateView(navigator.goToRoot());
|
||||
}
|
||||
homeButton.setOnClickListener((v -> {
|
||||
if (navigator != null) {
|
||||
updateView(navigator.goToRoot());
|
||||
}
|
||||
|
||||
}));
|
||||
|
||||
TextView parentButton = (TextView) this
|
||||
.findViewById(R.id.parent_button);
|
||||
parentButton.setOnClickListener((new OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (navigator != null) {
|
||||
updateView(navigator.goToParentDirectory());
|
||||
}
|
||||
parentButton.setOnClickListener((v -> {
|
||||
if (navigator != null) {
|
||||
updateView(navigator.goToParentDirectory());
|
||||
}
|
||||
|
||||
}));
|
||||
|
||||
//Set Font Awesome typeface
|
||||
|
@ -272,30 +264,27 @@ public class DownloadsManager extends MenuActivity {
|
|||
messageText = (TextView) this.findViewById(R.id.messageText);
|
||||
|
||||
grid = (GridView) this.findViewById(R.id.gridview);
|
||||
grid.setOnItemClickListener((new OnItemClickListener() {
|
||||
public void onItemClick(AdapterView<?> parent, View v,
|
||||
int position, long id) {
|
||||
grid.setOnItemClickListener(((parent, v, position, id) -> {
|
||||
|
||||
DirectoryItem node = navigator.getDirectoryItem(position);
|
||||
if (node.getFileCode() == -1) //it is a directory therefore navigates into it
|
||||
updateView(navigator.goToSubDirectory(position));
|
||||
else { //it is a files therefore gets its information through web service GETFILE
|
||||
chosenNodeName = node.getName();
|
||||
fileSize = node.getSize();
|
||||
File f = new File(Constants.DOWNLOADS_PATH + File.separator + chosenNodeName);
|
||||
DirectoryItem node = navigator.getDirectoryItem(position);
|
||||
if (node.getFileCode() == -1) //it is a directory therefore navigates into it
|
||||
updateView(navigator.goToSubDirectory(position));
|
||||
else { //it is a files therefore gets its information through web service GETFILE
|
||||
chosenNodeName = node.getName();
|
||||
fileSize = node.getSize();
|
||||
File f = new File(Constants.DOWNLOADS_PATH + File.separator + chosenNodeName);
|
||||
|
||||
//If a student is requesting the marks, gets the marks and call the Marks module
|
||||
if((downloadsAreaCode == Constants.MARKS_AREA_CODE)
|
||||
&& (Login.getLoggedUser().getUserRole() == Constants.STUDENT_TYPE_CODE)) {
|
||||
//If a student is requesting the marks, gets the marks and call the Marks module
|
||||
if((downloadsAreaCode == Constants.MARKS_AREA_CODE)
|
||||
&& (Login.getLoggedUser().getUserRole() == Constants.STUDENT_TYPE_CODE)) {
|
||||
|
||||
requestGetMarks(node.getFileCode());
|
||||
} else { //Otherwise treat as a regular file
|
||||
if (isDownloaded(f)) {
|
||||
viewFile(f);
|
||||
} else {
|
||||
AlertDialog fileInfoDialog = createFileInfoDialog(node.getName(), node.getSize(), node.getTime(), node.getPublisher(), node.getFileCode(), node.getLicense());
|
||||
fileInfoDialog.show();
|
||||
}
|
||||
requestGetMarks(node.getFileCode());
|
||||
} else { //Otherwise treat as a regular file
|
||||
if (isDownloaded(f)) {
|
||||
viewFile(f);
|
||||
} else {
|
||||
AlertDialog fileInfoDialog = createFileInfoDialog(node.getName(), node.getSize(), node.getTime(), node.getPublisher(), node.getFileCode(), node.getLicense());
|
||||
fileInfoDialog.show();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -322,22 +311,20 @@ public class DownloadsManager extends MenuActivity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event)
|
||||
{
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
//If back button is pressed, go to parent directory
|
||||
if ((keyCode == KeyEvent.KEYCODE_BACK))
|
||||
{
|
||||
if (navigator != null) {
|
||||
//If current directory is not the root, go to parent directory
|
||||
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
|
||||
if (navigator != null) {
|
||||
//If current directory is not the root, go to parent directory
|
||||
if (!navigator.isRootDirectory()) {
|
||||
updateView(navigator.goToParentDirectory());
|
||||
//If current directory is the root, exit module
|
||||
//If current directory is the root, exit module
|
||||
} else {
|
||||
return super.onKeyDown(keyCode, event);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
return super.onKeyDown(keyCode, event);
|
||||
|
@ -802,7 +789,6 @@ public class DownloadsManager extends MenuActivity {
|
|||
/**
|
||||
* Set up the {@link android.app.ActionBar}, if the API is available.
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
private void setupActionBar() {
|
||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||
|
||||
|
@ -820,8 +806,9 @@ public class DownloadsManager extends MenuActivity {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String permissions[],
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,
|
||||
@NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
switch (requestCode) {
|
||||
case Constants.PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE: {
|
||||
if (grantResults.length > 0
|
||||
|
|
|
@ -22,8 +22,6 @@ package es.ugr.swad.swadroid.modules.login;
|
|||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
|
||||
import org.ksoap2.SoapFault;
|
||||
import org.ksoap2.serialization.SoapObject;
|
||||
|
||||
|
@ -175,10 +173,6 @@ public class Login extends Module {
|
|||
|
||||
//Request finalized without errors
|
||||
setResult(RESULT_OK);
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FirebaseAnalytics.Param.METHOD, "requestService");
|
||||
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.LOGIN, bundle);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
package es.ugr.swad.swadroid.modules.notifications;
|
||||
|
||||
import android.accounts.Account;
|
||||
import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.app.Notification;
|
||||
import android.app.PendingIntent;
|
||||
|
@ -28,9 +27,7 @@ import android.content.ContentResolver;
|
|||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
import android.util.Log;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
|
@ -42,6 +39,9 @@ import android.widget.LinearLayout;
|
|||
import android.widget.TextView;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
|
||||
|
||||
import org.ksoap2.serialization.SoapObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -142,48 +142,44 @@ public class Notifications extends Module implements
|
|||
/**
|
||||
* Id for the not seen notifications group
|
||||
*/
|
||||
private int NOT_SEEN_GROUP_ID = 0;
|
||||
private final int NOT_SEEN_GROUP_ID = 0;
|
||||
/**
|
||||
* Id for the seen notifications group
|
||||
*/
|
||||
private int SEEN_GROUP_ID = 1;
|
||||
private final int SEEN_GROUP_ID = 1;
|
||||
/**
|
||||
* ListView click listener
|
||||
*/
|
||||
private OnChildClickListener clickListener = new OnChildClickListener() {
|
||||
@Override
|
||||
public boolean onChildClick(ExpandableListView parent, View v,
|
||||
int groupPosition, int childPosition, long id) {
|
||||
|
||||
TextView notifCode = (TextView) v.findViewById(R.id.notifCode);
|
||||
TextView code = (TextView) v.findViewById(R.id.eventCode);
|
||||
TextView type = (TextView) v.findViewById(R.id.eventType);
|
||||
TextView userPhoto = (TextView) v.findViewById(R.id.eventUserPhoto);
|
||||
TextView sender = (TextView) v.findViewById(R.id.eventSender);
|
||||
TextView course = (TextView) v.findViewById(R.id.eventLocation);
|
||||
TextView summary = (TextView) v.findViewById(R.id.eventSummary);
|
||||
TextView content = (TextView) v.findViewById(R.id.eventText);
|
||||
TextView date = (TextView) v.findViewById(R.id.eventDate);
|
||||
TextView time = (TextView) v.findViewById(R.id.eventTime);
|
||||
TextView seenLocalText = (TextView) v.findViewById(R.id.seenLocal);
|
||||
private final OnChildClickListener clickListener = (parent, v, groupPosition, childPosition, id) -> {
|
||||
|
||||
TextView notifCode = v.findViewById(R.id.notifCode);
|
||||
TextView code = v.findViewById(R.id.eventCode);
|
||||
TextView type = v.findViewById(R.id.eventType);
|
||||
TextView userPhoto = v.findViewById(R.id.eventUserPhoto);
|
||||
TextView sender = v.findViewById(R.id.eventSender);
|
||||
TextView course = v.findViewById(R.id.eventLocation);
|
||||
TextView summary = v.findViewById(R.id.eventSummary);
|
||||
TextView content = v.findViewById(R.id.eventText);
|
||||
TextView date = v.findViewById(R.id.eventDate);
|
||||
TextView time = v.findViewById(R.id.eventTime);
|
||||
TextView seenLocalText = v.findViewById(R.id.seenLocal);
|
||||
|
||||
Intent activity = new Intent(getApplicationContext(),
|
||||
NotificationItem.class);
|
||||
activity.putExtra("notifCode", notifCode.getText().toString());
|
||||
activity.putExtra("eventCode", code.getText().toString());
|
||||
activity.putExtra("notificationType", type.getText().toString());
|
||||
activity.putExtra("userPhoto", userPhoto.getText().toString());
|
||||
activity.putExtra("sender", sender.getText().toString());
|
||||
activity.putExtra("course", course.getText().toString());
|
||||
activity.putExtra("summary", summary.getText().toString());
|
||||
activity.putExtra("content", content.getText().toString());
|
||||
activity.putExtra("date", date.getText().toString());
|
||||
activity.putExtra("time", time.getText().toString());
|
||||
activity.putExtra("seenLocal", seenLocalText.getText().toString());
|
||||
startActivity(activity);
|
||||
|
||||
return true;
|
||||
}
|
||||
Intent activity = new Intent(getApplicationContext(),
|
||||
NotificationItem.class);
|
||||
activity.putExtra("notifCode", notifCode.getText().toString());
|
||||
activity.putExtra("eventCode", code.getText().toString());
|
||||
activity.putExtra("notificationType", type.getText().toString());
|
||||
activity.putExtra("userPhoto", userPhoto.getText().toString());
|
||||
activity.putExtra("sender", sender.getText().toString());
|
||||
activity.putExtra("course", course.getText().toString());
|
||||
activity.putExtra("summary", summary.getText().toString());
|
||||
activity.putExtra("content", content.getText().toString());
|
||||
activity.putExtra("date", date.getText().toString());
|
||||
activity.putExtra("time", time.getText().toString());
|
||||
activity.putExtra("seenLocal", seenLocalText.getText().toString());
|
||||
startActivity(activity);
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -280,12 +276,12 @@ public class Notifications extends Module implements
|
|||
|
||||
refreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_container_expandablelist);
|
||||
list = (ExpandableListView) findViewById(R.id.expandablelist_pulltorefresh);
|
||||
emptyNotifTextView = (TextView) findViewById(R.id.list_item_title);
|
||||
emptyNotifTextView = findViewById(R.id.list_item_title);
|
||||
mBirthdayLayout = (LinearLayout) findViewById(R.id.notify_layout);
|
||||
mBirthdayTextView = (TextView) findViewById(R.id.notifyTextView);
|
||||
mBirthdayTextView = findViewById(R.id.notifyTextView);
|
||||
|
||||
groupItem = new ArrayList<>();
|
||||
childItem = new ArrayList<>();
|
||||
groupItem = new ArrayList<>();
|
||||
childItem = new ArrayList<>();
|
||||
|
||||
//Init ExpandableListView
|
||||
initSwipeOptions();
|
||||
|
@ -331,7 +327,7 @@ public class Notifications extends Module implements
|
|||
|
||||
refreshScreen();
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -345,7 +341,7 @@ public class Notifications extends Module implements
|
|||
intentFilter.addAction(NotificationsSyncAdapterService.START_SYNC);
|
||||
intentFilter.addAction(NotificationsSyncAdapterService.STOP_SYNC);
|
||||
intentFilter.addAction(Intent.CATEGORY_DEFAULT);
|
||||
registerReceiver(receiver, intentFilter);
|
||||
ContextCompat.registerReceiver(this, receiver, intentFilter, ContextCompat.RECEIVER_NOT_EXPORTED);
|
||||
|
||||
Log.i(TAG, "Registered receiver for automatic synchronization");
|
||||
|
||||
|
@ -406,12 +402,12 @@ public class Notifications extends Module implements
|
|||
notifCount = 0;
|
||||
for (int i = 0; i < numNotif; i++) {
|
||||
SoapObject pii = (SoapObject) soap.getProperty(i);
|
||||
Long notifCode = Long.valueOf(pii.getProperty("notifCode")
|
||||
long notifCode = Long.parseLong(pii.getProperty("notifCode")
|
||||
.toString());
|
||||
Long eventCode = Long.valueOf(pii.getProperty(
|
||||
long eventCode = Long.parseLong(pii.getProperty(
|
||||
"eventCode").toString());
|
||||
String eventType = pii.getProperty("eventType").toString();
|
||||
Long eventTime = Long.valueOf(pii.getProperty("eventTime")
|
||||
long eventTime = Long.parseLong(pii.getProperty("eventTime")
|
||||
.toString());
|
||||
String userNickname = pii.getProperty("userNickname")
|
||||
.toString();
|
||||
|
@ -424,7 +420,7 @@ public class Notifications extends Module implements
|
|||
String userPhoto = pii.getProperty("userPhoto").toString();
|
||||
String location = pii.getProperty("location").toString();
|
||||
String summary = pii.getProperty("summary").toString();
|
||||
Integer status = Integer.valueOf(pii.getProperty("status")
|
||||
int status = Integer.parseInt(pii.getProperty("status")
|
||||
.toString());
|
||||
String content = pii.getProperty("content").toString();
|
||||
boolean notifReadSWAD = (status >= 4);
|
||||
|
@ -587,17 +583,14 @@ public class Notifications extends Module implements
|
|||
|
||||
@Override
|
||||
public boolean onOptionsItemSelected(MenuItem item) {
|
||||
switch (item.getItemId()) {
|
||||
case R.id.action_markAllRead:
|
||||
if (item.getItemId() == R.id.action_markAllRead) {
|
||||
dbHelper.updateAllNotifications("seenLocal",
|
||||
Utils.parseBoolString(true));
|
||||
sendReadNotifications();
|
||||
refreshScreen();
|
||||
return true;
|
||||
|
||||
default:
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
return super.onOptionsItemSelected(item);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -638,76 +631,8 @@ public class Notifications extends Module implements
|
|||
refreshLayout.setEnabled(enable);
|
||||
}
|
||||
});
|
||||
/*
|
||||
* Create a ListView-specific touch listener. ListViews are given special treatment because
|
||||
* by default they handle touches for their list items... i.e. they're in charge of drawing
|
||||
* the pressed state (the list selector), handling list item clicks, etc.
|
||||
*
|
||||
* Requires Android 3.1 (HONEYCOMB_MR1) or newer
|
||||
*/
|
||||
/*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR1) {
|
||||
SwipeListViewTouchListener touchListener =
|
||||
new SwipeListViewTouchListener(
|
||||
list,
|
||||
new SwipeListViewTouchListener.OnSwipeCallback() {
|
||||
@Override
|
||||
public void onSwipeLeft(ListView listView, int [] reverseSortedPositions) {
|
||||
if(reverseSortedPositions.length > 0) {
|
||||
swipeItem(reverseSortedPositions[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSwipeRight(ListView listView, int [] reverseSortedPositions) {
|
||||
if(reverseSortedPositions.length > 0) {
|
||||
swipeItem(reverseSortedPositions[0]);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartSwipe() {
|
||||
disableSwipe();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStopSwipe() {
|
||||
enableSwipe();
|
||||
}
|
||||
},
|
||||
true,
|
||||
true);
|
||||
|
||||
list.setOnTouchListener(touchListener);
|
||||
// Setting this scroll listener is required to ensure that during ListView scrolling,
|
||||
// we don't look for swipes.
|
||||
list.setOnScrollListener(touchListener.makeScrollListener(refreshLayout));
|
||||
} else {
|
||||
Log.w(TAG, "SwipeListViewTouchListener requires Android 3.1 (HONEYCOMB_MR1) or newer");
|
||||
list.setOnScrollListener(new AbsListView.OnScrollListener() {
|
||||
@Override
|
||||
public void onScrollStateChanged(AbsListView absListView, int scrollState) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onScroll(AbsListView absListView, int firstVisibleItem,
|
||||
int visibleItemCount, int totalItemCount) {
|
||||
|
||||
boolean enable = false;
|
||||
if(list != null && list.getChildCount() > 0){
|
||||
// check if the first item of the list is visible
|
||||
boolean firstItemVisible = list.getFirstVisiblePosition() == 0;
|
||||
// check if the top of the first item is visible
|
||||
boolean topOfFirstItemVisible = list.getChildAt(0).getTop() == 0;
|
||||
// enabling or disabling the refresh layout
|
||||
enable = firstItemVisible && topOfFirstItemVisible;
|
||||
}
|
||||
refreshLayout.setEnabled(enable);
|
||||
}
|
||||
});
|
||||
}*/
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
|
||||
private void setAppearance() {
|
||||
refreshLayout.setColorSchemeResources(android.R.color.holo_blue_bright,
|
||||
android.R.color.holo_green_light,
|
||||
|
|
|
@ -59,7 +59,6 @@ import es.ugr.swad.swadroid.model.SWADNotification;
|
|||
import es.ugr.swad.swadroid.model.User;
|
||||
import es.ugr.swad.swadroid.modules.login.Login;
|
||||
import es.ugr.swad.swadroid.preferences.Preferences;
|
||||
import es.ugr.swad.swadroid.ssl.SecureConnection;
|
||||
import es.ugr.swad.swadroid.utils.Utils;
|
||||
import es.ugr.swad.swadroid.webservices.IWebserviceClient;
|
||||
import es.ugr.swad.swadroid.webservices.SOAPClient;
|
||||
|
@ -72,8 +71,6 @@ import es.ugr.swad.swadroid.webservices.SOAPClient;
|
|||
*/
|
||||
public class NotificationsSyncAdapterService extends Service {
|
||||
private static final String TAG = "NotificationsSyncAdapterService";
|
||||
private static Preferences prefs;
|
||||
private static SecureConnection conn;
|
||||
private static SyncAdapterImpl sSyncAdapter = null;
|
||||
private static int notifCount;
|
||||
private static DataBaseHelper dbHelper;
|
||||
|
@ -81,14 +78,9 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
private static String METHOD_NAME = "";
|
||||
private static Object result;
|
||||
private static String errorMessage = "";
|
||||
private static boolean isConnected;
|
||||
private static boolean isDebuggable;
|
||||
public static final String START_SYNC = "es.ugr.swad.swadroid.sync.start";
|
||||
public static final String STOP_SYNC = "es.ugr.swad.swadroid.sync.stop";
|
||||
/**
|
||||
* Application context
|
||||
*/
|
||||
private static Context mCtx;
|
||||
|
||||
public NotificationsSyncAdapterService() {
|
||||
super();
|
||||
|
@ -100,7 +92,6 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
public SyncAdapterImpl(Context context) {
|
||||
super(context, true);
|
||||
mContext = context;
|
||||
mCtx = context;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -187,7 +178,6 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
*/
|
||||
@Override
|
||||
public void onCreate() {
|
||||
isConnected = Utils.connectionAvailable(this);
|
||||
// Check if debug mode is enabled
|
||||
try {
|
||||
getPackageManager().getApplicationInfo(
|
||||
|
@ -198,7 +188,6 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
}
|
||||
|
||||
try {
|
||||
prefs = new Preferences(this);
|
||||
dbHelper = new DataBaseHelper(this);
|
||||
//Initialize webservices client
|
||||
webserviceClient = null;
|
||||
|
@ -206,19 +195,57 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
Log.e(TAG, "Error initializing database and preferences", e);
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
|
||||
Log.i(TAG, "Starting persistent notification in custom foreground mode");
|
||||
startCustomForeground();
|
||||
} else {
|
||||
Log.i(TAG, "Starting persistent notification in standard foreground mode");
|
||||
startForeground(1, new Notification());
|
||||
}
|
||||
|
||||
super.onCreate();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
super.onDestroy();
|
||||
|
||||
Intent broadcastIntent = new Intent();
|
||||
broadcastIntent.setAction("restartNotificationsService");
|
||||
broadcastIntent.setClass(this, RestarterNotificationsReceiver.class);
|
||||
this.sendBroadcast(broadcastIntent);
|
||||
}
|
||||
|
||||
private void startCustomForeground() {
|
||||
Intent notificationIntent = new Intent(this, Notifications.class);
|
||||
PendingIntent pendingIntent;
|
||||
|
||||
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
//single top to avoid creating many activity stacks queue
|
||||
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
|
||||
pendingIntent = PendingIntent.getActivity(this,
|
||||
0,
|
||||
notificationIntent,
|
||||
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
|
||||
|
||||
Notification notification = AlertNotificationFactory.createBackgroundNotification(
|
||||
this,
|
||||
getString(R.string.appRunningBackground),
|
||||
R.drawable.ic_launcher_swadroid_notif,
|
||||
R.drawable.ic_launcher_swadroid,
|
||||
pendingIntent);
|
||||
|
||||
startForeground(2, notification);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see android.app.Service#onStartCommand(android.content.Intent, int, int)
|
||||
*/
|
||||
@Override
|
||||
public int onStartCommand(Intent intent, int flags, int startId) {
|
||||
super.onStartCommand(intent, flags, startId);
|
||||
// return START_NOT_STICKY - we want this Service to be left running
|
||||
// unless explicitly stopped, and it's process is killed, we want it to
|
||||
// be restarted
|
||||
return START_STICKY;
|
||||
return START_REDELIVER_INTENT;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -342,10 +369,10 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
notifCount = 0;
|
||||
for (int i = 0; i < numNotif; i++) {
|
||||
SoapObject pii = (SoapObject) soap.getProperty(i);
|
||||
Long notifCode = Long.valueOf(pii.getProperty("notifCode").toString());
|
||||
Long eventCode = Long.valueOf(pii.getProperty("eventCode").toString());
|
||||
long notifCode = Long.parseLong(pii.getProperty("notifCode").toString());
|
||||
long eventCode = Long.parseLong(pii.getProperty("eventCode").toString());
|
||||
String eventType = pii.getProperty("eventType").toString();
|
||||
Long eventTime = Long.valueOf(pii.getProperty("eventTime").toString());
|
||||
long eventTime = Long.parseLong(pii.getProperty("eventTime").toString());
|
||||
String userNickname = pii.getProperty("userNickname").toString();
|
||||
String userSurname1 = pii.getProperty("userSurname1").toString();
|
||||
String userSurname2 = pii.getProperty("userSurname2").toString();
|
||||
|
@ -353,7 +380,7 @@ public class NotificationsSyncAdapterService extends Service {
|
|||
String userPhoto = pii.getProperty("userPhoto").toString();
|
||||
String location = pii.getProperty("location").toString();
|
||||
String summary = pii.getProperty("summary").toString();
|
||||
Integer status = Integer.valueOf(pii.getProperty("status").toString());
|
||||
int status = Integer.parseInt(pii.getProperty("status").toString());
|
||||
String content = pii.getProperty("content").toString();
|
||||
boolean notifReadSWAD = (status >= 4);
|
||||
boolean notifCancelled = (status >= 8);
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
* This file is part of SWADroid.
|
||||
*
|
||||
* Copyright (C) 2010 Juan Miguel Boyero Corral <juanmi1982@gmail.com>
|
||||
*
|
||||
* SWADroid 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.
|
||||
*
|
||||
* SWADroid 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 SWADroid. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package es.ugr.swad.swadroid.modules.notifications;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.util.Log;
|
||||
|
||||
/**
|
||||
* Restarter for NotificationsSyncAdapterService service.
|
||||
*
|
||||
* @author Juan Miguel Boyero Corral <juanmi1982@gmail.com>
|
||||
*/
|
||||
public class RestarterNotificationsReceiver extends BroadcastReceiver {
|
||||
private static final String TAG = "RestarterNotificationsReceiver";
|
||||
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.i(TAG, "Service tried to stop");
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
context.startForegroundService(new Intent(context, NotificationsSyncAdapterService.class));
|
||||
} else {
|
||||
context.startService(new Intent(context, NotificationsSyncAdapterService.class));
|
||||
}
|
||||
|
||||
Log.i(TAG, "Service restarted");
|
||||
}
|
||||
}
|
|
@ -18,11 +18,9 @@
|
|||
*/
|
||||
package es.ugr.swad.swadroid.preferences;
|
||||
|
||||
import android.annotation.TargetApi;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.Editor;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.util.Log;
|
||||
|
||||
|
@ -85,22 +83,6 @@ public class Preferences {
|
|||
* Rate preference name
|
||||
*/
|
||||
public static final String RATEPREF = "ratePref";
|
||||
/**
|
||||
* Twitter preference name
|
||||
*/
|
||||
public static final String TWITTERPREF = "twitterPref";
|
||||
/**
|
||||
* Facebook preference name
|
||||
*/
|
||||
public static final String FACEBOOKPREF = "facebookPref";
|
||||
/**
|
||||
* Telegram preference name
|
||||
*/
|
||||
public static final String TELEGRAMPREF = "telegramPref";
|
||||
/**
|
||||
* Blog preference name
|
||||
*/
|
||||
public static final String BLOGPREF = "blogPref";
|
||||
/**
|
||||
* Share preference name
|
||||
*/
|
||||
|
@ -177,7 +159,6 @@ public class Preferences {
|
|||
/**
|
||||
* Constructor
|
||||
*/
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
public Preferences(Context ctx) {
|
||||
getPreferences(ctx);
|
||||
|
||||
|
|
|
@ -36,8 +36,6 @@ import android.preference.PreferenceScreen;
|
|||
import android.util.Log;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.google.firebase.analytics.FirebaseAnalytics;
|
||||
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
|
@ -62,10 +60,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
* PreferencesActivity tag name for Logcat
|
||||
*/
|
||||
private static final String TAG = Constants.APP_TAG + " PreferencesActivity";
|
||||
/**
|
||||
* Obtain Firebase Analytics instance
|
||||
*/
|
||||
protected FirebaseAnalytics mFirebaseAnalytics = FirebaseAnalytics.getInstance(this);
|
||||
/**
|
||||
* Application context
|
||||
*/
|
||||
|
@ -82,22 +76,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
* Rate preference
|
||||
*/
|
||||
private static Preference ratePref;
|
||||
/**
|
||||
* Twitter preference
|
||||
*/
|
||||
private static Preference twitterPref;
|
||||
/**
|
||||
* Facebook preference
|
||||
*/
|
||||
private static Preference facebookPref;
|
||||
/**
|
||||
* Telegram preference
|
||||
*/
|
||||
private static Preference telegramPref;
|
||||
/**
|
||||
* Blog preference
|
||||
*/
|
||||
private static Preference blogPref;
|
||||
/**
|
||||
* Share preference
|
||||
*/
|
||||
|
@ -180,10 +158,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
logOutPref = findPreference(Preferences.LOGOUTPREF);
|
||||
currentVersionPref = findPreference(Preferences.CURRENTVERSIONPREF);
|
||||
ratePref = findPreference(Preferences.RATEPREF);
|
||||
twitterPref = findPreference(Preferences.TWITTERPREF);
|
||||
facebookPref = findPreference(Preferences.FACEBOOKPREF);
|
||||
telegramPref = findPreference(Preferences.TELEGRAMPREF);
|
||||
blogPref = findPreference(Preferences.BLOGPREF);
|
||||
sharePref = findPreference(Preferences.SHAREPREF);
|
||||
privacyPolicyPref = findPreference(Preferences.PRIVACYPOLICYPREF);
|
||||
syncTimePref = findPreference(Preferences.SYNCTIMEPREF);
|
||||
|
@ -191,10 +165,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
//syncTimeLocationPref = findPreference(Preferences.SYNCLOCATIONTIMEPREF);
|
||||
|
||||
ratePref.setOnPreferenceChangeListener(this);
|
||||
twitterPref.setOnPreferenceChangeListener(this);
|
||||
facebookPref.setOnPreferenceChangeListener(this);
|
||||
telegramPref.setOnPreferenceChangeListener(this);
|
||||
blogPref.setOnPreferenceChangeListener(this);
|
||||
sharePref.setOnPreferenceChangeListener(this);
|
||||
privacyPolicyPref.setOnPreferenceChangeListener(this);
|
||||
syncEnablePref.setOnPreferenceChangeListener(this);
|
||||
|
@ -229,54 +199,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
return true;
|
||||
}
|
||||
});
|
||||
twitterPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
/**
|
||||
* Called when a preference is selected.
|
||||
* @param preference Preference selected.
|
||||
*/
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
|
||||
urlIntent.setData(Uri.parse(getString(R.string.twitterURL)));
|
||||
startActivity(urlIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
facebookPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
/**
|
||||
* Called when a preference is selected.
|
||||
* @param preference Preference selected.
|
||||
*/
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
|
||||
urlIntent.setData(Uri.parse(getString(R.string.facebookURL)));
|
||||
startActivity(urlIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
telegramPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
/**
|
||||
* Called when a preference is selected.
|
||||
* @param preference Preference selected.
|
||||
*/
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
|
||||
urlIntent.setData(Uri.parse(getString(R.string.telegramURL)));
|
||||
startActivity(urlIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
blogPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
/**
|
||||
* Called when a preference is selected.
|
||||
* @param preference Preference selected.
|
||||
*/
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent urlIntent = new Intent(Intent.ACTION_VIEW);
|
||||
urlIntent.setData(Uri.parse(getString(R.string.blogURL)));
|
||||
startActivity(urlIntent);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
sharePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
/**
|
||||
* Called when a preference is selected.
|
||||
|
@ -289,11 +211,6 @@ public class PreferencesActivity extends PreferenceActivity implements OnPrefere
|
|||
sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, getString(R.string.shareBodyMsg));
|
||||
startActivity(Intent.createChooser(sharingIntent, getString(R.string.shareTitle_menu)));
|
||||
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putString(FirebaseAnalytics.Param.ITEM_ID, "1");
|
||||
bundle.putString(FirebaseAnalytics.Param.CONTENT_TYPE, "text");
|
||||
mFirebaseAnalytics.logEvent(FirebaseAnalytics.Event.SHARE, bundle);
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -43,7 +43,7 @@ public final class PeriodicSyncReceiver extends BroadcastReceiver {
|
|||
public static PendingIntent createPendingIntent(Context context, String authority, Bundle extras) {
|
||||
int requestCode = 0;
|
||||
Intent intent = createIntent(context, authority);
|
||||
int flags = 0;
|
||||
int flags = PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE;
|
||||
return PendingIntent.getBroadcast(context, requestCode, intent, flags);
|
||||
}
|
||||
|
||||
|
|
|
@ -18,22 +18,32 @@
|
|||
</head>
|
||||
|
||||
<body bgcolor="white">
|
||||
<!--<h4>1.6.0 (upcoming)</h4>
|
||||
<!--<h4>1.6.0</h4>
|
||||
<ul>
|
||||
<li type="disc">Añadido módulo para localización en interiores</li>
|
||||
</ul>-->
|
||||
|
||||
<h4>1.5.8 (2022-05-23)</h4>
|
||||
<h4>1.5.10</h4>
|
||||
<ul>
|
||||
<li type="disc">Corregida gestión de permisos en la descarga de documentos para Android 10+</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.9</h4>
|
||||
<ul>
|
||||
<li type="disc">Añadido soporte para la descarga de notificaciones en segundo plano cuando la optimización de batería está habilitada</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.8<h4>
|
||||
<ul>
|
||||
<li type="disc">Corregida descarga de notificaciones en Android 12 (S)</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.7 (2020-12-19)</h4>
|
||||
<h4>1.5.7<h4>
|
||||
<ul>
|
||||
<li type="disc">Corregida descarga de archivos en Android R</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.6 (2019-11-05)</h4>
|
||||
<h4>1.5.6<h4>
|
||||
<ul>
|
||||
<li type="disc">
|
||||
<strong>Pasar lista:</strong>
|
||||
|
@ -41,13 +51,13 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.5 (2019-07-08)</h4>
|
||||
<h4>1.5.5<h4>
|
||||
<ul>
|
||||
<li type="disc">Añadido soporte para Android-Q</li>
|
||||
<li type="disc">Corregidas erratas en el historial de cambios</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.4 (2018-02-25)</h4>
|
||||
<h4>1.5.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -56,7 +66,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.3 (2017-10-25)</h4>
|
||||
<h4>1.5.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida compatibilidad con el sistema de notificaciones de Android
|
||||
|
@ -64,7 +74,7 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.2 (2017-02-12)</h4>
|
||||
<h4>1.5.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida política de privacidad de datos en la pantalla de
|
||||
|
@ -78,12 +88,12 @@
|
|||
Calificaciones, ahora se encuentran en la nueva carpeta Archivos
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.5.1 (2017-01-21)</h4>
|
||||
<h4>1.5.1<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error unparseable date: "anyType{}"(at offset 0)</li>
|
||||
</ul>
|
||||
<h4>1.5.0 (2016-09-01)</h4>
|
||||
<h4>1.5.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -91,7 +101,7 @@
|
|||
Añadida búsqueda de destinatarios
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.4.0 (2016-07-25)</h4>
|
||||
<h4>1.4.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -107,7 +117,7 @@
|
|||
Corregida consulta de calificaciones desde el rol estudiante
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.4 (2016-07-17)</h4>
|
||||
<h4>1.3.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -129,7 +139,7 @@
|
|||
Mejoras menores
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.3 (2016-01-31)</h4>
|
||||
<h4>1.3.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidas notificaciones sociales</li>
|
||||
|
@ -142,12 +152,12 @@
|
|||
mayor a 30 días
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.2 (2016-01-06)</h4>
|
||||
<h4>1.3.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida gestión de permisos en Android 6.0 Marshmallow</li>
|
||||
</ul>
|
||||
<h4>1.3.1 (2015-12-06)</h4>
|
||||
<h4>1.3.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Mejoras en las pantallas de identificación y creación de
|
||||
|
@ -155,7 +165,7 @@
|
|||
</li>
|
||||
<li type="disc">Ahora las notificaciones canceladas no se descargan durante la sincronización</li>
|
||||
</ul>
|
||||
<h4>1.3 (2015-09-03)</h4>
|
||||
<h4>1.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida creación de cuentas de usuario</li>
|
||||
|
@ -166,13 +176,13 @@
|
|||
y tests (parcial en tests)
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.2.4 (2015-03-15)</h4>
|
||||
<h4>1.2.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Reducido retardo entre escaneos de códigos a un segundo</li>
|
||||
<li type="disc">Ahora el módulo de descargas requiere Android 3.0 o superior</li>
|
||||
</ul>
|
||||
<h4>1.2.3 (2014-11-30)</h4>
|
||||
<h4>1.2.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido soporte para escaneo de códigos de barras en el
|
||||
|
@ -186,7 +196,7 @@
|
|||
</li>
|
||||
<li type="disc">Reducido retardo entre escaneos de códigos a 2 segundos</li>
|
||||
</ul>
|
||||
<h4>1.2.2 (2014-11-26)</h4>
|
||||
<h4>1.2.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Deshabilitado el deslizamiento lateral de las notificaciones</li>
|
||||
|
@ -201,7 +211,7 @@
|
|||
correctamente
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.2.1 (2014-11-24)</h4>
|
||||
<h4>1.2.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Ahora se pueden enviar listados de asistencias vacíos para marcar
|
||||
|
@ -212,7 +222,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido refresco en pantalla del listado de asistencias</li>
|
||||
</ul>
|
||||
<h4>1.2 (2014-11-23)</h4>
|
||||
<h4>1.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidas felicitaciones de cumpleaños</li>
|
||||
|
@ -220,19 +230,19 @@
|
|||
las asistencias a SWAD
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.1.4 (2014-11-11)</h4>
|
||||
<h4>1.1.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregida descarga de notificaciones por modificaciones en SWAD</li>
|
||||
</ul>
|
||||
<h4>1.1.3 (2014-10-05)</h4>
|
||||
<h4>1.1.3<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregida actualización errónea de las notificaciones al
|
||||
desplazar hacia arriba la lista
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.1.2 (2014-09-18)</h4>
|
||||
<h4>1.1.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Mejoras en los mensajes de error</li>
|
||||
|
@ -244,7 +254,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregidos errores tipográficos en el historial de cambios</li>
|
||||
</ul>
|
||||
<h4>1.1.1 (2014-09-16)</h4>
|
||||
<h4>1.1.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Ahora el desplazamiento lateral de las notificaciones sólo está
|
||||
|
@ -257,7 +267,7 @@
|
|||
desplazar la lista hacia arriba sin estar en la parte superior de la misma
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.1 (2014-09-08)</h4>
|
||||
<h4>1.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Ahora las notificaciones se agrupan en
|
||||
|
@ -293,7 +303,7 @@
|
|||
aplicación
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.0 (2014-03-26)</h4>
|
||||
<h4>1.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Nueva interfaz gráfica estilo Holo</li>
|
||||
|
@ -316,7 +326,7 @@
|
|||
</li>
|
||||
<li type="disc">Eliminados los idiomas no utilizados por los usuarios</li>
|
||||
</ul>
|
||||
<h4>0.13 (2014-02-02)</h4>
|
||||
<h4>0.13<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida pantalla de identificación</li>
|
||||
|
@ -327,7 +337,7 @@
|
|||
2.3 o superior cuando la sincronización automática está activada
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.12.7 (2013-12-14)</h4>
|
||||
<h4>0.12.7<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida información de las notificaciones vistas en SWAD al
|
||||
|
@ -344,7 +354,7 @@
|
|||
</li>
|
||||
<li type="disc">Corregido error al recuperar la configuración de los tests</li>
|
||||
</ul>
|
||||
<h4>0.12.6 (2013-11-24)</h4>
|
||||
<h4>0.12.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido control de las notificaciones vistas</li>
|
||||
|
@ -366,17 +376,17 @@
|
|||
</li>
|
||||
<li type="disc">Corregido color de fondo negro al deslizar el listado de notificaciones</li>
|
||||
</ul>
|
||||
<h4>0.12.5 (2013-11-10)</h4>
|
||||
<h4>0.12.5<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error que impedía responder mensajes</li>
|
||||
</ul>
|
||||
<h4>0.12.4 (2013-11-09)</h4>
|
||||
<h4>0.12.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error que impedía consultar las sesiones de prácticas</li>
|
||||
</ul>
|
||||
<h4>0.12.3 (2013-11-09)</h4>
|
||||
<h4>0.12.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido sistema de actualización "Arrastrar-para-actualizar"
|
||||
|
@ -420,13 +430,13 @@
|
|||
</li>
|
||||
<li type="disc">Corregido error en la selección del número de preguntas de test</li>
|
||||
</ul>
|
||||
<h4>0.12.2 (2013-06-19)</h4>
|
||||
<h4>0.12.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Actualizadas las comunicaciones con el servidor</li>
|
||||
</ul>
|
||||
|
||||
<h4>0.12.1 (2013-06-09)</h4>
|
||||
<h4>0.12.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidas notificaciones de foros</li>
|
||||
|
@ -455,7 +465,7 @@
|
|||
<li type="disc">Corregida la detección del valor nulo en la respuesta del servidor
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.12 (2013-04-20)</h4>
|
||||
<h4>0.12<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidos los nuevos tipos de notificación de Documentos,
|
||||
|
@ -500,7 +510,7 @@
|
|||
dispositivos
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11.3 (2013-03-03)</h4>
|
||||
<h4>0.11.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Ahora se muestra el servidor por defecto cuando el campo "Servidor" se deja
|
||||
|
@ -514,7 +524,7 @@
|
|||
asignaturas ante un cambio de configuración
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11.2 (2013-02-24)</h4>
|
||||
<h4>0.11.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido botón de actualización de las asignaturas en la
|
||||
|
@ -539,7 +549,7 @@
|
|||
<li type="disc">Corregido comportamiento anómalo de los checkboxes en Android 4.2
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11.1 (2013-01-26)</h4>
|
||||
<h4>0.11.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida compatibilidad con pantallas táctiles básicas
|
||||
|
@ -568,7 +578,7 @@
|
|||
descriptores de los tests
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11 (2012-12-15)</h4>
|
||||
<h4>0.11<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo de Descargas</li>
|
||||
|
@ -580,7 +590,7 @@
|
|||
opciones de SWAD
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.10.1 (2012-11-17)</h4>
|
||||
<h4>0.10.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida compatibilidad con Android 4.2</li>
|
||||
|
@ -603,7 +613,7 @@
|
|||
asunto
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.10 (2012-11-09)</h4>
|
||||
<h4>0.10<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo de inscripción a grupos</li>
|
||||
|
@ -620,7 +630,7 @@
|
|||
<li type="disc">Corregido error en la comprobación de la conexión a Internet
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.9.3 (2012-07-20)</h4>
|
||||
<h4>0.9.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido soporte para carpetas en la URL del servidor</li>
|
||||
|
@ -629,14 +639,14 @@
|
|||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">mMjoras en los mensajes de error</li>
|
||||
</ul>
|
||||
<h4>0.9.2 (2012-07-10)</h4>
|
||||
<h4>0.9.2<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">La característica camera.autofocus ahora es opcional para corregir
|
||||
incompatibilidades con algunos dispositivos
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.9.1 (2012-07-09)</h4>
|
||||
<h4>0.9.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido soporte pana DNI con letra (primera y última posición)
|
||||
|
@ -648,19 +658,19 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido soporte para pantallas grandes</li>
|
||||
</ul>
|
||||
<h4>0.9 (2012-07-01)</h4>
|
||||
<h4>0.9<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo para pasar lista</li>
|
||||
</ul>
|
||||
<h4>0.8.1 (2012-05-20)</h4>
|
||||
<h4>0.8.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida opción para responder mensajes desde su notificación
|
||||
abierta
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.8 (2012-05-01)</h4>
|
||||
<h4>0.8<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida sincronización automática de las
|
||||
|
@ -691,7 +701,7 @@
|
|||
<li type="disc">Corregido bug HTML en el campo "location" de las notificaciones</li>
|
||||
<li type="disc">Corregido error en la etiqueta br de las notificaciones</li>
|
||||
</ul>
|
||||
<h4>0.7.2 (2012-02-22)</h4>
|
||||
<h4>0.7.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidas alertas de notificaciones en la barra de estado</li>
|
||||
|
@ -701,7 +711,7 @@
|
|||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Optimizadas las consultas a la base de datos</li>
|
||||
</ul>
|
||||
<h4>0.7.1 (2012-01-11)</h4>
|
||||
<h4>0.7.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Mejorada la velocidad de renderizado de las calificaciones</li>
|
||||
|
@ -710,14 +720,14 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregidos errores de renderizado en las calificaciones</li>
|
||||
</ul>
|
||||
<h4>0.7 (2012-01-10)</h4>
|
||||
<h4>0.7<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida visualización de las calificaciones al pulsar sobre la
|
||||
notificación asociada
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.6.2 (2011-12-09)</h4>
|
||||
<h4>0.6.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido enlace al blog de la aplicación en la pantalla de
|
||||
|
@ -732,7 +742,7 @@
|
|||
</li>
|
||||
<li type="disc">Cambios menores en los mensajes de error</li>
|
||||
</ul>
|
||||
<h4>0.6.1 (2011-11-16)</h4>
|
||||
<h4>0.6.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido enlace a la página de Google+ de la
|
||||
|
@ -747,7 +757,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido el funcionamiento del menú de opciones</li>
|
||||
</ul>
|
||||
<h4>0.6 (2011-11-06)</h4>
|
||||
<h4>0.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida compatibilidad con Android 4.0</li>
|
||||
|
@ -759,7 +769,7 @@
|
|||
</li>
|
||||
<li type="disc">Añadido autor de SWAD en la pantalla de configuración</li>
|
||||
</ul>
|
||||
<h4>0.5.2 (2011-09-29)</h4>
|
||||
<h4>0.5.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido el nombre real de los destinatarios en el mensaje "Mensaje
|
||||
|
@ -774,12 +784,12 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error en la descarga de las preguntas de test</li>
|
||||
</ul>
|
||||
<h4>0.5.1 (2011-09-26)</h4>
|
||||
<h4>0.5.1<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error al responder mensajes</li>
|
||||
</ul>
|
||||
<h4>0.5 (2011-09-26)</h4>
|
||||
<h4>0.5<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo de envío de mensajes</li>
|
||||
|
@ -788,17 +798,17 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correcciones menores</li>
|
||||
</ul>
|
||||
<h4>0.4.5 (2011-07-08)</h4>
|
||||
<h4>0.4.5<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Optimizada la descarga de las preguntas de test</li>
|
||||
</ul>
|
||||
<h4>0.4.4 (2011-07-05)</h4>
|
||||
<h4>0.4.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correccoines menores</li>
|
||||
</ul>
|
||||
<h4>0.4.3 (2011-06-15)</h4>
|
||||
<h4>0.4.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">mejorada la vissualización de los tests</li>
|
||||
|
@ -807,7 +817,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correcciones menores</li>
|
||||
</ul>
|
||||
<h4>0.4.2 (2011-06-15)</h4>
|
||||
<h4>0.4.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Ahora las preguntas no contestadas puntúan como 0</li>
|
||||
|
@ -816,7 +826,7 @@
|
|||
</li>
|
||||
<li type="disc">mejoras en la cisualización de los tests</li>
|
||||
</ul>
|
||||
<h4>0.4.1 (2011-06-14)</h4>
|
||||
<h4>0.4.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Se permiten puntuacioes negativas en los tests</li>
|
||||
|
@ -825,7 +835,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correcifo error al descargar las preguntas de test</li>
|
||||
</ul>
|
||||
<h4>0.4 (2011-06-13)</h4>
|
||||
<h4>0.4<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo de Tests</li>
|
||||
|
@ -834,7 +844,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correcciones menores</li>
|
||||
</ul>
|
||||
<h4>0.3.10 (2011-05-19)</h4>
|
||||
<h4>0.3.10<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidas notificaciones de actividades, encuestas y notificaciones
|
||||
|
@ -848,28 +858,28 @@
|
|||
</li>
|
||||
<li type="disc">Añadido mensaje de error de credenciales erróneas</li>
|
||||
</ul>
|
||||
<h4>0.3.9 (2011-05-03)</h4>
|
||||
<h4>0.3.9<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error de campos vacíos en las notificaciones</li>
|
||||
</ul>
|
||||
<h4>0.3.8 (2011-04-27)</h4>
|
||||
<h4>0.3.8<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error al borrar las notificaciones antiguas</li>
|
||||
</ul>
|
||||
<h4>0.3.7 (2011-04-14)</h4>
|
||||
<h4>0.3.7<h4>
|
||||
<ul>
|
||||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregido error en el apellido de las notificaciones</li>
|
||||
</ul>
|
||||
<h4>0.3.6 (2011-04-13)</h4>
|
||||
<h4>0.3.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadidos detalles de las notificaciones</li>
|
||||
<li type="disc">Añadido mensaje de actualización de la aplicación</li>
|
||||
</ul>
|
||||
<h4>0.3.5 (2011-04-05)</h4>
|
||||
<h4>0.3.5<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida barra de acción</li>
|
||||
|
@ -882,7 +892,7 @@
|
|||
<li type="disc">Mejorada la interfaz de usuario</li>
|
||||
<li type="disc">Mejoras de rendimiento</li>
|
||||
</ul>
|
||||
<h4>0.3.4 (2011-03-27)</h4>
|
||||
<h4>0.3.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Mejorada la interfaz de usuario</li>
|
||||
|
@ -891,12 +901,12 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregidos errores menores en los mensajes de error</li>
|
||||
</ul>
|
||||
<h4>0.3.3 (2011-03-27)</h4>
|
||||
<h4>0.3.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">Rediseñada la interfaz de usuario</li>
|
||||
</ul>
|
||||
<h4>0.3.2 (2011-03-24)</h4>
|
||||
<h4>0.3.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido cuadro de diálogo de primer inicio de la aplicación</li>
|
||||
|
@ -905,7 +915,7 @@
|
|||
<lh class="update">[ACTUALIZACIONES]</lh>
|
||||
<li type="disc">mejorada la pantalla de configuración</li>
|
||||
</ul>
|
||||
<h4>0.3.1 (2011-03-21)</h4>
|
||||
<h4>0.3.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido guardado automático de la configuración</li>
|
||||
|
@ -921,13 +931,13 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Corregidos problemas de compatibilidad con algunos dispositivos</li>
|
||||
</ul>
|
||||
<h4>0.3 (2011-03-08)</h4>
|
||||
<h4>0.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido módulo de Notificaciones</li>
|
||||
<li type="disc">Añadida compatibilidad con Android 3.0 Honeycomb</li>
|
||||
</ul>
|
||||
<h4>0.2.2 (2011-01-18)</h4>
|
||||
<h4>0.2.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida comprobación de la conexión a Internet</li>
|
||||
|
@ -944,13 +954,13 @@
|
|||
<li type="disc">Corregidos los iconos del lanzador</li>
|
||||
<li type="disc">Corregidos problemas de compatibilidad con Android 1.6</li>
|
||||
</ul>
|
||||
<h4>0.2.1 (2010-12-15)</h4>
|
||||
<h4>0.2.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida compatibilidad con Android 2.3 Gingerbread</li>
|
||||
<li type="disc">Completado el módulo de Login</li>
|
||||
</ul>
|
||||
<h4>0.2 (2010-12-08)</h4>
|
||||
<h4>0.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadido cierre de sesión automático cuando se modifica
|
||||
|
@ -958,7 +968,7 @@
|
|||
</li>
|
||||
<li type="disc">Añadida base de datos inicial</li>
|
||||
</ul>
|
||||
<h4>0.1.1 (2010-11-06)</h4>
|
||||
<h4>0.1.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Añadida imagen de fondo en la pantalla principal</li>
|
||||
|
@ -967,7 +977,7 @@
|
|||
<lh class="fix">[CORRECCIONES]</lh>
|
||||
<li type="disc">Correcciones menores en la pantalla principal</li>
|
||||
</ul>
|
||||
<h4>0.1 (2010-11-03)</h4>
|
||||
<h4>0.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NOVEDADES]</lh>
|
||||
<li type="disc">Versión inicial</li>
|
||||
|
|
|
@ -18,22 +18,32 @@
|
|||
</head>
|
||||
|
||||
<body bgcolor="white"><!--
|
||||
<h4>1.6.0 (upcoming)</h4>
|
||||
<h4>1.6.0</h4>
|
||||
<ul>
|
||||
<li type="disc">Added indoor location module</li>
|
||||
</ul>-->
|
||||
|
||||
<h4>1.5.8 (2022-05-23)</h4>
|
||||
<h4>1.5.10</h4>
|
||||
<ul>
|
||||
<li type="disc">Fixed permissions management on document download for Android 10+</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.9</h4>
|
||||
<ul>
|
||||
<li type="disc">Added support for background notification download when power save mode is enabled</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.8<h4>
|
||||
<ul>
|
||||
<li type="disc">Fixed notifications downloads on Android 12 (S)</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.7 (2020-12-19)</h4>
|
||||
<h4>1.5.7<h4>
|
||||
<ul>
|
||||
<li type="disc">Fixed file downloads on Android R</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.6 (2019-11-05)</h4>
|
||||
<h4>1.5.6<h4>
|
||||
<ul>
|
||||
<li type="disc">
|
||||
<strong>Rollcall:</strong>
|
||||
|
@ -41,13 +51,13 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.5 (2019-07-08)</h4>
|
||||
<h4>1.5.5<h4>
|
||||
<ul>
|
||||
<li type="disc">Added support for Android-Q</li>
|
||||
<li type="disc">Fixed CHANGELOG typos</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.4 (2018-02-25)</h4>
|
||||
<h4>1.5.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -56,13 +66,13 @@
|
|||
</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.3 (2017-10-25)</h4>
|
||||
<h4>1.5.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added compatibility for Android Oreo notifications system</li>
|
||||
</ul>
|
||||
|
||||
<h4>1.5.2 (2017-02-12)</h4>
|
||||
<h4>1.5.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added privacy policy in Preferences screen</li>
|
||||
|
@ -73,12 +83,12 @@
|
|||
files, such as Documents, Shared and Marks, are now available in the new Files folder
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.5.1 (2017-01-21)</h4>
|
||||
<h4>1.5.1<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed unparseable date: "anyType{}"(at offset 0) error</li>
|
||||
</ul>
|
||||
<h4>1.5.0 (2016-09-01)</h4>
|
||||
<h4>1.5.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">
|
||||
|
@ -86,7 +96,7 @@
|
|||
Added search of recipients
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.4.0 (2016-07-25)</h4>
|
||||
<h4>1.4.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">
|
||||
|
@ -101,7 +111,7 @@
|
|||
Fixed consultation of marks from the student role
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.4 (2016-07-17)</h4>
|
||||
<h4>1.3.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">
|
||||
|
@ -122,7 +132,7 @@
|
|||
Minor improvements
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.3 (2016-01-31)</h4>
|
||||
<h4>1.3.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added social notifications</li>
|
||||
|
@ -133,18 +143,18 @@
|
|||
Now notifications are automatically removed with greater age than 30 days
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.3.2 (2016-01-06)</h4>
|
||||
<h4>1.3.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added permission management on Android 6.0 Marshmallow</li>
|
||||
</ul>
|
||||
<h4>1.3.1 (2015-12-06)</h4>
|
||||
<h4>1.3.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improvements on login screen and create account screen</li>
|
||||
<li type="disc">Now canceled notifications are not downloaded during synchronization</li>
|
||||
</ul>
|
||||
<h4>1.3 (2015-09-03)</h4>
|
||||
<h4>1.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added creation of user accounts</li>
|
||||
|
@ -154,13 +164,13 @@
|
|||
(partial in tests)
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.2.4 (2015-03-15)</h4>
|
||||
<h4>1.2.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Changed scan delay of codes to one second</li>
|
||||
<li type="disc">Now the Downloads module requires Android 3.0 or higher</li>
|
||||
</ul>
|
||||
<h4>1.2.3 (2014-11-30)</h4>
|
||||
<h4>1.2.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added support for barcode scanning in rollcall module</li>
|
||||
|
@ -170,7 +180,7 @@
|
|||
<li type="disc">Now the events list is sorted in rollcall module</li>
|
||||
<li type="disc">Changed scan delay of codes to 2 seconds</li>
|
||||
</ul>
|
||||
<h4>1.2.2 (2014-11-26)</h4>
|
||||
<h4>1.2.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Disabled lateral sliding of notifications</li>
|
||||
|
@ -181,7 +191,7 @@
|
|||
<li type="disc">Fixed screen refresh of users and attendances lists</li>
|
||||
<li type="disc">Now the relationship between events and courses is handled properly</li>
|
||||
</ul>
|
||||
<h4>1.2.1 (2014-11-24)</h4>
|
||||
<h4>1.2.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Now you can send empty attendance listings to mark all attendees as
|
||||
|
@ -192,23 +202,23 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed screen refresh of attendances list</li>
|
||||
</ul>
|
||||
<h4>1.2 (2014-11-23)</h4>
|
||||
<h4>1.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added birthday greetings</li>
|
||||
<li type="disc">Added rollcall module with sending of attendances to SWAD</li>
|
||||
</ul>
|
||||
<h4>1.1.4 (2014-11-11)</h4>
|
||||
<h4>1.1.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed download of notifications due to changes in SWAD</li>
|
||||
</ul>
|
||||
<h4>1.1.3 (2014-10-05)</h4>
|
||||
<h4>1.1.3<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed wrong update of notifications when sliding up the list</li>
|
||||
</ul>
|
||||
<h4>1.1.2 (2014-09-18)</h4>
|
||||
<h4>1.1.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improvements in error messages</li>
|
||||
|
@ -220,7 +230,7 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed typos in changelog</li>
|
||||
</ul>
|
||||
<h4>1.1.1 (2014-09-16)</h4>
|
||||
<h4>1.1.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Now the lateral sliding of the notifications is only available for Android
|
||||
|
@ -233,7 +243,7 @@
|
|||
without being on top of it
|
||||
</li>
|
||||
</ul>
|
||||
<h4>1.1 (2014-09-08)</h4>
|
||||
<h4>1.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Now the notifications are grouped into
|
||||
|
@ -260,7 +270,7 @@
|
|||
</li>
|
||||
<li type="disc">Fixed crash for open downloaded files with no apps to open with</li>
|
||||
</ul>
|
||||
<h4>1.0 (2014-03-26)</h4>
|
||||
<h4>1.0<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">New GUI Holo style</li>
|
||||
|
@ -276,7 +286,7 @@
|
|||
<li type="disc">Disabled rollcall module (pending redesign and integration with SWAD)</li>
|
||||
<li type="disc">Removed unused languages</li>
|
||||
</ul>
|
||||
<h4>0.13 (2014-02-02)</h4>
|
||||
<h4>0.13<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added login screen</li>
|
||||
|
@ -287,7 +297,7 @@
|
|||
when automatic synchronization is enabled
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.12.7 (2013-12-14)</h4>
|
||||
<h4>0.12.7<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added info of seen notifications from SWAD on notifications download</li>
|
||||
|
@ -300,7 +310,7 @@
|
|||
<li type="disc">Fixed error retrieving the list of students on the rollcall module</li>
|
||||
<li type="disc">Fixed error retrieving the tests configuration</li>
|
||||
</ul>
|
||||
<h4>0.12.6 (2013-11-24)</h4>
|
||||
<h4>0.12.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added management of seen notifications</li>
|
||||
|
@ -317,17 +327,17 @@
|
|||
<li type="disc">Fixed black background color when the notifications list is being pulled
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.12.5 (2013-11-10)</h4>
|
||||
<h4>0.12.5<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug that prevented replying messages</li>
|
||||
</ul>
|
||||
<h4>0.12.4 (2013-11-09)</h4>
|
||||
<h4>0.12.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug that prevented consulting practice sessions</li>
|
||||
</ul>
|
||||
<h4>0.12.3 (2013-11-09)</h4>
|
||||
<h4>0.12.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added pull-to-refresh update system to the notifications</li>
|
||||
|
@ -357,12 +367,12 @@
|
|||
<li type="disc">Fixed a bug when trying to download an user picture from an empty URL</li>
|
||||
<li type="disc">Fixed display bug on number of questions input of the tests</li>
|
||||
</ul>
|
||||
<h4>0.12.2 (2013-06-19)</h4>
|
||||
<h4>0.12.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Updated communications with server</li>
|
||||
</ul>
|
||||
<h4>0.12.1 (2013-06-09)</h4>
|
||||
<h4>0.12.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added forumPostCourse notification type</li>
|
||||
|
@ -387,7 +397,7 @@
|
|||
<li type="disc">Fixed error messages display</li>
|
||||
<li type="disc">Modified NULL value detection in server response</li>
|
||||
</ul>
|
||||
<h4>0.12 (2013-04-20)</h4>
|
||||
<h4>0.12<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added new notification types "documentFile", "sharedFile", "enrollment" and
|
||||
|
@ -429,7 +439,7 @@
|
|||
</li>
|
||||
<li type="disc">Fixed non decimal keyboard type for decimal numbers on some devices</li>
|
||||
</ul>
|
||||
<h4>0.11.3 (2013-03-03)</h4>
|
||||
<h4>0.11.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Shows default server in preference summary when the preference value is
|
||||
|
@ -443,7 +453,7 @@
|
|||
preferences change
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11.2 (2013-02-24)</h4>
|
||||
<h4>0.11.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added refresh button on main screen to update courses without clean the
|
||||
|
@ -466,7 +476,7 @@
|
|||
behaviour is exactly the opposite in Android 4.2)
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11.1 (2013-01-26)</h4>
|
||||
<h4>0.11.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added compatibility with screens with basic touch capabilities</li>
|
||||
|
@ -492,7 +502,7 @@
|
|||
descriptors
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.11 (2012-12-15)</h4>
|
||||
<h4>0.11<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added downloads module</li>
|
||||
|
@ -504,7 +514,7 @@
|
|||
functions in SWAD
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.10.1 (2012-11-17)</h4>
|
||||
<h4>0.10.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added Android 4.2 compatibility</li>
|
||||
|
@ -521,7 +531,7 @@
|
|||
<li type="disc">Fixed available choose for groups with real membership</li>
|
||||
<li type="disc">Fixed problem with uppercase letter in notifications without summary</li>
|
||||
</ul>
|
||||
<h4>0.10 (2012-11-09)</h4>
|
||||
<h4>0.10<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added module for enrollment to course groups</li>
|
||||
|
@ -539,7 +549,7 @@
|
|||
<li type="disc">Fixed some bugs in course selection spinner</li>
|
||||
<li type="disc">Fixed bug when checking available connections</li>
|
||||
</ul>
|
||||
<h4>0.9.3 (2012-07-20)</h4>
|
||||
<h4>0.9.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added folders support in server URL</li>
|
||||
|
@ -548,14 +558,14 @@
|
|||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved error messages</li>
|
||||
</ul>
|
||||
<h4>0.9.2 (2012-07-10)</h4>
|
||||
<h4>0.9.2<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">camera.autofocus feature marked as optional in order to fix device
|
||||
incompatibilities
|
||||
</li>
|
||||
</ul>
|
||||
<h4>0.9.1 (2012-07-09)</h4>
|
||||
<h4>0.9.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added DNI with letter (first and last) support and DNI with zeros support
|
||||
|
@ -566,17 +576,17 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed xlarge screens support</li>
|
||||
</ul>
|
||||
<h4>0.9 (2012-07-01)</h4>
|
||||
<h4>0.9<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added RollCall module</li>
|
||||
</ul>
|
||||
<h4>0.8.1 (2012-05-20)</h4>
|
||||
<h4>0.8.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added message replys from open notifications</li>
|
||||
</ul>
|
||||
<h4>0.8 (2012-05-01)</h4>
|
||||
<h4>0.8<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added automatic synchronization of notifications</li>
|
||||
|
@ -597,7 +607,7 @@
|
|||
<li type="disc">Fixed HTML bug in location field of notifications</li>
|
||||
<li type="disc">Fixed br tag bug in notifications</li>
|
||||
</ul>
|
||||
<h4>0.7.2 (2012-02-22)</h4>
|
||||
<h4>0.7.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added notification alerts on status bar</li>
|
||||
|
@ -607,7 +617,7 @@
|
|||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved query statements</li>
|
||||
</ul>
|
||||
<h4>0.7.1 (2012-01-11)</h4>
|
||||
<h4>0.7.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved rendering speed in marks function</li>
|
||||
|
@ -616,12 +626,12 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed rendering errors in marks function</li>
|
||||
</ul>
|
||||
<h4>0.7 (2012-01-10)</h4>
|
||||
<h4>0.7<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added marks function in notifications module</li>
|
||||
</ul>
|
||||
<h4>0.6.2 (2011-12-09)</h4>
|
||||
<h4>0.6.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added Blog URL to preferences screen</li>
|
||||
|
@ -632,7 +642,7 @@
|
|||
<li type="disc">Reinitialized last course selected on database cleaning</li>
|
||||
<li type="disc">Minor changes on error messages</li>
|
||||
</ul>
|
||||
<h4>0.6.1 (2011-11-16)</h4>
|
||||
<h4>0.6.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added Google+ account to preferences screen</li>
|
||||
|
@ -645,7 +655,7 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed menu operation in all activities</li>
|
||||
</ul>
|
||||
<h4>0.6 (2011-11-06)</h4>
|
||||
<h4>0.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added Android 4.0 compatibility</li>
|
||||
|
@ -653,7 +663,7 @@
|
|||
<li type="disc">Added clean database option to application menu</li>
|
||||
<li type="disc">Added name of SWAD's creator to author preferences</li>
|
||||
</ul>
|
||||
<h4>0.5.2 (2011-09-29)</h4>
|
||||
<h4>0.5.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added real names of receivers in "Message Sent" toast</li>
|
||||
|
@ -666,12 +676,12 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug on test questions syncronization</li>
|
||||
</ul>
|
||||
<h4>0.5.1 (2011-09-26)</h4>
|
||||
<h4>0.5.1<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug in reply messages function</li>
|
||||
</ul>
|
||||
<h4>0.5 (2011-09-26)</h4>
|
||||
<h4>0.5<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added messages module</li>
|
||||
|
@ -680,17 +690,17 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Minor fixes</li>
|
||||
</ul>
|
||||
<h4>0.4.5 (2011-07-08)</h4>
|
||||
<h4>0.4.5<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Optimized questions syncronization</li>
|
||||
</ul>
|
||||
<h4>0.4.4 (2011-07-05)</h4>
|
||||
<h4>0.4.4<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Minor fixes</li>
|
||||
</ul>
|
||||
<h4>0.4.3 (2011-06-15)</h4>
|
||||
<h4>0.4.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved tests GUI</li>
|
||||
|
@ -699,7 +709,7 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Minor fixes</li>
|
||||
</ul>
|
||||
<h4>0.4.2 (2011-06-15)</h4>
|
||||
<h4>0.4.2<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Now not answered questions score as 0</li>
|
||||
|
@ -708,7 +718,7 @@
|
|||
</li>
|
||||
<li type="disc">Improved tests GUI</li>
|
||||
</ul>
|
||||
<h4>0.4.1 (2011-06-14)</h4>
|
||||
<h4>0.4.1<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Allowed negative scores on tests</li>
|
||||
|
@ -717,7 +727,7 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug on questions syncronization</li>
|
||||
</ul>
|
||||
<h4>0.4 (2011-06-13)</h4>
|
||||
<h4>0.4<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added tests module</li>
|
||||
|
@ -726,7 +736,7 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Minor fixes</li>
|
||||
</ul>
|
||||
<h4>0.3.10 (2011-05-19)</h4>
|
||||
<h4>0.3.10<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added assignment, survey and unknown notifications</li>
|
||||
|
@ -734,28 +744,28 @@
|
|||
<li type="disc">Added forced relogin if connection time exceeds a certain period</li>
|
||||
<li type="disc">Added incorrect user or password error message</li>
|
||||
</ul>
|
||||
<h4>0.3.9 (2011-05-03)</h4>
|
||||
<h4>0.3.9<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed empty fields bug on notifications module</li>
|
||||
</ul>
|
||||
<h4>0.3.8 (2011-04-27)</h4>
|
||||
<h4>0.3.8<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed bug on cleaning old notifications</li>
|
||||
</ul>
|
||||
<h4>0.3.7 (2011-04-14)</h4>
|
||||
<h4>0.3.7<h4>
|
||||
<ul>
|
||||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed notifications bug in surname</li>
|
||||
</ul>
|
||||
<h4>0.3.6 (2011-04-13)</h4>
|
||||
<h4>0.3.6<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added notification details</li>
|
||||
<li type="disc">Added upgrade dialog</li>
|
||||
</ul>
|
||||
<h4>0.3.5 (2011-04-05)</h4>
|
||||
<h4>0.3.5<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added action bar</li>
|
||||
|
@ -766,7 +776,7 @@
|
|||
<li type="disc">Improved GUI</li>
|
||||
<li type="disc">Improved performance</li>
|
||||
</ul>
|
||||
<h4>0.3.4 (2011-03-27)</h4>
|
||||
<h4>0.3.4<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved GUI</li>
|
||||
|
@ -775,12 +785,12 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed minor errors on error messages</li>
|
||||
</ul>
|
||||
<h4>0.3.3 (2011-03-27)</h4>
|
||||
<h4>0.3.3<h4>
|
||||
<ul>
|
||||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Redesigned GUI</li>
|
||||
</ul>
|
||||
<h4>0.3.2 (2011-03-24)</h4>
|
||||
<h4>0.3.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added first run dialog</li>
|
||||
|
@ -789,7 +799,7 @@
|
|||
<lh class="update">[UPDATES]</lh>
|
||||
<li type="disc">Improved preferences screen</li>
|
||||
</ul>
|
||||
<h4>0.3.1 (2011-03-21)</h4>
|
||||
<h4>0.3.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added automatic saving of preferences</li>
|
||||
|
@ -804,13 +814,13 @@
|
|||
<lh class="fix">[FIXES]</lh>
|
||||
<li type="disc">Fixed compatibility issues with some devices</li>
|
||||
</ul>
|
||||
<h4>0.3 (2011-03-08)</h4>
|
||||
<h4>0.3<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added notifications module</li>
|
||||
<li type="disc">Added Android 3.0 Honeycomb compatibility</li>
|
||||
</ul>
|
||||
<h4>0.2.2 (2011-01-18)</h4>
|
||||
<h4>0.2.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added connection check</li>
|
||||
|
@ -827,19 +837,19 @@
|
|||
<li type="disc">Fixed launcher icons</li>
|
||||
<li type="disc">Fixed Android 1.6 compatibility issues</li>
|
||||
</ul>
|
||||
<h4>0.2.1 (2010-12-15)</h4>
|
||||
<h4>0.2.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added Android 2.3 Gingerbread compatibility</li>
|
||||
<li type="disc">Completed login module</li>
|
||||
</ul>
|
||||
<h4>0.2 (2010-12-08)</h4>
|
||||
<h4>0.2<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added auto logout when user id or password changes</li>
|
||||
<li type="disc">Added initial database</li>
|
||||
</ul>
|
||||
<h4>0.1.1 (2010-11-06)</h4>
|
||||
<h4>0.1.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">Added background image to main activity</li>
|
||||
|
@ -848,7 +858,7 @@
|
|||
<lh class="fix">[Fixes]</lh>
|
||||
<li type="disc">Minor fixes on main screen</li>
|
||||
</ul>
|
||||
<h4>0.1 (2010-11-03)</h4>
|
||||
<h4>0.1<h4>
|
||||
<ul>
|
||||
<lh class="new">[NEW]</lh>
|
||||
<li type="disc">First release</li>
|
||||
|
|
|
@ -124,7 +124,6 @@
|
|||
plataforma de teleformación SWAD.\nObtenlo gratis aquí:
|
||||
https://play.google.com/store/apps/details?id=es.ugr.swad.swadroid</string>
|
||||
<string name="blogTitle">Blog</string>
|
||||
<string name="prefCatSyncTitle">Sincronización</string>
|
||||
<string name="prefSyncTimeTitle">Frecuencia de sincronización</string>
|
||||
<string name="prefSyncTimeSummary">Frecuencia de sincronización de las notificaciones</string>
|
||||
<string name="prefSyncEnableTitle">Sincronización automática</string>
|
||||
|
@ -356,4 +355,5 @@
|
|||
<string name="checkIn">Hora</string>
|
||||
<string name="lostLocation">Ubicación no encontrada</string>
|
||||
<string name="nearestLocation">Punto de acceso inalámbrico más cercano</string>
|
||||
<string name="appRunningBackground">SWADroid se está ejecutando</string>
|
||||
</resources>
|
||||
|
|
|
@ -372,4 +372,5 @@
|
|||
<string name="checkIn">Time</string>
|
||||
<string name="lostLocation">Location not found</string>
|
||||
<string name="nearestLocation">Nearest wireless access point</string>
|
||||
<string name="appRunningBackground">SWADroid is running</string>
|
||||
</resources>
|
||||
|
|
|
@ -66,26 +66,6 @@
|
|||
android:key="sharePref"
|
||||
android:summary="@string/shareBodyMsg"
|
||||
android:title="@string/shareTitle_menu" />
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="blogPref"
|
||||
android:summary="@string/blogURL"
|
||||
android:title="@string/blogTitle" />
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="twitterPref"
|
||||
android:summary="@string/twitterUser"
|
||||
android:title="@string/twitterTitle" />
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="facebookPref"
|
||||
android:summary="@string/facebookURL"
|
||||
android:title="@string/facebookTitle" />
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="telegramPref"
|
||||
android:summary="@string/telegramURL"
|
||||
android:title="@string/telegramTitle" />
|
||||
<Preference
|
||||
android:defaultValue=""
|
||||
android:key="privacyPolicyPref"
|
||||
|
|
|
@ -5,11 +5,11 @@ buildscript {
|
|||
google()
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:7.2.0'
|
||||
classpath 'com.google.gms:google-services:4.3.10'
|
||||
classpath 'com.android.tools.build:gradle:8.2.1'
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
allprojects {
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
|
|
@ -1,189 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - swadroid_db_crypt - Anomalies</title>
|
||||
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li id='current'><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - Anomalies</span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width='100%'>
|
||||
<tr><td class='container' align='right' valign='top' colspan='2'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td></tr>
|
||||
<tr>
|
||||
<td class='container'><b>Things that might not be 'quite right' about your schema:</b></td>
|
||||
<td class='container' align='right'>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<ul>
|
||||
<li>
|
||||
<b>Columns whose name and type imply a relationship to another table's primary key:</b>
|
||||
<br>Anomaly not detected<p></li>
|
||||
<li>
|
||||
<b>Tables without indexes:</b>
|
||||
<table class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Table</th><th>Rows</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/courses.html'>courses</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/group_course.html'>group_course</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/group_grouptypes.html'>group_grouptypes</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/group_types.html'>group_types</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/groups.html'>groups</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/notifications.html'>notifications</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/practice_sessions.html'>practice_sessions</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/rollcall.html'>rollcall</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_answers.html'>tst_answers</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_config.html'>tst_config</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_question_answers.html'>tst_question_answers</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_question_tags.html'>tst_question_tags</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_questions.html'>tst_questions</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_questions_course.html'>tst_questions_course</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/tst_tags.html'>tst_tags</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/users.html'>users</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/users_courses.html'>users_courses</a></td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
18 instances of anomaly detected<p></li>
|
||||
<li>
|
||||
<b>Columns that are flagged as both 'nullable' and 'must be unique':</b>
|
||||
<br>Anomaly not detected<p></li>
|
||||
<li>
|
||||
<b>Tables that contain a single column:</b><table class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Table</th>
|
||||
<th>Column</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td><td class='detail'>locale</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
1 instance of anomaly detected<p></li>
|
||||
<li>
|
||||
<b>Tables with incrementing column names, potentially indicating denormalization:</b>
|
||||
<table class='dataTable' border='1' rules='groups'>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Table</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/notifications.html'>notifications</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'><a href='tables/users.html'>users</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
2 instances of anomaly detected<p></li>
|
||||
<li>
|
||||
<b>Columns whose default value is the word 'NULL' or 'null', but the SQL NULL value may have been intended:</b>
|
||||
<br>Anomaly not detected<p></li>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,101 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - swadroid_db_crypt - Constraints</title>
|
||||
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li id='current'><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - Constraints</span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class='indent'>
|
||||
<table width='100%'>
|
||||
<tr><td class='container' valign='bottom'><b>
|
||||
0 Foreign Key Constraints:</b>
|
||||
</td><td class='container' align='right'>
|
||||
<table>
|
||||
<tr><td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td></tr>
|
||||
<tr><td class='container'>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
</td></tr>
|
||||
</table><br>
|
||||
<table class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Constraint Name</th>
|
||||
<th>Child Column</th>
|
||||
<th>Parent Column</th>
|
||||
<th>Delete Rule</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class='detail' valign='top' colspan='4'>None detected</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<a name='checkConstraints'></a><p>
|
||||
<b>Check Constraints:</b>
|
||||
<TABLE class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Table</th>
|
||||
<th>Constraint Name</th>
|
||||
<th>Constraint</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class='detail' valign='top' colspan='3'>None detected</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,18 +0,0 @@
|
|||
users_courses
|
||||
users
|
||||
tst_tags
|
||||
tst_questions_course
|
||||
tst_questions
|
||||
tst_question_tags
|
||||
tst_question_answers
|
||||
tst_config
|
||||
tst_answers
|
||||
rollcall
|
||||
practice_sessions
|
||||
notifications
|
||||
groups
|
||||
group_types
|
||||
group_grouptypes
|
||||
group_course
|
||||
courses
|
||||
android_metadata
|
|
@ -1,30 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "android_metadata" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"android_metadata" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">android_metadata</TD></TR>
|
||||
<TR><TD PORT="locale" COLSPAN="3" ALIGN="LEFT">locale</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/android_metadata.html"
|
||||
tooltip="android_metadata"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1008 B |
|
@ -1,34 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "courses" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"courses" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">courses</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="userRole" COLSPAN="3" ALIGN="LEFT">userRole</TD></TR>
|
||||
<TR><TD PORT="shortName" COLSPAN="3" ALIGN="LEFT">shortName</TD></TR>
|
||||
<TR><TD PORT="fullName" COLSPAN="3" ALIGN="LEFT">fullName</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/courses.html"
|
||||
tooltip="courses"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,32 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "group_course" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"group_course" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_course</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
|
||||
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/group_course.html"
|
||||
tooltip="group_course"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,32 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "group_grouptypes" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"group_grouptypes" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_grouptypes</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="grpTypCod" COLSPAN="3" ALIGN="LEFT">grpTypCod</TD></TR>
|
||||
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/group_grouptypes.html"
|
||||
tooltip="group_grouptypes"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,36 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "group_types" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"group_types" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">group_types</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="courseCode" COLSPAN="3" ALIGN="LEFT">courseCode</TD></TR>
|
||||
<TR><TD PORT="groupTypeName" COLSPAN="3" ALIGN="LEFT">groupTypeName</TD></TR>
|
||||
<TR><TD PORT="mandatory" COLSPAN="3" ALIGN="LEFT">mandatory</TD></TR>
|
||||
<TR><TD PORT="multiple" COLSPAN="3" ALIGN="LEFT">multiple</TD></TR>
|
||||
<TR><TD PORT="openTime" COLSPAN="3" ALIGN="LEFT">openTime</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/group_types.html"
|
||||
tooltip="group_types"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,37 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "groups" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"groups" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">groups</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="groupName" COLSPAN="3" ALIGN="LEFT">groupName</TD></TR>
|
||||
<TR><TD PORT="maxStudents" COLSPAN="3" ALIGN="LEFT">maxStudents</TD></TR>
|
||||
<TR><TD PORT="students" COLSPAN="3" ALIGN="LEFT">students</TD></TR>
|
||||
<TR><TD PORT="open" COLSPAN="3" ALIGN="LEFT">open</TD></TR>
|
||||
<TR><TD PORT="fileZones" COLSPAN="3" ALIGN="LEFT">fileZones</TD></TR>
|
||||
<TR><TD PORT="member" COLSPAN="3" ALIGN="LEFT">member</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/groups.html"
|
||||
tooltip="groups"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.9 KiB |
|
@ -1,44 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "notifications" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"notifications" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">notifications</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="notifCode" COLSPAN="3" ALIGN="LEFT">notifCode</TD></TR>
|
||||
<TR><TD PORT="eventCode" COLSPAN="3" ALIGN="LEFT">eventCode</TD></TR>
|
||||
<TR><TD PORT="eventType" COLSPAN="3" ALIGN="LEFT">eventType</TD></TR>
|
||||
<TR><TD PORT="eventTime" COLSPAN="3" ALIGN="LEFT">eventTime</TD></TR>
|
||||
<TR><TD PORT="userSurname1" COLSPAN="3" ALIGN="LEFT">userSurname1</TD></TR>
|
||||
<TR><TD PORT="userSurname2" COLSPAN="3" ALIGN="LEFT">userSurname2</TD></TR>
|
||||
<TR><TD PORT="userFirstname" COLSPAN="3" ALIGN="LEFT">userFirstname</TD></TR>
|
||||
<TR><TD PORT="userPhoto" COLSPAN="3" ALIGN="LEFT">userPhoto</TD></TR>
|
||||
<TR><TD PORT="location" COLSPAN="3" ALIGN="LEFT">location</TD></TR>
|
||||
<TR><TD PORT="summary" COLSPAN="3" ALIGN="LEFT">summary</TD></TR>
|
||||
<TR><TD PORT="status" COLSPAN="3" ALIGN="LEFT">status</TD></TR>
|
||||
<TR><TD PORT="content" COLSPAN="3" ALIGN="LEFT">content</TD></TR>
|
||||
<TR><TD PORT="seenLocal" COLSPAN="3" ALIGN="LEFT">seenLocal</TD></TR>
|
||||
<TR><TD PORT="seenRemote" COLSPAN="3" ALIGN="LEFT">seenRemote</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/notifications.html"
|
||||
tooltip="notifications"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 3.1 KiB |
|
@ -1,36 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "practice_sessions" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"practice_sessions" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">practice_sessions</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
|
||||
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
|
||||
<TR><TD PORT="startDate" COLSPAN="3" ALIGN="LEFT">startDate</TD></TR>
|
||||
<TR><TD PORT="endDate" COLSPAN="3" ALIGN="LEFT">endDate</TD></TR>
|
||||
<TR><TD PORT="site" COLSPAN="3" ALIGN="LEFT">site</TD></TR>
|
||||
<TR><TD PORT="description" COLSPAN="3" ALIGN="LEFT">description</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/practice_sessions.html"
|
||||
tooltip="practice_sessions"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,22 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "compactRelationshipsDiagram" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
label="\nGenerated by SchemaSpy"
|
||||
labeljust="l"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
}
|
|
@ -1,33 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "rollcall" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"rollcall" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">rollcall</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="sessCod" COLSPAN="3" ALIGN="LEFT">sessCod</TD></TR>
|
||||
<TR><TD PORT="usrCod" COLSPAN="3" ALIGN="LEFT">usrCod</TD></TR>
|
||||
<TR><TD PORT="comments" COLSPAN="3" ALIGN="LEFT">comments</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/rollcall.html"
|
||||
tooltip="rollcall"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.2 KiB |
|
@ -1,34 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_answers" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_answers" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_answers</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="ansInd" COLSPAN="3" ALIGN="LEFT">ansInd</TD></TR>
|
||||
<TR><TD PORT="answer" COLSPAN="3" ALIGN="LEFT">answer</TD></TR>
|
||||
<TR><TD PORT="correct" COLSPAN="3" ALIGN="LEFT">correct</TD></TR>
|
||||
<TR><TD PORT="answerFeedback" COLSPAN="3" ALIGN="LEFT">answerFeedback</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_answers.html"
|
||||
tooltip="tst_answers"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.6 KiB |
|
@ -1,36 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_config" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_config" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_config</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="min" COLSPAN="3" ALIGN="LEFT">min</TD></TR>
|
||||
<TR><TD PORT="def" COLSPAN="3" ALIGN="LEFT">def</TD></TR>
|
||||
<TR><TD PORT="max" COLSPAN="3" ALIGN="LEFT">max</TD></TR>
|
||||
<TR><TD PORT="feedback" COLSPAN="3" ALIGN="LEFT">feedback</TD></TR>
|
||||
<TR><TD PORT="editTime" COLSPAN="3" ALIGN="LEFT">editTime</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_config.html"
|
||||
tooltip="tst_config"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,32 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_question_answers" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_question_answers" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_question_answers</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
|
||||
<TR><TD PORT="ansCod" COLSPAN="3" ALIGN="LEFT">ansCod</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_question_answers.html"
|
||||
tooltip="tst_question_answers"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB |
|
@ -1,33 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_question_tags" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_question_tags" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_question_tags</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
|
||||
<TR><TD PORT="tagCod" COLSPAN="3" ALIGN="LEFT">tagCod</TD></TR>
|
||||
<TR><TD PORT="tagInd" COLSPAN="3" ALIGN="LEFT">tagInd</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_question_tags.html"
|
||||
tooltip="tst_question_tags"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.5 KiB |
|
@ -1,35 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_questions" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_questions" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_questions</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="ansType" COLSPAN="3" ALIGN="LEFT">ansType</TD></TR>
|
||||
<TR><TD PORT="shuffle" COLSPAN="3" ALIGN="LEFT">shuffle</TD></TR>
|
||||
<TR><TD PORT="stem" COLSPAN="3" ALIGN="LEFT">stem</TD></TR>
|
||||
<TR><TD PORT="feedback" COLSPAN="3" ALIGN="LEFT">feedback</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_questions.html"
|
||||
tooltip="tst_questions"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.7 KiB |
|
@ -1,32 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_questions_course" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_questions_course" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_questions_course</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="qstCod" COLSPAN="3" ALIGN="LEFT">qstCod</TD></TR>
|
||||
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_questions_course.html"
|
||||
tooltip="tst_questions_course"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.3 KiB |
|
@ -1,32 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "tst_tags" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"tst_tags" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">tst_tags</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="id" COLSPAN="3" ALIGN="LEFT">id</TD></TR>
|
||||
<TR><TD PORT="tagTxt" COLSPAN="3" ALIGN="LEFT">tagTxt</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/tst_tags.html"
|
||||
tooltip="tst_tags"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 986 B |
|
@ -1,38 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "users" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"users" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">users</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="userCode" COLSPAN="3" ALIGN="LEFT">userCode</TD></TR>
|
||||
<TR><TD PORT="userID" COLSPAN="3" ALIGN="LEFT">userID</TD></TR>
|
||||
<TR><TD PORT="userNickname" COLSPAN="3" ALIGN="LEFT">userNickname</TD></TR>
|
||||
<TR><TD PORT="userSurname1" COLSPAN="3" ALIGN="LEFT">userSurname1</TD></TR>
|
||||
<TR><TD PORT="userSurname2" COLSPAN="3" ALIGN="LEFT">userSurname2</TD></TR>
|
||||
<TR><TD PORT="userFirstname" COLSPAN="3" ALIGN="LEFT">userFirstname</TD></TR>
|
||||
<TR><TD PORT="photoPath" COLSPAN="3" ALIGN="LEFT">photoPath</TD></TR>
|
||||
<TR><TD PORT="userRole" COLSPAN="3" ALIGN="LEFT">userRole</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/users.html"
|
||||
tooltip="users"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 2.1 KiB |
|
@ -1,33 +0,0 @@
|
|||
// dot 2.26.3 on Linux 3.11.0-12-generic
|
||||
// SchemaSpy rev 590
|
||||
digraph "users_courses" {
|
||||
graph [
|
||||
rankdir="RL"
|
||||
bgcolor="#f7f7f7"
|
||||
nodesep="0.18"
|
||||
ranksep="0.46"
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
];
|
||||
node [
|
||||
fontname="Helvetica"
|
||||
fontsize="11"
|
||||
shape="plaintext"
|
||||
];
|
||||
edge [
|
||||
arrowsize="0.8"
|
||||
];
|
||||
"users_courses" [
|
||||
label=<
|
||||
<TABLE BORDER="0" CELLBORDER="1" CELLSPACING="0" BGCOLOR="#ffffff">
|
||||
<TR><TD COLSPAN="3" BGCOLOR="#9bab96" ALIGN="CENTER">users_courses</TD></TR>
|
||||
<TR><TD PORT="_id" COLSPAN="3" ALIGN="LEFT">_id</TD></TR>
|
||||
<TR><TD PORT="userCode" COLSPAN="3" ALIGN="LEFT">userCode</TD></TR>
|
||||
<TR><TD PORT="crsCod" COLSPAN="3" ALIGN="LEFT">crsCod</TD></TR>
|
||||
<TR><TD PORT="grpCod" COLSPAN="3" ALIGN="LEFT">grpCod</TD></TR>
|
||||
<TR><TD ALIGN="LEFT" BGCOLOR="#f7f7f7"> </TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7">0 rows</TD><TD ALIGN="RIGHT" BGCOLOR="#f7f7f7"> </TD></TR>
|
||||
</TABLE>>
|
||||
URL="tables/users_courses.html"
|
||||
tooltip="users_courses"
|
||||
];
|
||||
}
|
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 311 B |
Before Width: | Height: | Size: 645 B |
Before Width: | Height: | Size: 1.8 KiB |
|
@ -1,258 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - swadroid_db_crypt</title>
|
||||
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
|
||||
$(function(){
|
||||
associate($('#showTables'), $('.tbl'));
|
||||
associate($('#showViews'), $('.view'));
|
||||
jQuery.fn.alternateRowColors = function() {
|
||||
$('tbody tr:visible').each(function(i) {
|
||||
if (i % 2 == 0) {
|
||||
$(this).removeClass('even').addClass('odd');
|
||||
} else {
|
||||
$(this).removeClass('odd').addClass('even');
|
||||
}
|
||||
});
|
||||
return this;
|
||||
};
|
||||
$('#showTables, #showViews').click(function() {
|
||||
$('table.dataTable').alternateRowColors();
|
||||
});
|
||||
$('table.dataTable').alternateRowColors();
|
||||
})
|
||||
</SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li id='current'><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span></span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width='100%'>
|
||||
<tr><td class='container'>
|
||||
<span class='container'>Generated by <span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span> on jue ene 30 23:37 CET 2014</span>
|
||||
</td></tr>
|
||||
<tr>
|
||||
<td class='container'>Database Type: SQLite - 3.7.15 </td>
|
||||
<td class='container' align='right' valign='top' rowspan='3'>
|
||||
<a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a><br>
|
||||
<br><div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='container'><br><a href='swadroid_db_crypt.xml' title='XML Representation'>XML Representation</a><br><a href='insertionOrder.txt' title='Useful for loading data into a database'>Insertion Order</a> <a href='deletionOrder.txt' title='Useful for purging data from a database'>Deletion Order</a> (for database loading/purging scripts)</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class='indent'>
|
||||
<p><b><label for='showTables' style='display:none;'><input type='checkbox' id='showTables' checked></label>
|
||||
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
|
||||
</b>
|
||||
<table class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup class='comment'>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th valign='bottom'>Table</th>
|
||||
<th align='right' valign='bottom'>Children</th>
|
||||
<th align='right' valign='bottom'>Parents</th>
|
||||
<th align='right' valign='bottom'>Columns</th>
|
||||
<th align='right' valign='bottom'>Rows</th>
|
||||
<th class='comment' align='left' valign='bottom'>Comments</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/android_metadata.html'>android_metadata</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>1</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/courses.html'>courses</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>5</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_course.html'>group_course</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>3</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_grouptypes.html'>group_grouptypes</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>3</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/group_types.html'>group_types</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>7</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/groups.html'>groups</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>8</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/notifications.html'>notifications</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>15</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/practice_sessions.html'>practice_sessions</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>7</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/rollcall.html'>rollcall</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>4</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_answers.html'>tst_answers</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>5</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_config.html'>tst_config</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>7</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_question_answers.html'>tst_question_answers</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>3</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_question_tags.html'>tst_question_tags</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>4</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_questions.html'>tst_questions</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>6</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_questions_course.html'>tst_questions_course</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>3</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/tst_tags.html'>tst_tags</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>3</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/users.html'>users</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>9</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='tbl' valign='top'> <td class='detail'><a href='tables/users_courses.html'>users_courses</a></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'></td>
|
||||
<td class='detail' align='right'>4</td>
|
||||
<td class='detail' align='right'>0</td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'> </td>
|
||||
</tr>
|
||||
<tr class='tbl'>
|
||||
<td class='detail'><b>18 Tables</b></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail' align='right'><b>97</b></td>
|
||||
<td class='detail' align='right'><b>0</b></td>
|
||||
<td class='comment detail'> </td>
|
||||
</tr>
|
||||
<tr class='view'>
|
||||
<td class='detail'><b>0 Views</b></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail'> </td>
|
||||
<td class='detail' align='right'><b>0</b></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'> </td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,18 +0,0 @@
|
|||
android_metadata
|
||||
courses
|
||||
group_course
|
||||
group_grouptypes
|
||||
group_types
|
||||
groups
|
||||
notifications
|
||||
practice_sessions
|
||||
rollcall
|
||||
tst_answers
|
||||
tst_config
|
||||
tst_question_answers
|
||||
tst_question_tags
|
||||
tst_questions
|
||||
tst_questions_course
|
||||
tst_tags
|
||||
users
|
||||
users_courses
|
154
doc/ER_db/jquery.js
vendored
|
@ -1,154 +0,0 @@
|
|||
/*!
|
||||
* jQuery JavaScript Library v1.4.2
|
||||
* http://jquery.com/
|
||||
*
|
||||
* Copyright 2010, John Resig
|
||||
* Dual licensed under the MIT or GPL Version 2 licenses.
|
||||
* http://jquery.org/license
|
||||
*
|
||||
* Includes Sizzle.js
|
||||
* http://sizzlejs.com/
|
||||
* Copyright 2010, The Dojo Foundation
|
||||
* Released under the MIT, BSD, and GPL Licenses.
|
||||
*
|
||||
* Date: Sat Feb 13 22:33:48 2010 -0500
|
||||
*/
|
||||
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
|
||||
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
|
||||
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
|
||||
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
|
||||
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
|
||||
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
|
||||
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
|
||||
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
|
||||
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
|
||||
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
|
||||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
|
||||
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
|
||||
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
|
||||
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
|
||||
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
|
||||
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
|
||||
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
|
||||
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
|
||||
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
|
||||
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
|
||||
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
|
||||
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
|
||||
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
|
||||
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
|
||||
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
|
||||
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
|
||||
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
|
||||
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
|
||||
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
|
||||
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
|
||||
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
|
||||
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
|
||||
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
|
||||
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
|
||||
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
|
||||
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
|
||||
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
|
||||
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
|
||||
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
|
||||
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
|
||||
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
|
||||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
|
||||
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
|
||||
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
|
||||
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
|
||||
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
|
||||
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
|
||||
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
|
||||
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
|
||||
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
|
||||
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
|
||||
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
|
||||
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
|
||||
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
|
||||
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
|
||||
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
|
||||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
|
||||
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
|
||||
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF-]|\\.)+)/,
|
||||
CLASS:/\.((?:[\w\u00c0-\uFFFF-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
|
||||
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
|
||||
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
|
||||
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
|
||||
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
|
||||
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
|
||||
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
|
||||
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
|
||||
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
|
||||
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
|
||||
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
|
||||
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
|
||||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
|
||||
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
|
||||
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
|
||||
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
|
||||
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
|
||||
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
|
||||
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
|
||||
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
|
||||
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
|
||||
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
|
||||
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
|
||||
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
|
||||
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
|
||||
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
|
||||
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
|
||||
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
|
||||
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
|
||||
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
|
||||
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
|
||||
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
|
||||
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
|
||||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
|
||||
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
|
||||
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
|
||||
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
|
||||
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
|
||||
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
|
||||
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
|
||||
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
|
||||
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
|
||||
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
|
||||
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
|
||||
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
|
||||
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
|
||||
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
|
||||
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
|
||||
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
|
||||
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
|
||||
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
|
||||
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
|
||||
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
|
||||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
|
||||
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
|
||||
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
|
||||
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
|
||||
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
|
||||
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
|
||||
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
|
||||
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
|
||||
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
|
||||
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
|
||||
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
|
||||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
|
||||
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
|
||||
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
|
||||
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
|
||||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
|
||||
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
|
||||
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
|
||||
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
|
||||
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
|
||||
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
|
||||
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
|
||||
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
|
||||
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
|
||||
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
|
||||
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);
|
|
@ -1,83 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - swadroid_db_crypt - All Relationships</title>
|
||||
<link rel=stylesheet href='schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='schemaSpy.js'></SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li id='current'><a href='relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>SchemaSpy Analysis of <span title='Database'>swadroid_db_crypt</span> - All Relationships</span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table class='container' width='100%'>
|
||||
<tr><td class='container'>
|
||||
<span class='container'>Generated by <span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span> on jue ene 30 23:37 CET 2014</span>
|
||||
</td>
|
||||
<td class='container' align='right' valign='top' rowspan='2'>
|
||||
<table class='legend' border='0'>
|
||||
<tr>
|
||||
<td class='dataTable' valign='bottom'>Legend:</td>
|
||||
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
|
||||
</tr>
|
||||
<tr><td class='container' colspan='2'>
|
||||
<table class='dataTable' border='1'>
|
||||
<tbody>
|
||||
<tr><td class='primaryKey'>Primary key columns</td></tr>
|
||||
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
|
||||
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
|
||||
<tr class='impliedRelationship'><td class='legendDetail'>Dashed lines show implied relationships</td></tr>
|
||||
<tr><td class='legendDetail'>< <em>n</em> > number of related tables</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</td></tr>
|
||||
<tr><td class='container' align='left' valign='top'>
|
||||
No relationships were detected in the schema.
|
||||
</td></tr>
|
||||
<tr><td class='container' align='left' valign='top'>
|
||||
<form name='options' action=''>
|
||||
</form>
|
||||
</td></tr></table>
|
||||
<table width="100%"><tr><td class="container">
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,277 +0,0 @@
|
|||
/* required colors MUST be specified in RGB hex notation or the diagrams won't have correct colors */
|
||||
|
||||
body {
|
||||
color: #000;
|
||||
background-color: #F7F7F7;
|
||||
font-family: arial, geneva, helvetica, lucida, sans-serif;
|
||||
margin: 0 0 0 0;
|
||||
padding: 0px;
|
||||
}
|
||||
|
||||
/* background must be specified for it to propagate into diagrams */
|
||||
.content {
|
||||
margin: 0px;
|
||||
background: #F7F7F7;
|
||||
border: 0 0;
|
||||
padding:.4em;
|
||||
}
|
||||
|
||||
/* background-color must be specified for th to propagate into diagrams */
|
||||
th {
|
||||
background-color: #9BAB96;
|
||||
text-align: left;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
/* background-color must be specified for td to propagate into diagrams */
|
||||
td {
|
||||
background-color: #ffffff;
|
||||
}
|
||||
|
||||
tr.even td.detail {
|
||||
}
|
||||
|
||||
tr.odd td.detail {
|
||||
background-color: #F7F7F7;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 125%;
|
||||
}
|
||||
|
||||
/* background must be specified for .primaryKey to propagate into diagrams */
|
||||
.primaryKey {
|
||||
background: #BED1B8;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
/* background must be specified for .indexedColumn to propagate into diagrams */
|
||||
.indexedColumn {
|
||||
background: #F4F7DA;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
/* background must be specified for .excludedColumn to propagate into diagrams */
|
||||
.excludedColumn {
|
||||
background: #C0C0C0;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
/* background must be specified for .selectedTable to propagate into diagrams */
|
||||
.selectedTable {
|
||||
background: #A9AB96;
|
||||
}
|
||||
|
||||
.detail {
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
table {
|
||||
border-style: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.impliedRelationship {
|
||||
display: none;
|
||||
font-style: italic;
|
||||
color: #183118
|
||||
}
|
||||
|
||||
.dataTable {
|
||||
font-size: 85%;
|
||||
background-color: #F7F7F7;
|
||||
}
|
||||
|
||||
.heading {
|
||||
background: transparent;
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.header {
|
||||
color: #000000;
|
||||
background: transparent;
|
||||
font-weight: bold;
|
||||
font-size: 130%;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.description {
|
||||
display: block;
|
||||
padding: 8px 0px;
|
||||
}
|
||||
|
||||
.signature {
|
||||
font-size: 105%;
|
||||
font-weight: bold;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.container {
|
||||
background-color: #F7F7F7;
|
||||
padding: 0px 0px;
|
||||
}
|
||||
|
||||
.legend {
|
||||
display: none;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.legendDetail {
|
||||
background-color: #F7F7F7;
|
||||
padding: 0px 4px;
|
||||
|
||||
font-style: normal;
|
||||
color: #000000
|
||||
}
|
||||
|
||||
.relatedTable {
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
.relatedKey {
|
||||
display: none;
|
||||
padding: 0px -4px 0px 4px;
|
||||
}
|
||||
|
||||
.constraint {
|
||||
display: none;
|
||||
text-align: right;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
.comment {
|
||||
display: none;
|
||||
text-align: left;
|
||||
padding: 0px 4px;
|
||||
}
|
||||
|
||||
.impliedNotOrphan {
|
||||
}
|
||||
|
||||
.excludedRelationship {
|
||||
font-size: 85%;
|
||||
}
|
||||
|
||||
.degrees {
|
||||
}
|
||||
|
||||
/* don't display the diagrams until we know what to display */
|
||||
.diagram {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.indent {
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
a:link {
|
||||
color: #489148;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #183118;
|
||||
}
|
||||
|
||||
.sortedByColumn {
|
||||
background-color: #6C7769;
|
||||
}
|
||||
|
||||
.notSortedByColumn {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
.viewDefinition {
|
||||
font-size: 90%;
|
||||
background-color: #ffffff;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
float: left;
|
||||
padding: 4px;
|
||||
font-family: "Courier New", Courier, monospace
|
||||
}
|
||||
|
||||
.viewReferences {
|
||||
font-size: 90%;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
/* wrap around divs that float so they "take up space" */
|
||||
div.spacer {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.preFormatted {
|
||||
white-space: pre;
|
||||
}
|
||||
|
||||
/* Tabs from http://www.alistapart.com/articles/slidingdoors/ */
|
||||
|
||||
/* resolve an issue with always having a scrollbar for #header */
|
||||
#headerHolder {
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
border: 1px solid black;
|
||||
border-bottom-style: none;
|
||||
}
|
||||
|
||||
#header {
|
||||
float:left;
|
||||
width: 100%;
|
||||
background:#BED1B8 url("images/background.gif") repeat-x bottom;
|
||||
font-size:80%;
|
||||
line-height:normal;
|
||||
}
|
||||
|
||||
#header ul {
|
||||
margin:0;
|
||||
padding:10px 10px 0;
|
||||
list-style:none;
|
||||
}
|
||||
|
||||
#header li {
|
||||
float:left;
|
||||
background:url("images/tabLeft.gif") no-repeat left top;
|
||||
margin:0;
|
||||
padding:0 0 0 9px;
|
||||
border-bottom:1px solid #000;
|
||||
}
|
||||
|
||||
#header a {
|
||||
float:left;
|
||||
display:block;
|
||||
width:.1em;
|
||||
background:url("images/tabRight.gif") no-repeat right top;
|
||||
padding:5px 10px 4px 1px;
|
||||
text-decoration:none;
|
||||
font-weight:bold;
|
||||
color:#F4F7DA;
|
||||
}
|
||||
|
||||
#header > ul a {width:auto;}
|
||||
/* Commented Backslash Hack hides rule from IE5-Mac \*/
|
||||
#header a {float:none;}
|
||||
/* End IE5-Mac hack */
|
||||
|
||||
#header a:hover {
|
||||
color:#333;
|
||||
}
|
||||
|
||||
#header #current {
|
||||
background-position:0 -150px;
|
||||
border-width:0;
|
||||
}
|
||||
|
||||
#header #current a {
|
||||
background-position:100% -150px;
|
||||
padding-bottom:5px;
|
||||
color:#000;
|
||||
}
|
||||
|
||||
#header li:hover, #header li:hover a {
|
||||
background-position:0% -150px;
|
||||
color:#9BAB96;
|
||||
}
|
||||
|
||||
#header li:hover a {
|
||||
background-position:100% -150px;
|
||||
}
|
|
@ -1,97 +0,0 @@
|
|||
// table-based pages are expected to set 'table' to their name
|
||||
var table = null;
|
||||
|
||||
// sync target's visibility with the state of checkbox
|
||||
function sync(cb, target) {
|
||||
var checked = cb.attr('checked');
|
||||
var displayed = target.css('display') != 'none';
|
||||
if (checked != displayed) {
|
||||
if (checked)
|
||||
target.show();
|
||||
else
|
||||
target.hide();
|
||||
}
|
||||
}
|
||||
|
||||
// sync target's visibility with the inverse of the state of checkbox
|
||||
function unsync(cb, target) {
|
||||
var checked = cb.attr('checked');
|
||||
var displayed = target.css('display') != 'none';
|
||||
if (checked == displayed) {
|
||||
if (checked)
|
||||
target.hide();
|
||||
else
|
||||
target.show();
|
||||
}
|
||||
}
|
||||
|
||||
// associate the state of checkbox with the visibility of target
|
||||
function associate(cb, target) {
|
||||
sync(cb, target);
|
||||
cb.click(function() {
|
||||
sync(cb, target);
|
||||
});
|
||||
}
|
||||
|
||||
// select the appropriate image based on the options selected
|
||||
function syncImage() {
|
||||
var implied = $('#implied').attr('checked');
|
||||
|
||||
$('.diagram').hide();
|
||||
|
||||
if (table) {
|
||||
if (implied && $('#impliedTwoDegreesImg').size() > 0) {
|
||||
$('#impliedTwoDegreesImg').show();
|
||||
} else {
|
||||
var oneDegree = $('#oneDegree').attr('checked');
|
||||
|
||||
if (oneDegree || $('#twoDegreesImg').size() == 0) {
|
||||
$('#oneDegreeImg').show();
|
||||
} else {
|
||||
$('#twoDegreesImg').show();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
var showNonKeys = $('#showNonKeys').attr('checked');
|
||||
|
||||
if (implied) {
|
||||
if (showNonKeys && $('#impliedLargeImg').size() > 0) {
|
||||
$('#impliedLargeImg').show();
|
||||
} else if ($('#impliedCompactImg').size() > 0) {
|
||||
$('#impliedCompactImg').show();
|
||||
} else {
|
||||
$('#realCompactImg').show();
|
||||
}
|
||||
} else {
|
||||
if (showNonKeys && $('#realLargeImg').size() > 0) {
|
||||
$('#realLargeImg').show();
|
||||
} else {
|
||||
$('#realCompactImg').show();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// our 'ready' handler makes the page consistent
|
||||
$(function(){
|
||||
associate($('#implied'), $('.impliedRelationship'));
|
||||
associate($('#showComments'), $('.comment'));
|
||||
associate($('#showLegend'), $('.legend'));
|
||||
associate($('#showRelatedCols'), $('.relatedKey'));
|
||||
associate($('#showConstNames'), $('.constraint'));
|
||||
|
||||
syncImage();
|
||||
$('#implied,#oneDegree,#twoDegrees,#showNonKeys').click(function() {
|
||||
syncImage();
|
||||
});
|
||||
|
||||
unsync($('#implied'), $('.degrees'));
|
||||
$('#implied').click(function() {
|
||||
unsync($('#implied'), $('.degrees'));
|
||||
});
|
||||
|
||||
unsync($('#removeImpliedOrphans'), $('.impliedNotOrphan'));
|
||||
$('#removeImpliedOrphans').click(function() {
|
||||
unsync($('#removeImpliedOrphans'), $('.impliedNotOrphan'));
|
||||
});
|
||||
});
|
|
@ -1,138 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<database name="swadroid_db_crypt" type="SQLite - 3.7.15">
|
||||
<tables>
|
||||
<table name="android_metadata" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="locale" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="courses" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="userRole" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="shortName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="fullName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="group_course" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="group_grouptypes" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="grpTypCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="group_types" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="courseCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="groupTypeName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="mandatory" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="multiple" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="openTime" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
</table>
|
||||
<table name="groups" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="groupName" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="maxStudents" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="students" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="open" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="fileZones" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="6" name="member" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="notifications" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="notifCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="eventCode" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="eventType" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="eventTime" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="userSurname1" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="userSurname2" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="6" name="userFirstname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="7" name="userPhoto" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="8" name="location" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="9" name="summary" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="10" name="status" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="11" name="content" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="12" name="seenLocal" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="13" name="seenRemote" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="practice_sessions" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="startDate" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="endDate" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="site" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="description" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="rollcall" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="sessCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="usrCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="comments" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="tst_answers" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="ansInd" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="answer" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="correct" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="answerFeedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="tst_config" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="min" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="def" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="max" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="feedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="editTime" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="tst_question_answers" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="ansCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="tst_question_tags" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="tagCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="tagInd" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="tst_questions" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="ansType" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="shuffle" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="stem" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="feedback" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="tst_questions_course" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="qstCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="tst_tags" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="id" nullable="true" remarks="" size="2000000000" type="LONG"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="tagTxt" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
</table>
|
||||
<table name="users" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="userCode" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="userID" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="userNickname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="3" name="userSurname1" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="4" name="userSurname2" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="5" name="userFirstname" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="6" name="photoPath" nullable="true" remarks="" size="2000000000" type="TEXT"/>
|
||||
<column autoUpdated="false" digits="10" id="7" name="userRole" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
<table name="users_courses" numRows="0" remarks="" type="TABLE">
|
||||
<column autoUpdated="false" digits="10" id="-1" name="_id" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="0" name="userCode" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="1" name="crsCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
<column autoUpdated="false" digits="10" id="2" name="grpCod" nullable="true" remarks="" size="2000000000" type="INTEGER"/>
|
||||
</table>
|
||||
</tables>
|
||||
</database>
|
|
@ -1,120 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - Table swadroid_db_crypt.android_metadata</title>
|
||||
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
|
||||
table='android_metadata';
|
||||
</SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>android_metadata</span></span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width='100%' border='0'>
|
||||
<tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<form name='options' action=''>
|
||||
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
|
||||
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
|
||||
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
|
||||
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
|
||||
</form>
|
||||
</td><td class='container' rowspan='2' align='right' valign='top'>
|
||||
<table class='legend' border='0'>
|
||||
<tr>
|
||||
<td class='dataTable' valign='bottom'>Legend:</td>
|
||||
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
|
||||
</tr>
|
||||
<tr><td class='container' colspan='2'>
|
||||
<table class='dataTable' border='1'>
|
||||
<tbody>
|
||||
<tr><td class='primaryKey'>Primary key columns</td></tr>
|
||||
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
|
||||
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
|
||||
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
|
||||
<tr><td class='legendDetail'>< <em>n</em> > number of related tables</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</td><tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<a name='columns'></a>
|
||||
<table id='columns' class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup class='comment'>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Column</th>
|
||||
<th>Type</th>
|
||||
<th>Size</th>
|
||||
<th title='Are nulls allowed?'>Nulls</th>
|
||||
<th title='Is column automatically updated?'>Auto</th>
|
||||
<th title='Default value'>Default</th>
|
||||
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
|
||||
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
|
||||
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody valign='top'>
|
||||
<tr class='odd'>
|
||||
<td class='detail'>locale</td>
|
||||
<td class='detail'>text</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p title='1 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,164 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - Table swadroid_db_crypt.courses</title>
|
||||
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
|
||||
table='courses';
|
||||
</SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>courses</span></span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width='100%' border='0'>
|
||||
<tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<form name='options' action=''>
|
||||
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
|
||||
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
|
||||
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
|
||||
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
|
||||
</form>
|
||||
</td><td class='container' rowspan='2' align='right' valign='top'>
|
||||
<table class='legend' border='0'>
|
||||
<tr>
|
||||
<td class='dataTable' valign='bottom'>Legend:</td>
|
||||
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
|
||||
</tr>
|
||||
<tr><td class='container' colspan='2'>
|
||||
<table class='dataTable' border='1'>
|
||||
<tbody>
|
||||
<tr><td class='primaryKey'>Primary key columns</td></tr>
|
||||
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
|
||||
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
|
||||
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
|
||||
<tr><td class='legendDetail'>< <em>n</em> > number of related tables</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</td><tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<a name='columns'></a>
|
||||
<table id='columns' class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup class='comment'>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Column</th>
|
||||
<th>Type</th>
|
||||
<th>Size</th>
|
||||
<th title='Are nulls allowed?'>Nulls</th>
|
||||
<th title='Is column automatically updated?'>Auto</th>
|
||||
<th title='Default value'>Default</th>
|
||||
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
|
||||
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
|
||||
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody valign='top'>
|
||||
<tr class='even'>
|
||||
<td class='detail'>_id</td>
|
||||
<td class='detail'>integer</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='odd'>
|
||||
<td class='detail'>id</td>
|
||||
<td class='detail'>long</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='even'>
|
||||
<td class='detail'>userRole</td>
|
||||
<td class='detail'>integer</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='odd'>
|
||||
<td class='detail'>shortName</td>
|
||||
<td class='detail'>text</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='even'>
|
||||
<td class='detail'>fullName</td>
|
||||
<td class='detail'>text</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p title='5 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
|
@ -1,142 +0,0 @@
|
|||
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//EN' 'http://www.w3.org/TR/html4/loose.dtd'>
|
||||
<html>
|
||||
<head>
|
||||
<!-- SchemaSpy rev 590 -->
|
||||
<title>SchemaSpy - Table swadroid_db_crypt.group_course</title>
|
||||
<link rel=stylesheet href='../schemaSpy.css' type='text/css'>
|
||||
<meta HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../jquery.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript' SRC='../schemaSpy.js'></SCRIPT>
|
||||
<SCRIPT LANGUAGE='JavaScript' TYPE='text/javascript'>
|
||||
table='group_course';
|
||||
</SCRIPT>
|
||||
</head>
|
||||
<body>
|
||||
<table id='headerHolder' cellspacing='0' cellpadding='0'><tr><td>
|
||||
<div id='header'>
|
||||
<ul>
|
||||
<li><a href='../index.html' title='All tables and views in the schema'>Tables</a></li>
|
||||
<li><a href='../relationships.html' title='Diagram of table relationships'>Relationships</a></li>
|
||||
<li><a href='../utilities.html' title='View of tables with neither parents nor children'>Utility Tables</a></li>
|
||||
<li><a href='../constraints.html' title='Useful for diagnosing error messages that just give constraint name or number'>Constraints</a></li>
|
||||
<li><a href='../anomalies.html' title="Things that might not be quite right">Anomalies</a></li>
|
||||
<li><a href='../columns.byTable.html' title="All of the columns in the schema">Columns</a></li>
|
||||
<li><a href='http://sourceforge.net/donate/index.php?group_id=137197' title='Please help keep SchemaSpy alive' target='_blank'>Donate</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</td></tr></table>
|
||||
<div class='content' style='clear:both;'>
|
||||
<table width='100%' border='0' cellpadding='0'>
|
||||
<tr>
|
||||
<td class='heading' valign='middle'><span class='header'>Table <span title='Database'>swadroid_db_crypt</span>.<span title='Table'>group_course</span></span></td>
|
||||
<td class='heading' align='right' valign='top' title='John Currier - Creator of Cool Tools'><span class='indent'>Generated by</span><br><span class='indent'><span class='signature'><a href='http://schemaspy.sourceforge.net' target='_blank'>SchemaSpy</a></span></span></td>
|
||||
</tr>
|
||||
</table>
|
||||
<table width='100%' border='0'>
|
||||
<tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<form name='options' action=''>
|
||||
<label for='showRelatedCols'><input type=checkbox id='showRelatedCols'>Related columns</label>
|
||||
<label for='showConstNames'><input type=checkbox id='showConstNames'>Constraints</label>
|
||||
<label for='showComments'><input type=checkbox id='showComments'>Comments</label>
|
||||
<label for='showLegend'><input type=checkbox checked id='showLegend'>Legend</label>
|
||||
</form>
|
||||
</td><td class='container' rowspan='2' align='right' valign='top'>
|
||||
<table class='legend' border='0'>
|
||||
<tr>
|
||||
<td class='dataTable' valign='bottom'>Legend:</td>
|
||||
<td class='container' align='right' valign='top'><a href='http://sourceforge.net' target='_blank'><img src='http://sourceforge.net/sflogo.php?group_id=137197&type=1' alt='SourceForge.net' border='0' height='31' width='88'></a></td>
|
||||
</tr>
|
||||
<tr><td class='container' colspan='2'>
|
||||
<table class='dataTable' border='1'>
|
||||
<tbody>
|
||||
<tr><td class='primaryKey'>Primary key columns</td></tr>
|
||||
<tr><td class='indexedColumn'>Columns with indexes</td></tr>
|
||||
<tr class='impliedRelationship'><td class='detail'><span class='impliedRelationship'>Implied relationships</span></td></tr>
|
||||
<tr><td class='excludedColumn'>Excluded column relationships</td></tr>
|
||||
<tr><td class='legendDetail'>< <em>n</em> > number of related tables</td></tr>
|
||||
</table>
|
||||
</td></tr>
|
||||
</table>
|
||||
<div style="margin-right: 2pt;">
|
||||
<script type="text/javascript"><!--
|
||||
google_ad_client = "pub-9598353634003340";
|
||||
google_ad_channel ="SchemaSpy-generated";
|
||||
google_ad_width = 234;
|
||||
google_ad_height = 60;
|
||||
google_ad_format = "234x60_as";
|
||||
google_ad_type = "text";
|
||||
google_color_border = "9bab96";
|
||||
google_color_link = "489148";
|
||||
google_color_text = "000000";
|
||||
//-->
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
|
||||
</script>
|
||||
</div>
|
||||
|
||||
</td><tr valign='top'><td class='container' align='left' valign='top'>
|
||||
<a name='columns'></a>
|
||||
<table id='columns' class='dataTable' border='1' rules='groups'>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup>
|
||||
<colgroup class='comment'>
|
||||
<thead align='left'>
|
||||
<tr>
|
||||
<th>Column</th>
|
||||
<th>Type</th>
|
||||
<th>Size</th>
|
||||
<th title='Are nulls allowed?'>Nulls</th>
|
||||
<th title='Is column automatically updated?'>Auto</th>
|
||||
<th title='Default value'>Default</th>
|
||||
<th title='Columns in tables that reference this column'><span class='notSortedByColumn'>Children</span></th>
|
||||
<th title='Columns in tables that are referenced by this column'><span class='notSortedByColumn'>Parents</span></th>
|
||||
<th title='Comments' class='comment'><span class='notSortedByColumn'>Comments</span></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody valign='top'>
|
||||
<tr class='odd'>
|
||||
<td class='detail'>_id</td>
|
||||
<td class='detail'>integer</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='even'>
|
||||
<td class='detail'>grpCod</td>
|
||||
<td class='detail'>integer</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
<tr class='odd'>
|
||||
<td class='detail'>crsCod</td>
|
||||
<td class='detail'>integer</td>
|
||||
<td class='detail' align='right'>2000000000,10</td>
|
||||
<td class='detail' align='center' title='nullable'> √ </td>
|
||||
<td class='detail' align='center'></td>
|
||||
<td class='detail' align='right'>null</td>
|
||||
<td class='detail'></td>
|
||||
<td class='detail'> </td>
|
||||
<td class='comment detail'></td>
|
||||
</tr>
|
||||
</table>
|
||||
<p title='3 columns'>Table contained 0 rows at jue ene 30 23:37 CET 2014<p/>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|