Compare commits
288 Commits
fef1e17935
...
rewrite
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b28cd243f0 | ||
|
|
dce8c34064 | ||
|
|
9502ee0cd0 | ||
|
|
8eb4ffe3ed | ||
|
|
4be59807e5 | ||
|
|
4712a2ff29 | ||
|
|
f9179a1e89 | ||
|
|
a6df204721 | ||
|
|
101189ae7c | ||
|
|
f25c012fbe | ||
|
|
868a85d84c | ||
|
|
771dd4b176 | ||
|
|
ed4d3bf17c | ||
|
|
7c728fbe36 | ||
|
|
4ff9d01ef5 | ||
|
|
1bce2e80e8 | ||
|
|
1556d74406 | ||
|
|
9b3947cc90 | ||
|
|
18b0309ac4 | ||
|
|
0afd4ae115 | ||
|
|
09e360c746 | ||
|
|
5dbe79ba2f | ||
|
|
779707761f | ||
|
|
16992bb2bd | ||
|
|
3374f83255 | ||
|
|
8f420a14cd | ||
|
|
57024c0cb1 | ||
|
|
db7fb825fe | ||
|
|
49e8c6a4f2 | ||
|
|
66bf4241b2 | ||
|
|
76a5dda553 | ||
|
|
6393aa7f2c | ||
|
|
c5f938113f | ||
|
|
dac7eaba6d | ||
|
|
35e6059068 | ||
|
|
afebc8dc39 | ||
|
|
34151a86b1 | ||
|
|
72d6934345 | ||
|
|
f5f7031030 | ||
|
|
ffccca9424 | ||
|
|
3f5ae334a2 | ||
|
|
bb45c4d345 | ||
|
|
bad3c76de9 | ||
|
|
4ee652cfda | ||
|
|
abaffa4042 | ||
|
|
ad4b5d7c64 | ||
|
|
3b38476c5a | ||
|
|
a42f6a20e4 | ||
|
|
da2afb2fb7 | ||
|
|
dda0d6a898 | ||
|
|
36068aaf77 | ||
|
|
3cb65fa4ec | ||
|
|
26cc757f75 | ||
|
|
2337f96685 | ||
|
|
82ec3b239e | ||
|
|
aa72b0216d | ||
|
|
b002bc34ac | ||
|
|
a84f0d4faf | ||
|
|
a9715cb087 | ||
|
|
827b0d15d1 | ||
|
|
4b4b2f914f | ||
|
|
bf679cdc5d | ||
|
|
4c430c6d5d | ||
|
|
905279aabe | ||
|
|
d92a5da029 | ||
|
|
a3a27fc27a | ||
|
|
0d6bc71d2b | ||
|
|
41397be1bd | ||
|
|
8fbcb07267 | ||
|
|
3c18540c8c | ||
|
|
ab9c940d01 | ||
|
|
7e573282d0 | ||
|
|
d08368e4f5 | ||
|
|
2c1718bb0e | ||
|
|
5a0bf03b81 | ||
|
|
6978c9446c | ||
|
|
d3fd160cf3 | ||
|
|
c3421c8699 | ||
|
|
0a3ebc931b | ||
|
|
83c593a1e2 | ||
|
|
60c812327a | ||
|
|
d27ba5c046 | ||
|
|
120a88d12d | ||
|
|
054df2ed79 | ||
|
|
94240f61ca | ||
|
|
9c77a25d9a | ||
|
|
7819f2774c | ||
|
|
a07bdd7469 | ||
|
|
68c3712539 | ||
|
|
be5fc6dccb | ||
|
|
414110e575 | ||
|
|
bd641273ff | ||
|
|
404a97fb89 | ||
|
|
e3cab610ec | ||
|
|
cd87f6db0d | ||
|
|
dc015077e4 | ||
|
|
f778932fd6 | ||
|
|
c284d27d31 | ||
|
|
acac02a672 | ||
|
|
e8d3d5c2a9 | ||
|
|
d4b898358f | ||
|
|
bd5a9b4f72 | ||
|
|
5f1d2ee26c | ||
|
|
9175a5a45f | ||
|
|
2af60c034f | ||
|
|
c503aeaf00 | ||
|
|
3f9922b7df | ||
|
|
91fc1da896 | ||
|
|
3d2e4f6343 | ||
|
|
39d44689de | ||
|
|
2547e6e805 | ||
|
|
3c5a76b512 | ||
|
|
dc76ba2fda | ||
|
|
386ee473bd | ||
|
|
feebe96fec | ||
|
|
86f83eff5b | ||
|
|
54fa2743f9 | ||
|
|
2475133405 | ||
|
|
cdb3dee8ed | ||
|
|
e667abf6fb | ||
|
|
d5b2e2f0ee | ||
|
|
cd7cbcc4c8 | ||
|
|
a055c2450a | ||
|
|
170a3c0ae1 | ||
|
|
6fe865e115 | ||
|
|
1c1c5bd32b | ||
|
|
d40ad8bd09 | ||
|
|
2b70e1c2e5 | ||
|
|
da8ea98c28 | ||
|
|
caac65f4f9 | ||
|
|
a92d66c981 | ||
|
|
5fd709ed35 | ||
|
|
29f120e66b | ||
|
|
74f5933627 | ||
|
|
56a93ee75b | ||
|
|
3a8634844f | ||
|
|
26d546f6ec | ||
|
|
0265c41612 | ||
|
|
a53b410713 | ||
|
|
3035b5b6b2 | ||
|
|
266d7c25da | ||
|
|
77b25a9740 | ||
|
|
618bafa514 | ||
|
|
415f589716 | ||
|
|
54c7c820b8 | ||
|
|
89864f7070 | ||
|
|
b4916cd3b6 | ||
|
|
97567ad472 | ||
|
|
b00dbd560f | ||
|
|
c41fbab8ee | ||
|
|
771db9fa0e | ||
|
|
dd6ccf830c | ||
|
|
b0e079aeb2 | ||
|
|
d1d49572e2 | ||
|
|
774078df9c | ||
|
|
8c708f2c96 | ||
|
|
3c68b0151d | ||
|
|
6cb252c0ed | ||
|
|
11f2a74b5d | ||
|
|
9bba3c9e50 | ||
|
|
b3d71a5fec | ||
|
|
a111ed929b | ||
|
|
21dd85f62f | ||
|
|
b08bca5ce4 | ||
|
|
dff6cba2d8 | ||
|
|
10a0921e35 | ||
|
|
70443942ff | ||
|
|
7d26966250 | ||
|
|
9ada27cf7e | ||
|
|
752322bbad | ||
|
|
0444e338ec | ||
|
|
a669abd47e | ||
|
|
4e46fcb9e6 | ||
|
|
31d7d0c143 | ||
|
|
b470b985e9 | ||
|
|
c90c6b5c90 | ||
|
|
26f0d0ac2f | ||
|
|
5e3365935e | ||
|
|
5b6424d405 | ||
|
|
698ad8e45d | ||
|
|
09fd345528 | ||
|
|
edfba9f1bc | ||
|
|
bb844ceac4 | ||
|
|
c6f3b60671 | ||
|
|
3178a65e72 | ||
|
|
aedfb4e5dd | ||
|
|
e0dcc191c7 | ||
|
|
c80e6d3474 | ||
|
|
46cd4887a3 | ||
|
|
bfbf70cf1a | ||
|
|
61de54bc34 | ||
|
|
e27af88690 | ||
|
|
393c3fd3b6 | ||
|
|
0e53aef9ea | ||
|
|
8a742b0ec0 | ||
|
|
b17b70a91f | ||
|
|
6f536f9952 | ||
|
|
034caf965a | ||
|
|
6322e3f4cf | ||
|
|
6b78adb702 | ||
|
|
6e8c931bf3 | ||
|
|
b80fe44c08 | ||
|
|
0921773666 | ||
|
|
13e960f5cb | ||
|
|
094583b8f6 | ||
|
|
fd7ec5d2cf | ||
|
|
370659f461 | ||
|
|
1f853a8bb1 | ||
|
|
b93c3b6093 | ||
|
|
6145fff2fd | ||
|
|
48687dc6dd | ||
|
|
4591cc87e2 | ||
|
|
67491615c0 | ||
|
|
fadf64450b | ||
|
|
34bb7bb93f | ||
|
|
67f8401dce | ||
|
|
f9fb711881 | ||
|
|
26c35a01f3 | ||
|
|
9538842fcb | ||
|
|
8ca31ab049 | ||
|
|
b19c9b5eb6 | ||
|
|
896ead0bb8 | ||
|
|
9835381186 | ||
|
|
d49ced8942 | ||
|
|
9a01263d70 | ||
|
|
7980554924 | ||
|
|
8949bcb567 | ||
|
|
ac90bb702e | ||
|
|
088c913ede | ||
|
|
7554a7f246 | ||
|
|
31e5c9fe96 | ||
|
|
e21c1771c7 | ||
|
|
502a331754 | ||
|
|
6203c3c257 | ||
|
|
c7d9ef97ee | ||
|
|
608fc5bbd0 | ||
|
|
dbf7104dd0 | ||
|
|
1f26de4b76 | ||
|
|
ad43e4a2b2 | ||
|
|
171feda4fe | ||
|
|
e5a4e07b8b | ||
|
|
44a5600108 | ||
|
|
d059c5c584 | ||
|
|
523ff8e877 | ||
|
|
ba9115bac1 | ||
|
|
11f6f50748 | ||
|
|
d85c52bceb | ||
|
|
9cf1d7b461 | ||
|
|
e7a2a53d18 | ||
|
|
1ffdfc17fb | ||
|
|
190c6fb007 | ||
|
|
0cd806fb74 | ||
|
|
9f55471f0f | ||
|
|
4add27e83c | ||
|
|
7a3ab14fca | ||
|
|
589af685ac | ||
|
|
8cb861df6c | ||
|
|
5ebda7eb1a | ||
|
|
e3bbd509c3 | ||
|
|
65acca5380 | ||
|
|
e1d4a80e57 | ||
|
|
08f1db2641 | ||
|
|
d78b0b3929 | ||
|
|
14f376cacb | ||
|
|
8ccbc12024 | ||
|
|
c646c36f4f | ||
|
|
d5a5e7bcf9 | ||
|
|
73f6e6d785 | ||
|
|
87b36562cc | ||
|
|
7406b6688d | ||
|
|
f58dd121d5 | ||
|
|
443b10a990 | ||
|
|
e8e48a2cc4 | ||
|
|
94edcee382 | ||
|
|
737a53a589 | ||
|
|
85bff56bd5 | ||
|
|
0f149098a3 | ||
|
|
13b5b145e4 | ||
|
|
a050beea72 | ||
|
|
3952e8dd91 | ||
|
|
68f3c02eb9 | ||
|
|
b4c2703cbb | ||
|
|
cb4fda1786 | ||
|
|
058b17fcbc | ||
|
|
9bfdc7209b | ||
|
|
1a44e84112 | ||
|
|
b722fcbe6e | ||
|
|
d1d26409fc |
2
.github/FUNDING.yml
vendored
@@ -1,3 +1,3 @@
|
|||||||
github: jokob-sk
|
github: jokob-sk
|
||||||
patreon: 84385063
|
patreon: netalertx
|
||||||
buy_me_a_coffee: jokobsk
|
buy_me_a_coffee: jokobsk
|
||||||
|
|||||||
0
.github/ISSUE_TEMPLATE/documentation-feedback.yml
vendored
Normal file → Executable file
0
.github/ISSUE_TEMPLATE/enhancement-request.yml
vendored
Normal file → Executable file
0
.github/ISSUE_TEMPLATE/refactor-codequality-request.yml
vendored
Normal file → Executable file
0
.github/ISSUE_TEMPLATE/security-report.yml
vendored
Normal file → Executable file
0
.github/ISSUE_TEMPLATE/translation-request.yml
vendored
Normal file → Executable file
0
.github/PULL_REQUEST_TEMPLATE/code-pr-template.md
vendored
Normal file → Executable file
0
.github/PULL_REQUEST_TEMPLATE/docs-pr-template.md
vendored
Normal file → Executable file
2
.github/tweet.md
vendored
@@ -1,2 +0,0 @@
|
|||||||
🎉 New release: **v25.6.7 - Legacy upgrade removal and Fully Qualified Domain Names 🆎** is live! 🚀
|
|
||||||
Check it out here: https://github.com/jokob-sk/NetAlertX/releases/tag/v25.6.7
|
|
||||||
81
.github/workflows/docker_rewrite.yml
vendored
Executable file
@@ -0,0 +1,81 @@
|
|||||||
|
name: docker
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- rewrite
|
||||||
|
tags:
|
||||||
|
- '*.*.*'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- rewrite
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker_dev:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
timeout-minutes: 30
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
packages: write
|
||||||
|
if: >
|
||||||
|
contains(github.event.head_commit.message, 'PUSHPROD') != 'True' &&
|
||||||
|
github.repository == 'jokob-sk/NetAlertX'
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: Set up QEMU
|
||||||
|
uses: docker/setup-qemu-action@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v3
|
||||||
|
|
||||||
|
- name: Set up dynamic build ARGs
|
||||||
|
id: getargs
|
||||||
|
run: echo "version=$(cat ./stable/VERSION)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Get release version
|
||||||
|
id: get_version
|
||||||
|
run: echo "version=Dev" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
|
- name: Create .VERSION file
|
||||||
|
run: echo "${{ steps.get_version.outputs.version }}" >> .VERSION
|
||||||
|
|
||||||
|
- name: Docker meta
|
||||||
|
id: meta
|
||||||
|
uses: docker/metadata-action@v4
|
||||||
|
with:
|
||||||
|
images: |
|
||||||
|
ghcr.io/jokob-sk/netalertx-dev-rewrite
|
||||||
|
jokobsk/netalertx-dev-rewrite
|
||||||
|
tags: |
|
||||||
|
type=raw,value=latest
|
||||||
|
type=ref,event=branch
|
||||||
|
type=ref,event=pr
|
||||||
|
type=semver,pattern={{version}}
|
||||||
|
type=semver,pattern={{major}}.{{minor}}
|
||||||
|
type=semver,pattern={{major}}
|
||||||
|
type=sha
|
||||||
|
|
||||||
|
- name: Log in to Github Container Registry (GHCR)
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: jokob-sk
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Log in to DockerHub
|
||||||
|
if: github.event_name != 'pull_request'
|
||||||
|
uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Build and push
|
||||||
|
uses: docker/build-push-action@v3
|
||||||
|
with:
|
||||||
|
context: .
|
||||||
|
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/arm/v6
|
||||||
|
push: ${{ github.event_name != 'pull_request' }}
|
||||||
|
tags: ${{ steps.meta.outputs.tags }}
|
||||||
|
labels: ${{ steps.meta.outputs.labels }}
|
||||||
37
.github/workflows/social_post_on_release.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: 📧 Twitter and Discord Posts
|
name: 📧 Social Posts
|
||||||
on:
|
on:
|
||||||
release:
|
release:
|
||||||
types: [published]
|
types: [published]
|
||||||
@@ -16,38 +16,3 @@ jobs:
|
|||||||
-d '{"content": "🎉 New release: **${{ github.event.release.name }}** is live! 🚀\nCheck it out here: ${{ github.event.release.html_url }}"}' \
|
-d '{"content": "🎉 New release: **${{ github.event.release.name }}** is live! 🚀\nCheck it out here: ${{ github.event.release.html_url }}"}' \
|
||||||
${{ secrets.DISCORD_WEBHOOK_URL }}
|
${{ secrets.DISCORD_WEBHOOK_URL }}
|
||||||
|
|
||||||
post-twitter:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Wait for 15 minutes
|
|
||||||
run: sleep 900 # 15 minutes delay
|
|
||||||
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
- name: Set Git config
|
|
||||||
run: |
|
|
||||||
git config --global user.email "github-actions@github.com"
|
|
||||||
git config --global user.name "GitHub Actions"
|
|
||||||
|
|
||||||
- name: Create tweet file
|
|
||||||
run: |
|
|
||||||
echo "🎉 New release: **${{ github.event.release.name }}** is live! 🚀" > .github/tweet.md
|
|
||||||
echo "Check it out here: ${{ github.event.release.html_url }}" >> .github/tweet.md
|
|
||||||
git add .github/tweet.md
|
|
||||||
git commit -m "Add release tweet for ${{ github.event.release.name }}"
|
|
||||||
|
|
||||||
- name: Push changes
|
|
||||||
run: |
|
|
||||||
git push https://github.com/${{ github.repository }}.git HEAD:main
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Tweet
|
|
||||||
uses: twitter-together/action@v3
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
TWITTER_ACCESS_TOKEN: ${{ secrets.TWITTER_ACCESS_TOKEN }}
|
|
||||||
TWITTER_ACCESS_TOKEN_SECRET: ${{ secrets.TWITTER_ACCESS_TOKEN_SECRET }}
|
|
||||||
TWITTER_API_KEY: ${{ secrets.TWITTER_API_KEY }}
|
|
||||||
TWITTER_API_SECRET_KEY: ${{ secrets.TWITTER_API_SECRET_KEY }}
|
|
||||||
|
|||||||
0
CODE_OF_CONDUCT.md
Normal file → Executable file
@@ -13,7 +13,7 @@ ENV PATH="/opt/venv/bin:$PATH"
|
|||||||
|
|
||||||
COPY . ${INSTALL_DIR}/
|
COPY . ${INSTALL_DIR}/
|
||||||
|
|
||||||
RUN pip install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros yattag git+https://github.com/foreign-sub/aiofreepybox.git \
|
RUN pip install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask flask-cors unifi-sm-api tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros yattag git+https://github.com/foreign-sub/aiofreepybox.git \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \
|
&& bash -c "find ${INSTALL_DIR} -type d -exec chmod 750 {} \;" \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \
|
&& bash -c "find ${INSTALL_DIR} -type f -exec chmod 640 {} \;" \
|
||||||
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
|
&& bash -c "find ${INSTALL_DIR} -type f \( -name '*.sh' -o -name '*.py' -o -name 'speedtest-cli' \) -exec chmod 750 {} \;"
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ RUN phpenmod -v 8.2 sqlite3
|
|||||||
RUN apt-get install -y python3-venv
|
RUN apt-get install -y python3-venv
|
||||||
RUN python3 -m venv myenv
|
RUN python3 -m venv myenv
|
||||||
|
|
||||||
RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros yattag "
|
RUN /bin/bash -c "source myenv/bin/activate && update-alternatives --install /usr/bin/python python /usr/bin/python3 10 && pip3 install openwrt-luci-rpc asusrouter asyncio aiohttp graphene flask flask-cors unifi-sm-api tplink-omada-client wakeonlan pycryptodome requests paho-mqtt scapy cron-converter pytz json2table dhcp-leases pyunifi speedtest-cli chardet python-nmap dnspython librouteros yattag "
|
||||||
|
|
||||||
# Create a buildtimestamp.txt to later check if a new version was released
|
# Create a buildtimestamp.txt to later check if a new version was released
|
||||||
RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt
|
RUN date +%s > ${INSTALL_DIR}/front/buildtimestamp.txt
|
||||||
|
|||||||
20
README.md
@@ -28,11 +28,14 @@ Get visibility of what's going on on your WIFI/LAN network and enable presence d
|
|||||||
Start NetAlertX in seconds with Docker:
|
Start NetAlertX in seconds with Docker:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run -d \
|
docker run -d --rm --network=host \
|
||||||
--name=netalertx \
|
-v local_path/config:/app/config \
|
||||||
-p 20211:20211 \
|
-v local_path/db:/app/db \
|
||||||
-v /your/config/path:/config \
|
--mount type=tmpfs,target=/app/api \
|
||||||
jokobsk/netalertx
|
-e PUID=200 -e PGID=300 \
|
||||||
|
-e TZ=Europe/Berlin \
|
||||||
|
-e PORT=20211 \
|
||||||
|
ghcr.io/jokob-sk/netalertx:latest
|
||||||
```
|
```
|
||||||
|
|
||||||
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
|
Need help configuring it? Check the [usage guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/README.md) or [full documentation](https://jokob-sk.github.io/NetAlertX/).
|
||||||
@@ -92,6 +95,7 @@ Supported browsers: Chrome, Firefox
|
|||||||
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
|
- [[Development] API docs](https://github.com/jokob-sk/NetAlertX/blob/main/docs/API.md)
|
||||||
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
- [[Development] Custom Plugins](https://github.com/jokob-sk/NetAlertX/blob/main/docs/PLUGINS_DEV.md)
|
||||||
|
|
||||||
|
...or explore all the [documentation here](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
## 🔐 Security & Privacy
|
## 🔐 Security & Privacy
|
||||||
|
|
||||||
@@ -120,17 +124,17 @@ A: No. All scans and data remain local, unless you set up cloud-based notificati
|
|||||||
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
|
A: Yes! You can install it bare-metal. See the [bare metal installation guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/HW_INSTALL.md).
|
||||||
|
|
||||||
**Q: Where is the data stored?**
|
**Q: Where is the data stored?**
|
||||||
A: In the `/config` volume, mapped in Docker. Back up this folder regularly.
|
A: In the `/config` and `/db` folders, mapped in Docker. Back up these folders regularly.
|
||||||
|
|
||||||
|
|
||||||
## 🐞 Known Issues
|
## 🐞 Known Issues
|
||||||
|
|
||||||
- Some scanners (e.g. ARP) may not detect devices on different subnets.
|
- Some scanners (e.g. ARP) may not detect devices on different subnets. See the [Remote networks guide](https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md) for workarounds.
|
||||||
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
- Wi-Fi-only networks may require alternate scanners for accurate detection.
|
||||||
- Notification throttling may be needed for large networks to prevent spam.
|
- Notification throttling may be needed for large networks to prevent spam.
|
||||||
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
- On some systems, elevated permissions (like `CAP_NET_RAW`) may be needed for low-level scanning.
|
||||||
|
|
||||||
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions.
|
Check the [GitHub Issues](https://github.com/jokob-sk/NetAlertX/issues) for the latest bug reports and solutions and consult [the official documentation](https://jokob-sk.github.io/NetAlertX/).
|
||||||
|
|
||||||
## 📃 Everything else
|
## 📃 Everything else
|
||||||
<!--- --------------------------------------------------------------------- --->
|
<!--- --------------------------------------------------------------------- --->
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ LOADED_PLUGINS=['ARPSCAN', 'AVAHISCAN', 'CSVBCKP','DBCLNP', 'DIGSCAN', 'INTRNT',
|
|||||||
|
|
||||||
DAYS_TO_KEEP_EVENTS=90
|
DAYS_TO_KEEP_EVENTS=90
|
||||||
# Used for generating links in emails. Make sure not to add a trailing slash!
|
# Used for generating links in emails. Make sure not to add a trailing slash!
|
||||||
REPORT_DASHBOARD_URL='http://127.0.0.1'
|
REPORT_DASHBOARD_URL='update_REPORT_DASHBOARD_URL_setting'
|
||||||
|
|
||||||
# Make sure at least these scanners are enabled for new installs, other defaults are taken from the config.json
|
# Make sure at least these scanners are enabled for new installs, other defaults are taken from the config.json
|
||||||
INTRNT_RUN='schedule'
|
INTRNT_RUN='schedule'
|
||||||
|
|||||||
200
back/device_heuristics_rules.json
Executable file
@@ -0,0 +1,200 @@
|
|||||||
|
[
|
||||||
|
{
|
||||||
|
"dev_type": "Gateway",
|
||||||
|
"icon_html": "<i class=\"fa fa-globe\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "INTERNET", "vendor": "" }
|
||||||
|
],
|
||||||
|
"name_pattern": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Access Point",
|
||||||
|
"icon_html": "<i class=\"fa fa-network-wired\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "74ACB9", "vendor": "Ubiquiti" },
|
||||||
|
{ "mac_prefix": "002468", "vendor": "Cisco" },
|
||||||
|
{ "mac_prefix": "F4F5D8", "vendor": "TP-Link" },
|
||||||
|
{ "mac_prefix": "F88E85", "vendor": "Netgear" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["router", "gateway", "ap", "access point", "access-point", "switch"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Phone",
|
||||||
|
"icon_html": "<i class=\"fa-brands fa-apple\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001A79", "vendor": "Apple" },
|
||||||
|
{ "mac_prefix": "B0BE83", "vendor": "Samsung" },
|
||||||
|
{ "mac_prefix": "BC926B", "vendor": "Motorola" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["iphone", "ipad", "pixel", "galaxy", "redmi"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Phone",
|
||||||
|
"icon_html": "<i class=\"fa-solid fa-mobile\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
],
|
||||||
|
"name_pattern": ["android","samsung"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Tablet",
|
||||||
|
"icon_html": "<i class=\"fa fa-tablet\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001B63", "vendor": "Apple" },
|
||||||
|
{ "mac_prefix": "BC4C4C", "vendor": "Samsung" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["tablet", "pad"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "IoT",
|
||||||
|
"icon_html": "<i class=\"fa-brands fa-raspberry-pi\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "B827EB", "vendor": "Raspberry Pi" },
|
||||||
|
{ "mac_prefix": "DCA632", "vendor": "Raspberry Pi" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["raspberry", "pi"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "IoT",
|
||||||
|
"icon_html": "<i class=\"fa-solid fa-microchip\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "840D8E", "vendor": "Espressif" },
|
||||||
|
{ "mac_prefix": "ECFABC", "vendor": "Espressif" },
|
||||||
|
{ "mac_prefix": "7C9EBD", "vendor": "Espressif" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["raspberry", "pi"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Desktop",
|
||||||
|
"icon_html": "<i class=\"fa fa-desktop\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001422", "vendor": "Dell" },
|
||||||
|
{ "mac_prefix": "001874", "vendor": "Lenovo" },
|
||||||
|
{ "mac_prefix": "00E04C", "vendor": "Hewlett Packard" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["desktop", "pc", "computer"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Laptop",
|
||||||
|
"icon_html": "<i class=\"fa fa-laptop\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "3C0754", "vendor": "HP" },
|
||||||
|
{ "mac_prefix": "0017A4", "vendor": "Dell" },
|
||||||
|
{ "mac_prefix": "F4CE46", "vendor": "Lenovo" },
|
||||||
|
{ "mac_prefix": "409F38", "vendor": "Acer" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["macbook", "imac", "laptop", "notebook"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Server",
|
||||||
|
"icon_html": "<i class=\"fa fa-server\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001CBF", "vendor": "Supermicro" },
|
||||||
|
{ "mac_prefix": "002186", "vendor": "Dell" },
|
||||||
|
{ "mac_prefix": "D02788", "vendor": "Hewlett Packard" },
|
||||||
|
{ "mac_prefix": "002590", "vendor": "IBM" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["server", "nas"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "VM",
|
||||||
|
"icon_html": "<i class=\"fa fa-server\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "525400", "vendor": "QEMU" },
|
||||||
|
{ "mac_prefix": "005056", "vendor": "VMware" },
|
||||||
|
{ "mac_prefix": "000C29", "vendor": "VMware" },
|
||||||
|
{ "mac_prefix": "000569", "vendor": "VMware" },
|
||||||
|
{ "mac_prefix": "00163E", "vendor": "Xen" },
|
||||||
|
{ "mac_prefix": "080027", "vendor": "VirtualBox" }
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "TV",
|
||||||
|
"icon_html": "<i class=\"fa fa-tv\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "0013CE", "vendor": "Samsung" },
|
||||||
|
{ "mac_prefix": "0017C8", "vendor": "LG" },
|
||||||
|
{ "mac_prefix": "D46E0E", "vendor": "Sony" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["tv", "television", "smarttv"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Gaming Console",
|
||||||
|
"icon_html": "<i class=\"fa fa-gamepad\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001FA7", "vendor": "Sony" },
|
||||||
|
{ "mac_prefix": "7C04D0", "vendor": "Nintendo" },
|
||||||
|
{ "mac_prefix": "EC26CA", "vendor": "Sony" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["playstation", "xbox"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Camera",
|
||||||
|
"icon_html": "<i class=\"fa fa-camera\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "A45E60", "vendor": "Hikvision" },
|
||||||
|
{ "mac_prefix": "00408C", "vendor": "Axis" },
|
||||||
|
{ "mac_prefix": "00156D", "vendor": "Amcrest" },
|
||||||
|
{ "mac_prefix": "AC9E17", "vendor": "Reolink" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["camera", "cam", "webcam"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Smart Speaker",
|
||||||
|
"icon_html": "<i class=\"fa fa-volume-up\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "44650D", "vendor": "Amazon" },
|
||||||
|
{ "mac_prefix": "74ACB9", "vendor": "Google" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["echo", "alexa", "dot"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Router",
|
||||||
|
"icon_html": "<i class=\"fa fa-random\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "000C29", "vendor": "Cisco" },
|
||||||
|
{ "mac_prefix": "00155D", "vendor": "MikroTik" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["router", "gateway", "ap", "access point", "access-point"],
|
||||||
|
"ip_pattern": [
|
||||||
|
"^192\\.168\\.[0-1]\\.1$",
|
||||||
|
"^10\\.0\\.0\\.1$"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Smart Light",
|
||||||
|
"icon_html": "<i class=\"fa fa-lightbulb\"></i>",
|
||||||
|
"matching_pattern": [],
|
||||||
|
"name_pattern": ["hue", "lifx", "bulb"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Smart Home",
|
||||||
|
"icon_html": "<i class=\"fa fa-house\"></i>",
|
||||||
|
"matching_pattern": [],
|
||||||
|
"name_pattern": ["google", "chromecast", "nest"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Smartwatch",
|
||||||
|
"icon_html": "<i class=\"fa fa-watch\"></i>",
|
||||||
|
"matching_pattern": [],
|
||||||
|
"name_pattern": ["watch", "wear"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Printer",
|
||||||
|
"icon_html": "<i class=\"fa fa-print\"></i>",
|
||||||
|
"matching_pattern": [],
|
||||||
|
"name_pattern": ["printer", "print"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Security Device",
|
||||||
|
"icon_html": "<i class=\"fa fa-shield-alt\"></i>",
|
||||||
|
"matching_pattern": [],
|
||||||
|
"name_pattern": ["doorbell", "lock", "security"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dev_type": "Smart Light",
|
||||||
|
"icon_html": "<i class=\"fa-solid fa-lightbulb\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
],
|
||||||
|
"name_pattern": ["light","bulb"]
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -23,11 +23,11 @@ services:
|
|||||||
# - ${DEV_LOCATION}/api:/app/api
|
# - ${DEV_LOCATION}/api:/app/api
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
# DELETE START anyone trying to use this file: comment out / delete BELOW lines, they are only for development purposes
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp1.leases:/mnt/dhcp1.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp2.leases:/mnt/dhcp2.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/dhcp2.leases:/mnt/dhcp2.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_full.leases:/etc/pihole/dhcp.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases
|
- ${APP_DATA_LOCATION}/netalertx/dhcp_samples/pihole_dhcp_2.leases:/etc/pihole/dhcp2.leases # test data for DCPLSS plugin
|
||||||
- ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db
|
- ${APP_DATA_LOCATION}/pihole/etc-pihole/pihole-FTL.db:/etc/pihole/pihole-FTL.db # test data for PIHOLE plugin
|
||||||
- ${DEV_LOCATION}/mkdocs.yml:/app/mkdocs.yml
|
- ${DEV_LOCATION}/mkdocs.yml:/app/mkdocs.yml
|
||||||
- ${DEV_LOCATION}/docs:/app/docs
|
- ${DEV_LOCATION}/docs:/app/docs
|
||||||
- ${DEV_LOCATION}/server:/app/server
|
- ${DEV_LOCATION}/server:/app/server
|
||||||
@@ -59,6 +59,9 @@ services:
|
|||||||
- ${DEV_LOCATION}/front/presence.php:/app/front/presence.php
|
- ${DEV_LOCATION}/front/presence.php:/app/front/presence.php
|
||||||
- ${DEV_LOCATION}/front/settings.php:/app/front/settings.php
|
- ${DEV_LOCATION}/front/settings.php:/app/front/settings.php
|
||||||
- ${DEV_LOCATION}/front/systeminfo.php:/app/front/systeminfo.php
|
- ${DEV_LOCATION}/front/systeminfo.php:/app/front/systeminfo.php
|
||||||
|
- ${DEV_LOCATION}/front/systeminfoNetwork.php:/app/front/systeminfoNetwork.php
|
||||||
|
- ${DEV_LOCATION}/front/systeminfoServer.php:/app/front/systeminfoServer.php
|
||||||
|
- ${DEV_LOCATION}/front/systeminfoStorage.php:/app/front/systeminfoStorage.php
|
||||||
- ${DEV_LOCATION}/front/cloud_services.php:/app/front/cloud_services.php
|
- ${DEV_LOCATION}/front/cloud_services.php:/app/front/cloud_services.php
|
||||||
- ${DEV_LOCATION}/front/report.php:/app/front/report.php
|
- ${DEV_LOCATION}/front/report.php:/app/front/report.php
|
||||||
- ${DEV_LOCATION}/front/workflows.php:/app/front/workflows.php
|
- ${DEV_LOCATION}/front/workflows.php:/app/front/workflows.php
|
||||||
|
|||||||
106
docs/API.md
@@ -221,6 +221,112 @@ Example JSON of the `table_devices.json` endpoint with two Devices (database row
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## API Endpoint: Prometheus Exporter
|
||||||
|
|
||||||
|
* **Endpoint URL**: `/metrics`
|
||||||
|
* **Host**: (where NetAlertX exporter is running)
|
||||||
|
* **Port**: as configured in the `GRAPHQL_PORT` setting (`20212` by default)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Example Output of the `/metrics` Endpoint
|
||||||
|
|
||||||
|
Below is a representative snippet of the metrics you may find when querying the `/metrics` endpoint for `netalertx`. It includes both aggregate counters and `device_status` labels per device.
|
||||||
|
|
||||||
|
```
|
||||||
|
netalertx_connected_devices 31
|
||||||
|
netalertx_offline_devices 54
|
||||||
|
netalertx_down_devices 0
|
||||||
|
netalertx_new_devices 0
|
||||||
|
netalertx_archived_devices 31
|
||||||
|
netalertx_favorite_devices 2
|
||||||
|
netalertx_my_devices 54
|
||||||
|
|
||||||
|
netalertx_device_status{device="Net - Huawei", mac="Internet", ip="1111.111.111.111", vendor="None", first_connection="2021-01-01 00:00:00", last_connection="2025-08-04 17:57:00", dev_type="Router", device_status="Online"} 1
|
||||||
|
netalertx_device_status{device="Net - USG", mac="74:ac:74:ac:74:ac", ip="192.168.1.1", vendor="Ubiquiti Networks Inc.", first_connection="2022-02-12 22:05:00", last_connection="2025-06-07 08:16:49", dev_type="Firewall", device_status="Archived"} 1
|
||||||
|
netalertx_device_status{device="Raspberry Pi 4 LAN", mac="74:ac:74:ac:74:74", ip="192.168.1.9", vendor="Raspberry Pi Trading Ltd", first_connection="2022-02-12 22:05:00", last_connection="2025-08-04 17:57:00", dev_type="Singleboard Computer (SBC)", device_status="Online"} 1
|
||||||
|
...
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Metrics Explanation
|
||||||
|
|
||||||
|
#### 1. Aggregate Device Counts
|
||||||
|
|
||||||
|
Metric names prefixed with `netalertx_` provide aggregated counts by device status:
|
||||||
|
|
||||||
|
* `netalertx_connected_devices`: number of devices currently connected
|
||||||
|
* `netalertx_offline_devices`: devices currently offline
|
||||||
|
* `netalertx_down_devices`: down/unreachable devices
|
||||||
|
* `netalertx_new_devices`: devices recently detected
|
||||||
|
* `netalertx_archived_devices`: archived devices
|
||||||
|
* `netalertx_favorite_devices`: user-marked favorite devices
|
||||||
|
* `netalertx_my_devices`: devices associated with the current user context
|
||||||
|
|
||||||
|
These numeric values give a high-level overview of device distribution.
|
||||||
|
|
||||||
|
#### 2. Per‑Device Status with Labels
|
||||||
|
|
||||||
|
Each individual device is represented by a `netalertx_device_status` metric, with descriptive labels:
|
||||||
|
|
||||||
|
* `device`: friendly name of the device
|
||||||
|
* `mac`: MAC address (or placeholder)
|
||||||
|
* `ip`: last recorded IP address
|
||||||
|
* `vendor`: manufacturer or "None" if unknown
|
||||||
|
* `first_connection`: timestamp when the device was first observed
|
||||||
|
* `last_connection`: most recent contact timestamp
|
||||||
|
* `dev_type`: device category or type
|
||||||
|
* `device_status`: current status (Online / Offline / Archived / Down / ...)
|
||||||
|
|
||||||
|
The metric value is always `1` (indicating presence or active state) and the combination of labels identifies the device.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### How to Query with `curl`
|
||||||
|
|
||||||
|
To fetch the metrics from the NetAlertX exporter:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
curl 'http://<server_ip>:<GRAPHQL_PORT>/metrics' \
|
||||||
|
-H 'Authorization: Bearer <API_TOKEN>' \
|
||||||
|
-H 'Accept: text/plain'
|
||||||
|
```
|
||||||
|
|
||||||
|
Replace:
|
||||||
|
|
||||||
|
* `<server_ip>`: IP or hostname of the NetAlertX server
|
||||||
|
* `<GRAPHQL_PORT>`: port specified in your `GRAPHQL_PORT` setting (default: `20212`)
|
||||||
|
* `<API_TOKEN>` your Bearer token from the `API_TOKEN` setting
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
* **Endpoint**: `/metrics` provides both summary counters and per-device status entries.
|
||||||
|
* **Aggregate metrics** help monitor overall device states.
|
||||||
|
* **Detailed metrics** expose each device’s metadata via labels.
|
||||||
|
* **Use case**: feed into Prometheus for scraping, monitoring, alerting, or charting dashboard views.
|
||||||
|
|
||||||
|
### Prometheus Scraping Configuration
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: 'netalertx'
|
||||||
|
metrics_path: /metrics
|
||||||
|
scheme: http
|
||||||
|
scrape_interval: 60s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['<server_ip>:<GRAPHQL_PORT>']
|
||||||
|
authorization:
|
||||||
|
type: Bearer
|
||||||
|
credentials: <API_TOKEN>
|
||||||
|
```
|
||||||
|
|
||||||
|
### Grafana template
|
||||||
|
|
||||||
|
Grafana template sample: [Download json](./samples/API/Grafana_Dashboard.json)
|
||||||
|
|
||||||
## API Endpoint: /log files
|
## API Endpoint: /log files
|
||||||
|
|
||||||
This API endpoint retrieves files from the `/app/log` folder.
|
This API endpoint retrieves files from the `/app/log` folder.
|
||||||
|
|||||||
@@ -39,6 +39,8 @@
|
|||||||
| `devSourcePlugin` | Source plugin that discovered the device. | `ARPSCAN` |
|
| `devSourcePlugin` | Source plugin that discovered the device. | `ARPSCAN` |
|
||||||
| `devCustomProps` | [Custom properties](./CUSTOM_PROPERTIES.md) related to the device. The value is a base64-encoded JSON object. | `PHN2ZyB...` |
|
| `devCustomProps` | [Custom properties](./CUSTOM_PROPERTIES.md) related to the device. The value is a base64-encoded JSON object. | `PHN2ZyB...` |
|
||||||
| `devFQDN` | Fully qualified domain name. | `raspberrypi.local` |
|
| `devFQDN` | Fully qualified domain name. | `raspberrypi.local` |
|
||||||
|
| `devParentRelType` | The type of relationship between the current device and it's parent node. By default, selecting `nic` will hide it from lists. | `nic` |
|
||||||
|
| `devReqNicsOnline` | If all NICs are required to be online to mark teh current device online. | `0` |
|
||||||
|
|
||||||
|
|
||||||
To understand how values of these fields influuence application behavior, such as Notifications or Network topology, see also:
|
To understand how values of these fields influuence application behavior, such as Notifications or Network topology, see also:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ Check the the HTTP response of the failing backend call by following these steps
|
|||||||
- Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end):
|
- Copy the URL causing the error and enter it in the address bar of your browser directly and hit enter. The copied URLs could look something like this (notice the query strings at the end):
|
||||||
- `http://<NetAlertX URL>:20211/api/table_devices.json?nocache=1704141103121`
|
- `http://<NetAlertX URL>:20211/api/table_devices.json?nocache=1704141103121`
|
||||||
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesTotals`
|
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesTotals`
|
||||||
- `http://<NetAlertX URL>:20211/php/server/devices.php?action=getDevicesList&status=all`
|
|
||||||
|
|
||||||
- Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query.
|
- Post the error response in the existing issue thread on GitHub or create a new issue and include the redacted response of the failing query.
|
||||||
|
|
||||||
|
|||||||
34
docs/DEBUG_PHP.md
Executable file
@@ -0,0 +1,34 @@
|
|||||||
|
# Debugging backend PHP issues
|
||||||
|
|
||||||
|
## Logs in UI
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
You can view recent backend PHP errors directly in the **Maintenance > Logs** section of the UI. This provides quick access to logs without needing terminal access.
|
||||||
|
|
||||||
|
## Accessing logs directly
|
||||||
|
|
||||||
|
Sometimes, the UI might not be accessible. In that case, you can access the logs directly inside the container.
|
||||||
|
|
||||||
|
### Step-by-step:
|
||||||
|
|
||||||
|
1. **Open a shell into the container:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker exec -it netalertx /bin/sh
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Check the NGINX error log:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /var/log/nginx/error.log
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Check the PHP application error log:**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cat /app/log/app.php_errors.log
|
||||||
|
```
|
||||||
|
|
||||||
|
These logs will help identify syntax issues, fatal errors, or startup problems when the UI fails to load properly.
|
||||||
|
|
||||||
114
docs/DEVICE_HEURISTICS.md
Executable file
@@ -0,0 +1,114 @@
|
|||||||
|
# Device Heuristics: Icon and Type Guessing
|
||||||
|
|
||||||
|
This module is responsible for inferring the most likely **device type** and **icon** based on minimal identifying data like MAC address, vendor, IP, or device name.
|
||||||
|
|
||||||
|
It does this using a set of heuristics defined in an external JSON rules file, which it evaluates **in priority order**.
|
||||||
|
|
||||||
|
>[!NOTE]
|
||||||
|
> You can find the full source code of the heuristics module in the `device_heuristics.py` file.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## JSON Rule Format
|
||||||
|
|
||||||
|
Rules are defined in a file called `device_heuristics_rules.json` (located under `/back`), structured like:
|
||||||
|
|
||||||
|
```json
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"dev_type": "Phone",
|
||||||
|
"icon_html": "<i class=\"fa-brands fa-apple\"></i>",
|
||||||
|
"matching_pattern": [
|
||||||
|
{ "mac_prefix": "001A79", "vendor": "Apple" }
|
||||||
|
],
|
||||||
|
"name_pattern": ["iphone", "pixel"]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
```
|
||||||
|
|
||||||
|
>[!NOTE]
|
||||||
|
> Feel free to raise a PR in case you'd like to add any rules into the `device_heuristics_rules.json` file. Please place new rules into the correct position and consider the priority of already available rules.
|
||||||
|
|
||||||
|
### Supported fields:
|
||||||
|
|
||||||
|
| Field | Type | Description |
|
||||||
|
| ------------------ | -------------------- | --------------------------------------------------------------- |
|
||||||
|
| `dev_type` | `string` | Type to assign if rule matches (e.g. `"Gateway"`, `"Phone"`) |
|
||||||
|
| `icon_html` | `string` | Icon (HTML string) to assign if rule matches. Encoded to base64 at load time. |
|
||||||
|
| `matching_pattern` | `array` | List of `{ mac_prefix, vendor }` objects for first strict and then loose matching |
|
||||||
|
| `name_pattern` | `array` *(optional)* | List of lowercase substrings (used with regex) |
|
||||||
|
| `ip_pattern` | `array` *(optional)* | Regex patterns to match IPs |
|
||||||
|
|
||||||
|
**Order in this array defines priority** — rules are checked top-down and short-circuit on first match.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Matching Flow (in Priority Order)
|
||||||
|
|
||||||
|
The function `guess_device_attributes(...)` runs a series of matching functions in strict order:
|
||||||
|
|
||||||
|
1. MAC + Vendor → `match_mac_and_vendor()`
|
||||||
|
2. Vendor only → `match_vendor()`
|
||||||
|
3. Name pattern → `match_name()`
|
||||||
|
4. IP pattern → `match_ip()`
|
||||||
|
5. Final fallback → defaults defined in the `NEWDEV_devIcon` and `NEWDEV_devType` settings.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> The app will try guessing the device type or icon if `devType` or `devIcon` are `""` or `"null"`.
|
||||||
|
|
||||||
|
### Use of default values
|
||||||
|
|
||||||
|
The guessing process runs for every device **as long as the current type or icon still matches the default values**. Even if earlier heuristics return a match, the system continues evaluating additional clues — like name or IP — to try and replace placeholders.
|
||||||
|
|
||||||
|
```python
|
||||||
|
# Still considered a match attempt if current values are defaults
|
||||||
|
if (not type_ or type_ == default_type) or (not icon or icon == default_icon):
|
||||||
|
type_, icon = match_ip(ip, default_type, default_icon)
|
||||||
|
```
|
||||||
|
|
||||||
|
In other words: if the type or icon is still `"unknown"` (or matches the default), the system assumes the match isn’t final — and keeps looking. It stops only when both values are non-default (defaults are defined in the `NEWDEV_devIcon` and `NEWDEV_devType` settings).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Match Behavior (per function)
|
||||||
|
|
||||||
|
These functions are executed in the following order:
|
||||||
|
|
||||||
|
### `match_mac_and_vendor(mac_clean, vendor, ...)`
|
||||||
|
|
||||||
|
* Looks for MAC prefix **and** vendor substring match
|
||||||
|
* Most precise
|
||||||
|
* Stops as soon as a match is found
|
||||||
|
|
||||||
|
### `match_vendor(vendor, ...)`
|
||||||
|
|
||||||
|
* Falls back to substring match on vendor only
|
||||||
|
* Ignores rules where `mac_prefix` is present (ensures this is really a fallback)
|
||||||
|
|
||||||
|
### `match_name(name, ...)`
|
||||||
|
|
||||||
|
* Lowercase name is compared against all `name_pattern` values using regex
|
||||||
|
* Good for user-assigned labels (e.g. "AP Office", "iPhone")
|
||||||
|
|
||||||
|
### `match_ip(ip, ...)`
|
||||||
|
|
||||||
|
* If IP is present and matches regex patterns under any rule, it returns that type/icon
|
||||||
|
* Usually used for gateways or local IP ranges
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Icons
|
||||||
|
|
||||||
|
* Each rule can define an `icon_html`, which is converted to a `icon_base64` on load
|
||||||
|
* If missing, it falls back to the passed-in `default_icon` (`NEWDEV_devIcon` setting)
|
||||||
|
* If a match is found but icon is still blank, default is used
|
||||||
|
|
||||||
|
**TL;DR:** Type and icon must both be matched. If only one is matched, the other falls back to the default.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Priority Mechanics
|
||||||
|
|
||||||
|
* JSON rules are evaluated **top-to-bottom**
|
||||||
|
* Matching is **first-hit wins** — no scoring, no weights
|
||||||
|
* Rules that are more specific (e.g. exact MAC prefixes) should be listed earlier
|
||||||
@@ -69,7 +69,7 @@ services:
|
|||||||
network_mode: "host"
|
network_mode: "host"
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- ${APP_DATA_LOCATION}/netalertx/config:/app/config
|
- ${APP_CONFIG_LOCATION}/netalertx/config:/app/config
|
||||||
- ${APP_DATA_LOCATION}/netalertx/db/:/app/db/
|
- ${APP_DATA_LOCATION}/netalertx/db/:/app/db/
|
||||||
# (optional) useful for debugging if you have issues setting up the container
|
# (optional) useful for debugging if you have issues setting up the container
|
||||||
- ${LOGS_LOCATION}:/app/log
|
- ${LOGS_LOCATION}:/app/log
|
||||||
|
|||||||
78
docs/FIX_OFFLINE_DETECTION.md
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
# Troubleshooting: Devices Show Offline When They Are Online
|
||||||
|
|
||||||
|
In some network setups, certain devices may intermittently appear as **offline** in NetAlertX, even though they are connected and responsive. This issue is often more noticeable with devices that have **higher IP addresses** within the subnet.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
>
|
||||||
|
> Network presence graph showing increased drop outs before enabling additional `ICMP` scans and continuous online presence after following this guide. This graph shows a sudden spike in drop outs probably caused by a device software update.
|
||||||
|
> 
|
||||||
|
|
||||||
|
## Symptoms
|
||||||
|
|
||||||
|
* Devices sporadically show as offline in the presence timeline.
|
||||||
|
* This behavior often affects devices with higher IPs (e.g., `192.168.1.240+`).
|
||||||
|
* Presence data appears inconsistent or unreliable despite the device being online.
|
||||||
|
|
||||||
|
## Cause
|
||||||
|
|
||||||
|
This issue is typically related to scanning limitations:
|
||||||
|
|
||||||
|
* **ARP scan timeouts** may prevent full subnet coverage.
|
||||||
|
* **Sole reliance on ARP** can result in missed detections:
|
||||||
|
|
||||||
|
* Some devices (like iPhones) suppress or reject frequent ARP requests.
|
||||||
|
* ARP responses may be blocked or delayed due to power-saving features or OS behavior.
|
||||||
|
|
||||||
|
* **Scanning frequency conflicts**, where devices ignore repeated scans within a short period.
|
||||||
|
|
||||||
|
## Recommended Fixes
|
||||||
|
|
||||||
|
To improve presence accuracy and reduce false offline states:
|
||||||
|
|
||||||
|
### ✅ Increase ARP Scan Timeout
|
||||||
|
|
||||||
|
Extend the ARP scanner timeout to ensure full subnet coverage:
|
||||||
|
|
||||||
|
```env
|
||||||
|
ARPSCAN_RUN_TIMEOUT=360
|
||||||
|
```
|
||||||
|
|
||||||
|
> Adjust based on your network size and device count.
|
||||||
|
|
||||||
|
### ✅ Add ICMP (Ping) Scanning
|
||||||
|
|
||||||
|
Enable the `ICMP` scan plugin to complement ARP detection. ICMP is often more reliable for detecting active hosts, especially when ARP fails.
|
||||||
|
|
||||||
|
### ✅ Use Multiple Detection Methods
|
||||||
|
|
||||||
|
A combined approach greatly improves detection robustness:
|
||||||
|
|
||||||
|
* `ARPSCAN` (default)
|
||||||
|
* `ICMP` (ping)
|
||||||
|
* `NMAPDEV` (nmap)
|
||||||
|
|
||||||
|
This hybrid strategy increases reliability, especially for down detection and alerting. See [other plugins](./PLUGINS.md) that might be compatible with your setup. See benefits and drawbacks of individual scan methods in their respective docs.
|
||||||
|
|
||||||
|
## Results
|
||||||
|
|
||||||
|
After increasing the ARP timeout and adding ICMP scanning (on select IP ranges), users typically report:
|
||||||
|
|
||||||
|
* More consistent presence graphs
|
||||||
|
* Fewer false offline events
|
||||||
|
* Better coverage across all IP ranges
|
||||||
|
|
||||||
|
## Summary
|
||||||
|
|
||||||
|
| Setting | Recommendation |
|
||||||
|
| --------------------- | --------------------------------------------- |
|
||||||
|
| `ARPSCAN_RUN_TIMEOUT` | Increase to ensure scans reach all IPs |
|
||||||
|
| `ICMP` Scan | Enable to detect devices ARP might miss |
|
||||||
|
| Multi-method Scanning | Use a mix of ARP, ICMP, and NMAP-based methods |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Tip:** Each environment is unique. Consider fine-tuning scan settings based on your network size, device behavior, and desired detection accuracy.
|
||||||
|
|
||||||
|
Let us know in the [NetAlertX Discussions](https://github.com/jokob-sk/NetAlertX/discussions) if you have further feedback or edge cases.
|
||||||
|
|
||||||
|
See also [Remote Networks](./REMOTE_NETWORKS.md) for more advanced setups.
|
||||||
@@ -5,7 +5,7 @@ To download and install NetAlertX on the hardware/server directly use the `curl`
|
|||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> This is an Experimental feature 🧪 and it relies on community support.
|
> This is an Experimental feature 🧪 and it relies on community support.
|
||||||
>
|
>
|
||||||
> 🙏 Looking for maintainers for this installation method 🙂 Curent community volunteers:
|
> 🙏 Looking for maintainers for this installation method 🙂 Current community volunteers:
|
||||||
> - [slammingprogramming](https://github.com/slammingprogramming)
|
> - [slammingprogramming](https://github.com/slammingprogramming)
|
||||||
>
|
>
|
||||||
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
> There is no guarantee that the install script or any other script will gracefully handle other installed software.
|
||||||
|
|||||||
@@ -1,63 +1,104 @@
|
|||||||
## How to setup your Network page
|
## How to Set Up Your Network Page
|
||||||
|
|
||||||
Make sure you have a root device with the MAC `Internet` (No other MAC addresses are currently supported as the root node) set to a network device type (e.g.: **Type**:`Router`).
|
The **Network** page lets you map how devices connect — visually and logically.
|
||||||
|
It’s especially useful for planning infrastructure, assigning parent-child relationships, and spotting gaps.
|
||||||
|
|
||||||
> 💡 Tip: You can add dummy devices via the [Create dummy device](./DEVICE_MANAGEMENT.md#dummy-devices) button in the Devices listing page.
|

|
||||||
|
|
||||||
> 💡 Tip: Export your configuration of the Network and Devices once in a while via the Export CSV feature under **Maintenance** -> **Backup/Restore** -> **CSV Export**.
|
To get started, you’ll need to define at least one root node and mark certain devices as network nodes (like Switches or Routers).
|
||||||
|
|
||||||
## ⚡Quick setup:
|
---
|
||||||
|
|
||||||
* Go to a Device you want to use as network device (network nodes, such as a Switch).
|
Start by creating a root device with the MAC address `Internet`, if the application didn’t create one already.
|
||||||
* Set the **Type** of such a device to one of the following: AP, Firewall, Gateway, PLC, Powerline, Router, Switch, USB LAN Adapter, USB WIFI Adapter and WLAN (you can create a custom network type device with in Settings -> General -> `NETWORK_DEVICE_TYPES`).
|
This special MAC address (`Internet`) is required for the root network node — no other value is currently supported.
|
||||||
* Save and go to Network where the devices you've marked as network devices (by selecting the Type as mentioned above) will show up as tabs.
|
Set its **Type** to a valid network type — such as `Router` or `Gateway`.
|
||||||
* You can now assign the Unassigend devices to the network node.
|
|
||||||
* If port is empty or 0 a wifi icon is rendered, otherwise a ethernet port icon.
|
|
||||||
|
|
||||||
|
> [!TIP]
|
||||||
|
> If you don’t have one, use the [Create new device](./DEVICE_MANAGEMENT.md#dummy-devices) button on the **Devices** page to add a root device.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚡ Quick Setup
|
||||||
|
|
||||||
|
1. Open the device you want to use as a network node (e.g. a Switch).
|
||||||
|
2. Set its **Type** to one of the following:
|
||||||
|
`AP`, `Firewall`, `Gateway`, `PLC`, `Powerline`, `Router`, `Switch`, `USB LAN Adapter`, `USB WIFI Adapter`, `WLAN`
|
||||||
|
*(Or add custom types under **Settings → General → `NETWORK_DEVICE_TYPES`**.)*
|
||||||
|
3. Save the device.
|
||||||
|
4. Go to the **Network** page — supported device types will appear as tabs.
|
||||||
|
5. Use the **Assign** button to connect unassigned devices to a network node.
|
||||||
|
6. If the **Port** is `0` or empty, a Wi-Fi icon is shown. Otherwise, an Ethernet icon appears.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
>
|
> Use [bulk editing](./DEVICES_BULK_EDITING.md) with _CSV Export_ to fix `Internet` root assignments or update many devices at once.
|
||||||
> [Bulk-edit devices](./DEVICES_BULK_EDITING.md) by using the _CSV Export_ functionality in the _Maintenance_ section. You can use this to fix `Internet` node assignment issues.
|
|
||||||
|
|
||||||
## 🔍Detailed example:
|
---
|
||||||
|
|
||||||
In this example you will setup a device named `rapberrypi` as a `Switch` in our network.
|
## Example: Setting up a `raspberrypi` as a Switch
|
||||||
|
|
||||||
### 1. Device details page
|
Let’s walk through setting up a device named `raspberrypi` to act as a network Switch that other devices connect through.
|
||||||
|
|
||||||
- Go to the `Devices` (1) page:
|
---
|
||||||
|
|
||||||

|
### 1. Set Device Type and Parent
|
||||||
|
|
||||||
- In the (2) `Details` tab navigate to the the `Type` (3) dropdown and select the type `Switch` (4).
|
- Go to the **Devices** page
|
||||||
|
- Open the device detail view for `raspberrypi`
|
||||||
|
- In the **Type** dropdown, select `Switch`
|
||||||
|
|
||||||
> Note: Only the following device types will show up as selectable Network nodes ( = devices you can connect other devices to):
|

|
||||||
> AP, Firewall, Gateway, Hypervisor, PLC, Powerline, Router, Switch, USB LAN Adapter, USB WIFI Adapter and WLAN. Custom types can be added via the `NETWORK_DEVICE_TYPES` setting.
|
|
||||||
|
|
||||||
- Assign a device to your root device from the `Node` (5) dropdown which has the MAC `Internet` (6) (Your name may differ, but the MAC needs to be set to `Internet` - this is done by default).
|
- Optionally assign a **Parent Node** (where this device connects to) and the **Relationship type** of the connection.
|
||||||
|
The `nic` relationship type can affect parent notifications — see the setting description and [Notifications documentation](./NOTIFICATIONS.md) for more.
|
||||||
|
|
||||||
- Save your changes (7)
|

|
||||||
|
|
||||||
### 2. Network page
|
> [!NOTE]
|
||||||
|
> Only certain device types can act as network nodes:
|
||||||
|
> `AP`, `Firewall`, `Gateway`, `Hypervisor`, `PLC`, `Powerline`, `Router`, `Switch`, `USB LAN Adapter`, `USB WIFI Adapter`, `WLAN`
|
||||||
|
> You can add custom types via the `NETWORK_DEVICE_TYPES` setting.
|
||||||
|
|
||||||
- Navigate to your `Network` (1) page:
|
- Click **Save**
|
||||||
|
|
||||||

|
---
|
||||||
|
|
||||||
- Notice the newly added `raspberrypi` (2) tab which now represents a network node, also showing up in the tree (3).
|
### 2. Confirm The Device Appears as a Network Node
|
||||||
- As we asssigned the `raspberrypi` in the previous (1) Device details page section to the `Internet` parent network node in step (6), the link is also showing up in the tree diagram (4)
|
|
||||||
- We can now assign the device `(AppleTV)` (5) to this `raspberrypi` node, representing a network Switch in this example
|
|
||||||
|
|
||||||
### 3. Network page with 2 levels
|
You can confirm that `raspberrypi` now acts as a network device in two places:
|
||||||
|
|
||||||
- After clicking the `Assign` button in the previous section, the `(AppleTV)` (1) device is now connected to our `raspberrypi` (2).
|
- Navigate to a different device and verify that `raspberrypi` now appears as an option for a **Parent Node**:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
- You can see the `raspberrypi` represents the Network node type `Switch` (3)
|
- Go to the **Network** page — you'll now see a `raspberrypi` tab, meaning it's recognized as a network node (Switch):
|
||||||
- The `(AppleTV)` to `raspberrypi` connection is also displayed in the table of `Connected devices` (4).
|
|
||||||
- You can also see that our `raspberrypi` node is connected to it's Parent network device node with the MAC `Internet` (5). This connection again shows up in the tree (6) as well.
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- You can now assign other devices to it.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. Assign Connected Devices
|
||||||
|
|
||||||
|
- Use the **Assign** button to link other devices (e.g. PCs) to `raspberrypi`.
|
||||||
|
- After assigning, connected devices will appear beneath the `raspberrypi` switch node.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
- Relationship lines may vary in color based on the selected Relationship type. These are editable on the device details page where you can also assign a parent node.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
> Hovering over devices in the tree reveals connection details and tooltips for quick inspection.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ Summary
|
||||||
|
|
||||||
|
To configure devices on the **Network** page:
|
||||||
|
|
||||||
|
- Ensure a device with MAC `Internet` is set up as the root
|
||||||
|
- Assign valid **Type** values to switches, routers, and other supported nodes that represent network devices
|
||||||
|
- Use the **Assign** button to connect devices logically to their parent node
|
||||||
|
|
||||||
|
Need to reset or undo changes? [Use backups](./BACKUPS.md) or [bulk editing](./DEVICES_BULK_EDITING.md) to manage devices at scale. You can also automate device assignment with [Workflows](./WORKFLOWS.md).
|
||||||
|
|||||||
@@ -15,11 +15,12 @@ There are 4 ways how to influence notifications:
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
There are 4 settings on the device for influencing notifications. You can:
|
The following device properties influence notifications. You can:
|
||||||
|
|
||||||
1. **Alert Events** - Enables alerts of connections, disconnections, IP changes (down and down reconnected notifications are still sent even if this is disabled).
|
1. **Alert Events** - Enables alerts of connections, disconnections, IP changes (down and down reconnected notifications are still sent even if this is disabled).
|
||||||
2. **Alert Down** - Alerts when a device goes down. This setting overrides a disabled **Alert Events** setting, so you will get a notification of a device going down even if you don't have **Alert Events** ticked. Disabling this will disable down and down reconnected notifications on the device.
|
2. **Alert Down** - Alerts when a device goes down. This setting overrides a disabled **Alert Events** setting, so you will get a notification of a device going down even if you don't have **Alert Events** ticked. Disabling this will disable down and down reconnected notifications on the device.
|
||||||
3. **Skip repeated notifications**, if for example you know there is a temporary issue and want to pause the same notification for this device for a given time.
|
3. **Skip repeated notifications**, if for example you know there is a temporary issue and want to pause the same notification for this device for a given time.
|
||||||
|
4. **Require NICs Online** - Indicates whether this device should be considered online only if all associated NICs (devices with the `nic` relationship type) are online. If disabled, the device is considered online if any NIC is online. If a NIC is online it sets the parent (this) device's status to online irrespectivelly of the detected device's status. The Relationship type is set on the childern device.
|
||||||
|
|
||||||
> [!NOTE]
|
> [!NOTE]
|
||||||
> Please read through the [NTFPRCS plugin](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/notification_processing/README.md) documentation to understand how device and global settings influence the notification processing.
|
> Please read through the [NTFPRCS plugin](https://github.com/jokob-sk/NetAlertX/blob/main/front/plugins/notification_processing/README.md) documentation to understand how device and global settings influence the notification processing.
|
||||||
|
|||||||
@@ -43,51 +43,50 @@ NetAlertX supports additional plugins to extend its functionality, each with its
|
|||||||
|
|
||||||
Device-detecting plugins insert values into the `CurrentScan` database table. The plugins that are not required are safe to ignore, however, it makes sense to have at least some device-detecting plugins enabled, such as `ARPSCAN` or `NMAPDEV`.
|
Device-detecting plugins insert values into the `CurrentScan` database table. The plugins that are not required are safe to ignore, however, it makes sense to have at least some device-detecting plugins enabled, such as `ARPSCAN` or `NMAPDEV`.
|
||||||
|
|
||||||
|
| ID | Plugin docs | Type | Description | Features | Required |
|
||||||
| ID | Type | Description | Features | Required | Data source | Detailed docs |
|
| --------------- | ------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------------------------- | -------- | -------- |
|
||||||
|---------------|---------|--------------------------------------------|----------|----------|--------------|---------------------------------------------------------------------|
|
| `APPRISE` | [_publisher_apprise](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_apprise/) | ▶️ | Apprise notification proxy | | |
|
||||||
| `APPRISE` | ▶️ | Apprise notification proxy | | | Script | [_publisher_apprise](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_apprise/) |
|
| `ARPSCAN` | [arp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/arp_scan/) | 🔍 | ARP-scan on current network | | |
|
||||||
| `ARPSCAN` | 🔍 | ARP-scan on current network | | | Script | [arp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/arp_scan/) |
|
| `AVAHISCAN` | [avahi_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/avahi_scan/) | 🆎 | Avahi (mDNS-based) name resolution | | |
|
||||||
| `AVAHISCAN` | 🆎 | Avahi (mDNS-based) name resolution | | | Script | [avahi_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/avahi_scan/) |
|
| `ASUSWRT` | [asuswrt_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/asuswrt_import/) | 🔍 | Import connected devices from AsusWRT | | |
|
||||||
| `ASUSWRT` | 🔍 | Import connected devices from AsusWRT | | | Script | [asuswrt_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/asuswrt_import/) |
|
| `CSVBCKP` | [csv_backup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/csv_backup/) | ⚙ | CSV devices backup | | |
|
||||||
| `CSVBCKP` | ⚙ | CSV devices backup | | | Script | [csv_backup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/csv_backup/) |
|
| `CUSTPROP` | [custom_props](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/custom_props/) | ⚙ | Managing custom device properties values | | Yes |
|
||||||
| `CUSTPROP` | ⚙ | Managing custom device properties values | | Yes | Template | [custom_props](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/custom_props/) |
|
| `DBCLNP` | [db_cleanup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/db_cleanup/) | ⚙ | Database cleanup | | Yes\* |
|
||||||
| `DBCLNP` | ⚙ | Database cleanup | | Yes* | Script | [db_cleanup](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/db_cleanup/) |
|
| `DDNS` | [ddns_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ddns_update/) | ⚙ | DDNS update | | |
|
||||||
| `DDNS` | ⚙ | DDNS update | | | Script | [ddns_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ddns_update/) |
|
| `DHCPLSS` | [dhcp_leases](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_leases/) | 🔍/📥/🆎 | Import devices from DHCP leases | | |
|
||||||
| `DHCPLSS` | 🔍/📥/🆎| Import devices from DHCP leases | | | Script | [dhcp_leases](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_leases/) |
|
| `DHCPSRVS` | [dhcp_servers](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_servers/) | ♻ | DHCP servers | | |
|
||||||
| `DHCPSRVS` | ♻ | DHCP servers | | | Script | [dhcp_servers](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dhcp_servers/) |
|
| `DIGSCAN` | [dig_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dig_scan/) | 🆎 | Dig (DNS) Name resolution | | |
|
||||||
| `DIGSCAN` | 🆎 | Dig (DNS) Name resolution | | | Script | [dig_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/dig_scan/) |
|
| `FREEBOX` | [freebox](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/freebox/) | 🔍/♻/🆎 | Pull data and names from Freebox/Iliadbox | | |
|
||||||
| `FREEBOX` | 🔍/♻/🆎| Pull data and names from Freebox/Iliadbox | | | Script | [freebox](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/freebox/) |
|
| `ICMP` | [icmp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/icmp_scan/) | ♻ | ICMP (ping) status checker | | |
|
||||||
| `ICMP` | ♻ | ICMP (ping) status checker | | | Script | [icmp_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/icmp_scan/) |
|
| `INTRNT` | [internet_ip](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_ip/) | 🔍 | Internet IP scanner | | |
|
||||||
| `INTRNT` | 🔍 | Internet IP scanner | | | Script | [internet_ip](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_ip/) |
|
| `INTRSPD` | [internet_speedtest](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_speedtest/) | ♻ | Internet speed test | | |
|
||||||
| `INTRSPD` | ♻ | Internet speed test | | | Script | [internet_speedtest](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/internet_speedtest/) |
|
| `IPNEIGH` | [ipneigh](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ipneigh/) | 🔍 | Scan ARP (IPv4) and NDP (IPv6) tables | | |
|
||||||
| `IPNEIGH` | 🔍 | Scan ARP (IPv4) and NDP (IPv6) tables | | | Script | [ipneigh](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ipneigh/) |
|
| `LUCIRPC` | [luci_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/luci_import/) | 🔍 | Import connected devices from OpenWRT | | |
|
||||||
| `LUCIRPC` | 🔍 | Import connected devices from OpenWRT | | | Script | [luci_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/luci_import/) |
|
| `MAINT` | [maintenance](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/maintenance/) | ⚙ | Maintenance of logs, etc. | | |
|
||||||
| `MAINT` | ⚙ | Maintenance of logs, etc. | | | Script | [maintenance](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/maintenance/) |
|
| `MQTT` | [_publisher_mqtt](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_mqtt/) | ▶️ | MQTT for synching to Home Assistant | | |
|
||||||
| `MQTT` | ▶️ | MQTT for synching to Home Assistant | | | Script | [_publisher_mqtt](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_mqtt/) |
|
| `NBTSCAN` | [nbtscan_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nbtscan_scan/) | 🆎 | Nbtscan (NetBIOS-based) name resolution | | |
|
||||||
| `NBTSCAN` | 🆎 | Nbtscan (NetBIOS-based) name resolution | | | Script | [nbtscan_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nbtscan_scan/) |
|
| `NEWDEV` | [newdev_template](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/newdev_template/) | ⚙ | New device template | | Yes |
|
||||||
| `NEWDEV` | ⚙ | New device template | | Yes | Template | [newdev_template](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/newdev_template/) |
|
| `NMAP` | [nmap_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan/) | ♻ | Nmap port scanning & discovery | | |
|
||||||
| `NMAP` | ♻ | Nmap port scanning & discovery | | | Script | [nmap_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan/) |
|
| `NMAPDEV` | [nmap_dev_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_dev_scan/) | 🔍 | Nmap dev scan on current network | | |
|
||||||
| `NMAPDEV` | 🔍 | Nmap dev scan on current network | | | Script | [nmap_dev_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_dev_scan/) |
|
| `NSLOOKUP` | [nslookup_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nslookup_scan/) | 🆎 | NSLookup (DNS-based) name resolution | | |
|
||||||
| `NSLOOKUP` | 🆎 | NSLookup (DNS-based) name resolution | | | Script | [nslookup_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nslookup_scan/) |
|
| `NTFPRCS` | [notification_processing](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/notification_processing/) | ⚙ | Notification processing | | Yes |
|
||||||
| `NTFPRCS` | ⚙ | Notification processing | | Yes | Template | [notification_processing](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/notification_processing/)|
|
| `NTFY` | [_publisher_ntfy](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_ntfy/) | ▶️ | NTFY notifications | | |
|
||||||
| `NTFY` | ▶️ | NTFY notifications | | | Script | [_publisher_ntfy](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_ntfy/) |
|
| `OMDSDN` | [omada_sdn_imp](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_imp/) | 📥/🆎 ❌ | UNMAINTAINED use `OMDSDNOPENAPI` | 🖧 🔄 | |
|
||||||
| `OMDSDN` | 📥/🆎 ❌ | UNMAINTAINED use `OMDSDNOPENAPI` | 🖧 🔄 | | Script | [omada_sdn_imp](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_imp/) |
|
| `OMDSDNOPENAPI` | [omada_sdn_openapi](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_openapi/) | 📥/🆎 | OMADA TP-Link import via OpenAPI | 🖧 | |
|
||||||
| `OMDSDNOPENAPI`| 📥/🆎 | OMADA TP-Link import via OpenAPI | 🖧 | | Script | [omada_sdn_openapi](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/omada_sdn_openapi/) |
|
| `PIHOLE` | [pihole_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/pihole_scan/) | 🔍/🆎/📥 | Pi-hole device import & sync | | |
|
||||||
| `PIHOLE` | 🔍/🆎/📥| Pi-hole device import & sync | | | SQLite DB | [pihole_scan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/pihole_scan/) |
|
| `PUSHSAFER` | [_publisher_pushsafer](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushsafer/) | ▶️ | Pushsafer notifications | | |
|
||||||
| `PUSHSAFER` | ▶️ | Pushsafer notifications | | | Script | [_publisher_pushsafer](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushsafer/) |
|
| `PUSHOVER` | [_publisher_pushover](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushover/) | ▶️ | Pushover notifications | | |
|
||||||
| `PUSHOVER` | ▶️ | Pushover notifications | | | Script | [_publisher_pushover](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_pushover/) |
|
| `SETPWD` | [set_password](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password/) | ⚙ | Set password | | Yes |
|
||||||
| `SETPWD` | ⚙ | Set password | | Yes | Template | [set_password](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password/) |
|
| `SMTP` | [_publisher_email](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_email/) | ▶️ | Email notifications | | |
|
||||||
| `SMTP` | ▶️ | Email notifications | | | Script | [_publisher_email](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_email/) |
|
| `SNMPDSC` | [snmp_discovery](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/snmp_discovery/) | 🔍/📥 | SNMP device import & sync | | |
|
||||||
| `SNMPDSC` | 🔍/📥 | SNMP device import & sync | | | Script | [snmp_discovery](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/snmp_discovery/) |
|
| `SYNC` | [sync](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/sync/) | 🔍/⚙/📥 | Sync & import from NetAlertX instances | 🖧 🔄 | Yes |
|
||||||
| `SYNC` | 🔍/⚙/📥| Sync & import from NetAlertX instances | 🖧 🔄 | Yes | Script | [sync](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/sync/) |
|
| `TELEGRAM` | [_publisher_telegram](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_telegram/) | ▶️ | Telegram notifications | | |
|
||||||
| `TELEGRAM` | ▶️ | Telegram notifications | | | Script | [_publisher_telegram](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_telegram/) |
|
| `UI` | [ui_settings](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ui_settings/) | ♻ | UI specific settings | | Yes |
|
||||||
| `UI` | ♻ | UI specific settings | | Yes | Template | [ui_settings](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/ui_settings/) |
|
| `UNFIMP` | [unifi_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/unifi_import/) | 🔍/📥/🆎 | UniFi device import & sync | 🖧 | |
|
||||||
| `UNFIMP` | 🔍/📥/🆎| UniFi device import & sync | 🖧 | | Script | [unifi_import](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/unifi_import/) |
|
| `VNDRPDT` | [vendor_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/vendor_update/) | ⚙ | Vendor database update | | |
|
||||||
| `VNDRPDT` | ⚙ | Vendor database update | | | Script | [vendor_update](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/vendor_update/) |
|
| `WEBHOOK` | [_publisher_webhook](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_webhook/) | ▶️ | Webhook notifications | | |
|
||||||
| `WEBHOOK` | ▶️ | Webhook notifications | | | Script | [_publisher_webhook](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/_publisher_webhook/) |
|
| `WEBMON` | [website_monitor](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/website_monitor/) | ♻ | Website down monitoring | | |
|
||||||
| `WEBMON` | ♻ | Website down monitoring | | | Script | [website_monitor](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/website_monitor/) |
|
| `WOL` | [wake_on_lan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/wake_on_lan/) | ♻ | Automatic wake-on-lan | | |
|
||||||
| `WOL` | ♻ | Automatic wake-on-lan | | | Script | [wake_on_lan](https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/wake_on_lan/) |
|
|
||||||
|
|
||||||
|
|
||||||
> \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed.
|
> \* The database cleanup plugin (`DBCLNP`) is not _required_ but the app will become unusable after a while if not executed.
|
||||||
|
|||||||
65
docs/SMTP.md
@@ -1,6 +1,49 @@
|
|||||||
# 📧 SMTP guides
|
# 📧 SMTP server guides
|
||||||
|
|
||||||
## Using the GMX SMTP server
|
The SMTP plugin supports any SMTP server. Here are some commonly used services to help speed up your configuration.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> If you are using a self hosted SMTP server ssh into the container and verify (e.g. via ping) that your server is reachable from within the NetAlertX container. See also how to ssh into the container if you are running it as a [Home Assistant](./HOME_ASSISTANT.md) addon.
|
||||||
|
|
||||||
|
## Gmail
|
||||||
|
|
||||||
|
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
||||||
|
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
||||||
|
|
||||||
|
2. Specify the following settings:
|
||||||
|
|
||||||
|
```python
|
||||||
|
SMTP_RUN='on_notification'
|
||||||
|
SMTP_SKIP_TLS=True
|
||||||
|
SMTP_FORCE_SSL=True
|
||||||
|
SMTP_PORT=465
|
||||||
|
SMTP_SERVER='smtp.gmail.com'
|
||||||
|
SMTP_PASS='16-digit passcode from google'
|
||||||
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Brevo
|
||||||
|
|
||||||
|
Brevo allows for 300 free emails per day as of time of writing.
|
||||||
|
|
||||||
|
1. Create an account on Brevo: https://www.brevo.com/free-smtp-server/
|
||||||
|
2. Click your name -> SMTP & API
|
||||||
|
3. Click Generate a new SMTP key
|
||||||
|
4. Save the details and fill in the NetAlertX settings as below.
|
||||||
|
|
||||||
|
```python
|
||||||
|
SMTP_SERVER='smtp-relay.brevo.com'
|
||||||
|
SMTP_PORT=587
|
||||||
|
SMTP_SKIP_LOGIN=False
|
||||||
|
SMTP_USER='user@email.com'
|
||||||
|
SMTP_PASS='xsmtpsib-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxx'
|
||||||
|
SMTP_SKIP_TLS=False
|
||||||
|
SMTP_FORCE_SSL=False
|
||||||
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
|
SMTP_REPORT_FROM='NetAlertX <user@email.com>'
|
||||||
|
```
|
||||||
|
|
||||||
|
## GMX
|
||||||
|
|
||||||
1. Go to your GMX account https://account.gmx.com
|
1. Go to your GMX account https://account.gmx.com
|
||||||
2. Under Security Options enable 2FA (Two-factor authentication)
|
2. Under Security Options enable 2FA (Two-factor authentication)
|
||||||
@@ -21,21 +64,3 @@
|
|||||||
SMTP_REPORT_TO='some_target_email@gmail.com'
|
SMTP_REPORT_TO='some_target_email@gmail.com'
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
## Using the Gmail SMTP server
|
|
||||||
|
|
||||||
1. Create an app password by following the instructions from Google, you need to Enable 2FA for this to work.
|
|
||||||
[https://support.google.com/accounts/answer/185833](https://support.google.com/accounts/answer/185833)
|
|
||||||
|
|
||||||
2. Specify the following settings:
|
|
||||||
|
|
||||||
```python
|
|
||||||
SMTP_RUN='on_notification'
|
|
||||||
SMTP_SKIP_TLS=True
|
|
||||||
SMTP_FORCE_SSL=True
|
|
||||||
SMTP_PORT=465
|
|
||||||
SMTP_SERVER='smtp.gmail.com'
|
|
||||||
SMTP_PASS='16-digit passcode from google'
|
|
||||||
SMTP_REPORT_TO='some_target_email@gmail.com'
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
# Docker Update Strategies to upgrade NetAlertX
|
# Docker Update Strategies to upgrade NetAlertX
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> For versions prior to `v25.6.7` upgrade to version `v25.5.24` first (`docker pull ghcr.io/jokob-sk/netalertx:25.5.24`) as later versions don't support a full upgrade. Alternatovelly, devices and settings can be migrated manually, e.g. via [CSV import](./DEVICES_BULK_EDITING.md).
|
> For versions prior to `v25.6.7` upgrade to version `v25.5.24` first (`docker pull ghcr.io/jokob-sk/netalertx:25.5.24`) as later versions don't support a full upgrade. Alternatively, devices and settings can be migrated manually, e.g. via [CSV import](./DEVICES_BULK_EDITING.md).
|
||||||
|
|
||||||
This guide outlines approaches for updating Docker containers, usually when upgrading to a newer version of NetAlertX. Each method offers different benefits depending on the situation. Here are the methods:
|
This guide outlines approaches for updating Docker containers, usually when upgrading to a newer version of NetAlertX. Each method offers different benefits depending on the situation. Here are the methods:
|
||||||
|
|
||||||
- Manual: Direct commands to stop, remove, and rebuild containers.
|
- Manual: Direct commands to stop, remove, and rebuild containers.
|
||||||
- Dockcheck: Semi-automated with more control, suited for bulk updates.
|
- Dockcheck: Semi-automated with more control, suited for bulk updates.
|
||||||
- Watchtower: Fully automated, runs continuously to check and update containers.
|
- Watchtower: Fully automated, runs continuously to check and update containers.
|
||||||
|
- Portainer: Manual with UI.
|
||||||
|
|
||||||
You can choose any approach that fits your workflow.
|
You can choose any approach that fits your workflow.
|
||||||
|
|
||||||
@@ -107,10 +108,42 @@ docker run -d \
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## 4. Portainer controlled image
|
||||||
|
|
||||||
|
This assumes you're using Portainer to manage Docker (or Docker Swarm) and want to pull the latest version of an image and redeploy the container.
|
||||||
|
|
||||||
|
> [!NOTE]
|
||||||
|
> * Portainer does **not auto-update** containers. For automation, use **Watchtower** or similar tools.
|
||||||
|
> * Make sure you have the [persistent volumes mounted or backups ready](BACKUPS.md) before recreating.
|
||||||
|
|
||||||
|
### 4.1 Steps to Update an Image in Portainer (Standalone Docker)
|
||||||
|
|
||||||
|
1. **Login to Portainer.**
|
||||||
|
2. Go to **"Containers"** in the left sidebar.
|
||||||
|
3. Find the container you want to update, click its name.
|
||||||
|
4. Click **"Recreate"** (top right).
|
||||||
|
5. **Tick**: _Pull latest image_ (this ensures Portainer fetches the newest version from Docker Hub or your registry).
|
||||||
|
6. Click **"Recreate"** again.
|
||||||
|
7. Wait for the container to be stopped, removed, and recreated with the updated image.
|
||||||
|
|
||||||
|
### 4.2 For Docker Swarm Services
|
||||||
|
|
||||||
|
If you're using Docker Swarm (under **"Stacks"** or **"Services"**):
|
||||||
|
|
||||||
|
1. Go to **"Stacks"**.
|
||||||
|
2. Select the stack managing the container.
|
||||||
|
3. Click **"Editor"** (or "Update the Stack").
|
||||||
|
4. Add a version tag or use `:latest` if your image tag is `latest` (not recommended for production).
|
||||||
|
5. Click **"Update the Stack"**. ⚠ Portainer will not pull the new image unless the tag changes OR the stack is forced to recreate.
|
||||||
|
6. If image tag hasn't changed, go to **"Services"**, find the service, and click **"Force Update"**.
|
||||||
|
|
||||||
## Summary
|
## Summary
|
||||||
|
|
||||||
- Manual: Ideal for individual or critical updates.
|
| Method | Type | Pros | Cons |
|
||||||
- Dockcheck: Suitable for controlled, mass updates.
|
|------------|--------------|----------------------------------|------------------------------|
|
||||||
- Watchtower: Fully automated, best for continuous deployment setups.
|
| Manual | CLI | Full control, no dependencies | Tedious for many containers |
|
||||||
|
| Dockcheck | CLI Script | Great for batch updates | Needs setup, semi-automated |
|
||||||
|
| Watchtower | Daemonized | Fully automated updates | Less control, version drift |
|
||||||
|
| Portainer | UI | Easy via web interface | No auto-updates |
|
||||||
|
|
||||||
These approaches allow you to maintain flexibility in how you update Docker containers, depending on the urgency and scale of the update.
|
These approaches allow you to maintain flexibility in how you update Docker containers, depending on the urgency and scale of the update.
|
||||||
|
|||||||
@@ -22,4 +22,4 @@ For a comparison, this is how the UI looks like if you are on the latest stable
|
|||||||
|
|
||||||
## Implementation details
|
## Implementation details
|
||||||
|
|
||||||
During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion():` method for details).
|
During build a [/app/front/buildtimestamp.txt](https://github.com/jokob-sk/NetAlertX/blob/092797e75ccfa8359444ad149e727358ac4da05f/Dockerfile#L44) file is created. The app then periodically checks if a new release is available with a newer timestamp in GitHub's rest-based JSON endpoint (check the `def isNewVersion:` method for details).
|
||||||
@@ -63,68 +63,8 @@ You can include multiple actions that should execute once the conditions are met
|
|||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
Below you can find a couple of configuration examples.
|
You can find a couple of configuration examples in [Workflow Examples](WORKFLOW_EXAMPLES.md).
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Example 1: Assign Device to Network Node Based on IP
|
|
||||||
|
|
||||||
This workflow assigns newly added devices with IP addresses in the `192.168.1.*` range to the device with the MAC address `6c:6d:6d:6c:6c:6c`.
|
|
||||||
|
|
||||||
### Trigger:
|
|
||||||
- **Object Type**: `Devices`
|
|
||||||
- **Event Type**: `insert`
|
|
||||||
|
|
||||||
### Conditions:
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devLastIP`
|
|
||||||
- `Operator`: `contains`
|
|
||||||
- `Value`: `192.168.1.`
|
|
||||||
|
|
||||||
This condition ensures that the workflow only applies to devices with an IP address in the `192.168.1.*` range.
|
|
||||||
|
|
||||||
### Actions:
|
|
||||||
- **Action Type**: `update_field`
|
|
||||||
- **Field**: `devNetworkNode`
|
|
||||||
- **Value**: `6c:6d:6d:6c:6c:6c`
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Example 2: Mark Device as Not New and Delete If from Google Vendor
|
|
||||||
|
|
||||||
This workflow automates the process of marking Google devices as not new and deleting them if they meet the criteria.
|
|
||||||
|
|
||||||
### Trigger:
|
|
||||||
- **Object Type**: `Devices`
|
|
||||||
- **Event Type**: `update`
|
|
||||||
|
|
||||||
### Conditions:
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devVendor`
|
|
||||||
- `Operator`: `contains`
|
|
||||||
- `Value`: `Google`
|
|
||||||
|
|
||||||
This condition checks if the device's vendor is `Google`.
|
|
||||||
|
|
||||||
- **Logic**: `AND`
|
|
||||||
- `Field`: `devIsNew`
|
|
||||||
- `Operator`: `equals`
|
|
||||||
- `Value`: `1`
|
|
||||||
|
|
||||||
This ensures the workflow applies only to new devices.
|
|
||||||
|
|
||||||
### Actions:
|
|
||||||
1. **Action Type**: `update_field`
|
|
||||||
- **Field**: `devIsNew`
|
|
||||||
- **Value**: `0`
|
|
||||||
|
|
||||||
This action marks the device as no longer new.
|
|
||||||
|
|
||||||
2. **Action Type**: `delete_device`
|
|
||||||
|
|
||||||
This action deletes the device after it is marked as not new.
|
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Share your workflows in [Discord](https://discord.com/invite/NczTUTWyRr) or [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions).
|
> Share your workflows in [Discord](https://discord.com/invite/NczTUTWyRr) or [GitHub Discussions](https://github.com/jokob-sk/NetAlertX/discussions).
|
||||||
|
|||||||
185
docs/WORKFLOW_EXAMPLES.md
Executable file
@@ -0,0 +1,185 @@
|
|||||||
|
# Workflow examples
|
||||||
|
|
||||||
|
Workflows in NetAlertX automate actions based on real-time events and conditions. Below are practical examples that demonstrate how to build automation using triggers, conditions, and actions.
|
||||||
|
|
||||||
|
## Example 1: Un-archive devices if detected online
|
||||||
|
|
||||||
|
This workflow automatically unarchives a device if it was previously archived but has now been detected as online.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
Sometimes devices are manually archived (e.g., no longer expected on the network), but they reappear unexpectedly. This workflow reverses the archive status when such devices are detected during a scan.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Un-archive devices if detected online",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "update"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devIsArchived",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "devPresentLastScan",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devIsArchived",
|
||||||
|
"value": "0"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
- Trigger: Listens for updates to device records.
|
||||||
|
- Conditions:
|
||||||
|
- `devIsArchived` is `1` (archived).
|
||||||
|
- `devPresentLastScan` is `1` (device was detected in the latest scan).
|
||||||
|
- Action: Updates the device to set `devIsArchived` to `0` (unarchived).
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
Whenever a previously archived device shows up during a network scan, it will be automatically unarchived — allowing it to reappear in your device lists and dashboards.
|
||||||
|
|
||||||
|
|
||||||
|
Here is your updated version of **Example 2** and **Example 3**, fully aligned with the format and structure of **Example 1** for consistency and professionalism:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example 2: Assign Device to Network Node Based on IP
|
||||||
|
|
||||||
|
This workflow assigns newly added devices with IP addresses in the `192.168.1.*` range to a specific network node with MAC address `6c:6d:6d:6c:6c:6c`.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
When new devices join your network, assigning them to the correct network node is important for accurate topology and grouping. This workflow ensures devices in a specific subnet are automatically linked to the intended node.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Assign Device to Network Node Based on IP",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "insert"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devLastIP",
|
||||||
|
"operator": "contains",
|
||||||
|
"value": "192.168.1."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devNetworkNode",
|
||||||
|
"value": "6c:6d:6d:6c:6c:6c"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
* **Trigger**: Activates when a new device is added.
|
||||||
|
* **Condition**:
|
||||||
|
|
||||||
|
* `devLastIP` contains `192.168.1.` (matches subnet).
|
||||||
|
* **Action**:
|
||||||
|
|
||||||
|
* Sets `devNetworkNode` to the specified MAC address.
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
New devices with IPs in the `192.168.1.*` subnet are automatically assigned to the correct network node, streamlining device organization and reducing manual work.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Example 3: Mark Device as Not New and Delete If from Google Vendor
|
||||||
|
|
||||||
|
This workflow automatically marks newly detected Google devices as not new and deletes them immediately.
|
||||||
|
|
||||||
|
### 📋 Use Case
|
||||||
|
|
||||||
|
You may want to automatically clear out newly detected Google devices (such as Chromecast or Google Home) if they’re not needed in your device database. This workflow handles that clean-up automatically.
|
||||||
|
|
||||||
|
### ⚙️ Workflow Configuration
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"name": "Mark Device as Not New and Delete If from Google Vendor",
|
||||||
|
"trigger": {
|
||||||
|
"object_type": "Devices",
|
||||||
|
"event_type": "update"
|
||||||
|
},
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"logic": "AND",
|
||||||
|
"conditions": [
|
||||||
|
{
|
||||||
|
"field": "devVendor",
|
||||||
|
"operator": "contains",
|
||||||
|
"value": "Google"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field": "devIsNew",
|
||||||
|
"operator": "equals",
|
||||||
|
"value": "1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"actions": [
|
||||||
|
{
|
||||||
|
"type": "update_field",
|
||||||
|
"field": "devIsNew",
|
||||||
|
"value": "0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": "delete_device"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"enabled": "Yes"
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### 🔍 Explanation
|
||||||
|
|
||||||
|
* **Trigger**: Runs on device updates.
|
||||||
|
* **Conditions**:
|
||||||
|
|
||||||
|
* Vendor contains `Google`.
|
||||||
|
* Device is marked as new (`devIsNew` is `1`).
|
||||||
|
* **Actions**:
|
||||||
|
|
||||||
|
1. Set `devIsNew` to `0` (mark as not new).
|
||||||
|
2. Delete the device.
|
||||||
|
|
||||||
|
### ✅ Result
|
||||||
|
|
||||||
|
Any newly detected Google devices are cleaned up instantly — first marked as not new, then deleted — helping you avoid clutter in your device records.
|
||||||
BIN
docs/img/DEBUG/maintenance_debug_php.png
Executable file
|
After Width: | Height: | Size: 160 KiB |
|
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 7.0 KiB |
BIN
docs/img/FIX_OFFLINE_DETECTION/presence_graph_before_after.png
Executable file
|
After Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 100 KiB |
BIN
docs/img/NETWORK_TREE/Network_Assign.png
Executable file
|
After Width: | Height: | Size: 73 KiB |
BIN
docs/img/NETWORK_TREE/Network_Assigned_Nodes.png
Executable file
|
After Width: | Height: | Size: 92 KiB |
BIN
docs/img/NETWORK_TREE/Network_Device_Details.png
Executable file
|
After Width: | Height: | Size: 58 KiB |
BIN
docs/img/NETWORK_TREE/Network_Device_Details_Parent.png
Executable file
|
After Width: | Height: | Size: 34 KiB |
BIN
docs/img/NETWORK_TREE/Network_Device_ParentDropdown.png
Executable file
|
After Width: | Height: | Size: 42 KiB |
BIN
docs/img/NETWORK_TREE/Network_Device_type.png
Executable file
|
After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 185 KiB |
|
Before Width: | Height: | Size: 89 KiB |
BIN
docs/img/NETWORK_TREE/Network_Sample.png
Executable file
|
After Width: | Height: | Size: 81 KiB |
BIN
docs/img/NETWORK_TREE/Network_tree_setup_hover.png
Executable file
|
After Width: | Height: | Size: 84 KiB |
1110
docs/samples/API/Grafana_Dashboard.json
Executable file
@@ -1,7 +1,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
require 'php/templates/notification.php';
|
require 'php/templates/modals.php';
|
||||||
?>
|
?>
|
||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
<span class="helpIcon">
|
||||||
|
<a target="_blank" href="https://github.com/jokob-sk/NetAlertX/blob/main/docs/WORKFLOWS_DEBUGGING.md">
|
||||||
|
<i class="fa fa-circle-question"></i>
|
||||||
|
</a>
|
||||||
|
</span>
|
||||||
<section class="content">
|
<section class="content">
|
||||||
<div class="nav-tabs-custom app-event-content" style="margin-bottom: 0px;">
|
<div class="nav-tabs-custom app-event-content" style="margin-bottom: 0px;">
|
||||||
<ul id="tabs-location" class="nav nav-tabs col-sm-2 hidden">
|
<ul id="tabs-location" class="nav nav-tabs col-sm-2 hidden">
|
||||||
|
|||||||
@@ -12,10 +12,12 @@
|
|||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
:root {
|
:root {
|
||||||
--color-aqua: #00c0ef;
|
--color-aqua: #00c0ef;
|
||||||
|
--color-lightblue: #3c8dbc;
|
||||||
--color-blue: #0060df;
|
--color-blue: #0060df;
|
||||||
--color-green: #00a65a;
|
--color-green: #00a65a;
|
||||||
--color-yellow: #f39c12;
|
--color-yellow: #f39c12;
|
||||||
--color-red: #dd4b39;
|
--color-red: #dd4b39;
|
||||||
|
--color-gray: #8c8c8c;
|
||||||
}
|
}
|
||||||
|
|
||||||
.input-group .checkbox
|
.input-group .checkbox
|
||||||
@@ -28,6 +30,45 @@ h5
|
|||||||
font-size: medium;
|
font-size: medium;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a[target="_blank"] {
|
||||||
|
position: relative;
|
||||||
|
display: inline-block; /* Needed for positioning */
|
||||||
|
padding-right: 0.6em; /* Space for the icon */
|
||||||
|
}
|
||||||
|
|
||||||
|
a[target="_blank"]::after {
|
||||||
|
content: '↗';
|
||||||
|
position: absolute;
|
||||||
|
top: 0;
|
||||||
|
right: 0;
|
||||||
|
font-size: 0.75em;
|
||||||
|
line-height: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2 .hover-node-info::after {
|
||||||
|
padding-left: 1px ;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .node-standard-device .netNodeText::after
|
||||||
|
{
|
||||||
|
right: -7px;
|
||||||
|
top: 1px;
|
||||||
|
} */
|
||||||
|
|
||||||
|
/* .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
|
{
|
||||||
|
padding-right: 15px !important;
|
||||||
|
} */
|
||||||
|
|
||||||
|
.hoverHighlight
|
||||||
|
{
|
||||||
|
opacity: 0.7;
|
||||||
|
}
|
||||||
|
.hoverHighlight:hover
|
||||||
|
{
|
||||||
|
opacity: 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Helper Classes
|
Helper Classes
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
@@ -48,6 +89,7 @@ h5
|
|||||||
float: inline-end;
|
float: inline-end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Text Classes
|
Text Classes
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
@@ -340,6 +382,21 @@ body
|
|||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.networkTable .nav-tabs-custom
|
||||||
|
{
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plugin-content #tabs-location .nav-tabs-custom > .nav-tabs > li
|
||||||
|
{
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plugin-content .left-nav
|
||||||
|
{
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
|
||||||
.pa-small-box-2 .inner h3 {
|
.pa-small-box-2 .inner h3 {
|
||||||
margin-left: 0em;
|
margin-left: 0em;
|
||||||
margin-bottom: 1.3em;
|
margin-bottom: 1.3em;
|
||||||
@@ -474,7 +531,7 @@ body
|
|||||||
}
|
}
|
||||||
|
|
||||||
.bottom-border-primary {
|
.bottom-border-primary {
|
||||||
border-bottom-color: #3c8dbc;
|
border-bottom-color: var(--color-lightblue);
|
||||||
border-bottom-style: solid;
|
border-bottom-style: solid;
|
||||||
border-bottom-width: 3px
|
border-bottom-width: 3px
|
||||||
}
|
}
|
||||||
@@ -879,6 +936,10 @@ height: 50px;
|
|||||||
margin: 10px;
|
margin: 10px;
|
||||||
padding: 10px;
|
padding: 10px;
|
||||||
}
|
}
|
||||||
|
#notifications .notification-box{
|
||||||
|
min-height: 90vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#notificationData textarea{
|
#notificationData textarea{
|
||||||
width: 100%;
|
width: 100%;
|
||||||
@@ -1032,7 +1093,7 @@ height: 50px;
|
|||||||
|
|
||||||
.myhidden
|
.myhidden
|
||||||
{
|
{
|
||||||
display:none;
|
display:none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.center
|
.center
|
||||||
@@ -1354,11 +1415,13 @@ input[readonly] {
|
|||||||
|
|
||||||
.iconPreview {
|
.iconPreview {
|
||||||
min-width: 40px;
|
min-width: 40px;
|
||||||
|
/* display: inherit; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.iconPreview svg{
|
.iconPreview svg{
|
||||||
min-width: 20px;
|
min-width: 20px;
|
||||||
max-width: 20px;
|
max-width: 20px;
|
||||||
|
margin-bottom: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1399,7 +1462,8 @@ input[readonly] {
|
|||||||
cursor: -webkit-grab;
|
cursor: -webkit-grab;
|
||||||
}
|
}
|
||||||
|
|
||||||
.select2-container--default .select2-selection--multiple .select2-selection__choice
|
#settingsPage .select2-container--default .select2-selection--multiple .select2-selection__choice,
|
||||||
|
#maintenancePage .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
{
|
{
|
||||||
background-color:#258744 !important;
|
background-color:#258744 !important;
|
||||||
}
|
}
|
||||||
@@ -1413,6 +1477,15 @@ input[readonly] {
|
|||||||
background-color:#606060 !important;
|
background-color:#606060 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple,
|
||||||
|
.select2-container--default .select2-selection--single
|
||||||
|
{
|
||||||
|
border-radius: 0px !important;
|
||||||
|
border-color: #d2d6de !important;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
.helpIconSmallTopRight{
|
.helpIconSmallTopRight{
|
||||||
position: absolute;
|
position: absolute;
|
||||||
font-size: x-small;
|
font-size: x-small;
|
||||||
@@ -1427,7 +1500,7 @@ input[readonly] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#tableDevicesBox td svg, #tableDevicesBox td i{
|
#tableDevicesBox td svg, #tableDevicesBox td i{
|
||||||
height: 1.5em !important;
|
height: 1em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
#TileCards .tile .inner
|
#TileCards .tile .inner
|
||||||
@@ -1449,6 +1522,11 @@ input[readonly] {
|
|||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#panDetails .input-group {
|
||||||
|
|
||||||
|
min-height: 40px;
|
||||||
|
}
|
||||||
|
|
||||||
#devicePageInfoPlc
|
#devicePageInfoPlc
|
||||||
{
|
{
|
||||||
display: none;
|
display: none;
|
||||||
@@ -1527,18 +1605,113 @@ input[readonly] {
|
|||||||
}
|
}
|
||||||
/* #panDetails .dataTables_wrapper .bottom .paging_simple_numbers */
|
/* #panDetails .dataTables_wrapper .bottom .paging_simple_numbers */
|
||||||
|
|
||||||
#panDetails #NEWDEV_devIcon
|
|
||||||
{
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#panDetails #NEWDEV_devCustomProps_label
|
#panDetails #NEWDEV_devCustomProps_label
|
||||||
{
|
{
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice a
|
||||||
|
{
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .iconPreview svg
|
||||||
|
{
|
||||||
|
height: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice
|
||||||
|
{
|
||||||
|
height: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--disabled
|
||||||
|
{
|
||||||
|
background-color: #606060;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container--default .select2-selection--multiple .select2-selection__choice span
|
||||||
|
{
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-selection
|
||||||
|
{
|
||||||
|
width: initial;
|
||||||
|
display: inline-block;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Remove the default Select2 chevron (the down arrow) */
|
||||||
|
.select2-container .select2-selection__arrow b {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add custom icon */
|
||||||
|
.select2-container .select2-selection__arrow::after {
|
||||||
|
font-family: 'Font Awesome 6 Free';
|
||||||
|
content: "\f078"; /* fa-chevron-down */
|
||||||
|
font-weight: 700;
|
||||||
|
position: absolute;
|
||||||
|
top: 75%;
|
||||||
|
left: 30%;
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.custom-badge a
|
||||||
|
{
|
||||||
|
color: #fff !important;
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
.custom-badge
|
||||||
|
{
|
||||||
|
border: 1px solid #aaa;
|
||||||
|
border-radius: 4px;
|
||||||
|
border-style: solid;
|
||||||
|
padding: 0 5px;
|
||||||
|
font-size: 14px;
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .form-control
|
||||||
|
{
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-selection--single .custom-chip
|
||||||
|
{
|
||||||
|
margin-top: 11px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered,
|
||||||
|
.select2-container--default .select2-selection--single, .select2-selection .select2-selection--single
|
||||||
|
{
|
||||||
|
padding: 0px 0px;
|
||||||
|
min-height: 42px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* .select2-container--default .select2-selection--single .select2-selection__rendered, */
|
||||||
|
.select2-container--default .select2-selection--single
|
||||||
|
{
|
||||||
|
/* color:initial !important; */
|
||||||
|
background-color:initial !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container
|
||||||
|
{
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#deviceDetailsEdit .select2-container .selection
|
||||||
|
{
|
||||||
|
width: 100% !important;
|
||||||
|
display: inline-grid;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* MODAL popups */
|
/* MODAL popups */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
@@ -1553,14 +1726,44 @@ input[readonly] {
|
|||||||
width: 92%;
|
width: 92%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#modal-ok
|
||||||
|
{
|
||||||
|
z-index: 1051; /*highest priority*/
|
||||||
|
}
|
||||||
|
|
||||||
|
#modal-form-plc
|
||||||
|
{
|
||||||
|
display: grid;
|
||||||
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
/* NETWORK page */
|
/* NETWORK page */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
|
||||||
|
.hide-node-names .node-name {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
#toggleFilters
|
||||||
|
{
|
||||||
|
display: block;
|
||||||
|
position: fixed;
|
||||||
|
padding-left: 32px;
|
||||||
|
padding-top: 10px;
|
||||||
|
background-color: inherit;
|
||||||
|
z-index: 3;
|
||||||
|
width: 190px;
|
||||||
|
box-shadow: 4px 4px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
/* AdminLTE overrides */
|
/* AdminLTE overrides */
|
||||||
|
.content-wrapper {
|
||||||
|
min-height: calc(100vh - 31px) !important;
|
||||||
|
}
|
||||||
|
|
||||||
#networkTree .box
|
#networkTree .box
|
||||||
{
|
{
|
||||||
/* border-top:1px; */
|
border-width:1px;
|
||||||
border-top-color:grey;
|
border-top-color:grey;
|
||||||
padding:0px;
|
padding:0px;
|
||||||
margin:0px;
|
margin:0px;
|
||||||
@@ -1596,6 +1799,7 @@ input[readonly] {
|
|||||||
opacity: 0.3;
|
opacity: 0.3;
|
||||||
display: initial;
|
display: initial;
|
||||||
float: left;
|
float: left;
|
||||||
|
width: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#networkTree
|
#networkTree
|
||||||
@@ -1619,6 +1823,42 @@ input[readonly] {
|
|||||||
width: auto;
|
width: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#hover-box
|
||||||
|
{
|
||||||
|
background-color: #ffffff;;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .iconPreview
|
||||||
|
{
|
||||||
|
padding: 0px;
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .devName
|
||||||
|
{
|
||||||
|
font-size: larger;
|
||||||
|
display: contents;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box b
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box .line
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box span
|
||||||
|
{
|
||||||
|
float: right;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
max-width: 200px;
|
||||||
|
}
|
||||||
|
|
||||||
#networkTree .netCollapse
|
#networkTree .netCollapse
|
||||||
{
|
{
|
||||||
@@ -1626,11 +1866,39 @@ input[readonly] {
|
|||||||
right: 0;
|
right: 0;
|
||||||
margin-right: -3px;
|
margin-right: -3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* var(--color-aqua);
|
||||||
|
--color-aqua: #00c0ef;
|
||||||
|
--color-blue: #0060df;
|
||||||
|
--color-green: #00a65a;
|
||||||
|
--color-yellow: #f39c12;
|
||||||
|
--color-red: #dd4b39; */
|
||||||
|
|
||||||
|
#networkTree .node-inner.node-network-device:hover
|
||||||
|
{
|
||||||
|
box-shadow: var(--color-aqua) 0px 0px 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#networkTree .node-inner.node-standard-device:hover
|
||||||
|
{
|
||||||
|
box-shadow: var(--color-gray) 0px 0px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#networkTree .network-hw-icon
|
||||||
|
{
|
||||||
|
position: absolute;
|
||||||
|
margin-left: -0.4em;
|
||||||
|
opacity: 0.3;
|
||||||
|
margin-top: 0.1em;
|
||||||
|
}
|
||||||
|
|
||||||
#networkTree .highlightedNode
|
#networkTree .highlightedNode
|
||||||
{
|
{
|
||||||
/* border: solid; */
|
/* border: solid; */
|
||||||
border-color:cyan;
|
border-color:var(--color-lightblue);
|
||||||
|
box-shadow: var(--color-lightblue) 0px 0px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#networkTree .netStatus-Off-line i,
|
#networkTree .netStatus-Off-line i,
|
||||||
#networkTree .netStatus-Off-line svg
|
#networkTree .netStatus-Off-line svg
|
||||||
{
|
{
|
||||||
@@ -1654,6 +1922,23 @@ input[readonly] {
|
|||||||
/* margin-left: 0.2em; */
|
/* margin-left: 0.2em; */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.networkTable
|
||||||
|
{
|
||||||
|
padding-bottom: 1px;
|
||||||
|
z-index: 3;
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
.networkNodeTabHeaders .icon i
|
||||||
|
{
|
||||||
|
padding-top: 8px !important;
|
||||||
|
padding-left: 6px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.networkTable .box-body {
|
||||||
|
padding-top: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
.networkTable .networkNodeTabHeaders a {
|
.networkTable .networkNodeTabHeaders a {
|
||||||
display: block;
|
display: block;
|
||||||
height: 3em;
|
height: 3em;
|
||||||
@@ -1682,6 +1967,8 @@ input[readonly] {
|
|||||||
text-wrap: nowrap;
|
text-wrap: nowrap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@media (max-width: 767px) {
|
@media (max-width: 767px) {
|
||||||
|
|
||||||
.networkNodeTabHeaders .node-name
|
.networkNodeTabHeaders .node-name
|
||||||
@@ -1712,7 +1999,10 @@ input[readonly] {
|
|||||||
/* PLUGINS page */
|
/* PLUGINS page */
|
||||||
/* ----------------------------------------------------------------- */
|
/* ----------------------------------------------------------------- */
|
||||||
|
|
||||||
|
#tabs-location
|
||||||
|
{
|
||||||
|
padding-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
.plugin-filters
|
.plugin-filters
|
||||||
{
|
{
|
||||||
@@ -1727,15 +2017,31 @@ input[readonly] {
|
|||||||
padding-bottom: 0px;
|
padding-bottom: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.plugin-content .left-nav{
|
.plugin-content .nav-tabs li a
|
||||||
|
{
|
||||||
|
border-right-width: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabs-content-location-wrap
|
||||||
|
{
|
||||||
|
min-height: 90vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
#tabs-content-location textarea {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.plugin-content .left-nav{
|
||||||
|
width: calc(100%);
|
||||||
padding-right: 0px;
|
padding-right: 0px;
|
||||||
|
z-index: 2;
|
||||||
|
background-color: inherit !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.plugin-content #tabs-content-location
|
.plugin-content #tabs-content-location
|
||||||
{
|
{
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
/* padding-top: 0; */
|
padding-top: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
.integrations-plugins .content
|
.integrations-plugins .content
|
||||||
@@ -1803,6 +2109,9 @@ input[readonly] {
|
|||||||
.pluginBadge
|
.pluginBadge
|
||||||
{
|
{
|
||||||
float: right;
|
float: right;
|
||||||
|
margin-right: 10px;
|
||||||
|
opacity: 0.6;
|
||||||
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pluginBadgeWrap
|
.pluginBadgeWrap
|
||||||
@@ -1811,42 +2120,56 @@ input[readonly] {
|
|||||||
display: ruby;
|
display: ruby;
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
position: sticky;
|
position: sticky;
|
||||||
margin-top: 1px;
|
margin-top: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
Spin
|
Spin
|
||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
.pa_semitransparent-panel {
|
#loadingSpinner {
|
||||||
position: absolute;
|
position: fixed;
|
||||||
width: 100%; /*calc (100% -40px);*/
|
z-index: 1000;
|
||||||
height: 100%;
|
/* top: 0; */
|
||||||
left: 0;
|
/* left: 0; */
|
||||||
top: 0;
|
/* width: 100%; */
|
||||||
|
/* height: 100%; */
|
||||||
|
opacity: 0;
|
||||||
|
transition: opacity 0.3s ease-in-out;
|
||||||
|
pointer-events: none;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
||||||
opacity: 0.8;
|
|
||||||
background-color: #fff;
|
|
||||||
z-index: 800;
|
z-index: 800;
|
||||||
}
|
}
|
||||||
|
|
||||||
.pa_spinner {
|
.fa-spinner
|
||||||
position: fixed;
|
{
|
||||||
left: 0;
|
font-size: initial;
|
||||||
right: 0;
|
}
|
||||||
|
|
||||||
|
#loadingSpinner.visible {
|
||||||
|
opacity: 1;
|
||||||
|
pointer-events: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nax_semitransparent-panel {
|
||||||
|
position: absolute;
|
||||||
|
width: 100%;
|
||||||
|
height: 100%;
|
||||||
|
background-color: #fff;
|
||||||
|
opacity: 0.5;
|
||||||
|
z-index: 99;
|
||||||
|
}
|
||||||
|
|
||||||
|
.nax_spinner {
|
||||||
|
position: absolute;
|
||||||
top: 100px;
|
top: 100px;
|
||||||
margin-left: auto;
|
left: 50%;
|
||||||
margin-right: auto;
|
transform: translateX(-50%);
|
||||||
padding: 15px;
|
padding: 15px;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
z-index: 801;
|
z-index: 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#loadingSpinner
|
|
||||||
{
|
|
||||||
z-index: 100;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Multi-edit adjustements */
|
/* Multi-edit adjustements */
|
||||||
.box-header
|
.box-header
|
||||||
@@ -1873,9 +2196,10 @@ input[readonly] {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.pia-top-left-logo
|
.top-left-logo
|
||||||
{
|
{
|
||||||
height:50px;
|
height:35px;
|
||||||
|
width:35px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -10,6 +10,16 @@
|
|||||||
*
|
*
|
||||||
* Additional fixes For Pi.Alert UI by leiweibau */
|
* Additional fixes For Pi.Alert UI by leiweibau */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--color-aqua: #00c0ef;
|
||||||
|
--color-lightblue: #3c8dbc;
|
||||||
|
--color-blue: #0060df;
|
||||||
|
--color-green: #00a65a;
|
||||||
|
--color-yellow: #f39c12;
|
||||||
|
--color-red: #dd4b39;
|
||||||
|
--color-gray: #8c8c8c;
|
||||||
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
||||||
}
|
}
|
||||||
@@ -649,8 +659,14 @@ input[type="password"]::-webkit-caps-lock-indicator {
|
|||||||
border-color: #888888;
|
border-color: #888888;
|
||||||
}
|
}
|
||||||
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||||
background-color: rgb(189,192,198);
|
background-color: var(--datatable-bgcolor);
|
||||||
color: #444;
|
color: var(--fbc-white);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.dataTable tbody tr.selected, table.dataTable tbody tr .selected
|
||||||
|
{
|
||||||
|
background-color: var(--datatable-bgcolor);
|
||||||
|
color: var(--fbc-white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.db_info_table_cell:nth-child(1) {background: #272c30}
|
.db_info_table_cell:nth-child(1) {background: #272c30}
|
||||||
@@ -722,16 +738,46 @@ input[type="password"]::-webkit-caps-lock-indicator {
|
|||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
.small-box:hover .icon {
|
.small-box:hover .icon {
|
||||||
font-size: 3.74em;
|
font-size: 3em;
|
||||||
}
|
}
|
||||||
.small-box .icon {
|
.small-box .icon {
|
||||||
top: 0.01em;
|
top: 0.01em;
|
||||||
font-size: 3.25em;
|
font-size: 3.25em;
|
||||||
}
|
}
|
||||||
.pa_semitransparent-panel{
|
.nax_semitransparent-panel{
|
||||||
background-color: #000 !important;
|
background-color: #000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single {
|
||||||
|
color: initial !important;
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-container .select2-selection__arrow::after {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-selection .select2-selection--single {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple, .select2-container--default .select2-selection--single {
|
||||||
|
border-color: #3d444b !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered .custom-chip
|
||||||
|
{
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box
|
||||||
|
{
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
.callout code {
|
.callout code {
|
||||||
background-color: #fff !important;
|
background-color: #fff !important;
|
||||||
color:#000 !important;
|
color:#000 !important;
|
||||||
@@ -741,3 +787,8 @@ input[type="password"]::-webkit-caps-lock-indicator {
|
|||||||
{
|
{
|
||||||
color:#000;
|
color:#000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn:hover
|
||||||
|
{
|
||||||
|
color: var(--color-gray);
|
||||||
|
}
|
||||||
@@ -12,6 +12,17 @@
|
|||||||
|
|
||||||
@media (prefers-color-scheme: dark) {
|
@media (prefers-color-scheme: dark) {
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--color-aqua: #00c0ef;
|
||||||
|
--color-lightblue: #3c8dbc;
|
||||||
|
--color-blue: #0060df;
|
||||||
|
--color-green: #00a65a;
|
||||||
|
--color-yellow: #f39c12;
|
||||||
|
--color-red: #dd4b39;
|
||||||
|
--color-gray: #8c8c8c;
|
||||||
|
--color-white: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
--datatable-bgcolor: rgba(64, 76, 88, 0.8);
|
||||||
}
|
}
|
||||||
@@ -651,8 +662,14 @@
|
|||||||
border-color: #888888;
|
border-color: #888888;
|
||||||
}
|
}
|
||||||
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
.table-hover tbody tr:hover td, .table-hover tbody tr:hover th {
|
||||||
background-color: rgb(189,192,198);
|
background-color: var(--datatable-bgcolor);
|
||||||
color: #444;
|
color: var(--fbc-white);
|
||||||
|
}
|
||||||
|
|
||||||
|
table.dataTable tbody tr.selected, table.dataTable tbody tr .selected
|
||||||
|
{
|
||||||
|
background-color: var(--datatable-bgcolor);
|
||||||
|
color: var(--fbc-white);
|
||||||
}
|
}
|
||||||
|
|
||||||
.db_info_table_cell:nth-child(1) {background: #272c30}
|
.db_info_table_cell:nth-child(1) {background: #272c30}
|
||||||
@@ -724,16 +741,45 @@
|
|||||||
margin-left: 0px;
|
margin-left: 0px;
|
||||||
}
|
}
|
||||||
.small-box:hover .icon {
|
.small-box:hover .icon {
|
||||||
font-size: 3.74em;
|
font-size: 3em;
|
||||||
}
|
}
|
||||||
.small-box .icon {
|
.small-box .icon {
|
||||||
top: 0.01em;
|
top: 0.01em;
|
||||||
font-size: 3.25em;
|
font-size: 3.25em;
|
||||||
}
|
}
|
||||||
.pa_semitransparent-panel{
|
.nax_semitransparent-panel{
|
||||||
background-color: #000 !important;
|
background-color: #000 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single {
|
||||||
|
color: initial !important;
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-container .select2-selection__arrow::after {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Chevron color */
|
||||||
|
.select2-selection .select2-selection--single {
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--multiple, .select2-container--default .select2-selection--single {
|
||||||
|
border-color: #3d444b !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.select2-container--default .select2-selection--single .select2-selection__rendered .custom-chip
|
||||||
|
{
|
||||||
|
color: #bec5cb;
|
||||||
|
}
|
||||||
|
|
||||||
|
#hover-box
|
||||||
|
{
|
||||||
|
background-color: #353c42 !important;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.callout code {
|
.callout code {
|
||||||
@@ -746,3 +792,7 @@
|
|||||||
color:#000;
|
color:#000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.btn:hover
|
||||||
|
{
|
||||||
|
color: var(--color-white);
|
||||||
|
}
|
||||||
@@ -16,15 +16,16 @@
|
|||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
showSpinner();
|
||||||
|
</script>
|
||||||
|
|
||||||
<!-- Page ------------------------------------------------------------------ -->
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
<div class="content-wrapper">
|
<div class="content-wrapper">
|
||||||
|
|
||||||
<!-- Content header--------------------------------------------------------- -->
|
<!-- Content header--------------------------------------------------------- -->
|
||||||
<section class="content-header">
|
<section class="content-header">
|
||||||
<?php require 'php/templates/notification.php'; ?>
|
<?php require 'php/templates/modals.php'; ?>
|
||||||
|
|
||||||
<h1 id="pageTitle">
|
<h1 id="pageTitle">
|
||||||
 <small>Quering device info...</small>
|
 <small>Quering device info...</small>
|
||||||
@@ -122,18 +123,14 @@
|
|||||||
</div>
|
</div>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<div class="tab-content" style="min-height: 430px;">
|
<div class="tab-content spinnerTarget" style="min-height: 430px;">
|
||||||
|
|
||||||
<!-- tab page 1 ------------------------------------------------------------ -->
|
<!-- tab page 1 ------------------------------------------------------------ -->
|
||||||
<!--
|
|
||||||
<div class="tab-pane fade in active" id="panDetails">
|
|
||||||
-->
|
|
||||||
<div class="tab-pane fade" id="panDetails">
|
|
||||||
|
|
||||||
|
<div class="tab-pane fade" id="panDetails">
|
||||||
<?php
|
<?php
|
||||||
require 'deviceDetailsEdit.php';
|
require 'deviceDetailsEdit.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- tab page 2 ------------------------------------------------------------ -->
|
<!-- tab page 2 ------------------------------------------------------------ -->
|
||||||
@@ -141,51 +138,38 @@
|
|||||||
<?php
|
<?php
|
||||||
require 'deviceDetailsSessions.php';
|
require 'deviceDetailsSessions.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
<!-- tab page "Tools" ------------------------------------------------------------ -->
|
<!-- tab page "Tools" ------------------------------------------------------------ -->
|
||||||
|
|
||||||
<div class="tab-pane fade" id="panTools">
|
<div class="tab-pane fade" id="panTools">
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
require 'deviceDetailsTools.php';
|
require 'deviceDetailsTools.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- tab page 3 ------------------------------------------------------------ -->
|
<!-- tab page 3 ------------------------------------------------------------ -->
|
||||||
<div class="tab-pane fade table-responsive" id="panPresence">
|
<div class="tab-pane fade table-responsive" id="panPresence">
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Include the other page
|
// Include the other page
|
||||||
include 'deviceDetailsPresence.php';
|
include 'deviceDetailsPresence.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- tab page 4 ------------------------------------------------------------ -->
|
<!-- tab page 4 ------------------------------------------------------------ -->
|
||||||
<div class="tab-pane fade table-responsive" id="panEvents">
|
<div class="tab-pane fade table-responsive" id="panEvents">
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Include the other page
|
// Include the other page
|
||||||
include 'deviceDetailsEvents.php';
|
include 'deviceDetailsEvents.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- tab page 7 ------------------------------------------------------------ -->
|
<!-- tab page 7 ------------------------------------------------------------ -->
|
||||||
<div class="tab-pane fade table-responsive" id="panPlugins">
|
<div class="tab-pane fade table-responsive" id="panPlugins">
|
||||||
|
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
// Include the other page
|
// Include the other page
|
||||||
include 'pluginsCore.php';
|
include 'pluginsCore.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -241,13 +225,6 @@ switch ($UI_THEME) {
|
|||||||
var selectedTab = 'tabDetails';
|
var selectedTab = 'tabDetails';
|
||||||
var emptyArr = ['undefined', "", undefined, null];
|
var emptyArr = ['undefined', "", undefined, null];
|
||||||
|
|
||||||
|
|
||||||
// Call renderSmallBoxes, then main
|
|
||||||
(async () => {
|
|
||||||
await renderSmallBoxes();
|
|
||||||
main();
|
|
||||||
})();
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function main () {
|
function main () {
|
||||||
|
|
||||||
@@ -273,7 +250,7 @@ function main () {
|
|||||||
period = '1 day';
|
period = '1 day';
|
||||||
sessionsRows = 50;
|
sessionsRows = 50;
|
||||||
eventsRows = 50;
|
eventsRows = 50;
|
||||||
$('#chkHideConnectionEvents')[0].checked = eval(eventsHide == 'true');
|
// $('#chkHideConnectionEvents')[0].checked = eval(eventsHide == 'true');
|
||||||
|
|
||||||
// Initialize components with parameters
|
// Initialize components with parameters
|
||||||
|
|
||||||
@@ -283,25 +260,6 @@ function main () {
|
|||||||
initializeTabs();
|
initializeTabs();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Events tab toggle conenction events
|
|
||||||
$('input').on('ifToggled', function(event){
|
|
||||||
// Hide / Show Events
|
|
||||||
if (event.currentTarget.id == 'chkHideConnectionEvents') {
|
|
||||||
getDeviceEvents();
|
|
||||||
} else {
|
|
||||||
// Activate save & restore
|
|
||||||
// activateSaveRestoreData();
|
|
||||||
|
|
||||||
// Ask skip notifications
|
|
||||||
// if (event.currentTarget.id == 'chkArchived' ) {
|
|
||||||
// askSkipNotifications();
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -328,6 +286,63 @@ function recordSwitch(direction) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Handle previous/next arrows/chevrons
|
||||||
|
function updateChevrons(currentMac) {
|
||||||
|
const devicesList = getDevicesList();
|
||||||
|
|
||||||
|
pos = devicesList.findIndex(item => item.devMac === currentMac);
|
||||||
|
|
||||||
|
if (pos === -1) {
|
||||||
|
console.warn('Device not found in cache. Re-caching devices...', currentMac);
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
cacheDevices().then(() => {
|
||||||
|
hideSpinner();
|
||||||
|
|
||||||
|
// Retry after re-caching
|
||||||
|
const refreshedList = getDevicesList();
|
||||||
|
pos = refreshedList.findIndex(item => item.devMac === currentMac);
|
||||||
|
|
||||||
|
if (pos === -1) {
|
||||||
|
console.error('Still not found after re-cache:', currentMac);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log('Device found after re-cache:', refreshedList[pos]);
|
||||||
|
// Proceed with using `refreshedList[pos]`
|
||||||
|
}).catch((err) => {
|
||||||
|
hideSpinner();
|
||||||
|
console.error('Failed to cache devices:', err);
|
||||||
|
});
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the record number display
|
||||||
|
$('#txtRecord').html((pos + 1) + ' / ' + devicesList.length);
|
||||||
|
|
||||||
|
// Enable/disable previous button
|
||||||
|
if (pos <= 0) {
|
||||||
|
$('#btnPrevious').attr('disabled', '');
|
||||||
|
$('#btnPrevious').addClass('text-gray50');
|
||||||
|
} else {
|
||||||
|
$('#btnPrevious').removeAttr('disabled');
|
||||||
|
$('#btnPrevious').removeClass('text-gray50');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable/disable next button
|
||||||
|
if (pos >= devicesList.length - 1) {
|
||||||
|
$('#btnNext').attr('disabled', '');
|
||||||
|
$('#btnNext').addClass('text-gray50');
|
||||||
|
} else {
|
||||||
|
$('#btnNext').removeAttr('disabled');
|
||||||
|
$('#btnNext').removeClass('text-gray50');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
function performSwitch(direction)
|
function performSwitch(direction)
|
||||||
@@ -338,7 +353,9 @@ function performSwitch(direction)
|
|||||||
|
|
||||||
// Update the global position in the devices list variable 'pos'
|
// Update the global position in the devices list variable 'pos'
|
||||||
if (direction === "next") {
|
if (direction === "next") {
|
||||||
if (pos < devicesList.length - 1) {
|
console.log("direction:" + direction);
|
||||||
|
|
||||||
|
if (pos < devicesList.length) {
|
||||||
pos++;
|
pos++;
|
||||||
}
|
}
|
||||||
} else if (direction === "prev") {
|
} else if (direction === "prev") {
|
||||||
@@ -358,15 +375,12 @@ function performSwitch(direction)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Activate save & restore on any value change
|
// Activate save & restore on any value change
|
||||||
$(document).on('input', 'input:text', function() {
|
$(document).on('input', 'input:text', function() {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
function initializeTabs () {
|
function initializeTabs () {
|
||||||
@@ -380,8 +394,6 @@ function initializeTabs () {
|
|||||||
}
|
}
|
||||||
|
|
||||||
$('.nav-tabs a[id='+ selectedTab +']').tab('show');
|
$('.nav-tabs a[id='+ selectedTab +']').tab('show');
|
||||||
// $('.nav-tabs a[id='+ selectedTab +']').parent().click();
|
|
||||||
// $('.nav-tabs a[id="tabPlugins"]').tab('show');
|
|
||||||
|
|
||||||
// When changed save new current tab
|
// When changed save new current tab
|
||||||
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
|
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
|
||||||
@@ -391,11 +403,6 @@ function initializeTabs () {
|
|||||||
// events on tab change
|
// events on tab change
|
||||||
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
|
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
|
||||||
var target = $(e.target).attr("href") // activated tab
|
var target = $(e.target).attr("href") // activated tab
|
||||||
|
|
||||||
// if(target == "#panTools")
|
|
||||||
// {
|
|
||||||
// // loadTools();
|
|
||||||
// }
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -415,7 +422,6 @@ async function renderSmallBoxes() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const deviceData = await response.json();
|
const deviceData = await response.json();
|
||||||
console.log(deviceData);
|
|
||||||
|
|
||||||
// Prepare custom data
|
// Prepare custom data
|
||||||
const customData = [
|
const customData = [
|
||||||
@@ -447,7 +453,7 @@ async function renderSmallBoxes() {
|
|||||||
"labelLang": "DevDetail_Shortcut_Presence",
|
"labelLang": "DevDetail_Shortcut_Presence",
|
||||||
"iconId": "deviceEventsIcon",
|
"iconId": "deviceEventsIcon",
|
||||||
"iconClass": "fa fa-calendar",
|
"iconClass": "fa fa-calendar",
|
||||||
"dataValue": `${deviceData.devPresenceHours}h`
|
"dataValue": `${deviceData.devPresenceHours ?? 0}h`
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"onclickEvent": "$('#tabEvents').trigger('click');",
|
"onclickEvent": "$('#tabEvents').trigger('click');",
|
||||||
@@ -482,22 +488,65 @@ async function renderSmallBoxes() {
|
|||||||
console.error('Error in renderSmallBoxes:', error);
|
console.error('Error in renderSmallBoxes:', error);
|
||||||
} finally {
|
} finally {
|
||||||
// Hide loading dialog
|
// Hide loading dialog
|
||||||
hideSpinner();
|
// hideSpinner();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function updateDevicePageName(mac) {
|
||||||
|
let name = getDevDataByMac(mac, "devName");
|
||||||
|
let owner = getDevDataByMac(mac, "devOwner");
|
||||||
|
|
||||||
|
// If data is missing, re-cache and retry once
|
||||||
|
if (mac != 'new' && (name === "Unknown" || owner === "Unknown")) {
|
||||||
|
console.warn("Device not found in cache, retrying after re-cache:", mac);
|
||||||
|
showSpinner();
|
||||||
|
cacheDevices().then(() => {
|
||||||
|
hideSpinner();
|
||||||
|
// Retry after successful cache
|
||||||
|
updateDevicePageName(mac);
|
||||||
|
}).catch((err) => {
|
||||||
|
hideSpinner();
|
||||||
|
console.error("Failed to refresh devices:", err);
|
||||||
|
});
|
||||||
|
return; // Exit early to avoid showing bad data
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page title - Name
|
||||||
|
if (mac == "new") {
|
||||||
|
$('#pageTitle').html(
|
||||||
|
`<i title="${getString("Gen_create_new_device")}" class="fa fa-square-plus"></i> ` + getString("Gen_create_new_device")
|
||||||
|
);
|
||||||
|
$('#devicePageInfoPlc .inner').html(
|
||||||
|
`<i class="fa fa-circle-info"></i> ` + getString("Gen_create_new_device_info")
|
||||||
|
);
|
||||||
|
$('#devicePageInfoPlc').show();
|
||||||
|
} else if (!owner || (name.toString()).indexOf(owner) !== -1) {
|
||||||
|
$('#pageTitle').html(name);
|
||||||
|
$('#devicePageInfoPlc').hide();
|
||||||
|
} else {
|
||||||
|
$('#pageTitle').html(name + ' (' + owner + ')');
|
||||||
|
$('#devicePageInfoPlc').hide();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Call renderSmallBoxes, then main
|
||||||
|
(async () => {
|
||||||
|
await renderSmallBoxes();
|
||||||
|
main();
|
||||||
|
})();
|
||||||
|
|
||||||
|
|
||||||
window.onload = function async()
|
window.onload = function async()
|
||||||
{
|
{
|
||||||
initializeTabs();
|
// initializeTabs();
|
||||||
|
updateChevrons(mac);
|
||||||
|
updateDevicePageName(mac);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
?>
|
?>
|
||||||
|
|
||||||
|
|
||||||
<div class="row">
|
<div class="row" id="deviceDetailsEdit">
|
||||||
<div class="box-body form-horizontal">
|
<div class="box-body form-horizontal">
|
||||||
<form id="edit-form">
|
<form id="edit-form">
|
||||||
<!-- Form fields will be appended here -->
|
<!-- Form fields will be appended here -->
|
||||||
@@ -39,7 +39,7 @@
|
|||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Get plugin and settings data from API endpoints
|
// Get plugin and settings data from API endpoints
|
||||||
function getDeviceData(readAllData){
|
function getDeviceData(){
|
||||||
|
|
||||||
mac = getMac()
|
mac = getMac()
|
||||||
|
|
||||||
@@ -53,17 +53,21 @@
|
|||||||
|
|
||||||
var deviceData = JSON.parse(data);
|
var deviceData = JSON.parse(data);
|
||||||
|
|
||||||
// Deactivate next previous buttons
|
// // Deactivate next previous buttons
|
||||||
if (readAllData) {
|
// if (readAllData) {
|
||||||
$('#btnPrevious').attr ('disabled','');
|
// $('#btnPrevious').attr ('disabled','');
|
||||||
$('#btnPrevious').addClass ('text-gray50');
|
// $('#btnPrevious').addClass ('text-gray50');
|
||||||
$('#btnNext').attr ('disabled','');
|
// $('#btnNext').attr ('disabled','');
|
||||||
$('#btnNext').addClass ('text-gray50');
|
// $('#btnNext').addClass ('text-gray50');
|
||||||
}
|
// }
|
||||||
|
|
||||||
// some race condition, need to implement delay
|
// some race condition, need to implement delay
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
$.get('php/server/query_json.php', { file: 'table_settings.json', nocache: Date.now() }, function(res) {
|
$.get('php/server/query_json.php', {
|
||||||
|
file: 'table_settings.json',
|
||||||
|
// nocache: Date.now()
|
||||||
|
},
|
||||||
|
function(res) {
|
||||||
|
|
||||||
settingsData = res["data"];
|
settingsData = res["data"];
|
||||||
|
|
||||||
@@ -85,7 +89,7 @@
|
|||||||
},
|
},
|
||||||
// Group for event and alert settings
|
// Group for event and alert settings
|
||||||
DevDetail_EveandAl_Title: {
|
DevDetail_EveandAl_Title: {
|
||||||
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated"],
|
data: ["devAlertEvents", "devAlertDown", "devSkipRepeated", "devReqNicsOnline", "devChildrenNicsDynamic"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NOTIFICATIONS.md",
|
||||||
iconClass: "fa fa-bell",
|
iconClass: "fa fa-bell",
|
||||||
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group alert-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
@@ -94,9 +98,9 @@
|
|||||||
},
|
},
|
||||||
// Group for network details
|
// Group for network details
|
||||||
DevDetail_MainInfo_Network_Title: {
|
DevDetail_MainInfo_Network_Title: {
|
||||||
data: ["devParentMAC", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
data: ["devParentMAC", "devParentRelType", "devParentPort", "devSSID", "devSite", "devSyncHubNode"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
||||||
iconClass: "fa fa-network-wired",
|
iconClass: "fa fa-sitemap fa-rotate-270",
|
||||||
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
inputGroupClasses: "field-group network-group col-lg-4 col-sm-6 col-xs-12",
|
||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
@@ -119,12 +123,21 @@
|
|||||||
labelClasses: "col-sm-4 col-xs-12 control-label",
|
labelClasses: "col-sm-4 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-8 col-xs-12 input-group"
|
inputClasses: "col-sm-8 col-xs-12 input-group"
|
||||||
},
|
},
|
||||||
|
// Group for Children.
|
||||||
|
DevDetail_Children_Title: {
|
||||||
|
data: ["devChildrenDynamic"],
|
||||||
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md",
|
||||||
|
iconClass: "fa fa-list",
|
||||||
|
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
||||||
|
labelClasses: "col-sm-12 col-xs-12 control-label",
|
||||||
|
inputClasses: "col-sm-12 col-xs-12 input-group"
|
||||||
|
},
|
||||||
// Group for Custom properties.
|
// Group for Custom properties.
|
||||||
DevDetail_CustomProperties_Title: {
|
DevDetail_CustomProperties_Title: {
|
||||||
data: ["devCustomProps"],
|
data: ["devCustomProps"],
|
||||||
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md",
|
docs: "https://github.com/jokob-sk/NetAlertX/blob/main/docs/CUSTOM_PROPERTIES.md",
|
||||||
iconClass: "fa fa-list",
|
iconClass: "fa fa-list",
|
||||||
inputGroupClasses: "field-group cutprop-group col-lg-12 col-sm-12 col-xs-12",
|
inputGroupClasses: "field-group cutprop-group col-lg-6 col-sm-12 col-xs-12",
|
||||||
labelClasses: "col-sm-12 col-xs-12 control-label",
|
labelClasses: "col-sm-12 col-xs-12 control-label",
|
||||||
inputClasses: "col-sm-12 col-xs-12 input-group"
|
inputClasses: "col-sm-12 col-xs-12 input-group"
|
||||||
}
|
}
|
||||||
@@ -167,6 +180,7 @@
|
|||||||
// Get the field data (replace 'NEWDEV_' prefix from the key)
|
// Get the field data (replace 'NEWDEV_' prefix from the key)
|
||||||
fieldData = deviceData[setting.setKey.replace('NEWDEV_', '')]
|
fieldData = deviceData[setting.setKey.replace('NEWDEV_', '')]
|
||||||
fieldData = fieldData == null ? "" : fieldData;
|
fieldData = fieldData == null ? "" : fieldData;
|
||||||
|
fieldOptionsOverride = null;
|
||||||
|
|
||||||
// console.log(setting.setKey);
|
// console.log(setting.setKey);
|
||||||
// console.log(fieldData);
|
// console.log(fieldData);
|
||||||
@@ -199,16 +213,21 @@
|
|||||||
</span>`;
|
</span>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle generate IP for new device
|
// handle devChildrenDynamic or NEWDEV_devChildrenNicsDynamic - selected values and options are the same
|
||||||
if (setting.setKey == "NEWDEV_devIcon") {
|
if (
|
||||||
inlineControl += `<span class="input-group-addon pointer"
|
Array.isArray(fieldData) &&
|
||||||
onclick="showIconSelection()"
|
(setting.setKey == "NEWDEV_devChildrenDynamic" ||
|
||||||
title="${getString("Gen_Select")}">
|
setting.setKey == "NEWDEV_devChildrenNicsDynamic" )
|
||||||
<i class="fa-solid fa-chevron-down" ></i>
|
)
|
||||||
</span>`;
|
{
|
||||||
|
fieldDataNew = []
|
||||||
|
fieldData.forEach(child => {
|
||||||
|
fieldDataNew.push(child.devMac)
|
||||||
|
})
|
||||||
|
fieldData = fieldDataNew;
|
||||||
|
fieldOptionsOverride = fieldDataNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Generate the input field HTML
|
// Generate the input field HTML
|
||||||
const inputFormHtml = `<div class="form-group col-xs-12">
|
const inputFormHtml = `<div class="form-group col-xs-12">
|
||||||
<label id="${setting.setKey}_label" class="${obj.labelClasses}" > ${setting.setName}
|
<label id="${setting.setKey}_label" class="${obj.labelClasses}" > ${setting.setName}
|
||||||
@@ -219,7 +238,7 @@
|
|||||||
</i>
|
</i>
|
||||||
</label>
|
</label>
|
||||||
<div class="${obj.inputClasses}">
|
<div class="${obj.inputClasses}">
|
||||||
${generateFormHtml(settingsData, setting, fieldData.toString(), null, null)}
|
${generateFormHtml(settingsData, setting, fieldData.toString(), fieldOptionsOverride, null)}
|
||||||
${inlineControl}
|
${inlineControl}
|
||||||
</div>
|
</div>
|
||||||
</div>`;
|
</div>`;
|
||||||
@@ -237,31 +256,17 @@
|
|||||||
|
|
||||||
// update readonly fields
|
// update readonly fields
|
||||||
handleReadOnly(settingsData, disabledFields);
|
handleReadOnly(settingsData, disabledFields);
|
||||||
|
|
||||||
// Page title - Name
|
|
||||||
if (mac == "new") {
|
|
||||||
$('#pageTitle').html(`<i title="${getString("Gen_create_new_device")}" class="fa fa-square-plus"></i> ` + getString("Gen_create_new_device"));
|
|
||||||
$('#devicePageInfoPlc .inner').html(`<i class="fa fa-circle-info"></i> ` + getString("Gen_create_new_device_info"));
|
|
||||||
$('#devicePageInfoPlc').show();
|
|
||||||
} else if (deviceData['devOwner'] == null || deviceData['devOwner'] == '' ||
|
|
||||||
(deviceData['devName'].toString()).indexOf(deviceData['devOwner']) != -1) {
|
|
||||||
$('#pageTitle').html(deviceData['devName']);
|
|
||||||
$('#devicePageInfoPlc').hide();
|
|
||||||
} else {
|
|
||||||
$('#pageTitle').html(deviceData['devName'] + ' (' + deviceData['devOwner'] + ')');
|
|
||||||
$('#devicePageInfoPlc').hide();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// console.log(relevantSettings)
|
// console.log(relevantSettings)
|
||||||
|
|
||||||
generateSimpleForm(relevantSettings);
|
generateSimpleForm(relevantSettings);
|
||||||
|
|
||||||
// <> chevrons
|
|
||||||
updateChevrons(deviceData)
|
|
||||||
|
|
||||||
toggleNetworkConfiguration(mac == 'Internet')
|
toggleNetworkConfiguration(mac == 'Internet')
|
||||||
|
|
||||||
|
initSelect2();
|
||||||
|
initHoverNodeInfo();
|
||||||
|
|
||||||
hideSpinner();
|
hideSpinner();
|
||||||
|
|
||||||
})
|
})
|
||||||
@@ -272,46 +277,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------
|
|
||||||
// Handle previous/next arrows/chevrons
|
|
||||||
function updateChevrons(deviceData) {
|
|
||||||
|
|
||||||
devicesList = getDevicesList();
|
|
||||||
|
|
||||||
// console.log(devicesList);
|
|
||||||
|
|
||||||
// Check if device is part of the devicesList
|
|
||||||
pos = devicesList.findIndex(item => item.rowid == deviceData['rowid']);
|
|
||||||
|
|
||||||
// console.log(pos);
|
|
||||||
|
|
||||||
if (pos == -1) {
|
|
||||||
devicesList.push({"rowid" : deviceData['rowid'], "mac" : deviceData['devMac'], "name": deviceData['devName'], "type": deviceData['devType']});
|
|
||||||
pos=0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Record number
|
|
||||||
$('#txtRecord').html (pos+1 +' / '+ devicesList.length);
|
|
||||||
|
|
||||||
// Deactivate previous button
|
|
||||||
if (pos <= 0) {
|
|
||||||
$('#btnPrevious').attr ('disabled','');
|
|
||||||
$('#btnPrevious').addClass ('text-gray50');
|
|
||||||
} else {
|
|
||||||
$('#btnPrevious').removeAttr ('disabled');
|
|
||||||
$('#btnPrevious').removeClass ('text-gray50');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Deactivate next button
|
|
||||||
if (pos >= (devicesList.length-1)) {
|
|
||||||
$('#btnNext').attr ('disabled','');
|
|
||||||
$('#btnNext').addClass ('text-gray50');
|
|
||||||
} else {
|
|
||||||
$('#btnNext').removeAttr ('disabled');
|
|
||||||
$('#btnNext').removeClass ('text-gray50');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------
|
// ----------------------------------------
|
||||||
// Handle the read-only fields
|
// Handle the read-only fields
|
||||||
function handleReadOnly(settingsData, disabledFields) {
|
function handleReadOnly(settingsData, disabledFields) {
|
||||||
@@ -325,18 +290,6 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------
|
|
||||||
// Show the description of a setting
|
|
||||||
function showDescriptionPopup(e) {
|
|
||||||
|
|
||||||
console.log($(e).attr("my-set-key"));
|
|
||||||
|
|
||||||
showModalOK("Info", getString($(e).attr("my-set-key") + '_description'))
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Save device data to DB
|
// Save device data to DB
|
||||||
function setDeviceData(direction = '', refreshCallback = '') {
|
function setDeviceData(direction = '', refreshCallback = '') {
|
||||||
@@ -380,6 +333,8 @@
|
|||||||
alertevents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
alertevents: ($('#NEWDEV_devAlertEvents')[0].checked * 1),
|
||||||
alertdown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
alertdown: ($('#NEWDEV_devAlertDown')[0].checked * 1),
|
||||||
skiprepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
skiprepeated: $('#NEWDEV_devSkipRepeated').val().split(' ')[0],
|
||||||
|
relType: $('#NEWDEV_devParentRelType').val().replace(/'/g, ""),
|
||||||
|
reqNics: ($('#NEWDEV_devReqNicsOnline')[0].checked * 1),
|
||||||
newdevice: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
newdevice: ($('#NEWDEV_devIsNew')[0].checked * 1),
|
||||||
archived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
archived: ($('#NEWDEV_devIsArchived')[0].checked * 1),
|
||||||
devFirstConnection: ($('#NEWDEV_devFirstConnection').val()),
|
devFirstConnection: ($('#NEWDEV_devFirstConnection').val()),
|
||||||
@@ -427,9 +382,47 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// INIT with polling for panel element visibility
|
||||||
|
// -----------------------------------------------
|
||||||
|
|
||||||
|
var deviceDetailsPageInitialized = false;
|
||||||
|
|
||||||
|
function initdeviceDetailsPage()
|
||||||
|
{
|
||||||
|
// Only proceed if .plugin-content is visible
|
||||||
|
if (!$('#panDetails:visible').length) {
|
||||||
|
return; // exit early if nothing is visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// init page once
|
||||||
|
if (deviceDetailsPageInitialized) return; // ENSURE ONCE
|
||||||
|
deviceDetailsPageInitialized = true;
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
getDeviceData();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Recurring function to monitor the URL and reinitialize if needed
|
||||||
|
function deviceDetailsPageUpdater() {
|
||||||
|
initdeviceDetailsPage();
|
||||||
|
|
||||||
|
// Run updater again after delay
|
||||||
|
setTimeout(deviceDetailsPageUpdater, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// if visible, load immediately, if not start updater
|
||||||
|
if (!$('#panDetails:visible').length) {
|
||||||
|
deviceDetailsPageUpdater();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
getDeviceData();
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------- INIT ------------------------
|
|
||||||
getDeviceData(true);
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -7,11 +7,11 @@
|
|||||||
|
|
||||||
|
|
||||||
<!-- Hide Connections -->
|
<!-- Hide Connections -->
|
||||||
<div class="text-center">
|
<div class="col-sm-12 col-xs-12">
|
||||||
<label>
|
<label class="col-sm-3 col-xs-10">
|
||||||
<input class="checkbox blue hidden" id="chkHideConnectionEvents" type="checkbox" checked>
|
<?= lang('DevDetail_Events_CheckBox');?>
|
||||||
<?= lang('DevDetail_Events_CheckBox');?>
|
|
||||||
</label>
|
</label>
|
||||||
|
<input class="checkbox blue col-sm-1 col-xs-2" id="chkHideConnectionEvents" type="checkbox" onChange="loadEventsData()">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Datatable Events -->
|
<!-- Datatable Events -->
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th><?= lang("DevDetail_Tab_EventsTableDate");?></th>
|
<th><?= lang("DevDetail_Tab_EventsTableDate");?></th>
|
||||||
|
<th><?= lang("DevDetail_Tab_EventsTableDate");?></th>
|
||||||
<th><?= lang("DevDetail_Tab_EventsTableEvent");?></th>
|
<th><?= lang("DevDetail_Tab_EventsTableEvent");?></th>
|
||||||
<th><?= lang("DevDetail_Tab_EventsTableIP");?></th>
|
<th><?= lang("DevDetail_Tab_EventsTableIP");?></th>
|
||||||
<th><?= lang("DevDetail_Tab_EventsTableInfo");?></th>
|
<th><?= lang("DevDetail_Tab_EventsTableInfo");?></th>
|
||||||
@@ -29,66 +30,135 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var eventsRows = 10;
|
|
||||||
var eventsHide = true;
|
|
||||||
var parEventsRows = 'Front_Details_Events_Rows';
|
|
||||||
var parEventsHide = 'Front_Details_Events_Hide';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function loadEventsData() {
|
||||||
|
const hideConnections = $('#chkHideConnectionEvents')[0].checked;
|
||||||
|
const hideConnectionsStr = hideConnections ? 'true' : 'false';
|
||||||
|
|
||||||
function loadEventsData() {
|
mac = getMac()
|
||||||
// Define Events datasource and query dada
|
|
||||||
hideConnections = $('#chkHideConnectionEvents')[0].checked;
|
|
||||||
$('#tableEvents').DataTable().ajax.url('php/server/events.php?action=getDeviceEvents&mac=' + mac +'&period='+ period +'&hideConnections='+ hideConnections).load();
|
|
||||||
}
|
|
||||||
|
|
||||||
function initializeSessionsDatatable () {
|
const rawSql = `
|
||||||
|
SELECT eve_DateTime, eve_DateTime, eve_EventType, eve_IP, eve_AdditionalInfo
|
||||||
|
FROM Events
|
||||||
|
WHERE eve_MAC = "${mac}"
|
||||||
|
AND (
|
||||||
|
(eve_EventType NOT IN ("Connected", "Disconnected", "VOIDED - Connected", "VOIDED - Disconnected"))
|
||||||
|
OR "${hideConnectionsStr}" = "false"
|
||||||
|
)
|
||||||
|
`;
|
||||||
|
|
||||||
// Events datatable
|
const apiUrl = `php/server/dbHelper.php?action=read&rawSql=${btoa(encodeURIComponent(rawSql))}`;
|
||||||
$('#tableEvents').DataTable({
|
|
||||||
'paging' : true,
|
|
||||||
'lengthChange': true,
|
|
||||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
|
||||||
'searching' : true,
|
|
||||||
'ordering' : true,
|
|
||||||
'info' : true,
|
|
||||||
'autoWidth' : false,
|
|
||||||
'order' : [[0,'desc']],
|
|
||||||
|
|
||||||
// Parameters
|
// Manually load the data first
|
||||||
'pageLength' : eventsRows,
|
$.get(apiUrl, function (data) {
|
||||||
|
const parsed = JSON.parse(data);
|
||||||
|
|
||||||
'columnDefs' : [
|
const rows = parsed.map(row => {
|
||||||
// Replace HTML codes
|
const rawDate = row.eve_DateTime;
|
||||||
{targets: [0],
|
const formattedDate = rawDate ? localizeTimestamp(rawDate) : '-';
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
return [
|
||||||
$(td).html (translateHTMLcodes (localizeTimestamp(cellData)));
|
formattedDate,
|
||||||
} }
|
row.eve_DateTime,
|
||||||
],
|
row.eve_EventType,
|
||||||
|
row.eve_IP,
|
||||||
|
row.eve_AdditionalInfo
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
// Processing
|
// Fill the table manually
|
||||||
'processing' : true,
|
const table = $('#tableEvents').DataTable();
|
||||||
'language' : {
|
table.clear();
|
||||||
processing: '<table><td width="130px" align="middle"><?= lang("DevDetail_Loading");?></td>'+
|
table.rows.add(rows); // assuming each row is an array
|
||||||
'<td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw">'+
|
table.draw();
|
||||||
'</td></table>',
|
|
||||||
emptyTable: 'No data',
|
|
||||||
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
|
||||||
"search": "<?= lang('Events_Searchbox');?>: ",
|
|
||||||
"paginate": {
|
|
||||||
"next": "<?= lang('Events_Table_nav_next');?>",
|
|
||||||
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
|
||||||
},
|
|
||||||
"info": "<?= lang('Events_Table_info');?>",
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
|
hideSpinner();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
initializeSessionsDatatable();
|
function initializeEventsDatatable (eventsRows) {
|
||||||
loadEventsData();
|
|
||||||
|
if ($.fn.dataTable.isDataTable('#tableEvents')) {
|
||||||
|
$('#tableEvents').DataTable().clear().destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
$('#tableEvents').DataTable({
|
||||||
|
'paging' : true,
|
||||||
|
'lengthChange': true,
|
||||||
|
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
||||||
|
'searching' : true,
|
||||||
|
'ordering' : true,
|
||||||
|
'info' : true,
|
||||||
|
'autoWidth' : false,
|
||||||
|
'order' : [[0,'desc']],
|
||||||
|
'pageLength' : eventsRows,
|
||||||
|
|
||||||
|
'columnDefs' : [
|
||||||
|
{ orderData: [1], targets: [0] },
|
||||||
|
{ visible: false, targets: [1] },
|
||||||
|
{
|
||||||
|
targets: [0],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
$(td).html(translateHTMLcodes(localizeTimestamp(cellData)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
'processing' : true,
|
||||||
|
'language' : {
|
||||||
|
processing: '<table><td width="130px" align="middle"><?= lang("DevDetail_Loading");?></td>'+
|
||||||
|
'<td><i class="fa-solid fa-spinner fa-spin-pulse"></i></td></table>',
|
||||||
|
emptyTable: 'No data',
|
||||||
|
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
||||||
|
"search": "<?= lang('Events_Searchbox');?>: ",
|
||||||
|
"paginate": {
|
||||||
|
"next": "<?= lang('Events_Table_nav_next');?>",
|
||||||
|
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
||||||
|
},
|
||||||
|
"info": "<?= lang('Events_Table_info');?>",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// INIT with polling for panel element visibility
|
||||||
|
// -----------------------------------------------
|
||||||
|
|
||||||
|
var eventsPageInitialized = false;
|
||||||
|
|
||||||
|
function initDeviceEventsPage()
|
||||||
|
{
|
||||||
|
// Only proceed if .plugin-content is visible
|
||||||
|
if (!$('#panEvents:visible').length) {
|
||||||
|
return; // exit early if nothing is visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// init page once
|
||||||
|
if (eventsPageInitialized) return; // ENSURE ONCE
|
||||||
|
eventsPageInitialized = true;
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
var eventsRows = 10;
|
||||||
|
var eventsHide = true;
|
||||||
|
|
||||||
|
initializeEventsDatatable(eventsRows);
|
||||||
|
loadEventsData();
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Recurring function to monitor the URL and reinitialize if needed
|
||||||
|
function deviceEventsPageUpdater() {
|
||||||
|
initDeviceEventsPage();
|
||||||
|
|
||||||
|
// Run updater again after delay
|
||||||
|
setTimeout(deviceEventsPageUpdater, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceEventsPageUpdater();
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -23,8 +23,6 @@
|
|||||||
|
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
initializeCalendar();
|
|
||||||
loadPresenceData();
|
|
||||||
|
|
||||||
// Force re-render calendar on tab change
|
// Force re-render calendar on tab change
|
||||||
// (bugfix for render error at left panel)
|
// (bugfix for render error at left panel)
|
||||||
@@ -234,6 +232,37 @@ function initializeCalendar() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// INIT with polling for panel element visibility
|
||||||
|
// -----------------------------------------------
|
||||||
|
|
||||||
|
var presencePageInitialized = false;
|
||||||
|
|
||||||
|
function initDevicePresencePage() {
|
||||||
|
// Only proceed if the Presence tab is visible
|
||||||
|
if (!$('#panPresence:visible').length) {
|
||||||
|
return; // Exit early if nothing is visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure initialization only happens once
|
||||||
|
if (presencePageInitialized) return;
|
||||||
|
presencePageInitialized = true;
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
initializeCalendar();
|
||||||
|
loadPresenceData();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recurring check to initialize when visible
|
||||||
|
function devicePresencePageUpdater() {
|
||||||
|
initDevicePresencePage();
|
||||||
|
|
||||||
|
setTimeout(devicePresencePageUpdater, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
devicePresencePageUpdater();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -24,77 +24,126 @@
|
|||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
|
||||||
var parSessionsRows = 'Front_Details_Sessions_Rows';
|
|
||||||
|
|
||||||
|
function initializeSessionsDatatable (sessionsRows) {
|
||||||
|
// Sessions datatable
|
||||||
|
$('#tableSessions').DataTable({
|
||||||
|
'paging' : true,
|
||||||
|
'lengthChange': true,
|
||||||
|
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
||||||
|
'searching' : true,
|
||||||
|
'ordering' : true,
|
||||||
|
'info' : true,
|
||||||
|
'autoWidth' : false,
|
||||||
|
'order' : [[0,'desc'], [1,'desc']],
|
||||||
|
|
||||||
|
// Parameters
|
||||||
|
'pageLength' : sessionsRows,
|
||||||
|
|
||||||
|
'columnDefs' : [
|
||||||
|
{visible: false, targets: [0]},
|
||||||
|
|
||||||
|
// Replace HTML codes
|
||||||
|
{targets: [3,5],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
$(td).html (translateHTMLcodes (cellData));
|
||||||
|
} },
|
||||||
|
// Date
|
||||||
|
{targets: [1,2],
|
||||||
|
"createdCell": function (td, cellData, rowData, row, col) {
|
||||||
|
// console.log(cellData);
|
||||||
|
|
||||||
|
if (!cellData.includes("missing event") && !cellData.includes("..."))
|
||||||
|
{
|
||||||
|
if (cellData.includes("+")) { // Check if timezone offset is present
|
||||||
|
cellData = cellData.split('+')[0]; // Remove timezone offset
|
||||||
|
}
|
||||||
|
// console.log(cellData);
|
||||||
|
result = localizeTimestamp(cellData);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
result = translateHTMLcodes(cellData)
|
||||||
|
}
|
||||||
|
|
||||||
|
$(td).html (result);
|
||||||
|
} }
|
||||||
|
],
|
||||||
|
|
||||||
|
// Processing
|
||||||
|
'processing' : true,
|
||||||
|
'language' : {
|
||||||
|
processing: '<table><td width="130px" align="middle"><?= lang("DevDetail_Loading");?></td>'+
|
||||||
|
'<td><i class="fa-solid fa-spinner fa-spin-pulse"></i>'+
|
||||||
|
'</td></table>',
|
||||||
|
emptyTable: 'No data',
|
||||||
|
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
||||||
|
"search": "<?= lang('Events_Searchbox');?>: ",
|
||||||
|
"paginate": {
|
||||||
|
"next": "<?= lang('Events_Table_nav_next');?>",
|
||||||
|
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
||||||
|
},
|
||||||
|
"info": "<?= lang('Events_Table_info');?>",
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// INIT with polling for panel element visibility
|
||||||
|
// -----------------------------------------------
|
||||||
|
|
||||||
|
// -----------------------------------------------------------
|
||||||
|
// Init datatable
|
||||||
|
function loadSessionsData(period){
|
||||||
|
const table = $('#tableSessions').DataTable();
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
|
// table.clear().draw(); // Clear existing data before reloading
|
||||||
|
|
||||||
|
table.ajax
|
||||||
|
.url('php/server/events.php?action=getDeviceSessions&mac=' + getMac() + '&period=' + period)
|
||||||
|
.load(function () {
|
||||||
|
hideSpinner();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
var sessionsPageInitialized = false;
|
||||||
|
|
||||||
|
// -----------------------------------------------------------
|
||||||
|
// Main init function
|
||||||
|
function initDeviceSessionsPage()
|
||||||
|
{
|
||||||
|
// Only proceed if .plugin-content is visible
|
||||||
|
if (!$('#panSessions:visible').length) {
|
||||||
|
return; // exit early if nothing is visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// init page once
|
||||||
|
if (sessionsPageInitialized) return;
|
||||||
|
sessionsPageInitialized = true;
|
||||||
|
|
||||||
|
showSpinner();
|
||||||
|
|
||||||
var sessionsRows = 10;
|
var sessionsRows = 10;
|
||||||
var period = '1 month';
|
var period = '1 month';
|
||||||
|
|
||||||
function initializeSessionsDatatable () {
|
initializeSessionsDatatable(sessionsRows);
|
||||||
// Sessions datatable
|
loadSessionsData(period);
|
||||||
$('#tableSessions').DataTable({
|
}
|
||||||
'paging' : true,
|
|
||||||
'lengthChange': true,
|
|
||||||
'lengthMenu' : [[10, 25, 50, 100, 500, -1], [10, 25, 50, 100, 500, 'All']],
|
|
||||||
'searching' : true,
|
|
||||||
'ordering' : true,
|
|
||||||
'info' : true,
|
|
||||||
'autoWidth' : false,
|
|
||||||
'order' : [[0,'desc'], [1,'desc']],
|
|
||||||
|
|
||||||
// Parameters
|
// -----------------------------------------------------------------------------
|
||||||
'pageLength' : sessionsRows,
|
// Recurring function to monitor the URL and reinitialize if needed
|
||||||
|
function deviceSessionsPageUpdater() {
|
||||||
|
initDeviceSessionsPage();
|
||||||
|
|
||||||
'columnDefs' : [
|
// Run updater again after delay
|
||||||
{visible: false, targets: [0]},
|
setTimeout(deviceSessionsPageUpdater, 200);
|
||||||
|
}
|
||||||
|
|
||||||
// Replace HTML codes
|
// start updater
|
||||||
{targets: [3,5],
|
deviceSessionsPageUpdater();
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
|
||||||
$(td).html (translateHTMLcodes (cellData));
|
|
||||||
} },
|
|
||||||
// Date
|
|
||||||
{targets: [1,2],
|
|
||||||
"createdCell": function (td, cellData, rowData, row, col) {
|
|
||||||
// console.log(cellData);
|
|
||||||
|
|
||||||
if (!cellData.includes("missing event") && !cellData.includes("..."))
|
|
||||||
{
|
|
||||||
if (cellData.includes("+")) { // Check if timezone offset is present
|
|
||||||
cellData = cellData.split('+')[0]; // Remove timezone offset
|
|
||||||
}
|
|
||||||
// console.log(cellData);
|
|
||||||
result = localizeTimestamp(cellData);
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
result = translateHTMLcodes(cellData)
|
|
||||||
}
|
|
||||||
|
|
||||||
$(td).html (result);
|
|
||||||
} }
|
|
||||||
],
|
|
||||||
|
|
||||||
// Processing
|
|
||||||
'processing' : true,
|
|
||||||
'language' : {
|
|
||||||
processing: '<table><td width="130px" align="middle"><?= lang("DevDetail_Loading");?></td>'+
|
|
||||||
'<td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw">'+
|
|
||||||
'</td></table>',
|
|
||||||
emptyTable: 'No data',
|
|
||||||
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
|
||||||
"search": "<?= lang('Events_Searchbox');?>: ",
|
|
||||||
"paginate": {
|
|
||||||
"next": "<?= lang('Events_Table_nav_next');?>",
|
|
||||||
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
|
||||||
},
|
|
||||||
"info": "<?= lang('Events_Table_info');?>",
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadSessionsData(){
|
|
||||||
$('#tableSessions').DataTable().ajax.url('php/server/events.php?action=getDeviceSessions&mac=' + getMac() +'&period='+ period).load();
|
|
||||||
}
|
|
||||||
|
|
||||||
initializeSessionsDatatable();
|
|
||||||
loadSessionsData();
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
@@ -14,7 +14,7 @@
|
|||||||
<?= lang("DevDetail_Tab_Tools_Internet_Info_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Internet_Info_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="internetinfo()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Internet_Info_Start") ?></button>
|
<?= lang("DevDetail_Tab_Tools_Internet_Info_Start") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -33,13 +33,13 @@
|
|||||||
<?= lang("DevDetail_Copy_Device_Tooltip") ?>
|
<?= lang("DevDetail_Copy_Device_Tooltip") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<select class="form-control"
|
<select class="form-control"
|
||||||
title="<?= lang('DevDetail_Copy_Device_Tooltip');?>"
|
title="<?= lang('DevDetail_Copy_Device_Tooltip');?>"
|
||||||
id="txtCopyFromDevice" >
|
id="txtCopyFromDevice" >
|
||||||
<option value="lemp_loading" id="lemp_loading">Loading</option>
|
<option value="lemp_loading" id="lemp_loading">Loading</option>
|
||||||
</select>
|
</select>
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto; margin-top:10px;" onclick="copyFromDevice()">
|
||||||
<?= lang("BackDevDetail_Copy_Title") ?></button>
|
<?= lang("BackDevDetail_Copy_Title") ?></button>
|
||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
@@ -56,7 +56,7 @@
|
|||||||
<?= lang("DevDetail_Tools_WOL_noti_text") ?>
|
<?= lang("DevDetail_Tools_WOL_noti_text") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="wakeonlan()">
|
<button type="button" id="internetinfo" class="btn btn-primary pa-btn" style="margin: auto;" onclick="wakeonlan()">
|
||||||
<?= lang("DevDetail_Tools_WOL_noti") ?></button>
|
<?= lang("DevDetail_Tools_WOL_noti") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -74,7 +74,7 @@
|
|||||||
<?= lang("DevDetail_button_DeleteEvents_Warning") ?>
|
<?= lang("DevDetail_button_DeleteEvents_Warning") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-default pa-btn pa-btn-delete"
|
class="btn btn-default pa-btn pa-btn-delete"
|
||||||
style="margin-left:0px;"
|
style="margin-left:0px;"
|
||||||
@@ -94,7 +94,7 @@
|
|||||||
<?= lang("DevDetail_CustomProps_reset_info") ?>
|
<?= lang("DevDetail_CustomProps_reset_info") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button"
|
<button type="button"
|
||||||
class="btn btn-default pa-btn pa-btn-delete"
|
class="btn btn-default pa-btn pa-btn-delete"
|
||||||
style="margin-left:0px;"
|
style="margin-left:0px;"
|
||||||
@@ -116,7 +116,7 @@
|
|||||||
<?= lang("DevDetail_Tab_Tools_Speedtest_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Speedtest_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<br>
|
<br>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()">
|
<button type="button" id="speedtestcli" class="btn btn-primary pa-btn" style="margin: auto;" onclick="speedtestcli()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Speedtest_Start") ?></button>
|
<?= lang("DevDetail_Tab_Tools_Speedtest_Start") ?></button>
|
||||||
<br>
|
<br>
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
<h5 class="">
|
<h5 class="">
|
||||||
<?= lang("DevDetail_Tab_Tools_Traceroute_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Traceroute_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()">
|
<button type="button" id="traceroute" class="btn btn-primary pa-btn" style="margin: auto;" onclick="traceroute()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Traceroute_Start") ?>
|
<?= lang("DevDetail_Tab_Tools_Traceroute_Start") ?>
|
||||||
</button>
|
</button>
|
||||||
@@ -151,7 +151,7 @@
|
|||||||
<h5 class="">
|
<h5 class="">
|
||||||
<?= lang("DevDetail_Tab_Tools_Nslookup_Description") ?>
|
<?= lang("DevDetail_Tab_Tools_Nslookup_Description") ?>
|
||||||
</h5>
|
</h5>
|
||||||
<div style="width:100%; text-align: center; margin-bottom: 50px;">
|
<div style="width:100%; text-align: center;">
|
||||||
<button type="button" id="nslookup" class="btn btn-primary pa-btn" style="margin: auto;" onclick="nslookup()">
|
<button type="button" id="nslookup" class="btn btn-primary pa-btn" style="margin: auto;" onclick="nslookup()">
|
||||||
<?= lang("DevDetail_Tab_Tools_Nslookup_Start") ?>
|
<?= lang("DevDetail_Tab_Tools_Nslookup_Start") ?>
|
||||||
</button>
|
</button>
|
||||||
@@ -295,7 +295,7 @@
|
|||||||
function initCopyFromDevice() {
|
function initCopyFromDevice() {
|
||||||
|
|
||||||
const devices = getVisibleDevicesList()
|
const devices = getVisibleDevicesList()
|
||||||
console.log(devices);
|
// console.log(devices);
|
||||||
|
|
||||||
const $select = $('#txtCopyFromDevice');
|
const $select = $('#txtCopyFromDevice');
|
||||||
$select.empty(); // Clear existing options
|
$select.empty(); // Clear existing options
|
||||||
@@ -443,6 +443,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
// init first time
|
// init first time
|
||||||
initNmapButtons();
|
// -----------------------------------------------------------
|
||||||
initCopyFromDevice();
|
var toolsPageInitialized = false;
|
||||||
|
|
||||||
|
function initDeviceToolsPage()
|
||||||
|
{
|
||||||
|
// Only proceed if .panTools is visible
|
||||||
|
if (!$('#panTools:visible').length) {
|
||||||
|
return; // exit early if nothing is visible
|
||||||
|
}
|
||||||
|
|
||||||
|
// init page once
|
||||||
|
if (toolsPageInitialized) return;
|
||||||
|
toolsPageInitialized = true;
|
||||||
|
|
||||||
|
initNmapButtons();
|
||||||
|
initCopyFromDevice();
|
||||||
|
|
||||||
|
hideSpinner();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Recurring function to monitor the URL and reinitialize if needed
|
||||||
|
function deviceToolsPageUpdater() {
|
||||||
|
initDeviceToolsPage();
|
||||||
|
|
||||||
|
// Run updater again after delay
|
||||||
|
setTimeout(deviceToolsPageUpdater, 200);
|
||||||
|
}
|
||||||
|
|
||||||
|
// start updater
|
||||||
|
deviceToolsPageUpdater();
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -150,9 +150,6 @@ function main () {
|
|||||||
var availableColumns = getSettingOptions("UI_device_columns").split(",");
|
var availableColumns = getSettingOptions("UI_device_columns").split(",");
|
||||||
headersDefaultOrder = availableColumns.map(val => getString(val));
|
headersDefaultOrder = availableColumns.map(val => getString(val));
|
||||||
|
|
||||||
console.log(headersDefaultOrder);
|
|
||||||
|
|
||||||
|
|
||||||
var selectedColumns = JSON.parse(getSetting("UI_device_columns").replace(/'/g, '"'));
|
var selectedColumns = JSON.parse(getSetting("UI_device_columns").replace(/'/g, '"'));
|
||||||
|
|
||||||
// generate default order lists of given length
|
// generate default order lists of given length
|
||||||
@@ -266,14 +263,16 @@ function getDevicesTotals() {
|
|||||||
function processDeviceTotals(devicesData) {
|
function processDeviceTotals(devicesData) {
|
||||||
// Define filter conditions and corresponding objects
|
// Define filter conditions and corresponding objects
|
||||||
const filters = [
|
const filters = [
|
||||||
{ status: 'my_devices', color: 'bg-aqua', label: getString('Device_Shortcut_AllDevices'), icon: 'fa-laptop' },
|
{ status: 'my_devices', color: 'bg-aqua', label: getString('Device_Shortcut_AllDevices'), icon: 'fa-laptop' },
|
||||||
{ status: 'all', color: 'bg-aqua', label: getString('Gen_All_Devices'), icon: 'fa-laptop' },
|
{ status: 'all', color: 'bg-aqua', label: getString('Gen_All_Devices'), icon: 'fa-laptop' },
|
||||||
{ status: 'connected', color: 'bg-green', label: getString('Device_Shortcut_Connected'), icon: 'fa-plug' },
|
{ status: 'connected', color: 'bg-green', label: getString('Device_Shortcut_Connected'), icon: 'fa-plug' },
|
||||||
{ status: 'favorites', color: 'bg-yellow', label: getString('Device_Shortcut_Favorites'), icon: 'fa-star' },
|
{ status: 'favorites', color: 'bg-yellow', label: getString('Device_Shortcut_Favorites'), icon: 'fa-star' },
|
||||||
{ status: 'new', color: 'bg-yellow', label: getString('Device_Shortcut_NewDevices'), icon: 'fa-plus' },
|
{ status: 'new', color: 'bg-yellow', label: getString('Device_Shortcut_NewDevices'), icon: 'fa-plus' },
|
||||||
{ status: 'down', color: 'bg-red', label: getString('Device_Shortcut_DownOnly'), icon: 'fa-warning' },
|
{ status: 'down', color: 'bg-red', label: getString('Device_Shortcut_DownOnly'), icon: 'fa-warning' },
|
||||||
{ status: 'archived', color: 'bg-gray', label: getString('Device_Shortcut_Archived'), icon: 'fa-eye-slash' },
|
{ status: 'archived', color: 'bg-gray', label: getString('Device_Shortcut_Archived'), icon: 'fa-eye-slash' },
|
||||||
{ status: 'offline', color: 'bg-gray', label: getString('Gen_Offline'), icon: 'fa-xmark' }
|
{ status: 'offline', color: 'bg-gray', label: getString('Gen_Offline'), icon: 'fa-xmark' },
|
||||||
|
{ status: 'all_devices', color: 'bg-gray', label: getString('Gen_All_Devices'), icon: 'fa-laptop' },
|
||||||
|
{ status: 'network_devices', color: 'bg-aqua', label: getString('Network_Devices'), icon: 'fa-sitemap fa-rotate-270' }
|
||||||
];
|
];
|
||||||
|
|
||||||
// Initialize an empty array to store the final objects
|
// Initialize an empty array to store the final objects
|
||||||
@@ -300,12 +299,6 @@ function processDeviceTotals(devicesData) {
|
|||||||
});
|
});
|
||||||
|
|
||||||
// Render info boxes/tile cards
|
// Render info boxes/tile cards
|
||||||
console.log(getSetting('UI_hide_empty'));
|
|
||||||
|
|
||||||
console.log(dataArray);
|
|
||||||
console.log(devicesData);
|
|
||||||
|
|
||||||
|
|
||||||
renderInfoboxes(dataArray);
|
renderInfoboxes(dataArray);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -357,8 +350,6 @@ function initFilters() {
|
|||||||
// Clear any existing filters in the DOM
|
// Clear any existing filters in the DOM
|
||||||
$('#columnFilters').empty();
|
$('#columnFilters').empty();
|
||||||
|
|
||||||
console.log(displayedFilters);
|
|
||||||
|
|
||||||
// Ensure displayedFilters is an array and not empty
|
// Ensure displayedFilters is an array and not empty
|
||||||
if (Array.isArray(displayedFilters) && displayedFilters.length > 0) {
|
if (Array.isArray(displayedFilters) && displayedFilters.length > 0) {
|
||||||
$('#columnFiltersWrap').removeClass("hidden");
|
$('#columnFiltersWrap').removeClass("hidden");
|
||||||
@@ -512,34 +503,36 @@ function collectFilters() {
|
|||||||
function mapColumnIndexToFieldName(index, tableColumnVisible) {
|
function mapColumnIndexToFieldName(index, tableColumnVisible) {
|
||||||
// the order is important, don't change it!
|
// the order is important, don't change it!
|
||||||
const columnNames = [
|
const columnNames = [
|
||||||
"devName",
|
"devName", // 0
|
||||||
"devOwner",
|
"devOwner", // 1
|
||||||
"devType",
|
"devType", // 2
|
||||||
"devIcon",
|
"devIcon", // 3
|
||||||
"devFavorite",
|
"devFavorite", // 4
|
||||||
"devGroup",
|
"devGroup", // 5
|
||||||
"devFirstConnection",
|
"devFirstConnection", // 6
|
||||||
"devLastConnection",
|
"devLastConnection", // 7
|
||||||
"devLastIP",
|
"devLastIP", // 8
|
||||||
"devIsRandomMac", // resolved on the fly
|
"devIsRandomMac", // 9 resolved on the fly
|
||||||
"devStatus", // resolved on the fly
|
"devStatus", // 10 resolved on the fly
|
||||||
"devMac",
|
"devMac", // 11
|
||||||
"devIpLong", //formatIPlong(device.devLastIP) || "", // IP orderable
|
"devIpLong", // 12 formatIPlong(device.devLastIP) || "", // IP orderable
|
||||||
"rowid",
|
"rowid", // 13
|
||||||
"devParentMAC",
|
"devParentMAC", // 14
|
||||||
"devParentChildrenCount", // resolved on the fly
|
"devParentChildrenCount", // 15 resolved on the fly
|
||||||
"devLocation",
|
"devLocation", // 16
|
||||||
"devVendor",
|
"devVendor", // 17
|
||||||
"devParentPort",
|
"devParentPort", // 18
|
||||||
"devGUID",
|
"devGUID", // 19
|
||||||
"devSyncHubNode",
|
"devSyncHubNode", // 20
|
||||||
"devSite",
|
"devSite", // 21
|
||||||
"devSSID",
|
"devSSID", // 22
|
||||||
"devSourcePlugin",
|
"devSourcePlugin", // 23
|
||||||
"devPresentLastScan",
|
"devPresentLastScan", // 24
|
||||||
"devAlertDown",
|
"devAlertDown", // 25
|
||||||
"devCustomProps",
|
"devCustomProps", // 26
|
||||||
"devFQDN"
|
"devFQDN", // 27
|
||||||
|
"devParentRelType", // 28
|
||||||
|
"devReqNicsOnline" // 29
|
||||||
];
|
];
|
||||||
|
|
||||||
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
|
// console.log("OrderBy: " + columnNames[tableColumnOrder[index]]);
|
||||||
@@ -562,15 +555,17 @@ function initializeDatatable (status) {
|
|||||||
|
|
||||||
// Define color & title for the status selected
|
// Define color & title for the status selected
|
||||||
switch (deviceStatus) {
|
switch (deviceStatus) {
|
||||||
case 'my_devices': tableTitle = getString('Device_Shortcut_AllDevices'); color = 'aqua'; break;
|
case 'my_devices': tableTitle = getString('Device_Shortcut_AllDevices'); color = 'aqua'; break;
|
||||||
case 'connected': tableTitle = getString('Device_Shortcut_Connected'); color = 'green'; break;
|
case 'connected': tableTitle = getString('Device_Shortcut_Connected'); color = 'green'; break;
|
||||||
case 'all': tableTitle = getString('Gen_All_Devices'); color = 'aqua'; break;
|
case 'all': tableTitle = getString('Gen_All_Devices'); color = 'aqua'; break;
|
||||||
case 'favorites': tableTitle = getString('Device_Shortcut_Favorites'); color = 'yellow'; break;
|
case 'favorites': tableTitle = getString('Device_Shortcut_Favorites'); color = 'yellow'; break;
|
||||||
case 'new': tableTitle = getString('Device_Shortcut_NewDevices'); color = 'yellow'; break;
|
case 'new': tableTitle = getString('Device_Shortcut_NewDevices'); color = 'yellow'; break;
|
||||||
case 'down': tableTitle = getString('Device_Shortcut_DownOnly'); color = 'red'; break;
|
case 'down': tableTitle = getString('Device_Shortcut_DownOnly'); color = 'red'; break;
|
||||||
case 'archived': tableTitle = getString('Device_Shortcut_Archived'); color = 'gray'; break;
|
case 'archived': tableTitle = getString('Device_Shortcut_Archived'); color = 'gray'; break;
|
||||||
case 'offline': tableTitle = getString('Gen_Offline'); color = 'gray'; break;
|
case 'offline': tableTitle = getString('Gen_Offline'); color = 'gray'; break;
|
||||||
default: tableTitle = getString('Device_Shortcut_Devices'); color = 'gray'; break;
|
case 'all_devices': tableTitle = getString('Gen_All_Devices'); color = 'gray'; break;
|
||||||
|
case 'network_devices': tableTitle = getString('Network_Devices'); color = 'aqua'; break;
|
||||||
|
default: tableTitle = getString('Device_Shortcut_Devices'); color = 'gray'; break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set title and color
|
// Set title and color
|
||||||
@@ -599,7 +594,6 @@ function initializeDatatable (status) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo: dynamically filter based on status
|
|
||||||
var table = $('#tableDevices').DataTable({
|
var table = $('#tableDevices').DataTable({
|
||||||
"serverSide": true,
|
"serverSide": true,
|
||||||
"processing": true,
|
"processing": true,
|
||||||
@@ -650,6 +644,8 @@ function initializeDatatable (status) {
|
|||||||
devIpLong
|
devIpLong
|
||||||
devCustomProps
|
devCustomProps
|
||||||
devFQDN
|
devFQDN
|
||||||
|
devParentRelType
|
||||||
|
devReqNicsOnline
|
||||||
}
|
}
|
||||||
count
|
count
|
||||||
}
|
}
|
||||||
@@ -688,8 +684,6 @@ function initializeDatatable (status) {
|
|||||||
return JSON.stringify(query); // Send the JSON request
|
return JSON.stringify(query); // Send the JSON request
|
||||||
},
|
},
|
||||||
"dataSrc": function (json) {
|
"dataSrc": function (json) {
|
||||||
console.log(json);
|
|
||||||
|
|
||||||
// Set the total number of records for pagination
|
// Set the total number of records for pagination
|
||||||
json.recordsTotal = json.devices.count || 0;
|
json.recordsTotal = json.devices.count || 0;
|
||||||
json.recordsFiltered = json.devices.count || 0;
|
json.recordsFiltered = json.devices.count || 0;
|
||||||
@@ -725,7 +719,9 @@ function initializeDatatable (status) {
|
|||||||
device.devPresentLastScan || "",
|
device.devPresentLastScan || "",
|
||||||
device.devAlertDown || "",
|
device.devAlertDown || "",
|
||||||
device.devCustomProps || "",
|
device.devCustomProps || "",
|
||||||
device.devFQDN || ""
|
device.devFQDN || "",
|
||||||
|
device.devParentRelType || "",
|
||||||
|
device.devReqNicsOnline || 0
|
||||||
];
|
];
|
||||||
|
|
||||||
const newRow = [];
|
const newRow = [];
|
||||||
@@ -773,14 +769,31 @@ function initializeDatatable (status) {
|
|||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
// console.log(cellData)
|
// console.log(cellData)
|
||||||
$(td).html ('<b class="anonymizeDev"><a href="deviceDetails.php?mac='+ rowData[mapIndx(11)] +'" class="">'+ cellData +'</a></b>');
|
$(td).html (
|
||||||
|
`<b class="anonymizeDev "
|
||||||
|
>
|
||||||
|
<a href="deviceDetails.php?mac=${rowData[mapIndx(11)]}" class="hover-node-info"
|
||||||
|
data-name="${cellData}"
|
||||||
|
data-ip="${rowData[mapIndx(8)]}"
|
||||||
|
data-mac="${rowData[mapIndx(11)]}"
|
||||||
|
data-vendor="${rowData[mapIndx(17)]}"
|
||||||
|
data-type="${rowData[mapIndx(2)]}"
|
||||||
|
data-firstseen="${rowData[mapIndx(6)]}"
|
||||||
|
data-lastseen="${rowData[mapIndx(7)]}"
|
||||||
|
data-relationship="${rowData[mapIndx(28)]}"
|
||||||
|
data-status="${rowData[mapIndx(10)]}"
|
||||||
|
data-present="${rowData[mapIndx(24)]}"
|
||||||
|
data-alert="${rowData[mapIndx(25)]}"
|
||||||
|
data-icon="${rowData[mapIndx(3)]}">
|
||||||
|
${cellData}
|
||||||
|
</a>
|
||||||
|
</b>`
|
||||||
|
);
|
||||||
} },
|
} },
|
||||||
|
|
||||||
// Connected Devices
|
// Connected Devices
|
||||||
{targets: [mapIndx(15)],
|
{targets: [mapIndx(15)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
|
||||||
|
|
||||||
// check if this is a network device
|
// check if this is a network device
|
||||||
if(getSetting("NETWORK_DEVICE_TYPES").includes(`'${rowData[mapIndx(2)]}'`) )
|
if(getSetting("NETWORK_DEVICE_TYPES").includes(`'${rowData[mapIndx(2)]}'`) )
|
||||||
{
|
{
|
||||||
@@ -822,7 +835,7 @@ function initializeDatatable (status) {
|
|||||||
<a href="http://${cellData}" class="pointer" target="_blank">
|
<a href="http://${cellData}" class="pointer" target="_blank">
|
||||||
${cellData}
|
${cellData}
|
||||||
</a>
|
</a>
|
||||||
<span class="alignRight">
|
<span class="alignRight lockIcon">
|
||||||
<a href="https://${cellData}" class="pointer" target="_blank">
|
<a href="https://${cellData}" class="pointer" target="_blank">
|
||||||
<i class="fa fa-lock "></i>
|
<i class="fa fa-lock "></i>
|
||||||
</a>
|
</a>
|
||||||
@@ -886,6 +899,28 @@ function initializeDatatable (status) {
|
|||||||
}
|
}
|
||||||
} },
|
} },
|
||||||
|
|
||||||
|
// Parent Mac
|
||||||
|
{targets: [mapIndx(14)],
|
||||||
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
|
if (!isValidMac(cellData)) {
|
||||||
|
$(td).html('');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const data = {
|
||||||
|
id: cellData, // MAC address
|
||||||
|
text: cellData // Optional display text (you could use a name or something else)
|
||||||
|
};
|
||||||
|
|
||||||
|
spanWrap = $(`<span class="custom-badge text-white"></span>`)
|
||||||
|
|
||||||
|
$(td).html(spanWrap);
|
||||||
|
|
||||||
|
const chipHtml = renderDeviceLink(data, spanWrap, true); // pass the td as container
|
||||||
|
|
||||||
|
$(spanWrap).append(chipHtml);
|
||||||
|
}
|
||||||
|
},
|
||||||
// Status color
|
// Status color
|
||||||
{targets: [mapIndx(10)],
|
{targets: [mapIndx(10)],
|
||||||
'createdCell': function (td, cellData, rowData, row, col) {
|
'createdCell': function (td, cellData, rowData, row, col) {
|
||||||
@@ -893,25 +928,14 @@ function initializeDatatable (status) {
|
|||||||
tmp_devPresentLastScan = rowData[mapIndx(24)]
|
tmp_devPresentLastScan = rowData[mapIndx(24)]
|
||||||
tmp_devAlertDown = rowData[mapIndx(25)]
|
tmp_devAlertDown = rowData[mapIndx(25)]
|
||||||
|
|
||||||
if (tmp_devPresentLastScan == 1)
|
const badge = getStatusBadgeParts(
|
||||||
{
|
rowData[mapIndx(24)], // tmp_devPresentLastScan
|
||||||
css = "green text-white statusOnline"
|
rowData[mapIndx(25)], // tmp_devAlertDown
|
||||||
icon = '<i class="fa-solid fa-plug"></i>'
|
rowData[mapIndx(11)], // MAC
|
||||||
} else if (tmp_devPresentLastScan != 1 && tmp_devAlertDown == 1)
|
cellData // optional text
|
||||||
{
|
);
|
||||||
css = "red text-white statusDown"
|
|
||||||
icon = '<i class="fa-solid fa-triangle-exclamation"></i>'
|
|
||||||
} else if(tmp_devPresentLastScan != 1)
|
|
||||||
{
|
|
||||||
css = "gray text-white statusOffline"
|
|
||||||
icon = '<i class="fa-solid fa-xmark"></i>'
|
|
||||||
} else
|
|
||||||
{
|
|
||||||
css = "gray text-white statusUnknown"
|
|
||||||
icon = '<i class="fa-solid fa-question"></i>'
|
|
||||||
}
|
|
||||||
|
|
||||||
$(td).html (`<a href="deviceDetails.php?mac=${rowData[mapIndx(11)]}" class="badge bg-${css}">${icon} ${cellData.replace('-', '')}</a>`);
|
$(td).html (`<a href="${badge.url}" class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.text}</a>`);
|
||||||
} },
|
} },
|
||||||
],
|
],
|
||||||
|
|
||||||
@@ -970,7 +994,7 @@ function initializeDatatable (status) {
|
|||||||
}, debounceTime);
|
}, debounceTime);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
initHoverNodeInfo();
|
||||||
hideSpinner();
|
hideSpinner();
|
||||||
|
|
||||||
},
|
},
|
||||||
@@ -981,8 +1005,6 @@ function initializeDatatable (status) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -1035,40 +1057,24 @@ function multiEditDevices()
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Function collects shown devices from the DataTable
|
// Function collects shown devices from the DataTable
|
||||||
function getMacsOfShownDevices() {
|
function getMacsOfShownDevices() {
|
||||||
rows = $('#tableDevices')[0].rows;
|
var table = $('#tableDevices').DataTable();
|
||||||
macs = [];
|
|
||||||
|
|
||||||
// var devicesDataTableData = $('#tableDevices').dataTable().fnGetData();
|
var macs = [];
|
||||||
var devicesDataTableData = $('#tableDevices').DataTable().rows({ selected: false, page: 'current' }).data().toArray();
|
|
||||||
|
|
||||||
console.log(devicesDataTableData);
|
// Get all row indexes on current page, in display order
|
||||||
|
var allIndexes = table.rows({ page: 'current' }).indexes();
|
||||||
|
|
||||||
var selectedDevices = [];
|
allIndexes.each(function(idx) {
|
||||||
|
var rowData = table.row(idx).data();
|
||||||
// first row is the heading, skip
|
if (rowData) {
|
||||||
for (var i = 1; i < rows.length; i++) {
|
macs.push(rowData[mapIndx(11)]); // mapIndx(11) == MAC column
|
||||||
var rowIndex = rows[i]._DT_RowIndex;
|
|
||||||
|
|
||||||
// Ensure the rowIndex is valid and within bounds of devicesDataTableData
|
|
||||||
if (rowIndex >= 0 && rowIndex < devicesDataTableData.length) {
|
|
||||||
selectedDevices.push(devicesDataTableData[rowIndex]);
|
|
||||||
} else {
|
|
||||||
console.log(`Invalid rowIndex: ${rowIndex} at row ${i}`);
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
for (var j = 0; j < selectedDevices.length; j++) {
|
|
||||||
// Ensure that selectedDevices[j] is not undefined
|
|
||||||
if (selectedDevices[j]) {
|
|
||||||
macs.push(selectedDevices[j][mapIndx(11)]); // mapIndx(11) == MAC
|
|
||||||
} else {
|
|
||||||
console.log(`selectedDevices[${j}] is undefined`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return macs;
|
return macs;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Handle custom actions/properties on a device
|
// Handle custom actions/properties on a device
|
||||||
function renderCustomProps(custProps, mac) {
|
function renderCustomProps(custProps, mac) {
|
||||||
|
|||||||
@@ -2,6 +2,10 @@
|
|||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
showSpinner();
|
||||||
|
</script>
|
||||||
|
|
||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
|
|
||||||
<!-- Page ------------------------------------------------------------------ -->
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
@@ -67,7 +71,7 @@
|
|||||||
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3>
|
<div class="inner"> <h3 id="eventsNewDevices"> -- </h3>
|
||||||
<p class="infobox_label"><?= lang('Events_Shortcut_NewDevices');?></p>
|
<p class="infobox_label"><?= lang('Events_Shortcut_NewDevices');?></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon"> <i class="ion ion-plus-round text-yellow-40"></i> </div>
|
<div class="icon"> <i class="fa-solid fa-circle-plus text-yellow-40"></i> </div>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
@@ -238,7 +242,7 @@ function initializeDatatable () {
|
|||||||
// Processing
|
// Processing
|
||||||
'processing' : true,
|
'processing' : true,
|
||||||
'language' : {
|
'language' : {
|
||||||
processing: '<table><td width="130px" align="middle"><?= lang("Events_Loading");?></td><td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td></table>',
|
processing: '<table><td width="130px" align="middle"><?= lang("Events_Loading");?></td><td><i class="fa-solid fa-spinner fa-spin-pulse"></i></td></table>',
|
||||||
emptyTable: 'No data',
|
emptyTable: 'No data',
|
||||||
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
"lengthMenu": "<?= lang('Events_Tablelenght');?>",
|
||||||
"search": "<?= lang('Events_Searchbox');?>: ",
|
"search": "<?= lang('Events_Searchbox');?>: ",
|
||||||
@@ -247,6 +251,9 @@ function initializeDatatable () {
|
|||||||
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
"previous": "<?= lang('Events_Table_nav_prev');?>"
|
||||||
},
|
},
|
||||||
"info": "<?= lang('Events_Table_info');?>",
|
"info": "<?= lang('Events_Table_info');?>",
|
||||||
|
},
|
||||||
|
initComplete: function(settings, json) {
|
||||||
|
hideSpinner(); // Called after the DataTable is fully initialized
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
"display": "standalone",
|
"display": "standalone",
|
||||||
"icons": [
|
"icons": [
|
||||||
{
|
{
|
||||||
"src": "",
|
"src": "/img/NetAlertX_logo.png",
|
||||||
"sizes": "180x180",
|
"sizes": "180x180",
|
||||||
"type": "image/png"
|
"type": "image/png"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -99,18 +99,6 @@ if (isset ($_SESSION["login"]) == FALSE || $_SESSION["login"] != 1)
|
|||||||
|
|
||||||
<!-- Favicon -->
|
<!-- Favicon -->
|
||||||
<link id="favicon" rel="icon" type="image/x-icon" href="img/NetAlertX_logo.png">
|
<link id="favicon" rel="icon" type="image/x-icon" href="img/NetAlertX_logo.png">
|
||||||
|
|
||||||
<!-- Dark-Mode Patch -->
|
|
||||||
<?php
|
|
||||||
switch ($UI_THEME) {
|
|
||||||
case "Dark":
|
|
||||||
echo '<link rel="stylesheet" href="css/dark-patch.css">';
|
|
||||||
break;
|
|
||||||
case "System":
|
|
||||||
echo '<link rel="stylesheet" href="css/system-dark-patch.css">';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
<link rel="stylesheet" href="/css/offline-font.css">
|
<link rel="stylesheet" href="/css/offline-font.css">
|
||||||
</head>
|
</head>
|
||||||
<body class="hold-transition login-page col-sm-12 col-sx-12">
|
<body class="hold-transition login-page col-sm-12 col-sx-12">
|
||||||
|
|||||||
@@ -362,18 +362,64 @@ function getLangCode() {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// String utilities
|
// String utilities
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
function localizeTimestamp(input) {
|
||||||
|
let tz = getSetting("TIMEZONE") || 'Europe/Berlin';
|
||||||
|
|
||||||
|
// Convert to string and trim
|
||||||
|
input = String(input || '').trim();
|
||||||
|
|
||||||
function localizeTimestamp(result)
|
// Normalize multiple spaces and remove commas
|
||||||
{
|
const cleaned = input.replace(',', ' ').replace(/\s+/g, ' ');
|
||||||
// contains TZ in format Europe/Berlin
|
|
||||||
tz = getSetting("TIMEZONE")
|
|
||||||
|
|
||||||
// set default if not available or app still loading
|
// DD/MM/YYYY format check
|
||||||
tz == "" ? tz = 'Europe/Berlin' : tz = tz;
|
const dateTimeParts = cleaned.split(' ');
|
||||||
|
if (dateTimeParts.length >= 2 && dateTimeParts[0].includes('/')) {
|
||||||
|
const [day, month, year] = dateTimeParts[0].split('/');
|
||||||
|
const timePart = dateTimeParts[1];
|
||||||
|
|
||||||
const date = new Date(result); // Assumes result is a timestamp or ISO string
|
if (day && month && year && timePart) {
|
||||||
const formatter = new Intl.DateTimeFormat('default', {
|
const isoString = `${year}-${month}-${day}T${timePart.length === 5 ? timePart + ':00' : timePart}`;
|
||||||
|
const date = new Date(isoString);
|
||||||
|
if (!isFinite(date)) return 'b-';
|
||||||
|
|
||||||
|
return new Intl.DateTimeFormat('default', {
|
||||||
|
timeZone: tz,
|
||||||
|
year: 'numeric',
|
||||||
|
month: '2-digit',
|
||||||
|
day: '2-digit',
|
||||||
|
hour: '2-digit',
|
||||||
|
minute: '2-digit',
|
||||||
|
second: '2-digit',
|
||||||
|
hour12: false
|
||||||
|
}).format(date);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ISO style YYYY-MM-DD HH:mm(:ss)?
|
||||||
|
const match = cleaned.match(/^(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2})(:\d{2})?$/);
|
||||||
|
if (match) {
|
||||||
|
let iso = `${match[1]}T${match[2]}${match[3] || ':00'}`;
|
||||||
|
|
||||||
|
const date = new Date(iso);
|
||||||
|
if (!isFinite(date)) return 'c-';
|
||||||
|
|
||||||
|
return new Intl.DateTimeFormat('default', {
|
||||||
|
timeZone: tz,
|
||||||
|
year: 'numeric',
|
||||||
|
month: '2-digit',
|
||||||
|
day: '2-digit',
|
||||||
|
hour: '2-digit',
|
||||||
|
minute: '2-digit',
|
||||||
|
second: '2-digit',
|
||||||
|
hour12: false
|
||||||
|
}).format(date);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fallback: try to parse any other string input
|
||||||
|
const date = new Date(input);
|
||||||
|
if (!isFinite(date)) return 'Failed conversion: ' + input;
|
||||||
|
|
||||||
|
return new Intl.DateTimeFormat('default', {
|
||||||
timeZone: tz,
|
timeZone: tz,
|
||||||
year: 'numeric',
|
year: 'numeric',
|
||||||
month: '2-digit',
|
month: '2-digit',
|
||||||
@@ -381,12 +427,12 @@ function localizeTimestamp(result)
|
|||||||
hour: '2-digit',
|
hour: '2-digit',
|
||||||
minute: '2-digit',
|
minute: '2-digit',
|
||||||
second: '2-digit',
|
second: '2-digit',
|
||||||
hour12: false // change to true if you want AM/PM format
|
hour12: false
|
||||||
});
|
}).format(date);
|
||||||
|
|
||||||
return formatter.format(date);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------
|
// ----------------------------------------------------
|
||||||
/**
|
/**
|
||||||
* Replaces double quotes within single-quoted strings, then converts all single quotes to double quotes,
|
* Replaces double quotes within single-quoted strings, then converts all single quotes to double quotes,
|
||||||
@@ -986,6 +1032,7 @@ function getDevDataByMac(macAddress, dbColumn) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.error("⚠ Device with MAC not found:" + macAddress)
|
||||||
return "Unknown"; // Return a default value if MAC address is not found
|
return "Unknown"; // Return a default value if MAC address is not found
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -993,11 +1040,8 @@ function getDevDataByMac(macAddress, dbColumn) {
|
|||||||
// Cache the devices as one JSON
|
// Cache the devices as one JSON
|
||||||
function cacheDevices()
|
function cacheDevices()
|
||||||
{
|
{
|
||||||
|
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
|
|
||||||
// if(!getCache('completedCalls').includes('cacheDevices'))
|
|
||||||
// {
|
|
||||||
$.get('php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(data) {
|
$.get('php/server/query_json.php', { file: 'table_devices.json', nocache: Date.now() }, function(data) {
|
||||||
|
|
||||||
// console.log(data)
|
// console.log(data)
|
||||||
@@ -1021,8 +1065,7 @@ function cacheDevices()
|
|||||||
// console.log(getCache('devicesListAll_JSON'))
|
// console.log(getCache('devicesListAll_JSON'))
|
||||||
}).then(() => handleSuccess('cacheDevices', resolve())).catch(() => handleFailure('cacheDevices', reject("cacheDevices already completed"))); // handle AJAX synchronization
|
}).then(() => handleSuccess('cacheDevices', resolve())).catch(() => handleFailure('cacheDevices', reject("cacheDevices already completed"))); // handle AJAX synchronization
|
||||||
}
|
}
|
||||||
// }
|
);
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var devicesListAll_JSON = []; // this will contain a list off all devices
|
var devicesListAll_JSON = []; // this will contain a list off all devices
|
||||||
@@ -1063,44 +1106,99 @@ function getGuid() {
|
|||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Loading Spinner overlay
|
// Loading Spinner overlay
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
spinnerHtml = `
|
|
||||||
<!-- spinner -->
|
|
||||||
<div id="loadingSpinner" style="display: block">
|
|
||||||
<div class="pa_semitransparent-panel"></div>
|
|
||||||
<div class="panel panel-default pa_spinner">
|
|
||||||
<table>
|
|
||||||
<td width="130px" align="middle">_text_</td>
|
|
||||||
<td><i class="ion ion-ios-loop-strong fa-spin fa-2x fa-fw"></td>
|
|
||||||
</table>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
`
|
|
||||||
|
|
||||||
function showSpinner(stringKey='Loading')
|
let spinnerTimeout = null;
|
||||||
{
|
let animationTime = 300
|
||||||
|
|
||||||
if(stringKey == "")
|
function showSpinner(stringKey = 'Loading') {
|
||||||
{
|
const text = isEmpty(stringKey) ? "Loading" : getString(stringKey || "Loading");
|
||||||
text = ''
|
const spinner = $("#loadingSpinner");
|
||||||
} else
|
const target = $(".spinnerTarget").first(); // Only use the first one if multiple exist
|
||||||
{
|
|
||||||
text = getString(stringKey)
|
$("#loadingSpinnerText").text(text);
|
||||||
|
|
||||||
|
if (target.length) {
|
||||||
|
// Position relative to target
|
||||||
|
const offset = target.offset();
|
||||||
|
const width = target.outerWidth();
|
||||||
|
const height = target.outerHeight();
|
||||||
|
|
||||||
|
spinner.css({
|
||||||
|
position: "absolute",
|
||||||
|
top: offset.top,
|
||||||
|
left: offset.left,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
zIndex: 800
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fullscreen fallback
|
||||||
|
spinner.css({
|
||||||
|
position: "fixed",
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: "100%",
|
||||||
|
height: "100%",
|
||||||
|
zIndex: 800
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
text = isEmpty(text) ? "Loading" : text;
|
requestAnimationFrame(() => {
|
||||||
|
spinner.addClass("visible");
|
||||||
if($("#loadingSpinner").length)
|
spinner.fadeIn(animationTime);
|
||||||
{
|
});
|
||||||
$("#loadingSpinner").show();
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
$(".wrapper").append(spinnerHtml.replace('_text_',text))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
function hideSpinner()
|
function hideSpinner() {
|
||||||
{
|
clearTimeout(spinnerTimeout);
|
||||||
$("#loadingSpinner").hide()
|
const spinner = $("#loadingSpinner");
|
||||||
|
|
||||||
|
if (!spinner.length) return;
|
||||||
|
|
||||||
|
const target = $(".spinnerTarget").first();
|
||||||
|
|
||||||
|
if (target.length) {
|
||||||
|
// Lock position to target
|
||||||
|
const offset = target.offset();
|
||||||
|
const width = target.outerWidth();
|
||||||
|
const height = target.outerHeight();
|
||||||
|
|
||||||
|
spinner.css({
|
||||||
|
position: "absolute",
|
||||||
|
top: offset.top,
|
||||||
|
left: offset.left,
|
||||||
|
width: width,
|
||||||
|
height: height,
|
||||||
|
zIndex: 800
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
// Fullscreen fallback
|
||||||
|
spinner.css({
|
||||||
|
position: "fixed",
|
||||||
|
top: 0,
|
||||||
|
left: 0,
|
||||||
|
width: "100%",
|
||||||
|
height: "100%",
|
||||||
|
zIndex: 800
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Trigger fade-out and only remove styles AFTER fade completes AND display is none
|
||||||
|
spinner.removeClass("visible").fadeOut(animationTime, () => {
|
||||||
|
// Ensure it's really hidden before resetting styles
|
||||||
|
spinner.css({
|
||||||
|
display: "none"
|
||||||
|
});
|
||||||
|
|
||||||
|
spinner.css({
|
||||||
|
position: "",
|
||||||
|
top: "",
|
||||||
|
left: "",
|
||||||
|
width: "",
|
||||||
|
height: "",
|
||||||
|
zIndex: ""
|
||||||
|
});
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -161,6 +161,91 @@ function showModalFieldInput(
|
|||||||
$(`#${prefix}`).modal("show");
|
$(`#${prefix}`).modal("show");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
function showModalPopupForm(
|
||||||
|
title,
|
||||||
|
message,
|
||||||
|
btnCancel = getString("Gen_Cancel"),
|
||||||
|
btnOK = getString("Gen_Okay"),
|
||||||
|
curValue = "",
|
||||||
|
callbackFunction = null,
|
||||||
|
triggeredBy = null,
|
||||||
|
popupFormJson = null,
|
||||||
|
parentSettingKey = null
|
||||||
|
) {
|
||||||
|
// set captions
|
||||||
|
prefix = "modal-form";
|
||||||
|
console.log(popupFormJson);
|
||||||
|
|
||||||
|
$(`#${prefix}-title`).html(title);
|
||||||
|
$(`#${prefix}-message`).html(message);
|
||||||
|
$(`#${prefix}-cancel`).html(btnCancel);
|
||||||
|
$(`#${prefix}-OK`).html(btnOK);
|
||||||
|
|
||||||
|
if (callbackFunction != null) {
|
||||||
|
modalCallbackFunction = callbackFunction;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (triggeredBy != null) {
|
||||||
|
$('#'+prefix).attr("data-myparam-triggered-by", triggeredBy)
|
||||||
|
}
|
||||||
|
|
||||||
|
outputHtml = "";
|
||||||
|
|
||||||
|
if (Array.isArray(popupFormJson)) {
|
||||||
|
popupFormJson.forEach((field, index) => {
|
||||||
|
// You'll need to define these or map them from `field`
|
||||||
|
const setName = field.name?.find(n => n.language_code === "en_us")?.string || setKey;
|
||||||
|
const labelClasses = "col-sm-2"; // example, or from your obj.labelClasses
|
||||||
|
const inputClasses = "col-sm-10"; // example, or from your obj.inputClasses
|
||||||
|
const fieldData = field.default_value ?? "";
|
||||||
|
const fieldOptionsOverride = field.type?.elements[0]?.elementOptions || [];
|
||||||
|
|
||||||
|
const setKey = field.function || `field_${index}`;
|
||||||
|
const setValue = field.default_value ?? "";
|
||||||
|
const setType = JSON.stringify(field.type);
|
||||||
|
const setEvents = field.events || []; // default to empty array if missing
|
||||||
|
|
||||||
|
const setObj = { setKey, setValue, setType, setEvents };
|
||||||
|
|
||||||
|
// Generate the input field HTML
|
||||||
|
const inputFormHtml = `
|
||||||
|
<div class="form-group col-xs-12">
|
||||||
|
<label id="${setKey}_label" class="${labelClasses}"> ${setName}
|
||||||
|
<i my-set-key="${parentSettingKey}_popupform_${setKey}"
|
||||||
|
title="${getString("Settings_Show_Description")}"
|
||||||
|
class="fa fa-circle-info pointer helpIconSmallTopRight"
|
||||||
|
onclick="showDescriptionPopup(this)">
|
||||||
|
</i>
|
||||||
|
</label>
|
||||||
|
<div class="${inputClasses}">
|
||||||
|
${generateFormHtml(
|
||||||
|
null, // settingsData only required for datatables
|
||||||
|
setObj,
|
||||||
|
fieldData.toString(),
|
||||||
|
fieldOptionsOverride,
|
||||||
|
null
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
// Append to result
|
||||||
|
outputHtml += inputFormHtml;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
$(`#modal-form-plc`).html(outputHtml);
|
||||||
|
|
||||||
|
// $(`#${prefix}-field`).val(curValue);
|
||||||
|
// setTimeout(function () {
|
||||||
|
// $(`#${prefix}-field`).focus();
|
||||||
|
// }, 500);
|
||||||
|
|
||||||
|
// Show modal
|
||||||
|
$(`#${prefix}`).modal("show");
|
||||||
|
}
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
function modalDefaultOK() {
|
function modalDefaultOK() {
|
||||||
// Hide modal
|
// Hide modal
|
||||||
@@ -224,7 +309,7 @@ function modalWarningOK() {
|
|||||||
} else if (typeof modalCallbackFunction === "string" && typeof window[modalCallbackFunction] === "function") {
|
} else if (typeof modalCallbackFunction === "string" && typeof window[modalCallbackFunction] === "function") {
|
||||||
window[modalCallbackFunction](); // Call via window
|
window[modalCallbackFunction](); // Call via window
|
||||||
} else {
|
} else {
|
||||||
console.error("Invalid callback function");
|
console.error("Invalid callback function: " + modalCallbackFunction);
|
||||||
}
|
}
|
||||||
}, 100);
|
}, 100);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,6 +67,15 @@ function getPluginConfig(pluginsData, prefix) {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------
|
||||||
|
// Show the description of a setting
|
||||||
|
function showDescriptionPopup(e) {
|
||||||
|
|
||||||
|
console.log($(e).attr("my-set-key"));
|
||||||
|
|
||||||
|
showModalOK("Info", getString($(e).attr("my-set-key") + '_description'))
|
||||||
|
}
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Generate plugin HTML card based on prefixes in an array
|
// Generate plugin HTML card based on prefixes in an array
|
||||||
function pluginCards(prefixesOfEnabledPlugins, includeSettings) {
|
function pluginCards(prefixesOfEnabledPlugins, includeSettings) {
|
||||||
@@ -299,6 +308,45 @@ function removeDataTableRow(el) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// Add item via pop up form dialog
|
||||||
|
function addViaPopupForm(element) {
|
||||||
|
console.log(element)
|
||||||
|
|
||||||
|
const fromId = $(element).attr("my-input-from");
|
||||||
|
const toId = $(element).attr("my-input-to");
|
||||||
|
const curValue = $(`#${fromId}`).val();
|
||||||
|
const triggeredBy = $(element).attr("id");
|
||||||
|
const parsed = JSON.parse(atob($(element).data("elementoptionsbase64")));
|
||||||
|
const popupFormJson = parsed.find(obj => "popupForm" in obj)?.popupForm ?? null;
|
||||||
|
|
||||||
|
console.log(`fromId | toId | triggeredBy | curValue: ${fromId} | ${toId} | ${triggeredBy} | ${curValue}`);
|
||||||
|
|
||||||
|
showModalPopupForm(
|
||||||
|
`<i class="fa fa-pen-to-square"></i> ${getString(
|
||||||
|
"Gen_Update_Value"
|
||||||
|
)}`, // title
|
||||||
|
getString("settings_update_item_warning"), // message
|
||||||
|
getString("Gen_Cancel"), // btnCancel
|
||||||
|
getString("Gen_Add"), // btnOK
|
||||||
|
curValue, // curValue
|
||||||
|
null, // callbackFunction
|
||||||
|
triggeredBy, // triggeredBy
|
||||||
|
popupFormJson, // popupform
|
||||||
|
toId // parentSettingKey
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
// ---------------------------------------------------------
|
||||||
|
// Add item to list via popup form
|
||||||
|
function addViaPopupFormToList(element, clearInput = true) {
|
||||||
|
|
||||||
|
|
||||||
|
// flag something changes to prevent navigating from page
|
||||||
|
settingsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ---------------------------------------------------------
|
// ---------------------------------------------------------
|
||||||
// Add item to list
|
// Add item to list
|
||||||
function addList(element, clearInput = true) {
|
function addList(element, clearInput = true) {
|
||||||
@@ -363,8 +411,6 @@ function removeAllOptions(element) {
|
|||||||
function selectAll(element) {
|
function selectAll(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
|
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
// Iterate over each option within the select element
|
// Iterate over each option within the select element
|
||||||
@@ -381,8 +427,6 @@ function selectAll(element) {
|
|||||||
// UN-Select All
|
// UN-Select All
|
||||||
function unselectAll(element) {
|
function unselectAll(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
// Iterate over each option within the select element
|
// Iterate over each option within the select element
|
||||||
@@ -399,8 +443,7 @@ function unselectAll(element) {
|
|||||||
// Trigger change to open up the dropdown filed
|
// Trigger change to open up the dropdown filed
|
||||||
function selectChange(element) {
|
function selectChange(element) {
|
||||||
settingsChanged();
|
settingsChanged();
|
||||||
// Get the <select> element with the class 'deviceSelector'
|
|
||||||
// var selectElement = $('.deviceSelector select');
|
|
||||||
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
var selectElement = $(`#${$(element).attr("my-input-to")}`);
|
||||||
|
|
||||||
selectElement.parent().find("input").focus().click();
|
selectElement.parent().find("input").focus().click();
|
||||||
@@ -624,10 +667,9 @@ function generateOptionsOrSetOptions(
|
|||||||
// console.log( setKey);
|
// console.log( setKey);
|
||||||
|
|
||||||
// NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
|
// NOTE {value} options to replace with a setting or SQL value are handled in the cacheSettings() function
|
||||||
|
// obj.push({ id: item, name: item })
|
||||||
options = arrayToObject(createArray(overrideOptions ? overrideOptions : getSettingOptions(setKey)))
|
options = arrayToObject(createArray(overrideOptions ? overrideOptions : getSettingOptions(setKey)))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Call to render lists
|
// Call to render lists
|
||||||
renderList(
|
renderList(
|
||||||
options,
|
options,
|
||||||
@@ -637,8 +679,6 @@ function generateOptionsOrSetOptions(
|
|||||||
targetField,
|
targetField,
|
||||||
transformers
|
transformers
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -659,6 +699,13 @@ function applyTransformers(val, transformers) {
|
|||||||
val = btoa(val);
|
val = btoa(val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "name|base64":
|
||||||
|
// // Implement base64 logic
|
||||||
|
// if (!isBase64(val)) {
|
||||||
|
// val = btoa(val);
|
||||||
|
// }
|
||||||
|
val = val; // probably TODO ⚠
|
||||||
|
break;
|
||||||
case "getString":
|
case "getString":
|
||||||
// no change
|
// no change
|
||||||
val = val;
|
val = val;
|
||||||
@@ -685,10 +732,24 @@ function reverseTransformers(val, transformers) {
|
|||||||
val = atob(val);
|
val = atob(val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case "name|base64":
|
||||||
|
// // Implement base64 decoding logic
|
||||||
|
// if (isBase64(val)) {
|
||||||
|
// val = atob(val);
|
||||||
|
// }
|
||||||
|
val = val; // probably TODO ⚠
|
||||||
|
break;
|
||||||
case "getString":
|
case "getString":
|
||||||
// retrieve string
|
// retrieve string
|
||||||
val = getString(val);
|
val = getString(val);
|
||||||
break;
|
break;
|
||||||
|
case "deviceChip":
|
||||||
|
mac = val // value is mac
|
||||||
|
val = `${getDevDataByMac(mac, "devName")}`
|
||||||
|
break;
|
||||||
|
case "deviceRelType":
|
||||||
|
val = val; // nothing to do
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
console.warn(`Unknown transformer: ${transformer}`);
|
console.warn(`Unknown transformer: ${transformer}`);
|
||||||
}
|
}
|
||||||
@@ -718,7 +779,7 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => {
|
|||||||
let customId = "";
|
let customId = "";
|
||||||
let columns = [];
|
let columns = [];
|
||||||
let base64Regex = "";
|
let base64Regex = "";
|
||||||
|
let elementOptionsBase64 = btoa(JSON.stringify(elementOptions));
|
||||||
|
|
||||||
elementOptions.forEach((option) => {
|
elementOptions.forEach((option) => {
|
||||||
if (option.prefillValue) {
|
if (option.prefillValue) {
|
||||||
@@ -801,7 +862,8 @@ const handleElementOptions = (setKey, elementOptions, transformers, val) => {
|
|||||||
customParams,
|
customParams,
|
||||||
customId,
|
customId,
|
||||||
columns,
|
columns,
|
||||||
base64Regex
|
base64Regex,
|
||||||
|
elementOptionsBase64
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -822,6 +884,8 @@ function arrayToObject(array) {
|
|||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Processor to generate options
|
// Processor to generate options
|
||||||
|
// options - available options
|
||||||
|
// valuesArray - values = selected options
|
||||||
function generateOptions(options, valuesArray, targetField, transformers, placeholder) {
|
function generateOptions(options, valuesArray, targetField, transformers, placeholder) {
|
||||||
var optionsHtml = "";
|
var optionsHtml = "";
|
||||||
|
|
||||||
@@ -829,7 +893,6 @@ function generateOptions(options, valuesArray, targetField, transformers, placeh
|
|||||||
selectedArray = []
|
selectedArray = []
|
||||||
cssClass = ""
|
cssClass = ""
|
||||||
|
|
||||||
|
|
||||||
// determine if options or values are used in the listing
|
// determine if options or values are used in the listing
|
||||||
if (valuesArray.length > 0 && options.length > 0){
|
if (valuesArray.length > 0 && options.length > 0){
|
||||||
|
|
||||||
@@ -848,7 +911,6 @@ function generateOptions(options, valuesArray, targetField, transformers, placeh
|
|||||||
resultArray = options;
|
resultArray = options;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Create a map to track the index of each item in valuesArray
|
// Create a map to track the index of each item in valuesArray
|
||||||
const orderMap = new Map(valuesArray.map((item, index) => [item, index]));
|
const orderMap = new Map(valuesArray.map((item, index) => [item, index]));
|
||||||
|
|
||||||
@@ -952,6 +1014,8 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
// Parse the setType JSON string
|
// Parse the setType JSON string
|
||||||
|
console.log(processQuotes(setType));
|
||||||
|
|
||||||
const setTypeObject = JSON.parse(processQuotes(setType))
|
const setTypeObject = JSON.parse(processQuotes(setType))
|
||||||
const dataType = setTypeObject.dataType;
|
const dataType = setTypeObject.dataType;
|
||||||
const elements = setTypeObject.elements || [];
|
const elements = setTypeObject.elements || [];
|
||||||
@@ -979,7 +1043,8 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
customParams,
|
customParams,
|
||||||
customId,
|
customId,
|
||||||
columns,
|
columns,
|
||||||
base64Regex
|
base64Regex,
|
||||||
|
elementOptionsBase64
|
||||||
} = handleElementOptions(setKey, elementOptions, transformers, inVal);
|
} = handleElementOptions(setKey, elementOptions, transformers, inVal);
|
||||||
|
|
||||||
// Override value
|
// Override value
|
||||||
@@ -1007,10 +1072,12 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
class="form-control ${addCss} ${cssClasses}"
|
class="form-control ${addCss} ${cssClasses}"
|
||||||
name="${setKey}"
|
name="${setKey}"
|
||||||
id="${setKey}"
|
id="${setKey}"
|
||||||
|
my-transformers=${transformers}
|
||||||
my-customparams="${customParams}"
|
my-customparams="${customParams}"
|
||||||
my-customid="${customId}"
|
my-customid="${customId}"
|
||||||
my-originalSetKey="${originalSetKey}"
|
my-originalSetKey="${originalSetKey}"
|
||||||
${multi}>
|
${multi}
|
||||||
|
${readOnly ? "disabled" : ""}>
|
||||||
<option value="" id="${setKey + "_temp_"}"></option>
|
<option value="" id="${setKey + "_temp_"}"></option>
|
||||||
</select>`;
|
</select>`;
|
||||||
|
|
||||||
@@ -1046,6 +1113,7 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
my-originalSetKey="${originalSetKey}"
|
my-originalSetKey="${originalSetKey}"
|
||||||
my-input-from="${sourceIds}"
|
my-input-from="${sourceIds}"
|
||||||
my-input-to="${setKey}"
|
my-input-to="${setKey}"
|
||||||
|
data-elementoptionsbase64="${elementOptionsBase64}"
|
||||||
onclick="${onClick}">
|
onclick="${onClick}">
|
||||||
${getString(getStringKey)}
|
${getString(getStringKey)}
|
||||||
</button>`;
|
</button>`;
|
||||||
@@ -1188,22 +1256,49 @@ function generateFormHtml(settingsData, set, overrideValue, overrideOptions, ori
|
|||||||
|
|
||||||
const eventsList = createArray(set['setEvents']);
|
const eventsList = createArray(set['setEvents']);
|
||||||
// inline buttons events
|
// inline buttons events
|
||||||
|
if (eventsList.length > 0) {
|
||||||
|
eventsList.forEach(event => {
|
||||||
|
let eventIcon = "fa-play";
|
||||||
|
|
||||||
|
switch (event) {
|
||||||
|
case "select_icon":
|
||||||
|
eventIcon = "fa-chevron-down";
|
||||||
|
break;
|
||||||
|
case "add_icon":
|
||||||
|
case "add_option":
|
||||||
|
eventIcon = "fa-square-plus";
|
||||||
|
break;
|
||||||
|
case "copy_icons":
|
||||||
|
eventIcon = "fa-copy";
|
||||||
|
break;
|
||||||
|
case "go_to_device":
|
||||||
|
eventIcon = "fa-square-up-right";
|
||||||
|
break;
|
||||||
|
case "go_to_node":
|
||||||
|
eventIcon = "fa-sitemap fa-rotate-270";
|
||||||
|
break;
|
||||||
|
case "run":
|
||||||
|
eventIcon = "fa-play";
|
||||||
|
break;
|
||||||
|
case "test":
|
||||||
|
eventIcon = "fa-vial-circle-check";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
eventIcon = "fa-play";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (eventsList.length > 0) {
|
eventsHtml += `<span class="input-group-addon pointer"
|
||||||
eventsList.forEach(event => {
|
id="${`${event}_${setKey}`}"
|
||||||
|
data-myparam-setkey="${setKey}"
|
||||||
eventsHtml += `<span class="input-group-addon pointer"
|
data-myparam="${setKey}"
|
||||||
id="${`${event}_${setKey}`}"
|
data-myparam-plugin="${setKey.split('_')[0] || ''}"
|
||||||
data-myparam-setkey="${setKey}"
|
data-myevent="${event}"
|
||||||
data-myparam="${setKey}"
|
onclick="execute_settingEvent(this)">
|
||||||
data-myparam-plugin="${setKey.split('_')[0] || ''}"
|
<i title="${getString(event + "_event_tooltip")}" class="fa ${eventIcon}"></i>
|
||||||
data-myevent="${event}"
|
</span>`;
|
||||||
onclick="execute_settingEvent(this)">
|
});
|
||||||
<i title="${getString(event + "_event_tooltip")}" class="fa ${getString(event + "_event_icon")}"></i>
|
}
|
||||||
</span>`;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// Combine and return the final HTML
|
// Combine and return the final HTML
|
||||||
return inputHtml + eventsHtml;
|
return inputHtml + eventsHtml;
|
||||||
|
|||||||
@@ -8,64 +8,6 @@
|
|||||||
----------------------------------------------------------------------------- */
|
----------------------------------------------------------------------------- */
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
// Initialize device selectors / pickers fields
|
|
||||||
// -----------------------------------------------------------------------------
|
|
||||||
function initDeviceSelectors(devicesListAll_JSON) {
|
|
||||||
|
|
||||||
// Check if both device list exists
|
|
||||||
if (devicesListAll_JSON) {
|
|
||||||
// Parse the JSON string to get the device list array
|
|
||||||
var devicesList = JSON.parse(devicesListAll_JSON);
|
|
||||||
|
|
||||||
var selectorFieldsHTML = ''
|
|
||||||
|
|
||||||
// Loop through the devices list
|
|
||||||
devicesList.forEach(function(device) {
|
|
||||||
|
|
||||||
selectorFieldsHTML += `<option value="${device.devMac}">${device.devName}</option>`;
|
|
||||||
});
|
|
||||||
|
|
||||||
selector = `<div class="db_info_table_row col-sm-12" >
|
|
||||||
<div class="form-group" >
|
|
||||||
<div class="input-group col-sm-12 " >
|
|
||||||
<select class="form-control select2 select2-hidden-accessible" multiple="" style="width: 100%;" tabindex="-1" aria-hidden="true">
|
|
||||||
${selectorFieldsHTML}
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>`
|
|
||||||
|
|
||||||
|
|
||||||
// Find HTML elements with class "deviceSelector" and append selector field
|
|
||||||
$('.deviceSelector').append(selector);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Initialize selected items after a delay so selected macs are available in the context
|
|
||||||
setTimeout(function(){
|
|
||||||
// Retrieve MAC addresses from query string or cache
|
|
||||||
var macs = getQueryString('macs') || getCache('selectedDevices');
|
|
||||||
|
|
||||||
if(macs)
|
|
||||||
{
|
|
||||||
// Split MAC addresses if they are comma-separated
|
|
||||||
macs = macs.split(',');
|
|
||||||
|
|
||||||
console.log(macs)
|
|
||||||
|
|
||||||
// Loop through macs to be selected list
|
|
||||||
macs.forEach(function(mac) {
|
|
||||||
|
|
||||||
// Create the option and append to Select2
|
|
||||||
var option = new Option($('.deviceSelector select option[value="' + mac + '"]').html(), mac, true, true);
|
|
||||||
|
|
||||||
$('.deviceSelector select').append(option).trigger('change');
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}, 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
// -------------------------------------------------------------------
|
// -------------------------------------------------------------------
|
||||||
// Utility function to generate a random API token in the format t_<random string of specified length>
|
// Utility function to generate a random API token in the format t_<random string of specified length>
|
||||||
@@ -128,9 +70,6 @@ function getRandomBytes(elem, length) {
|
|||||||
targetElement.val(formattedHex);
|
targetElement.val(formattedHex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Updates the icon preview
|
// Updates the icon preview
|
||||||
function updateAllIconPreviews() {
|
function updateAllIconPreviews() {
|
||||||
@@ -342,6 +281,7 @@ function execute_settingEvent(element) {
|
|||||||
feSetKey = $(element).attr('data-myparam-setkey');
|
feSetKey = $(element).attr('data-myparam-setkey');
|
||||||
feParam = $(element).attr('data-myparam');
|
feParam = $(element).attr('data-myparam');
|
||||||
feSourceId = $(element).attr('id');
|
feSourceId = $(element).attr('id');
|
||||||
|
feValue = $("#"+feSetKey).val();
|
||||||
|
|
||||||
if (["test", "run"].includes(feEvent)) {
|
if (["test", "run"].includes(feEvent)) {
|
||||||
// Calls a backend function to add a front-end event (specified by the attributes 'data-myevent' and 'data-myparam-plugin' on the passed element) to an execution queue
|
// Calls a backend function to add a front-end event (specified by the attributes 'data-myevent' and 'data-myparam-plugin' on the passed element) to an execution queue
|
||||||
@@ -383,8 +323,12 @@ function execute_settingEvent(element) {
|
|||||||
() => addIconAsBase64(element), // Wrap in an arrow function
|
() => addIconAsBase64(element), // Wrap in an arrow function
|
||||||
feSourceId // triggered by id
|
feSourceId // triggered by id
|
||||||
);
|
);
|
||||||
} else if (["copy_icons"].includes(feEvent)) {
|
} else if (["select_icon"].includes(feEvent)) {
|
||||||
|
|
||||||
|
showIconSelection(feSetKey)
|
||||||
|
// myparam-setkey
|
||||||
|
|
||||||
|
} else if (["copy_icons"].includes(feEvent)) {
|
||||||
|
|
||||||
// Ask overwrite icon types
|
// Ask overwrite icon types
|
||||||
showModalWarning (
|
showModalWarning (
|
||||||
@@ -392,29 +336,79 @@ function execute_settingEvent(element) {
|
|||||||
getString('DevDetail_button_OverwriteIcons_Warning'),
|
getString('DevDetail_button_OverwriteIcons_Warning'),
|
||||||
getString('Gen_Cancel'),
|
getString('Gen_Cancel'),
|
||||||
getString('Gen_Okay'),
|
getString('Gen_Okay'),
|
||||||
'overwriteIconType'
|
'overwriteIconType',
|
||||||
|
feSourceId // triggered by id
|
||||||
);
|
);
|
||||||
|
} else if (["go_to_device"].includes(feEvent)) {
|
||||||
|
|
||||||
|
goToDevice(feValue);
|
||||||
} else if (["go_to_node"].includes(feEvent)) {
|
} else if (["go_to_node"].includes(feEvent)) {
|
||||||
|
|
||||||
goToNetworkNode('NEWDEV_devParentMAC');
|
goToNetworkNode(feValue);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
console.warn(`🔺Not implemented: ${feEvent}`)
|
console.warn(`🔺Not implemented: ${feEvent}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Go to the correct network node in the Network section
|
// Go to the correct network node in the Network section
|
||||||
function goToNetworkNode(dropdownId)
|
function overwriteIconType()
|
||||||
{
|
{
|
||||||
setCache('activeNetworkTab', $('#'+dropdownId).val().replaceAll(":","_")+'_id');
|
const mac = getMac();
|
||||||
|
|
||||||
|
if (!isValidMac(mac)) {
|
||||||
|
showModalOK("Error", getString("Gen_InvalidMac"))
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Construct SQL query
|
||||||
|
const rawSql = `
|
||||||
|
UPDATE Devices
|
||||||
|
SET devIcon = (
|
||||||
|
SELECT devIcon FROM Devices WHERE devMac = "${mac}"
|
||||||
|
)
|
||||||
|
WHERE devType IN (
|
||||||
|
SELECT devType FROM Devices WHERE devMac = "${mac}"
|
||||||
|
)
|
||||||
|
`;
|
||||||
|
|
||||||
|
const apiUrl = `php/server/dbHelper.php?action=write&rawSql=${btoa(encodeURIComponent(rawSql))}`;
|
||||||
|
|
||||||
|
$.get(apiUrl, function(response) {
|
||||||
|
if (response === 'OK') {
|
||||||
|
showMessage (response);
|
||||||
|
updateApi("devices")
|
||||||
|
} else {
|
||||||
|
showMessage (response, 3000, "modal_red");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Go to the correct network node in the Network section
|
||||||
|
function goToNetworkNode(mac)
|
||||||
|
{
|
||||||
|
setCache('activeNetworkTab', mac.replaceAll(":","_")+'_id');
|
||||||
window.location.href = './network.php';
|
window.location.href = './network.php';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Go to the device
|
||||||
|
function goToDevice(mac, newtab = false) {
|
||||||
|
const url = './deviceDetails.php?mac=' + encodeURIComponent(mac);
|
||||||
|
|
||||||
|
if (newtab) {
|
||||||
|
window.open(url, '_blank');
|
||||||
|
} else {
|
||||||
|
window.location.href = url;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
// Updating the execution queue in in modal pop-up
|
// Updating the execution queue in in modal pop-up
|
||||||
@@ -494,10 +488,11 @@ function addIconAsBase64 (el) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------
|
||||||
|
// modal pop up for icon selection
|
||||||
|
function showIconSelection(setKey) {
|
||||||
|
|
||||||
|
const selectElement = document.getElementById(setKey);
|
||||||
function showIconSelection() {
|
|
||||||
const selectElement = document.getElementById('NEWDEV_devIcon');
|
|
||||||
const modalId = 'dynamicIconModal';
|
const modalId = 'dynamicIconModal';
|
||||||
|
|
||||||
// Create modal HTML dynamically
|
// Create modal HTML dynamically
|
||||||
@@ -574,19 +569,9 @@ function showIconSelection() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// "Device_TableHead_Owner",
|
|
||||||
// "Device_TableHead_Type",
|
|
||||||
// "Device_TableHead_Group",
|
|
||||||
// "Device_TableHead_Status",
|
|
||||||
// "Device_TableHead_Location",
|
|
||||||
// "Device_TableHead_Vendor",
|
|
||||||
// "Device_TableHead_SyncHubNodeName",
|
|
||||||
// "Device_TableHead_NetworkSite",
|
|
||||||
// "Device_TableHead_SSID",
|
|
||||||
// "Device_TableHead_SourcePlugin"
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Get teh correct db column code name based on table header title string
|
// Get the correct db column code name based on table header title string
|
||||||
function getColumnNameFromLangString(headStringKey) {
|
function getColumnNameFromLangString(headStringKey) {
|
||||||
columnNameMap = {
|
columnNameMap = {
|
||||||
"Device_TableHead_Name": "devName",
|
"Device_TableHead_Name": "devName",
|
||||||
@@ -615,12 +600,96 @@ function getColumnNameFromLangString(headStringKey) {
|
|||||||
"Device_TableHead_SourcePlugin": "devSourcePlugin",
|
"Device_TableHead_SourcePlugin": "devSourcePlugin",
|
||||||
"Device_TableHead_PresentLastScan": "devPresentLastScan",
|
"Device_TableHead_PresentLastScan": "devPresentLastScan",
|
||||||
"Device_TableHead_AlertDown": "devAlertDown",
|
"Device_TableHead_AlertDown": "devAlertDown",
|
||||||
"Device_TableHead_CustomProps": "devCustomProps"
|
"Device_TableHead_CustomProps": "devCustomProps",
|
||||||
|
"Device_TableHead_FQDN": "devFQDN",
|
||||||
|
"Device_TableHead_ParentRelType": "devParentRelType",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "devReqNicsOnline"
|
||||||
};
|
};
|
||||||
|
|
||||||
return columnNameMap[headStringKey] || "";
|
return columnNameMap[headStringKey] || "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Generating the device status chip
|
||||||
|
function getStatusBadgeParts(devPresentLastScan, devAlertDown, devMac, statusText = '') {
|
||||||
|
let css = 'bg-gray text-white statusUnknown';
|
||||||
|
let icon = '<i class="fa-solid fa-question"></i>';
|
||||||
|
let status = 'unknown';
|
||||||
|
let cssText = '';
|
||||||
|
|
||||||
|
if (devPresentLastScan == 1) {
|
||||||
|
css = 'bg-green text-white statusOnline';
|
||||||
|
cssText = 'text-green';
|
||||||
|
icon = '<i class="fa-solid fa-plug"></i>';
|
||||||
|
status = 'online';
|
||||||
|
} else if (devAlertDown == 1) {
|
||||||
|
css = 'bg-red text-white statusDown';
|
||||||
|
cssText = 'text-red';
|
||||||
|
icon = '<i class="fa-solid fa-triangle-exclamation"></i>';
|
||||||
|
status = 'down';
|
||||||
|
} else if (devPresentLastScan != 1) {
|
||||||
|
css = 'bg-gray text-white statusOffline';
|
||||||
|
cssText = 'text-gray50';
|
||||||
|
icon = '<i class="fa-solid fa-xmark"></i>';
|
||||||
|
status = 'offline';
|
||||||
|
}
|
||||||
|
|
||||||
|
const cleanedText = statusText.replace(/-/g, '');
|
||||||
|
const url = `deviceDetails.php?mac=${encodeURIComponent(devMac)}`;
|
||||||
|
|
||||||
|
return {
|
||||||
|
cssClass: css,
|
||||||
|
cssText: cssText,
|
||||||
|
iconHtml: icon,
|
||||||
|
mac: devMac,
|
||||||
|
text: cleanedText,
|
||||||
|
status: status,
|
||||||
|
url: url
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// Getting the color and css class for device relationships
|
||||||
|
function getRelationshipConf(relType) {
|
||||||
|
let cssClass = '';
|
||||||
|
let color = '';
|
||||||
|
|
||||||
|
// --color-aqua: #00c0ef;
|
||||||
|
// --color-blue: #0060df;
|
||||||
|
// --color-green: #00a65a;
|
||||||
|
// --color-yellow: #f39c12;
|
||||||
|
// --color-red: #dd4b39;
|
||||||
|
|
||||||
|
switch (relType) {
|
||||||
|
|
||||||
|
case "child":
|
||||||
|
color = "#f39c12"; // yellow
|
||||||
|
cssClass = "text-yellow";
|
||||||
|
break;
|
||||||
|
case "nic":
|
||||||
|
color = "#dd4b39"; // red
|
||||||
|
cssClass = "text-red";
|
||||||
|
break;
|
||||||
|
case "virtual":
|
||||||
|
color = "#0060df"; // blue
|
||||||
|
cssClass = "text-blue";
|
||||||
|
break;
|
||||||
|
case "logical":
|
||||||
|
color = "#00a65a"; // green
|
||||||
|
cssClass = "text-green";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
color = "#5B5B66"; // grey
|
||||||
|
cssClass = "text-light-grey";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
cssClass: cssClass,
|
||||||
|
color: color
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// initialize
|
// initialize
|
||||||
@@ -634,9 +703,6 @@ function initSelect2() {
|
|||||||
// check if cache ready
|
// check if cache ready
|
||||||
if(isValidJSON(devicesListAll_JSON))
|
if(isValidJSON(devicesListAll_JSON))
|
||||||
{
|
{
|
||||||
// prepare HTML DOM before initializing the frotend
|
|
||||||
initDeviceSelectors(devicesListAll_JSON)
|
|
||||||
|
|
||||||
|
|
||||||
// --------------------------------------------------------
|
// --------------------------------------------------------
|
||||||
//Initialize Select2 Elements and make them sortable
|
//Initialize Select2 Elements and make them sortable
|
||||||
@@ -644,7 +710,45 @@ function initSelect2() {
|
|||||||
$(function () {
|
$(function () {
|
||||||
// Iterate over each Select2 dropdown
|
// Iterate over each Select2 dropdown
|
||||||
$('.select2').each(function() {
|
$('.select2').each(function() {
|
||||||
var selectEl = $(this).select2();
|
// handle Device chips, if my-transformers="deviceChip"
|
||||||
|
if($(this).attr("my-transformers") == "deviceChip")
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2({
|
||||||
|
templateSelection: function (data, container) {
|
||||||
|
return $(renderDeviceLink(data, container));
|
||||||
|
},
|
||||||
|
escapeMarkup: function (m) {
|
||||||
|
return m; // Allow HTML
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else if($(this).attr("my-transformers") == "deviceRelType") // handling dropdown for relationships
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2({
|
||||||
|
minimumResultsForSearch: Infinity,
|
||||||
|
templateSelection: function (data, container) {
|
||||||
|
if (!data.id) return data.text; // default for placeholder etc.
|
||||||
|
|
||||||
|
const relConf = getRelationshipConf(data.text);
|
||||||
|
|
||||||
|
// Custom HTML
|
||||||
|
const html = $(`
|
||||||
|
<span class="custom-chip ${relConf.cssClass}" >
|
||||||
|
${data.text}
|
||||||
|
</span>
|
||||||
|
`);
|
||||||
|
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
escapeMarkup: function (m) {
|
||||||
|
return m; // Allow HTML
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else // default handling - default template
|
||||||
|
{
|
||||||
|
var selectEl = $(this).select2();
|
||||||
|
}
|
||||||
|
|
||||||
// Apply sortable functionality to the dropdown's dropdown-container
|
// Apply sortable functionality to the dropdown's dropdown-container
|
||||||
selectEl.next().children().children().children().sortable({
|
selectEl.next().children().children().children().sortable({
|
||||||
@@ -675,14 +779,171 @@ function initSelect2() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// init functions after dom loaded
|
// ------------------------------------------
|
||||||
window.addEventListener("load", function() {
|
// Render a device link with hover-over functionality
|
||||||
// try to initialize
|
function renderDeviceLink(data, container, useName = false) {
|
||||||
setTimeout(() => {
|
if (!data.id || !isValidMac(data.id)) return data.text; // default placeholder etc.
|
||||||
initSelect2()
|
|
||||||
// initializeiCheck();
|
const device = getDevDataByMac(data.id);
|
||||||
}, 1000);
|
|
||||||
});
|
const badge = getStatusBadgeParts(
|
||||||
|
device.devPresentLastScan,
|
||||||
|
device.devAlertDown,
|
||||||
|
device.devMac
|
||||||
|
);
|
||||||
|
|
||||||
|
// badge class and hover-info class to container
|
||||||
|
$(container)
|
||||||
|
.addClass(`${badge.cssClass} hover-node-info`)
|
||||||
|
.attr({
|
||||||
|
'data-name': device.devName,
|
||||||
|
'data-ip': device.devLastIP,
|
||||||
|
'data-mac': device.devMac,
|
||||||
|
'data-vendor': device.devVendor,
|
||||||
|
'data-type': device.devType,
|
||||||
|
'data-lastseen': device.devLastConnection,
|
||||||
|
'data-firstseen': device.devFirstConnection,
|
||||||
|
'data-relationship': device.devParentRelType,
|
||||||
|
'data-status': device.devStatus,
|
||||||
|
'data-present': device.devPresentLastScan,
|
||||||
|
'data-alert': device.devAlertDown,
|
||||||
|
'data-icon': device.devIcon
|
||||||
|
});
|
||||||
|
|
||||||
|
return `
|
||||||
|
<a href="${badge.url}" target="_blank">
|
||||||
|
<span class="custom-chip">
|
||||||
|
<span class="iconPreview">${atob(device.devIcon)}</span>
|
||||||
|
${useName ? device.devName : data.text}
|
||||||
|
<span>
|
||||||
|
(${badge.iconHtml})
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
`;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------
|
||||||
|
// Display device info on hover (attach only once)
|
||||||
|
function initHoverNodeInfo() {
|
||||||
|
if ($('#hover-box').length === 0) {
|
||||||
|
$('<div id="hover-box"></div>').appendTo('body').hide().css({
|
||||||
|
position: 'absolute',
|
||||||
|
zIndex: 9999,
|
||||||
|
border: '1px solid #ccc',
|
||||||
|
borderRadius: '8px',
|
||||||
|
padding: '10px',
|
||||||
|
boxShadow: '0 4px 12px rgba(0,0,0,0.15)',
|
||||||
|
minWidth: '200px',
|
||||||
|
maxWidth: '300px',
|
||||||
|
fontSize: '14px',
|
||||||
|
pointerEvents: 'none',
|
||||||
|
backgroundColor: '#fff'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// check if handlers already attached to prevent flickering
|
||||||
|
if (initHoverNodeInfo._handlersAttached) return;
|
||||||
|
initHoverNodeInfo._handlersAttached = true;
|
||||||
|
|
||||||
|
let hoverTimeout = null;
|
||||||
|
let lastTarget = null;
|
||||||
|
|
||||||
|
// remove title as it's replaced by the hover-box
|
||||||
|
$(document).on('mouseover', '.hover-node-info', function () {
|
||||||
|
this.removeAttribute('title');
|
||||||
|
|
||||||
|
$(this).attr("title", ""); // remove title as it's replaced by the hover-box
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseenter', '.hover-node-info', function (e) {
|
||||||
|
const $el = $(this);
|
||||||
|
lastTarget = this;
|
||||||
|
|
||||||
|
// use timeout to prevent a quick hover and exit toi flash a card when navigating to a target node with your mouse
|
||||||
|
clearTimeout(hoverTimeout);
|
||||||
|
|
||||||
|
hoverTimeout = setTimeout(() => {
|
||||||
|
if (lastTarget !== this) return;
|
||||||
|
|
||||||
|
const icon = $el.data('icon');
|
||||||
|
const name = $el.data('name') || 'Unknown';
|
||||||
|
const ip = $el.data('ip') || 'N/A';
|
||||||
|
const mac = $el.data('mac') || 'N/A';
|
||||||
|
const vendor = $el.data('vendor') || 'Unknown';
|
||||||
|
const type = $el.data('type') || 'Unknown';
|
||||||
|
const lastseen = $el.data('lastseen') || 'Unknown';
|
||||||
|
const firstseen = $el.data('firstseen') || 'Unknown';
|
||||||
|
const relationship = $el.data('relationship') || 'Unknown';
|
||||||
|
const badge = getStatusBadgeParts( $el.data('present'), $el.data('alert'), $el.data('mac'))
|
||||||
|
const status =`<span class="badge ${badge.cssClass}">${badge.iconHtml} ${badge.status}</span>`
|
||||||
|
|
||||||
|
const html = `
|
||||||
|
<div>
|
||||||
|
<b> <div class="iconPreview">${atob(icon)}</div> </b><b class="devName"> ${name}</b><br>
|
||||||
|
</div>
|
||||||
|
<hr/>
|
||||||
|
<div class="line">
|
||||||
|
<b>Status:</b> <span>${status}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>IP:</b> <span>${ip}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>MAC:</b> <span>${mac}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Vendor:</b> <span>${vendor}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Type:</b> <span>${type}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>First seen:</b> <span>${firstseen}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Last seen:</b> <span>${lastseen}</span><br>
|
||||||
|
</div>
|
||||||
|
<div class="line">
|
||||||
|
<b>Relationship:</b> <span class="${getRelationshipConf(relationship).cssClass}">${relationship}</span>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
$('#hover-box').html(html).fadeIn(150);
|
||||||
|
}, 300);
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mousemove', '.hover-node-info', function (e) {
|
||||||
|
const hoverBox = $('#hover-box');
|
||||||
|
const boxWidth = hoverBox.outerWidth();
|
||||||
|
const boxHeight = hoverBox.outerHeight();
|
||||||
|
const padding = 15;
|
||||||
|
|
||||||
|
const winWidth = $(window).width();
|
||||||
|
const winHeight = $(window).height();
|
||||||
|
|
||||||
|
let left = e.pageX + padding;
|
||||||
|
let top = e.pageY + padding;
|
||||||
|
|
||||||
|
// Position leftward if close to right edge
|
||||||
|
if (e.pageX + boxWidth + padding > winWidth) {
|
||||||
|
left = e.pageX - boxWidth - padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Position upward if close to bottom edge
|
||||||
|
if (e.pageY + boxHeight + padding > winHeight) {
|
||||||
|
top = e.pageY - boxHeight - padding;
|
||||||
|
}
|
||||||
|
|
||||||
|
hoverBox.css({ top: top + 'px', left: left + 'px' });
|
||||||
|
});
|
||||||
|
|
||||||
|
$(document).on('mouseleave', '.hover-node-info', function () {
|
||||||
|
clearTimeout(hoverTimeout);
|
||||||
|
lastTarget = null;
|
||||||
|
$('#hover-box').fadeOut(100);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
console.log("init ui_components.js")
|
console.log("init ui_components.js")
|
||||||
|
Before Width: | Height: | Size: 326 KiB After Width: | Height: | Size: 305 KiB |
BIN
front/lib/fonts/ionicons.woff2
Executable file
@@ -1,6 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
require 'php/templates/header.php';
|
require 'php/templates/header.php';
|
||||||
require 'php/templates/notification.php';
|
require 'php/templates/modals.php';
|
||||||
?>
|
?>
|
||||||
|
|
||||||
<!-- Page ------------------------------------------------------------------ -->
|
<!-- Page ------------------------------------------------------------------ -->
|
||||||
@@ -9,6 +9,9 @@
|
|||||||
<!-- Main content ---------------------------------------------------------- -->
|
<!-- Main content ---------------------------------------------------------- -->
|
||||||
<section class="content">
|
<section class="content">
|
||||||
|
|
||||||
|
<script>
|
||||||
|
showSpinner();
|
||||||
|
</script>
|
||||||
|
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
@@ -143,7 +146,7 @@ $db->close();
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<div class="tab-content">
|
<div class="tab-content spinnerTarget">
|
||||||
<div class="tab-pane active" id="tab_DBTools">
|
<div class="tab-pane active" id="tab_DBTools">
|
||||||
<div class="db_info_table">
|
<div class="db_info_table">
|
||||||
<div class="db_info_table_row">
|
<div class="db_info_table_row">
|
||||||
@@ -182,6 +185,12 @@ $db->close();
|
|||||||
</div>
|
</div>
|
||||||
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_del_ActHistory_text');?></div>
|
<div class="db_tools_table_cell_b"><?= lang('Maintenance_Tool_del_ActHistory_text');?></div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="db_info_table_row">
|
||||||
|
<div class="db_tools_table_cell_a" >
|
||||||
|
<button type="button" class="btn btn-default pa-btn pa-btn-delete bg-red dbtools-button" id="btnRestartServer" onclick="askRestartBackend()"><?= lang('Maint_RestartServer');?></button>
|
||||||
|
</div>
|
||||||
|
<div class="db_tools_table_cell_b"><?= lang('Maint_Restart_Server_noti_text');?></div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -709,6 +718,8 @@ window.onload = function asyncFooter() {
|
|||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
hideSpinner();
|
||||||
|
</script>
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,18 +17,21 @@
|
|||||||
<h3 class="box-title"><?= lang('Gen_Selected_Devices');?></h3>
|
<h3 class="box-title"><?= lang('Gen_Selected_Devices');?></h3>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="deviceSelector col-md-11 col-sm-11" style="z-index:5"></div>
|
<div class="deviceSelector col-md-11 col-sm-11" style="z-index:5">
|
||||||
|
<div class="db_info_table_row col-sm-12" >
|
||||||
|
<div class="form-group" >
|
||||||
|
<div class="input-group col-sm-12 " >
|
||||||
|
<select class="form-control select2 select2-hidden-accessible" multiple="" style="width: 100%;" tabindex="-1" aria-hidden="true">
|
||||||
|
|
||||||
<div class="col-md-1">
|
</select>
|
||||||
<button type="button" class="btn btn-default col-md-12" onclick="markAllSelected()" title="<?= lang('Gen_Add_All');?>">
|
</div>
|
||||||
<i class="fa-solid fa-circle-check"></i>
|
</div>
|
||||||
</button>
|
</div>
|
||||||
<button type="button" class="btn btn-default col-md-12" onclick="markAllNotSelected()" title="<?= lang('Gen_Remove_All');?>">
|
</div>
|
||||||
<i class="fa-solid fa-circle-xmark"></i>
|
<div class="col-md-1 hoverHighlight">
|
||||||
</button>
|
<i class="fa-solid fa-circle-check hoverHighlight pointer" onclick="markAllSelected()" title="<?= lang('Gen_Add_All');?>"></i>
|
||||||
|
<i class="fa-solid fa-circle-xmark hoverHighlight pointer" onclick="markAllNotSelected()" title="<?= lang('Gen_Remove_All');?>"></i>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
||||||
@@ -77,7 +80,7 @@
|
|||||||
|
|
||||||
settingsData = res["data"];
|
settingsData = res["data"];
|
||||||
|
|
||||||
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps" ]
|
excludedColumns = ["NEWDEV_devMac", "NEWDEV_devFirstConnection", "NEWDEV_devLastConnection", "NEWDEV_devLastNotification", "NEWDEV_devScan", "NEWDEV_devPresentLastScan", "NEWDEV_devCustomProps", "NEWDEV_devChildrenNicsDynamic", "NEWDEV_devChildrenDynamic" ]
|
||||||
|
|
||||||
const relevantColumns = settingsData.filter(set =>
|
const relevantColumns = settingsData.filter(set =>
|
||||||
set.setGroup === "NEWDEV" &&
|
set.setGroup === "NEWDEV" &&
|
||||||
@@ -133,7 +136,8 @@
|
|||||||
customParams,
|
customParams,
|
||||||
customId,
|
customId,
|
||||||
columns,
|
columns,
|
||||||
base64Regex
|
base64Regex,
|
||||||
|
elementOptionsBase64
|
||||||
} = handleElementOptions('none', elementOptions, transformers, val = "");
|
} = handleElementOptions('none', elementOptions, transformers, val = "");
|
||||||
|
|
||||||
// render based on element type
|
// render based on element type
|
||||||
@@ -208,13 +212,64 @@
|
|||||||
|
|
||||||
generateSimpleForm(relevantColumns);
|
generateSimpleForm(relevantColumns);
|
||||||
|
|
||||||
|
initSelect2();
|
||||||
|
initDeviceSelectors();
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
}, 500);
|
}, 100);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Initialize device selectors / pickers fields
|
||||||
|
function initDeviceSelectors() {
|
||||||
|
|
||||||
|
// Parse device list
|
||||||
|
devicesList = JSON.parse(getCache('devicesListAll_JSON'));
|
||||||
|
|
||||||
|
// Check if the device list exists and is an array
|
||||||
|
if (Array.isArray(devicesList)) {
|
||||||
|
const $select = $(".deviceSelector select");
|
||||||
|
|
||||||
|
$select.append(
|
||||||
|
devicesList
|
||||||
|
.filter(d => d.devMac && d.devName)
|
||||||
|
.map(d => `<option value="${d.devMac}">${d.devName}</option>`)
|
||||||
|
.join('')
|
||||||
|
).trigger('change');
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Initialize selected items after a delay so selected macs are available in the context
|
||||||
|
setTimeout(function(){
|
||||||
|
// Retrieve MAC addresses from query string or cache
|
||||||
|
var macs = getQueryString('macs') || getCache('selectedDevices');
|
||||||
|
|
||||||
|
if(macs)
|
||||||
|
{
|
||||||
|
// Split MAC addresses if they are comma-separated
|
||||||
|
macs = macs.split(',');
|
||||||
|
|
||||||
|
console.log(macs)
|
||||||
|
|
||||||
|
// Loop through macs to be selected list
|
||||||
|
macs.forEach(function(mac) {
|
||||||
|
|
||||||
|
// Create the option and append to Select2
|
||||||
|
var option = new Option($('.deviceSelector select option[value="' + mac + '"]').html(), mac, true, true);
|
||||||
|
|
||||||
|
$('.deviceSelector select').append(option).trigger('change');
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// Get selected devices Macs
|
// Get selected devices Macs
|
||||||
|
|||||||
1233
front/network.php
@@ -63,7 +63,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isset ($_REQUEST['rawSql'])) {
|
if (isset ($_REQUEST['rawSql'])) {
|
||||||
$rawSql = urldecode(base64_decode($_REQUEST['rawSql']));
|
$rawSql = urldecode(base64_decode($_REQUEST['rawSql'])); // base64 encoded SQL
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isset ($_REQUEST['dbtable'])) {
|
if (isset ($_REQUEST['dbtable'])) {
|
||||||
@@ -76,6 +76,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|||||||
switch ($action) {
|
switch ($action) {
|
||||||
case 'create': create($defaultValue, $expireMinutes, $dbtable, $columns, $values ); break;
|
case 'create': create($defaultValue, $expireMinutes, $dbtable, $columns, $values ); break;
|
||||||
case 'read' : read($rawSql); break;
|
case 'read' : read($rawSql); break;
|
||||||
|
case 'write' : write($rawSql); break;
|
||||||
case 'update': update($columnName, $id, $defaultValue, $expireMinutes, $dbtable, $columns, $values); break;
|
case 'update': update($columnName, $id, $defaultValue, $expireMinutes, $dbtable, $columns, $values); break;
|
||||||
case 'delete': delete($columnName, $id, $dbtable); break;
|
case 'delete': delete($columnName, $id, $dbtable); break;
|
||||||
case 'lockDatabase': lockDatabase($delay); break;
|
case 'lockDatabase': lockDatabase($delay); break;
|
||||||
@@ -120,6 +121,31 @@ function read($rawSql) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// write
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
function write($rawSql) {
|
||||||
|
global $db;
|
||||||
|
|
||||||
|
// Construct the SQL query to select values
|
||||||
|
$sql = $rawSql;
|
||||||
|
|
||||||
|
// Execute the SQL query
|
||||||
|
$result = $db->query($sql);
|
||||||
|
|
||||||
|
// Check if the query executed successfully
|
||||||
|
if (! $result == TRUE) {
|
||||||
|
// Output an error message if the query failed
|
||||||
|
echo "Error writing data\n\n " .$sql." \n\n". $db->lastErrorMsg();
|
||||||
|
return;
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
// Output
|
||||||
|
echo "OK";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// update
|
// update
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
if (isset ($_REQUEST['action']) && !empty ($_REQUEST['action'])) {
|
||||||
$action = $_REQUEST['action'];
|
$action = $_REQUEST['action'];
|
||||||
switch ($action) {
|
switch ($action) {
|
||||||
case 'getServerDeviceData': getServerDeviceData(); break;
|
case 'getServerDeviceData': getServerDeviceData(); break;
|
||||||
case 'setDeviceData': setDeviceData(); break;
|
case 'setDeviceData': setDeviceData(); break;
|
||||||
case 'deleteDevice': deleteDevice(); break;
|
case 'deleteDevice': deleteDevice(); break;
|
||||||
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
|
case 'deleteAllWithEmptyMACs': deleteAllWithEmptyMACs(); break;
|
||||||
@@ -45,11 +45,9 @@
|
|||||||
case 'ImportCSV': ImportCSV(); break;
|
case 'ImportCSV': ImportCSV(); break;
|
||||||
|
|
||||||
case 'getDevicesTotals': getDevicesTotals(); break;
|
case 'getDevicesTotals': getDevicesTotals(); break;
|
||||||
case 'getDevicesList': getDevicesList(); break;
|
case 'getDevicesListCalendar': getDevicesListCalendar(); break; //todo: slowly deprecate this
|
||||||
case 'getDevicesListCalendar': getDevicesListCalendar(); break;
|
|
||||||
|
|
||||||
case 'updateNetworkLeaf': updateNetworkLeaf(); break;
|
case 'updateNetworkLeaf': updateNetworkLeaf(); break;
|
||||||
case 'overwriteIconType': overwriteIconType(); break;
|
|
||||||
case 'getIcons': getIcons(); break;
|
case 'getIcons': getIcons(); break;
|
||||||
case 'getActions': getActions(); break;
|
case 'getActions': getActions(); break;
|
||||||
case 'getDevices': getDevices(); break;
|
case 'getDevices': getDevices(); break;
|
||||||
@@ -92,6 +90,8 @@ function getServerDeviceData() {
|
|||||||
"devLogEvents" => 0,
|
"devLogEvents" => 0,
|
||||||
"devAlertEvents" => 0,
|
"devAlertEvents" => 0,
|
||||||
"devAlertDown" => 0,
|
"devAlertDown" => 0,
|
||||||
|
"devParentRelType" => "default",
|
||||||
|
"devReqNicsOnline" => 0,
|
||||||
"devSkipRepeated" => 0,
|
"devSkipRepeated" => 0,
|
||||||
"devLastNotification" => "",
|
"devLastNotification" => "",
|
||||||
"devPresentLastScan" => 0,
|
"devPresentLastScan" => 0,
|
||||||
@@ -120,69 +120,87 @@ function getServerDeviceData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Device Data
|
// Get current date (used in presence calc)
|
||||||
$sql = 'SELECT rowid, *,
|
$currentdate = date("Y-m-d H:i:s");
|
||||||
CASE WHEN devAlertDown !=0 AND devPresentLastScan=0 THEN "Down"
|
|
||||||
WHEN devPresentLastScan=1 THEN "On-line"
|
// Fetch Device Info + Children + Events Stats
|
||||||
ELSE "Off-line" END as devStatus
|
$sql =<<<SQL
|
||||||
FROM Devices
|
SELECT
|
||||||
WHERE devMac="'. $mac .'" or cast(rowid as text)="'. $mac. '"';
|
d.rowid,
|
||||||
$result = $db->query($sql);
|
d.*,
|
||||||
$row = $result -> fetchArray (SQLITE3_ASSOC);
|
CASE
|
||||||
|
WHEN d.devAlertDown != 0 AND d.devPresentLastScan = 0 THEN "Down"
|
||||||
|
WHEN d.devPresentLastScan = 1 THEN "On-line"
|
||||||
|
ELSE "Off-line"
|
||||||
|
END AS devStatus,
|
||||||
|
|
||||||
|
-- Event counters
|
||||||
|
(SELECT COUNT(*) FROM Sessions
|
||||||
|
WHERE ses_MAC = d.devMac AND (
|
||||||
|
ses_DateTimeConnection >= $periodDate OR
|
||||||
|
ses_DateTimeDisconnection >= $periodDate OR
|
||||||
|
ses_StillConnected = 1
|
||||||
|
)
|
||||||
|
) AS devSessions,
|
||||||
|
|
||||||
|
(SELECT COUNT(*) FROM Events
|
||||||
|
WHERE eve_MAC = d.devMac AND
|
||||||
|
eve_DateTime >= $periodDate AND
|
||||||
|
eve_EventType NOT IN ("Connected", "Disconnected")
|
||||||
|
) AS devEvents,
|
||||||
|
|
||||||
|
(SELECT COUNT(*) FROM Events
|
||||||
|
WHERE eve_MAC = d.devMac AND
|
||||||
|
eve_DateTime >= $periodDate AND
|
||||||
|
eve_EventType = "Device Down"
|
||||||
|
) AS devDownAlerts,
|
||||||
|
|
||||||
|
(SELECT CAST(( MAX (0, SUM (julianday (IFNULL (ses_DateTimeDisconnection,'$currentdate'))
|
||||||
|
- julianday (CASE WHEN ses_DateTimeConnection < $periodDate
|
||||||
|
THEN $periodDate
|
||||||
|
ELSE ses_DateTimeConnection END)) *24 )) AS INT)
|
||||||
|
FROM Sessions
|
||||||
|
WHERE ses_MAC = d.devMac AND
|
||||||
|
ses_DateTimeConnection IS NOT NULL AND
|
||||||
|
(ses_DateTimeDisconnection IS NOT NULL OR ses_StillConnected = 1) AND
|
||||||
|
(
|
||||||
|
ses_DateTimeConnection >= $periodDate OR
|
||||||
|
ses_DateTimeDisconnection >= $periodDate OR
|
||||||
|
ses_StillConnected = 1
|
||||||
|
)
|
||||||
|
) AS devPresenceHours
|
||||||
|
|
||||||
|
FROM Devices d
|
||||||
|
WHERE d.devMac = "$mac" OR CAST(d.rowid AS TEXT) = "$mac"
|
||||||
|
SQL;
|
||||||
|
|
||||||
|
$row = $db->query($sql)->fetchArray(SQLITE3_ASSOC);
|
||||||
$deviceData = $row;
|
$deviceData = $row;
|
||||||
$mac = $deviceData['devMac'];
|
$mac = $deviceData['devMac'];
|
||||||
|
|
||||||
$deviceData['devParentMAC'] = $row['devParentMAC'];
|
$deviceData['devFirstConnection'] = formatDate($deviceData['devFirstConnection']);
|
||||||
$deviceData['devParentPort'] = $row['devParentPort'];
|
$deviceData['devLastConnection'] = formatDate($deviceData['devLastConnection']);
|
||||||
$deviceData['devFirstConnection'] = formatDate ($row['devFirstConnection']); // Date formated
|
$deviceData['devIsRandomMAC'] = isRandomMAC($mac);
|
||||||
$deviceData['devLastConnection'] = formatDate ($row['devLastConnection']); // Date formated
|
|
||||||
|
|
||||||
$deviceData['devIsRandomMAC'] = isRandomMAC($mac);
|
// Fetch children once and split in PHP
|
||||||
|
$sql = 'SELECT rowid, * FROM Devices WHERE devParentMAC = "' . $mac . '" ORDER BY devPresentLastScan DESC';
|
||||||
// Count Totals
|
|
||||||
$condition = ' WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate;
|
|
||||||
|
|
||||||
// Connections
|
|
||||||
$sql = 'SELECT COUNT(*) FROM Sessions
|
|
||||||
WHERE ses_MAC="'. $mac .'"
|
|
||||||
AND ( ses_DateTimeConnection >= '. $periodDate .'
|
|
||||||
OR ses_DateTimeDisconnection >= '. $periodDate .'
|
|
||||||
OR ses_StillConnected = 1 )';
|
|
||||||
$result = $db->query($sql);
|
$result = $db->query($sql);
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$children = [];
|
||||||
$deviceData['devSessions'] = $row[0];
|
$childrenNics = [];
|
||||||
|
|
||||||
// Events
|
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
|
||||||
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType <> "Connected" AND eve_EventType <> "Disconnected" ';
|
$children[] = $row;
|
||||||
$result = $db->query($sql);
|
if ($row['devParentRelType'] === 'nic') {
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
$childrenNics[] = $row;
|
||||||
$deviceData['devEvents'] = $row[0];
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Down Alerts
|
$deviceData['devChildrenDynamic'] = $children;
|
||||||
$sql = 'SELECT COUNT(*) FROM Events '. $condition .' AND eve_EventType = "Device Down"';
|
$deviceData['devChildrenNicsDynamic'] = $childrenNics;
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
|
||||||
$deviceData['devDownAlerts'] = $row[0];
|
|
||||||
|
|
||||||
// Get current date using php, sql datetime does not return time respective to timezone.
|
// Return JSON
|
||||||
$currentdate = date("Y-m-d H:i:s");
|
echo json_encode($deviceData);
|
||||||
// Presence hours
|
|
||||||
$sql = 'SELECT CAST(( MAX (0, SUM (julianday (IFNULL (ses_DateTimeDisconnection,"'. $currentdate .'" ))
|
|
||||||
- julianday (CASE WHEN ses_DateTimeConnection < '. $periodDate .' THEN '. $periodDate .'
|
|
||||||
ELSE ses_DateTimeConnection END)) *24 )) AS INT)
|
|
||||||
FROM Sessions
|
|
||||||
WHERE ses_MAC="'. $mac .'"
|
|
||||||
AND ses_DateTimeConnection IS NOT NULL
|
|
||||||
AND (ses_DateTimeDisconnection IS NOT NULL OR ses_StillConnected = 1 )
|
|
||||||
AND ( ses_DateTimeConnection >= '. $periodDate .'
|
|
||||||
OR ses_DateTimeDisconnection >= '. $periodDate .'
|
|
||||||
OR ses_StillConnected = 1 )';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
|
||||||
$deviceData['devPresenceHours'] = round ($row[0]);
|
|
||||||
|
|
||||||
// Return json
|
|
||||||
echo (json_encode ($deviceData));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -211,6 +229,8 @@ function setDeviceData() {
|
|||||||
$scancycle = quotes($_POST['scancycle']);
|
$scancycle = quotes($_POST['scancycle']);
|
||||||
$alertevents = quotes($_POST['alertevents']);
|
$alertevents = quotes($_POST['alertevents']);
|
||||||
$alertdown = quotes($_POST['alertdown']);
|
$alertdown = quotes($_POST['alertdown']);
|
||||||
|
$relType = quotes($_POST['relType']);
|
||||||
|
$reqNics = quotes($_POST['reqNics']);
|
||||||
$skiprepeated = quotes($_POST['skiprepeated']);
|
$skiprepeated = quotes($_POST['skiprepeated']);
|
||||||
$newdevice = quotes($_POST['newdevice']);
|
$newdevice = quotes($_POST['newdevice']);
|
||||||
$archived = quotes($_POST['archived']);
|
$archived = quotes($_POST['archived']);
|
||||||
@@ -242,6 +262,8 @@ function setDeviceData() {
|
|||||||
devScan = '$scancycle',
|
devScan = '$scancycle',
|
||||||
devAlertEvents = '$alertevents',
|
devAlertEvents = '$alertevents',
|
||||||
devAlertDown = '$alertdown',
|
devAlertDown = '$alertdown',
|
||||||
|
devParentRelType = '$relType',
|
||||||
|
devReqNicsOnline = '$reqNics',
|
||||||
devSkipRepeated = '$skiprepeated',
|
devSkipRepeated = '$skiprepeated',
|
||||||
devIsNew = '$newdevice',
|
devIsNew = '$newdevice',
|
||||||
devIsArchived = '$archived',
|
devIsArchived = '$archived',
|
||||||
@@ -267,6 +289,8 @@ function setDeviceData() {
|
|||||||
devScan,
|
devScan,
|
||||||
devAlertEvents,
|
devAlertEvents,
|
||||||
devAlertDown,
|
devAlertDown,
|
||||||
|
devParentRelType,
|
||||||
|
devReqNicsOnline,
|
||||||
devSkipRepeated,
|
devSkipRepeated,
|
||||||
devIsNew,
|
devIsNew,
|
||||||
devIsArchived,
|
devIsArchived,
|
||||||
@@ -295,6 +319,8 @@ function setDeviceData() {
|
|||||||
'$scancycle',
|
'$scancycle',
|
||||||
'$alertevents',
|
'$alertevents',
|
||||||
'$alertdown',
|
'$alertdown',
|
||||||
|
'$relType',
|
||||||
|
'$reqNics',
|
||||||
'$skiprepeated',
|
'$skiprepeated',
|
||||||
'$newdevice',
|
'$newdevice',
|
||||||
'$archived',
|
'$archived',
|
||||||
@@ -744,143 +770,6 @@ function getDevicesTotals() {
|
|||||||
echo ($resultJSON);
|
echo ($resultJSON);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Query the List of devices in a determined Status
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getDevicesList() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
$forceDefaultOrder = FALSE;
|
|
||||||
|
|
||||||
if (isset ($_REQUEST['forceDefaultOrder']) )
|
|
||||||
{
|
|
||||||
$forceDefaultOrder = TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
// This object is used to map from the old order ( second parameter, first number) to the new mapping, that is represented by the 3rd parameter (Second number)
|
|
||||||
$columnOrderMapping = array(
|
|
||||||
array("devName", 0, 0),
|
|
||||||
array("devOwner", 1, 1),
|
|
||||||
array("devType", 2, 2),
|
|
||||||
array("devIcon", 3, 3),
|
|
||||||
array("devFavorite", 4, 4),
|
|
||||||
array("devGroup", 5, 5),
|
|
||||||
array("devFirstConnection", 6, 6),
|
|
||||||
array("devLastConnection", 7, 7),
|
|
||||||
array("devLastIP", 8, 8),
|
|
||||||
array("devMac", 9, 9),
|
|
||||||
array("devStatus", 10, 10),
|
|
||||||
array("devMac_full", 11, 11),
|
|
||||||
array("devLastIP_orderable", 12, 12),
|
|
||||||
array("rowid", 13, 13),
|
|
||||||
array("devParentMAC", 14, 14),
|
|
||||||
array("connected_devices", 15, 15),
|
|
||||||
array("devLocation", 16, 16),
|
|
||||||
array("devVendor", 17, 17),
|
|
||||||
array("devParentPort", 18, 18),
|
|
||||||
array("devGUID", 19, 19),
|
|
||||||
array("devSyncHubNode", 20, 20),
|
|
||||||
array("devSite", 21, 21),
|
|
||||||
array("devSSID", 22, 22),
|
|
||||||
array("devSourcePlugin", 23, 23)
|
|
||||||
);
|
|
||||||
|
|
||||||
if($forceDefaultOrder == FALSE)
|
|
||||||
{
|
|
||||||
// get device columns order
|
|
||||||
$sql = 'SELECT par_Value FROM Parameters where par_ID = "Front_Devices_Columns_Order"';
|
|
||||||
$result = $db->query($sql);
|
|
||||||
$row = $result -> fetchArray (SQLITE3_NUM);
|
|
||||||
|
|
||||||
if($row != NULL && count($row) == 1)
|
|
||||||
{
|
|
||||||
// ordered columns setting from the maintenance page
|
|
||||||
$orderedColumns = createArray($row[0]);
|
|
||||||
|
|
||||||
// init ordered columns
|
|
||||||
for($i = 0; $i < count($orderedColumns); $i++) {
|
|
||||||
|
|
||||||
$columnOrderMapping[$i][2] = $orderedColumns[$i];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// SQL
|
|
||||||
$condition = getDeviceCondition ($_REQUEST['status']);
|
|
||||||
|
|
||||||
$sql = 'SELECT * FROM (
|
|
||||||
SELECT rowid, *, CASE
|
|
||||||
WHEN t1.devAlertDown !=0 AND t1.devPresentLastScan=0 THEN "Down"
|
|
||||||
WHEN t1.devIsNew=1 THEN "New"
|
|
||||||
WHEN t1.devPresentLastScan=1 THEN "On-line"
|
|
||||||
ELSE "Off-line" END AS devStatus
|
|
||||||
FROM Devices t1 '.$condition.') t3
|
|
||||||
LEFT JOIN
|
|
||||||
(
|
|
||||||
SELECT devParentMAC as devParentMAC_t2, devMac as devMac_t2,
|
|
||||||
count() as connected_devices
|
|
||||||
FROM Devices b
|
|
||||||
WHERE b.devParentMAC NOT NULL group by b.devParentMAC
|
|
||||||
) t2
|
|
||||||
ON (t3.devMac = t2.devParentMAC_t2);';
|
|
||||||
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// arrays of rows
|
|
||||||
$tableData = array();
|
|
||||||
while ($row = $result -> fetchArray (SQLITE3_ASSOC)) {
|
|
||||||
|
|
||||||
$defaultOrder = array (
|
|
||||||
$row['devName'],
|
|
||||||
$row['devOwner'],
|
|
||||||
handleNull($row['devType']),
|
|
||||||
handleNull($row['devIcon'], "PGkgY2xhc3M9J2ZhIGZhLWxhcHRvcCc+PC9pPg=="), // laptop icon
|
|
||||||
$row['devFavorite'],
|
|
||||||
$row['devGroup'],
|
|
||||||
// ----
|
|
||||||
formatDate ($row['devFirstConnection']),
|
|
||||||
formatDate ($row['devLastConnection']),
|
|
||||||
$row['devLastIP'],
|
|
||||||
( isRandomMAC($row['devMac']) ),
|
|
||||||
$row['devStatus'],
|
|
||||||
$row['devMac'], // MAC (hidden)
|
|
||||||
formatIPlong ($row['devLastIP']), // IP orderable
|
|
||||||
$row['rowid'], // Rowid (hidden)
|
|
||||||
handleNull($row['devParentMAC']),
|
|
||||||
handleNull($row['connected_devices']),
|
|
||||||
handleNull($row['devLocation']),
|
|
||||||
handleNull($row['devVendor']),
|
|
||||||
handleNull($row['devParentPort']),
|
|
||||||
handleNull($row['devGUID']),
|
|
||||||
handleNull($row['devSyncHubNode']),
|
|
||||||
handleNull($row['devSite']),
|
|
||||||
handleNull($row['devSSID']),
|
|
||||||
handleNull($row['devSourcePlugin'])
|
|
||||||
);
|
|
||||||
|
|
||||||
$newOrder = array();
|
|
||||||
|
|
||||||
// reorder columns based on user settings
|
|
||||||
for($index = 0; $index < count($columnOrderMapping); $index++)
|
|
||||||
{
|
|
||||||
array_push($newOrder, $defaultOrder[$columnOrderMapping[$index][2]]);
|
|
||||||
}
|
|
||||||
|
|
||||||
$tableData['data'][] = $newOrder;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Control no rows
|
|
||||||
if (empty($tableData['data'])) {
|
|
||||||
$tableData['data'] = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return json
|
|
||||||
echo (json_encode ($tableData));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Determine if Random MAC
|
// Determine if Random MAC
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
@@ -1034,33 +923,6 @@ function updateNetworkLeaf()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------------------
|
|
||||||
function overwriteIconType()
|
|
||||||
{
|
|
||||||
$mac = $_REQUEST['mac'];
|
|
||||||
$icon = $_REQUEST['icon'];
|
|
||||||
|
|
||||||
if ((false === filter_var($mac , FILTER_VALIDATE_MAC) && $mac != "Internet" && $mac != "") ) {
|
|
||||||
throw new Exception('Invalid mac address');
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
global $db;
|
|
||||||
// sql
|
|
||||||
$sql = 'UPDATE Devices SET "devIcon" = "'. $icon .'" where devType in (select devType from Devices where devMac = "' . $mac.'")' ;
|
|
||||||
// update Data
|
|
||||||
$result = $db->query($sql);
|
|
||||||
|
|
||||||
// check result
|
|
||||||
if ($result == TRUE) {
|
|
||||||
echo 'OK';
|
|
||||||
} else {
|
|
||||||
echo lang('BackDevices_Device_UpdDevError');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// Wake-on-LAN
|
// Wake-on-LAN
|
||||||
// Inspired by @leiweibau: https://github.com/leiweibau/Pi.Alert/commit/30427c7fea180670c71a2b790699e5d9e9e88ffd
|
// Inspired by @leiweibau: https://github.com/leiweibau/Pi.Alert/commit/30427c7fea180670c71a2b790699e5d9e9e88ffd
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ require_once $_SERVER['DOCUMENT_ROOT'] . '/php/templates/security.php';
|
|||||||
case 'getEvents': getEvents(); break;
|
case 'getEvents': getEvents(); break;
|
||||||
case 'getDeviceSessions': getDeviceSessions(); break;
|
case 'getDeviceSessions': getDeviceSessions(); break;
|
||||||
case 'getDevicePresence': getDevicePresence(); break;
|
case 'getDevicePresence': getDevicePresence(); break;
|
||||||
case 'getDeviceEvents': getDeviceEvents(); break;
|
|
||||||
case 'getEventsCalendar': getEventsCalendar(); break;
|
case 'getEventsCalendar': getEventsCalendar(); break;
|
||||||
default: logServerConsole ('Action: '. $action); break;
|
default: logServerConsole ('Action: '. $action); break;
|
||||||
}
|
}
|
||||||
@@ -410,41 +409,4 @@ function getEventsCalendar() {
|
|||||||
echo (json_encode($tableData));
|
echo (json_encode($tableData));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// Query Device events
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
function getDeviceEvents() {
|
|
||||||
global $db;
|
|
||||||
|
|
||||||
// Request Parameters
|
|
||||||
$mac = $_REQUEST['mac'];
|
|
||||||
$periodDate = getDateFromPeriod();
|
|
||||||
$hideConnections = $_REQUEST ['hideConnections'];
|
|
||||||
|
|
||||||
// SQL
|
|
||||||
$SQL = 'SELECT eve_DateTime, eve_EventType, eve_IP, eve_AdditionalInfo
|
|
||||||
FROM Events
|
|
||||||
WHERE eve_MAC="'. $mac .'" AND eve_DateTime >= '. $periodDate .'
|
|
||||||
AND ( (eve_EventType <> "Connected" AND eve_EventType <> "Disconnected" AND
|
|
||||||
eve_EventType <> "VOIDED - Connected" AND eve_EventType <> "VOIDED - Disconnected")
|
|
||||||
OR "'. $hideConnections .'" = "false" ) ';
|
|
||||||
$result = $db->query($SQL);
|
|
||||||
|
|
||||||
// arrays of rows
|
|
||||||
$tableData = array();
|
|
||||||
while ($row = $result -> fetchArray (SQLITE3_NUM)) {
|
|
||||||
$row[0] = formatDate ($row[0]);
|
|
||||||
$tableData['data'][] = $row;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Control no rows
|
|
||||||
if (empty($tableData['data'])) {
|
|
||||||
$tableData['data'] = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Return json
|
|
||||||
echo (json_encode ($tableData));
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -587,7 +587,9 @@ function getDevicesColumns(){
|
|||||||
"devSSID",
|
"devSSID",
|
||||||
"devSourcePlugin",
|
"devSourcePlugin",
|
||||||
"devCustomProps",
|
"devCustomProps",
|
||||||
"devFQDN"
|
"devFQDN",
|
||||||
|
"devParentRelType",
|
||||||
|
"devReqNicsOnline"
|
||||||
];
|
];
|
||||||
|
|
||||||
return $columns;
|
return $columns;
|
||||||
|
|||||||
@@ -42,7 +42,6 @@
|
|||||||
<script src="lib/datatables.net/js/jquery.dataTables.min.js"></script>
|
<script src="lib/datatables.net/js/jquery.dataTables.min.js"></script>
|
||||||
<script src="lib/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
<script src="lib/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
|
||||||
<script src="lib/datatables.net/js/dataTables.select.min.js"></script>
|
<script src="lib/datatables.net/js/dataTables.select.min.js"></script>
|
||||||
<script src="lib/popper_tooltip/popper.min.js"></script>
|
|
||||||
|
|
||||||
<script src="js/common.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/common.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
<script src="js/modal.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/modal.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
@@ -51,8 +50,6 @@
|
|||||||
<script src="js/settings_utils.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/settings_utils.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
<script src="js/device.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
<script src="js/device.js?v=<?php include 'php/templates/version.php'; ?>"></script>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<!-- iCheck -->
|
<!-- iCheck -->
|
||||||
|
|
||||||
<link rel="stylesheet" href="lib/iCheck/all.css">
|
<link rel="stylesheet" href="lib/iCheck/all.css">
|
||||||
@@ -136,7 +133,21 @@
|
|||||||
<!-- ----------------------------------------------------------------------- -->
|
<!-- ----------------------------------------------------------------------- -->
|
||||||
<!-- Layout Boxed Yellow -->
|
<!-- Layout Boxed Yellow -->
|
||||||
|
|
||||||
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> sidebar-mini" onLoad="update_servertime();" >
|
<!-- spinner -->
|
||||||
|
|
||||||
|
|
||||||
|
<body class="hold-transition fixed <?php echo $pia_skin_selected;?> theme-<?php echo $UI_THEME;?> sidebar-mini" onLoad="update_servertime();" >
|
||||||
|
|
||||||
|
<div id="loadingSpinner">
|
||||||
|
<div class="nax_semitransparent-panel"></div>
|
||||||
|
<div class="panel panel-default nax_spinner">
|
||||||
|
<table>
|
||||||
|
<td id="loadingSpinnerText" width="130px" ></td>
|
||||||
|
<td><i class="fa-solid fa-spinner fa-spin-pulse"></i></td>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Site wrapper -->
|
<!-- Site wrapper -->
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
|
|
||||||
@@ -149,7 +160,7 @@
|
|||||||
<a href="devices.php" class="logo">
|
<a href="devices.php" class="logo">
|
||||||
<!-- mini logo for sidebar mini 50x50 pixels -->
|
<!-- mini logo for sidebar mini 50x50 pixels -->
|
||||||
<span class="logo-mini">
|
<span class="logo-mini">
|
||||||
<img src="img/NetAlertX_logo.png" class="pia-top-left-logo" alt="NetAlertX Logo"/>
|
<img src="img/NetAlertX_logo.png" class="top-left-logo" alt="NetAlertX Logo"/>
|
||||||
</span>
|
</span>
|
||||||
<!-- logo for regular state and mobile devices -->
|
<!-- logo for regular state and mobile devices -->
|
||||||
<span class="logo-lg">Net<b>Alert</b><sup>x</sup>
|
<span class="logo-lg">Net<b>Alert</b><sup>x</sup>
|
||||||
@@ -297,6 +308,12 @@
|
|||||||
<li>
|
<li>
|
||||||
<a href="devices.php#archived" onclick="forceLoadUrl('devices.php#archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
<a href="devices.php#archived" onclick="forceLoadUrl('devices.php#archived')" > <?= lang("Device_Shortcut_Archived");?> </a>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="devices.php#all_devices" onclick="forceLoadUrl('devices.php#all_devices')" > <?= lang("Gen_All_Devices");?> </a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="devices.php#network_devices" onclick="forceLoadUrl('devices.php#network_devices')" > <?= lang("Network_Devices");?> </a>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</li>
|
</li>
|
||||||
@@ -329,7 +346,7 @@
|
|||||||
|
|
||||||
<!-- Network menu item -->
|
<!-- Network menu item -->
|
||||||
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('network.php') ) ){ echo 'active'; } ?>">
|
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('network.php') ) ){ echo 'active'; } ?>">
|
||||||
<a href="network.php"><i class="fa fa-fw fa-network-wired"></i> <span><?= lang('Navigation_Network');?></span></a>
|
<a href="network.php"><i class="fa fa-fw fa-sitemap fa-rotate-270"></i> <span><?= lang('Navigation_Network');?></span></a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- Maintenance menu item -->
|
<!-- Maintenance menu item -->
|
||||||
@@ -419,8 +436,24 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<!-- system info menu item -->
|
<!-- system info menu item -->
|
||||||
<li class=" <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('systeminfo.php') ) ){ echo 'active'; } ?>">
|
<li class=" treeview <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('systeminfo.php') ) ){ echo 'active menu-open'; } ?>">
|
||||||
<a href="systeminfo.php"><i class="fa fa-fw fa-info-circle"></i> <span><?= lang('Navigation_SystemInfo');?></span></a>
|
<a href="#">
|
||||||
|
<i class="fa fa-fw fa-info-circle"></i> <span><?= lang('Navigation_SystemInfo');?></span>
|
||||||
|
<span class="pull-right-container">
|
||||||
|
<i class="fa fa-angle-left pull-right"></i>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
<ul class="treeview-menu " style="display: <?php if (in_array (basename($_SERVER['SCRIPT_NAME']), array('systeminfo.php') ) ){ echo 'block'; } else {echo 'none';} ?>;">
|
||||||
|
<li>
|
||||||
|
<a href="systeminfo.php#panServer" onclick="setCache('activeSysinfoTab','tabServer');initializeTabs()"><?= lang('Systeminfo_System');?></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="systeminfo.php#panNetwork" onclick="setCache('activeSysinfoTab','tabNetwork');initializeTabs()"><?= lang('Systeminfo_Network');?></a>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<a href="systeminfo.php#panStorage" onclick="setCache('activeSysinfoTab','tabStorage');initializeTabs()"><?= lang('Systeminfo_Storage');?></a>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
@@ -433,24 +466,6 @@
|
|||||||
|
|
||||||
<script defer>
|
<script defer>
|
||||||
|
|
||||||
// Generate work-in-progress icons
|
|
||||||
function workInProgress() {
|
|
||||||
|
|
||||||
if($(".work-in-progress").length > 0 && $(".work-in-progress").html().trim() == "")
|
|
||||||
{
|
|
||||||
$(".work-in-progress").append(`
|
|
||||||
<a href="https://github.com/jokob-sk/NetAlertX/issues" target="_blank">
|
|
||||||
<b class="pointer" title="${getString("Gen_Work_In_Progress")}">🦺</b>
|
|
||||||
</a>
|
|
||||||
`)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
|
|
||||||
|
|
||||||
//--------------------------------------------------------------
|
|
||||||
|
|
||||||
function toggleFullscreen() {
|
function toggleFullscreen() {
|
||||||
|
|
||||||
if (document.fullscreenElement) {
|
if (document.fullscreenElement) {
|
||||||
@@ -468,6 +483,5 @@ function workInProgress() {
|
|||||||
|
|
||||||
// Update server state in the header
|
// Update server state in the header
|
||||||
updateState()
|
updateState()
|
||||||
workInProgress()
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "مدة الاحتفاظ بالأحداث",
|
"DAYS_TO_KEEP_EVENTS_name": "مدة الاحتفاظ بالأحداث",
|
||||||
"DISCOVER_PLUGINS_description": "اكتشاف المكونات الإضافية المتاحة",
|
"DISCOVER_PLUGINS_description": "اكتشاف المكونات الإضافية المتاحة",
|
||||||
"DISCOVER_PLUGINS_name": "اكتشاف المكونات الإضافية",
|
"DISCOVER_PLUGINS_name": "اكتشاف المكونات الإضافية",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "نسخ التفاصيل من الجهاز",
|
"DevDetail_Copy_Device_Title": "نسخ التفاصيل من الجهاز",
|
||||||
"DevDetail_Copy_Device_Tooltip": "انسخ تفاصيل الجهاز من القائمة المنسدلة. سيتم استبدال كل ما في هذه الصفحة.",
|
"DevDetail_Copy_Device_Tooltip": "انسخ تفاصيل الجهاز من القائمة المنسدلة. سيتم استبدال كل ما في هذه الصفحة.",
|
||||||
"DevDetail_CustomProperties_Title": "الخصائص المخصصة",
|
"DevDetail_CustomProperties_Title": "الخصائص المخصصة",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "النوع",
|
"DevDetail_MainInfo_Type": "النوع",
|
||||||
"DevDetail_MainInfo_Vendor": "المصنع",
|
"DevDetail_MainInfo_Vendor": "المصنع",
|
||||||
"DevDetail_MainInfo_mac": "عنوان MAC",
|
"DevDetail_MainInfo_mac": "عنوان MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "انقر للذهاب إلى عقدة الشبكة",
|
"DevDetail_Network_Node_hover": "انقر للذهاب إلى عقدة الشبكة",
|
||||||
"DevDetail_Network_Port_hover": "منفذ الشبكة",
|
"DevDetail_Network_Port_hover": "منفذ الشبكة",
|
||||||
"DevDetail_Nmap_Scans": "عمليات فحص Nmap",
|
"DevDetail_Nmap_Scans": "عمليات فحص Nmap",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "تعديل الأجهزة المحددة",
|
"Device_MultiEdit_Tooltip": "تعديل الأجهزة المحددة",
|
||||||
"Device_Searchbox": "بحث",
|
"Device_Searchbox": "بحث",
|
||||||
"Device_Shortcut_AllDevices": "جميع الأجهزة",
|
"Device_Shortcut_AllDevices": "جميع الأجهزة",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "مؤرشف",
|
"Device_Shortcut_Archived": "مؤرشف",
|
||||||
"Device_Shortcut_Connected": "متصل",
|
"Device_Shortcut_Connected": "متصل",
|
||||||
"Device_Shortcut_Devices": "الأجهزة",
|
"Device_Shortcut_Devices": "الأجهزة",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "الاسم",
|
"Device_TableHead_Name": "الاسم",
|
||||||
"Device_TableHead_NetworkSite": "موقع الشبكة",
|
"Device_TableHead_NetworkSite": "موقع الشبكة",
|
||||||
"Device_TableHead_Owner": "المالك",
|
"Device_TableHead_Owner": "المالك",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "عنوان MAC الأصل",
|
"Device_TableHead_Parent_MAC": "عنوان MAC الأصل",
|
||||||
"Device_TableHead_Port": "المنفذ",
|
"Device_TableHead_Port": "المنفذ",
|
||||||
"Device_TableHead_PresentLastScan": "موجود في آخر فحص",
|
"Device_TableHead_PresentLastScan": "موجود في آخر فحص",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "معرف الصف",
|
"Device_TableHead_RowID": "معرف الصف",
|
||||||
"Device_TableHead_Rowid": "معرف الصف",
|
"Device_TableHead_Rowid": "معرف الصف",
|
||||||
"Device_TableHead_SSID": "معرف الشبكة اللاسلكية",
|
"Device_TableHead_SSID": "معرف الشبكة اللاسلكية",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "إلغاء",
|
"Gen_Cancel": "إلغاء",
|
||||||
"Gen_Change": "تغيير",
|
"Gen_Change": "تغيير",
|
||||||
"Gen_Copy": "نسخ",
|
"Gen_Copy": "نسخ",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "تم تحديث البيانات. قد يستغرق تحديث واجهة المستخدم بعض الوقت",
|
"Gen_DataUpdatedUITakesTime": "تم تحديث البيانات. قد يستغرق تحديث واجهة المستخدم بعض الوقت",
|
||||||
"Gen_Delete": "حذف",
|
"Gen_Delete": "حذف",
|
||||||
"Gen_DeleteAll": "حذف الكل",
|
"Gen_DeleteAll": "حذف الكل",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "خطأ",
|
"Gen_Error": "خطأ",
|
||||||
"Gen_Filter": "تصفية",
|
"Gen_Filter": "تصفية",
|
||||||
"Gen_Generate": "إنشاء",
|
"Gen_Generate": "إنشاء",
|
||||||
|
"Gen_InvalidMac": "",
|
||||||
"Gen_LockedDB": "قاعدة البيانات مقفلة",
|
"Gen_LockedDB": "قاعدة البيانات مقفلة",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "غير متصل",
|
"Gen_Offline": "غير متصل",
|
||||||
"Gen_Okay": "موافق",
|
"Gen_Okay": "موافق",
|
||||||
"Gen_Online": "متصل",
|
"Gen_Online": "متصل",
|
||||||
@@ -321,6 +329,7 @@
|
|||||||
"Gen_SelectIcon": "اختيار أيقونة",
|
"Gen_SelectIcon": "اختيار أيقونة",
|
||||||
"Gen_SelectToPreview": "اختر للمعاينة",
|
"Gen_SelectToPreview": "اختر للمعاينة",
|
||||||
"Gen_Selected_Devices": "الأجهزة المحددة",
|
"Gen_Selected_Devices": "الأجهزة المحددة",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "تبديل",
|
"Gen_Switch": "تبديل",
|
||||||
"Gen_Upd": "تحديث",
|
"Gen_Upd": "تحديث",
|
||||||
"Gen_Upd_Fail": "فشل التحديث",
|
"Gen_Upd_Fail": "فشل التحديث",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "تدفقات العمل",
|
"Navigation_Workflows": "تدفقات العمل",
|
||||||
"Network_Assign": "تعيين",
|
"Network_Assign": "تعيين",
|
||||||
"Network_Cant_Assign": "لا يمكن التعيين",
|
"Network_Cant_Assign": "لا يمكن التعيين",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "خطأ في التكوين",
|
"Network_Configuration_Error": "خطأ في التكوين",
|
||||||
"Network_Connected": "متصل",
|
"Network_Connected": "متصل",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "إضافة إدارة",
|
"Network_ManageAdd": "إضافة إدارة",
|
||||||
"Network_ManageAdd_Name": "اسم الإدارة",
|
"Network_ManageAdd_Name": "اسم الإدارة",
|
||||||
"Network_ManageAdd_Name_text": "نص اسم الإدارة",
|
"Network_ManageAdd_Name_text": "نص اسم الإدارة",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "الجذر",
|
"Network_Root": "الجذر",
|
||||||
"Network_Root_Not_Configured": "الجذر غير مكون",
|
"Network_Root_Not_Configured": "الجذر غير مكون",
|
||||||
"Network_Root_Unconfigurable": "الجذر غير قابل للتكوين",
|
"Network_Root_Unconfigurable": "الجذر غير قابل للتكوين",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "اسم المضيف",
|
"Network_Table_Hostname": "اسم المضيف",
|
||||||
"Network_Table_IP": "عنوان IP",
|
"Network_Table_IP": "عنوان IP",
|
||||||
"Network_Table_State": "الحالة",
|
"Network_Table_State": "الحالة",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "عدم تزامن ماسحات الأجهزة",
|
"Settings_device_Scanners_desync": "عدم تزامن ماسحات الأجهزة",
|
||||||
"Settings_device_Scanners_desync_popup": "نافذة عدم تزامن ماسحات الأجهزة",
|
"Settings_device_Scanners_desync_popup": "نافذة عدم تزامن ماسحات الأجهزة",
|
||||||
"Speedtest_Results": "نتائج اختبار السرعة",
|
"Speedtest_Results": "نتائج اختبار السرعة",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "المعالج",
|
"Systeminfo_CPU": "المعالج",
|
||||||
"Systeminfo_CPU_Cores": "أنوية المعالج",
|
"Systeminfo_CPU_Cores": "أنوية المعالج",
|
||||||
"Systeminfo_CPU_Name": "اسم المعالج",
|
"Systeminfo_CPU_Name": "اسم المعالج",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "المشغل",
|
"WF_Trigger": "المشغل",
|
||||||
"WF_Trigger_event_type": "نوع حدث المشغل",
|
"WF_Trigger_event_type": "نوع حدث المشغل",
|
||||||
"WF_Trigger_type": "نوع المشغل",
|
"WF_Trigger_type": "نوع المشغل",
|
||||||
"add_icon_event_icon": "أيقونة إضافة أيقونة",
|
|
||||||
"add_icon_event_tooltip": "تلميح إضافة أيقونة",
|
"add_icon_event_tooltip": "تلميح إضافة أيقونة",
|
||||||
"add_option_event_icon": "أيقونة إضافة خيار",
|
|
||||||
"add_option_event_tooltip": "تلميح إضافة خيار",
|
"add_option_event_tooltip": "تلميح إضافة خيار",
|
||||||
"copy_icons_event_icon": "أيقونة نسخ الأيقونات",
|
|
||||||
"copy_icons_event_tooltip": "تلميح نسخ الأيقونات",
|
"copy_icons_event_tooltip": "تلميح نسخ الأيقونات",
|
||||||
"devices_old": "الأجهزة القديمة",
|
"devices_old": "الأجهزة القديمة",
|
||||||
"general_event_description": "وصف الحدث العام",
|
"general_event_description": "وصف الحدث العام",
|
||||||
"general_event_title": "عنوان الحدث العام",
|
"general_event_title": "عنوان الحدث العام",
|
||||||
"go_to_node_event_icon": "أيقونة الانتقال إلى العقدة",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "تلميح الانتقال إلى العقدة",
|
"go_to_node_event_tooltip": "تلميح الانتقال إلى العقدة",
|
||||||
"new_version_available": "يتوفر إصدار جديد",
|
"new_version_available": "يتوفر إصدار جديد",
|
||||||
"report_guid": "معرف التقرير",
|
"report_guid": "معرف التقرير",
|
||||||
"report_guid_missing": "معرف التقرير مفقود",
|
"report_guid_missing": "معرف التقرير مفقود",
|
||||||
"report_select_format": "اختر تنسيق التقرير",
|
"report_select_format": "اختر تنسيق التقرير",
|
||||||
"report_time": "وقت التقرير",
|
"report_time": "وقت التقرير",
|
||||||
"run_event_icon": "أيقونة تشغيل الحدث",
|
|
||||||
"run_event_tooltip": "تلميح تشغيل الحدث",
|
"run_event_tooltip": "تلميح تشغيل الحدث",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "أيقونة الإعدادات الأساسية",
|
"settings_core_icon": "أيقونة الإعدادات الأساسية",
|
||||||
"settings_core_label": "تسمية الإعدادات الأساسية",
|
"settings_core_label": "تسمية الإعدادات الأساسية",
|
||||||
"settings_device_scanners": "ماسحات الأجهزة",
|
"settings_device_scanners": "ماسحات الأجهزة",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "أيقونة النظام",
|
"settings_system_icon": "أيقونة النظام",
|
||||||
"settings_system_label": "تسمية النظام",
|
"settings_system_label": "تسمية النظام",
|
||||||
"settings_update_item_warning": "تحذير تحديث العنصر",
|
"settings_update_item_warning": "تحذير تحديث العنصر",
|
||||||
"test_event_icon": "أيقونة اختبار الحدث",
|
|
||||||
"test_event_tooltip": "تلميح اختبار الحدث"
|
"test_event_tooltip": "تلميح اختبار الحدث"
|
||||||
}
|
}
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
|
"DAYS_TO_KEEP_EVENTS_name": "Esborrar esdeveniments més vells de",
|
||||||
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desactiva aquesta opció per accelerar la inicialització i l'estalvi de configuració. Quan està desactivat, els connectors no es descobreixen, i no podeu afegir nous connectors a la configuració <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descobreix els plugins",
|
"DISCOVER_PLUGINS_name": "Descobreix els plugins",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Copiar detalls des del dispositiu",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà",
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalls del dispositius des de la llista desplegable. Tot el d'aquesta pàgina es sobre-escriurà",
|
||||||
"DevDetail_CustomProperties_Title": "Propietats personalitzades",
|
"DevDetail_CustomProperties_Title": "Propietats personalitzades",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipus",
|
"DevDetail_MainInfo_Type": "Tipus",
|
||||||
"DevDetail_MainInfo_Vendor": "Venedor",
|
"DevDetail_MainInfo_Vendor": "Venedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Seleccioneu el dispositiu de xarxa al qual aquest dispositiu està connectat, per poder omplir l'arbre de xarxa.",
|
"DevDetail_Network_Node_hover": "Seleccioneu el dispositiu de xarxa al qual aquest dispositiu està connectat, per poder omplir l'arbre de xarxa.",
|
||||||
"DevDetail_Network_Port_hover": "El port on el dispositiu està connectat al dispositiu de xarxa del pare. Si es deixa buit, sortirà una icona wifi a la representació de la Xarxa.",
|
"DevDetail_Network_Port_hover": "El port on el dispositiu està connectat al dispositiu de xarxa del pare. Si es deixa buit, sortirà una icona wifi a la representació de la Xarxa.",
|
||||||
"DevDetail_Nmap_Scans": "Escaneig manual Nmap",
|
"DevDetail_Nmap_Scans": "Escaneig manual Nmap",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Atenció. Si feu clic a això s'aplicarà el valor de l'esquerra a tots els dispositius seleccionats a dalt.",
|
"Device_MultiEdit_Tooltip": "Atenció. Si feu clic a això s'aplicarà el valor de l'esquerra a tots els dispositius seleccionats a dalt.",
|
||||||
"Device_Searchbox": "Cerca",
|
"Device_Searchbox": "Cerca",
|
||||||
"Device_Shortcut_AllDevices": "Els meus dispositius",
|
"Device_Shortcut_AllDevices": "Els meus dispositius",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arxivat",
|
"Device_Shortcut_Archived": "Arxivat",
|
||||||
"Device_Shortcut_Connected": "Connectat",
|
"Device_Shortcut_Connected": "Connectat",
|
||||||
"Device_Shortcut_Devices": "Dispositius",
|
"Device_Shortcut_Devices": "Dispositius",
|
||||||
@@ -211,7 +214,7 @@
|
|||||||
"Device_TableHead_AlertDown": "Cancel·lar alerta",
|
"Device_TableHead_AlertDown": "Cancel·lar alerta",
|
||||||
"Device_TableHead_Connected_Devices": "Connexions",
|
"Device_TableHead_Connected_Devices": "Connexions",
|
||||||
"Device_TableHead_CustomProps": "Props / Accions",
|
"Device_TableHead_CustomProps": "Props / Accions",
|
||||||
"Device_TableHead_FQDN": "",
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Favorit",
|
"Device_TableHead_Favorite": "Favorit",
|
||||||
"Device_TableHead_FirstSession": "Primera Sessió",
|
"Device_TableHead_FirstSession": "Primera Sessió",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nom",
|
"Device_TableHead_Name": "Nom",
|
||||||
"Device_TableHead_NetworkSite": "Network Site",
|
"Device_TableHead_NetworkSite": "Network Site",
|
||||||
"Device_TableHead_Owner": "Propietari",
|
"Device_TableHead_Owner": "Propietari",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Node pare de xarxa",
|
"Device_TableHead_Parent_MAC": "Node pare de xarxa",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Presència",
|
"Device_TableHead_PresentLastScan": "Presència",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "ID de fila",
|
"Device_TableHead_RowID": "ID de fila",
|
||||||
"Device_TableHead_Rowid": "ID de fila",
|
"Device_TableHead_Rowid": "ID de fila",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "Cancel·lar",
|
"Gen_Cancel": "Cancel·lar",
|
||||||
"Gen_Change": "Canviar",
|
"Gen_Change": "Canviar",
|
||||||
"Gen_Copy": "Executar",
|
"Gen_Copy": "Executar",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "D'acord - Pot passar una estona perquè la interfície d'usuari s'actualitzi si s'està executant una exploració.",
|
"Gen_DataUpdatedUITakesTime": "D'acord - Pot passar una estona perquè la interfície d'usuari s'actualitzi si s'està executant una exploració.",
|
||||||
"Gen_Delete": "Esborrar",
|
"Gen_Delete": "Esborrar",
|
||||||
"Gen_DeleteAll": "Esborrar tot",
|
"Gen_DeleteAll": "Esborrar tot",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Error",
|
"Gen_Error": "Error",
|
||||||
"Gen_Filter": "Filtrar",
|
"Gen_Filter": "Filtrar",
|
||||||
"Gen_Generate": "Generar",
|
"Gen_Generate": "Generar",
|
||||||
|
"Gen_InvalidMac": "",
|
||||||
"Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.",
|
"Gen_LockedDB": "ERROR - DB podria estar bloquejada - Fes servir F12 Eines desenvolupament -> Consola o provar-ho més tard.",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "Fora de línia",
|
"Gen_Offline": "Fora de línia",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "En línia",
|
"Gen_Online": "En línia",
|
||||||
@@ -321,6 +329,7 @@
|
|||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Seleccioneu la vista prèvia",
|
"Gen_SelectToPreview": "Seleccioneu la vista prèvia",
|
||||||
"Gen_Selected_Devices": "Dispositius seleccionats:",
|
"Gen_Selected_Devices": "Dispositius seleccionats:",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "Switch",
|
"Gen_Switch": "Switch",
|
||||||
"Gen_Upd": "Actualitzat correctament",
|
"Gen_Upd": "Actualitzat correctament",
|
||||||
"Gen_Upd_Fail": "Actualització fallida",
|
"Gen_Upd_Fail": "Actualització fallida",
|
||||||
@@ -359,11 +368,11 @@
|
|||||||
"Maint_PurgeLog": "Registre de purga",
|
"Maint_PurgeLog": "Registre de purga",
|
||||||
"Maint_RestartServer": "Reinici del servidor",
|
"Maint_RestartServer": "Reinici del servidor",
|
||||||
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
|
"Maint_Restart_Server_noti_text": "Estàs segur que vols reiniciar el servidor backend? Això pot causar incongruència a l'aplicació. Abans fes còpia de seguretat de la vostra configuració. <br/> <br/> Nota: Això pot durar uns quants minuts.",
|
||||||
"Maintenance_InitCheck": "",
|
"Maintenance_InitCheck": "Init Check",
|
||||||
"Maintenance_InitCheck_Checking": "",
|
"Maintenance_InitCheck_Checking": "Comprovant…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assegureu-vos de seguir la guia <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\"> de configuració ràpida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "",
|
"Maintenance_InitCheck_Success": "Aplicació inicialitzada amb èxit!",
|
||||||
"Maintenance_ReCheck": "",
|
"Maintenance_ReCheck": "Tornar a comprovar",
|
||||||
"Maintenance_Running_Version": "Versió instal·lada",
|
"Maintenance_Running_Version": "Versió instal·lada",
|
||||||
"Maintenance_Status": "Estat",
|
"Maintenance_Status": "Estat",
|
||||||
"Maintenance_Title": "Eines de manteniment",
|
"Maintenance_Title": "Eines de manteniment",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "Workflows",
|
"Navigation_Workflows": "Workflows",
|
||||||
"Network_Assign": "Connecta el <i class=\"fa fa-server\"></i> node de Xarxa",
|
"Network_Assign": "Connecta el <i class=\"fa fa-server\"></i> node de Xarxa",
|
||||||
"Network_Cant_Assign": "No es pot assignar el node arrel d'Internet com a node fill.",
|
"Network_Cant_Assign": "No es pot assignar el node arrel d'Internet com a node fill.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "Error de configuració",
|
"Network_Configuration_Error": "Error de configuració",
|
||||||
"Network_Connected": "Dispositius connectats",
|
"Network_Connected": "Dispositius connectats",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "Afegir dispositiu",
|
"Network_ManageAdd": "Afegir dispositiu",
|
||||||
"Network_ManageAdd_Name": "Nom del dispositiu",
|
"Network_ManageAdd_Name": "Nom del dispositiu",
|
||||||
"Network_ManageAdd_Name_text": "Nom sense caràcters especials",
|
"Network_ManageAdd_Name_text": "Nom sense caràcters especials",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "Node arrel",
|
"Network_Root": "Node arrel",
|
||||||
"Network_Root_Not_Configured": "Seleccioneu un tipus de dispositiu de xarxa, per exemple un tipus <b>Gateway</b>, al camp <b>Tipus</b>del <a href=\"deviceDetails.php?mac=Internet\">dispositiu arrel d'Internet</a> per començar a configurar aquesta pantalla. <br/><br/>. Podeu trobar més documentació a la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Guia de com configurar la vostra pàgina de xarxa</a>",
|
"Network_Root_Not_Configured": "Seleccioneu un tipus de dispositiu de xarxa, per exemple un tipus <b>Gateway</b>, al camp <b>Tipus</b>del <a href=\"deviceDetails.php?mac=Internet\">dispositiu arrel d'Internet</a> per començar a configurar aquesta pantalla. <br/><br/>. Podeu trobar més documentació a la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Guia de com configurar la vostra pàgina de xarxa</a>",
|
||||||
"Network_Root_Unconfigurable": "Arrel no configurable",
|
"Network_Root_Unconfigurable": "Arrel no configurable",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "Hostname",
|
"Network_Table_Hostname": "Hostname",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "Estat",
|
"Network_Table_State": "Estat",
|
||||||
@@ -565,8 +578,8 @@
|
|||||||
"Presence_Shortcut_Favorites": "Favorits",
|
"Presence_Shortcut_Favorites": "Favorits",
|
||||||
"Presence_Shortcut_NewDevices": "Nous dispositius",
|
"Presence_Shortcut_NewDevices": "Nous dispositius",
|
||||||
"Presence_Title": "Detecció de dispositius",
|
"Presence_Title": "Detecció de dispositius",
|
||||||
"REFRESH_FQDN_description": "",
|
"REFRESH_FQDN_description": "Re-escaneja tots dispositius i refresca el seu (FQDN). Si està desactivat, nomes s'escanegen els noms coneguts per fer-ho més ràpid. En aquest cas, FQDN s'actualitza només durant descoberta inicial de dispositius.",
|
||||||
"REFRESH_FQDN_name": "",
|
"REFRESH_FQDN_name": "Refresc FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Aquesta URL s'utilitza com a base per generar enllaços en informes HTML (per exemple: correus electrònics). Introduïu la URL completa començant per <code>http://</code> incloent el número de port (sense barra inicial <code>/</code>).",
|
||||||
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
"REPORT_DASHBOARD_URL_name": "URL NetAlertX",
|
||||||
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
|
"REPORT_ERROR": "Si us plau, introdueix dins de la caixa de text els caràcters que veu a la imatge de sota. Això és requerit per evitar enviaments automàtics",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "⚠ Els horaris d'escàner de dispositius no estan en sincronia.",
|
"Settings_device_Scanners_desync": "⚠ Els horaris d'escàner de dispositius no estan en sincronia.",
|
||||||
"Settings_device_Scanners_desync_popup": "Els horaris dels escàners de dispositius (<code>*_RUN_SCHD</code>) no són iguals. Això donarà lloc a notificacions inconsistents del dispositiu en línia / fora de línia. Si no és intencionat, utilitzeu el mateix horari per a tots els <b>🔍 escàners de dispositius</b>.",
|
"Settings_device_Scanners_desync_popup": "Els horaris dels escàners de dispositius (<code>*_RUN_SCHD</code>) no són iguals. Això donarà lloc a notificacions inconsistents del dispositiu en línia / fora de línia. Si no és intencionat, utilitzeu el mateix horari per a tots els <b>🔍 escàners de dispositius</b>.",
|
||||||
"Speedtest_Results": "Speedtest Resultats",
|
"Speedtest_Results": "Speedtest Resultats",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "Nuclis de CPU:",
|
"Systeminfo_CPU_Cores": "Nuclis de CPU:",
|
||||||
"Systeminfo_CPU_Name": "Nom de CPU:",
|
"Systeminfo_CPU_Name": "Nom de CPU:",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "Disparador(Trigger)",
|
"WF_Trigger": "Disparador(Trigger)",
|
||||||
"WF_Trigger_event_type": "Tipus d'esdeveniment",
|
"WF_Trigger_event_type": "Tipus d'esdeveniment",
|
||||||
"WF_Trigger_type": "Tipus de disparador",
|
"WF_Trigger_type": "Tipus de disparador",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Afegir nova icona",
|
"add_icon_event_tooltip": "Afegir nova icona",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Afegir nou valor",
|
"add_option_event_tooltip": "Afegir nou valor",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
|
"copy_icons_event_tooltip": "Sobreescriure icones de tots els dispositius amb el mateix tipus de dispositiu",
|
||||||
"devices_old": "Refrescant...",
|
"devices_old": "Refrescant...",
|
||||||
"general_event_description": "L'esdeveniment que has desencadenat pot trigar un temps fins que acabin els processos de fons. L'execució acabarà una cop buida la cua d'execució (Comprova el registre d'errors <a href='/maintenance.php#tab_Logging'></a> si hi ha problemes). <br/> <br/> Cua d'execució:",
|
"general_event_description": "L'esdeveniment que has desencadenat pot trigar un temps fins que acabin els processos de fons. L'execució acabarà una cop buida la cua d'execució (Comprova el registre d'errors <a href='/maintenance.php#tab_Logging'></a> si hi ha problemes). <br/> <br/> Cua d'execució:",
|
||||||
"general_event_title": "Execució d'un esdeveniment ad-hoc",
|
"general_event_title": "Execució d'un esdeveniment ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat",
|
"go_to_node_event_tooltip": "Navegació a la pàgina de la Xarxa del node donat",
|
||||||
"new_version_available": "Ja està disponible una nova versió.",
|
"new_version_available": "Ja està disponible una nova versió.",
|
||||||
"report_guid": "Notificació guid:",
|
"report_guid": "Notificació guid:",
|
||||||
"report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:",
|
"report_guid_missing": "No s'ha trobat la notificació enllaçada. Hi ha un petit retard entre les notificacions enviades recentment i que estiguin disponibles. Refresqui la pàgina i la memòria cau d'aquí uns segons. També és possible que la notificació seleccionada s'hagi esborrat durant el manteniment tal com s'especifica a la configuració <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>L'última notificació es mostra en el seu lloc. La notificació perduda té el següent GUID:",
|
||||||
"report_select_format": "Seleccioneu Format:",
|
"report_select_format": "Seleccioneu Format:",
|
||||||
"report_time": "Data de recepció:",
|
"report_time": "Data de recepció:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Habiliteu la configuració i deseu els canvis al principi abans d'executar-lo.",
|
"run_event_tooltip": "Habiliteu la configuració i deseu els canvis al principi abans d'executar-lo.",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Nucli",
|
"settings_core_label": "Nucli",
|
||||||
"settings_device_scanners": "Escàners de dispositius utilitzats per descobrir dispositius que escriuen a la taula de base de dades CurrentScan.",
|
"settings_device_scanners": "Escàners de dispositius utilitzats per descobrir dispositius que escriuen a la taula de base de dades CurrentScan.",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
|
"settings_update_item_warning": "Actualitza el valor sota. Sigues curós de seguir el format anterior. <b>No hi ha validació.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
|
"test_event_tooltip": "Deseu els canvis primer abans de comprovar la configuració."
|
||||||
}
|
}
|
||||||
@@ -5,11 +5,11 @@
|
|||||||
"API_TOKEN_name": "API token",
|
"API_TOKEN_name": "API token",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"About_Design": "",
|
"About_Design": "Designováno pro:",
|
||||||
"About_Exit": "",
|
"About_Exit": "Odhlásit",
|
||||||
"About_Title": "",
|
"About_Title": "Scanner síťové bezpečnosti a framework pro upozornění",
|
||||||
"AppEvents_AppEventProcessed": "Zpracováno",
|
"AppEvents_AppEventProcessed": "Zpracováno",
|
||||||
"AppEvents_DateTimeCreated": "Zalogováno",
|
"AppEvents_DateTimeCreated": "Objeveno",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "",
|
"AppEvents_GUID": "",
|
||||||
"AppEvents_Helper1": "",
|
"AppEvents_Helper1": "",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "",
|
"DAYS_TO_KEEP_EVENTS_name": "",
|
||||||
"DISCOVER_PLUGINS_description": "",
|
"DISCOVER_PLUGINS_description": "",
|
||||||
"DISCOVER_PLUGINS_name": "",
|
"DISCOVER_PLUGINS_name": "",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "",
|
"DevDetail_Copy_Device_Title": "",
|
||||||
"DevDetail_Copy_Device_Tooltip": "",
|
"DevDetail_Copy_Device_Tooltip": "",
|
||||||
"DevDetail_CustomProperties_Title": "",
|
"DevDetail_CustomProperties_Title": "",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "",
|
"DevDetail_MainInfo_Type": "",
|
||||||
"DevDetail_MainInfo_Vendor": "",
|
"DevDetail_MainInfo_Vendor": "",
|
||||||
"DevDetail_MainInfo_mac": "",
|
"DevDetail_MainInfo_mac": "",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "",
|
"DevDetail_Network_Node_hover": "",
|
||||||
"DevDetail_Network_Port_hover": "",
|
"DevDetail_Network_Port_hover": "",
|
||||||
"DevDetail_Nmap_Scans": "",
|
"DevDetail_Nmap_Scans": "",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "",
|
"Device_MultiEdit_Tooltip": "",
|
||||||
"Device_Searchbox": "",
|
"Device_Searchbox": "",
|
||||||
"Device_Shortcut_AllDevices": "",
|
"Device_Shortcut_AllDevices": "",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "",
|
"Device_Shortcut_Archived": "",
|
||||||
"Device_Shortcut_Connected": "",
|
"Device_Shortcut_Connected": "",
|
||||||
"Device_Shortcut_Devices": "",
|
"Device_Shortcut_Devices": "",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "",
|
"Device_TableHead_Name": "",
|
||||||
"Device_TableHead_NetworkSite": "",
|
"Device_TableHead_NetworkSite": "",
|
||||||
"Device_TableHead_Owner": "",
|
"Device_TableHead_Owner": "",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "",
|
"Device_TableHead_Parent_MAC": "",
|
||||||
"Device_TableHead_Port": "",
|
"Device_TableHead_Port": "",
|
||||||
"Device_TableHead_PresentLastScan": "",
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "",
|
"Device_TableHead_RowID": "",
|
||||||
"Device_TableHead_Rowid": "",
|
"Device_TableHead_Rowid": "",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
@@ -289,45 +294,49 @@
|
|||||||
"Gen_Action": "",
|
"Gen_Action": "",
|
||||||
"Gen_Add": "",
|
"Gen_Add": "",
|
||||||
"Gen_AddDevice": "",
|
"Gen_AddDevice": "",
|
||||||
"Gen_Add_All": "",
|
"Gen_Add_All": "Přidat vše",
|
||||||
"Gen_All_Devices": "",
|
"Gen_All_Devices": "Všechna zařízení",
|
||||||
"Gen_AreYouSure": "",
|
"Gen_AreYouSure": "Jste si jistý?",
|
||||||
"Gen_Backup": "",
|
"Gen_Backup": "Spustit zálohování",
|
||||||
"Gen_Cancel": "",
|
"Gen_Cancel": "Zrušit",
|
||||||
"Gen_Change": "",
|
"Gen_Change": "Změnit",
|
||||||
"Gen_Copy": "",
|
"Gen_Copy": "Spustit",
|
||||||
"Gen_DataUpdatedUITakesTime": "",
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_Delete": "",
|
"Gen_DataUpdatedUITakesTime": "OK - může zabrat chvíli aktualizovat rozhraní, pokud běží scan.",
|
||||||
"Gen_DeleteAll": "",
|
"Gen_Delete": "Smazat",
|
||||||
"Gen_Description": "",
|
"Gen_DeleteAll": "Smazat vše",
|
||||||
"Gen_Error": "",
|
"Gen_Description": "Popis",
|
||||||
"Gen_Filter": "",
|
"Gen_Error": "Chyba",
|
||||||
"Gen_Generate": "",
|
"Gen_Filter": "Filtr",
|
||||||
"Gen_LockedDB": "",
|
"Gen_Generate": "Vygenerovat",
|
||||||
"Gen_Offline": "",
|
"Gen_InvalidMac": "",
|
||||||
"Gen_Okay": "",
|
"Gen_LockedDB": "CHYBA - Databáze je možná zamčená - Zkontrolujte F12 -> Nástroje pro vývojáře -> Konzole. nebo to zkuste později.",
|
||||||
"Gen_Online": "",
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Purge": "",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_ReadDocs": "",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Remove_All": "",
|
"Gen_Online": "Online",
|
||||||
"Gen_Remove_Last": "",
|
"Gen_Purge": "Vyčistit",
|
||||||
"Gen_Reset": "",
|
"Gen_ReadDocs": "Přečíst více v dokumentaci.",
|
||||||
"Gen_Restore": "",
|
"Gen_Remove_All": "Odstranit vše",
|
||||||
"Gen_Run": "",
|
"Gen_Remove_Last": "Odstranit poslední",
|
||||||
"Gen_Save": "",
|
"Gen_Reset": "Vyresetovat",
|
||||||
"Gen_Saved": "",
|
"Gen_Restore": "Spustit obnovu",
|
||||||
"Gen_Search": "",
|
"Gen_Run": "Spustit",
|
||||||
"Gen_Select": "",
|
"Gen_Save": "Uložit",
|
||||||
"Gen_SelectIcon": "",
|
"Gen_Saved": "Uloženo",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_Search": "Hledat",
|
||||||
"Gen_Selected_Devices": "",
|
"Gen_Select": "Vybrat",
|
||||||
"Gen_Switch": "",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_Upd": "",
|
"Gen_SelectToPreview": "Vybrat na náhled",
|
||||||
"Gen_Upd_Fail": "",
|
"Gen_Selected_Devices": "Vybraná zařízení:",
|
||||||
"Gen_Update": "",
|
"Gen_Subnet": "",
|
||||||
"Gen_Update_Value": "",
|
"Gen_Switch": "Přepnout",
|
||||||
"Gen_ValidIcon": "",
|
"Gen_Upd": "Úspěšně aktualizováno",
|
||||||
"Gen_Warning": "",
|
"Gen_Upd_Fail": "Aktualizace se nezdařila",
|
||||||
|
"Gen_Update": "Aktualizovat",
|
||||||
|
"Gen_Update_Value": "Aktualizovat hodnotu",
|
||||||
|
"Gen_ValidIcon": "<i class=\"fa-solid fa-chevron-right \"></i>",
|
||||||
|
"Gen_Warning": "Upozornění",
|
||||||
"Gen_Work_In_Progress": "",
|
"Gen_Work_In_Progress": "",
|
||||||
"Gen_create_new_device": "",
|
"Gen_create_new_device": "",
|
||||||
"Gen_create_new_device_info": "",
|
"Gen_create_new_device_info": "",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "",
|
"Navigation_Workflows": "",
|
||||||
"Network_Assign": "",
|
"Network_Assign": "",
|
||||||
"Network_Cant_Assign": "",
|
"Network_Cant_Assign": "",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "",
|
"Network_Configuration_Error": "",
|
||||||
"Network_Connected": "",
|
"Network_Connected": "",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "",
|
"Network_ManageAdd": "",
|
||||||
"Network_ManageAdd_Name": "",
|
"Network_ManageAdd_Name": "",
|
||||||
"Network_ManageAdd_Name_text": "",
|
"Network_ManageAdd_Name_text": "",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "",
|
"Network_Root": "",
|
||||||
"Network_Root_Not_Configured": "",
|
"Network_Root_Not_Configured": "",
|
||||||
"Network_Root_Unconfigurable": "",
|
"Network_Root_Unconfigurable": "",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "",
|
"Network_Table_Hostname": "",
|
||||||
"Network_Table_IP": "",
|
"Network_Table_IP": "",
|
||||||
"Network_Table_State": "",
|
"Network_Table_State": "",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "",
|
"Settings_device_Scanners_desync": "",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "",
|
"Speedtest_Results": "",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "",
|
"Systeminfo_CPU": "",
|
||||||
"Systeminfo_CPU_Cores": "",
|
"Systeminfo_CPU_Cores": "",
|
||||||
"Systeminfo_CPU_Name": "",
|
"Systeminfo_CPU_Name": "",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
"add_icon_event_tooltip": "Přidat novou ikonu",
|
||||||
"add_icon_event_tooltip": "",
|
"add_option_event_tooltip": "Přidat novou hodnotu",
|
||||||
"add_option_event_icon": "",
|
"copy_icons_event_tooltip": "Přepiš ikony všech zařízení za stejný typ zařízení",
|
||||||
"add_option_event_tooltip": "",
|
"devices_old": "Obnovuji…",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
|
||||||
"devices_old": "",
|
|
||||||
"general_event_description": "",
|
"general_event_description": "",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "",
|
"report_select_format": "",
|
||||||
"report_time": "",
|
"report_time": "",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "",
|
"run_event_tooltip": "",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "",
|
"settings_core_label": "",
|
||||||
"settings_device_scanners": "",
|
"settings_device_scanners": "",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "",
|
"settings_system_label": "",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": ""
|
"test_event_tooltip": ""
|
||||||
}
|
}
|
||||||
@@ -5,19 +5,11 @@
|
|||||||
"API_TOKEN_name": "API-Schlüssel",
|
"API_TOKEN_name": "API-Schlüssel",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"APPRISE_HOST_description": "Apprise host URL starting with <code>http://</code> or <code>https://</code>. (do not forget to include <code>/notify</code> at the end)",
|
|
||||||
"APPRISE_HOST_name": "Apprise host URL",
|
|
||||||
"APPRISE_PAYLOAD_description": "Select the payload type sent to Apprise. For example <code>html</code> works well with emails, <code>text</code> with chat apps, such as Telegram.",
|
|
||||||
"APPRISE_PAYLOAD_name": "Payload type",
|
|
||||||
"APPRISE_SIZE_description": "The maximum size of the apprise payload as number of characters in the passed string. If above limit, it will be truncated and a <code>(text was truncated)</code> message is appended.",
|
|
||||||
"APPRISE_SIZE_name": "Max payload size",
|
|
||||||
"APPRISE_URL_description": "Apprise notification target URL. For example for Telegram it would be <code>tgram://{bot_token}/{chat_id}</code>.",
|
|
||||||
"APPRISE_URL_name": "Apprise notification URL",
|
|
||||||
"About_Design": "Entworfen für:",
|
"About_Design": "Entworfen für:",
|
||||||
"About_Exit": "Abmelden",
|
"About_Exit": "Abmelden",
|
||||||
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
"About_Title": "Netzwerksicherheitsscanner und Benachrichtigungsframework",
|
||||||
"AppEvents_AppEventProcessed": "Verarbeitet",
|
"AppEvents_AppEventProcessed": "Verarbeitet",
|
||||||
"AppEvents_DateTimeCreated": "Protokolliert",
|
"AppEvents_DateTimeCreated": "Entdeckt am",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "Anwendungsereignis-GUID",
|
"AppEvents_GUID": "Anwendungsereignis-GUID",
|
||||||
"AppEvents_Helper1": "Helfer 1",
|
"AppEvents_Helper1": "Helfer 1",
|
||||||
@@ -78,6 +70,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Ereignisse löschen, die älter sind als",
|
"DAYS_TO_KEEP_EVENTS_name": "Ereignisse löschen, die älter sind als",
|
||||||
"DISCOVER_PLUGINS_description": "Deaktiviere diese Option, um Initialisierung und Speichern der Einstellungen zu beschleunigen. Wenn es deaktiviert ist, werden keine neuen Plugins gefunden und es können keine manuell hinzugefügt werden.",
|
"DISCOVER_PLUGINS_description": "Deaktiviere diese Option, um Initialisierung und Speichern der Einstellungen zu beschleunigen. Wenn es deaktiviert ist, werden keine neuen Plugins gefunden und es können keine manuell hinzugefügt werden.",
|
||||||
"DISCOVER_PLUGINS_name": "Entdecke Erweiterungen",
|
"DISCOVER_PLUGINS_name": "Entdecke Erweiterungen",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Details von Gerät kopieren",
|
"DevDetail_Copy_Device_Title": "Details von Gerät kopieren",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Details vom Gerät aus der Dropdown-Liste kopieren. Alles auf dieser Seite wird überschrieben",
|
"DevDetail_Copy_Device_Tooltip": "Details vom Gerät aus der Dropdown-Liste kopieren. Alles auf dieser Seite wird überschrieben",
|
||||||
"DevDetail_CustomProperties_Title": "Benutzerdefinierte Eigenschaften",
|
"DevDetail_CustomProperties_Title": "Benutzerdefinierte Eigenschaften",
|
||||||
@@ -98,7 +91,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
|
"DevDetail_GoToNetworkNode": "Zur Netzwerkseite des angegebenen Knotens navigieren.",
|
||||||
"DevDetail_Icon": "Icon",
|
"DevDetail_Icon": "Icon",
|
||||||
"DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Geben Sie einen Font Awesome Icon-Namen ohne das Präfix „fa-“ ein oder die vollständige Klasse, z. B.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Laden ...",
|
"DevDetail_Loading": "Laden …",
|
||||||
"DevDetail_MainInfo_Comments": "Notiz",
|
"DevDetail_MainInfo_Comments": "Notiz",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorit",
|
"DevDetail_MainInfo_Favorite": "Favorit",
|
||||||
"DevDetail_MainInfo_Group": "Gruppe",
|
"DevDetail_MainInfo_Group": "Gruppe",
|
||||||
@@ -114,6 +107,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Typ",
|
"DevDetail_MainInfo_Type": "Typ",
|
||||||
"DevDetail_MainInfo_Vendor": "Hersteller",
|
"DevDetail_MainInfo_Vendor": "Hersteller",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Wählen Sie das Elternnetzgerät aus, an das das aktuelle Gerät angeschlossen ist, um den Netzwerkbaum zu erstellen.",
|
"DevDetail_Network_Node_hover": "Wählen Sie das Elternnetzgerät aus, an das das aktuelle Gerät angeschlossen ist, um den Netzwerkbaum zu erstellen.",
|
||||||
"DevDetail_Network_Port_hover": "Der Port, mit dem dieses Gerät am übergeordneten Netzwerkgerät verbunden ist. Bleibt er leer, wird ein WLAN-Symbol in der Netzwerkstruktur angezeigt.",
|
"DevDetail_Network_Port_hover": "Der Port, mit dem dieses Gerät am übergeordneten Netzwerkgerät verbunden ist. Bleibt er leer, wird ein WLAN-Symbol in der Netzwerkstruktur angezeigt.",
|
||||||
"DevDetail_Nmap_Scans": "Nmap Scans",
|
"DevDetail_Nmap_Scans": "Nmap Scans",
|
||||||
@@ -212,6 +206,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Achtung! Beim Drücken werden alle Werte auf die oben ausgewählten Geräte übertragen.",
|
"Device_MultiEdit_Tooltip": "Achtung! Beim Drücken werden alle Werte auf die oben ausgewählten Geräte übertragen.",
|
||||||
"Device_Searchbox": "Suche",
|
"Device_Searchbox": "Suche",
|
||||||
"Device_Shortcut_AllDevices": "Meine Geräte",
|
"Device_Shortcut_AllDevices": "Meine Geräte",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Archiviert",
|
"Device_Shortcut_Archived": "Archiviert",
|
||||||
"Device_Shortcut_Connected": "Verbunden",
|
"Device_Shortcut_Connected": "Verbunden",
|
||||||
"Device_Shortcut_Devices": "Geräte",
|
"Device_Shortcut_Devices": "Geräte",
|
||||||
@@ -238,9 +233,11 @@
|
|||||||
"Device_TableHead_Name": "Name",
|
"Device_TableHead_Name": "Name",
|
||||||
"Device_TableHead_NetworkSite": "Netzwerkseite",
|
"Device_TableHead_NetworkSite": "Netzwerkseite",
|
||||||
"Device_TableHead_Owner": "Eigentümer",
|
"Device_TableHead_Owner": "Eigentümer",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Übergeordneter Netzwerkknoten",
|
"Device_TableHead_Parent_MAC": "Übergeordneter Netzwerkknoten",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Anwesenheit",
|
"Device_TableHead_PresentLastScan": "Anwesenheit",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "Zeilen ID",
|
"Device_TableHead_RowID": "Zeilen ID",
|
||||||
"Device_TableHead_Rowid": "Zeilennummer",
|
"Device_TableHead_Rowid": "Zeilennummer",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -263,7 +260,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
"ENCRYPTION_KEY_name": "Verschlüsselungsschlüssel",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Laden...",
|
"Events_Loading": "Laden …",
|
||||||
"Events_Periodselect_All": "Alle Ereignisse",
|
"Events_Periodselect_All": "Alle Ereignisse",
|
||||||
"Events_Periodselect_LastMonth": "Letzter Monat",
|
"Events_Periodselect_LastMonth": "Letzter Monat",
|
||||||
"Events_Periodselect_LastWeek": "Letzte Woche",
|
"Events_Periodselect_LastWeek": "Letzte Woche",
|
||||||
@@ -308,6 +305,7 @@
|
|||||||
"Gen_Cancel": "Abbrechen",
|
"Gen_Cancel": "Abbrechen",
|
||||||
"Gen_Change": "Ändern",
|
"Gen_Change": "Ändern",
|
||||||
"Gen_Copy": "Ausführen",
|
"Gen_Copy": "Ausführen",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK – Es kann einen Moment dauern, bis die Benutzeroberfläche aktualisiert wird, während ein Scan ausgeführt wird.",
|
"Gen_DataUpdatedUITakesTime": "OK – Es kann einen Moment dauern, bis die Benutzeroberfläche aktualisiert wird, während ein Scan ausgeführt wird.",
|
||||||
"Gen_Delete": "Löschen",
|
"Gen_Delete": "Löschen",
|
||||||
"Gen_DeleteAll": "Alles löschen",
|
"Gen_DeleteAll": "Alles löschen",
|
||||||
@@ -315,7 +313,9 @@
|
|||||||
"Gen_Error": "Fehler",
|
"Gen_Error": "Fehler",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
"Gen_Generate": "Generieren",
|
"Gen_Generate": "Generieren",
|
||||||
|
"Gen_InvalidMac": "Ungültige MAC-Adresse.",
|
||||||
"Gen_LockedDB": "ERROR - DB eventuell gesperrt - Nutze die Konsole in den Entwickler Werkzeugen (F12) zur Überprüfung oder probiere es später erneut.",
|
"Gen_LockedDB": "ERROR - DB eventuell gesperrt - Nutze die Konsole in den Entwickler Werkzeugen (F12) zur Überprüfung oder probiere es später erneut.",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "Online",
|
"Gen_Online": "Online",
|
||||||
@@ -333,6 +333,7 @@
|
|||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Zur Vorschau auswählen",
|
"Gen_SelectToPreview": "Zur Vorschau auswählen",
|
||||||
"Gen_Selected_Devices": "Ausgewählte Geräte:",
|
"Gen_Selected_Devices": "Ausgewählte Geräte:",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "Umschalten",
|
"Gen_Switch": "Umschalten",
|
||||||
"Gen_Upd": "Aktualisierung erfolgreich",
|
"Gen_Upd": "Aktualisierung erfolgreich",
|
||||||
"Gen_Upd_Fail": "Aktualisierung fehlgeschlagen",
|
"Gen_Upd_Fail": "Aktualisierung fehlgeschlagen",
|
||||||
@@ -353,7 +354,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Geladene Plugins",
|
"LOADED_PLUGINS_name": "Geladene Plugins",
|
||||||
"LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.",
|
"LOG_LEVEL_description": "Diese Einstellung aktiviert die erweiterte Protokollierung. Nützlich fürs Debuggen von in die Datenbank geschriebenen Events.",
|
||||||
"LOG_LEVEL_name": "Erweiterte Protokollierung",
|
"LOG_LEVEL_name": "Erweiterte Protokollierung",
|
||||||
"Loading": "Laden...",
|
"Loading": "Laden …",
|
||||||
"Login_Box": "Passwort eingeben",
|
"Login_Box": "Passwort eingeben",
|
||||||
"Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.",
|
"Login_Default_PWD": "Standardpasswort \"123456\" noch immer aktiv.",
|
||||||
"Login_Info": "",
|
"Login_Info": "",
|
||||||
@@ -386,10 +387,10 @@
|
|||||||
"Maint_RestartServer": "Server neu starten",
|
"Maint_RestartServer": "Server neu starten",
|
||||||
"Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.",
|
"Maint_Restart_Server_noti_text": "Soll der Backend-Server wirklich neu gestartet werden? Das könnte Instabilitäten verursachen. Vorher ein Backup erstellen. <br/><br/>Hinweis: Das kann einige Minuten dauern.",
|
||||||
"Maintenance_InitCheck": "",
|
"Maintenance_InitCheck": "",
|
||||||
"Maintenance_InitCheck_Checking": "",
|
"Maintenance_InitCheck_Checking": "Prüfen …",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "",
|
"Maintenance_InitCheck_QuickSetupGuide": "",
|
||||||
"Maintenance_InitCheck_Success": "",
|
"Maintenance_InitCheck_Success": "Anwendung erfolgreich initialisiert!",
|
||||||
"Maintenance_ReCheck": "Wiederhole Check",
|
"Maintenance_ReCheck": "Prüfung wiederholen",
|
||||||
"Maintenance_Running_Version": "Installierte Version",
|
"Maintenance_Running_Version": "Installierte Version",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Wartungswerkzeuge",
|
"Maintenance_Title": "Wartungswerkzeuge",
|
||||||
@@ -523,8 +524,10 @@
|
|||||||
"Navigation_Workflows": "Arbeitsabläufe",
|
"Navigation_Workflows": "Arbeitsabläufe",
|
||||||
"Network_Assign": "Zum obigen <i class=\"fa fa-server\"></i> Netzwerkknoten zuweisen",
|
"Network_Assign": "Zum obigen <i class=\"fa fa-server\"></i> Netzwerkknoten zuweisen",
|
||||||
"Network_Cant_Assign": "Internet-Wurzelknoten kann nicht als äußerer Kindknoten zugewiesen werden.",
|
"Network_Cant_Assign": "Internet-Wurzelknoten kann nicht als äußerer Kindknoten zugewiesen werden.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "Konfigurationsfehler",
|
"Network_Configuration_Error": "Konfigurationsfehler",
|
||||||
"Network_Connected": "Verbundene Geräte",
|
"Network_Connected": "Verbundene Geräte",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "Gerät hinzufügen",
|
"Network_ManageAdd": "Gerät hinzufügen",
|
||||||
"Network_ManageAdd_Name": "Name des Gerätes",
|
"Network_ManageAdd_Name": "Name des Gerätes",
|
||||||
"Network_ManageAdd_Name_text": "Name ohne Sonderzeichen",
|
"Network_ManageAdd_Name_text": "Name ohne Sonderzeichen",
|
||||||
@@ -559,6 +562,8 @@
|
|||||||
"Network_Root": "Wurzelknoten",
|
"Network_Root": "Wurzelknoten",
|
||||||
"Network_Root_Not_Configured": "",
|
"Network_Root_Not_Configured": "",
|
||||||
"Network_Root_Unconfigurable": "Nicht konfigurierbare Wurzel",
|
"Network_Root_Unconfigurable": "Nicht konfigurierbare Wurzel",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "Gerätename",
|
"Network_Table_Hostname": "Gerätename",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "Status",
|
"Network_Table_State": "Status",
|
||||||
@@ -597,7 +602,7 @@
|
|||||||
"Presence_Key_OnlinePastMiss": "",
|
"Presence_Key_OnlinePastMiss": "",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "",
|
"Presence_Key_OnlinePastMiss_desc": "",
|
||||||
"Presence_Key_OnlinePast_desc": "",
|
"Presence_Key_OnlinePast_desc": "",
|
||||||
"Presence_Loading": "Laden...",
|
"Presence_Loading": "Laden …",
|
||||||
"Presence_Shortcut_AllDevices": "Meine Geräte",
|
"Presence_Shortcut_AllDevices": "Meine Geräte",
|
||||||
"Presence_Shortcut_Archived": "Archiviert",
|
"Presence_Shortcut_Archived": "Archiviert",
|
||||||
"Presence_Shortcut_Connected": "Verbunden",
|
"Presence_Shortcut_Connected": "Verbunden",
|
||||||
@@ -654,6 +659,7 @@
|
|||||||
"Settings_device_Scanners_desync": "⚠ Die Zeitpläne des Gerätescanners sind nicht synchronisiert.",
|
"Settings_device_Scanners_desync": "⚠ Die Zeitpläne des Gerätescanners sind nicht synchronisiert.",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "Ergebnisse des Geschwindigkeitstests",
|
"Speedtest_Results": "Ergebnisse des Geschwindigkeitstests",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "CPU-Kerne:",
|
"Systeminfo_CPU_Cores": "CPU-Kerne:",
|
||||||
"Systeminfo_CPU_Name": "CPU-Name:",
|
"Systeminfo_CPU_Name": "CPU-Name:",
|
||||||
@@ -785,24 +791,21 @@
|
|||||||
"WF_Trigger_type": "Auslösertyp",
|
"WF_Trigger_type": "Auslösertyp",
|
||||||
"Webhooks_display_name": "Webhooks",
|
"Webhooks_display_name": "Webhooks",
|
||||||
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "Neues Symbol hinzufügen",
|
"add_icon_event_tooltip": "Neues Symbol hinzufügen",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "Neuen Wert hinzufügen",
|
"add_option_event_tooltip": "Neuen Wert hinzufügen",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "Icons aller Geräte mit demselben Gerätetyp überschreiben",
|
"copy_icons_event_tooltip": "Icons aller Geräte mit demselben Gerätetyp überschreiben",
|
||||||
"devices_old": "Aktualisiert...",
|
"devices_old": "Aktualisiert...",
|
||||||
"general_event_description": "Das Ereignis, das Sie ausgelöst haben, könnte eine Weile dauern, bis Hintergrundprozesse abgeschlossen sind. Die Ausführung endet, wenn die unten ausgeführte Warteschlangen abgearbeitet ist. (Siehe <a href='/maintenance.php#tab_Logging'>error log</a>, wenn Probleme auftreten.)<br/> <br/> Ausführungsschlange:",
|
"general_event_description": "Das Ereignis, das Sie ausgelöst haben, könnte eine Weile dauern, bis Hintergrundprozesse abgeschlossen sind. Die Ausführung endet, wenn die unten ausgeführte Warteschlangen abgearbeitet ist. (Siehe <a href='/maintenance.php#tab_Logging'>error log</a>, wenn Probleme auftreten.)<br/> <br/> Ausführungsschlange:",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "Es ist eine neue Version verfügbar.",
|
"new_version_available": "Es ist eine neue Version verfügbar.",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "Format auswählen:",
|
"report_select_format": "Format auswählen:",
|
||||||
"report_time": "Benachrichtigungszeit:",
|
"report_time": "Benachrichtigungszeit:",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "Aktiviere die Einstellung und speichere deine Änderungen, bevor du sie ausführst.",
|
"run_event_tooltip": "Aktiviere die Einstellung und speichere deine Änderungen, bevor du sie ausführst.",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "Kern",
|
"settings_core_label": "Kern",
|
||||||
"settings_device_scanners": "",
|
"settings_device_scanners": "",
|
||||||
@@ -829,6 +832,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
|
"test_event_tooltip": "Speichere die Änderungen, bevor Sie die Einstellungen testen."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,8 +39,8 @@
|
|||||||
"BackDevices_Backup_CopError": "The original database could not be saved.",
|
"BackDevices_Backup_CopError": "The original database could not be saved.",
|
||||||
"BackDevices_Backup_Failed": "The backup executed partially successfully. The archive could not be created or is empty.",
|
"BackDevices_Backup_Failed": "The backup executed partially successfully. The archive could not be created or is empty.",
|
||||||
"BackDevices_Backup_okay": "The backup executed successfully with the new archive",
|
"BackDevices_Backup_okay": "The backup executed successfully with the new archive",
|
||||||
"BackDevices_DBTools_DelDevError_a": "Error deleting Device",
|
"BackDevices_DBTools_DelDevError_a": "Error deleting device",
|
||||||
"BackDevices_DBTools_DelDevError_b": "Error deleting Devices",
|
"BackDevices_DBTools_DelDevError_b": "Error deleting devices",
|
||||||
"BackDevices_DBTools_DelDev_a": "Device deleted",
|
"BackDevices_DBTools_DelDev_a": "Device deleted",
|
||||||
"BackDevices_DBTools_DelDev_b": "Devices deleted",
|
"BackDevices_DBTools_DelDev_b": "Devices deleted",
|
||||||
"BackDevices_DBTools_DelEvents": "Events deleted",
|
"BackDevices_DBTools_DelEvents": "Events deleted",
|
||||||
@@ -66,27 +66,28 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
"DAYS_TO_KEEP_EVENTS_name": "Delete events older than",
|
||||||
"DISCOVER_PLUGINS_description": "Disable this option to speed up initialization and settings saving. When disabled, plugins are not discovered, and you cannot add new plugins to the <code>LOADED_PLUGINS</code> setting.",
|
"DISCOVER_PLUGINS_description": "Disable this option to speed up initialization and settings saving. When disabled, plugins are not discovered, and you cannot add new plugins to the <code>LOADED_PLUGINS</code> setting.",
|
||||||
"DISCOVER_PLUGINS_name": "Discover plugins",
|
"DISCOVER_PLUGINS_name": "Discover plugins",
|
||||||
|
"DevDetail_Children_Title": "Children Relationships",
|
||||||
"DevDetail_Copy_Device_Title": "Copy details from device",
|
"DevDetail_Copy_Device_Title": "Copy details from device",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copy details from device from the dropdown list. Everything on this page will be overwritten",
|
"DevDetail_Copy_Device_Tooltip": "Copy details from device from the dropdown list. Everything on this page will be overwritten",
|
||||||
"DevDetail_CustomProperties_Title": "Custom Properties",
|
"DevDetail_CustomProperties_Title": "Custom Properties",
|
||||||
"DevDetail_CustomProps_reset_info": "This will remove your custom properties on this device and reset them to the default value.",
|
"DevDetail_CustomProps_reset_info": "This will remove your custom properties on this device and reset them to the default value.",
|
||||||
"DevDetail_DisplayFields_Title": "Display",
|
"DevDetail_DisplayFields_Title": "Display",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Alert Events",
|
"DevDetail_EveandAl_AlertAllEvents": "Alert events",
|
||||||
"DevDetail_EveandAl_AlertDown": "Alert Down",
|
"DevDetail_EveandAl_AlertDown": "Alert down",
|
||||||
"DevDetail_EveandAl_Archived": "Archived",
|
"DevDetail_EveandAl_Archived": "Archived",
|
||||||
"DevDetail_EveandAl_NewDevice": "New Device",
|
"DevDetail_EveandAl_NewDevice": "New device",
|
||||||
"DevDetail_EveandAl_NewDevice_Tooltip": "Will show the New status for the device and include it in lists when the New Devices filter is active. Doesn't affect notifications.",
|
"DevDetail_EveandAl_NewDevice_Tooltip": "Will show the New status for the device and include it in lists when the New devices filter is active. Doesn't affect notifications.",
|
||||||
"DevDetail_EveandAl_RandomMAC": "Random MAC",
|
"DevDetail_EveandAl_RandomMAC": "Random MAC",
|
||||||
"DevDetail_EveandAl_ScanCycle": "Scan device",
|
"DevDetail_EveandAl_ScanCycle": "Scan device",
|
||||||
"DevDetail_EveandAl_ScanCycle_a": "Scan Device",
|
"DevDetail_EveandAl_ScanCycle_a": "Scan device",
|
||||||
"DevDetail_EveandAl_ScanCycle_z": "Don't Scan Device",
|
"DevDetail_EveandAl_ScanCycle_z": "Don't scan device",
|
||||||
"DevDetail_EveandAl_Skip": "Skip repeated notifications for",
|
"DevDetail_EveandAl_Skip": "Skip repeated notifications for",
|
||||||
"DevDetail_EveandAl_Title": "Notifications config",
|
"DevDetail_EveandAl_Title": "Notifications config",
|
||||||
"DevDetail_Events_CheckBox": "Hide Connection Events",
|
"DevDetail_Events_CheckBox": "Hide connection events",
|
||||||
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
"DevDetail_GoToNetworkNode": "Navigate to the Network page of the given node.",
|
||||||
"DevDetail_Icon": "Icon",
|
"DevDetail_Icon": "Icon",
|
||||||
"DevDetail_Icon_Descr": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Enter a font awesome icon name without the fa- prefix or with complete class, e.g.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Loading...",
|
"DevDetail_Loading": "Loading…",
|
||||||
"DevDetail_MainInfo_Comments": "Comments",
|
"DevDetail_MainInfo_Comments": "Comments",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorite",
|
"DevDetail_MainInfo_Favorite": "Favorite",
|
||||||
"DevDetail_MainInfo_Group": "Group",
|
"DevDetail_MainInfo_Group": "Group",
|
||||||
@@ -102,10 +103,11 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Vendor",
|
"DevDetail_MainInfo_Vendor": "Vendor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Open children node",
|
||||||
"DevDetail_Network_Node_hover": "Select the parent network device the current device is connected to, to populate the Network tree.",
|
"DevDetail_Network_Node_hover": "Select the parent network device the current device is connected to, to populate the Network tree.",
|
||||||
"DevDetail_Network_Port_hover": "The port this device is connected to on the parent network device. If left empty a wifi icon is displayed in the Network tree.",
|
"DevDetail_Network_Port_hover": "The port this device is connected to on the parent network device. If left empty a wifi icon is displayed in the Network tree.",
|
||||||
"DevDetail_Nmap_Scans": "Manual Nmap Scans",
|
"DevDetail_Nmap_Scans": "Manual Nmap Scans",
|
||||||
"DevDetail_Nmap_Scans_desc": "Here you can execute manual NMAP scans. You can also schedule regular automatic NMAP scans via the Services & Ports (NMAP) plugin. Head to <a href='/settings.php' target='_blank'>Settings</a> to find out more",
|
"DevDetail_Nmap_Scans_desc": "Here you can execute manual NMAP scans. You can also schedule regular automatic NMAP scans via the Services & Ports (NMAP) plugin. Head to <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan\" target=\"_blank\">Docs</a> to find out more",
|
||||||
"DevDetail_Nmap_buttonDefault": "Default Scan",
|
"DevDetail_Nmap_buttonDefault": "Default Scan",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Default Scan: Nmap scans the top 1,000 ports for each scan protocol requested. This catches roughly 93% of the TCP ports and 49% of the UDP ports. (about 5 seconds)",
|
"DevDetail_Nmap_buttonDefault_text": "Default Scan: Nmap scans the top 1,000 ports for each scan protocol requested. This catches roughly 93% of the TCP ports and 49% of the UDP ports. (about 5 seconds)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Detailed Scan",
|
"DevDetail_Nmap_buttonDetail": "Detailed Scan",
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Send WoL command to ",
|
"DevDetail_Tools_WOL": "Send WoL command to ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
"DevDetail_Tools_WOL_noti_text": "The Wake-on-LAN command is sent to the broadcast address. If the target is not in the subnet/VLAN of NetAlertX, the target device will not respond.",
|
||||||
"DevDetail_Type_hover": "The Type of the device. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch...) they will show up in the Network tree configuration as possible parent network nodes.",
|
"DevDetail_Type_hover": "The Type of the device. If you select any of the pre-defined network devices (e.g.: AP, Firewall, Router, Switch…) they will show up in the Network tree configuration as possible parent network nodes.",
|
||||||
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
"DevDetail_Vendor_hover": "Vendor should be auto-detected. You can overwrite or add your custom value.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Add new Icon",
|
"DevDetail_button_AddIcon": "Add new Icon",
|
||||||
@@ -194,19 +196,20 @@
|
|||||||
"DevDetail_button_Save": "Save",
|
"DevDetail_button_Save": "Save",
|
||||||
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
"DeviceEdit_ValidMacIp": "Enter a valid <b>Mac</b> and <b>IP</b> address.",
|
||||||
"Device_MultiEdit": "Multi-edit",
|
"Device_MultiEdit": "Multi-edit",
|
||||||
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
"Device_MultiEdit_Backup": "Careful, entering wrong values below will break your setup. Please backup your database or Devices configuration first (<a href=\"php/server/devices.php?action=ExportCSV\">click to download <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Read how to recover Devices from this file in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Backups documentation</a>. In order to apply your changes click the <b>Save<i class=\"fa-solid fa-save\"></i></b> icon on each field you want to update.",
|
||||||
"Device_MultiEdit_Fields": "Edit fields:",
|
"Device_MultiEdit_Fields": "Edit fields:",
|
||||||
"Device_MultiEdit_MassActions": "Mass actions:",
|
"Device_MultiEdit_MassActions": "Mass actions:",
|
||||||
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
"Device_MultiEdit_Tooltip": "Careful. Clicking this will apply the value on the left to all devices selected above.",
|
||||||
"Device_Searchbox": "Search",
|
"Device_Searchbox": "Search",
|
||||||
"Device_Shortcut_AllDevices": "My Devices",
|
"Device_Shortcut_AllDevices": "My devices",
|
||||||
|
"Device_Shortcut_AllNodes": "All Nodes",
|
||||||
"Device_Shortcut_Archived": "Archived",
|
"Device_Shortcut_Archived": "Archived",
|
||||||
"Device_Shortcut_Connected": "Connected",
|
"Device_Shortcut_Connected": "Connected",
|
||||||
"Device_Shortcut_Devices": "Devices",
|
"Device_Shortcut_Devices": "Devices",
|
||||||
"Device_Shortcut_DownAlerts": "Down & Offline",
|
"Device_Shortcut_DownAlerts": "Down & Offline",
|
||||||
"Device_Shortcut_DownOnly": "Down",
|
"Device_Shortcut_DownOnly": "Down",
|
||||||
"Device_Shortcut_Favorites": "Favorites",
|
"Device_Shortcut_Favorites": "Favorites",
|
||||||
"Device_Shortcut_NewDevices": "New Devices",
|
"Device_Shortcut_NewDevices": "New devices",
|
||||||
"Device_Shortcut_OnlineChart": "Device presence",
|
"Device_Shortcut_OnlineChart": "Device presence",
|
||||||
"Device_TableHead_AlertDown": "Alert Down",
|
"Device_TableHead_AlertDown": "Alert Down",
|
||||||
"Device_TableHead_Connected_Devices": "Connections",
|
"Device_TableHead_Connected_Devices": "Connections",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Name",
|
"Device_TableHead_Name": "Name",
|
||||||
"Device_TableHead_NetworkSite": "Network Site",
|
"Device_TableHead_NetworkSite": "Network Site",
|
||||||
"Device_TableHead_Owner": "Owner",
|
"Device_TableHead_Owner": "Owner",
|
||||||
|
"Device_TableHead_ParentRelType": "Relationship Type",
|
||||||
"Device_TableHead_Parent_MAC": "Parent network node",
|
"Device_TableHead_Parent_MAC": "Parent network node",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Presence",
|
"Device_TableHead_PresentLastScan": "Presence",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Require NICs Online",
|
||||||
"Device_TableHead_RowID": "Row ID",
|
"Device_TableHead_RowID": "Row ID",
|
||||||
"Device_TableHead_Rowid": "Row ID",
|
"Device_TableHead_Rowid": "Row ID",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -251,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Encryption key",
|
"ENCRYPTION_KEY_name": "Encryption key",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Loading...",
|
"Events_Loading": "Loading…",
|
||||||
"Events_Periodselect_All": "All Info",
|
"Events_Periodselect_All": "All Info",
|
||||||
"Events_Periodselect_LastMonth": "Last Month",
|
"Events_Periodselect_LastMonth": "Last Month",
|
||||||
"Events_Periodselect_LastWeek": "Last Week",
|
"Events_Periodselect_LastWeek": "Last Week",
|
||||||
@@ -262,7 +267,7 @@
|
|||||||
"Events_Shortcut_DownAlerts": "Down Alerts",
|
"Events_Shortcut_DownAlerts": "Down Alerts",
|
||||||
"Events_Shortcut_Events": "Events",
|
"Events_Shortcut_Events": "Events",
|
||||||
"Events_Shortcut_MissSessions": "Missing Sessions",
|
"Events_Shortcut_MissSessions": "Missing Sessions",
|
||||||
"Events_Shortcut_NewDevices": "New Devices",
|
"Events_Shortcut_NewDevices": "New devices",
|
||||||
"Events_Shortcut_Sessions": "Sessions",
|
"Events_Shortcut_Sessions": "Sessions",
|
||||||
"Events_Shortcut_VoidSessions": "Voided Sessions",
|
"Events_Shortcut_VoidSessions": "Voided Sessions",
|
||||||
"Events_TableHead_AdditionalInfo": "Additional Info",
|
"Events_TableHead_AdditionalInfo": "Additional Info",
|
||||||
@@ -288,14 +293,15 @@
|
|||||||
"GRAPHQL_PORT_name": "GraphQL port",
|
"GRAPHQL_PORT_name": "GraphQL port",
|
||||||
"Gen_Action": "Action",
|
"Gen_Action": "Action",
|
||||||
"Gen_Add": "Add",
|
"Gen_Add": "Add",
|
||||||
"Gen_AddDevice": "Add Device",
|
"Gen_AddDevice": "Add device",
|
||||||
"Gen_Add_All": "Add all",
|
"Gen_Add_All": "Add all",
|
||||||
"Gen_All_Devices": "All Devices",
|
"Gen_All_Devices": "All devices",
|
||||||
"Gen_AreYouSure": "Are you sure?",
|
"Gen_AreYouSure": "Are you sure?",
|
||||||
"Gen_Backup": "Run Backup",
|
"Gen_Backup": "Run Backup",
|
||||||
"Gen_Cancel": "Cancel",
|
"Gen_Cancel": "Cancel",
|
||||||
"Gen_Change": "Change",
|
"Gen_Change": "Change",
|
||||||
"Gen_Copy": "Run",
|
"Gen_Copy": "Run",
|
||||||
|
"Gen_CopyToClipboard": "Copy to clipboard",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - It may take a while for the UI to update if a scan is running.",
|
"Gen_DataUpdatedUITakesTime": "OK - It may take a while for the UI to update if a scan is running.",
|
||||||
"Gen_Delete": "Delete",
|
"Gen_Delete": "Delete",
|
||||||
"Gen_DeleteAll": "Delete all",
|
"Gen_DeleteAll": "Delete all",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Error",
|
"Gen_Error": "Error",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
"Gen_Generate": "Generate",
|
"Gen_Generate": "Generate",
|
||||||
|
"Gen_InvalidMac": "Invalid Mac address.",
|
||||||
"Gen_LockedDB": "ERROR - DB might be locked - Check F12 Dev tools -> Console or try later.",
|
"Gen_LockedDB": "ERROR - DB might be locked - Check F12 Dev tools -> Console or try later.",
|
||||||
|
"Gen_NetworkMask": "Network mask",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "Online",
|
"Gen_Online": "Online",
|
||||||
@@ -320,7 +328,8 @@
|
|||||||
"Gen_Select": "Select",
|
"Gen_Select": "Select",
|
||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Select to preview",
|
"Gen_SelectToPreview": "Select to preview",
|
||||||
"Gen_Selected_Devices": "Selected Devices:",
|
"Gen_Selected_Devices": "Selected devices:",
|
||||||
|
"Gen_Subnet": "Subnet",
|
||||||
"Gen_Switch": "Switch",
|
"Gen_Switch": "Switch",
|
||||||
"Gen_Upd": "Updated successfully",
|
"Gen_Upd": "Updated successfully",
|
||||||
"Gen_Upd_Fail": "Update failed",
|
"Gen_Upd_Fail": "Update failed",
|
||||||
@@ -333,15 +342,15 @@
|
|||||||
"Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks documentation</a>.",
|
"Gen_create_new_device_info": "Devices are typically discovered using <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. However, in certain cases, you may need to add devices manually. To explore specific scenarios check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Remote Networks documentation</a>.",
|
||||||
"General_display_name": "General",
|
"General_display_name": "General",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New Device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New Devices</b> after <code>X</code> hours.",
|
"HRS_TO_KEEP_NEWDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices marked as <b>New device</b> will be deleted if their <b>First Session</b> time was older than the specified hours in this setting. Use this setting if you want to auto-delete <b>New devices</b> after <code>X</code> hours.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
"HRS_TO_KEEP_NEWDEV_name": "Delete new devices after",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices that are <b>Offline</b> and their <b>Last Connection</b> date time is older than the specified hours in this setting, will be deleted. Use this setting if you want to auto-delete <b>Offline Devices</b> after <code>X</code> hours being offline.",
|
"HRS_TO_KEEP_OFFDEV_description": "This is a maintenance setting <b>DELETING devices</b>. If enabled (<code>0</code> is disabled), devices that are <b>Offline</b> and their <b>Last Connection</b> date time is older than the specified hours in this setting, will be deleted. Use this setting if you want to auto-delete <b>Offline devices</b> after <code>X</code> hours being offline.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Delete offline devices after",
|
"HRS_TO_KEEP_OFFDEV_name": "Delete offline devices after",
|
||||||
"LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.",
|
"LOADED_PLUGINS_description": "Which Plugins to load. Adding plugins might slow the application. Read more about which plugins need to be enabled, types, or scanning options in the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins docs</a>. Unloaded plugins will lose your settings. Only <code>disabled</code> plugins can be unloaded.",
|
||||||
"LOADED_PLUGINS_name": "Loaded plugins",
|
"LOADED_PLUGINS_name": "Loaded plugins",
|
||||||
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
"LOG_LEVEL_description": "This setting will enable more verbose logging. Useful for debugging events writing into the database.",
|
||||||
"LOG_LEVEL_name": "Print additional logging",
|
"LOG_LEVEL_name": "Print additional logging",
|
||||||
"Loading": "Loading...",
|
"Loading": "Loading…",
|
||||||
"Login_Box": "Enter your password",
|
"Login_Box": "Enter your password",
|
||||||
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
"Login_Default_PWD": "Default password \"123456\" is still active.",
|
||||||
"Login_Info": "Passwords are set via the Set Password plugin. Check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> if you have issues logging in.",
|
"Login_Info": "Passwords are set via the Set Password plugin. Check the <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">SETPWD docs</a> if you have issues logging in.",
|
||||||
@@ -359,20 +368,20 @@
|
|||||||
"Maint_PurgeLog": "Purge log",
|
"Maint_PurgeLog": "Purge log",
|
||||||
"Maint_RestartServer": "Restart server",
|
"Maint_RestartServer": "Restart server",
|
||||||
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
"Maint_Restart_Server_noti_text": "Are you sure you want to restart the backend server? This may casue app inconsistency. Backup your setup first. <br/> <br/> Note: This may take a few minutes.",
|
||||||
"Maintenance_InitCheck": "Init Check",
|
"Maintenance_InitCheck": "Init check",
|
||||||
"Maintenance_InitCheck_Checking": "Checking...",
|
"Maintenance_InitCheck_Checking": "Checking…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Make sure you followed the <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">quick setup guide</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
"Maintenance_InitCheck_Success": "Application initialized succesfully!",
|
||||||
"Maintenance_ReCheck": "Retry Check",
|
"Maintenance_ReCheck": "Retry check",
|
||||||
"Maintenance_Running_Version": "Installed version",
|
"Maintenance_Running_Version": "Installed version",
|
||||||
"Maintenance_Status": "Status",
|
"Maintenance_Status": "Status",
|
||||||
"Maintenance_Title": "Maintenance tools",
|
"Maintenance_Title": "Maintenance tools",
|
||||||
"Maintenance_Tool_DownloadConfig": "Settings Export",
|
"Maintenance_Tool_DownloadConfig": "Settings export",
|
||||||
"Maintenance_Tool_DownloadConfig_text": "Download a full backup of your Settings configuration stored in the <code>app.conf</code> file.",
|
"Maintenance_Tool_DownloadConfig_text": "Download a full backup of your Settings configuration stored in the <code>app.conf</code> file.",
|
||||||
"Maintenance_Tool_DownloadWorkflows": "Workflows Export",
|
"Maintenance_Tool_DownloadWorkflows": "Workflows export",
|
||||||
"Maintenance_Tool_DownloadWorkflows_text": "Download a full backup of your Workflows stored in the <code>workflows.json</code> file.",
|
"Maintenance_Tool_DownloadWorkflows_text": "Download a full backup of your Workflows stored in the <code>workflows.json</code> file.",
|
||||||
"Maintenance_Tool_ExportCSV": "Devices Export (csv)",
|
"Maintenance_Tool_ExportCSV": "Devices export (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "Devices Export (csv)",
|
"Maintenance_Tool_ExportCSV_noti": "Devices export (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Are you sure you want to generate a CSV file?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Are you sure you want to generate a CSV file?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Generate a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by accessing this URL <code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code> or by enabling the <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> plugin.",
|
"Maintenance_Tool_ExportCSV_text": "Generate a CSV (comma separated value) file containing the list of Devices including the Network relationships between Network Nodes and connected devices. You can also trigger this by accessing this URL <code>your_NetAlertX_url/php/server/devices.php?action=ExportCSV</code> or by enabling the <a href=\"settings.php#CSVBCKP_header\">CSV Backup</a> plugin.",
|
||||||
"Maintenance_Tool_ImportCSV": "Devices Import (csv)",
|
"Maintenance_Tool_ImportCSV": "Devices Import (csv)",
|
||||||
@@ -403,26 +412,26 @@
|
|||||||
"Maintenance_Tool_del_ActHistory_noti": "Delete network activity",
|
"Maintenance_Tool_del_ActHistory_noti": "Delete network activity",
|
||||||
"Maintenance_Tool_del_ActHistory_noti_text": "Are you sure you want to reset the network activity?",
|
"Maintenance_Tool_del_ActHistory_noti_text": "Are you sure you want to reset the network activity?",
|
||||||
"Maintenance_Tool_del_ActHistory_text": "The network activity graph is reset. This does not affect the events.",
|
"Maintenance_Tool_del_ActHistory_text": "The network activity graph is reset. This does not affect the events.",
|
||||||
"Maintenance_Tool_del_alldev": "Delete all Devices",
|
"Maintenance_Tool_del_alldev": "Delete all devices",
|
||||||
"Maintenance_Tool_del_alldev_noti": "Delete Devices",
|
"Maintenance_Tool_del_alldev_noti": "Delete devices",
|
||||||
"Maintenance_Tool_del_alldev_noti_text": "Are you sure you want to delete all devices?",
|
"Maintenance_Tool_del_alldev_noti_text": "Are you sure you want to delete all devices?",
|
||||||
"Maintenance_Tool_del_alldev_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices will be deleted from the database.",
|
"Maintenance_Tool_del_alldev_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices will be deleted from the database.",
|
||||||
"Maintenance_Tool_del_allevents": "Delete Events (Reset Presence)",
|
"Maintenance_Tool_del_allevents": "Delete Events (Reset Presence)",
|
||||||
"Maintenance_Tool_del_allevents30": "Delete all Events older than 30 days",
|
"Maintenance_Tool_del_allevents30": "Delete all Events older than 30 days",
|
||||||
"Maintenance_Tool_del_allevents30_noti": "Delete Events",
|
"Maintenance_Tool_del_allevents30_noti": "Delete Events",
|
||||||
"Maintenance_Tool_del_allevents30_noti_text": "Are you sure you want to delete all Events older than 30 days? This resets Presence of all Devices.",
|
"Maintenance_Tool_del_allevents30_noti_text": "Are you sure you want to delete all Events older than 30 days? This resets presence of all devices.",
|
||||||
"Maintenance_Tool_del_allevents30_text": "Before using this function, please make a backup. The deletion cannot be undone. All events older than 30 days in the database will be deleted. At that moment the presence of all devices will be reset. This can lead to invalid sessions. This means that devices are displayed as \"present\" although they are offline. A scan while the device in question is online solves the problem.",
|
"Maintenance_Tool_del_allevents30_text": "Before using this function, please make a backup. The deletion cannot be undone. All events older than 30 days in the database will be deleted. At that moment the presence of all devices will be reset. This can lead to invalid sessions. This means that devices are displayed as \"present\" although they are offline. A scan while the device in question is online solves the problem.",
|
||||||
"Maintenance_Tool_del_allevents_noti": "Delete Events",
|
"Maintenance_Tool_del_allevents_noti": "Delete Events",
|
||||||
"Maintenance_Tool_del_allevents_noti_text": "Are you sure you want to delete all Events? This resets Presence of all Devices.",
|
"Maintenance_Tool_del_allevents_noti_text": "Are you sure you want to delete all Events? This resets presence of all devices.",
|
||||||
"Maintenance_Tool_del_allevents_text": "Before using this function, please make a backup. The deletion cannot be undone. All events in the database will be deleted. At that moment the presence of all devices will be reset. This can lead to invalid sessions. This means that devices are displayed as \"present\" although they are offline. A scan while the device in question is online solves the problem.",
|
"Maintenance_Tool_del_allevents_text": "Before using this function, please make a backup. The deletion cannot be undone. All events in the database will be deleted. At that moment the presence of all devices will be reset. This can lead to invalid sessions. This means that devices are displayed as \"present\" although they are offline. A scan while the device in question is online solves the problem.",
|
||||||
"Maintenance_Tool_del_empty_macs": "Delete Devices with empty MACs",
|
"Maintenance_Tool_del_empty_macs": "Delete devices with empty MACs",
|
||||||
"Maintenance_Tool_del_empty_macs_noti": "Delete Devices",
|
"Maintenance_Tool_del_empty_macs_noti": "Delete devices",
|
||||||
"Maintenance_Tool_del_empty_macs_noti_text": "Are you sure you want to delete all devices with empty MAC addresses?<br>(maybe you prefer to archive it)",
|
"Maintenance_Tool_del_empty_macs_noti_text": "Are you sure you want to delete all devices with empty MAC addresses?<br>(maybe you prefer to archive it)",
|
||||||
"Maintenance_Tool_del_empty_macs_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices without MAC will be deleted from the database.",
|
"Maintenance_Tool_del_empty_macs_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices without MAC will be deleted from the database.",
|
||||||
"Maintenance_Tool_del_selecteddev": "Delete selected devices",
|
"Maintenance_Tool_del_selecteddev": "Delete selected devices",
|
||||||
"Maintenance_Tool_del_selecteddev_text": "Before using this function, please make a backup. The deletion cannot be undone. Selected devices will be deleted from the database.",
|
"Maintenance_Tool_del_selecteddev_text": "Before using this function, please make a backup. The deletion cannot be undone. Selected devices will be deleted from the database.",
|
||||||
"Maintenance_Tool_del_unknowndev": "Delete (unknown) Devices",
|
"Maintenance_Tool_del_unknowndev": "Delete (unknown) devices",
|
||||||
"Maintenance_Tool_del_unknowndev_noti": "Delete (unknown) Devices",
|
"Maintenance_Tool_del_unknowndev_noti": "Delete (unknown) devices",
|
||||||
"Maintenance_Tool_del_unknowndev_noti_text": "Are you sure you want to delete all (unknown) and (name not found) devices?",
|
"Maintenance_Tool_del_unknowndev_noti_text": "Are you sure you want to delete all (unknown) and (name not found) devices?",
|
||||||
"Maintenance_Tool_del_unknowndev_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices named (unknown) will be deleted from the database.",
|
"Maintenance_Tool_del_unknowndev_text": "Before using this function, please make a backup. The deletion cannot be undone. All devices named (unknown) will be deleted from the database.",
|
||||||
"Maintenance_Tool_displayed_columns_text": "Change the visibility and order of the columns in the <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Devices</b></a> page.",
|
"Maintenance_Tool_displayed_columns_text": "Change the visibility and order of the columns in the <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Devices</b></a> page.",
|
||||||
@@ -446,7 +455,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
"Maintenance_Tools_Tab_UISettings": "UI Settings",
|
||||||
"Maintenance_arp_status": "Scan Status",
|
"Maintenance_arp_status": "Scan Status",
|
||||||
"Maintenance_arp_status_off": "is currently disabled",
|
"Maintenance_arp_status_off": "is currently disabled",
|
||||||
"Maintenance_arp_status_on": "scan(s) currently running",
|
"Maintenance_arp_status_on": "scanning in progress",
|
||||||
"Maintenance_built_on": "Built on",
|
"Maintenance_built_on": "Built on",
|
||||||
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
"Maintenance_current_version": "You are up-to-date. Check out what <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">I am working on</a>.",
|
||||||
"Maintenance_database_backup": "DB Backups",
|
"Maintenance_database_backup": "DB Backups",
|
||||||
@@ -466,10 +475,10 @@
|
|||||||
"Maintenance_themeselector_lable": "Select Skin",
|
"Maintenance_themeselector_lable": "Select Skin",
|
||||||
"Maintenance_themeselector_text": "The change takes place on the server side, so it affects all devices in use.",
|
"Maintenance_themeselector_text": "The change takes place on the server side, so it affects all devices in use.",
|
||||||
"Maintenance_version": "App updates",
|
"Maintenance_version": "App updates",
|
||||||
"NETWORK_DEVICE_TYPES_description": "Which device types are allowed to be used as network devices in the Network view. The device type has to match exactly the <code>Type</code> setting on a specific device in Device details. Add it on the Device via the <code>+</code> button. Do not remove existing types, only add new ones.",
|
"NETWORK_DEVICE_TYPES_description": "Which device types are allowed to be used as network devices in the Network view. The device type has to match exactly the <code>Type</code> setting on a specific device in Device details. Add it on the device via the <code>+</code> button. Do not remove existing types, only add new ones.",
|
||||||
"NETWORK_DEVICE_TYPES_name": "Network device types",
|
"NETWORK_DEVICE_TYPES_name": "Network device types",
|
||||||
"Navigation_About": "About",
|
"Navigation_About": "About",
|
||||||
"Navigation_AppEvents": "App Events",
|
"Navigation_AppEvents": "App events",
|
||||||
"Navigation_Devices": "Devices",
|
"Navigation_Devices": "Devices",
|
||||||
"Navigation_Donations": "Donations",
|
"Navigation_Donations": "Donations",
|
||||||
"Navigation_Events": "Events",
|
"Navigation_Events": "Events",
|
||||||
@@ -480,38 +489,40 @@
|
|||||||
"Navigation_Notifications": "Notifications",
|
"Navigation_Notifications": "Notifications",
|
||||||
"Navigation_Plugins": "Plugins",
|
"Navigation_Plugins": "Plugins",
|
||||||
"Navigation_Presence": "Presence",
|
"Navigation_Presence": "Presence",
|
||||||
"Navigation_Report": "Sent Reports",
|
"Navigation_Report": "Sent reports",
|
||||||
"Navigation_Settings": "Settings",
|
"Navigation_Settings": "Settings",
|
||||||
"Navigation_SystemInfo": "System info",
|
"Navigation_SystemInfo": "System info",
|
||||||
"Navigation_Workflows": "Workflows",
|
"Navigation_Workflows": "Workflows",
|
||||||
"Network_Assign": "Connect to the above <i class=\"fa fa-server\"></i> Network node",
|
"Network_Assign": "Connect to the above <i class=\"fa fa-server\"></i> Network node",
|
||||||
"Network_Cant_Assign": "Can't assign the root Internet node as a child leaf node.",
|
"Network_Cant_Assign": "Can't assign the root Internet node as a child leaf node.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "Can't assign, no parent node selected.",
|
||||||
"Network_Configuration_Error": "Configuration Error",
|
"Network_Configuration_Error": "Configuration Error",
|
||||||
"Network_Connected": "Connected devices",
|
"Network_Connected": "Connected devices",
|
||||||
"Network_ManageAdd": "Add Device",
|
"Network_Devices": "Network devices",
|
||||||
"Network_ManageAdd_Name": "Device Name",
|
"Network_ManageAdd": "Add device",
|
||||||
|
"Network_ManageAdd_Name": "Device name",
|
||||||
"Network_ManageAdd_Name_text": "Name without special characters",
|
"Network_ManageAdd_Name_text": "Name without special characters",
|
||||||
"Network_ManageAdd_Port": "Port Count",
|
"Network_ManageAdd_Port": "Port Count",
|
||||||
"Network_ManageAdd_Port_text": "leave blank for wifi and powerline",
|
"Network_ManageAdd_Port_text": "leave blank for wifi and powerline",
|
||||||
"Network_ManageAdd_Submit": "Add Device",
|
"Network_ManageAdd_Submit": "Add device",
|
||||||
"Network_ManageAdd_Type": "Device Type",
|
"Network_ManageAdd_Type": "Device type",
|
||||||
"Network_ManageAdd_Type_text": "-- Select Type --",
|
"Network_ManageAdd_Type_text": "-- Select Type --",
|
||||||
"Network_ManageAssign": "Assign",
|
"Network_ManageAssign": "Assign",
|
||||||
"Network_ManageDel": "Delete Device",
|
"Network_ManageDel": "Delete device",
|
||||||
"Network_ManageDel_Name": "Device to delete",
|
"Network_ManageDel_Name": "Device to delete",
|
||||||
"Network_ManageDel_Name_text": "-- Select Device --",
|
"Network_ManageDel_Name_text": "-- Select device --",
|
||||||
"Network_ManageDel_Submit": "Delete",
|
"Network_ManageDel_Submit": "Delete",
|
||||||
"Network_ManageDevices": "Manage Devices",
|
"Network_ManageDevices": "Manage devices",
|
||||||
"Network_ManageEdit": "Update Device",
|
"Network_ManageEdit": "Update device",
|
||||||
"Network_ManageEdit_ID": "Device to update",
|
"Network_ManageEdit_ID": "Device to update",
|
||||||
"Network_ManageEdit_ID_text": "-- Select Device for editing --",
|
"Network_ManageEdit_ID_text": "-- Select device for editing --",
|
||||||
"Network_ManageEdit_Name": "New Device Name",
|
"Network_ManageEdit_Name": "New device name",
|
||||||
"Network_ManageEdit_Name_text": "Name without special characters",
|
"Network_ManageEdit_Name_text": "Name without special characters",
|
||||||
"Network_ManageEdit_Port": " New Port Count",
|
"Network_ManageEdit_Port": " New Port Count",
|
||||||
"Network_ManageEdit_Port_text": "leave blank for wifi and powerline",
|
"Network_ManageEdit_Port_text": "leave blank for wifi and powerline",
|
||||||
"Network_ManageEdit_Submit": "Save Changes",
|
"Network_ManageEdit_Submit": "Save Changes",
|
||||||
"Network_ManageEdit_Type": "New Device Type",
|
"Network_ManageEdit_Type": "New device type",
|
||||||
"Network_ManageEdit_Type_text": "-- Select Type --",
|
"Network_ManageEdit_Type_text": "-- Select type --",
|
||||||
"Network_ManageLeaf": "Manage assignment",
|
"Network_ManageLeaf": "Manage assignment",
|
||||||
"Network_ManageUnassign": "Unassign",
|
"Network_ManageUnassign": "Unassign",
|
||||||
"Network_NoAssignedDevices": "This network node does not have any assigned devices (leaf nodes). Assign one from bellow or go to the <b><i class=\"fa fa-info-circle\"></i> Details</b> tab of any device in <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Devices</b></a>, and assign it to a network <b><i class=\"fa fa-server\"></i> Node (MAC)</b> and <b><i class=\"fa fa-ethernet\"></i> Port</b> there.",
|
"Network_NoAssignedDevices": "This network node does not have any assigned devices (leaf nodes). Assign one from bellow or go to the <b><i class=\"fa fa-info-circle\"></i> Details</b> tab of any device in <a href=\"devices.php\"><b> <i class=\"fa fa-laptop\"></i> Devices</b></a>, and assign it to a network <b><i class=\"fa fa-server\"></i> Node (MAC)</b> and <b><i class=\"fa fa-ethernet\"></i> Port</b> there.",
|
||||||
@@ -522,13 +533,15 @@
|
|||||||
"Network_Root": "Root node",
|
"Network_Root": "Root node",
|
||||||
"Network_Root_Not_Configured": "Select a network device type, for example a <b>Gateway</b>, in the <b>Type</b> field of the <a href=\"deviceDetails.php?mac=Internet\">the Internet root device</a> to start configuring this screen. <br/><br/> More documentation can be found in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">How to setup your Network page</a> guide",
|
"Network_Root_Not_Configured": "Select a network device type, for example a <b>Gateway</b>, in the <b>Type</b> field of the <a href=\"deviceDetails.php?mac=Internet\">the Internet root device</a> to start configuring this screen. <br/><br/> More documentation can be found in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">How to setup your Network page</a> guide",
|
||||||
"Network_Root_Unconfigurable": "Unconfigurable root",
|
"Network_Root_Unconfigurable": "Unconfigurable root",
|
||||||
|
"Network_ShowArchived": "Show archived",
|
||||||
|
"Network_ShowOffline": "Show offline",
|
||||||
"Network_Table_Hostname": "Hostname",
|
"Network_Table_Hostname": "Hostname",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "State",
|
"Network_Table_State": "State",
|
||||||
"Network_Title": "Network overview",
|
"Network_Title": "Network overview",
|
||||||
"Network_UnassignedDevices": "Unassigned devices",
|
"Network_UnassignedDevices": "Unassigned devices",
|
||||||
"Notifications_All": "All Notifications",
|
"Notifications_All": "All notifications",
|
||||||
"Notifications_Mark_All_Read": "Mark All Read",
|
"Notifications_Mark_All_Read": "Mark all read",
|
||||||
"PIALERT_WEB_PASSWORD_description": "The default password is <code>123456</code>. To change the password run <code>/app/back/pialert-cli</code> in the container or use the <a onclick=\"toggleAllSettings()\" href=\"#SETPWD_RUN\"><code>SETPWD_RUN</code> Set password plugin</a>.",
|
"PIALERT_WEB_PASSWORD_description": "The default password is <code>123456</code>. To change the password run <code>/app/back/pialert-cli</code> in the container or use the <a onclick=\"toggleAllSettings()\" href=\"#SETPWD_RUN\"><code>SETPWD_RUN</code> Set password plugin</a>.",
|
||||||
"PIALERT_WEB_PASSWORD_name": "Login password",
|
"PIALERT_WEB_PASSWORD_name": "Login password",
|
||||||
"PIALERT_WEB_PROTECTION_description": "When enabled a login dialog is displayed. Read below carefully if you get locked out of your instance.",
|
"PIALERT_WEB_PROTECTION_description": "When enabled a login dialog is displayed. Read below carefully if you get locked out of your instance.",
|
||||||
@@ -554,17 +567,17 @@
|
|||||||
"Presence_Key_OnlineNow_desc": "Device detected in the last scan as online.",
|
"Presence_Key_OnlineNow_desc": "Device detected in the last scan as online.",
|
||||||
"Presence_Key_OnlinePast": "Past online",
|
"Presence_Key_OnlinePast": "Past online",
|
||||||
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
"Presence_Key_OnlinePastMiss": "Past online (miss-match)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Device online in the past, but currently offline, but the start session might be missing or has conflicting data. (might be a bug - please submit a PR if you know how to fix it - I'm a bit lost in code here)",
|
"Presence_Key_OnlinePastMiss_desc": "Device online in the past, but currently offline, but the start session might be missing or has conflicting data.",
|
||||||
"Presence_Key_OnlinePast_desc": "Device online in the past, but currently offline.",
|
"Presence_Key_OnlinePast_desc": "Device online in the past, but currently offline.",
|
||||||
"Presence_Loading": "Loading...",
|
"Presence_Loading": "Loading…",
|
||||||
"Presence_Shortcut_AllDevices": "My Devices",
|
"Presence_Shortcut_AllDevices": "My devices",
|
||||||
"Presence_Shortcut_Archived": "Archived",
|
"Presence_Shortcut_Archived": "Archived",
|
||||||
"Presence_Shortcut_Connected": "Connected",
|
"Presence_Shortcut_Connected": "Connected",
|
||||||
"Presence_Shortcut_Devices": "Devices",
|
"Presence_Shortcut_Devices": "Devices",
|
||||||
"Presence_Shortcut_DownAlerts": "Down Alerts",
|
"Presence_Shortcut_DownAlerts": "Down Alerts",
|
||||||
"Presence_Shortcut_Favorites": "Favorites",
|
"Presence_Shortcut_Favorites": "Favorites",
|
||||||
"Presence_Shortcut_NewDevices": "New Devices",
|
"Presence_Shortcut_NewDevices": "New devices",
|
||||||
"Presence_Title": "Presence by Device",
|
"Presence_Title": "Presence by device",
|
||||||
"REFRESH_FQDN_description": "Rescans all devices and refreshes their Fully Qualified Domain Name (FQDN). If disabled, only devices without a known name are scanned to improve performance. In this case, FQDN is updated only during initial device discovery.",
|
"REFRESH_FQDN_description": "Rescans all devices and refreshes their Fully Qualified Domain Name (FQDN). If disabled, only devices without a known name are scanned to improve performance. In this case, FQDN is updated only during initial device discovery.",
|
||||||
"REFRESH_FQDN_name": "Refresh FQDN",
|
"REFRESH_FQDN_name": "Refresh FQDN",
|
||||||
"REPORT_DASHBOARD_URL_description": "This URL is used as the base for generating links in HTML reports (e.g.: emails). Enter full URL starting with <code>http://</code> including the port number (no trailing slash <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "This URL is used as the base for generating links in HTML reports (e.g.: emails). Enter full URL starting with <code>http://</code> including the port number (no trailing slash <code>/</code>).",
|
||||||
@@ -574,8 +587,8 @@
|
|||||||
"REPORT_MAIL_name": "Enable email",
|
"REPORT_MAIL_name": "Enable email",
|
||||||
"REPORT_TITLE": "Report",
|
"REPORT_TITLE": "Report",
|
||||||
"RandomMAC_hover": "Autodetected - indicates if the device randomizes it's MAC address. You can exclude specific MACs with the UI_NOT_RANDOM_MAC setting. Click to find out more.",
|
"RandomMAC_hover": "Autodetected - indicates if the device randomizes it's MAC address. You can exclude specific MACs with the UI_NOT_RANDOM_MAC setting. Click to find out more.",
|
||||||
"Reports_Sent_Log": "Sent Reports Log",
|
"Reports_Sent_Log": "Sent reports log",
|
||||||
"SCAN_SUBNETS_description": "Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">subnets documentation</a> for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface. <br/> <br/> An alternative to on-network scanners is to enable some other Device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Note: The scan time itself depends on the number of IP addresses to check, so set this up carefully with the appropriate network mask and interface.",
|
"SCAN_SUBNETS_description": "Most on-network scanners (ARP-SCAN, NMAP, NSLOOKUP, DIG) rely on scanning specific network interfaces and subnets. Check the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/SUBNETS.md\" target=\"_blank\">subnets documentation</a> for help on this setting, especially VLANs, what VLANs are supported, or how to figure out the network mask and your interface. <br/> <br/> An alternative to on-network scanners is to enable some other device scanners/importers that don't rely on NetAlert<sup>X</sup> having access to the network (UNIFI, dhcp.leases, PiHole, etc.). <br/> <br/> Note: The scan time itself depends on the number of IP addresses to check, so set this up carefully with the appropriate network mask and interface.",
|
||||||
"SCAN_SUBNETS_name": "Networks to scan",
|
"SCAN_SUBNETS_name": "Networks to scan",
|
||||||
"SYSTEM_TITLE": "System Information",
|
"SYSTEM_TITLE": "System Information",
|
||||||
"Setting_Override": "Override value",
|
"Setting_Override": "Override value",
|
||||||
@@ -583,8 +596,9 @@
|
|||||||
"Settings_Metadata_Toggle": "Show/hide metadata for the given setting.",
|
"Settings_Metadata_Toggle": "Show/hide metadata for the given setting.",
|
||||||
"Settings_Show_Description": "Show setting description.",
|
"Settings_Show_Description": "Show setting description.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Device scanner schedules are out-of-sync.",
|
"Settings_device_Scanners_desync": "⚠ Device scanner schedules are out-of-sync.",
|
||||||
"Settings_device_Scanners_desync_popup": "Schedules of devices scanners (<code>*_RUN_SCHD</code>) are not the same. This will result into inconsistent device online/offline notifications. Unless this is intended, please use the same schedule for all enabled <b>🔍Device scanners</b>.",
|
"Settings_device_Scanners_desync_popup": "Schedules of devices scanners (<code>*_RUN_SCHD</code>) are not the same. This will result into inconsistent device online/offline notifications. Unless this is intended, please use the same schedule for all enabled <b>🔍device scanners</b>.",
|
||||||
"Speedtest_Results": "Speedtest Results",
|
"Speedtest_Results": "Speedtest Results",
|
||||||
|
"Systeminfo_AvailableIps": "Available IPs",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "CPU Cores:",
|
"Systeminfo_CPU_Cores": "CPU Cores:",
|
||||||
"Systeminfo_CPU_Name": "CPU Name:",
|
"Systeminfo_CPU_Name": "CPU Name:",
|
||||||
@@ -658,18 +672,18 @@
|
|||||||
"Systeminfo_System_Uname": "Uname:",
|
"Systeminfo_System_Uname": "Uname:",
|
||||||
"Systeminfo_System_Uptime": "Uptime:",
|
"Systeminfo_System_Uptime": "Uptime:",
|
||||||
"Systeminfo_This_Client": "This Client",
|
"Systeminfo_This_Client": "This Client",
|
||||||
"Systeminfo_USB_Devices": "USB Devices",
|
"Systeminfo_USB_Devices": "USB devices",
|
||||||
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Old mount locations detected. Follow <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">this guide</a> to migrate to the new <code>/app/config</code> and <code>/app/db</code> folders and the <code>netalertx</code> container.",
|
"TICKER_MIGRATE_TO_NETALERTX": "⚠ Old mount locations detected. Follow <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/MIGRATION.md\" target=\"_blank\">this guide</a> to migrate to the new <code>/app/config</code> and <code>/app/db</code> folders and the <code>netalertx</code> container.",
|
||||||
"TIMEZONE_description": "Time zone to display stats correctly. Find your time zone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">here</a>.",
|
"TIMEZONE_description": "Time zone to display stats correctly. Find your time zone <a target=\"_blank\" href=\"https://en.wikipedia.org/wiki/List_of_tz_database_time_zones\" rel=\"nofollow\">here</a>.",
|
||||||
"TIMEZONE_name": "Time zone",
|
"TIMEZONE_name": "Time zone",
|
||||||
"UI_DEV_SECTIONS_description": "Select which UI elements to hide in the Devices pages.",
|
"UI_DEV_SECTIONS_description": "Select which UI elements to hide in the devices pages.",
|
||||||
"UI_DEV_SECTIONS_name": "Hide Devices Sections",
|
"UI_DEV_SECTIONS_name": "Hide devices sections",
|
||||||
"UI_ICONS_description": "A list of pre-defined icons. Proceed with caution, the preferred way to add icons is described in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons documentation</a>. You can add a base64-encoded SVG HTML or Font-awesome HTML tag.",
|
"UI_ICONS_description": "A list of pre-defined icons. Proceed with caution, the preferred way to add icons is described in the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/ICONS.md\" target=\"_blank\">Icons documentation</a>. You can add a base64-encoded SVG HTML or Font-awesome HTML tag.",
|
||||||
"UI_ICONS_name": "Pre-defined icons",
|
"UI_ICONS_name": "Pre-defined icons",
|
||||||
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Select the preferred UI language. Help translating or suggest languages in the online portal of <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "UI Language",
|
"UI_LANG_name": "UI Language",
|
||||||
"UI_MY_DEVICES_description": "Devices of which statuses should be shown in the default <b>My Devices</b> view.",
|
"UI_MY_DEVICES_description": "Devices of which statuses should be shown in the default <b>My devices</b> view.",
|
||||||
"UI_MY_DEVICES_name": "Show in My Devices view",
|
"UI_MY_DEVICES_name": "Show in My devices view",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Mac prefixes which shouldn't be marked as Random devices. Enter for example <code>52</code> to exclude devices starting with <code>52:xx:xx:xx:xx:xx</code> from being marked as devices with a random MAC address.",
|
"UI_NOT_RANDOM_MAC_description": "Mac prefixes which shouldn't be marked as Random devices. Enter for example <code>52</code> to exclude devices starting with <code>52:xx:xx:xx:xx:xx</code> from being marked as devices with a random MAC address.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Don't mark as Random",
|
"UI_NOT_RANDOM_MAC_name": "Don't mark as Random",
|
||||||
"UI_PRESENCE_description": "Select what statuses should be shown in the <b>Device presence</b> chart in the <a href=\"/devices.php\" target=\"_blank\">Devices</a> page.",
|
"UI_PRESENCE_description": "Select what statuses should be shown in the <b>Device presence</b> chart in the <a href=\"/devices.php\" target=\"_blank\">Devices</a> page.",
|
||||||
@@ -704,29 +718,26 @@
|
|||||||
"WF_Trigger": "Trigger",
|
"WF_Trigger": "Trigger",
|
||||||
"WF_Trigger_event_type": "Event type",
|
"WF_Trigger_event_type": "Event type",
|
||||||
"WF_Trigger_type": "Trigger type",
|
"WF_Trigger_type": "Trigger type",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Add new icon",
|
"add_icon_event_tooltip": "Add new icon",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Add new value",
|
"add_option_event_tooltip": "Add new value",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
"copy_icons_event_tooltip": "Overwrite icons of all devices with the same device type",
|
||||||
"devices_old": "Refreshing...",
|
"devices_old": "Refreshing…",
|
||||||
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
"general_event_description": "The event you have triggered might take a while until background processes finish. The execution ended once the below execution queue empties (Check the <a href='/maintenance.php#tab_Logging'>error log</a> if you encounter issues). <br/> <br/> Execution queue:",
|
||||||
"general_event_title": "Executing an ad-hoc event",
|
"general_event_title": "Executing an ad-hoc event",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
"go_to_device_event_tooltip": "Navigate to the device",
|
||||||
"go_to_node_event_tooltip": "Navigate to the Network page of the given node",
|
"go_to_node_event_tooltip": "Navigate to the Network page of the given node",
|
||||||
"new_version_available": "A new version is available.",
|
"new_version_available": "A new version is available.",
|
||||||
"report_guid": "Notification guid:",
|
"report_guid": "Notification guid:",
|
||||||
"report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:",
|
"report_guid_missing": "Linked notification not found. There is a small delay between recently sent notifications and them being available. Referesh your page and cache after a few seconds. It's also possible the selected notification have been deleted during maintenance as specified in the <code>DBCLNP_NOTIFI_HIST</code> setting. <br/> <br/>The latest notification is displayed instead. The missing notification has the following GUID:",
|
||||||
"report_select_format": "Select Format:",
|
"report_select_format": "Select Format:",
|
||||||
"report_time": "Notification time:",
|
"report_time": "Notification time:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Enable the setting and save your changes at first before you run it.",
|
"run_event_tooltip": "Enable the setting and save your changes at first before you run it.",
|
||||||
|
"select_icon_event_tooltip": "Select icon",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
"settings_device_scanners": "Device scanners used to discover devices that write into the CurrentScan database table.",
|
"settings_device_scanners": "Device scanners used to discover devices that write into the CurrentScan database table.",
|
||||||
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
||||||
"settings_device_scanners_info": "Load even more Device Scanners with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
"settings_device_scanners_info": "Load more device scanners with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
||||||
"settings_device_scanners_label": "Device scanners",
|
"settings_device_scanners_label": "Device scanners",
|
||||||
"settings_enabled": "Enabled settings",
|
"settings_enabled": "Enabled settings",
|
||||||
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
||||||
@@ -735,7 +746,7 @@
|
|||||||
"settings_imported_label": "Settings imported",
|
"settings_imported_label": "Settings imported",
|
||||||
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
"settings_missing": "Not all settings loaded! High load on the database or app startup sequence. Click the 🔄 reload button in the top.",
|
||||||
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
"settings_missing_block": "Error: Settings not loaded correctly. Click the reload button 🔄 at the top, alternatively, check the browser log for details (F12).",
|
||||||
"settings_old": "Importing settings and re-initializing...",
|
"settings_old": "Importing settings and re-initializing…",
|
||||||
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
"settings_other_scanners": "Other, non-device scanner plugins that are currently enabled.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Other scanners",
|
"settings_other_scanners_label": "Other scanners",
|
||||||
@@ -744,10 +755,9 @@
|
|||||||
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
"settings_publishers_info": "Load more Publishers with the <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a> setting",
|
||||||
"settings_publishers_label": "Publishers",
|
"settings_publishers_label": "Publishers",
|
||||||
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
"settings_readonly": "Can't READ or WRITE <code>app.conf</code>. Try restarting the container and read the <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">file permissions documentation</a>",
|
||||||
"settings_saved": "<br/>Settings saved. <br/> Reloading... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Settings saved. <br/> Reloading… <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
"settings_update_item_warning": "Update the value below. Be careful to follow the previous format. <b>Validation is not performed.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Save your changes at first before you test your settings."
|
"test_event_tooltip": "Save your changes at first before you test your settings."
|
||||||
}
|
}
|
||||||
@@ -5,14 +5,6 @@
|
|||||||
"API_TOKEN_name": "Token de la API",
|
"API_TOKEN_name": "Token de la API",
|
||||||
"API_display_name": "API",
|
"API_display_name": "API",
|
||||||
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
"API_icon": "<i class=\"fa fa-arrow-down-up-across-line\"></i>",
|
||||||
"APPRISE_HOST_description": "URL del host de Apprise que comienza con <code>http://</code> o <code>https://</code>. (no olvide incluir <code>/notify</code> al final)",
|
|
||||||
"APPRISE_HOST_name": "URL del host de Apprise",
|
|
||||||
"APPRISE_PAYLOAD_description": "Seleccione el tipo de carga útil enviada a Apprise. Por ejemplo, <code>html</code> funciona bien con correos electrónicos, <code>text</code> con aplicaciones de chat, como Telegram.",
|
|
||||||
"APPRISE_PAYLOAD_name": "Tipo de carga",
|
|
||||||
"APPRISE_SIZE_description": "El tamaño máximo de la carga útil de información como número de caracteres en la cadena pasada. Si supera el límite, se truncará y se agregará un mensaje <code>(text was truncated)</code>.",
|
|
||||||
"APPRISE_SIZE_name": "Tamaño máximo de carga útil",
|
|
||||||
"APPRISE_URL_description": "Informar de la URL de destino de la notificación. Por ejemplo, para Telegram sería <code>tgram://{bot_token}/{chat_id}</code>.",
|
|
||||||
"APPRISE_URL_name": "URL de notificación de Apprise",
|
|
||||||
"About_Design": "Diseñado para:",
|
"About_Design": "Diseñado para:",
|
||||||
"About_Exit": "Salir",
|
"About_Exit": "Salir",
|
||||||
"About_Title": "Escáner de seguridad de la red y marco de notificaciones",
|
"About_Title": "Escáner de seguridad de la red y marco de notificaciones",
|
||||||
@@ -50,7 +42,7 @@
|
|||||||
"BackDevices_Backup_Failed": "La copia de seguridad se ejecutó parcialmente con éxito. El archivo no se puede crear o está vacío.",
|
"BackDevices_Backup_Failed": "La copia de seguridad se ejecutó parcialmente con éxito. El archivo no se puede crear o está vacío.",
|
||||||
"BackDevices_Backup_okay": "La copia de seguridad ejecutada con éxito con el nuevo archivo",
|
"BackDevices_Backup_okay": "La copia de seguridad ejecutada con éxito con el nuevo archivo",
|
||||||
"BackDevices_DBTools_DelDevError_a": "Error de eliminación del dispositivo",
|
"BackDevices_DBTools_DelDevError_a": "Error de eliminación del dispositivo",
|
||||||
"BackDevices_DBTools_DelDevError_b": "Error de eliminación de dispositivos",
|
"BackDevices_DBTools_DelDevError_b": "Error eliminando dispositivos",
|
||||||
"BackDevices_DBTools_DelDev_a": "Dispositivo eliminado",
|
"BackDevices_DBTools_DelDev_a": "Dispositivo eliminado",
|
||||||
"BackDevices_DBTools_DelDev_b": "Dispositivos eliminados",
|
"BackDevices_DBTools_DelDev_b": "Dispositivos eliminados",
|
||||||
"BackDevices_DBTools_DelEvents": "Eventos eliminados",
|
"BackDevices_DBTools_DelEvents": "Eventos eliminados",
|
||||||
@@ -76,6 +68,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
"DAYS_TO_KEEP_EVENTS_name": "Eliminar eventos anteriores a",
|
||||||
"DISCOVER_PLUGINS_description": "Desactive esta opción para acelerar la inicialización y el ahorro de ajustes. Cuando está desactivado, los plugins no se descubren y no puede añadir nuevos plugins a la configuración <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desactive esta opción para acelerar la inicialización y el ahorro de ajustes. Cuando está desactivado, los plugins no se descubren y no puede añadir nuevos plugins a la configuración <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descubrir plugins",
|
"DISCOVER_PLUGINS_name": "Descubrir plugins",
|
||||||
|
"DevDetail_Children_Title": "Relaciones hijo",
|
||||||
"DevDetail_Copy_Device_Title": "Copiar detalles del dispositivo",
|
"DevDetail_Copy_Device_Title": "Copiar detalles del dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copiar detalles del dispositivo de la lista desplegable. Todo en esta página se sobrescribirá",
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalles del dispositivo de la lista desplegable. Todo en esta página se sobrescribirá",
|
||||||
"DevDetail_CustomProperties_Title": "Propiedades personalizadas",
|
"DevDetail_CustomProperties_Title": "Propiedades personalizadas",
|
||||||
@@ -88,15 +81,15 @@
|
|||||||
"DevDetail_EveandAl_NewDevice_Tooltip": "Mostrará el estado Nuevo para el dispositivo y lo incluirá en las listas cuando el filtro Nuevos dispositivos esté activo. No afecta a las notificaciones.",
|
"DevDetail_EveandAl_NewDevice_Tooltip": "Mostrará el estado Nuevo para el dispositivo y lo incluirá en las listas cuando el filtro Nuevos dispositivos esté activo. No afecta a las notificaciones.",
|
||||||
"DevDetail_EveandAl_RandomMAC": "MAC al azar",
|
"DevDetail_EveandAl_RandomMAC": "MAC al azar",
|
||||||
"DevDetail_EveandAl_ScanCycle": "Ciclo de escaneo",
|
"DevDetail_EveandAl_ScanCycle": "Ciclo de escaneo",
|
||||||
"DevDetail_EveandAl_ScanCycle_a": "Escanear Dispositivo",
|
"DevDetail_EveandAl_ScanCycle_a": "Escanear dispositivo",
|
||||||
"DevDetail_EveandAl_ScanCycle_z": "No Escanear Dispositivo",
|
"DevDetail_EveandAl_ScanCycle_z": "No escanear dispositivo",
|
||||||
"DevDetail_EveandAl_Skip": "Omitir notificaciones repetidas durante",
|
"DevDetail_EveandAl_Skip": "Omitir notificaciones repetidas durante",
|
||||||
"DevDetail_EveandAl_Title": "Configuración de eventos y alertas",
|
"DevDetail_EveandAl_Title": "Configuración de eventos y alertas",
|
||||||
"DevDetail_Events_CheckBox": "Ocultar eventos de conexión",
|
"DevDetail_Events_CheckBox": "Ocultar eventos de conexión",
|
||||||
"DevDetail_GoToNetworkNode": "Navegar a la página de Internet del nodo seleccionado.",
|
"DevDetail_GoToNetworkNode": "Navegar a la página de Internet del nodo seleccionado.",
|
||||||
"DevDetail_Icon": "Icono",
|
"DevDetail_Icon": "Icono",
|
||||||
"DevDetail_Icon_Descr": "Ingrese un nombre de icono de fuente awesome sin el prefijo fa- o con clase completa, por ejemplo: fa fa-skin fa-apple.",
|
"DevDetail_Icon_Descr": "Ingrese un nombre de icono de fuente awesome sin el prefijo fa- o con clase completa, por ejemplo: fa fa-skin fa-apple.",
|
||||||
"DevDetail_Loading": "Cargando ...",
|
"DevDetail_Loading": "Cargando…",
|
||||||
"DevDetail_MainInfo_Comments": "Comentario",
|
"DevDetail_MainInfo_Comments": "Comentario",
|
||||||
"DevDetail_MainInfo_Favorite": "Favorito",
|
"DevDetail_MainInfo_Favorite": "Favorito",
|
||||||
"DevDetail_MainInfo_Group": "Grupo",
|
"DevDetail_MainInfo_Group": "Grupo",
|
||||||
@@ -112,10 +105,11 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Proveedor",
|
"DevDetail_MainInfo_Vendor": "Proveedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Abrir nodo hijo",
|
||||||
"DevDetail_Network_Node_hover": "Seleccione el dispositivo de red principal al que está conectado el dispositivo actual para completar el árbol de Red.",
|
"DevDetail_Network_Node_hover": "Seleccione el dispositivo de red principal al que está conectado el dispositivo actual para completar el árbol de Red.",
|
||||||
"DevDetail_Network_Port_hover": "El puerto al que está conectado este dispositivo en el dispositivo de red principal. Si se deja vacío, se muestra un icono de wifi en el árbol de Red.",
|
"DevDetail_Network_Port_hover": "El puerto al que está conectado este dispositivo en el dispositivo de red principal. Si se deja vacío, se muestra un icono de wifi en el árbol de Red.",
|
||||||
"DevDetail_Nmap_Scans": "Escaneos de Nmap",
|
"DevDetail_Nmap_Scans": "Escaneos de Nmap",
|
||||||
"DevDetail_Nmap_Scans_desc": "Aquí puede ejecutar escaneos NMAP manuales. También puede programar escaneos NMAP automáticos regulares a través del complemento Servicios y puertos (NMAP). Dirígete a <a href='/settings.php' target='_blank'>Configuración</a> para obtener más información",
|
"DevDetail_Nmap_Scans_desc": "Aquí puede ejecutar escaneos NMAP manuales. También puede programar escaneos NMAP automáticos regulares a través del complemento Servicios y puertos (NMAP). Dirígete a <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan\" target=\"_blank\">Documentación</a> para obtener más información",
|
||||||
"DevDetail_Nmap_buttonDefault": "Escaneado predeterminado",
|
"DevDetail_Nmap_buttonDefault": "Escaneado predeterminado",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Escaneo predeterminado: NMAP escanea los 1,000 puertos principales para cada protocolo de escaneo solicitado. Esto atrapa aproximadamente el 93% de los puertos TCP y el 49% de los puertos UDP. (aproximadamente 5 segundos)",
|
"DevDetail_Nmap_buttonDefault_text": "Escaneo predeterminado: NMAP escanea los 1,000 puertos principales para cada protocolo de escaneo solicitado. Esto atrapa aproximadamente el 93% de los puertos TCP y el 49% de los puertos UDP. (aproximadamente 5 segundos)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Escaneo detallado",
|
"DevDetail_Nmap_buttonDetail": "Escaneo detallado",
|
||||||
@@ -187,7 +181,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Enviar comando WOL a ",
|
"DevDetail_Tools_WOL": "Enviar comando WOL a ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "El comando de Wake-on-LAN en enviado a la dirección de escucha. Si el dispositivo no está en la misma subred/vlan que NetAlertX, el dispositivo no responderá.",
|
"DevDetail_Tools_WOL_noti_text": "El comando de Wake-on-LAN en enviado a la dirección de escucha. Si el dispositivo no está en la misma subred/vlan que NetAlertX, el dispositivo no responderá.",
|
||||||
"DevDetail_Type_hover": "El tipo de dispositivo. Si selecciona cualquiera de los dispositivos de la red predefinidos (por ejemplo: AP, Firewall, enrutador, conmutador...), aparecerán en la configuración del árbol de redes como posibles nodos de la red principal.",
|
"DevDetail_Type_hover": "El tipo de dispositivo. Si selecciona cualquiera de los dispositivos de la red predefinidos (por ejemplo: AP, Firewall, enrutador, conmutador ...), aparecerán en la configuración del árbol de redes como posibles nodos de la red principal.",
|
||||||
"DevDetail_Vendor_hover": "El proveedor debe ser detectado automáticamente. Puede sobrescribir o agregar su valor personalizado.",
|
"DevDetail_Vendor_hover": "El proveedor debe ser detectado automáticamente. Puede sobrescribir o agregar su valor personalizado.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Añadir un nuevo icono",
|
"DevDetail_button_AddIcon": "Añadir un nuevo icono",
|
||||||
@@ -204,24 +198,25 @@
|
|||||||
"DevDetail_button_Save": "Guardar",
|
"DevDetail_button_Save": "Guardar",
|
||||||
"DeviceEdit_ValidMacIp": "Introduzca una dirección <b>Mac</b> y una dirección <b>IP</b> válidas .",
|
"DeviceEdit_ValidMacIp": "Introduzca una dirección <b>Mac</b> y una dirección <b>IP</b> válidas .",
|
||||||
"Device_MultiEdit": "Edición múltiple",
|
"Device_MultiEdit": "Edición múltiple",
|
||||||
"Device_MultiEdit_Backup": "Tenga cuidado, ingresar valores incorrectos o romperá su configuración. Por favor, haga una copia de seguridad de su base de datos o de la configuración de los dispositivos primero (<a href=\"php/server/devices.php?action=ExportCSV\">haga clic para descargar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Lea cómo recuperar dispositivos de este archivo en la documentación de <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Copia de seguridad</a>.",
|
"Device_MultiEdit_Backup": "Tenga cuidado, ingresar valores incorrectos o romperá su configuración. Por favor, haga una copia de seguridad de su base de datos o de la configuración de los dispositivos primero (<a href=\"php/server/devices.php?action=ExportCSV\">haga clic para descargar <i class=\"fa-solid fa-download fa-bounce\"></i></a>). Lea cómo recuperar dispositivos de este archivo en la documentación de <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/BACKUPS.md#scenario-2-corrupted-database\" target=\"_blank\">Copia de seguridad</a>. Para aplicar sus cambios haga click en el ícono de <b>Guardar<i class=\"fa-solid fa-save\"></i></b> en cada campo que quiera actualizar.",
|
||||||
"Device_MultiEdit_Fields": "Editar campos:",
|
"Device_MultiEdit_Fields": "Editar campos:",
|
||||||
"Device_MultiEdit_MassActions": "Acciones masivas:",
|
"Device_MultiEdit_MassActions": "Acciones masivas:",
|
||||||
"Device_MultiEdit_Tooltip": "Cuidado. Al hacer clic se aplicará el valor de la izquierda a todos los dispositivos seleccionados anteriormente.",
|
"Device_MultiEdit_Tooltip": "Cuidado. Al hacer clic se aplicará el valor de la izquierda a todos los dispositivos seleccionados anteriormente.",
|
||||||
"Device_Searchbox": "Búsqueda",
|
"Device_Searchbox": "Búsqueda",
|
||||||
"Device_Shortcut_AllDevices": "Mis dispositivos",
|
"Device_Shortcut_AllDevices": "Mis dispositivos",
|
||||||
|
"Device_Shortcut_AllNodes": "Todos los nodos",
|
||||||
"Device_Shortcut_Archived": "Archivado(s)",
|
"Device_Shortcut_Archived": "Archivado(s)",
|
||||||
"Device_Shortcut_Connected": "Conectado(s)",
|
"Device_Shortcut_Connected": "Conectado(s)",
|
||||||
"Device_Shortcut_Devices": "Dispositivos",
|
"Device_Shortcut_Devices": "Dispositivos",
|
||||||
"Device_Shortcut_DownAlerts": "Caído y sin conexión",
|
"Device_Shortcut_DownAlerts": "Caído y sin conexión",
|
||||||
"Device_Shortcut_DownOnly": "Caído",
|
"Device_Shortcut_DownOnly": "Caído",
|
||||||
"Device_Shortcut_Favorites": "Favorito(s)",
|
"Device_Shortcut_Favorites": "Favorito(s)",
|
||||||
"Device_Shortcut_NewDevices": "Nuevo(s)",
|
"Device_Shortcut_NewDevices": "Nuevos dispositivos",
|
||||||
"Device_Shortcut_OnlineChart": "Presencia del dispositivo a lo largo del tiempo",
|
"Device_Shortcut_OnlineChart": "Presencia del dispositivo a lo largo del tiempo",
|
||||||
"Device_TableHead_AlertDown": "Alerta desactivada",
|
"Device_TableHead_AlertDown": "Alerta desactivada",
|
||||||
"Device_TableHead_Connected_Devices": "Conexiones",
|
"Device_TableHead_Connected_Devices": "Conexiones",
|
||||||
"Device_TableHead_CustomProps": "Propiedades / Acciones",
|
"Device_TableHead_CustomProps": "Propiedades / Acciones",
|
||||||
"Device_TableHead_FQDN": "",
|
"Device_TableHead_FQDN": "FQDN",
|
||||||
"Device_TableHead_Favorite": "Favorito",
|
"Device_TableHead_Favorite": "Favorito",
|
||||||
"Device_TableHead_FirstSession": "1ra. sesión",
|
"Device_TableHead_FirstSession": "1ra. sesión",
|
||||||
"Device_TableHead_GUID": "GUID",
|
"Device_TableHead_GUID": "GUID",
|
||||||
@@ -236,9 +231,11 @@
|
|||||||
"Device_TableHead_Name": "Nombre",
|
"Device_TableHead_Name": "Nombre",
|
||||||
"Device_TableHead_NetworkSite": "Lugar de la red",
|
"Device_TableHead_NetworkSite": "Lugar de la red",
|
||||||
"Device_TableHead_Owner": "Propietario",
|
"Device_TableHead_Owner": "Propietario",
|
||||||
|
"Device_TableHead_ParentRelType": "Tipo de relación",
|
||||||
"Device_TableHead_Parent_MAC": "Nodo principal de la red",
|
"Device_TableHead_Parent_MAC": "Nodo principal de la red",
|
||||||
"Device_TableHead_Port": "Puerto",
|
"Device_TableHead_Port": "Puerto",
|
||||||
"Device_TableHead_PresentLastScan": "Historial",
|
"Device_TableHead_PresentLastScan": "Historial",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Requiere que la interfaz de red (NIC) esté conectada",
|
||||||
"Device_TableHead_RowID": "ID de fila",
|
"Device_TableHead_RowID": "ID de fila",
|
||||||
"Device_TableHead_Rowid": "ID de fila",
|
"Device_TableHead_Rowid": "ID de fila",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -261,7 +258,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Llave de cifrado",
|
"ENCRYPTION_KEY_name": "Llave de cifrado",
|
||||||
"Email_display_name": "Email",
|
"Email_display_name": "Email",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Cargando...",
|
"Events_Loading": "Cargando. . .",
|
||||||
"Events_Periodselect_All": "Toda la información",
|
"Events_Periodselect_All": "Toda la información",
|
||||||
"Events_Periodselect_LastMonth": "El mes pasado",
|
"Events_Periodselect_LastMonth": "El mes pasado",
|
||||||
"Events_Periodselect_LastWeek": "La semana pasada",
|
"Events_Periodselect_LastWeek": "La semana pasada",
|
||||||
@@ -272,7 +269,7 @@
|
|||||||
"Events_Shortcut_DownAlerts": "Alerta(s) de caída(s)",
|
"Events_Shortcut_DownAlerts": "Alerta(s) de caída(s)",
|
||||||
"Events_Shortcut_Events": "Eventos",
|
"Events_Shortcut_Events": "Eventos",
|
||||||
"Events_Shortcut_MissSessions": "Sesiones faltantes",
|
"Events_Shortcut_MissSessions": "Sesiones faltantes",
|
||||||
"Events_Shortcut_NewDevices": "Nuevo(s)",
|
"Events_Shortcut_NewDevices": "Nuevos dispositivos",
|
||||||
"Events_Shortcut_Sessions": "Sesiones",
|
"Events_Shortcut_Sessions": "Sesiones",
|
||||||
"Events_Shortcut_VoidSessions": "Sesiones anuladas",
|
"Events_Shortcut_VoidSessions": "Sesiones anuladas",
|
||||||
"Events_TableHead_AdditionalInfo": "Información adicional",
|
"Events_TableHead_AdditionalInfo": "Información adicional",
|
||||||
@@ -300,12 +297,13 @@
|
|||||||
"Gen_Add": "Añadir",
|
"Gen_Add": "Añadir",
|
||||||
"Gen_AddDevice": "Añadir dispositivo",
|
"Gen_AddDevice": "Añadir dispositivo",
|
||||||
"Gen_Add_All": "Añadir todo",
|
"Gen_Add_All": "Añadir todo",
|
||||||
"Gen_All_Devices": "Todo los dispositivos",
|
"Gen_All_Devices": "Todos los dispositivos",
|
||||||
"Gen_AreYouSure": "¿Estás seguro?",
|
"Gen_AreYouSure": "¿Estás seguro?",
|
||||||
"Gen_Backup": "Ejecutar copia de seguridad",
|
"Gen_Backup": "Ejecutar copia de seguridad",
|
||||||
"Gen_Cancel": "Cancelar",
|
"Gen_Cancel": "Cancelar",
|
||||||
"Gen_Change": "Cambiar",
|
"Gen_Change": "Cambiar",
|
||||||
"Gen_Copy": "Ejecutar",
|
"Gen_Copy": "Ejecutar",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "Correcto - La interfaz puede tardar en actualizarse si se está ejecutando un escaneo.",
|
"Gen_DataUpdatedUITakesTime": "Correcto - La interfaz puede tardar en actualizarse si se está ejecutando un escaneo.",
|
||||||
"Gen_Delete": "Eliminar",
|
"Gen_Delete": "Eliminar",
|
||||||
"Gen_DeleteAll": "Eliminar todo",
|
"Gen_DeleteAll": "Eliminar todo",
|
||||||
@@ -313,7 +311,9 @@
|
|||||||
"Gen_Error": "Error",
|
"Gen_Error": "Error",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
"Gen_Generate": "Generar",
|
"Gen_Generate": "Generar",
|
||||||
|
"Gen_InvalidMac": "",
|
||||||
"Gen_LockedDB": "Fallo - La base de datos puede estar bloqueada - Pulsa F1 -> Ajustes de desarrolladores -> Consola o prueba más tarde.",
|
"Gen_LockedDB": "Fallo - La base de datos puede estar bloqueada - Pulsa F1 -> Ajustes de desarrolladores -> Consola o prueba más tarde.",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "Desconectado",
|
"Gen_Offline": "Desconectado",
|
||||||
"Gen_Okay": "Aceptar",
|
"Gen_Okay": "Aceptar",
|
||||||
"Gen_Online": "En linea",
|
"Gen_Online": "En linea",
|
||||||
@@ -331,6 +331,7 @@
|
|||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Seleccionar para previsualizar",
|
"Gen_SelectToPreview": "Seleccionar para previsualizar",
|
||||||
"Gen_Selected_Devices": "Dispositivos seleccionados:",
|
"Gen_Selected_Devices": "Dispositivos seleccionados:",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "Cambiar",
|
"Gen_Switch": "Cambiar",
|
||||||
"Gen_Upd": "Actualizado correctamente",
|
"Gen_Upd": "Actualizado correctamente",
|
||||||
"Gen_Upd_Fail": "Fallo al actualizar",
|
"Gen_Upd_Fail": "Fallo al actualizar",
|
||||||
@@ -343,15 +344,15 @@
|
|||||||
"Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Redes remotas</a>.",
|
"Gen_create_new_device_info": "Los dispositivos se suelen descubrir utilizando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Sin embargo, en algunos casos, es posible que necesite agregar dispositivos manualmente. Para explorar escenarios específicos, consulte la documentación <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">Redes remotas</a>.",
|
||||||
"General_display_name": "General",
|
"General_display_name": "General",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>primera sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
"HRS_TO_KEEP_NEWDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos marcados como <b>Nuevo dispositivo</b> se eliminarán si su fecha de <b>Primera Sesión</b> es anterior a las horas especificadas en este ajuste. Use este ajuste si desea eliminar automáticamente <b>Nuevos dispositivos</b> después de <code>X</code> horas.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
"HRS_TO_KEEP_NEWDEV_name": "Eliminar nuevos dispositivos después",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Se trata de una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos que están <b>sin conexión</b> y su fecha de <b>última conexión</b> es anterior a las horas especificadas en este ajuste se eliminarán. Use este ajuste si desea eliminar automáticamente <b>los dispositivos sin conexión</b> después de que el <code>X</code> horas esté sin conexión.",
|
"HRS_TO_KEEP_OFFDEV_description": "Esta es una configuración de mantenimiento <b>BORRAR dispositivos</b>. Si está activado (<code>0</code> está desactivado), los dispositivos que están <b>Sin Conexión</b> y su fecha de <b>Última Conexión</b> es anterior a las horas especificadas en este ajuste se eliminarán. Use este ajuste si desea eliminar automáticamente <b>los dispositivos sin conexión</b> después de que el <code>X</code> horas esté sin conexión.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Borrar dispositivos sin conexión después de",
|
"HRS_TO_KEEP_OFFDEV_name": "Borrar dispositivos sin conexión después de",
|
||||||
"LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.",
|
"LOADED_PLUGINS_description": "¿Qué plugins cargar?. Agregar plugins puede ralentizar la aplicación. Obtén más información sobre los complementos que deben habilitarse, los tipos o las opciones de escaneo en los documentos de <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugins</a>. Los plugins descargados perderán tu configuración. Solo se pueden descargar los complementos <code>deshabilitados</code>.",
|
||||||
"LOADED_PLUGINS_name": "Plugins cargados",
|
"LOADED_PLUGINS_name": "Plugins cargados",
|
||||||
"LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.",
|
"LOG_LEVEL_description": "Esto hará que el registro tenga más información. Util para depurar que eventos se van guardando en la base de datos.",
|
||||||
"LOG_LEVEL_name": "Imprimir registros adicionales",
|
"LOG_LEVEL_name": "Imprimir registros adicionales",
|
||||||
"Loading": "Cargando...",
|
"Loading": "Cargando . . .",
|
||||||
"Login_Box": "Ingrese su contraseña",
|
"Login_Box": "Ingrese su contraseña",
|
||||||
"Login_Default_PWD": "La contraseña por defecto \"123456\" sigue activa.",
|
"Login_Default_PWD": "La contraseña por defecto \"123456\" sigue activa.",
|
||||||
"Login_Info": "Las contraseñas se establecen a través del plugin Establecer contraseña. Compruebe la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentación SETPWD</a> si tiene problemas para iniciar sesión.",
|
"Login_Info": "Las contraseñas se establecen a través del plugin Establecer contraseña. Compruebe la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentación SETPWD</a> si tiene problemas para iniciar sesión.",
|
||||||
@@ -383,11 +384,11 @@
|
|||||||
"Maint_PurgeLog": "Purgar los registros",
|
"Maint_PurgeLog": "Purgar los registros",
|
||||||
"Maint_RestartServer": "Restablecer el servidor",
|
"Maint_RestartServer": "Restablecer el servidor",
|
||||||
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
"Maint_Restart_Server_noti_text": "¿Estás seguro de que desea reiniciar el servidor backend? Esto puede causar inconsistencia en la aplicación. Primero haga una copia de seguridad de su configuración.<br/> <br/> Nota: Esto puede tardar unos minutos.",
|
||||||
"Maintenance_InitCheck": "",
|
"Maintenance_InitCheck": "Validación inicial",
|
||||||
"Maintenance_InitCheck_Checking": "",
|
"Maintenance_InitCheck_Checking": "Validando . . .",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "",
|
"Maintenance_InitCheck_QuickSetupGuide": "Asegúrece de seguir la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guía de configuración rápida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "",
|
"Maintenance_InitCheck_Success": "¡Aplicación inicializada con éxito!",
|
||||||
"Maintenance_ReCheck": "",
|
"Maintenance_ReCheck": "Reintentar validación",
|
||||||
"Maintenance_Running_Version": "Versión instalada",
|
"Maintenance_Running_Version": "Versión instalada",
|
||||||
"Maintenance_Status": "Situación",
|
"Maintenance_Status": "Situación",
|
||||||
"Maintenance_Title": "Herramientas de mantenimiento",
|
"Maintenance_Title": "Herramientas de mantenimiento",
|
||||||
@@ -470,7 +471,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Ajustes de interfaz",
|
"Maintenance_Tools_Tab_UISettings": "Ajustes de interfaz",
|
||||||
"Maintenance_arp_status": "Estado de la exploración",
|
"Maintenance_arp_status": "Estado de la exploración",
|
||||||
"Maintenance_arp_status_off": "está actualmente deshabilitado",
|
"Maintenance_arp_status_off": "está actualmente deshabilitado",
|
||||||
"Maintenance_arp_status_on": "escaneo(s) actualmente en ejecución",
|
"Maintenance_arp_status_on": "escaneo en ejecución",
|
||||||
"Maintenance_built_on": "Creada",
|
"Maintenance_built_on": "Creada",
|
||||||
"Maintenance_current_version": "No hay actualizaciones disponibles. Comprueba en que <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">se está trabajando</a>.",
|
"Maintenance_current_version": "No hay actualizaciones disponibles. Comprueba en que <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">se está trabajando</a>.",
|
||||||
"Maintenance_database_backup": "Copias de seguridad de BD",
|
"Maintenance_database_backup": "Copias de seguridad de BD",
|
||||||
@@ -521,8 +522,10 @@
|
|||||||
"Navigation_Workflows": "Flujo de trabajo",
|
"Navigation_Workflows": "Flujo de trabajo",
|
||||||
"Network_Assign": "Conectar al nodo de <i class=\"fa fa-server\"></i> red",
|
"Network_Assign": "Conectar al nodo de <i class=\"fa fa-server\"></i> red",
|
||||||
"Network_Cant_Assign": "No se puede asignar el nodo principal de Internet como nodo secundario.",
|
"Network_Cant_Assign": "No se puede asignar el nodo principal de Internet como nodo secundario.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "No es posible asignar, no se ha seleccionado un nodo padre.",
|
||||||
"Network_Configuration_Error": "Error en la configuración",
|
"Network_Configuration_Error": "Error en la configuración",
|
||||||
"Network_Connected": "Dispositivos conectados",
|
"Network_Connected": "Dispositivos conectados",
|
||||||
|
"Network_Devices": "Dispositivos de red",
|
||||||
"Network_ManageAdd": "Añadir dispositivo",
|
"Network_ManageAdd": "Añadir dispositivo",
|
||||||
"Network_ManageAdd_Name": "Nombre del dispositivo",
|
"Network_ManageAdd_Name": "Nombre del dispositivo",
|
||||||
"Network_ManageAdd_Name_text": "Nombre sin caracteres especiales",
|
"Network_ManageAdd_Name_text": "Nombre sin caracteres especiales",
|
||||||
@@ -557,6 +560,8 @@
|
|||||||
"Network_Root": "Nodo principal",
|
"Network_Root": "Nodo principal",
|
||||||
"Network_Root_Not_Configured": "Seleccione un tipo de dispositivo de red, por ejemplo un <b>Gateway</b>, en el campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo principal de Internet</a> para empezar a configurar esta pantalla. <br/><br/>Puede encontrar más documentación en la guía <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">¿Cómo configurar su página de Red?</a>",
|
"Network_Root_Not_Configured": "Seleccione un tipo de dispositivo de red, por ejemplo un <b>Gateway</b>, en el campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo principal de Internet</a> para empezar a configurar esta pantalla. <br/><br/>Puede encontrar más documentación en la guía <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">¿Cómo configurar su página de Red?</a>",
|
||||||
"Network_Root_Unconfigurable": "Root no configurable",
|
"Network_Root_Unconfigurable": "Root no configurable",
|
||||||
|
"Network_ShowArchived": "Mostrar archivado",
|
||||||
|
"Network_ShowOffline": "Mostrar fuera de línea",
|
||||||
"Network_Table_Hostname": "Nombre de host",
|
"Network_Table_Hostname": "Nombre de host",
|
||||||
"Network_Table_IP": "Dirección IP",
|
"Network_Table_IP": "Dirección IP",
|
||||||
"Network_Table_State": "Estado",
|
"Network_Table_State": "Estado",
|
||||||
@@ -593,9 +598,9 @@
|
|||||||
"Presence_Key_OnlineNow_desc": "Dispositivo detectado en el último escaneo como conectado.",
|
"Presence_Key_OnlineNow_desc": "Dispositivo detectado en el último escaneo como conectado.",
|
||||||
"Presence_Key_OnlinePast": "Anterior en línea",
|
"Presence_Key_OnlinePast": "Anterior en línea",
|
||||||
"Presence_Key_OnlinePastMiss": "Anterior en línea (miss-match)",
|
"Presence_Key_OnlinePastMiss": "Anterior en línea (miss-match)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Dispositivo en línea en el pasado, pero actualmente desconectado, pero la sesión de inicio podría estar faltando o tiene datos conflictivos. (Puede ser un error - por favor envíe un PR si sabe cómo solucionarlo - estoy un poco perdido en código)",
|
"Presence_Key_OnlinePastMiss_desc": "Dispositivo en línea en el pasado, pero actualmente desconectado, pero la sesión de inicio podría estar faltando o tiene datos conflictivos.",
|
||||||
"Presence_Key_OnlinePast_desc": "Dispositivo en línea en el pasado, pero actualmente no conectado.",
|
"Presence_Key_OnlinePast_desc": "Dispositivo en línea en el pasado, pero actualmente no conectado.",
|
||||||
"Presence_Loading": "Cargando...",
|
"Presence_Loading": "Cargando. . .",
|
||||||
"Presence_Shortcut_AllDevices": "Mis dispositivos",
|
"Presence_Shortcut_AllDevices": "Mis dispositivos",
|
||||||
"Presence_Shortcut_Archived": "Archivado(s)",
|
"Presence_Shortcut_Archived": "Archivado(s)",
|
||||||
"Presence_Shortcut_Connected": "Conectado(s)",
|
"Presence_Shortcut_Connected": "Conectado(s)",
|
||||||
@@ -603,9 +608,9 @@
|
|||||||
"Presence_Shortcut_DownAlerts": "Alerta(s) de caída(s)",
|
"Presence_Shortcut_DownAlerts": "Alerta(s) de caída(s)",
|
||||||
"Presence_Shortcut_Favorites": "Favorito(s)",
|
"Presence_Shortcut_Favorites": "Favorito(s)",
|
||||||
"Presence_Shortcut_NewDevices": "Nuevo(s)",
|
"Presence_Shortcut_NewDevices": "Nuevo(s)",
|
||||||
"Presence_Title": "Historial por dispositivo",
|
"Presence_Title": "Presencia por dispositivo",
|
||||||
"REFRESH_FQDN_description": "",
|
"REFRESH_FQDN_description": "Vuelve a escanear todos los dispositivos y actualiza su nombre de dominio completo (FQDN). Si esta opción está deshabilitada, solo se escanean los dispositivos sin nombre conocido para mejorar el rendimiento. En este caso, el FQDN se actualiza solo durante la detección inicial de dispositivos.",
|
||||||
"REFRESH_FQDN_name": "",
|
"REFRESH_FQDN_name": "Refrescar FQDN",
|
||||||
"REPORT_APPRISE_description": "Habilitar el envío de notificaciones a través de <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
"REPORT_APPRISE_description": "Habilitar el envío de notificaciones a través de <a target=\"_blank\" href=\"https://hub.docker.com/r/caronc/apprise\">Apprise</a>.",
|
||||||
"REPORT_APPRISE_name": "Habilitar Apprise",
|
"REPORT_APPRISE_name": "Habilitar Apprise",
|
||||||
"REPORT_DASHBOARD_URL_description": "Esta URL se utiliza como base para generar enlaces en los correos electrónicos. Ingrese la URL completa que comienza con <code>http://</code>, incluido el número de puerto (sin barra inclinada al final <code>/</code>).",
|
"REPORT_DASHBOARD_URL_description": "Esta URL se utiliza como base para generar enlaces en los correos electrónicos. Ingrese la URL completa que comienza con <code>http://</code>, incluido el número de puerto (sin barra inclinada al final <code>/</code>).",
|
||||||
@@ -653,6 +658,7 @@
|
|||||||
"Settings_device_Scanners_desync": "⚠ Los horarios del escáner de los dispositivos no están sincronizados.",
|
"Settings_device_Scanners_desync": "⚠ Los horarios del escáner de los dispositivos no están sincronizados.",
|
||||||
"Settings_device_Scanners_desync_popup": "Los horarios de escáneres de dispositivos (<code> *_RUN_SCHD</code> ) no son lo mismo. Esto resultará en notificaciones inconsistentes del dispositivo en línea/fuera de línea. A menos que sea así, utilice el mismo horario para todos los habilitados.<b> 🔍Escáneres de dispositivos</b> .",
|
"Settings_device_Scanners_desync_popup": "Los horarios de escáneres de dispositivos (<code> *_RUN_SCHD</code> ) no son lo mismo. Esto resultará en notificaciones inconsistentes del dispositivo en línea/fuera de línea. A menos que sea así, utilice el mismo horario para todos los habilitados.<b> 🔍Escáneres de dispositivos</b> .",
|
||||||
"Speedtest_Results": "Resultados de la prueba de velocidad",
|
"Speedtest_Results": "Resultados de la prueba de velocidad",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "Núcleos de CPU:",
|
"Systeminfo_CPU_Cores": "Núcleos de CPU:",
|
||||||
"Systeminfo_CPU_Name": "Nombre de la CPU:",
|
"Systeminfo_CPU_Name": "Nombre de la CPU:",
|
||||||
@@ -783,29 +789,26 @@
|
|||||||
"Webhooks_display_name": "Webhooks",
|
"Webhooks_display_name": "Webhooks",
|
||||||
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
"Webhooks_icon": "<i class=\"fa fa-circle-nodes\"></i>",
|
||||||
"Webhooks_settings_group": "<i class=\"fa fa-circle-nodes\"></i> Webhooks",
|
"Webhooks_settings_group": "<i class=\"fa fa-circle-nodes\"></i> Webhooks",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Agregar nuevo icono",
|
"add_icon_event_tooltip": "Agregar nuevo icono",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Añadir nuevo valor",
|
"add_option_event_tooltip": "Añadir nuevo valor",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sobrescribir los iconos de todos los dispositivos con el mismo tipo de dispositivo",
|
"copy_icons_event_tooltip": "Sobrescribir los iconos de todos los dispositivos con el mismo tipo de dispositivo",
|
||||||
"devices_old": "Volviendo a actualizar....",
|
"devices_old": "Refrescando . . .",
|
||||||
"general_event_description": "El evento que ha activado puede tardar un poco hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vacía la cola de ejecución a continuación (consulte el <a href='/maintenance.php#tab_Logging'>registro de errores</a> si encuentra problemas). <br/> <br/> Cola de ejecución:",
|
"general_event_description": "El evento que ha activado puede tardar un poco hasta que finalicen los procesos en segundo plano. La ejecución finalizó una vez que se vacía la cola de ejecución a continuación (consulte el <a href='/maintenance.php#tab_Logging'>registro de errores</a> si encuentra problemas). <br/> <br/> Cola de ejecución:",
|
||||||
"general_event_title": "Ejecutar un evento ad-hoc",
|
"general_event_title": "Ejecutar un evento ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
"go_to_device_event_tooltip": "Navegar al dispositivo",
|
||||||
"go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado",
|
"go_to_node_event_tooltip": "Vaya a la página de Red del nodo indicado",
|
||||||
"new_version_available": "Una nueva versión está disponible.",
|
"new_version_available": "Una nueva versión está disponible.",
|
||||||
"report_guid": "Guía de las notificaciones:",
|
"report_guid": "Guía de las notificaciones:",
|
||||||
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
|
"report_guid_missing": "No se ha encontrado la notificación vinculada. Hay un pequeño retraso entre las notificaciones enviadas recientemente y su disponibilidad. Actualiza tu página y la caché después de unos segundos. También es posible que la notificación seleccionada se haya eliminado durante el mantenimiento, tal y como se especifica en la configuración <code>de DBCLNP_NOTIFI_HIST</code>. <br/> <br/>En su lugar, se muestra la notificación más reciente. La notificación que falta tiene el siguiente GUID:",
|
||||||
"report_select_format": "Selecciona el formato:",
|
"report_select_format": "Selecciona el formato:",
|
||||||
"report_time": "Hora de la notificación:",
|
"report_time": "Hora de la notificación:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Activa el ajuste y guarda tus cambios antes de ejecutarlo.",
|
"run_event_tooltip": "Activa el ajuste y guarda tus cambios antes de ejecutarlo.",
|
||||||
|
"select_icon_event_tooltip": "Seleccionar ícono",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Núcleo",
|
"settings_core_label": "Núcleo",
|
||||||
"settings_device_scanners": "Los escáneres de los dispositivos se utilizan para descubrir dispositivos que escriben en la tabla de base de datos de CurrentScan.",
|
"settings_device_scanners": "Los escáneres de los dispositivos se utilizan para descubrir dispositivos que escriben en la tabla de base de datos de CurrentScan.",
|
||||||
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
||||||
"settings_device_scanners_info": "Cargue aún más escáneres de dispositivos con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_device_scanners_info": "Cargue más escáneres de dispositivos con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_device_scanners_label": "Escáneres de dispositivos",
|
"settings_device_scanners_label": "Escáneres de dispositivos",
|
||||||
"settings_enabled": "Configuración activada",
|
"settings_enabled": "Configuración activada",
|
||||||
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
||||||
@@ -814,7 +817,7 @@
|
|||||||
"settings_imported_label": "Configuración importada",
|
"settings_imported_label": "Configuración importada",
|
||||||
"settings_missing": "No se han cargado todos los ajustes. Carga alta en la base de datos o secuencia de inicio de la app. Haz clic en el botón 🔄 recargar en la parte superior.",
|
"settings_missing": "No se han cargado todos los ajustes. Carga alta en la base de datos o secuencia de inicio de la app. Haz clic en el botón 🔄 recargar en la parte superior.",
|
||||||
"settings_missing_block": "Error: La configuración no se ha cargado correctamente. Haga clic en el botón de recarga 🔄 en la parte superior, alternativamente, compruebe el registro del navegador para más detalles (F12).",
|
"settings_missing_block": "Error: La configuración no se ha cargado correctamente. Haga clic en el botón de recarga 🔄 en la parte superior, alternativamente, compruebe el registro del navegador para más detalles (F12).",
|
||||||
"settings_old": "Importar ajustes y reiniciar...",
|
"settings_old": "Importar ajustes y reiniciar. . .",
|
||||||
"settings_other_scanners": "Otros plugins de escáner no relacionados con dispositivos que están activados actualmente.",
|
"settings_other_scanners": "Otros plugins de escáner no relacionados con dispositivos que están activados actualmente.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Otros escáneres",
|
"settings_other_scanners_label": "Otros escáneres",
|
||||||
@@ -823,10 +826,9 @@
|
|||||||
"settings_publishers_info": "Cargue más editor@s con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Cargue más editor@s con el ajuste <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editores",
|
"settings_publishers_label": "Editores",
|
||||||
"settings_readonly": "No se puede LEER ni ESCRIBIR <code>app.conf</code>. Intente reiniciar el contenedor y lea la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentación de permisos de archivo</a>",
|
"settings_readonly": "No se puede LEER ni ESCRIBIR <code>app.conf</code>. Intente reiniciar el contenedor y lea la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentación de permisos de archivo</a>",
|
||||||
"settings_saved": "<br/>Ajustes guardados. <br/> Recargando... <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Ajustes guardados. <br/> Recargando. . . <br/><i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
|
"settings_update_item_warning": "Actualice el valor a continuación. Tenga cuidado de seguir el formato anterior. <b>O la validación no se realiza.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
|
"test_event_tooltip": "Guarda tus cambios antes de probar nuevos ajustes."
|
||||||
}
|
}
|
||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Se déconnecter",
|
"About_Exit": "Se déconnecter",
|
||||||
"About_Title": "Analyse de la sécurité du réseau et cadre de notification",
|
"About_Title": "Analyse de la sécurité du réseau et cadre de notification",
|
||||||
"AppEvents_AppEventProcessed": "Traité(s)",
|
"AppEvents_AppEventProcessed": "Traité(s)",
|
||||||
"AppEvents_DateTimeCreated": "Connecté",
|
"AppEvents_DateTimeCreated": "Identifié",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "GUID d’événements de l'application",
|
"AppEvents_GUID": "GUID d’événements de l'application",
|
||||||
"AppEvents_Helper1": "Assistant 1",
|
"AppEvents_Helper1": "Assistant 1",
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
"DAYS_TO_KEEP_EVENTS_name": "Supprimer les événements plus anciens que",
|
||||||
"DISCOVER_PLUGINS_description": "Désactivez cette option pour accélérer le démarrage et l'enregistrement de paramètres. Quand elle est désactivée, les plugins ne sont pas découverts, et vous ne pouvez près ajouter de nouveaux plugins au paramètre <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Désactivez cette option pour accélérer le démarrage et l'enregistrement de paramètres. Quand elle est désactivée, les plugins ne sont pas découverts, et vous ne pouvez près ajouter de nouveaux plugins au paramètre <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Découvrir des plugins",
|
"DISCOVER_PLUGINS_name": "Découvrir des plugins",
|
||||||
|
"DevDetail_Children_Title": "Relations avec les éléments inférieurs",
|
||||||
"DevDetail_Copy_Device_Title": "Copier les détails de l'appareil",
|
"DevDetail_Copy_Device_Title": "Copier les détails de l'appareil",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copier les détails de l'appareil dans la liste déroulante. Tout ce qui se trouve sur cette page sera remplacé",
|
"DevDetail_Copy_Device_Tooltip": "Copier les détails de l'appareil dans la liste déroulante. Tout ce qui se trouve sur cette page sera remplacé",
|
||||||
"DevDetail_CustomProperties_Title": "Champs personnalisés",
|
"DevDetail_CustomProperties_Title": "Champs personnalisés",
|
||||||
@@ -102,10 +103,11 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Fabricant",
|
"DevDetail_MainInfo_Vendor": "Fabricant",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Ouvrir le noeud de l'élément inférieur",
|
||||||
"DevDetail_Network_Node_hover": "Sélectionner l'appareil du réseau principal auquel cet appareil est connecté afin de compléter l'arborescence du Réseau.",
|
"DevDetail_Network_Node_hover": "Sélectionner l'appareil du réseau principal auquel cet appareil est connecté afin de compléter l'arborescence du Réseau.",
|
||||||
"DevDetail_Network_Port_hover": "Le port auquel cet appareil est connecté sur l'appareil du réseau principal. Si vide, une icône Wifi est affichée dans l'arborescence du Réseau.",
|
"DevDetail_Network_Port_hover": "Le port auquel cet appareil est connecté sur l'appareil du réseau principal. Si vide, une icône Wifi est affichée dans l'arborescence du Réseau.",
|
||||||
"DevDetail_Nmap_Scans": "Scans manuels via Nmap",
|
"DevDetail_Nmap_Scans": "Scans manuels via Nmap",
|
||||||
"DevDetail_Nmap_Scans_desc": "Vous pouvez lancer des scans NMAP manuels. Vous pouvez aussi programmer des sans réguliers via le plugin Services & Ports (NMAP). Aller dans les <a href='/settings.php' target='_blank'>Paramètres</a> pour plus de details",
|
"DevDetail_Nmap_Scans_desc": "Vous pouvez lancer des scans NMAP manuels. Vous pouvez aussi programmer des sans réguliers via le plugin Services & Ports (NMAP). Aller dans les <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan\" target=\"_blank\">Docs</a> pour plus de details",
|
||||||
"DevDetail_Nmap_buttonDefault": "Scan par défaut",
|
"DevDetail_Nmap_buttonDefault": "Scan par défaut",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Scan par défaut : NMAP scanne les 1 000 premiers ports pour chaque demande de scan de protocole. Cela couvre environ 93% des ports TCP et 49% des ports UDP (environ 5 secondes)",
|
"DevDetail_Nmap_buttonDefault_text": "Scan par défaut : NMAP scanne les 1 000 premiers ports pour chaque demande de scan de protocole. Cela couvre environ 93% des ports TCP et 49% des ports UDP (environ 5 secondes)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Scan détaillé",
|
"DevDetail_Nmap_buttonDetail": "Scan détaillé",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
"Device_MultiEdit_Tooltip": "Attention. Ceci va appliquer la valeur de gauche à tous les appareils sélectionnés au-dessus.",
|
||||||
"Device_Searchbox": "Rechercher",
|
"Device_Searchbox": "Rechercher",
|
||||||
"Device_Shortcut_AllDevices": "Mes appareils",
|
"Device_Shortcut_AllDevices": "Mes appareils",
|
||||||
|
"Device_Shortcut_AllNodes": "Tous les nœuds",
|
||||||
"Device_Shortcut_Archived": "Archivés",
|
"Device_Shortcut_Archived": "Archivés",
|
||||||
"Device_Shortcut_Connected": "Connectés",
|
"Device_Shortcut_Connected": "Connectés",
|
||||||
"Device_Shortcut_Devices": "Appareils",
|
"Device_Shortcut_Devices": "Appareils",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nom",
|
"Device_TableHead_Name": "Nom",
|
||||||
"Device_TableHead_NetworkSite": "Site Réseau",
|
"Device_TableHead_NetworkSite": "Site Réseau",
|
||||||
"Device_TableHead_Owner": "Propriétaire",
|
"Device_TableHead_Owner": "Propriétaire",
|
||||||
|
"Device_TableHead_ParentRelType": "Type de relation",
|
||||||
"Device_TableHead_Parent_MAC": "Nœud réseau principal",
|
"Device_TableHead_Parent_MAC": "Nœud réseau principal",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "Présence",
|
"Device_TableHead_PresentLastScan": "Présence",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Nécessite que l'interface réseau (NIC) soit connectée",
|
||||||
"Device_TableHead_RowID": "ID de colonne",
|
"Device_TableHead_RowID": "ID de colonne",
|
||||||
"Device_TableHead_Rowid": "ID de colonne",
|
"Device_TableHead_Rowid": "ID de colonne",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "Annuler",
|
"Gen_Cancel": "Annuler",
|
||||||
"Gen_Change": "Changement",
|
"Gen_Change": "Changement",
|
||||||
"Gen_Copy": "Lancer",
|
"Gen_Copy": "Lancer",
|
||||||
|
"Gen_CopyToClipboard": "Copier vers le presse-papier",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - cela peut prendre du temps à l'interface pour se mettre à jour si un scan est en cours.",
|
"Gen_DataUpdatedUITakesTime": "OK - cela peut prendre du temps à l'interface pour se mettre à jour si un scan est en cours.",
|
||||||
"Gen_Delete": "Supprimer",
|
"Gen_Delete": "Supprimer",
|
||||||
"Gen_DeleteAll": "Supprimer tous",
|
"Gen_DeleteAll": "Supprimer tous",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Erreur",
|
"Gen_Error": "Erreur",
|
||||||
"Gen_Filter": "Filtrer",
|
"Gen_Filter": "Filtrer",
|
||||||
"Gen_Generate": "Générer",
|
"Gen_Generate": "Générer",
|
||||||
|
"Gen_InvalidMac": "Adresse MAC invalide.",
|
||||||
"Gen_LockedDB": "Erreur - La base de données est peut-être verrouillée - Vérifier avec les outils de dév via F12 -> Console ou essayer plus tard.",
|
"Gen_LockedDB": "Erreur - La base de données est peut-être verrouillée - Vérifier avec les outils de dév via F12 -> Console ou essayer plus tard.",
|
||||||
|
"Gen_NetworkMask": "Masque réseau",
|
||||||
"Gen_Offline": "Hors ligne",
|
"Gen_Offline": "Hors ligne",
|
||||||
"Gen_Okay": "OK",
|
"Gen_Okay": "OK",
|
||||||
"Gen_Online": "En ligne",
|
"Gen_Online": "En ligne",
|
||||||
@@ -320,7 +328,8 @@
|
|||||||
"Gen_Select": "Sélectionner",
|
"Gen_Select": "Sélectionner",
|
||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Sélectionnez pour prévisualiser",
|
"Gen_SelectToPreview": "Sélectionnez pour prévisualiser",
|
||||||
"Gen_Selected_Devices": "Appareils sélectionnés :",
|
"Gen_Selected_Devices": "Appareils sélectionnés :",
|
||||||
|
"Gen_Subnet": "Sous-réseau",
|
||||||
"Gen_Switch": "Basculer",
|
"Gen_Switch": "Basculer",
|
||||||
"Gen_Upd": "Mise à jour réussie",
|
"Gen_Upd": "Mise à jour réussie",
|
||||||
"Gen_Upd_Fail": "Échec de la mise à jour",
|
"Gen_Upd_Fail": "Échec de la mise à jour",
|
||||||
@@ -341,7 +350,7 @@
|
|||||||
"LOADED_PLUGINS_name": "Plugins chargés",
|
"LOADED_PLUGINS_name": "Plugins chargés",
|
||||||
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
"LOG_LEVEL_description": "Ce paramètre active une journalisation dans les logs plus verbeuse. Cela est utile pour identifier les événements écrivant dans la base de données.",
|
||||||
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
"LOG_LEVEL_name": "Afficher des journaux de log additionnels",
|
||||||
"Loading": "Chargement...",
|
"Loading": "Chargement…",
|
||||||
"Login_Box": "Saisir votre mot de passe",
|
"Login_Box": "Saisir votre mot de passe",
|
||||||
"Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.",
|
"Login_Default_PWD": "Le mot de passe par défaut \"123456\" est encore actif.",
|
||||||
"Login_Info": "Les mots de passe sont définis via le plugin Set Password. Vérifiez la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentation de SETPWD</a> si vous rencontrez des difficultés à vous identifier.",
|
"Login_Info": "Les mots de passe sont définis via le plugin Set Password. Vérifiez la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentation de SETPWD</a> si vous rencontrez des difficultés à vous identifier.",
|
||||||
@@ -360,7 +369,7 @@
|
|||||||
"Maint_RestartServer": "Relancer le serveur",
|
"Maint_RestartServer": "Relancer le serveur",
|
||||||
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
"Maint_Restart_Server_noti_text": "Êtes-vous sûr de vouloir relancer le serveur back-end ? Cela peut causer des incohérences avec l'application. Sauvegarder vos paramètres en premier lieu. <br/> <br/> Remarque : cela peut prendre quelques minutes.",
|
||||||
"Maintenance_InitCheck": "Vérification initiale",
|
"Maintenance_InitCheck": "Vérification initiale",
|
||||||
"Maintenance_InitCheck_Checking": "Vérification...",
|
"Maintenance_InitCheck_Checking": "Vérification…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assurez-vous de suivre le <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guide de démarrage rapide</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Application initialisée avec succès !",
|
"Maintenance_InitCheck_Success": "Application initialisée avec succès !",
|
||||||
"Maintenance_ReCheck": "Relancer la vérification",
|
"Maintenance_ReCheck": "Relancer la vérification",
|
||||||
@@ -446,7 +455,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface",
|
"Maintenance_Tools_Tab_UISettings": "Paramètres de l'interface",
|
||||||
"Maintenance_arp_status": "État du scan",
|
"Maintenance_arp_status": "État du scan",
|
||||||
"Maintenance_arp_status_off": "est actuellement désactivé",
|
"Maintenance_arp_status_off": "est actuellement désactivé",
|
||||||
"Maintenance_arp_status_on": "scan(s) actuellement en cours",
|
"Maintenance_arp_status_on": "scan en cours",
|
||||||
"Maintenance_built_on": "Construit sur",
|
"Maintenance_built_on": "Construit sur",
|
||||||
"Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.",
|
"Maintenance_current_version": "Vous êtes à jour. Découvrez sur quoi <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">je travaille</a>.",
|
||||||
"Maintenance_database_backup": "Sauvegardes de base de données",
|
"Maintenance_database_backup": "Sauvegardes de base de données",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "Flux de travail",
|
"Navigation_Workflows": "Flux de travail",
|
||||||
"Network_Assign": "Se connecter à ce <i class=\"fa fa-server\"></i> nœud réseau",
|
"Network_Assign": "Se connecter à ce <i class=\"fa fa-server\"></i> nœud réseau",
|
||||||
"Network_Cant_Assign": "Impossible d'assigner le noeud racine Internet comme enfant d'un noeud.",
|
"Network_Cant_Assign": "Impossible d'assigner le noeud racine Internet comme enfant d'un noeud.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "Impossible d'assigner, aucun noeud parent sélectionné.",
|
||||||
"Network_Configuration_Error": "Erreur de configuration",
|
"Network_Configuration_Error": "Erreur de configuration",
|
||||||
"Network_Connected": "Appareils connectés",
|
"Network_Connected": "Appareils connectés",
|
||||||
|
"Network_Devices": "Appareils réseau",
|
||||||
"Network_ManageAdd": "Ajouter un appareil",
|
"Network_ManageAdd": "Ajouter un appareil",
|
||||||
"Network_ManageAdd_Name": "Nom de l'appareil",
|
"Network_ManageAdd_Name": "Nom de l'appareil",
|
||||||
"Network_ManageAdd_Name_text": "Nom sans caractère spécial",
|
"Network_ManageAdd_Name_text": "Nom sans caractère spécial",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "Noeud racine",
|
"Network_Root": "Noeud racine",
|
||||||
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
"Network_Root_Not_Configured": "Pour commencer la configuration de cet écran, sélectionner un type d'appareil réseau, par exemple une <b>Gateway</b>, dans le champ <b>Type</b> de <a href=\"deviceDetails.php?mac=Internet\">l'appareil racine pour Internet</a> <br/><br/> Plus d'informations dans le guide <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Comment configurer votre page Réseau</a>",
|
||||||
"Network_Root_Unconfigurable": "Racine non configurable",
|
"Network_Root_Unconfigurable": "Racine non configurable",
|
||||||
|
"Network_ShowArchived": "Montrer les archivés",
|
||||||
|
"Network_ShowOffline": "Montrer les hors ligne",
|
||||||
"Network_Table_Hostname": "Nom de hôte",
|
"Network_Table_Hostname": "Nom de hôte",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "État",
|
"Network_Table_State": "État",
|
||||||
@@ -554,7 +567,7 @@
|
|||||||
"Presence_Key_OnlineNow_desc": "Appareil détecté comme étant en ligne lors de la dernière analyse.",
|
"Presence_Key_OnlineNow_desc": "Appareil détecté comme étant en ligne lors de la dernière analyse.",
|
||||||
"Presence_Key_OnlinePast": "Passé en ligne",
|
"Presence_Key_OnlinePast": "Passé en ligne",
|
||||||
"Presence_Key_OnlinePastMiss": "Passé en ligne (correspondance manquée)",
|
"Presence_Key_OnlinePastMiss": "Passé en ligne (correspondance manquée)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne, mais la session de démarrage pourrait être manquante ou avoir des données contradictoires. (il s'agit peut-être d'un bogue - veuillez soumettre un PR si vous savez comment le corriger - je suis un peu perdu dans le code ici)",
|
"Presence_Key_OnlinePastMiss_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne, mais la session de démarrage pourrait être manquante ou avoir des données contradictoires.",
|
||||||
"Presence_Key_OnlinePast_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne.",
|
"Presence_Key_OnlinePast_desc": "Appareil en ligne dans le passé, mais actuellement hors ligne.",
|
||||||
"Presence_Loading": "Chargement …",
|
"Presence_Loading": "Chargement …",
|
||||||
"Presence_Shortcut_AllDevices": "Mes appareils",
|
"Presence_Shortcut_AllDevices": "Mes appareils",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "⚠ La planification des différents scanners d'appareils est désynchronisée.",
|
"Settings_device_Scanners_desync": "⚠ La planification des différents scanners d'appareils est désynchronisée.",
|
||||||
"Settings_device_Scanners_desync_popup": "La planification des scanners (<code>*_RUN_SCHD</code>) n'est pas identique entre scanners. Cela va entraîner des notifications en ligne/hors-ligne non cohérentes. À moins que cela soit attendu, utilisez la même planification pour tous les <b>🔍scanners d'appareils</b> activés.",
|
"Settings_device_Scanners_desync_popup": "La planification des scanners (<code>*_RUN_SCHD</code>) n'est pas identique entre scanners. Cela va entraîner des notifications en ligne/hors-ligne non cohérentes. À moins que cela soit attendu, utilisez la même planification pour tous les <b>🔍scanners d'appareils</b> activés.",
|
||||||
"Speedtest_Results": "Résultats du test de débit",
|
"Speedtest_Results": "Résultats du test de débit",
|
||||||
|
"Systeminfo_AvailableIps": "Adresses IP disponibles",
|
||||||
"Systeminfo_CPU": "Processeur",
|
"Systeminfo_CPU": "Processeur",
|
||||||
"Systeminfo_CPU_Cores": "Cœurs de processeur :",
|
"Systeminfo_CPU_Cores": "Cœurs de processeur :",
|
||||||
"Systeminfo_CPU_Name": "Nom du processeur :",
|
"Systeminfo_CPU_Name": "Nom du processeur :",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "Déclencheur",
|
"WF_Trigger": "Déclencheur",
|
||||||
"WF_Trigger_event_type": "Type d'événement",
|
"WF_Trigger_event_type": "Type d'événement",
|
||||||
"WF_Trigger_type": "Type de déclencheur",
|
"WF_Trigger_type": "Type de déclencheur",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Ajouter une nouvelle icône",
|
"add_icon_event_tooltip": "Ajouter une nouvelle icône",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Ajouter une nouvelle valeur",
|
"add_option_event_tooltip": "Ajouter une nouvelle valeur",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type",
|
"copy_icons_event_tooltip": "Remplace les icônes de tous les appareils du même type",
|
||||||
"devices_old": "Rafraichissement...",
|
"devices_old": "Rafraichissement…",
|
||||||
"general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution :",
|
"general_event_description": "L'événement que vous avez lancé peut prendre du temps avant que les tâches de fond ne soit terminées. La durée d'exécution finira une fois que la file d'exécution ci-dessous sera vide (consulter les <a href='/maintenance.php#tab_Logging'>journaux d'erreur</a> si vous rencontrez des erreurs). <br/> <br/> File d'exécution :",
|
||||||
"general_event_title": "Lancement d'un événement sur mesure",
|
"general_event_title": "Lancement d'un événement sur mesure",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
"go_to_device_event_tooltip": "Naviguer vers cet appareil",
|
||||||
"go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné",
|
"go_to_node_event_tooltip": "Aller vers la page Réseau du nœud concerné",
|
||||||
"new_version_available": "Une nouvelle version est disponible.",
|
"new_version_available": "Une nouvelle version est disponible.",
|
||||||
"report_guid": "GUID de la notification :",
|
"report_guid": "GUID de la notification :",
|
||||||
"report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant :",
|
"report_guid_missing": "La notification associée n'a pas été trouvée. Un petit délai existe entre l'envoi d'une notification et sa disponibilité réelle pour affichage. Rafraichissez la page et votre cache après quelques secondes. Il est aussi possible que la notification sélectionnée ait été supprimée durant une opération de maintenance, comme renseigné dans le paramètre <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/> La dernière notification est affichée à sa place. La notification manquante dispose du GUID suivant :",
|
||||||
"report_select_format": "Sélectionner un format :",
|
"report_select_format": "Sélectionner un format :",
|
||||||
"report_time": "Heure de la notification :",
|
"report_time": "Heure de la notification :",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Activez le paramètre et enregistrez vos changements avant de le lancer.",
|
"run_event_tooltip": "Activez le paramètre et enregistrez vos changements avant de le lancer.",
|
||||||
|
"select_icon_event_tooltip": "Sélectionner l'icône",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Principal",
|
"settings_core_label": "Principal",
|
||||||
"settings_device_scanners": "Les scanners d'appareils utilisés pour découvrir des appareils, qui écrivent dans la table CurrentScan (scan actuel) de la base de données.",
|
"settings_device_scanners": "Les scanners d'appareils utilisés pour découvrir des appareils, qui écrivent dans la table CurrentScan (scan actuel) de la base de données.",
|
||||||
@@ -735,7 +746,7 @@
|
|||||||
"settings_imported_label": "Paramètres importés",
|
"settings_imported_label": "Paramètres importés",
|
||||||
"settings_missing": "Tous les paramètres n'ont pas été chargés ! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.",
|
"settings_missing": "Tous les paramètres n'ont pas été chargés ! La base de données est trop sollicitée, ou bien la séquence de démarrage de l'application est trop lourde. Cliquez sur le bouton de rafraîchissement 🔄 en haut.",
|
||||||
"settings_missing_block": "Erreur : les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut ; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).",
|
"settings_missing_block": "Erreur : les paramètres ne sont pas correctement chargés. Cliquer sur le bouton de rafraîchissement 🔄 en haut ; sinon, vous pouvez vérifier les journaux du navigateur pour plus de détails (F12).",
|
||||||
"settings_old": "Importation des paramètres et réinitialisation...",
|
"settings_old": "Importation des paramètres et réinitialisation…",
|
||||||
"settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.",
|
"settings_other_scanners": "Autres plugins activés, hors scanners d'appareils.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Autres scanners",
|
"settings_other_scanners_label": "Autres scanners",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Système",
|
"settings_system_label": "Système",
|
||||||
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>",
|
"settings_update_item_warning": "Mettre à jour la valeur ci-dessous. Veillez à bien suivre le même format qu'auparavant. <b>Il n'y a pas de pas de contrôle.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
|
"test_event_tooltip": "Enregistrer d'abord vos modifications avant de tester vôtre paramétrage."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@
|
|||||||
"About_Exit": "Esci",
|
"About_Exit": "Esci",
|
||||||
"About_Title": "Scanner di sicurezza di rete e framework di notifica",
|
"About_Title": "Scanner di sicurezza di rete e framework di notifica",
|
||||||
"AppEvents_AppEventProcessed": "Elaborato",
|
"AppEvents_AppEventProcessed": "Elaborato",
|
||||||
"AppEvents_DateTimeCreated": "Loggato",
|
"AppEvents_DateTimeCreated": "Registrato",
|
||||||
"AppEvents_Extra": "Extra",
|
"AppEvents_Extra": "Extra",
|
||||||
"AppEvents_GUID": "GUID evento applicazione",
|
"AppEvents_GUID": "GUID evento applicazione",
|
||||||
"AppEvents_Helper1": "Aiutante 1",
|
"AppEvents_Helper1": "Aiutante 1",
|
||||||
@@ -66,16 +66,17 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
"DAYS_TO_KEEP_EVENTS_name": "Elimina eventi più vecchi di",
|
||||||
"DISCOVER_PLUGINS_description": "Disattiva questa opzione per velocizzare l'inizializzazione e il salvataggio delle impostazioni. Quando è disattivata, i plugin non vengono scoperti e non puoi aggiungere nuovi plugin all'impostazione <code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Disattiva questa opzione per velocizzare l'inizializzazione e il salvataggio delle impostazioni. Quando è disattivata, i plugin non vengono scoperti e non puoi aggiungere nuovi plugin all'impostazione <code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Scopri i plugin",
|
"DISCOVER_PLUGINS_name": "Scopri i plugin",
|
||||||
|
"DevDetail_Children_Title": "Relazioni tra figli",
|
||||||
"DevDetail_Copy_Device_Title": "Copia dettagli dal dispositivo",
|
"DevDetail_Copy_Device_Title": "Copia dettagli dal dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copia i dettagli dal dispositivo dall'elenco a discesa. Tutto in questa pagina verrà sovrascritto",
|
"DevDetail_Copy_Device_Tooltip": "Copia i dettagli dal dispositivo dall'elenco a discesa. Tutto in questa pagina verrà sovrascritto",
|
||||||
"DevDetail_CustomProperties_Title": "Proprietà personalizzate",
|
"DevDetail_CustomProperties_Title": "Proprietà personalizzate",
|
||||||
"DevDetail_CustomProps_reset_info": "Questa operazione rimuoverà le proprietà personalizzate su questo dispositivo e le ripristinerà al valore predefinito.",
|
"DevDetail_CustomProps_reset_info": "Questa operazione rimuoverà le proprietà personalizzate su questo dispositivo e le ripristinerà al valore predefinito.",
|
||||||
"DevDetail_DisplayFields_Title": "Visualizza",
|
"DevDetail_DisplayFields_Title": "Visualizza",
|
||||||
"DevDetail_EveandAl_AlertAllEvents": "Notifica eventi",
|
"DevDetail_EveandAl_AlertAllEvents": "Eventi di allerta",
|
||||||
"DevDetail_EveandAl_AlertDown": "Avviso disconnessione",
|
"DevDetail_EveandAl_AlertDown": "Avviso inattivo",
|
||||||
"DevDetail_EveandAl_Archived": "Archiviato",
|
"DevDetail_EveandAl_Archived": "Archiviato",
|
||||||
"DevDetail_EveandAl_NewDevice": "Nuovo dispositivo",
|
"DevDetail_EveandAl_NewDevice": "Nuovo dispositivo",
|
||||||
"DevDetail_EveandAl_NewDevice_Tooltip": "Mostrerà il Nuovo stato del dispositivo e lo includerà negli elenchi quando il filtro Nuovi dispositivi è attivo. Non influisce sulle notifiche.",
|
"DevDetail_EveandAl_NewDevice_Tooltip": "Mostra lo stato Nuovo del dispositivo e lo include negli elenchi quando il filtro Nuovi dispositivi è attivo. Non influisce sulle notifiche.",
|
||||||
"DevDetail_EveandAl_RandomMAC": "MAC casuale",
|
"DevDetail_EveandAl_RandomMAC": "MAC casuale",
|
||||||
"DevDetail_EveandAl_ScanCycle": "Scansiona dispositivo",
|
"DevDetail_EveandAl_ScanCycle": "Scansiona dispositivo",
|
||||||
"DevDetail_EveandAl_ScanCycle_a": "Scansiona dispositivo",
|
"DevDetail_EveandAl_ScanCycle_a": "Scansiona dispositivo",
|
||||||
@@ -86,7 +87,7 @@
|
|||||||
"DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.",
|
"DevDetail_GoToNetworkNode": "Passa alla pagina Rete del nodo specificato.",
|
||||||
"DevDetail_Icon": "Icona",
|
"DevDetail_Icon": "Icona",
|
||||||
"DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.",
|
"DevDetail_Icon_Descr": "Inserisci il nome di un'icona Font Awesome senza il prefisso fa- o con la classe completa, es.: fa fa-brands fa-apple.",
|
||||||
"DevDetail_Loading": "Caricamento...",
|
"DevDetail_Loading": "Caricamento…",
|
||||||
"DevDetail_MainInfo_Comments": "Commenti",
|
"DevDetail_MainInfo_Comments": "Commenti",
|
||||||
"DevDetail_MainInfo_Favorite": "Preferito",
|
"DevDetail_MainInfo_Favorite": "Preferito",
|
||||||
"DevDetail_MainInfo_Group": "Gruppo",
|
"DevDetail_MainInfo_Group": "Gruppo",
|
||||||
@@ -102,10 +103,11 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Produttore",
|
"DevDetail_MainInfo_Vendor": "Produttore",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "Apri nodo figlio",
|
||||||
"DevDetail_Network_Node_hover": "Seleziona il dispositivo di rete principale a cui è connesso il dispositivo corrente per popolare la struttura di rete.",
|
"DevDetail_Network_Node_hover": "Seleziona il dispositivo di rete principale a cui è connesso il dispositivo corrente per popolare la struttura di rete.",
|
||||||
"DevDetail_Network_Port_hover": "La porta a cui è connesso questo dispositivo sul dispositivo di rete principale. Se lasciato vuoto, verrà visualizzata un'icona Wi-Fi nella struttura di rete.",
|
"DevDetail_Network_Port_hover": "La porta a cui è connesso questo dispositivo sul dispositivo di rete principale. Se lasciato vuoto, verrà visualizzata un'icona Wi-Fi nella struttura di rete.",
|
||||||
"DevDetail_Nmap_Scans": "Scansioni Nmap manuali",
|
"DevDetail_Nmap_Scans": "Scansioni Nmap manuali",
|
||||||
"DevDetail_Nmap_Scans_desc": "Qui puoi eseguire scansioni manuali NMAP. Puoi anche pianificare scansioni automatiche NMAP attraverso il plugin Servizi e porte (NMAP). Vai alle <a href='/settings.php' target='_blank'>Impostazioni</a> per scoprire di più",
|
"DevDetail_Nmap_Scans_desc": "Qui puoi eseguire scansioni manuali NMAP. Puoi anche pianificare scansioni automatiche NMAP attraverso il plugin Servizi e porte (NMAP). Vai alla <a href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/nmap_scan\" target=\"_blank\">Documentazione</a> per saperne di più",
|
||||||
"DevDetail_Nmap_buttonDefault": "Scansione predefinita",
|
"DevDetail_Nmap_buttonDefault": "Scansione predefinita",
|
||||||
"DevDetail_Nmap_buttonDefault_text": "Scansione predefinita: Nmap scansiona 1000 porte per ogni protocollo richiesto. Questo dovrebbe coprire circa il 93% delle porte TCP e il 49% delle porte UDP (circa 5 secondi)",
|
"DevDetail_Nmap_buttonDefault_text": "Scansione predefinita: Nmap scansiona 1000 porte per ogni protocollo richiesto. Questo dovrebbe coprire circa il 93% delle porte TCP e il 49% delle porte UDP (circa 5 secondi)",
|
||||||
"DevDetail_Nmap_buttonDetail": "Scansione dettagliata",
|
"DevDetail_Nmap_buttonDetail": "Scansione dettagliata",
|
||||||
@@ -177,7 +179,7 @@
|
|||||||
"DevDetail_Tools_WOL": "Invia comando WoL a ",
|
"DevDetail_Tools_WOL": "Invia comando WoL a ",
|
||||||
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
"DevDetail_Tools_WOL_noti": "Wake-on-LAN",
|
||||||
"DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.",
|
"DevDetail_Tools_WOL_noti_text": "Il comando Wake-on-LAN viene inviato all'indirizzo di broadcast. Se la destinazione non si trova nella sottorete/VLAN di NetAlertX, il dispositivo di destinazione non risponderà.",
|
||||||
"DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch...) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.",
|
"DevDetail_Type_hover": "Il tipo del dispositivo. Se selezioni uno dei dispositivi di rete predefiniti (ad esempio: AP, Firewall, Router, Switch…) verranno visualizzati nella struttura di rete come possibili nodi della rete principale.",
|
||||||
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
"DevDetail_Vendor_hover": "Il produttore dovrebbe essere rilevato automaticamente. Puoi sovrascrivere o aggiungere un valore personalizzato.",
|
||||||
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
"DevDetail_WOL_Title": "<i class=\"fa fa-power-off\"></i> Wake-on-LAN",
|
||||||
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
"DevDetail_button_AddIcon": "Aggiungi nuova icona",
|
||||||
@@ -199,7 +201,8 @@
|
|||||||
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
"Device_MultiEdit_MassActions": "Azioni di massa:",
|
||||||
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
"Device_MultiEdit_Tooltip": "Attento. Facendo clic verrà applicato il valore sulla sinistra a tutti i dispositivi selezionati sopra.",
|
||||||
"Device_Searchbox": "Cerca",
|
"Device_Searchbox": "Cerca",
|
||||||
"Device_Shortcut_AllDevices": "Miei dispositivi",
|
"Device_Shortcut_AllDevices": "I miei dispositivi",
|
||||||
|
"Device_Shortcut_AllNodes": "Tutti i nodi",
|
||||||
"Device_Shortcut_Archived": "Archiviati",
|
"Device_Shortcut_Archived": "Archiviati",
|
||||||
"Device_Shortcut_Connected": "Connessi",
|
"Device_Shortcut_Connected": "Connessi",
|
||||||
"Device_Shortcut_Devices": "Dispositivi",
|
"Device_Shortcut_Devices": "Dispositivi",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nome",
|
"Device_TableHead_Name": "Nome",
|
||||||
"Device_TableHead_NetworkSite": "Sito di rete",
|
"Device_TableHead_NetworkSite": "Sito di rete",
|
||||||
"Device_TableHead_Owner": "Proprietario",
|
"Device_TableHead_Owner": "Proprietario",
|
||||||
|
"Device_TableHead_ParentRelType": "Tipo di relazione",
|
||||||
"Device_TableHead_Parent_MAC": "Nodo di rete principale",
|
"Device_TableHead_Parent_MAC": "Nodo di rete principale",
|
||||||
"Device_TableHead_Port": "Porta",
|
"Device_TableHead_Port": "Porta",
|
||||||
"Device_TableHead_PresentLastScan": "Presenza",
|
"Device_TableHead_PresentLastScan": "Presenza",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "Richiedi NIC online",
|
||||||
"Device_TableHead_RowID": "ID riga",
|
"Device_TableHead_RowID": "ID riga",
|
||||||
"Device_TableHead_Rowid": "ID riga",
|
"Device_TableHead_Rowid": "ID riga",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -251,7 +256,7 @@
|
|||||||
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
"ENCRYPTION_KEY_name": "Chiave di crittografia",
|
||||||
"Email_display_name": "E-mail",
|
"Email_display_name": "E-mail",
|
||||||
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
"Email_icon": "<i class=\"fa fa-at\"></i>",
|
||||||
"Events_Loading": "Caricamento...",
|
"Events_Loading": "Caricamento…",
|
||||||
"Events_Periodselect_All": "Tutte le info",
|
"Events_Periodselect_All": "Tutte le info",
|
||||||
"Events_Periodselect_LastMonth": "Ultimo mese",
|
"Events_Periodselect_LastMonth": "Ultimo mese",
|
||||||
"Events_Periodselect_LastWeek": "Ultima settimana",
|
"Events_Periodselect_LastWeek": "Ultima settimana",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "Annulla",
|
"Gen_Cancel": "Annulla",
|
||||||
"Gen_Change": "Modifica",
|
"Gen_Change": "Modifica",
|
||||||
"Gen_Copy": "Esegui",
|
"Gen_Copy": "Esegui",
|
||||||
|
"Gen_CopyToClipboard": "Copia negli appunti",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK: l'aggiornamento dell'interfaccia utente potrebbe richiedere del tempo se è in esecuzione una scansione.",
|
"Gen_DataUpdatedUITakesTime": "OK: l'aggiornamento dell'interfaccia utente potrebbe richiedere del tempo se è in esecuzione una scansione.",
|
||||||
"Gen_Delete": "Elimina",
|
"Gen_Delete": "Elimina",
|
||||||
"Gen_DeleteAll": "Elimina tutti",
|
"Gen_DeleteAll": "Elimina tutti",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Errore",
|
"Gen_Error": "Errore",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
"Gen_Generate": "Genera",
|
"Gen_Generate": "Genera",
|
||||||
|
"Gen_InvalidMac": "Indirizzo Mac non valido.",
|
||||||
"Gen_LockedDB": "ERRORE: il DB potrebbe essere bloccato, controlla F12 Strumenti di sviluppo -> Console o riprova più tardi.",
|
"Gen_LockedDB": "ERRORE: il DB potrebbe essere bloccato, controlla F12 Strumenti di sviluppo -> Console o riprova più tardi.",
|
||||||
|
"Gen_NetworkMask": "Maschera di rete",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "Online",
|
"Gen_Online": "Online",
|
||||||
@@ -321,6 +329,7 @@
|
|||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Seleziona per anteprima",
|
"Gen_SelectToPreview": "Seleziona per anteprima",
|
||||||
"Gen_Selected_Devices": "Dispositivi selezionati:",
|
"Gen_Selected_Devices": "Dispositivi selezionati:",
|
||||||
|
"Gen_Subnet": "Sottorete",
|
||||||
"Gen_Switch": "Cambia",
|
"Gen_Switch": "Cambia",
|
||||||
"Gen_Upd": "Aggiornato correttamente",
|
"Gen_Upd": "Aggiornato correttamente",
|
||||||
"Gen_Upd_Fail": "Aggiornamento fallito",
|
"Gen_Upd_Fail": "Aggiornamento fallito",
|
||||||
@@ -333,15 +342,15 @@
|
|||||||
"Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentazione sulle reti remote</a>.",
|
"Gen_create_new_device_info": "I dispositivi vengono generalmente rilevati utilizzando <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">plugin</a>. Tuttavia, in alcuni casi, potrebbe essere necessario aggiungere manualmente i dispositivi. Per esplorare scenari specifici, consulta la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/REMOTE_NETWORKS.md\">documentazione sulle reti remote</a>.",
|
||||||
"General_display_name": "Generale",
|
"General_display_name": "Generale",
|
||||||
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
"General_icon": "<i class=\"fa fa-gears\"></i>",
|
||||||
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), tutti i dispositivi marcati con <b>Nuovo dispositivo</b> verranno eliminati se l'orario della <b>Prima sessione</b> è precedente all'orario di questa impostazione. Usa questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
"HRS_TO_KEEP_NEWDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi contrassegnati come <b>Nuovo dispositivo</b> verranno eliminati se la loro <b>Prima sessione</b> è antecedente alle ore specificate in questa impostazione. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Nuovi dispositivi</b> dopo <code>X</code> ore.",
|
||||||
"HRS_TO_KEEP_NEWDEV_name": "Elimina nuovi dispositivi dopo",
|
"HRS_TO_KEEP_NEWDEV_name": "Elimina nuovi dispositivi dopo",
|
||||||
"HRS_TO_KEEP_OFFDEV_description": "Questa è un'impostazione di manutenzione <b>ELIMINAZIONE dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi che sono <b>Offline</b> e la loro data e ora <b>Ultima connessione</b> sono più vecchi delle ore specificate in questa impostazione saranno eliminati. Usa questa impostazione se vuoi eliminare automaticamente <b>Dispositivi offline</b> dopo <code>X</code> ore trascorse offline.",
|
"HRS_TO_KEEP_OFFDEV_description": "Questa è un'impostazione di manutenzione che <b>ELIMINA dispositivi</b>. Se abilitata (<code>0</code> è disabilitata), i dispositivi <b>Offline</b> la cui data e ora di <b>Ultima connessione</b> sono antecedenti alle ore specificate in questa impostazione, verranno eliminati. Utilizza questa impostazione se vuoi eliminare automaticamente i <b>Dispositivi offline</b> dopo <code>X</code> ore trascorse offline.",
|
||||||
"HRS_TO_KEEP_OFFDEV_name": "Elimina dispositivi offline dopo",
|
"HRS_TO_KEEP_OFFDEV_name": "Elimina dispositivi offline dopo",
|
||||||
"LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.",
|
"LOADED_PLUGINS_description": "Quali Plugin caricare. L'aggiunta di plugin potrebbe rallentare l'applicazione. Leggi di più su quali plugin necessitano di essere abilitati, tipi e opzioni di scansione nella <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/docs/PLUGINS.md\">documentazione plugin</a>. I plugin disinstallati perdono la loro configurazione. Solo i plugin <code>disabilitati</code> possono essere disinstallati.",
|
||||||
"LOADED_PLUGINS_name": "Plugin caricati",
|
"LOADED_PLUGINS_name": "Plugin caricati",
|
||||||
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
"LOG_LEVEL_description": "Questa impostazione abilita un log più dettagliato. Utile per il debug degli eventi salvati nel database.",
|
||||||
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
"LOG_LEVEL_name": "Stampa log aggiuntivo",
|
||||||
"Loading": "Caricamento...",
|
"Loading": "Caricamento…",
|
||||||
"Login_Box": "Inserisci la tua password",
|
"Login_Box": "Inserisci la tua password",
|
||||||
"Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.",
|
"Login_Default_PWD": "La password predefinita \"123456\" è ancora attiva.",
|
||||||
"Login_Info": "Le password vengono impostate tramite il plugin Set Password. Controlla la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentazione SETPWD</a> se riscontri problemi di accesso.",
|
"Login_Info": "Le password vengono impostate tramite il plugin Set Password. Controlla la <a target=\"_blank\" href=\"https://github.com/jokob-sk/NetAlertX/tree/main/front/plugins/set_password\">documentazione SETPWD</a> se riscontri problemi di accesso.",
|
||||||
@@ -360,19 +369,19 @@
|
|||||||
"Maint_RestartServer": "Riavvia server",
|
"Maint_RestartServer": "Riavvia server",
|
||||||
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
"Maint_Restart_Server_noti_text": "Sei sicuro di voler riavviare il server backend? Questo potrebbe causare incoerenze dell'app. Prima esegui il backup della tua configurazione. <br/> <br/> Nota: l'operazione potrebbe richiedere alcuni minuti.",
|
||||||
"Maintenance_InitCheck": "Controllo iniziale",
|
"Maintenance_InitCheck": "Controllo iniziale",
|
||||||
"Maintenance_InitCheck_Checking": "Controllo in corso...",
|
"Maintenance_InitCheck_Checking": "Controllo in corso…",
|
||||||
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
|
"Maintenance_InitCheck_QuickSetupGuide": "Assicurati di aver seguito la <a href=\"https://jokob-sk.github.io/NetAlertX/INITIAL_SETUP/\" target=\"_blank\">guida di configurazione rapida</a>.",
|
||||||
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
|
"Maintenance_InitCheck_Success": "Applicazione inizializzata con successo!",
|
||||||
"Maintenance_ReCheck": "Riprova controllo",
|
"Maintenance_ReCheck": "Riprova controllo",
|
||||||
"Maintenance_Running_Version": "Versione installata",
|
"Maintenance_Running_Version": "Versione installata",
|
||||||
"Maintenance_Status": "Stato",
|
"Maintenance_Status": "Stato",
|
||||||
"Maintenance_Title": "Strumenti di manutenzione",
|
"Maintenance_Title": "Strumenti di manutenzione",
|
||||||
"Maintenance_Tool_DownloadConfig": "Impostazioni Esporta",
|
"Maintenance_Tool_DownloadConfig": "Esportazione delle impostazioni",
|
||||||
"Maintenance_Tool_DownloadConfig_text": "Scarica un backup completo della configurazione delle tue Impostazioni memorizzata nel file <code>app.conf</code>.",
|
"Maintenance_Tool_DownloadConfig_text": "Scarica un backup completo della configurazione delle tue Impostazioni memorizzata nel file <code>app.conf</code>.",
|
||||||
"Maintenance_Tool_DownloadWorkflows": "Esportazione flussi di lavoro",
|
"Maintenance_Tool_DownloadWorkflows": "Esportazione del flusso di lavoro",
|
||||||
"Maintenance_Tool_DownloadWorkflows_text": "Scarica un backup completo dei tuoi flussi di lavoro archiviati nel file <code>workflows.json</code>.",
|
"Maintenance_Tool_DownloadWorkflows_text": "Scarica un backup completo dei tuoi flussi di lavoro archiviati nel file <code>workflows.json</code>.",
|
||||||
"Maintenance_Tool_ExportCSV": "Esporta dispositivi (csv)",
|
"Maintenance_Tool_ExportCSV": "Esportazione dispositivi (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti": "Esporta dispositivi (csv)",
|
"Maintenance_Tool_ExportCSV_noti": "Esportazione dispositivi (csv)",
|
||||||
"Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?",
|
"Maintenance_Tool_ExportCSV_noti_text": "Sei sicuro di voler generare un file CSV?",
|
||||||
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL <code>il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV</code> o abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.",
|
"Maintenance_Tool_ExportCSV_text": "Genera un file CSV (comma separated value) contenente la lista dei dispositivi incluse le relazioni di rete tra i nodi di rete e i dispositivi connessi. Puoi anche eseguire questa azione accedendo all'URL <code>il_tuo_NetAlertX/php/server/devices.php?action=ExportCSV</code> o abilitando il plugin <a href=\"settings.php#CSVBCKP_header\">Backup CSV</a>.",
|
||||||
"Maintenance_Tool_ImportCSV": "Importa dispositivi (csv)",
|
"Maintenance_Tool_ImportCSV": "Importa dispositivi (csv)",
|
||||||
@@ -446,7 +455,7 @@
|
|||||||
"Maintenance_Tools_Tab_UISettings": "Impostazioni UI",
|
"Maintenance_Tools_Tab_UISettings": "Impostazioni UI",
|
||||||
"Maintenance_arp_status": "Stato scansione",
|
"Maintenance_arp_status": "Stato scansione",
|
||||||
"Maintenance_arp_status_off": "è attualmente disabilitato",
|
"Maintenance_arp_status_off": "è attualmente disabilitato",
|
||||||
"Maintenance_arp_status_on": "scansioni attualmente in esecuzione",
|
"Maintenance_arp_status_on": "scansione in corso",
|
||||||
"Maintenance_built_on": "Rilasciato il",
|
"Maintenance_built_on": "Rilasciato il",
|
||||||
"Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.",
|
"Maintenance_current_version": "Sei aggiornato. Scopri <a href=\"https://github.com/jokob-sk/NetAlertX/issues/138\" target=\"_blank\">a cosa sto lavorando</a>.",
|
||||||
"Maintenance_database_backup": "Backup DB",
|
"Maintenance_database_backup": "Backup DB",
|
||||||
@@ -466,7 +475,7 @@
|
|||||||
"Maintenance_themeselector_lable": "Seleziona skin",
|
"Maintenance_themeselector_lable": "Seleziona skin",
|
||||||
"Maintenance_themeselector_text": "Questa modifica avviene lato server, quindi influenza tutti i dispositivi in uso.",
|
"Maintenance_themeselector_text": "Questa modifica avviene lato server, quindi influenza tutti i dispositivi in uso.",
|
||||||
"Maintenance_version": "Aggiornamenti app",
|
"Maintenance_version": "Aggiornamenti app",
|
||||||
"NETWORK_DEVICE_TYPES_description": "Quali tipi di dispositivo possono essere utilizzati come dispositivi di rete nella vista Rete. Il tipo di dispositivo deve corrispondere esattamente all'impostazione <code>Tipo</code> su un dispositivo specifico nei Dettagli dispositivo. Aggiungilo sul Dispositivo tramite il pulsante <code>+</code>. Non rimuovere i tipi esistenti, aggiungine solo di nuovi.",
|
"NETWORK_DEVICE_TYPES_description": "Quali tipi di dispositivo possono essere utilizzati come dispositivi di rete nella vista Rete. Il tipo di dispositivo deve corrispondere esattamente all'impostazione <code>Tipo</code> su un dispositivo specifico nei Dettagli dispositivo. Aggiungilo al dispositivo tramite il pulsante <code>+</code>. Non rimuovere i tipi esistenti, aggiungine solo di nuovi.",
|
||||||
"NETWORK_DEVICE_TYPES_name": "Tipi di dispositivi di rete",
|
"NETWORK_DEVICE_TYPES_name": "Tipi di dispositivi di rete",
|
||||||
"Navigation_About": "Informazioni su",
|
"Navigation_About": "Informazioni su",
|
||||||
"Navigation_AppEvents": "Eventi app",
|
"Navigation_AppEvents": "Eventi app",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "Workflow",
|
"Navigation_Workflows": "Workflow",
|
||||||
"Network_Assign": "Connetti al nodo di rete <i class=\"fa fa-server\"></i> sopra",
|
"Network_Assign": "Connetti al nodo di rete <i class=\"fa fa-server\"></i> sopra",
|
||||||
"Network_Cant_Assign": "Impossibile assegnare il nodo Internet root come nodo foglia figlio.",
|
"Network_Cant_Assign": "Impossibile assegnare il nodo Internet root come nodo foglia figlio.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "Impossibile assegnare, nessun nodo padre selezionato.",
|
||||||
"Network_Configuration_Error": "Errore di configurazione",
|
"Network_Configuration_Error": "Errore di configurazione",
|
||||||
"Network_Connected": "Dispositivi connessi",
|
"Network_Connected": "Dispositivi connessi",
|
||||||
|
"Network_Devices": "Dispositivi di rete",
|
||||||
"Network_ManageAdd": "Aggiungi dispositivo",
|
"Network_ManageAdd": "Aggiungi dispositivo",
|
||||||
"Network_ManageAdd_Name": "Nome dispositivo",
|
"Network_ManageAdd_Name": "Nome dispositivo",
|
||||||
"Network_ManageAdd_Name_text": "Nome senza caratteri speciali",
|
"Network_ManageAdd_Name_text": "Nome senza caratteri speciali",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "Nodo radice",
|
"Network_Root": "Nodo radice",
|
||||||
"Network_Root_Not_Configured": "Seleziona un tipo di dispositivo di rete, ad esempio un <b>Gateway</b>, nel campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo root Internet</a> per iniziare a configurare questa schermata. <br/><br/> Ulteriore documentazione è disponibile nella guida <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\"> Come impostare la tua pagina di rete</a>",
|
"Network_Root_Not_Configured": "Seleziona un tipo di dispositivo di rete, ad esempio un <b>Gateway</b>, nel campo <b>Tipo</b> del <a href=\"deviceDetails.php?mac=Internet\">dispositivo root Internet</a> per iniziare a configurare questa schermata. <br/><br/> Ulteriore documentazione è disponibile nella guida <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\"> Come impostare la tua pagina di rete</a>",
|
||||||
"Network_Root_Unconfigurable": "Radice non configurabile",
|
"Network_Root_Unconfigurable": "Radice non configurabile",
|
||||||
|
"Network_ShowArchived": "Mostra archiviati",
|
||||||
|
"Network_ShowOffline": "Mostra offline",
|
||||||
"Network_Table_Hostname": "Nome host",
|
"Network_Table_Hostname": "Nome host",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "Stato",
|
"Network_Table_State": "Stato",
|
||||||
@@ -554,10 +567,10 @@
|
|||||||
"Presence_Key_OnlineNow_desc": "Dispositivo rilevato durante l'ultima scansione come online.",
|
"Presence_Key_OnlineNow_desc": "Dispositivo rilevato durante l'ultima scansione come online.",
|
||||||
"Presence_Key_OnlinePast": "Online in passato",
|
"Presence_Key_OnlinePast": "Online in passato",
|
||||||
"Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)",
|
"Presence_Key_OnlinePastMiss": "Online in passato (non corrispondente)",
|
||||||
"Presence_Key_OnlinePastMiss_desc": "Dispositivo online in passato, ma attualmente offline, ma la sessione di avvio potrebbe essere mancante o presentare dati in conflitto. (potrebbe trattarsi di un bug: invia una PR se sai come risolverlo, sono un po' perso nel codice qui)",
|
"Presence_Key_OnlinePastMiss_desc": "Dispositivo online in passato, ma attualmente offline, ma la sessione di avvio potrebbe essere mancante o presentare dati in conflitto.",
|
||||||
"Presence_Key_OnlinePast_desc": "Dispositivo online in passato, ma attualmente offline.",
|
"Presence_Key_OnlinePast_desc": "Dispositivo online in passato, ma attualmente offline.",
|
||||||
"Presence_Loading": "Caricamento...",
|
"Presence_Loading": "Caricamento…",
|
||||||
"Presence_Shortcut_AllDevices": "Miei dispositivi",
|
"Presence_Shortcut_AllDevices": "I miei dispositivi",
|
||||||
"Presence_Shortcut_Archived": "Archiviati",
|
"Presence_Shortcut_Archived": "Archiviati",
|
||||||
"Presence_Shortcut_Connected": "Connessi",
|
"Presence_Shortcut_Connected": "Connessi",
|
||||||
"Presence_Shortcut_Devices": "Dispositivi",
|
"Presence_Shortcut_Devices": "Dispositivi",
|
||||||
@@ -583,8 +596,9 @@
|
|||||||
"Settings_Metadata_Toggle": "Mostra/nascondi i metadati per l'impostazione specificata.",
|
"Settings_Metadata_Toggle": "Mostra/nascondi i metadati per l'impostazione specificata.",
|
||||||
"Settings_Show_Description": "Mostra descrizione dell'impostazione.",
|
"Settings_Show_Description": "Mostra descrizione dell'impostazione.",
|
||||||
"Settings_device_Scanners_desync": "⚠ Le pianificazioni dello scanner del dispositivo non sono sincronizzate.",
|
"Settings_device_Scanners_desync": "⚠ Le pianificazioni dello scanner del dispositivo non sono sincronizzate.",
|
||||||
"Settings_device_Scanners_desync_popup": "Gli orari degli scanner dei dispositivi (<code>*_RUN_SCHD</code>) non sono gli stessi. Questo comporterà notifiche online/offline incoerenti del dispositivo. A meno che ciò non sia previsto, utilizza la stessa pianificazione per tutti gli <b>🔍Scanner dispositivi</b> abilitati.",
|
"Settings_device_Scanners_desync_popup": "Gli orari degli scanner dei dispositivi (<code>*_RUN_SCHD</code>) non sono gli stessi. Questo comporterà notifiche online/offline incoerenti del dispositivo. A meno che ciò non sia previsto, utilizza la stessa pianificazione per tutti gli <b>🔍 scanner dispositivi</b> abilitati.",
|
||||||
"Speedtest_Results": "Risultati test di velocità",
|
"Speedtest_Results": "Risultati test di velocità",
|
||||||
|
"Systeminfo_AvailableIps": "IP disponibili",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "Core CPU:",
|
"Systeminfo_CPU_Cores": "Core CPU:",
|
||||||
"Systeminfo_CPU_Name": "Nome CPU:",
|
"Systeminfo_CPU_Name": "Nome CPU:",
|
||||||
@@ -668,8 +682,8 @@
|
|||||||
"UI_ICONS_name": "Icone predefinite",
|
"UI_ICONS_name": "Icone predefinite",
|
||||||
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
"UI_LANG_description": "Seleziona la lingua preferita dell'interfaccia utente. Aiuta nella traduzione o suggerisci una nuova lingua sul portale online di <a href=\"https://hosted.weblate.org/projects/pialert/core/\" target=\"_blank\">Weblate</a>.",
|
||||||
"UI_LANG_name": "Lingua UI",
|
"UI_LANG_name": "Lingua UI",
|
||||||
"UI_MY_DEVICES_description": "Dispositivi i cui stati devono essere visualizzati nella visualizzazione predefinita <b>Miei dispositivi</b>.",
|
"UI_MY_DEVICES_description": "Dispositivi i cui stati devono essere visualizzati nella visualizzazione predefinita <b>I miei dispositivi</b>.",
|
||||||
"UI_MY_DEVICES_name": "Mostra nella vista Miei dispositivi",
|
"UI_MY_DEVICES_name": "Mostra nella vista I miei dispositivi",
|
||||||
"UI_NOT_RANDOM_MAC_description": "Prefissi MAC che non devono essere contrassegnati come dispositivi casuali. Inserisci ad esempio <code>52</code> per escludere i dispositivi che iniziano con <code>52:xx:xx:xx:xx:xx</code> dall'essere contrassegnati come dispositivi con un indirizzo MAC casuale.",
|
"UI_NOT_RANDOM_MAC_description": "Prefissi MAC che non devono essere contrassegnati come dispositivi casuali. Inserisci ad esempio <code>52</code> per escludere i dispositivi che iniziano con <code>52:xx:xx:xx:xx:xx</code> dall'essere contrassegnati come dispositivi con un indirizzo MAC casuale.",
|
||||||
"UI_NOT_RANDOM_MAC_name": "Non segnalare come casuale",
|
"UI_NOT_RANDOM_MAC_name": "Non segnalare come casuale",
|
||||||
"UI_PRESENCE_description": "Seleziona quali stati devono essere mostrati nel grafico <b>Presenza dispositivo</b> nella pagina <a href=\"/devices.php\" target=\"_blank\">Dispositivi</a>.",
|
"UI_PRESENCE_description": "Seleziona quali stati devono essere mostrati nel grafico <b>Presenza dispositivo</b> nella pagina <a href=\"/devices.php\" target=\"_blank\">Dispositivi</a>.",
|
||||||
@@ -704,29 +718,26 @@
|
|||||||
"WF_Trigger": "Trigger",
|
"WF_Trigger": "Trigger",
|
||||||
"WF_Trigger_event_type": "Tipo evento",
|
"WF_Trigger_event_type": "Tipo evento",
|
||||||
"WF_Trigger_type": "Tipo di trigger",
|
"WF_Trigger_type": "Tipo di trigger",
|
||||||
"add_icon_event_icon": "fa-square-plus",
|
|
||||||
"add_icon_event_tooltip": "Aggiungi nuova icona",
|
"add_icon_event_tooltip": "Aggiungi nuova icona",
|
||||||
"add_option_event_icon": "fa-square-plus",
|
|
||||||
"add_option_event_tooltip": "Aggiungi nuovo valore",
|
"add_option_event_tooltip": "Aggiungi nuovo valore",
|
||||||
"copy_icons_event_icon": "fa-copy",
|
|
||||||
"copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo",
|
"copy_icons_event_tooltip": "Sovrascrivi le icone di tutti i dispositivi con lo stesso tipo di dispositivo",
|
||||||
"devices_old": "Aggiornamento...",
|
"devices_old": "Aggiornamento…",
|
||||||
"general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> Coda di esecuzione:",
|
"general_event_description": "L'evento che hai attivato potrebbe richiedere del tempo prima che i processi in background vengano completati. L'esecuzione è terminata una volta che la coda di esecuzione sottostante si è svuotata (controlla il <a href='/maintenance.php#tab_Logging'>log degli errori</a> se riscontri problemi). <br/> <br/> Coda di esecuzione:",
|
||||||
"general_event_title": "Esecuzione di un evento ad-hoc",
|
"general_event_title": "Esecuzione di un evento ad-hoc",
|
||||||
"go_to_node_event_icon": "fa-square-up-right",
|
"go_to_device_event_tooltip": "Naviga al dispositivo",
|
||||||
"go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato",
|
"go_to_node_event_tooltip": "Passa alla pagina Rete del nodo specificato",
|
||||||
"new_version_available": "È disponibile una nuova versione.",
|
"new_version_available": "È disponibile una nuova versione.",
|
||||||
"report_guid": "GUID notifica:",
|
"report_guid": "GUID notifica:",
|
||||||
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
|
"report_guid_missing": "Notifica collegata non trovata. C'è un piccolo ritardo tra la disponibilità delle notifiche inviate di recente e la loro disponibilità. Aggiorna la pagina e la cache dopo alcuni secondi. È anche possibile che la notifica selezionata sia stata eliminata durante la manutenzione come specificato nell'impostazione <code>DBCLNP_NOTIFI_HIST</code>. <br/> <br/>Viene invece visualizzata l'ultima notifica. La notifica mancante ha il seguente GUID:",
|
||||||
"report_select_format": "Seleziona formato:",
|
"report_select_format": "Seleziona formato:",
|
||||||
"report_time": "Orario notifica:",
|
"report_time": "Orario notifica:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Abilita l'impostazione e salva le modifiche prima di eseguirla.",
|
"run_event_tooltip": "Abilita l'impostazione e salva le modifiche prima di eseguirla.",
|
||||||
|
"select_icon_event_tooltip": "Seleziona icona",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
"settings_device_scanners": "Scanner dei dispositivi utilizzati per rilevare i dispositivi che scrivono nella tabella del database CurrentScan.",
|
"settings_device_scanners": "Scanner dei dispositivi utilizzati per rilevare i dispositivi che scrivono nella tabella del database CurrentScan.",
|
||||||
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
"settings_device_scanners_icon": "fa-solid fa-magnifying-glass-plus",
|
||||||
"settings_device_scanners_info": "Carica ancora più scanner di dispositivi con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_device_scanners_info": "Carica più scanner di dispositivi con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_device_scanners_label": "Scanner dispositivi",
|
"settings_device_scanners_label": "Scanner dispositivi",
|
||||||
"settings_enabled": "Impostazioni abilitate",
|
"settings_enabled": "Impostazioni abilitate",
|
||||||
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
"settings_enabled_icon": "fa-solid fa-toggle-on",
|
||||||
@@ -735,7 +746,7 @@
|
|||||||
"settings_imported_label": "Impostazioni importate",
|
"settings_imported_label": "Impostazioni importate",
|
||||||
"settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.",
|
"settings_missing": "Non tutte le impostazioni sono state caricate! Carico elevato sul database o sulla sequenza di avvio dell'app. Fai clic sul pulsante 🔄 ricarica in alto.",
|
||||||
"settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).",
|
"settings_missing_block": "Errore: impostazioni non caricate correttamente. Fai clic sul pulsante di ricarica 🔄 in alto, in alternativa, controlla il registro del browser per i dettagli (F12).",
|
||||||
"settings_old": "Importazione impostazioni e riavvio in corso...",
|
"settings_old": "Importazione impostazioni e riavvio in corso…",
|
||||||
"settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.",
|
"settings_other_scanners": "Altri plugin, non scanner per dispositivi, che sono attualmente abilitati.",
|
||||||
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
"settings_other_scanners_icon": "fa-solid fa-recycle",
|
||||||
"settings_other_scanners_label": "Altri scanner",
|
"settings_other_scanners_label": "Altri scanner",
|
||||||
@@ -744,10 +755,9 @@
|
|||||||
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
"settings_publishers_info": "Carica più editori con l'impostazione <a href=\"/settings.php#LOADED_PLUGINS\">LOADED_PLUGINS</a>",
|
||||||
"settings_publishers_label": "Editori",
|
"settings_publishers_label": "Editori",
|
||||||
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
"settings_readonly": "Impossibile LEGGERE o SCRIVERE <code>app.conf</code>. Prova a riavviare il contenitore e leggi la <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/FILE_PERMISSIONS.md\" target=\"_blank\">documentazione sulle autorizzazioni dei file</a>",
|
||||||
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso... <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
"settings_saved": "<br/>Impostazioni salvate. <br/> Aggiornamento in corso… <br/> <i class=\"ion ion-ios-loop-strong fa-spin fa-2x fa-fw\"></i> <br/>",
|
||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "Sistema",
|
"settings_system_label": "Sistema",
|
||||||
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
|
"settings_update_item_warning": "Aggiorna il valore qui sotto. Fai attenzione a seguire il formato precedente. <b>La convalida non viene eseguita.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
|
"test_event_tooltip": "Salva le modifiche prima di provare le nuove impostazioni."
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Slett hendelser eldre enn",
|
"DAYS_TO_KEEP_EVENTS_name": "Slett hendelser eldre enn",
|
||||||
"DISCOVER_PLUGINS_description": "",
|
"DISCOVER_PLUGINS_description": "",
|
||||||
"DISCOVER_PLUGINS_name": "",
|
"DISCOVER_PLUGINS_name": "",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Kopier detaljer fra enhet",
|
"DevDetail_Copy_Device_Title": "<i class=\"fa fa-copy\"></i> Kopier detaljer fra enhet",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Kopier detaljer fra enheten via nedtrekks menyen. Alt på denne siden vil bli overskrevet",
|
"DevDetail_Copy_Device_Tooltip": "Kopier detaljer fra enheten via nedtrekks menyen. Alt på denne siden vil bli overskrevet",
|
||||||
"DevDetail_CustomProperties_Title": "",
|
"DevDetail_CustomProperties_Title": "",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Type",
|
"DevDetail_MainInfo_Type": "Type",
|
||||||
"DevDetail_MainInfo_Vendor": "Leverandør",
|
"DevDetail_MainInfo_Vendor": "Leverandør",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Velg overordnet nettverksenhet til enheten som er tilkoblet, for å fylle nettverkstreet.",
|
"DevDetail_Network_Node_hover": "Velg overordnet nettverksenhet til enheten som er tilkoblet, for å fylle nettverkstreet.",
|
||||||
"DevDetail_Network_Port_hover": "Porten denne enheten er koblet til på overordnet nettverksenhet. Hvis den er tom, vises et wifi-ikon i nettverkstreet i stedet.",
|
"DevDetail_Network_Port_hover": "Porten denne enheten er koblet til på overordnet nettverksenhet. Hvis den er tom, vises et wifi-ikon i nettverkstreet i stedet.",
|
||||||
"DevDetail_Nmap_Scans": "Manuelle Nmap-skanninger",
|
"DevDetail_Nmap_Scans": "Manuelle Nmap-skanninger",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Forsiktig. Ved å klikke på denne vil verdien til venstre brukes på alle enhetene som er valgt ovenfor.",
|
"Device_MultiEdit_Tooltip": "Forsiktig. Ved å klikke på denne vil verdien til venstre brukes på alle enhetene som er valgt ovenfor.",
|
||||||
"Device_Searchbox": "Søk",
|
"Device_Searchbox": "Søk",
|
||||||
"Device_Shortcut_AllDevices": "Mine Enheter",
|
"Device_Shortcut_AllDevices": "Mine Enheter",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arkivert",
|
"Device_Shortcut_Archived": "Arkivert",
|
||||||
"Device_Shortcut_Connected": "Tilkoblet",
|
"Device_Shortcut_Connected": "Tilkoblet",
|
||||||
"Device_Shortcut_Devices": "Enheter",
|
"Device_Shortcut_Devices": "Enheter",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Navn",
|
"Device_TableHead_Name": "Navn",
|
||||||
"Device_TableHead_NetworkSite": "",
|
"Device_TableHead_NetworkSite": "",
|
||||||
"Device_TableHead_Owner": "Eier",
|
"Device_TableHead_Owner": "Eier",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Overordnet node MAC",
|
"Device_TableHead_Parent_MAC": "Overordnet node MAC",
|
||||||
"Device_TableHead_Port": "Port",
|
"Device_TableHead_Port": "Port",
|
||||||
"Device_TableHead_PresentLastScan": "",
|
"Device_TableHead_PresentLastScan": "",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "Rad ID",
|
"Device_TableHead_RowID": "Rad ID",
|
||||||
"Device_TableHead_Rowid": "Rad ID",
|
"Device_TableHead_Rowid": "Rad ID",
|
||||||
"Device_TableHead_SSID": "",
|
"Device_TableHead_SSID": "",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "Avbryt",
|
"Gen_Cancel": "Avbryt",
|
||||||
"Gen_Change": "",
|
"Gen_Change": "",
|
||||||
"Gen_Copy": "Kjør",
|
"Gen_Copy": "Kjør",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - Det kan ta litt tid før brukergrensesnittet oppdateres hvis en skanning kjøres.",
|
"Gen_DataUpdatedUITakesTime": "OK - Det kan ta litt tid før brukergrensesnittet oppdateres hvis en skanning kjøres.",
|
||||||
"Gen_Delete": "Slett",
|
"Gen_Delete": "Slett",
|
||||||
"Gen_DeleteAll": "Slett alle",
|
"Gen_DeleteAll": "Slett alle",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Feil",
|
"Gen_Error": "Feil",
|
||||||
"Gen_Filter": "Filter",
|
"Gen_Filter": "Filter",
|
||||||
"Gen_Generate": "",
|
"Gen_Generate": "",
|
||||||
|
"Gen_InvalidMac": "",
|
||||||
"Gen_LockedDB": "FEIL - DB kan være låst - Sjekk F12 Dev tools -> Konsoll eller prøv senere.",
|
"Gen_LockedDB": "FEIL - DB kan være låst - Sjekk F12 Dev tools -> Konsoll eller prøv senere.",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "Frakoblet",
|
"Gen_Offline": "Frakoblet",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "",
|
"Gen_Online": "",
|
||||||
@@ -321,6 +329,7 @@
|
|||||||
"Gen_SelectIcon": "",
|
"Gen_SelectIcon": "",
|
||||||
"Gen_SelectToPreview": "",
|
"Gen_SelectToPreview": "",
|
||||||
"Gen_Selected_Devices": "Valgte Enheter:",
|
"Gen_Selected_Devices": "Valgte Enheter:",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "Bytt",
|
"Gen_Switch": "Bytt",
|
||||||
"Gen_Upd": "Oppdatering vellykket",
|
"Gen_Upd": "Oppdatering vellykket",
|
||||||
"Gen_Upd_Fail": "Oppdatering feilet",
|
"Gen_Upd_Fail": "Oppdatering feilet",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "Arbeidsflyter",
|
"Navigation_Workflows": "Arbeidsflyter",
|
||||||
"Network_Assign": "Koble til ovenfor <i class=\"fa fa-server\"></i> nettverksnode",
|
"Network_Assign": "Koble til ovenfor <i class=\"fa fa-server\"></i> nettverksnode",
|
||||||
"Network_Cant_Assign": "Kan ikke tilordne rot-internettnoden som sekundær node.",
|
"Network_Cant_Assign": "Kan ikke tilordne rot-internettnoden som sekundær node.",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "Konfigurasjonsfeil",
|
"Network_Configuration_Error": "Konfigurasjonsfeil",
|
||||||
"Network_Connected": "Tilkoblede enheter",
|
"Network_Connected": "Tilkoblede enheter",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "Legg til enhet",
|
"Network_ManageAdd": "Legg til enhet",
|
||||||
"Network_ManageAdd_Name": "Enhetsnavn",
|
"Network_ManageAdd_Name": "Enhetsnavn",
|
||||||
"Network_ManageAdd_Name_text": "Navn uten spesialtegn",
|
"Network_ManageAdd_Name_text": "Navn uten spesialtegn",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "Rotnode",
|
"Network_Root": "Rotnode",
|
||||||
"Network_Root_Not_Configured": "Velg en nettverksenhetstype, for eksempel <b>Gateway</b>, i <b>Type</b> -feltet til <a href=\"deviceDetails.php?mac=Internet\">Internet Root -enheten</a> for å begynne å konfigurere på denne siden. <br/><br/> Mer dokumentasjon finner du i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Hvordan konfigurere nettverkssiden din</a> guide",
|
"Network_Root_Not_Configured": "Velg en nettverksenhetstype, for eksempel <b>Gateway</b>, i <b>Type</b> -feltet til <a href=\"deviceDetails.php?mac=Internet\">Internet Root -enheten</a> for å begynne å konfigurere på denne siden. <br/><br/> Mer dokumentasjon finner du i <a href=\"https://github.com/jokob-sk/NetAlertX/blob/main/docs/NETWORK_TREE.md\" target=\"_blank\">Hvordan konfigurere nettverkssiden din</a> guide",
|
||||||
"Network_Root_Unconfigurable": "Ukonfigurerbar rot",
|
"Network_Root_Unconfigurable": "Ukonfigurerbar rot",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "Vertsnavn",
|
"Network_Table_Hostname": "Vertsnavn",
|
||||||
"Network_Table_IP": "IP",
|
"Network_Table_IP": "IP",
|
||||||
"Network_Table_State": "Tilstand",
|
"Network_Table_State": "Tilstand",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "⚠ Enhetsskanning tidsplan er ikke synkronisert lenger.",
|
"Settings_device_Scanners_desync": "⚠ Enhetsskanning tidsplan er ikke synkronisert lenger.",
|
||||||
"Settings_device_Scanners_desync_popup": "Tidsplanene for enhetsskanning (<code>*_RUN_SCHD</code>) er ikke de samme. Dette vil føre til inkonsekvent enhet på online/offline varsler. Med mindre dette er ment, kan du bruke den samme tidsplanen for alle aktiverte <b> 🔍Enhets-skannere</b>.",
|
"Settings_device_Scanners_desync_popup": "Tidsplanene for enhetsskanning (<code>*_RUN_SCHD</code>) er ikke de samme. Dette vil føre til inkonsekvent enhet på online/offline varsler. Med mindre dette er ment, kan du bruke den samme tidsplanen for alle aktiverte <b> 🔍Enhets-skannere</b>.",
|
||||||
"Speedtest_Results": "Speedtest resultater",
|
"Speedtest_Results": "Speedtest resultater",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "CPU",
|
"Systeminfo_CPU": "CPU",
|
||||||
"Systeminfo_CPU_Cores": "CPU-kjerner:",
|
"Systeminfo_CPU_Cores": "CPU-kjerner:",
|
||||||
"Systeminfo_CPU_Name": "CPU-navn:",
|
"Systeminfo_CPU_Name": "CPU-navn:",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"devices_old": "Oppdaterer...",
|
"devices_old": "Oppdaterer...",
|
||||||
"general_event_description": "Hendelsen du har utløst kan ta en stund til før bakgrunnsprosesser er ferdig. Utførelsen ble avsluttet når utførelseskøen nedenfor tømmes (sjekk <a href='/maintenance.php#tab_Logging'>Feillogg</a> Hvis du møter problemer). <br/> <br/> Utførelseskø:",
|
"general_event_description": "Hendelsen du har utløst kan ta en stund til før bakgrunnsprosesser er ferdig. Utførelsen ble avsluttet når utførelseskøen nedenfor tømmes (sjekk <a href='/maintenance.php#tab_Logging'>Feillogg</a> Hvis du møter problemer). <br/> <br/> Utførelseskø:",
|
||||||
"general_event_title": "Utfører en ad-hoc hendelse",
|
"general_event_title": "Utfører en ad-hoc hendelse",
|
||||||
"go_to_node_event_icon": "",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "Notifikasjons GUID:",
|
"report_guid": "Notifikasjons GUID:",
|
||||||
"report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:",
|
"report_guid_missing": "Koblet notifikasjon ikke funnet. Det er en liten forsinkelse mellom nylig sendt notifikasjoner og at de er tilgjengelige. Oppdater siden din og hurtigbufferen etter noen sekunder. Det er også mulig den valgte notifikasjonen er slettet under vedlikehold som spesifisert i <code>DBCLNP_NOTIFI_HIST</code> innstillingen. <br/> <br/> Den siste notifikasjonen vises i stedet. Den manglende notifikasjonen har følgende GUID:",
|
||||||
"report_select_format": "Velg format:",
|
"report_select_format": "Velg format:",
|
||||||
"report_time": "Notifikasjonstid:",
|
"report_time": "Notifikasjonstid:",
|
||||||
"run_event_icon": "fa-play",
|
|
||||||
"run_event_tooltip": "Aktiver innstillingen og lagre endringene først før du kjører den.",
|
"run_event_tooltip": "Aktiver innstillingen og lagre endringene først før du kjører den.",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "fa-solid fa-gem",
|
"settings_core_icon": "fa-solid fa-gem",
|
||||||
"settings_core_label": "Core",
|
"settings_core_label": "Core",
|
||||||
"settings_device_scanners": "Enhets-skannere som brukes til å oppdage enheter som skrives inn i CurrentScan databasetabellen.",
|
"settings_device_scanners": "Enhets-skannere som brukes til å oppdage enheter som skrives inn i CurrentScan databasetabellen.",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "fa-solid fa-gear",
|
"settings_system_icon": "fa-solid fa-gear",
|
||||||
"settings_system_label": "System",
|
"settings_system_label": "System",
|
||||||
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
|
"settings_update_item_warning": "Oppdater verdien nedenfor. Pass på å følge forrige format. <b>Validering etterpå utføres ikke.</b>",
|
||||||
"test_event_icon": "fa-vial-circle-check",
|
|
||||||
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
"test_event_tooltip": "Lagre endringene først, før du tester innstillingene dine."
|
||||||
}
|
}
|
||||||
@@ -66,6 +66,7 @@
|
|||||||
"DAYS_TO_KEEP_EVENTS_name": "Excluir eventos mais antigos que",
|
"DAYS_TO_KEEP_EVENTS_name": "Excluir eventos mais antigos que",
|
||||||
"DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição<code>LOADED_PLUGINS</code>.",
|
"DISCOVER_PLUGINS_description": "Desative esta opção para acelerar a inicialização e a gravação de definições. Quando desativada, os plug-ins não são descobertos e não é possível adicionar novos plug-ins à definição<code>LOADED_PLUGINS</code>.",
|
||||||
"DISCOVER_PLUGINS_name": "Descobrir plugins",
|
"DISCOVER_PLUGINS_name": "Descobrir plugins",
|
||||||
|
"DevDetail_Children_Title": "",
|
||||||
"DevDetail_Copy_Device_Title": "Copiar detalhes do dispositivo",
|
"DevDetail_Copy_Device_Title": "Copiar detalhes do dispositivo",
|
||||||
"DevDetail_Copy_Device_Tooltip": "Copiar detalhes do dispositivo a partir da lista pendente. Tudo o que se encontra nesta página será substituído",
|
"DevDetail_Copy_Device_Tooltip": "Copiar detalhes do dispositivo a partir da lista pendente. Tudo o que se encontra nesta página será substituído",
|
||||||
"DevDetail_CustomProperties_Title": "Propriedades personalizadas",
|
"DevDetail_CustomProperties_Title": "Propriedades personalizadas",
|
||||||
@@ -102,6 +103,7 @@
|
|||||||
"DevDetail_MainInfo_Type": "Tipo",
|
"DevDetail_MainInfo_Type": "Tipo",
|
||||||
"DevDetail_MainInfo_Vendor": "Vendedor",
|
"DevDetail_MainInfo_Vendor": "Vendedor",
|
||||||
"DevDetail_MainInfo_mac": "MAC",
|
"DevDetail_MainInfo_mac": "MAC",
|
||||||
|
"DevDetail_NavToChildNode": "",
|
||||||
"DevDetail_Network_Node_hover": "Selecione o dispositivo de rede principal ao qual o dispositivo atual está conectado, para preencher a árvore Rede.",
|
"DevDetail_Network_Node_hover": "Selecione o dispositivo de rede principal ao qual o dispositivo atual está conectado, para preencher a árvore Rede.",
|
||||||
"DevDetail_Network_Port_hover": "A porta a que este dispositivo está ligado no dispositivo de rede principal. Se for deixado vazio, é apresentado um ícone wifi na árvore Rede.",
|
"DevDetail_Network_Port_hover": "A porta a que este dispositivo está ligado no dispositivo de rede principal. Se for deixado vazio, é apresentado um ícone wifi na árvore Rede.",
|
||||||
"DevDetail_Nmap_Scans": "Varreduras manuais do Nmap",
|
"DevDetail_Nmap_Scans": "Varreduras manuais do Nmap",
|
||||||
@@ -200,6 +202,7 @@
|
|||||||
"Device_MultiEdit_Tooltip": "Cuidadoso. Clicar aqui aplicará o valor à esquerda a todos os dispositivos selecionados acima.",
|
"Device_MultiEdit_Tooltip": "Cuidadoso. Clicar aqui aplicará o valor à esquerda a todos os dispositivos selecionados acima.",
|
||||||
"Device_Searchbox": "Procurar",
|
"Device_Searchbox": "Procurar",
|
||||||
"Device_Shortcut_AllDevices": "Meus dispositivos",
|
"Device_Shortcut_AllDevices": "Meus dispositivos",
|
||||||
|
"Device_Shortcut_AllNodes": "",
|
||||||
"Device_Shortcut_Archived": "Arquivado",
|
"Device_Shortcut_Archived": "Arquivado",
|
||||||
"Device_Shortcut_Connected": "Conectado",
|
"Device_Shortcut_Connected": "Conectado",
|
||||||
"Device_Shortcut_Devices": "Dispositivos",
|
"Device_Shortcut_Devices": "Dispositivos",
|
||||||
@@ -226,9 +229,11 @@
|
|||||||
"Device_TableHead_Name": "Nome",
|
"Device_TableHead_Name": "Nome",
|
||||||
"Device_TableHead_NetworkSite": "Site da rede",
|
"Device_TableHead_NetworkSite": "Site da rede",
|
||||||
"Device_TableHead_Owner": "Proprietário",
|
"Device_TableHead_Owner": "Proprietário",
|
||||||
|
"Device_TableHead_ParentRelType": "",
|
||||||
"Device_TableHead_Parent_MAC": "Nó pai MAC",
|
"Device_TableHead_Parent_MAC": "Nó pai MAC",
|
||||||
"Device_TableHead_Port": "Porta",
|
"Device_TableHead_Port": "Porta",
|
||||||
"Device_TableHead_PresentLastScan": "Presente",
|
"Device_TableHead_PresentLastScan": "Presente",
|
||||||
|
"Device_TableHead_ReqNicsOnline": "",
|
||||||
"Device_TableHead_RowID": "ID da linha",
|
"Device_TableHead_RowID": "ID da linha",
|
||||||
"Device_TableHead_Rowid": "ID da linha",
|
"Device_TableHead_Rowid": "ID da linha",
|
||||||
"Device_TableHead_SSID": "SSID",
|
"Device_TableHead_SSID": "SSID",
|
||||||
@@ -296,6 +301,7 @@
|
|||||||
"Gen_Cancel": "Cancelar",
|
"Gen_Cancel": "Cancelar",
|
||||||
"Gen_Change": "Alterar",
|
"Gen_Change": "Alterar",
|
||||||
"Gen_Copy": "Executar",
|
"Gen_Copy": "Executar",
|
||||||
|
"Gen_CopyToClipboard": "",
|
||||||
"Gen_DataUpdatedUITakesTime": "OK - Pode levar um tempo para a interface do usuário ser atualizada se uma verificação estiver em execução.",
|
"Gen_DataUpdatedUITakesTime": "OK - Pode levar um tempo para a interface do usuário ser atualizada se uma verificação estiver em execução.",
|
||||||
"Gen_Delete": "Excluir",
|
"Gen_Delete": "Excluir",
|
||||||
"Gen_DeleteAll": "Excluir todos",
|
"Gen_DeleteAll": "Excluir todos",
|
||||||
@@ -303,7 +309,9 @@
|
|||||||
"Gen_Error": "Erro",
|
"Gen_Error": "Erro",
|
||||||
"Gen_Filter": "Filtro",
|
"Gen_Filter": "Filtro",
|
||||||
"Gen_Generate": "Gerar",
|
"Gen_Generate": "Gerar",
|
||||||
|
"Gen_InvalidMac": "",
|
||||||
"Gen_LockedDB": "ERRO - O banco de dados pode estar bloqueado - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.",
|
"Gen_LockedDB": "ERRO - O banco de dados pode estar bloqueado - Verifique F12 Ferramentas de desenvolvimento -> Console ou tente mais tarde.",
|
||||||
|
"Gen_NetworkMask": "",
|
||||||
"Gen_Offline": "Offline",
|
"Gen_Offline": "Offline",
|
||||||
"Gen_Okay": "Ok",
|
"Gen_Okay": "Ok",
|
||||||
"Gen_Online": "Online",
|
"Gen_Online": "Online",
|
||||||
@@ -321,6 +329,7 @@
|
|||||||
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
"Gen_SelectIcon": "<i class=\"fa-solid fa-chevron-down fa-fade\"></i>",
|
||||||
"Gen_SelectToPreview": "Selecionar para pré-visualizar",
|
"Gen_SelectToPreview": "Selecionar para pré-visualizar",
|
||||||
"Gen_Selected_Devices": "Dispositivos selecionados:",
|
"Gen_Selected_Devices": "Dispositivos selecionados:",
|
||||||
|
"Gen_Subnet": "",
|
||||||
"Gen_Switch": "Trocar",
|
"Gen_Switch": "Trocar",
|
||||||
"Gen_Upd": "Atualizado com sucesso",
|
"Gen_Upd": "Atualizado com sucesso",
|
||||||
"Gen_Upd_Fail": "A atualização falhou",
|
"Gen_Upd_Fail": "A atualização falhou",
|
||||||
@@ -486,8 +495,10 @@
|
|||||||
"Navigation_Workflows": "",
|
"Navigation_Workflows": "",
|
||||||
"Network_Assign": "",
|
"Network_Assign": "",
|
||||||
"Network_Cant_Assign": "",
|
"Network_Cant_Assign": "",
|
||||||
|
"Network_Cant_Assign_No_Node_Selected": "",
|
||||||
"Network_Configuration_Error": "",
|
"Network_Configuration_Error": "",
|
||||||
"Network_Connected": "",
|
"Network_Connected": "",
|
||||||
|
"Network_Devices": "",
|
||||||
"Network_ManageAdd": "",
|
"Network_ManageAdd": "",
|
||||||
"Network_ManageAdd_Name": "",
|
"Network_ManageAdd_Name": "",
|
||||||
"Network_ManageAdd_Name_text": "",
|
"Network_ManageAdd_Name_text": "",
|
||||||
@@ -522,6 +533,8 @@
|
|||||||
"Network_Root": "",
|
"Network_Root": "",
|
||||||
"Network_Root_Not_Configured": "",
|
"Network_Root_Not_Configured": "",
|
||||||
"Network_Root_Unconfigurable": "",
|
"Network_Root_Unconfigurable": "",
|
||||||
|
"Network_ShowArchived": "",
|
||||||
|
"Network_ShowOffline": "",
|
||||||
"Network_Table_Hostname": "",
|
"Network_Table_Hostname": "",
|
||||||
"Network_Table_IP": "",
|
"Network_Table_IP": "",
|
||||||
"Network_Table_State": "",
|
"Network_Table_State": "",
|
||||||
@@ -585,6 +598,7 @@
|
|||||||
"Settings_device_Scanners_desync": "",
|
"Settings_device_Scanners_desync": "",
|
||||||
"Settings_device_Scanners_desync_popup": "",
|
"Settings_device_Scanners_desync_popup": "",
|
||||||
"Speedtest_Results": "",
|
"Speedtest_Results": "",
|
||||||
|
"Systeminfo_AvailableIps": "",
|
||||||
"Systeminfo_CPU": "",
|
"Systeminfo_CPU": "",
|
||||||
"Systeminfo_CPU_Cores": "",
|
"Systeminfo_CPU_Cores": "",
|
||||||
"Systeminfo_CPU_Name": "",
|
"Systeminfo_CPU_Name": "",
|
||||||
@@ -704,24 +718,21 @@
|
|||||||
"WF_Trigger": "",
|
"WF_Trigger": "",
|
||||||
"WF_Trigger_event_type": "",
|
"WF_Trigger_event_type": "",
|
||||||
"WF_Trigger_type": "",
|
"WF_Trigger_type": "",
|
||||||
"add_icon_event_icon": "",
|
|
||||||
"add_icon_event_tooltip": "",
|
"add_icon_event_tooltip": "",
|
||||||
"add_option_event_icon": "",
|
|
||||||
"add_option_event_tooltip": "",
|
"add_option_event_tooltip": "",
|
||||||
"copy_icons_event_icon": "",
|
|
||||||
"copy_icons_event_tooltip": "",
|
"copy_icons_event_tooltip": "",
|
||||||
"devices_old": "",
|
"devices_old": "",
|
||||||
"general_event_description": "",
|
"general_event_description": "",
|
||||||
"general_event_title": "",
|
"general_event_title": "",
|
||||||
"go_to_node_event_icon": "",
|
"go_to_device_event_tooltip": "",
|
||||||
"go_to_node_event_tooltip": "",
|
"go_to_node_event_tooltip": "",
|
||||||
"new_version_available": "",
|
"new_version_available": "",
|
||||||
"report_guid": "",
|
"report_guid": "",
|
||||||
"report_guid_missing": "",
|
"report_guid_missing": "",
|
||||||
"report_select_format": "",
|
"report_select_format": "",
|
||||||
"report_time": "",
|
"report_time": "",
|
||||||
"run_event_icon": "",
|
|
||||||
"run_event_tooltip": "",
|
"run_event_tooltip": "",
|
||||||
|
"select_icon_event_tooltip": "",
|
||||||
"settings_core_icon": "",
|
"settings_core_icon": "",
|
||||||
"settings_core_label": "",
|
"settings_core_label": "",
|
||||||
"settings_device_scanners": "",
|
"settings_device_scanners": "",
|
||||||
@@ -748,6 +759,5 @@
|
|||||||
"settings_system_icon": "",
|
"settings_system_icon": "",
|
||||||
"settings_system_label": "",
|
"settings_system_label": "",
|
||||||
"settings_update_item_warning": "",
|
"settings_update_item_warning": "",
|
||||||
"test_event_icon": "",
|
|
||||||
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
|
"test_event_tooltip": "Guarde as alterações antes de testar as definições."
|
||||||
}
|
}
|
||||||