Merge branch 'master' of github.com:ZoneMinder/ZoneMinder
This commit is contained in:
commit
6d58f6591b
|
@ -10,3 +10,4 @@ stamp-h1
|
||||||
stamp-h.in
|
stamp-h.in
|
||||||
scripts/ZoneMinder/blib
|
scripts/ZoneMinder/blib
|
||||||
Makefile.in
|
Makefile.in
|
||||||
|
docs/_build
|
||||||
|
|
|
@ -18,7 +18,7 @@ compiler:
|
||||||
- gcc
|
- gcc
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
- sudo apt-get install -y -qq zlib1g-dev apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm subversion automake autoconf cmake libjpeg-turbo8-dev apache2-mpm-prefork libapache2-mod-php5 php5-cli libtheora-dev libvorbis-dev libvpx-dev libx264-dev 2>&1 > /dev/null
|
- sudo apt-get install -y -qq zlib1g-dev apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf cmake libjpeg-turbo8-dev apache2-mpm-prefork libapache2-mod-php5 php5-cli libtheora-dev libvorbis-dev libvpx-dev libx264-dev 2>&1 > /dev/null
|
||||||
install:
|
install:
|
||||||
- git clone --depth=10 --branch=master git://source.ffmpeg.org/ffmpeg.git
|
- git clone --depth=10 --branch=master git://source.ffmpeg.org/ffmpeg.git
|
||||||
- cd ffmpeg
|
- cd ffmpeg
|
||||||
|
|
|
@ -9,10 +9,9 @@ ENV DEBIAN_FRONTEND noninteractive
|
||||||
# Resynchronize the package index files
|
# Resynchronize the package index files
|
||||||
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
|
RUN echo "deb http://archive.ubuntu.com/ubuntu precise main universe" > /etc/apt/sources.list
|
||||||
RUN apt-get update
|
RUN apt-get update
|
||||||
RUN apt-get upgrade -y
|
|
||||||
|
|
||||||
# Install the prerequisites
|
# Install the prerequisites
|
||||||
RUN apt-get install -y build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm subversion automake autoconf libjpeg-turbo8-dev libjpeg-turbo8 libtheora-dev libvorbis-dev libvpx-dev libx264-dev libmp4v2-dev ffmpeg git wget mysql-client apache2 php5 php5-mysql apache2-mpm-prefork libapache2-mod-php5 php5-cli openssh-server mysql-server libvlc-dev libvlc5 libvlccore-dev libvlccore5 vlc-data vlc libcurl4-openssl-dev
|
RUN apt-get install -y build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf libjpeg-turbo8-dev libjpeg-turbo8 libtheora-dev libvorbis-dev libvpx-dev libx264-dev libmp4v2-dev ffmpeg git wget mysql-client apache2 php5 php5-mysql apache2-mpm-prefork libapache2-mod-php5 php5-cli openssh-server mysql-server libvlc-dev libvlc5 libvlccore-dev libvlccore5 vlc-data vlc libcurl4-openssl-dev
|
||||||
|
|
||||||
# Grab the latest ZoneMinder code in master
|
# Grab the latest ZoneMinder code in master
|
||||||
RUN git clone https://github.com/kylejohnson/ZoneMinder.git
|
RUN git clone https://github.com/kylejohnson/ZoneMinder.git
|
||||||
|
|
|
@ -22,7 +22,7 @@ If you are compiling ZoneMinder from source, the below list contains the package
|
||||||
A fresh build based on master branch running Ubuntu 1204 LTS. Will likely work for other versions as well.
|
A fresh build based on master branch running Ubuntu 1204 LTS. Will likely work for other versions as well.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
root@host:~# aptitude install -y apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm subversion automake autoconf libjpeg8-dev libjpeg8 apache2-mpm-prefork libapache2-mod-php5 php5-cli libphp-serialization-perl libgnutls-dev libjpeg8-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev libtool ffmpeg libnetpbm10-dev libavdevice-dev libmime-lite-perl dh-autoreconf dpatch;
|
root@host:~# aptitude install -y apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf libjpeg8-dev libjpeg8 apache2-mpm-prefork libapache2-mod-php5 php5-cli libphp-serialization-perl libgnutls-dev libjpeg8-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev libtool ffmpeg libnetpbm10-dev libavdevice-dev libmime-lite-perl dh-autoreconf dpatch;
|
||||||
|
|
||||||
root@host:~# git clone https://github.com/ZoneMinder/ZoneMinder.git zoneminder;
|
root@host:~# git clone https://github.com/ZoneMinder/ZoneMinder.git zoneminder;
|
||||||
root@host:~# cd zoneminder;
|
root@host:~# cd zoneminder;
|
||||||
|
@ -58,7 +58,7 @@ root@host:~# gdebi /root/zoneminder_1.26.4-1_amd64.deb;
|
||||||
```bash
|
```bash
|
||||||
sudo apt-get install apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev \
|
sudo apt-get install apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev \
|
||||||
libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 \
|
libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 \
|
||||||
libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm subversion automake autoconf libjpeg-turbo8-dev libjpeg-turbo8 \
|
libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf libjpeg-turbo8-dev libjpeg-turbo8 \
|
||||||
apache2-mpm-prefork libapache2-mod-php5 php5-cli
|
apache2-mpm-prefork libapache2-mod-php5 php5-cli
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ apache2-mpm-prefork libapache2-mod-php5 php5-cli
|
||||||
A fresh build based on master branch running Debian 7 (wheezy):
|
A fresh build based on master branch running Debian 7 (wheezy):
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
root@host:~# aptitude install -y apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm subversion automake autoconf libjpeg8-dev libjpeg8 apache2-mpm-prefork libapache2-mod-php5 php5-cli libphp-serialization-perl libgnutls-dev libjpeg8-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev libtool ffmpeg libnetpbm10-dev libavdevice-dev libmime-lite-perl dh-autoreconf dpatch;
|
root@host:~# aptitude install -y apache2 mysql-server php5 php5-mysql build-essential libmysqlclient-dev libssl-dev libbz2-dev libpcre3-dev libdbi-perl libarchive-zip-perl libdate-manip-perl libdevice-serialport-perl libmime-perl libpcre3 libwww-perl libdbd-mysql-perl libsys-mmap-perl yasm automake autoconf libjpeg8-dev libjpeg8 apache2-mpm-prefork libapache2-mod-php5 php5-cli libphp-serialization-perl libgnutls-dev libjpeg8-dev libavcodec-dev libavformat-dev libswscale-dev libavutil-dev libv4l-dev libtool ffmpeg libnetpbm10-dev libavdevice-dev libmime-lite-perl dh-autoreconf dpatch;
|
||||||
|
|
||||||
root@host:~# git clone https://github.com/ZoneMinder/ZoneMinder.git zoneminder;
|
root@host:~# git clone https://github.com/ZoneMinder/ZoneMinder.git zoneminder;
|
||||||
root@host:~# cd zoneminder;
|
root@host:~# cd zoneminder;
|
||||||
|
@ -125,7 +125,7 @@ Once your repos are in order, install the following:
|
||||||
sudo yum install automake bzip2-devel ffmpeg ffmpeg-devel gnutls-devel httpd libjpeg-turbo libjpeg-turbo-devel mysql-devel mysql-server pcre-devel \
|
sudo yum install automake bzip2-devel ffmpeg ffmpeg-devel gnutls-devel httpd libjpeg-turbo libjpeg-turbo-devel mysql-devel mysql-server pcre-devel \
|
||||||
perl-Archive-Tar perl-Archive-Zip perl-Convert-BinHex perl-Date-Manip perl-DBD-MySQL perl-DBI perl-Device-SerialPort perl-Email-Date-Format perl-IO-stringy \
|
perl-Archive-Tar perl-Archive-Zip perl-Convert-BinHex perl-Date-Manip perl-DBD-MySQL perl-DBI perl-Device-SerialPort perl-Email-Date-Format perl-IO-stringy \
|
||||||
perl-IO-Zlib perl-MailTools perl-MIME-Lite perl-MIME-tools perl-MIME-Types perl-Module-Load perl-Package-Constants perl-Sys-Mmap perl-Time-HiRes \
|
perl-IO-Zlib perl-MailTools perl-MIME-Lite perl-MIME-tools perl-MIME-Types perl-Module-Load perl-Package-Constants perl-Sys-Mmap perl-Time-HiRes \
|
||||||
perl-TimeDate perl-YAML-Syck php php-cli php-mysql subversion x264 vlc-devel vlc-core libcurl libcurl-devel
|
perl-TimeDate perl-YAML-Syck php php-cli php-mysql x264 vlc-devel vlc-core libcurl libcurl-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
### ffmpeg
|
### ffmpeg
|
||||||
|
|
|
@ -353,6 +353,7 @@ CREATE TABLE `Monitors` (
|
||||||
`AlarmFrameCount` smallint(5) unsigned NOT NULL default '1',
|
`AlarmFrameCount` smallint(5) unsigned NOT NULL default '1',
|
||||||
`SectionLength` int(10) unsigned NOT NULL default '600',
|
`SectionLength` int(10) unsigned NOT NULL default '600',
|
||||||
`FrameSkip` smallint(5) unsigned NOT NULL default '0',
|
`FrameSkip` smallint(5) unsigned NOT NULL default '0',
|
||||||
|
`MotionFrameSkip` smallint(5) unsigned NOT NULL default '0',
|
||||||
`MaxFPS` decimal(5,2) default NULL,
|
`MaxFPS` decimal(5,2) default NULL,
|
||||||
`AlarmMaxFPS` decimal(5,2) default NULL,
|
`AlarmMaxFPS` decimal(5,2) default NULL,
|
||||||
`FPSReportInterval` smallint(5) unsigned NOT NULL default '250',
|
`FPSReportInterval` smallint(5) unsigned NOT NULL default '250',
|
||||||
|
|
|
@ -5,5 +5,153 @@
|
||||||
--
|
--
|
||||||
-- Add Controls definition for Wanscam
|
-- Add Controls definition for Wanscam
|
||||||
--
|
--
|
||||||
|
INSERT INTO Controls
|
||||||
|
SELECT * FROM (SELECT NULL as Id,
|
||||||
|
'WanscamPT' as Name,
|
||||||
|
'Remote' as Type,
|
||||||
|
'Wanscam' as Protocol,
|
||||||
|
1 as CanWake,
|
||||||
|
1 as CanSleep,
|
||||||
|
1 as CanReset,
|
||||||
|
0 as CanZoom,
|
||||||
|
0 as CanAutoZoom,
|
||||||
|
0 as CanZoomAbs,
|
||||||
|
0 as CanZoomRel,
|
||||||
|
0 as CanZoomCon,
|
||||||
|
0 as MinZoomRange,
|
||||||
|
0 as MaxZoomRange,
|
||||||
|
0 as MinZoomStep,
|
||||||
|
0 as MaxZoomStep,
|
||||||
|
0 as HasZoomSpeed,
|
||||||
|
0 as MinZoomSpeed,
|
||||||
|
0 as MaxZoomSpeed,
|
||||||
|
0 as CanFocus,
|
||||||
|
0 as CanAutoFocus,
|
||||||
|
0 as CanFocusAbs,
|
||||||
|
0 as CanFocusRel,
|
||||||
|
0 as CanFocusCon,
|
||||||
|
0 as MinFocusRange,
|
||||||
|
0 as MaxFocusRange,
|
||||||
|
0 as MinFocusStep,
|
||||||
|
0 as MaxFocusStep,
|
||||||
|
0 as HasFocusSpeed,
|
||||||
|
0 as MinFocusSpeed,
|
||||||
|
0 as MaxFocusSpeed,
|
||||||
|
1 as CanIris,
|
||||||
|
0 as CanAutoIris,
|
||||||
|
1 as CanIrisAbs,
|
||||||
|
0 as CanIrisRel,
|
||||||
|
0 as CanIrisCon,
|
||||||
|
0 as MinIrisRange,
|
||||||
|
16 as MaxIrisRange,
|
||||||
|
0 as MinIrisStep,
|
||||||
|
0 as MaxIrisStep,
|
||||||
|
0 as HasIrisSpeed,
|
||||||
|
0 as MinIrisSpeed,
|
||||||
|
0 as MaxIrisSpeed,
|
||||||
|
0 as CanGain,
|
||||||
|
0 as CanAutoGain,
|
||||||
|
0 as CanGainAbs,
|
||||||
|
0 as CanGainRel,
|
||||||
|
0 as CanGainCon,
|
||||||
|
0 as MinGainRange,
|
||||||
|
0 as MaxGainRange,
|
||||||
|
0 as MinGainStep,
|
||||||
|
0 as MaxGainStep,
|
||||||
|
0 as HasGainSpeed,
|
||||||
|
0 as MinGainSpeed,
|
||||||
|
0 as MaxGainSpeed,
|
||||||
|
1 as CanWhite,
|
||||||
|
0 as CanAutoWhite,
|
||||||
|
1 as CanWhiteAbs,
|
||||||
|
0 as CanWhiteRel,
|
||||||
|
0 as CanWhiteCon,
|
||||||
|
0 as MinWhiteRange,
|
||||||
|
16 as MaxWhiteRange,
|
||||||
|
0 as MinWhiteStep,
|
||||||
|
0 as MaxWhiteStep,
|
||||||
|
0 as HasWhiteSpeed,
|
||||||
|
0 as MinWhiteSpeed,
|
||||||
|
0 as MaxWhiteSpeed,
|
||||||
|
1 as HasPresets,
|
||||||
|
16 as NumPresets,
|
||||||
|
1 as HasHomePreset,
|
||||||
|
1 as CanSetPresets,
|
||||||
|
1 as CanMove,
|
||||||
|
1 as CanMoveDiag,
|
||||||
|
0 as CanMoveMap,
|
||||||
|
0 as CanMoveAbs,
|
||||||
|
0 as CanMoveRel,
|
||||||
|
1 as CanMoveCon,
|
||||||
|
1 as CanPan,
|
||||||
|
0 as MinPanRange,
|
||||||
|
0 as MaxPanRange,
|
||||||
|
0 as MinPanStep,
|
||||||
|
0 as MaxPanStep,
|
||||||
|
0 as HasPanSpeed,
|
||||||
|
0 as MinPanSpeed,
|
||||||
|
0 as MaxPanSpeed,
|
||||||
|
0 as HasTurboPan,
|
||||||
|
0 as TurboPanSpeed,
|
||||||
|
1 as CanTilt,
|
||||||
|
0 as MinTiltRange,
|
||||||
|
0 as MaxTiltRange,
|
||||||
|
0 as MinTiltStep,
|
||||||
|
0 as MaxTiltStep,
|
||||||
|
0 as HasTiltSpeed,
|
||||||
|
0 as MinTiltSpeed,
|
||||||
|
0 as MaxTiltSpeed,
|
||||||
|
0 as HasTurboTilt,
|
||||||
|
0 as TurboTiltSpeed,
|
||||||
|
0 as CanAutoScan,
|
||||||
|
0 as NumScanPaths) AS tmp
|
||||||
|
WHERE NOT EXISTS (
|
||||||
|
SELECT Name FROM Controls WHERE name = 'WanscamPT'
|
||||||
|
) LIMIT 1;
|
||||||
|
|
||||||
INSERT INTO Controls VALUES (NULL,'WanscamPT','Remote','Wanscam',1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,16,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1,0,0,0,16,0,0,0,0,0,1,16,1,1,1,1,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0);
|
-- Add extend alarm frame count to zone definition and Presets
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'Zones'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'ExtendAlarmFrames'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ExtendAlarmFrames exists in Zones'",
|
||||||
|
"ALTER TABLE `Zones` ADD `ExtendAlarmFrames` smallint(5) unsigned not null default 0 AFTER `OverloadFrames`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'ZonePresets'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'ExtendAlarmFrames'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 'Column ExtendAlarmFrames exists in ZonePresets'",
|
||||||
|
"ALTER TABLE `ZonePresets` ADD `ExtendAlarmFrames` smallint(5) unsigned not null default 0 AFTER `OverloadFrames`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Add MotionSkipFrame field for controlling how many frames motion detection should skip.
|
||||||
|
--
|
||||||
|
|
||||||
|
SET @s = (SELECT IF(
|
||||||
|
(SELECT COUNT(*)
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE table_name = 'Monitors'
|
||||||
|
AND table_schema = DATABASE()
|
||||||
|
AND column_name = 'MotionFrameSkip'
|
||||||
|
) > 0,
|
||||||
|
"SELECT 1",
|
||||||
|
"ALTER TABLE `Monitors` ADD `MotionFrameSkip` smallint(5) unsigned NOT NULL default '0' AFTER `FrameSkip`"
|
||||||
|
));
|
||||||
|
|
||||||
|
PREPARE stmt FROM @s;
|
||||||
|
EXECUTE stmt;
|
||||||
|
|
|
@ -1,4 +1,12 @@
|
||||||
# CMakeLists.txt for the OpenSuse Target Distro.
|
# CMakeLists.txt for the OpenSuse Target Distro.
|
||||||
|
# Amended Apr 02 2014 David Wilcox
|
||||||
|
# Add named variables so that if destinations change it will be easier
|
||||||
|
# temp directory was not being installed
|
||||||
|
|
||||||
|
SET(zmuid_final wwwrun)
|
||||||
|
SET(zmgid_final www)
|
||||||
|
SET(webroot /srv/www/htdocs)
|
||||||
|
SET(zm_webdir ${webroot}/zoneminder)
|
||||||
|
|
||||||
# Download jscalendar & move files into position
|
# Download jscalendar & move files into position
|
||||||
file(DOWNLOAD http://downloads.sourceforge.net/jscalendar/jscalendar-1.0.zip ${CMAKE_CURRENT_SOURCE_DIR}/jscalendar-1.0.zip STATUS download_jsc)
|
file(DOWNLOAD http://downloads.sourceforge.net/jscalendar/jscalendar-1.0.zip ${CMAKE_CURRENT_SOURCE_DIR}/jscalendar-1.0.zip STATUS download_jsc)
|
||||||
|
@ -19,13 +27,13 @@ file(MAKE_DIRECTORY sock swap zoneminder zoneminder-upload events images temp)
|
||||||
install(DIRECTORY zoneminder DESTINATION /var/log DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
install(DIRECTORY zoneminder DESTINATION /var/log DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
install(DIRECTORY zoneminder DESTINATION /var/run DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
install(DIRECTORY zoneminder DESTINATION /var/run DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
install(DIRECTORY zoneminder-upload DESTINATION /var/spool DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
install(DIRECTORY zoneminder-upload DESTINATION /var/spool DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
install(DIRECTORY zoneminder DESTINATION /srv/www/htdocs DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
install(DIRECTORY zoneminder DESTINATION ${webroot} DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
install(DIRECTORY events images DESTINATION /srv/www/htdocs/zoneminder DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
install(DIRECTORY events images temp DESTINATION ${zm_webdir} DIRECTORY_PERMISSIONS OWNER_WRITE OWNER_READ OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
|
||||||
|
|
||||||
# Create symlinks
|
# Create symlinks
|
||||||
install(CODE "execute_process(COMMAND ln -sf ../../../../srv/www/htdocs/zoneminder/events \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/events\")")
|
install(CODE "execute_process(COMMAND ln -sf ../../../../${zm_webdir}/events \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/events\")")
|
||||||
install(CODE "execute_process(COMMAND ln -sf ../../../../srv/www/htdocs/zoneminder/images \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/images\")")
|
install(CODE "execute_process(COMMAND ln -sf ../../../../${zm_webdir}/images \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/images\")")
|
||||||
install(CODE "execute_process(COMMAND ln -sf ../../../../srv/www/htdocs/zoneminder/temp \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/temp\")")
|
install(CODE "execute_process(COMMAND ln -sf ../../../../${zm_webdir}/temp \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/temp\")")
|
||||||
|
|
||||||
# Opensuse cambazola? requires cambozola as a separate package so just link to it
|
# Opensuse cambazola? requires cambozola as a separate package so just link to it
|
||||||
#install(CODE "execute_process(COMMAND ln -sf ../../java/cambozola.jar \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/www/cambozola.jar\")")
|
#install(CODE "execute_process(COMMAND ln -sf ../../java/cambozola.jar \"\$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_DATAROOTDIR}/zoneminder/www/cambozola.jar\")")
|
||||||
|
|
|
@ -23,16 +23,29 @@ OpenSuse Notes
|
||||||
2. OpenSuse prefers mariadb to mysql. mariadb is a direct replacement for mysql
|
2. OpenSuse prefers mariadb to mysql. mariadb is a direct replacement for mysql
|
||||||
and all mysql functions work in the same way. These notes assumes that you
|
and all mysql functions work in the same way. These notes assumes that you
|
||||||
are running mariadb.
|
are running mariadb.
|
||||||
|
|
||||||
|
3. It is necessary to add repositories to allow the zoneminder rpm to install.
|
||||||
|
These can be added using commands (as root):
|
||||||
|
zypper ar -f http://packman.inode.at/suse/openSUSE_13.1/ packman
|
||||||
|
zypper ar -f -n perl-modules http://download.opensuse.org/repositories/devel:/languages:/perl/openSUSE_13.1 perl-modules
|
||||||
|
|
||||||
|
The first time the repositories are accessed a prompt will be issued
|
||||||
|
asking if the key is to be trusted. We suggest that you a(lways) trust
|
||||||
|
this repository
|
||||||
|
|
||||||
|
4. There may be a prompt about the version of libavcodec.s0.55 and a change
|
||||||
|
of vendor for libavutil52. In order to allow zoneminder to run correctly
|
||||||
|
this solution change vendro should be accepted.
|
||||||
|
|
||||||
New installs
|
New installs
|
||||||
============
|
============
|
||||||
|
|
||||||
1. Unless you are already using the MySQL server or you are running it
|
1. Unless you are already using the MySQL server or you are running it
|
||||||
remotely you will need to ensure that the server is installed and secured:
|
remotely you will need to ensure that the server is installed and secured:
|
||||||
|
|
||||||
To install the database issue the following commands (as root):
|
The rpm install should ensure that the database is installed. To ensure
|
||||||
|
that it is running at boot time and scure for zoneminder run the
|
||||||
zypper in mariadb
|
following commands (as root):
|
||||||
|
|
||||||
systemctl enable mysql
|
systemctl enable mysql
|
||||||
|
|
||||||
|
@ -45,7 +58,8 @@ New installs
|
||||||
which will be for the whole database - you will need to edit
|
which will be for the whole database - you will need to edit
|
||||||
/etc/my.cnf and comment out the record
|
/etc/my.cnf and comment out the record
|
||||||
|
|
||||||
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES.
|
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES and restart the
|
||||||
|
server
|
||||||
|
|
||||||
2. Using the password for the root account set during the previous step, you
|
2. Using the password for the root account set during the previous step, you
|
||||||
will need to create the ZoneMinder database, assuming your database server
|
will need to create the ZoneMinder database, assuming your database server
|
||||||
|
@ -106,11 +120,6 @@ New installs
|
||||||
systemctl enable zoneminder
|
systemctl enable zoneminder
|
||||||
systemctl start zoneminder
|
systemctl start zoneminder
|
||||||
|
|
||||||
If zoneminder fails to start using the service you may also start it
|
|
||||||
with this command:
|
|
||||||
|
|
||||||
/opt/zoneminder/bin/zmpkg.pl start
|
|
||||||
|
|
||||||
|
|
||||||
Upgrades
|
Upgrades
|
||||||
========
|
========
|
||||||
|
|
|
@ -46,7 +46,7 @@ Requires: perl-MIME-Lite perl-LWP-Protocol-https
|
||||||
# Am installing perl(MIME::Tools), perl(Net::SMTP) and perl(Net::FTP)
|
# Am installing perl(MIME::Tools), perl(Net::SMTP) and perl(Net::FTP)
|
||||||
# MIME::Tools provides MIME::Entity
|
# MIME::Tools provides MIME::Entity
|
||||||
|
|
||||||
Requires: make cpanm
|
Requires(post): make cpanm
|
||||||
|
|
||||||
Requires(post): /usr/bin/gpasswd
|
Requires(post): /usr/bin/gpasswd
|
||||||
|
|
||||||
|
@ -102,9 +102,9 @@ fi
|
||||||
# so we'll output info with echo
|
# so we'll output info with echo
|
||||||
|
|
||||||
echo Installing additional perl modules
|
echo Installing additional perl modules
|
||||||
cpanm MIME::Tools
|
/usr/bin/cpanm MIME::Tools
|
||||||
cpanm Net::SMTP
|
/usr/bin/cpanm Net::SMTP
|
||||||
cpanm Net::FTP
|
/usr/bin/cpanm Net::FTP
|
||||||
echo \***********************************************
|
echo \***********************************************
|
||||||
echo \***** For further information
|
echo \***** For further information
|
||||||
echo \***** please refer to
|
echo \***** please refer to
|
||||||
|
@ -158,6 +158,9 @@ fi
|
||||||
%{webcgi}/nph-zms
|
%{webcgi}/nph-zms
|
||||||
%{webcgi}/zms
|
%{webcgi}/zms
|
||||||
%{webroot}/zoneminder
|
%{webroot}/zoneminder
|
||||||
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{webroot}/zoneminder/events
|
||||||
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{webroot}/zoneminder/images
|
||||||
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{webroot}/zoneminder/temp
|
||||||
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{webcgi}
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{webcgi}
|
||||||
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{zm_tmpdir}
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) %{zm_tmpdir}
|
||||||
%dir %attr(755,%{zmuid_final},%{zmgid_final}) /var/log/zoneminder
|
%dir %attr(755,%{zmuid_final},%{zmgid_final}) /var/log/zoneminder
|
||||||
|
@ -165,6 +168,11 @@ fi
|
||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Apr 02 2014 David Wilcox <david.wilcox@cloverbeen.com> - 1.27.0
|
||||||
|
- Correct requires for cpanm and make as they should be post
|
||||||
|
- change cpanm call to be full path name
|
||||||
|
- correct permissions on events, images and temp
|
||||||
|
|
||||||
* Mon Mar 24 2014 David Wilcox <david.wilcox@cloverbeen.com> - 1.27.0
|
* Mon Mar 24 2014 David Wilcox <david.wilcox@cloverbeen.com> - 1.27.0
|
||||||
- Update to zm 1.27.0
|
- Update to zm 1.27.0
|
||||||
- Remove patch which brought opensuse into distros as it is now included
|
- Remove patch which brought opensuse into distros as it is now included
|
||||||
|
@ -272,7 +280,7 @@ fi
|
||||||
1.24.3 is really just an occasionally updated devel snapshot.
|
1.24.3 is really just an occasionally updated devel snapshot.
|
||||||
- Rebase various patches.
|
- Rebase various patches.
|
||||||
|
|
||||||
* Wed Mar 23 2011 Dan Horák <dan@danny.cz> - 1.24.3-3
|
* Wed Mar 23 2011 Dan Horák <dan@danny.cz> - 1.24.3-3
|
||||||
- rebuilt for mysql 5.5.10 (soname bump in libmysqlclient)
|
- rebuilt for mysql 5.5.10 (soname bump in libmysqlclient)
|
||||||
|
|
||||||
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.24.3-2
|
* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.24.3-2
|
||||||
|
@ -327,7 +335,7 @@ fi
|
||||||
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.23.3-4
|
* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.23.3-4
|
||||||
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
|
||||||
|
|
||||||
* Sat Jan 24 2009 Caolán McNamara <caolanm@redhat.com> - 1.23.3-3
|
* Sat Jan 24 2009 Caolán McNamara <caolanm@redhat.com> - 1.23.3-3
|
||||||
- rebuild for dependencies
|
- rebuild for dependencies
|
||||||
|
|
||||||
* Mon Dec 15 2008 Martin Ebourne <martin@zepler.org> - 1.23.3-2
|
* Mon Dec 15 2008 Martin Ebourne <martin@zepler.org> - 1.23.3-2
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
d /var/run/zmtmp 0755 wwwrun www
|
d /var/run/zoneminder 0755 wwwrun www
|
||||||
|
|
|
@ -0,0 +1,177 @@
|
||||||
|
# Makefile for Sphinx documentation
|
||||||
|
#
|
||||||
|
|
||||||
|
# You can set these variables from the command line.
|
||||||
|
SPHINXOPTS =
|
||||||
|
SPHINXBUILD = sphinx-build
|
||||||
|
PAPER =
|
||||||
|
BUILDDIR = _build
|
||||||
|
|
||||||
|
# User-friendly check for sphinx-build
|
||||||
|
ifeq ($(shell which $(SPHINXBUILD) >/dev/null 2>&1; echo $$?), 1)
|
||||||
|
$(error The '$(SPHINXBUILD)' command was not found. Make sure you have Sphinx installed, then set the SPHINXBUILD environment variable to point to the full path of the '$(SPHINXBUILD)' executable. Alternatively you can add the directory with the executable to your PATH. If you don't have Sphinx installed, grab it from http://sphinx-doc.org/)
|
||||||
|
endif
|
||||||
|
|
||||||
|
# Internal variables.
|
||||||
|
PAPEROPT_a4 = -D latex_paper_size=a4
|
||||||
|
PAPEROPT_letter = -D latex_paper_size=letter
|
||||||
|
ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
# the i18n builder cannot share the environment and doctrees with the others
|
||||||
|
I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
|
||||||
|
|
||||||
|
.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo "Please use \`make <target>' where <target> is one of"
|
||||||
|
@echo " html to make standalone HTML files"
|
||||||
|
@echo " dirhtml to make HTML files named index.html in directories"
|
||||||
|
@echo " singlehtml to make a single large HTML file"
|
||||||
|
@echo " pickle to make pickle files"
|
||||||
|
@echo " json to make JSON files"
|
||||||
|
@echo " htmlhelp to make HTML files and a HTML help project"
|
||||||
|
@echo " qthelp to make HTML files and a qthelp project"
|
||||||
|
@echo " devhelp to make HTML files and a Devhelp project"
|
||||||
|
@echo " epub to make an epub"
|
||||||
|
@echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
|
||||||
|
@echo " latexpdf to make LaTeX files and run them through pdflatex"
|
||||||
|
@echo " latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
|
||||||
|
@echo " text to make text files"
|
||||||
|
@echo " man to make manual pages"
|
||||||
|
@echo " texinfo to make Texinfo files"
|
||||||
|
@echo " info to make Texinfo files and run them through makeinfo"
|
||||||
|
@echo " gettext to make PO message catalogs"
|
||||||
|
@echo " changes to make an overview of all changed/added/deprecated items"
|
||||||
|
@echo " xml to make Docutils-native XML files"
|
||||||
|
@echo " pseudoxml to make pseudoxml-XML files for display purposes"
|
||||||
|
@echo " linkcheck to check all external links for integrity"
|
||||||
|
@echo " doctest to run all doctests embedded in the documentation (if enabled)"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -rf $(BUILDDIR)/*
|
||||||
|
|
||||||
|
html:
|
||||||
|
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||||
|
|
||||||
|
dirhtml:
|
||||||
|
$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
|
||||||
|
|
||||||
|
singlehtml:
|
||||||
|
$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
|
||||||
|
|
||||||
|
pickle:
|
||||||
|
$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the pickle files."
|
||||||
|
|
||||||
|
json:
|
||||||
|
$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can process the JSON files."
|
||||||
|
|
||||||
|
htmlhelp:
|
||||||
|
$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run HTML Help Workshop with the" \
|
||||||
|
".hhp project file in $(BUILDDIR)/htmlhelp."
|
||||||
|
|
||||||
|
qthelp:
|
||||||
|
$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; now you can run "qcollectiongenerator" with the" \
|
||||||
|
".qhcp project file in $(BUILDDIR)/qthelp, like this:"
|
||||||
|
@echo "# qcollectiongenerator $(BUILDDIR)/qthelp/ZoneMinder.qhcp"
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# assistant -collectionFile $(BUILDDIR)/qthelp/ZoneMinder.qhc"
|
||||||
|
|
||||||
|
devhelp:
|
||||||
|
$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
|
||||||
|
@echo
|
||||||
|
@echo "Build finished."
|
||||||
|
@echo "To view the help file:"
|
||||||
|
@echo "# mkdir -p $$HOME/.local/share/devhelp/ZoneMinder"
|
||||||
|
@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/ZoneMinder"
|
||||||
|
@echo "# devhelp"
|
||||||
|
|
||||||
|
epub:
|
||||||
|
$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||||
|
|
||||||
|
latex:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo
|
||||||
|
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||||
|
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||||
|
"(use \`make latexpdf' here to do that automatically)."
|
||||||
|
|
||||||
|
latexpdf:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through pdflatex..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
latexpdfja:
|
||||||
|
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||||
|
@echo "Running LaTeX files through platex and dvipdfmx..."
|
||||||
|
$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
|
||||||
|
@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
|
||||||
|
|
||||||
|
text:
|
||||||
|
$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The text files are in $(BUILDDIR)/text."
|
||||||
|
|
||||||
|
man:
|
||||||
|
$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
|
||||||
|
|
||||||
|
texinfo:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
|
||||||
|
@echo "Run \`make' in that directory to run these through makeinfo" \
|
||||||
|
"(use \`make info' here to do that automatically)."
|
||||||
|
|
||||||
|
info:
|
||||||
|
$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
|
||||||
|
@echo "Running Texinfo files through makeinfo..."
|
||||||
|
make -C $(BUILDDIR)/texinfo info
|
||||||
|
@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
|
||||||
|
|
||||||
|
gettext:
|
||||||
|
$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
|
||||||
|
|
||||||
|
changes:
|
||||||
|
$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
|
||||||
|
@echo
|
||||||
|
@echo "The overview file is in $(BUILDDIR)/changes."
|
||||||
|
|
||||||
|
linkcheck:
|
||||||
|
$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
|
||||||
|
@echo
|
||||||
|
@echo "Link check complete; look for any errors in the above output " \
|
||||||
|
"or in $(BUILDDIR)/linkcheck/output.txt."
|
||||||
|
|
||||||
|
doctest:
|
||||||
|
$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
|
||||||
|
@echo "Testing of doctests in the sources finished, look at the " \
|
||||||
|
"results in $(BUILDDIR)/doctest/output.txt."
|
||||||
|
|
||||||
|
xml:
|
||||||
|
$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
|
||||||
|
|
||||||
|
pseudoxml:
|
||||||
|
$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
|
||||||
|
@echo
|
||||||
|
@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
|
|
@ -0,0 +1 @@
|
||||||
|
The latest version of these docs can be found at http://zoneminder.readthedocs.org/
|
|
@ -0,0 +1,118 @@
|
||||||
|
API
|
||||||
|
===
|
||||||
|
|
||||||
|
This document will provide an overview of ZoneMinder's API.
|
||||||
|
|
||||||
|
Overview
|
||||||
|
--------
|
||||||
|
|
||||||
|
In an effort to further 'open up' ZoneMinder, an API was needed. This will
|
||||||
|
allow quick integration with and development of ZoneMinder.
|
||||||
|
|
||||||
|
The API is built in CakePHP and lives under the ``/api`` directory. It
|
||||||
|
provides a RESTful service and supports CRUD (create, retrieve, update, delete)
|
||||||
|
functions for Monitors, Events, Frames, Zones and Config.
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
Here be a list of examples. Some results may be truncated.
|
||||||
|
|
||||||
|
You will see each URL ending in either ``.xml`` or ``.json``. This is the
|
||||||
|
format of the request, and it determines the format that any data returned to
|
||||||
|
you will be in. I like json, however you can use xml if you'd like.
|
||||||
|
|
||||||
|
Return a list of all monitors
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``curl -XGET http://zmdevapi/monitors.json``
|
||||||
|
|
||||||
|
Retrieve monitor 1
|
||||||
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
``curl -XGET http://zmdevapi/monitors/1.json``
|
||||||
|
|
||||||
|
Add a monitor
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This command will add a new http monitor.
|
||||||
|
|
||||||
|
``curl -XPOST http://zmdevapi/monitors.js -d "Monitor[Name]=Cliff-Burton \
|
||||||
|
&Monitor[Function]=Modect \
|
||||||
|
&Monitor[Protocol]=http \
|
||||||
|
&Monitor[Method]=simple \
|
||||||
|
&Monitor[Host]=ussr:pass@192.168.11.20 \
|
||||||
|
&Monitor[Port]=80 \
|
||||||
|
&Monitor[Path]=/mjpg/video.mjpg \
|
||||||
|
&Monitor[Width]=704 \
|
||||||
|
&Monitor[Height]=480 \
|
||||||
|
&Monitor[Colours]=4"``
|
||||||
|
|
||||||
|
Edit monitor 1
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This command will change the 'Name' field of Monitor 1 to 'tits'
|
||||||
|
|
||||||
|
``curl -XPUT http://zmdevapi/monitors/1.json -d "Monitor[Name]=tits"``
|
||||||
|
|
||||||
|
Delete monitor 1
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This command will delete Monitor 1, but will _not_ delete any Events which
|
||||||
|
depend on it.
|
||||||
|
|
||||||
|
|
||||||
|
``curl -XDELETE http://zmdevapi/monitors/1.json``
|
||||||
|
|
||||||
|
Return a list of all events
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``curl -XGET http://zmdevapi/events.json``
|
||||||
|
|
||||||
|
Retrieve event 1
|
||||||
|
^^^^^^^^^^^^^^^^
|
||||||
|
``curl -XGET http://zmdevapi/events/1.json``
|
||||||
|
|
||||||
|
Edit event 1
|
||||||
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This command will change the 'Name' field of Event 1 to 'Seek and Destroy'
|
||||||
|
|
||||||
|
``curl -XPUT http://zmdevapi/events/1.json -d "Event[Name]=Seek and Destroy"``
|
||||||
|
|
||||||
|
Delete event 1
|
||||||
|
^^^^^^^^^^^^^^
|
||||||
|
This command will delete Event 1, and any Frames which depend on it.
|
||||||
|
|
||||||
|
``curl -XDELETE http://zmdevapi/events/1.json``
|
||||||
|
|
||||||
|
Edit config 121
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This command will change the 'Value' field of Config 121 to 901.
|
||||||
|
|
||||||
|
``curl -XPUT http://zmdevapi/configs/121.json -d "Config[Value]=901"``
|
||||||
|
|
||||||
|
Create a Zone
|
||||||
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
``curl -XPOST http://zmdevapi/zones.json -d "Zone[Name]=Jason-Newsted \
|
||||||
|
&Zone[MonitorId]=3 \
|
||||||
|
&Zone[Type]=Active \
|
||||||
|
&Zone[Units]=Percent \
|
||||||
|
&Zone[NumCoords]=4 \
|
||||||
|
&Zone[Coords]=0,0 639,0 639,479 0,479 \
|
||||||
|
&Zone[AlarmRGB]=16711680 \
|
||||||
|
&Zone[CheckMethod]=Blobs \
|
||||||
|
&Zone[MinPixelThreshold]=25 \
|
||||||
|
&Zone[MaxPixelThreshold]= \
|
||||||
|
&Zone[MinAlarmPixels]=9216 \
|
||||||
|
&Zone[MaxAlarmPixels]= \
|
||||||
|
&Zone[FilterX]=3 \
|
||||||
|
&Zone[FilterY]=3 \
|
||||||
|
&Zone[MinFilterPixels]=9216 \
|
||||||
|
&Zone[MaxFilterPixels]=230400 \
|
||||||
|
&Zone[MinBlobPixels]=6144 \
|
||||||
|
&Zone[MaxBlobPixels]= \
|
||||||
|
&Zone[MinBlobs]=1 \
|
||||||
|
&Zone[MaxBlobs]= \
|
||||||
|
&Zone[OverloadFrames]=0"``
|
|
@ -0,0 +1,258 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# ZoneMinder documentation build configuration file, created by
|
||||||
|
# sphinx-quickstart on Fri Apr 25 18:31:58 2014.
|
||||||
|
#
|
||||||
|
# This file is execfile()d with the current directory set to its
|
||||||
|
# containing dir.
|
||||||
|
#
|
||||||
|
# Note that not all possible configuration values are present in this
|
||||||
|
# autogenerated file.
|
||||||
|
#
|
||||||
|
# All configuration values have a default; values that are commented out
|
||||||
|
# serve to show the default.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
# If extensions (or modules to document with autodoc) are in another directory,
|
||||||
|
# add these directories to sys.path here. If the directory is relative to the
|
||||||
|
# documentation root, use os.path.abspath to make it absolute, like shown here.
|
||||||
|
#sys.path.insert(0, os.path.abspath('.'))
|
||||||
|
|
||||||
|
# -- General configuration ------------------------------------------------
|
||||||
|
|
||||||
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
|
#needs_sphinx = '1.0'
|
||||||
|
|
||||||
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
|
# ones.
|
||||||
|
extensions = []
|
||||||
|
|
||||||
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
|
templates_path = ['_templates']
|
||||||
|
|
||||||
|
# The suffix of source filenames.
|
||||||
|
source_suffix = '.rst'
|
||||||
|
|
||||||
|
# The encoding of source files.
|
||||||
|
#source_encoding = 'utf-8-sig'
|
||||||
|
|
||||||
|
# The master toctree document.
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
# General information about the project.
|
||||||
|
project = u'ZoneMinder'
|
||||||
|
copyright = u'2014, https://github.com/ZoneMinder/ZoneMinder/graphs/contributors'
|
||||||
|
|
||||||
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
|
# |version| and |release|, also used in various other places throughout the
|
||||||
|
# built documents.
|
||||||
|
#
|
||||||
|
# The short X.Y version.
|
||||||
|
version = '1.27.0'
|
||||||
|
# The full version, including alpha/beta/rc tags.
|
||||||
|
release = '1.27.0'
|
||||||
|
|
||||||
|
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||||
|
# for a list of supported languages.
|
||||||
|
#language = None
|
||||||
|
|
||||||
|
# There are two options for replacing |today|: either, you set today to some
|
||||||
|
# non-false value, then it is used:
|
||||||
|
#today = ''
|
||||||
|
# Else, today_fmt is used as the format for a strftime call.
|
||||||
|
#today_fmt = '%B %d, %Y'
|
||||||
|
|
||||||
|
# List of patterns, relative to source directory, that match files and
|
||||||
|
# directories to ignore when looking for source files.
|
||||||
|
exclude_patterns = ['_build']
|
||||||
|
|
||||||
|
# The reST default role (used for this markup: `text`) to use for all
|
||||||
|
# documents.
|
||||||
|
#default_role = None
|
||||||
|
|
||||||
|
# If true, '()' will be appended to :func: etc. cross-reference text.
|
||||||
|
#add_function_parentheses = True
|
||||||
|
|
||||||
|
# If true, the current module name will be prepended to all description
|
||||||
|
# unit titles (such as .. function::).
|
||||||
|
#add_module_names = True
|
||||||
|
|
||||||
|
# If true, sectionauthor and moduleauthor directives will be shown in the
|
||||||
|
# output. They are ignored by default.
|
||||||
|
#show_authors = False
|
||||||
|
|
||||||
|
# The name of the Pygments (syntax highlighting) style to use.
|
||||||
|
pygments_style = 'sphinx'
|
||||||
|
|
||||||
|
# A list of ignored prefixes for module index sorting.
|
||||||
|
#modindex_common_prefix = []
|
||||||
|
|
||||||
|
# If true, keep warnings as "system message" paragraphs in the built documents.
|
||||||
|
#keep_warnings = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for HTML output ----------------------------------------------
|
||||||
|
|
||||||
|
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||||
|
# a list of builtin themes.
|
||||||
|
html_theme = 'default'
|
||||||
|
|
||||||
|
# Theme options are theme-specific and customize the look and feel of a theme
|
||||||
|
# further. For a list of options available for each theme, see the
|
||||||
|
# documentation.
|
||||||
|
#html_theme_options = {}
|
||||||
|
|
||||||
|
# Add any paths that contain custom themes here, relative to this directory.
|
||||||
|
#html_theme_path = []
|
||||||
|
|
||||||
|
# The name for this set of Sphinx documents. If None, it defaults to
|
||||||
|
# "<project> v<release> documentation".
|
||||||
|
#html_title = None
|
||||||
|
|
||||||
|
# A shorter title for the navigation bar. Default is the same as html_title.
|
||||||
|
#html_short_title = None
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top
|
||||||
|
# of the sidebar.
|
||||||
|
#html_logo = None
|
||||||
|
|
||||||
|
# The name of an image file (within the static path) to use as favicon of the
|
||||||
|
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||||
|
# pixels large.
|
||||||
|
#html_favicon = None
|
||||||
|
|
||||||
|
# Add any paths that contain custom static files (such as style sheets) here,
|
||||||
|
# relative to this directory. They are copied after the builtin static files,
|
||||||
|
# so a file named "default.css" will overwrite the builtin "default.css".
|
||||||
|
html_static_path = ['_static']
|
||||||
|
|
||||||
|
# Add any extra paths that contain custom files (such as robots.txt or
|
||||||
|
# .htaccess) here, relative to this directory. These files are copied
|
||||||
|
# directly to the root of the documentation.
|
||||||
|
#html_extra_path = []
|
||||||
|
|
||||||
|
# If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
|
||||||
|
# using the given strftime format.
|
||||||
|
#html_last_updated_fmt = '%b %d, %Y'
|
||||||
|
|
||||||
|
# If true, SmartyPants will be used to convert quotes and dashes to
|
||||||
|
# typographically correct entities.
|
||||||
|
#html_use_smartypants = True
|
||||||
|
|
||||||
|
# Custom sidebar templates, maps document names to template names.
|
||||||
|
#html_sidebars = {}
|
||||||
|
|
||||||
|
# Additional templates that should be rendered to pages, maps page names to
|
||||||
|
# template names.
|
||||||
|
#html_additional_pages = {}
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#html_domain_indices = True
|
||||||
|
|
||||||
|
# If false, no index is generated.
|
||||||
|
#html_use_index = True
|
||||||
|
|
||||||
|
# If true, the index is split into individual pages for each letter.
|
||||||
|
#html_split_index = False
|
||||||
|
|
||||||
|
# If true, links to the reST sources are added to the pages.
|
||||||
|
#html_show_sourcelink = True
|
||||||
|
|
||||||
|
# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_sphinx = True
|
||||||
|
|
||||||
|
# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
|
||||||
|
#html_show_copyright = True
|
||||||
|
|
||||||
|
# If true, an OpenSearch description file will be output, and all pages will
|
||||||
|
# contain a <link> tag referring to it. The value of this option must be the
|
||||||
|
# base URL from which the finished HTML is served.
|
||||||
|
#html_use_opensearch = ''
|
||||||
|
|
||||||
|
# This is the file name suffix for HTML files (e.g. ".xhtml").
|
||||||
|
#html_file_suffix = None
|
||||||
|
|
||||||
|
# Output file base name for HTML help builder.
|
||||||
|
htmlhelp_basename = 'ZoneMinderdoc'
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for LaTeX output ---------------------------------------------
|
||||||
|
|
||||||
|
latex_elements = {
|
||||||
|
# The paper size ('letterpaper' or 'a4paper').
|
||||||
|
#'papersize': 'letterpaper',
|
||||||
|
|
||||||
|
# The font size ('10pt', '11pt' or '12pt').
|
||||||
|
#'pointsize': '10pt',
|
||||||
|
|
||||||
|
# Additional stuff for the LaTeX preamble.
|
||||||
|
#'preamble': '',
|
||||||
|
}
|
||||||
|
|
||||||
|
# Grouping the document tree into LaTeX files. List of tuples
|
||||||
|
# (source start file, target name, title,
|
||||||
|
# author, documentclass [howto, manual, or own class]).
|
||||||
|
latex_documents = [
|
||||||
|
('index', 'ZoneMinder.tex', u'ZoneMinder Documentation',
|
||||||
|
u'https://github.com/ZoneMinder/ZoneMinder/graphs/contributors', 'manual'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# The name of an image file (relative to this directory) to place at the top of
|
||||||
|
# the title page.
|
||||||
|
#latex_logo = None
|
||||||
|
|
||||||
|
# For "manual" documents, if this is true, then toplevel headings are parts,
|
||||||
|
# not chapters.
|
||||||
|
#latex_use_parts = False
|
||||||
|
|
||||||
|
# If true, show page references after internal links.
|
||||||
|
#latex_show_pagerefs = False
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#latex_show_urls = False
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#latex_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#latex_domain_indices = True
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for manual page output ---------------------------------------
|
||||||
|
|
||||||
|
# One entry per manual page. List of tuples
|
||||||
|
# (source start file, name, description, authors, manual section).
|
||||||
|
man_pages = [
|
||||||
|
('index', 'zoneminder', u'ZoneMinder Documentation',
|
||||||
|
[u'https://github.com/ZoneMinder/ZoneMinder/graphs/contributors'], 1)
|
||||||
|
]
|
||||||
|
|
||||||
|
# If true, show URL addresses after external links.
|
||||||
|
#man_show_urls = False
|
||||||
|
|
||||||
|
|
||||||
|
# -- Options for Texinfo output -------------------------------------------
|
||||||
|
|
||||||
|
# Grouping the document tree into Texinfo files. List of tuples
|
||||||
|
# (source start file, target name, title, author,
|
||||||
|
# dir menu entry, description, category)
|
||||||
|
texinfo_documents = [
|
||||||
|
('index', 'ZoneMinder', u'ZoneMinder Documentation',
|
||||||
|
u'https://github.com/ZoneMinder/ZoneMinder/graphs/contributors', 'ZoneMinder', 'One line description of project.',
|
||||||
|
'Miscellaneous'),
|
||||||
|
]
|
||||||
|
|
||||||
|
# Documents to append as an appendix to all manuals.
|
||||||
|
#texinfo_appendices = []
|
||||||
|
|
||||||
|
# If false, no module index is generated.
|
||||||
|
#texinfo_domain_indices = True
|
||||||
|
|
||||||
|
# How to display URL addresses: 'footnote', 'no', or 'inline'.
|
||||||
|
#texinfo_show_urls = 'footnote'
|
||||||
|
|
||||||
|
# If true, do not generate a @detailmenu in the "Top" node's menu.
|
||||||
|
#texinfo_no_detailmenu = False
|
|
@ -0,0 +1,7 @@
|
||||||
|
Contributing
|
||||||
|
============
|
||||||
|
|
||||||
|
1. Check for `open issues <https://github.com/ZoneMinder/ZoneMinder/issues/>`_ or open a fresh issue to start a discussion around a feature idea or a bug.
|
||||||
|
2. Fork the ZoneMinder repository on Github to start making your changes.
|
||||||
|
3. Send a pull request and bug the maintainer until it gets merged and published. Stop by the #zoneminder channel on irc.freenode.net.
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
Frequently Asked Questions (FAQ)
|
||||||
|
================================
|
||||||
|
|
||||||
|
This is the FAQ page. Feel free to contribute any FAQs that you think are missing.
|
||||||
|
|
||||||
|
Why can't I view all of my monitors in Montage view?
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
1. You will most likely need to increase `mysql_max_connections` in my.cnf.
|
||||||
|
2. If using Firefox, you may need to increase `network.http.max-persistent-connections-per-server` in `about:config`.
|
||||||
|
|
||||||
|
|
||||||
|
How do I enable ZoneMinder's security?
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
You may also consider to use the web server security, for example, htaccess files under Apache, or mod_auth.
|
||||||
|
|
||||||
|
1. In the console, click on Options.
|
||||||
|
2. Check the box next to "ZM_OPT_USE_AUTH".
|
||||||
|
3. Click Save
|
||||||
|
4. You will immediately be asked to login. The username is 'admin' and the password is 'admin'.
|
||||||
|
|
||||||
|
To Manage Users
|
||||||
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
1. In main console, go to Options->Users.
|
||||||
|
|
||||||
|
The "Zones" view for a Monitor is blank (I can't see / setup a Zone)
|
||||||
|
--------------------------------------------------------------------
|
||||||
|
|
||||||
|
Snapshots and Zones images are stored in the `images` directory in your webroot.
|
||||||
|
Ensure that the `images` directory is writable by the user which ZoneMinder is
|
||||||
|
running as. If the `images` directory is a symlink, ensure that your web server
|
||||||
|
has access to that directory as well.
|
|
@ -0,0 +1,26 @@
|
||||||
|
.. ZoneMinder documentation master file, created by
|
||||||
|
sphinx-quickstart on Fri Apr 25 18:31:58 2014.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Welcome to ZoneMinder's documentation!
|
||||||
|
======================================
|
||||||
|
|
||||||
|
Contents:
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
|
||||||
|
api
|
||||||
|
faq
|
||||||
|
contributing
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
||||||
|
|
|
@ -55,7 +55,7 @@ my @connections;
|
||||||
push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan1", channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), mode=>"rw" ) );
|
push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan1", channel=>ZoneMinder::Trigger::Channel::Inet->new( port=>6802 ), mode=>"rw" ) );
|
||||||
push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel=>ZoneMinder::Trigger::Channel::Unix->new( path=>$Config{ZM_PATH_SOCKS}.'/zmtrigger.sock' ), mode=>"rw" ) );
|
push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan2", channel=>ZoneMinder::Trigger::Channel::Unix->new( path=>$Config{ZM_PATH_SOCKS}.'/zmtrigger.sock' ), mode=>"rw" ) );
|
||||||
#push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan3", channel=>ZoneMinder::Trigger::Channel::File->new( path=>'/tmp/zmtrigger.out' ), mode=>"w" ) );
|
#push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan3", channel=>ZoneMinder::Trigger::Channel::File->new( path=>'/tmp/zmtrigger.out' ), mode=>"w" ) );
|
||||||
push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan4", channel=>ZoneMinder::Trigger::Channel::Serial->new( path=>'/dev/ttyS0' ), mode=>"rw" ) );
|
#push( @connections, ZoneMinder::Trigger::Connection->new( name=>"Chan4", channel=>ZoneMinder::Trigger::Channel::Serial->new( path=>'/dev/ttyS0' ), mode=>"rw" ) );
|
||||||
|
|
||||||
# ==========================================================================
|
# ==========================================================================
|
||||||
#
|
#
|
||||||
|
|
|
@ -126,8 +126,27 @@ protected:
|
||||||
unsigned int default_height;
|
unsigned int default_height;
|
||||||
};
|
};
|
||||||
#endif // HAVE_LIBSWSCALE && HAVE_LIBAVUTIL
|
#endif // HAVE_LIBSWSCALE && HAVE_LIBAVUTIL
|
||||||
|
|
||||||
|
#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(54, 25, 0)
|
||||||
|
#define AV_CODEC_ID_NONE CODEC_ID_NONE
|
||||||
|
#define AV_CODEC_ID_PCM_MULAW CODEC_ID_PCM_MULAW
|
||||||
|
#define AV_CODEC_ID_PCM_ALAW CODEC_ID_PCM_ALAW
|
||||||
|
#define AV_CODEC_ID_PCM_S16BE CODEC_ID_PCM_S16BE
|
||||||
|
#define AV_CODEC_ID_QCELP CODEC_ID_QCELP
|
||||||
|
#define AV_CODEC_ID_MP2 CODEC_ID_MP2
|
||||||
|
#define AV_CODEC_ID_MP3 CODEC_ID_MP3
|
||||||
|
#define AV_CODEC_ID_MJPEG CODEC_ID_MJPEG
|
||||||
|
#define AV_CODEC_ID_H261 CODEC_ID_H261
|
||||||
|
#define AV_CODEC_ID_MPEG1VIDEO CODEC_ID_MPEG1VIDEO
|
||||||
|
#define AV_CODEC_ID_MPEG2VIDEO CODEC_ID_MPEG2VIDEO
|
||||||
|
#define AV_CODEC_ID_MPEG2TS CODEC_ID_MPEG2TS
|
||||||
|
#define AV_CODEC_ID_H263 CODEC_ID_H263
|
||||||
|
#define AV_CODEC_ID_H264 CODEC_ID_H264
|
||||||
|
#define AV_CODEC_ID_MPEG4 CODEC_ID_MPEG4
|
||||||
|
#define AV_CODEC_ID_AAC CODEC_ID_AAC
|
||||||
|
#define AV_CODEC_ID_AMR_NB CODEC_ID_AMR_NB
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // ( HAVE_LIBAVUTIL_AVUTIL_H || HAVE_LIBAVCODEC_AVCODEC_H || HAVE_LIBAVFORMAT_AVFORMAT_H || HAVE_LIBAVDEVICE_AVDEVICE_H )
|
#endif // ( HAVE_LIBAVUTIL_AVUTIL_H || HAVE_LIBAVCODEC_AVCODEC_H || HAVE_LIBAVFORMAT_AVFORMAT_H || HAVE_LIBAVDEVICE_AVDEVICE_H )
|
||||||
|
|
||||||
#endif // ZM_FFMPEG_H
|
#endif // ZM_FFMPEG_H
|
||||||
|
|
|
@ -291,6 +291,7 @@ Monitor::Monitor(
|
||||||
int p_alarm_frame_count,
|
int p_alarm_frame_count,
|
||||||
int p_section_length,
|
int p_section_length,
|
||||||
int p_frame_skip,
|
int p_frame_skip,
|
||||||
|
int p_motion_frame_skip,
|
||||||
int p_capture_delay,
|
int p_capture_delay,
|
||||||
int p_alarm_capture_delay,
|
int p_alarm_capture_delay,
|
||||||
int p_fps_report_interval,
|
int p_fps_report_interval,
|
||||||
|
@ -316,6 +317,7 @@ Monitor::Monitor(
|
||||||
stream_replay_buffer( p_stream_replay_buffer ),
|
stream_replay_buffer( p_stream_replay_buffer ),
|
||||||
section_length( p_section_length ),
|
section_length( p_section_length ),
|
||||||
frame_skip( p_frame_skip ),
|
frame_skip( p_frame_skip ),
|
||||||
|
motion_frame_skip( p_motion_frame_skip ),
|
||||||
capture_delay( p_capture_delay ),
|
capture_delay( p_capture_delay ),
|
||||||
alarm_capture_delay( p_alarm_capture_delay ),
|
alarm_capture_delay( p_alarm_capture_delay ),
|
||||||
alarm_frame_count( p_alarm_frame_count ),
|
alarm_frame_count( p_alarm_frame_count ),
|
||||||
|
@ -327,6 +329,7 @@ Monitor::Monitor(
|
||||||
delta_image( width, height, ZM_COLOUR_GRAY8, ZM_SUBPIX_ORDER_NONE ),
|
delta_image( width, height, ZM_COLOUR_GRAY8, ZM_SUBPIX_ORDER_NONE ),
|
||||||
ref_image( width, height, p_camera->Colours(), p_camera->SubpixelOrder() ),
|
ref_image( width, height, p_camera->Colours(), p_camera->SubpixelOrder() ),
|
||||||
purpose( p_purpose ),
|
purpose( p_purpose ),
|
||||||
|
last_motion_score(0),
|
||||||
camera( p_camera ),
|
camera( p_camera ),
|
||||||
n_zones( p_n_zones ),
|
n_zones( p_n_zones ),
|
||||||
zones( p_zones )
|
zones( p_zones )
|
||||||
|
@ -1308,7 +1311,12 @@ bool Monitor::Analyse()
|
||||||
else if ( signal && Active() && (function == MODECT || function == MOCORD) )
|
else if ( signal && Active() && (function == MODECT || function == MOCORD) )
|
||||||
{
|
{
|
||||||
Event::StringSet zoneSet;
|
Event::StringSet zoneSet;
|
||||||
int motion_score = DetectMotion( *snap_image, zoneSet );
|
int motion_score = last_motion_score;
|
||||||
|
if ( !(image_count % (motion_frame_skip+1) ) )
|
||||||
|
{
|
||||||
|
// Get new score.
|
||||||
|
motion_score = last_motion_score = DetectMotion( *snap_image, zoneSet );
|
||||||
|
}
|
||||||
//int motion_score = DetectBlack( *snap_image, zoneSet );
|
//int motion_score = DetectBlack( *snap_image, zoneSet );
|
||||||
if ( motion_score )
|
if ( motion_score )
|
||||||
{
|
{
|
||||||
|
@ -1642,7 +1650,7 @@ void Monitor::Reload()
|
||||||
closeEvent();
|
closeEvent();
|
||||||
|
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
snprintf( sql, sizeof(sql), "select Function+0, Enabled, LinkedMonitors, EventPrefix, LabelFormat, LabelX, LabelY, WarmupCount, PreEventCount, PostEventCount, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = '%d'", id );
|
snprintf( sql, sizeof(sql), "select Function+0, Enabled, LinkedMonitors, EventPrefix, LabelFormat, LabelX, LabelY, WarmupCount, PreEventCount, PostEventCount, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = '%d'", id );
|
||||||
|
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -1678,6 +1686,7 @@ void Monitor::Reload()
|
||||||
alarm_frame_count = atoi(dbrow[index++]);
|
alarm_frame_count = atoi(dbrow[index++]);
|
||||||
section_length = atoi(dbrow[index++]);
|
section_length = atoi(dbrow[index++]);
|
||||||
frame_skip = atoi(dbrow[index++]);
|
frame_skip = atoi(dbrow[index++]);
|
||||||
|
motion_frame_skip = atoi(dbrow[index++]);
|
||||||
capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++;
|
capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++;
|
||||||
alarm_capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++;
|
alarm_capture_delay = (dbrow[index]&&atof(dbrow[index])>0.0)?int(DT_PREC_3/atof(dbrow[index])):0; index++;
|
||||||
fps_report_interval = atoi(dbrow[index++]);
|
fps_report_interval = atoi(dbrow[index++]);
|
||||||
|
@ -1833,11 +1842,11 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
if ( !device[0] )
|
if ( !device[0] )
|
||||||
{
|
{
|
||||||
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' order by Device, Channel", sizeof(sql) );
|
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' order by Device, Channel", sizeof(sql) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' and Device = '%s' order by Channel", device );
|
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Method, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Function != 'None' and Type = 'Local' and Device = '%s' order by Channel", device );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -1895,6 +1904,7 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose
|
||||||
int alarm_frame_count = atoi(dbrow[col]); col++;
|
int alarm_frame_count = atoi(dbrow[col]); col++;
|
||||||
int section_length = atoi(dbrow[col]); col++;
|
int section_length = atoi(dbrow[col]); col++;
|
||||||
int frame_skip = atoi(dbrow[col]); col++;
|
int frame_skip = atoi(dbrow[col]); col++;
|
||||||
|
int motion_frame_skip = atoi(dbrow[col]); col++;
|
||||||
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int fps_report_interval = atoi(dbrow[col]); col++;
|
int fps_report_interval = atoi(dbrow[col]); col++;
|
||||||
|
@ -1952,6 +1962,7 @@ int Monitor::LoadLocalMonitors( const char *device, Monitor **&monitors, Purpose
|
||||||
alarm_frame_count,
|
alarm_frame_count,
|
||||||
section_length,
|
section_length,
|
||||||
frame_skip,
|
frame_skip,
|
||||||
|
motion_frame_skip,
|
||||||
capture_delay,
|
capture_delay,
|
||||||
alarm_capture_delay,
|
alarm_capture_delay,
|
||||||
fps_report_interval,
|
fps_report_interval,
|
||||||
|
@ -1985,11 +1996,11 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
if ( !protocol )
|
if ( !protocol )
|
||||||
{
|
{
|
||||||
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote'", sizeof(sql) );
|
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote'", sizeof(sql) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote' and Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path );
|
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Protocol, Method, Host, Port, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Remote' and Protocol = '%s' and Host = '%s' and Port = '%s' and Path = '%s'", protocol, host, port, path );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -2048,6 +2059,7 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
|
||||||
int alarm_frame_count = atoi(dbrow[col]); col++;
|
int alarm_frame_count = atoi(dbrow[col]); col++;
|
||||||
int section_length = atoi(dbrow[col]); col++;
|
int section_length = atoi(dbrow[col]); col++;
|
||||||
int frame_skip = atoi(dbrow[col]); col++;
|
int frame_skip = atoi(dbrow[col]); col++;
|
||||||
|
int motion_frame_skip = atoi(dbrow[col]); col++;
|
||||||
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int fps_report_interval = atoi(dbrow[col]); col++;
|
int fps_report_interval = atoi(dbrow[col]); col++;
|
||||||
|
@ -2123,6 +2135,7 @@ int Monitor::LoadRemoteMonitors( const char *protocol, const char *host, const c
|
||||||
alarm_frame_count,
|
alarm_frame_count,
|
||||||
section_length,
|
section_length,
|
||||||
frame_skip,
|
frame_skip,
|
||||||
|
motion_frame_skip,
|
||||||
capture_delay,
|
capture_delay,
|
||||||
alarm_capture_delay,
|
alarm_capture_delay,
|
||||||
fps_report_interval,
|
fps_report_interval,
|
||||||
|
@ -2156,11 +2169,11 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
if ( !file[0] )
|
if ( !file[0] )
|
||||||
{
|
{
|
||||||
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File'", sizeof(sql) );
|
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File'", sizeof(sql) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File' and Path = '%s'", file );
|
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'File' and Path = '%s'", file );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -2215,6 +2228,7 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
|
||||||
int alarm_frame_count = atoi(dbrow[col]); col++;
|
int alarm_frame_count = atoi(dbrow[col]); col++;
|
||||||
int section_length = atoi(dbrow[col]); col++;
|
int section_length = atoi(dbrow[col]); col++;
|
||||||
int frame_skip = atoi(dbrow[col]); col++;
|
int frame_skip = atoi(dbrow[col]); col++;
|
||||||
|
int motion_frame_skip = atoi(dbrow[col]); col++;
|
||||||
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int fps_report_interval = atoi(dbrow[col]); col++;
|
int fps_report_interval = atoi(dbrow[col]); col++;
|
||||||
|
@ -2258,6 +2272,7 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
|
||||||
alarm_frame_count,
|
alarm_frame_count,
|
||||||
section_length,
|
section_length,
|
||||||
frame_skip,
|
frame_skip,
|
||||||
|
motion_frame_skip,
|
||||||
capture_delay,
|
capture_delay,
|
||||||
alarm_capture_delay,
|
alarm_capture_delay,
|
||||||
fps_report_interval,
|
fps_report_interval,
|
||||||
|
@ -2268,7 +2283,6 @@ int Monitor::LoadFileMonitors( const char *file, Monitor **&monitors, Purpose pu
|
||||||
purpose,
|
purpose,
|
||||||
0,
|
0,
|
||||||
0
|
0
|
||||||
|
|
||||||
);
|
);
|
||||||
Zone **zones = 0;
|
Zone **zones = 0;
|
||||||
int n_zones = Zone::Load( monitors[i], zones );
|
int n_zones = Zone::Load( monitors[i], zones );
|
||||||
|
@ -2292,11 +2306,11 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
if ( !file[0] )
|
if ( !file[0] )
|
||||||
{
|
{
|
||||||
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg'", sizeof(sql) );
|
strncpy( sql, "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg'", sizeof(sql) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg' and Path = '%s'", file );
|
snprintf( sql, sizeof(sql), "select Id, Name, Function+0, Enabled, LinkedMonitors, Path, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion from Monitors where Function != 'None' and Type = 'Ffmpeg' and Path = '%s'", file );
|
||||||
}
|
}
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
|
@ -2351,6 +2365,7 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
|
||||||
int alarm_frame_count = atoi(dbrow[col]); col++;
|
int alarm_frame_count = atoi(dbrow[col]); col++;
|
||||||
int section_length = atoi(dbrow[col]); col++;
|
int section_length = atoi(dbrow[col]); col++;
|
||||||
int frame_skip = atoi(dbrow[col]); col++;
|
int frame_skip = atoi(dbrow[col]); col++;
|
||||||
|
int motion_frame_skip = atoi(dbrow[col]); col++;
|
||||||
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int fps_report_interval = atoi(dbrow[col]); col++;
|
int fps_report_interval = atoi(dbrow[col]); col++;
|
||||||
|
@ -2394,6 +2409,7 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
|
||||||
alarm_frame_count,
|
alarm_frame_count,
|
||||||
section_length,
|
section_length,
|
||||||
frame_skip,
|
frame_skip,
|
||||||
|
motion_frame_skip,
|
||||||
capture_delay,
|
capture_delay,
|
||||||
alarm_capture_delay,
|
alarm_capture_delay,
|
||||||
fps_report_interval,
|
fps_report_interval,
|
||||||
|
@ -2425,7 +2441,7 @@ int Monitor::LoadFfmpegMonitors( const char *file, Monitor **&monitors, Purpose
|
||||||
Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose )
|
Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose )
|
||||||
{
|
{
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
snprintf( sql, sizeof(sql), "select Id, Name, Type, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Protocol, Method, Host, Port, Path, User, Pass, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = %d", id );
|
snprintf( sql, sizeof(sql), "select Id, Name, Type, Function+0, Enabled, LinkedMonitors, Device, Channel, Format, Protocol, Method, Host, Port, Path, User, Pass, Width, Height, Colours, Palette, Orientation+0, Deinterlacing, Brightness, Contrast, Hue, Colour, EventPrefix, LabelFormat, LabelX, LabelY, ImageBufferCount, WarmupCount, PreEventCount, PostEventCount, StreamReplayBuffer, AlarmFrameCount, SectionLength, FrameSkip, MotionFrameSkip, MaxFPS, AlarmMaxFPS, FPSReportInterval, RefBlendPerc, AlarmRefBlendPerc, TrackMotion, SignalCheckColour from Monitors where Id = %d", id );
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
Error( "Can't run query: %s", mysql_error( &dbconn ) );
|
Error( "Can't run query: %s", mysql_error( &dbconn ) );
|
||||||
|
@ -2489,6 +2505,7 @@ Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose )
|
||||||
int alarm_frame_count = atoi(dbrow[col]); col++;
|
int alarm_frame_count = atoi(dbrow[col]); col++;
|
||||||
int section_length = atoi(dbrow[col]); col++;
|
int section_length = atoi(dbrow[col]); col++;
|
||||||
int frame_skip = atoi(dbrow[col]); col++;
|
int frame_skip = atoi(dbrow[col]); col++;
|
||||||
|
int motion_frame_skip = atoi(dbrow[col]); col++;
|
||||||
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
int alarm_capture_delay = (dbrow[col]&&atof(dbrow[col])>0.0)?int(DT_PREC_3/atof(dbrow[col])):0; col++;
|
||||||
int fps_report_interval = atoi(dbrow[col]); col++;
|
int fps_report_interval = atoi(dbrow[col]); col++;
|
||||||
|
@ -2677,6 +2694,7 @@ Monitor *Monitor::Load( int id, bool load_zones, Purpose purpose )
|
||||||
alarm_frame_count,
|
alarm_frame_count,
|
||||||
section_length,
|
section_length,
|
||||||
frame_skip,
|
frame_skip,
|
||||||
|
motion_frame_skip,
|
||||||
capture_delay,
|
capture_delay,
|
||||||
alarm_capture_delay,
|
alarm_capture_delay,
|
||||||
fps_report_interval,
|
fps_report_interval,
|
||||||
|
@ -2741,7 +2759,9 @@ int Monitor::Capture()
|
||||||
{
|
{
|
||||||
// Unable to capture image for temporary reason
|
// Unable to capture image for temporary reason
|
||||||
// Fake a signal loss image
|
// Fake a signal loss image
|
||||||
capture_image->Fill( signal_check_colour );
|
Rgb signalcolor;
|
||||||
|
signalcolor = rgb_convert(signal_check_colour, ZM_SUBPIX_ORDER_BGR); /* HTML colour code is actually BGR in memory, we want RGB */
|
||||||
|
capture_image->Fill(signalcolor);
|
||||||
captureResult = 0;
|
captureResult = 0;
|
||||||
} else {
|
} else {
|
||||||
captureResult = 1;
|
captureResult = 1;
|
||||||
|
@ -3131,7 +3151,9 @@ unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &z
|
||||||
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
||||||
{
|
{
|
||||||
Zone *zone = zones[n_zone];
|
Zone *zone = zones[n_zone];
|
||||||
zone->ClearAlarm();
|
// need previous alarmed state for preclusive zone, so don't clear just yet
|
||||||
|
if (!zone->IsPreclusive())
|
||||||
|
zone->ClearAlarm();
|
||||||
if ( !zone->IsInactive() )
|
if ( !zone->IsInactive() )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
|
@ -3148,14 +3170,31 @@ unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &z
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
Debug( 3, "Checking preclusive zone %s", zone->Label() );
|
int old_zone_score = zone->Score();
|
||||||
|
bool old_zone_alarmed = zone->Alarmed();
|
||||||
|
Debug( 3, "Checking preclusive zone %s - old score: %d, state: %s", zone->Label(),old_zone_score, zone->Alarmed()?"alarmed":"quiet" );
|
||||||
if ( zone->CheckAlarms( &delta_image ) )
|
if ( zone->CheckAlarms( &delta_image ) )
|
||||||
{
|
{
|
||||||
alarm = true;
|
alarm = true;
|
||||||
score += zone->Score();
|
score += zone->Score();
|
||||||
|
zone->SetAlarm();
|
||||||
Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() );
|
Debug( 3, "Zone is alarmed, zone score = %d", zone->Score() );
|
||||||
zoneSet.insert( zone->Label() );
|
zoneSet.insert( zone->Label() );
|
||||||
//zone->ResetStats();
|
//zone->ResetStats();
|
||||||
|
} else {
|
||||||
|
// check if end of alarm
|
||||||
|
if (old_zone_alarmed) {
|
||||||
|
Debug(3, "Preclusive Zone %s alarm Ends. Prevíous score: %d", zone->Label(), old_zone_score);
|
||||||
|
if (old_zone_score > 0) {
|
||||||
|
zone->SetExtendAlarmCount(zone->GetExtendAlarmFrames());
|
||||||
|
}
|
||||||
|
if (zone->CheckExtendAlarmCount()) {
|
||||||
|
alarm=true;
|
||||||
|
zone->SetAlarm();
|
||||||
|
} else {
|
||||||
|
zone->ClearAlarm();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3173,7 +3212,7 @@ unsigned int Monitor::DetectMotion( const Image &comp_image, Event::StringSet &z
|
||||||
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
for ( int n_zone = 0; n_zone < n_zones; n_zone++ )
|
||||||
{
|
{
|
||||||
Zone *zone = zones[n_zone];
|
Zone *zone = zones[n_zone];
|
||||||
if ( !zone->IsActive() )
|
if ( !zone->IsActive() || zone->IsPreclusive())
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,6 +230,7 @@ protected:
|
||||||
int stream_replay_buffer; // How many frames to store to support DVR functions, IGNORED from this object, passed directly into zms now
|
int stream_replay_buffer; // How many frames to store to support DVR functions, IGNORED from this object, passed directly into zms now
|
||||||
int section_length; // How long events should last in continuous modes
|
int section_length; // How long events should last in continuous modes
|
||||||
int frame_skip; // How many frames to skip in continuous modes
|
int frame_skip; // How many frames to skip in continuous modes
|
||||||
|
int motion_frame_skip; // How many frames to skip in motion detection
|
||||||
int capture_delay; // How long we wait between capture frames
|
int capture_delay; // How long we wait between capture frames
|
||||||
int alarm_capture_delay; // How long we wait between capture frames when in alarm state
|
int alarm_capture_delay; // How long we wait between capture frames when in alarm state
|
||||||
int alarm_frame_count; // How many alarm frames are required before an event is triggered
|
int alarm_frame_count; // How many alarm frames are required before an event is triggered
|
||||||
|
@ -255,6 +256,7 @@ protected:
|
||||||
time_t start_time;
|
time_t start_time;
|
||||||
time_t last_fps_time;
|
time_t last_fps_time;
|
||||||
time_t auto_resume_time;
|
time_t auto_resume_time;
|
||||||
|
unsigned int last_motion_score;
|
||||||
|
|
||||||
EventCloseMode event_close_mode;
|
EventCloseMode event_close_mode;
|
||||||
|
|
||||||
|
@ -288,7 +290,7 @@ protected:
|
||||||
public:
|
public:
|
||||||
// OurCheckAlarms seems to be unused. Check it on zm_monitor.cpp for more info.
|
// OurCheckAlarms seems to be unused. Check it on zm_monitor.cpp for more info.
|
||||||
//bool OurCheckAlarms( Zone *zone, const Image *pImage );
|
//bool OurCheckAlarms( Zone *zone, const Image *pImage );
|
||||||
Monitor( int p_id, const char *p_name, int p_function, bool p_enabled, const char *p_linked_monitors, Camera *p_camera, int p_orientation, unsigned int p_deinterlacing, const char *p_event_prefix, const char *p_label_format, const Coord &p_label_coord, int p_image_buffer_count, int p_warmup_count, int p_pre_event_count, int p_post_event_count, int p_stream_replay_buffer, int p_alarm_frame_count, int p_section_length, int p_frame_skip, int p_capture_delay, int p_alarm_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, int p_alarm_ref_blend_perc, bool p_track_motion, Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones=0, Zone *p_zones[]=0 );
|
Monitor( int p_id, const char *p_name, int p_function, bool p_enabled, const char *p_linked_monitors, Camera *p_camera, int p_orientation, unsigned int p_deinterlacing, const char *p_event_prefix, const char *p_label_format, const Coord &p_label_coord, int p_image_buffer_count, int p_warmup_count, int p_pre_event_count, int p_post_event_count, int p_stream_replay_buffer, int p_alarm_frame_count, int p_section_length, int p_frame_skip, int p_motion_frame_skip, int p_capture_delay, int p_alarm_capture_delay, int p_fps_report_interval, int p_ref_blend_perc, int p_alarm_ref_blend_perc, bool p_track_motion, Rgb p_signal_check_colour, Purpose p_purpose, int p_n_zones=0, Zone *p_zones[]=0 );
|
||||||
~Monitor();
|
~Monitor();
|
||||||
|
|
||||||
void AddZones( int p_n_zones, Zone *p_zones[] );
|
void AddZones( int p_n_zones, Zone *p_zones[] );
|
||||||
|
|
|
@ -133,7 +133,7 @@ void VideoStream::SetupCodec( int colours, int subpixelorder, int width, int hei
|
||||||
/* add the video streams using the default format codecs
|
/* add the video streams using the default format codecs
|
||||||
and initialize the codecs */
|
and initialize the codecs */
|
||||||
ost = NULL;
|
ost = NULL;
|
||||||
if (of->video_codec != CODEC_ID_NONE)
|
if (of->video_codec != AV_CODEC_ID_NONE)
|
||||||
{
|
{
|
||||||
#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0)
|
#if LIBAVFORMAT_VERSION_INT < AV_VERSION_INT(53, 4, 0)
|
||||||
ost = av_new_stream(ofc, 0);
|
ost = av_new_stream(ofc, 0);
|
||||||
|
|
|
@ -261,7 +261,7 @@ int RemoteCameraRtsp::Capture( Image &image )
|
||||||
if ( !buffer.size() )
|
if ( !buffer.size() )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
if(mCodecContext->codec_id == CODEC_ID_H264)
|
if(mCodecContext->codec_id == AV_CODEC_ID_H264)
|
||||||
{
|
{
|
||||||
// SPS and PPS frames should be saved and appended to IDR frames
|
// SPS and PPS frames should be saved and appended to IDR frames
|
||||||
int nalType = (buffer.head()[3] & 0x1f);
|
int nalType = (buffer.head()[3] & 0x1f);
|
||||||
|
|
|
@ -71,7 +71,7 @@ RtpSource::RtpSource( int id, const std::string &localHost, int localPortBase, c
|
||||||
mLastSrTimeNtp = tvZero();
|
mLastSrTimeNtp = tvZero();
|
||||||
mLastSrTimeRtp = 0;
|
mLastSrTimeRtp = 0;
|
||||||
|
|
||||||
if(mCodecId != CODEC_ID_H264 && mCodecId != CODEC_ID_MPEG4)
|
if(mCodecId != AV_CODEC_ID_H264 && mCodecId != AV_CODEC_ID_MPEG4)
|
||||||
Warning( "The device is using a codec that may not be supported. Do not be surprised if things don't work." );
|
Warning( "The device is using a codec that may not be supported. Do not be surprised if things don't work." );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen )
|
||||||
rtpHeader = (RtpDataHeader *)packet;
|
rtpHeader = (RtpDataHeader *)packet;
|
||||||
int rtpHeaderSize = 12 + rtpHeader->cc * 4;
|
int rtpHeaderSize = 12 + rtpHeader->cc * 4;
|
||||||
// No need to check for nal type as non fragmented packets already have 001 start sequence appended
|
// No need to check for nal type as non fragmented packets already have 001 start sequence appended
|
||||||
bool h264FragmentEnd = (mCodecId == CODEC_ID_H264) && (packet[rtpHeaderSize+1] & 0x40);
|
bool h264FragmentEnd = (mCodecId == AV_CODEC_ID_H264) && (packet[rtpHeaderSize+1] & 0x40);
|
||||||
bool thisM = rtpHeader->m || h264FragmentEnd;
|
bool thisM = rtpHeader->m || h264FragmentEnd;
|
||||||
|
|
||||||
if ( updateSeq( ntohs(rtpHeader->seqN) ) )
|
if ( updateSeq( ntohs(rtpHeader->seqN) ) )
|
||||||
|
@ -278,7 +278,7 @@ bool RtpSource::handlePacket( const unsigned char *packet, size_t packetLen )
|
||||||
{
|
{
|
||||||
int extraHeader = 0;
|
int extraHeader = 0;
|
||||||
|
|
||||||
if( mCodecId == CODEC_ID_H264 )
|
if( mCodecId == AV_CODEC_ID_H264 )
|
||||||
{
|
{
|
||||||
int nalType = (packet[rtpHeaderSize] & 0x1f);
|
int nalType = (packet[rtpHeaderSize] & 0x1f);
|
||||||
|
|
||||||
|
|
|
@ -25,44 +25,44 @@
|
||||||
|
|
||||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1)
|
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,2,1)
|
||||||
SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = {
|
SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = {
|
||||||
{ 0, "PCMU", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_MULAW, 8000, 1 },
|
{ 0, "PCMU", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_MULAW, 8000, 1 },
|
||||||
{ 3, "GSM", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 3, "GSM", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 4, "G723", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 4, "G723", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 5, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 5, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 6, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 16000, 1 },
|
{ 6, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 16000, 1 },
|
||||||
{ 7, "LPC", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 7, "LPC", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 8, "PCMA", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_ALAW, 8000, 1 },
|
{ 8, "PCMA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_ALAW, 8000, 1 },
|
||||||
{ 9, "G722", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 9, "G722", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 10, "L16", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_S16BE, 44100, 2 },
|
{ 10, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 2 },
|
||||||
{ 11, "L16", AVMEDIA_TYPE_AUDIO, CODEC_ID_PCM_S16BE, 44100, 1 },
|
{ 11, "L16", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_PCM_S16BE, 44100, 1 },
|
||||||
{ 12, "QCELP", AVMEDIA_TYPE_AUDIO, CODEC_ID_QCELP, 8000, 1 },
|
{ 12, "QCELP", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_QCELP, 8000, 1 },
|
||||||
{ 13, "CN", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 13, "CN", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 14, "MPA", AVMEDIA_TYPE_AUDIO, CODEC_ID_MP2, -1, -1 },
|
{ 14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP2, -1, -1 },
|
||||||
{ 14, "MPA", AVMEDIA_TYPE_AUDIO, CODEC_ID_MP3, -1, -1 },
|
{ 14, "MPA", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_MP3, -1, -1 },
|
||||||
{ 15, "G728", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 15, "G728", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 16, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 11025, 1 },
|
{ 16, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 11025, 1 },
|
||||||
{ 17, "DVI4", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 22050, 1 },
|
{ 17, "DVI4", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 22050, 1 },
|
||||||
{ 18, "G729", AVMEDIA_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 18, "G729", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 25, "CelB", AVMEDIA_TYPE_VIDEO, CODEC_ID_NONE, 90000, -1 },
|
{ 25, "CelB", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1 },
|
||||||
{ 26, "JPEG", AVMEDIA_TYPE_VIDEO, CODEC_ID_MJPEG, 90000, -1 },
|
{ 26, "JPEG", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MJPEG, 90000, -1 },
|
||||||
{ 28, "nv", AVMEDIA_TYPE_VIDEO, CODEC_ID_NONE, 90000, -1 },
|
{ 28, "nv", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_NONE, 90000, -1 },
|
||||||
{ 31, "H261", AVMEDIA_TYPE_VIDEO, CODEC_ID_H261, 90000, -1 },
|
{ 31, "H261", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H261, 90000, -1 },
|
||||||
{ 32, "MPV", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG1VIDEO, 90000, -1 },
|
{ 32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG1VIDEO, 90000, -1 },
|
||||||
{ 32, "MPV", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG2VIDEO, 90000, -1 },
|
{ 32, "MPV", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG2VIDEO, 90000, -1 },
|
||||||
{ 33, "MP2T", AVMEDIA_TYPE_DATA, CODEC_ID_MPEG2TS, 90000, -1 },
|
{ 33, "MP2T", AVMEDIA_TYPE_DATA, AV_CODEC_ID_MPEG2TS, 90000, -1 },
|
||||||
{ 34, "H263", AVMEDIA_TYPE_VIDEO, CODEC_ID_H263, 90000, -1 },
|
{ 34, "H263", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H263, 90000, -1 },
|
||||||
{ -1, "", AVMEDIA_TYPE_UNKNOWN, CODEC_ID_NONE, -1, -1 }
|
{ -1, "", AVMEDIA_TYPE_UNKNOWN, AV_CODEC_ID_NONE, -1, -1 }
|
||||||
};
|
};
|
||||||
|
|
||||||
SessionDescriptor::DynamicPayloadDesc SessionDescriptor::smDynamicPayloads[] = {
|
SessionDescriptor::DynamicPayloadDesc SessionDescriptor::smDynamicPayloads[] = {
|
||||||
{ "MP4V-ES", AVMEDIA_TYPE_VIDEO, CODEC_ID_MPEG4 },
|
{ "MP4V-ES", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG4 },
|
||||||
{ "mpeg4-generic", AVMEDIA_TYPE_AUDIO, CODEC_ID_AAC },
|
{ "mpeg4-generic", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC },
|
||||||
{ "H264", AVMEDIA_TYPE_VIDEO, CODEC_ID_H264 },
|
{ "H264", AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H264 },
|
||||||
{ "AMR", AVMEDIA_TYPE_AUDIO, CODEC_ID_AMR_NB }
|
{ "AMR", AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AMR_NB }
|
||||||
};
|
};
|
||||||
#else
|
#else
|
||||||
SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = {
|
SessionDescriptor::StaticPayloadDesc SessionDescriptor::smStaticPayloads[] = {
|
||||||
{ 0, "PCMU", CODEC_TYPE_AUDIO, CODEC_ID_PCM_MULAW, 8000, 1 },
|
{ 0, "PCMU", CODEC_TYPE_AUDIO, CODEC_ID_PCM_MULAW, 8001, 1 },
|
||||||
{ 3, "GSM", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 3, "GSM", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 4, "G723", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 4, "G723", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
||||||
{ 5, "DVI4", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
{ 5, "DVI4", CODEC_TYPE_AUDIO, CODEC_ID_NONE, 8000, 1 },
|
||||||
|
@ -415,7 +415,7 @@ AVFormatContext *SessionDescriptor::generateFormatContext() const
|
||||||
stream->codec->width = mediaDesc->getWidth();
|
stream->codec->width = mediaDesc->getWidth();
|
||||||
if ( mediaDesc->getHeight() )
|
if ( mediaDesc->getHeight() )
|
||||||
stream->codec->height = mediaDesc->getHeight();
|
stream->codec->height = mediaDesc->getHeight();
|
||||||
if ( stream->codec->codec_id == CODEC_ID_H264 && mediaDesc->getSprops().size())
|
if ( stream->codec->codec_id == AV_CODEC_ID_H264 && mediaDesc->getSprops().size())
|
||||||
{
|
{
|
||||||
uint8_t start_sequence[]= { 0, 0, 1 };
|
uint8_t start_sequence[]= { 0, 0, 1 };
|
||||||
stream->codec->extradata_size= 0;
|
stream->codec->extradata_size= 0;
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
#include "zm_image.h"
|
#include "zm_image.h"
|
||||||
#include "zm_monitor.h"
|
#include "zm_monitor.h"
|
||||||
|
|
||||||
void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames )
|
void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames, int p_extend_alarm_frames )
|
||||||
{
|
{
|
||||||
monitor = p_monitor;
|
monitor = p_monitor;
|
||||||
|
|
||||||
|
@ -46,8 +46,9 @@ void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_
|
||||||
min_blobs = p_min_blobs;
|
min_blobs = p_min_blobs;
|
||||||
max_blobs = p_max_blobs;
|
max_blobs = p_max_blobs;
|
||||||
overload_frames = p_overload_frames;
|
overload_frames = p_overload_frames;
|
||||||
|
extend_alarm_frames = p_extend_alarm_frames;
|
||||||
|
|
||||||
Debug( 1, "Initialised zone %d/%s - %d - %dx%d - Rgb:%06x, CM:%d, MnAT:%d, MxAT:%d, MnAP:%d, MxAP:%d, FB:%dx%d, MnFP:%d, MxFP:%d, MnBS:%d, MxBS:%d, MnB:%d, MxB:%d, OF: %d", id, label, type, polygon.Width(), polygon.Height(), alarm_rgb, check_method, min_pixel_threshold, max_pixel_threshold, min_alarm_pixels, max_alarm_pixels, filter_box.X(), filter_box.Y(), min_filter_pixels, max_filter_pixels, min_blob_pixels, max_blob_pixels, min_blobs, max_blobs, overload_frames );
|
Debug( 1, "Initialised zone %d/%s - %d - %dx%d - Rgb:%06x, CM:%d, MnAT:%d, MxAT:%d, MnAP:%d, MxAP:%d, FB:%dx%d, MnFP:%d, MxFP:%d, MnBS:%d, MxBS:%d, MnB:%d, MxB:%d, OF: %d, AF: %d", id, label, type, polygon.Width(), polygon.Height(), alarm_rgb, check_method, min_pixel_threshold, max_pixel_threshold, min_alarm_pixels, max_alarm_pixels, filter_box.X(), filter_box.Y(), min_filter_pixels, max_filter_pixels, min_blob_pixels, max_blob_pixels, min_blobs, max_blobs, overload_frames, extend_alarm_frames );
|
||||||
|
|
||||||
alarmed = false;
|
alarmed = false;
|
||||||
pixel_diff = 0;
|
pixel_diff = 0;
|
||||||
|
@ -61,6 +62,7 @@ void Zone::Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_
|
||||||
score = 0;
|
score = 0;
|
||||||
|
|
||||||
overload_count = 0;
|
overload_count = 0;
|
||||||
|
extend_alarm_count = 0;
|
||||||
|
|
||||||
pg_image = new Image( monitor->Width(), monitor->Height(), 1, ZM_SUBPIX_ORDER_NONE);
|
pg_image = new Image( monitor->Width(), monitor->Height(), 1, ZM_SUBPIX_ORDER_NONE);
|
||||||
pg_image->Clear();
|
pg_image->Clear();
|
||||||
|
@ -161,6 +163,35 @@ int Zone::GetOverloadFrames()
|
||||||
{
|
{
|
||||||
return overload_frames;
|
return overload_frames;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int Zone::GetExtendAlarmCount()
|
||||||
|
{
|
||||||
|
return extend_alarm_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Zone::SetExtendAlarmCount(int nExtendAlarmCount)
|
||||||
|
{
|
||||||
|
extend_alarm_count = nExtendAlarmCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
int Zone::GetExtendAlarmFrames()
|
||||||
|
{
|
||||||
|
return extend_alarm_frames;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Zone::CheckExtendAlarmCount()
|
||||||
|
{
|
||||||
|
Info("ExtendAlarm count: %d, ExtendAlarm frames: %d", extend_alarm_count, extend_alarm_frames);
|
||||||
|
if ( extend_alarm_count )
|
||||||
|
{
|
||||||
|
Debug( 3, "In extend mode, %d frames of %d remaining", extend_alarm_count, extend_alarm_frames );
|
||||||
|
extend_alarm_count--;
|
||||||
|
return( true );
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
|
|
||||||
|
@ -909,7 +940,7 @@ bool Zone::ParseZoneString( const char *zone_string, int &zone_id, int &colour,
|
||||||
int Zone::Load( Monitor *monitor, Zone **&zones )
|
int Zone::Load( Monitor *monitor, Zone **&zones )
|
||||||
{
|
{
|
||||||
static char sql[ZM_SQL_MED_BUFSIZ];
|
static char sql[ZM_SQL_MED_BUFSIZ];
|
||||||
snprintf( sql, sizeof(sql), "select Id,Name,Type+0,Units,Coords,AlarmRGB,CheckMethod+0,MinPixelThreshold,MaxPixelThreshold,MinAlarmPixels,MaxAlarmPixels,FilterX,FilterY,MinFilterPixels,MaxFilterPixels,MinBlobPixels,MaxBlobPixels,MinBlobs,MaxBlobs,OverloadFrames from Zones where MonitorId = %d order by Type, Id", monitor->Id() );
|
snprintf( sql, sizeof(sql), "select Id,Name,Type+0,Units,Coords,AlarmRGB,CheckMethod+0,MinPixelThreshold,MaxPixelThreshold,MinAlarmPixels,MaxAlarmPixels,FilterX,FilterY,MinFilterPixels,MaxFilterPixels,MinBlobPixels,MaxBlobPixels,MinBlobs,MaxBlobs,OverloadFrames,ExtendAlarmFrames from Zones where MonitorId = %d order by Type, Id", monitor->Id() );
|
||||||
if ( mysql_query( &dbconn, sql ) )
|
if ( mysql_query( &dbconn, sql ) )
|
||||||
{
|
{
|
||||||
Error( "Can't run query: %s", mysql_error( &dbconn ) );
|
Error( "Can't run query: %s", mysql_error( &dbconn ) );
|
||||||
|
@ -950,6 +981,7 @@ int Zone::Load( Monitor *monitor, Zone **&zones )
|
||||||
int MinBlobs = dbrow[col]?atoi(dbrow[col]):0; col++;
|
int MinBlobs = dbrow[col]?atoi(dbrow[col]):0; col++;
|
||||||
int MaxBlobs = dbrow[col]?atoi(dbrow[col]):0; col++;
|
int MaxBlobs = dbrow[col]?atoi(dbrow[col]):0; col++;
|
||||||
int OverloadFrames = dbrow[col]?atoi(dbrow[col]):0; col++;
|
int OverloadFrames = dbrow[col]?atoi(dbrow[col]):0; col++;
|
||||||
|
int ExtendAlarmFrames = dbrow[col]?atoi(dbrow[col]):0; col++;
|
||||||
|
|
||||||
/* HTML colour code is actually BGR in memory, we want RGB */
|
/* HTML colour code is actually BGR in memory, we want RGB */
|
||||||
AlarmRGB = rgb_convert(AlarmRGB, ZM_SUBPIX_ORDER_BGR);
|
AlarmRGB = rgb_convert(AlarmRGB, ZM_SUBPIX_ORDER_BGR);
|
||||||
|
@ -983,7 +1015,7 @@ int Zone::Load( Monitor *monitor, Zone **&zones )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
zones[i] = new Zone( monitor, Id, Name, (Zone::ZoneType)Type, polygon, AlarmRGB, (Zone::CheckMethod)CheckMethod, MinPixelThreshold, MaxPixelThreshold, MinAlarmPixels, MaxAlarmPixels, Coord( FilterX, FilterY ), MinFilterPixels, MaxFilterPixels, MinBlobPixels, MaxBlobPixels, MinBlobs, MaxBlobs, OverloadFrames );
|
zones[i] = new Zone( monitor, Id, Name, (Zone::ZoneType)Type, polygon, AlarmRGB, (Zone::CheckMethod)CheckMethod, MinPixelThreshold, MaxPixelThreshold, MinAlarmPixels, MaxAlarmPixels, Coord( FilterX, FilterY ), MinFilterPixels, MaxFilterPixels, MinBlobPixels, MaxBlobPixels, MinBlobs, MaxBlobs, OverloadFrames, ExtendAlarmFrames );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ( mysql_errno( &dbconn ) )
|
if ( mysql_errno( &dbconn ) )
|
||||||
|
|
|
@ -73,6 +73,7 @@ protected:
|
||||||
int max_blobs;
|
int max_blobs;
|
||||||
|
|
||||||
int overload_frames;
|
int overload_frames;
|
||||||
|
int extend_alarm_frames;
|
||||||
|
|
||||||
// Outputs/Statistics
|
// Outputs/Statistics
|
||||||
bool alarmed;
|
bool alarmed;
|
||||||
|
@ -91,23 +92,24 @@ protected:
|
||||||
Image *image;
|
Image *image;
|
||||||
|
|
||||||
int overload_count;
|
int overload_count;
|
||||||
|
int extend_alarm_count;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames );
|
void Setup( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold, int p_max_pixel_threshold, int p_min_alarm_pixels, int p_max_alarm_pixels, const Coord &p_filter_box, int p_min_filter_pixels, int p_max_filter_pixels, int p_min_blob_pixels, int p_max_blob_pixels, int p_min_blobs, int p_max_blobs, int p_overload_frames, int p_extend_alarm_frames );
|
||||||
void std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsigned int* pixel_count, unsigned int* pixel_sum);
|
void std_alarmedpixels(Image* pdiff_image, const Image* ppoly_image, unsigned int* pixel_count, unsigned int* pixel_sum);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Zone( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0 )
|
Zone( Monitor *p_monitor, int p_id, const char *p_label, ZoneType p_type, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0, int p_extend_alarm_frames=0 )
|
||||||
{
|
{
|
||||||
Setup( p_monitor, p_id, p_label, p_type, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames );
|
Setup( p_monitor, p_id, p_label, p_type, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames, p_extend_alarm_frames );
|
||||||
}
|
}
|
||||||
Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0 )
|
Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon, const Rgb p_alarm_rgb, CheckMethod p_check_method, int p_min_pixel_threshold=15, int p_max_pixel_threshold=0, int p_min_alarm_pixels=50, int p_max_alarm_pixels=75000, const Coord &p_filter_box=Coord( 3, 3 ), int p_min_filter_pixels=50, int p_max_filter_pixels=50000, int p_min_blob_pixels=10, int p_max_blob_pixels=0, int p_min_blobs=0, int p_max_blobs=0, int p_overload_frames=0, int p_extend_alarm_frames=0)
|
||||||
{
|
{
|
||||||
Setup( p_monitor, p_id, p_label, Zone::ACTIVE, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames );
|
Setup( p_monitor, p_id, p_label, Zone::ACTIVE, p_polygon, p_alarm_rgb, p_check_method, p_min_pixel_threshold, p_max_pixel_threshold, p_min_alarm_pixels, p_max_alarm_pixels, p_filter_box, p_min_filter_pixels, p_max_filter_pixels, p_min_blob_pixels, p_max_blob_pixels, p_min_blobs, p_max_blobs, p_overload_frames, p_extend_alarm_frames );
|
||||||
}
|
}
|
||||||
Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon )
|
Zone( Monitor *p_monitor, int p_id, const char *p_label, const Polygon &p_polygon )
|
||||||
{
|
{
|
||||||
Setup( p_monitor, p_id, p_label, Zone::INACTIVE, p_polygon, RGB_BLACK, (Zone::CheckMethod)0, 0, 0, 0, 0, Coord( 0, 0 ), 0, 0, 0, 0, 0, 0, 0 );
|
Setup( p_monitor, p_id, p_label, Zone::INACTIVE, p_polygon, RGB_BLACK, (Zone::CheckMethod)0, 0, 0, 0, 0, Coord( 0, 0 ), 0, 0, 0, 0, 0, 0, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -153,6 +155,11 @@ public:
|
||||||
int GetOverloadCount();
|
int GetOverloadCount();
|
||||||
void SetOverloadCount(int nOverCount);
|
void SetOverloadCount(int nOverCount);
|
||||||
int GetOverloadFrames();
|
int GetOverloadFrames();
|
||||||
|
//=================================================
|
||||||
|
bool CheckExtendAlarmCount();
|
||||||
|
int GetExtendAlarmCount();
|
||||||
|
void SetExtendAlarmCount(int nOverCount);
|
||||||
|
int GetExtendAlarmFrames();
|
||||||
void SetScore(unsigned int nScore);
|
void SetScore(unsigned int nScore);
|
||||||
void SetAlarmImage(const Image* srcImage);
|
void SetAlarmImage(const Image* srcImage);
|
||||||
|
|
||||||
|
|
|
@ -13,7 +13,7 @@ use Switch;
|
||||||
$| = 1;
|
$| = 1;
|
||||||
|
|
||||||
my @monitors;
|
my @monitors;
|
||||||
my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS ) or die "Could not connect to the database.\n";
|
my $dbh = zmDbConnect();
|
||||||
my $sql = "SELECT * FROM Monitors";
|
my $sql = "SELECT * FROM Monitors";
|
||||||
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
|
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );
|
||||||
my $res = $sth->execute() or die( "Can't execute '$sql': ".$sth->errstr() );
|
my $res = $sth->execute() or die( "Can't execute '$sql': ".$sth->errstr() );
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
# CMakeLists.txt for the ZoneMinder web files
|
# CMakeLists.txt for the ZoneMinder web files
|
||||||
|
|
||||||
|
# Process the api subdirectory
|
||||||
|
add_subdirectory(api)
|
||||||
# Process the tools/mootools subdirectory
|
# Process the tools/mootools subdirectory
|
||||||
add_subdirectory(tools/mootools)
|
add_subdirectory(tools/mootools)
|
||||||
|
|
||||||
|
@ -7,10 +9,16 @@ add_subdirectory(tools/mootools)
|
||||||
configure_file(includes/config.php.in "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" @ONLY)
|
configure_file(includes/config.php.in "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" @ONLY)
|
||||||
|
|
||||||
# Install the web files
|
# Install the web files
|
||||||
install(DIRECTORY ajax css graphics includes js lang skins tools views DESTINATION "${ZM_WEBDIR}" PATTERN "*.in" EXCLUDE PATTERN "*Make*" EXCLUDE PATTERN "*cmake*" EXCLUDE)
|
install(DIRECTORY api ajax css graphics includes js lang skins tools views DESTINATION "${ZM_WEBDIR}" PATTERN "*.in" EXCLUDE PATTERN "*Make*" EXCLUDE PATTERN "*cmake*" EXCLUDE)
|
||||||
install(FILES index.php DESTINATION "${ZM_WEBDIR}")
|
install(FILES index.php DESTINATION "${ZM_WEBDIR}")
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" DESTINATION "${ZM_WEBDIR}/includes")
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/includes/config.php" DESTINATION "${ZM_WEBDIR}/includes")
|
||||||
|
|
||||||
|
# Install the api config files (if its not in the source directory)
|
||||||
|
if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR))
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/api/app/Config/core.php" DESTINATION "${ZM_WEBDIR}/api/app/Config")
|
||||||
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/api/app/Config/database.php" DESTINATION "${ZM_WEBDIR}/api/app/Config")
|
||||||
|
endif(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR))
|
||||||
|
|
||||||
# Install the mootools symlinks (if its not in the source directory)
|
# Install the mootools symlinks (if its not in the source directory)
|
||||||
if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR))
|
if(NOT (CMAKE_BINARY_DIR STREQUAL CMAKE_SOURCE_DIR))
|
||||||
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tools/mootools/mootools-core.js" DESTINATION "${ZM_WEBDIR}/tools/mootools")
|
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/tools/mootools/mootools-core.js" DESTINATION "${ZM_WEBDIR}/tools/mootools")
|
||||||
|
|
|
@ -51,6 +51,7 @@ $statusData = array(
|
||||||
"AlarmFrameCount" => true,
|
"AlarmFrameCount" => true,
|
||||||
"SectionLength" => true,
|
"SectionLength" => true,
|
||||||
"FrameSkip" => true,
|
"FrameSkip" => true,
|
||||||
|
"MotionFrameSkip" => true,
|
||||||
"MaxFPS" => true,
|
"MaxFPS" => true,
|
||||||
"AlarmMaxFPS" => true,
|
"AlarmMaxFPS" => true,
|
||||||
"FPSReportInterval" => true,
|
"FPSReportInterval" => true,
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
; This file is for unifying the coding style for different editors and IDEs.
|
||||||
|
; More information at http://editorconfig.org
|
||||||
|
|
||||||
|
root = true
|
||||||
|
|
||||||
|
[*]
|
||||||
|
indent_style = tab
|
||||||
|
end_of_line = lf
|
||||||
|
insert_final_newline = true
|
||||||
|
trim_trailing_whitespace = true
|
||||||
|
|
||||||
|
[*.bat]
|
||||||
|
end_of_line = crlf
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Define the line ending behavior of the different file extensions
|
||||||
|
# Set default behaviour, in case users don't have core.autocrlf set.
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
# Explicitly declare text files we want to always be normalized and converted
|
||||||
|
# to native line endings on checkout.
|
||||||
|
*.php text
|
||||||
|
*.default text
|
||||||
|
*.ctp text
|
||||||
|
*.sql text
|
||||||
|
*.md text
|
||||||
|
*.po text
|
||||||
|
*.js text
|
||||||
|
*.css text
|
||||||
|
*.ini text
|
||||||
|
*.properties text
|
||||||
|
*.txt text
|
||||||
|
*.xml text
|
||||||
|
*.yml text
|
||||||
|
.htaccess text
|
||||||
|
|
||||||
|
# Declare files that will always have CRLF line endings on checkout.
|
||||||
|
*.bat eol=crlf
|
||||||
|
|
||||||
|
# Declare files that will always have LF line endings on checkout.
|
||||||
|
*.pem eol=lf
|
||||||
|
|
||||||
|
# Denote all files that are truly binary and should not be modified.
|
||||||
|
*.png binary
|
||||||
|
*.jpg binary
|
||||||
|
*.gif binary
|
||||||
|
*.ico binary
|
||||||
|
*.mo binary
|
|
@ -0,0 +1,21 @@
|
||||||
|
# User specific & automatically generated files #
|
||||||
|
#################################################
|
||||||
|
/app/Config/database.php
|
||||||
|
/app/tmp
|
||||||
|
/lib/Cake/Console/Templates/skel/tmp/
|
||||||
|
/plugins
|
||||||
|
/vendors
|
||||||
|
/build
|
||||||
|
/dist
|
||||||
|
/tags
|
||||||
|
|
||||||
|
# OS generated files #
|
||||||
|
######################
|
||||||
|
.DS_Store
|
||||||
|
.DS_Store?
|
||||||
|
._*
|
||||||
|
.Spotlight-V100
|
||||||
|
.Trashes
|
||||||
|
Icon?
|
||||||
|
ehthumbs.db
|
||||||
|
Thumbs.db
|
|
@ -0,0 +1,5 @@
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteRule ^$ app/webroot/ [L]
|
||||||
|
RewriteRule (.*) app/webroot/$1 [L]
|
||||||
|
</IfModule>
|
|
@ -0,0 +1,12 @@
|
||||||
|
# CMakeLists.txt for the ZoneMinder web API files
|
||||||
|
# The only purpose of this file is to configure the required files
|
||||||
|
|
||||||
|
# Generate random salt and seed for the API
|
||||||
|
string(RANDOM LENGTH 40 ZM_API_SALT)
|
||||||
|
string(RANDOM LENGTH 29 ALPHABET 0123456789 ZM_API_SEED)
|
||||||
|
|
||||||
|
# Configure database.php
|
||||||
|
configure_file(app/Config/database.php.default "${CMAKE_CURRENT_BINARY_DIR}/app/Config/database.php" @ONLY)
|
||||||
|
|
||||||
|
# Configure core.php
|
||||||
|
configure_file(app/Config/core.php.default "${CMAKE_CURRENT_BINARY_DIR}/app/Config/core.php" @ONLY)
|
|
@ -0,0 +1,73 @@
|
||||||
|
# How to contribute
|
||||||
|
|
||||||
|
CakePHP loves to welcome your contributions. There are several ways to help out:
|
||||||
|
* Create an [issue](https://github.com/cakephp/cakephp/issues) on GitHub, if you have found a bug
|
||||||
|
* Write test cases for open bug issues
|
||||||
|
* Write patches for open bug/feature issues, preferably with test cases included
|
||||||
|
* Contribute to the [documentation](https://github.com/cakephp/docs)
|
||||||
|
|
||||||
|
There are a few guidelines that we need contributors to follow so that we have a
|
||||||
|
chance of keeping on top of things.
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
* Make sure you have a [GitHub account](https://github.com/signup/free).
|
||||||
|
* Submit an [issue](https://github.com/cakephp/cakephp/issues), assuming one does not already exist.
|
||||||
|
* Clearly describe the issue including steps to reproduce when it is a bug.
|
||||||
|
* Make sure you fill in the earliest version that you know has the issue.
|
||||||
|
* Fork the repository on GitHub.
|
||||||
|
|
||||||
|
## Making Changes
|
||||||
|
|
||||||
|
* Create a topic branch from where you want to base your work.
|
||||||
|
* This is usually the master branch.
|
||||||
|
* Only target release branches if you are certain your fix must be on that
|
||||||
|
branch.
|
||||||
|
* To quickly create a topic branch based on master; `git branch
|
||||||
|
master/my_contribution master` then checkout the new branch with `git
|
||||||
|
checkout master/my_contribution`. Better avoid working directly on the
|
||||||
|
`master` branch, to avoid conflicts if you pull in updates from origin.
|
||||||
|
* Make commits of logical units.
|
||||||
|
* Check for unnecessary whitespace with `git diff --check` before committing.
|
||||||
|
* Use descriptive commit messages and reference the #issue number.
|
||||||
|
* Core test cases should continue to pass. You can run tests locally or enable
|
||||||
|
[travis-ci](https://travis-ci.org/) for your fork, so all tests and codesniffs
|
||||||
|
will be executed.
|
||||||
|
* Your work should apply the CakePHP coding standards.
|
||||||
|
|
||||||
|
## Which branch to base the work
|
||||||
|
|
||||||
|
* Bugfix branches will be based on master.
|
||||||
|
* New features that are backwards compatible will be based on next minor release
|
||||||
|
branch.
|
||||||
|
* New features or other non-BC changes will go in the next major release branch.
|
||||||
|
|
||||||
|
## Submitting Changes
|
||||||
|
|
||||||
|
* Push your changes to a topic branch in your fork of the repository.
|
||||||
|
* Submit a pull request to the repository in the cakephp organization, with the
|
||||||
|
correct target branch.
|
||||||
|
|
||||||
|
## Test cases and codesniffer
|
||||||
|
|
||||||
|
CakePHP tests requires [PHPUnit](http://www.phpunit.de/manual/current/en/installation.html)
|
||||||
|
3.5 or higher. To run the test cases locally use the following command:
|
||||||
|
|
||||||
|
./lib/Cake/Console/cake test core AllTests --stderr
|
||||||
|
|
||||||
|
To run the sniffs for CakePHP coding standards:
|
||||||
|
|
||||||
|
phpcs -p --extensions=php --standard=CakePHP ./lib/Cake
|
||||||
|
|
||||||
|
Check the [cakephp-codesniffer](https://github.com/cakephp/cakephp-codesniffer)
|
||||||
|
repository to setup the CakePHP standard. The README contains installation info
|
||||||
|
for the sniff and phpcs.
|
||||||
|
|
||||||
|
# Additional Resources
|
||||||
|
|
||||||
|
* [CakePHP coding standards](http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html)
|
||||||
|
* [Existing issues](https://github.com/cakephp/cakephp/issues)
|
||||||
|
* [Development Roadmaps](https://github.com/cakephp/cakephp/wiki#roadmaps)
|
||||||
|
* [General GitHub documentation](https://help.github.com/)
|
||||||
|
* [GitHub pull request documentation](https://help.github.com/send-pull-requests/)
|
||||||
|
* #cakephp IRC channel on freenode.org
|
|
@ -0,0 +1,14 @@
|
||||||
|
ZoneMinder API
|
||||||
|
==============
|
||||||
|
|
||||||
|
This is the ZoneMinder API. It should be, for now, installed under the webroot
|
||||||
|
e.g. /api.
|
||||||
|
|
||||||
|
app/Config/database.php.default must be configured and copied to
|
||||||
|
app/Config/database.php
|
||||||
|
|
||||||
|
In adition, Security.salt and Security.cipherSeed in app/Config/core.php should
|
||||||
|
be changed.
|
||||||
|
|
||||||
|
The API can run on a dedicated / separate instance, so long as it can access
|
||||||
|
the database as ocnfigured in app/Config/database.php
|
|
@ -0,0 +1,5 @@
|
||||||
|
<IfModule mod_rewrite.c>
|
||||||
|
RewriteEngine on
|
||||||
|
RewriteRule ^$ webroot/ [L]
|
||||||
|
RewriteRule (.*) webroot/$1 [L]
|
||||||
|
</IfModule>
|
|
@ -0,0 +1,79 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is Acl Schema file
|
||||||
|
*
|
||||||
|
* Use it to configure database for ACL
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config.Schema
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Using the Schema command line utility
|
||||||
|
* cake schema run create DbAcl
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class DbAclSchema extends CakeSchema {
|
||||||
|
|
||||||
|
public function before($event = array()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function after($event = array()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ACO - Access Control Object - Something that is wanted
|
||||||
|
*/
|
||||||
|
public $acos = array(
|
||||||
|
'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 10, 'key' => 'primary'),
|
||||||
|
'parent_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'model' => array('type' => 'string', 'null' => true),
|
||||||
|
'foreign_key' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'alias' => array('type' => 'string', 'null' => true),
|
||||||
|
'lft' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'rght' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ARO - Access Request Object - Something that wants something
|
||||||
|
*/
|
||||||
|
public $aros = array(
|
||||||
|
'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 10, 'key' => 'primary'),
|
||||||
|
'parent_id' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'model' => array('type' => 'string', 'null' => true),
|
||||||
|
'foreign_key' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'alias' => array('type' => 'string', 'null' => true),
|
||||||
|
'lft' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'rght' => array('type' => 'integer', 'null' => true, 'default' => null, 'length' => 10),
|
||||||
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used by the Cake::Model:Permission class.
|
||||||
|
* Checks if the given $aro has access to action $action in $aco.
|
||||||
|
*/
|
||||||
|
public $aros_acos = array(
|
||||||
|
'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 10, 'key' => 'primary'),
|
||||||
|
'aro_id' => array('type' => 'integer', 'null' => false, 'length' => 10, 'key' => 'index'),
|
||||||
|
'aco_id' => array('type' => 'integer', 'null' => false, 'length' => 10),
|
||||||
|
'_create' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2),
|
||||||
|
'_read' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2),
|
||||||
|
'_update' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2),
|
||||||
|
'_delete' => array('type' => 'string', 'null' => false, 'default' => '0', 'length' => 2),
|
||||||
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'ARO_ACO_KEY' => array('column' => array('aro_id', 'aco_id'), 'unique' => 1))
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
#
|
||||||
|
# Licensed under The MIT License
|
||||||
|
# For full copyright and license information, please see the LICENSE.txt
|
||||||
|
# Redistributions of files must retain the above copyright notice.
|
||||||
|
# MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
|
||||||
|
CREATE TABLE acos (
|
||||||
|
id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
parent_id INTEGER(10) DEFAULT NULL,
|
||||||
|
model VARCHAR(255) DEFAULT '',
|
||||||
|
foreign_key INTEGER(10) UNSIGNED DEFAULT NULL,
|
||||||
|
alias VARCHAR(255) DEFAULT '',
|
||||||
|
lft INTEGER(10) DEFAULT NULL,
|
||||||
|
rght INTEGER(10) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE aros_acos (
|
||||||
|
id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
aro_id INTEGER(10) UNSIGNED NOT NULL,
|
||||||
|
aco_id INTEGER(10) UNSIGNED NOT NULL,
|
||||||
|
_create CHAR(2) NOT NULL DEFAULT 0,
|
||||||
|
_read CHAR(2) NOT NULL DEFAULT 0,
|
||||||
|
_update CHAR(2) NOT NULL DEFAULT 0,
|
||||||
|
_delete CHAR(2) NOT NULL DEFAULT 0,
|
||||||
|
PRIMARY KEY(id)
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE aros (
|
||||||
|
id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||||
|
parent_id INTEGER(10) DEFAULT NULL,
|
||||||
|
model VARCHAR(255) DEFAULT '',
|
||||||
|
foreign_key INTEGER(10) UNSIGNED DEFAULT NULL,
|
||||||
|
alias VARCHAR(255) DEFAULT '',
|
||||||
|
lft INTEGER(10) DEFAULT NULL,
|
||||||
|
rght INTEGER(10) DEFAULT NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is i18n Schema file
|
||||||
|
*
|
||||||
|
* Use it to configure database for i18n
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config.Schema
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Using the Schema command line utility
|
||||||
|
*
|
||||||
|
* Use it to configure database for i18n
|
||||||
|
*
|
||||||
|
* cake schema run create i18n
|
||||||
|
*/
|
||||||
|
class I18nSchema extends CakeSchema {
|
||||||
|
|
||||||
|
public $name = 'i18n';
|
||||||
|
|
||||||
|
public function before($event = array()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function after($event = array()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public $i18n = array(
|
||||||
|
'id' => array('type' => 'integer', 'null' => false, 'default' => null, 'length' => 10, 'key' => 'primary'),
|
||||||
|
'locale' => array('type' => 'string', 'null' => false, 'length' => 6, 'key' => 'index'),
|
||||||
|
'model' => array('type' => 'string', 'null' => false, 'key' => 'index'),
|
||||||
|
'foreign_key' => array('type' => 'integer', 'null' => false, 'length' => 10, 'key' => 'index'),
|
||||||
|
'field' => array('type' => 'string', 'null' => false, 'key' => 'index'),
|
||||||
|
'content' => array('type' => 'text', 'null' => true, 'default' => null),
|
||||||
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1), 'locale' => array('column' => 'locale', 'unique' => 0), 'model' => array('column' => 'model', 'unique' => 0), 'row_id' => array('column' => 'foreign_key', 'unique' => 0), 'field' => array('column' => 'field', 'unique' => 0))
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,27 @@
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
#
|
||||||
|
# Licensed under The MIT License
|
||||||
|
# For full copyright and license information, please see the LICENSE.txt
|
||||||
|
# Redistributions of files must retain the above copyright notice.
|
||||||
|
# MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
|
||||||
|
CREATE TABLE i18n (
|
||||||
|
id int(10) NOT NULL auto_increment,
|
||||||
|
locale varchar(6) NOT NULL,
|
||||||
|
model varchar(255) NOT NULL,
|
||||||
|
foreign_key int(10) NOT NULL,
|
||||||
|
field varchar(255) NOT NULL,
|
||||||
|
content mediumtext,
|
||||||
|
PRIMARY KEY (id),
|
||||||
|
# UNIQUE INDEX I18N_LOCALE_FIELD(locale, model, foreign_key, field),
|
||||||
|
# INDEX I18N_LOCALE_ROW(locale, model, foreign_key),
|
||||||
|
# INDEX I18N_LOCALE_MODEL(locale, model),
|
||||||
|
# INDEX I18N_FIELD(model, foreign_key, field),
|
||||||
|
# INDEX I18N_ROW(model, foreign_key),
|
||||||
|
INDEX locale (locale),
|
||||||
|
INDEX model (model),
|
||||||
|
INDEX row_id (foreign_key),
|
||||||
|
INDEX field (field)
|
||||||
|
);
|
|
@ -0,0 +1,45 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is Sessions Schema file
|
||||||
|
*
|
||||||
|
* Use it to configure database for Sessions
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config.Schema
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Using the Schema command line utility
|
||||||
|
* cake schema run create Sessions
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class SessionsSchema extends CakeSchema {
|
||||||
|
|
||||||
|
public $name = 'Sessions';
|
||||||
|
|
||||||
|
public function before($event = array()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function after($event = array()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public $cake_sessions = array(
|
||||||
|
'id' => array('type' => 'string', 'null' => false, 'key' => 'primary'),
|
||||||
|
'data' => array('type' => 'text', 'null' => true, 'default' => null),
|
||||||
|
'expires' => array('type' => 'integer', 'null' => true, 'default' => null),
|
||||||
|
'indexes' => array('PRIMARY' => array('column' => 'id', 'unique' => 1))
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,17 @@
|
||||||
|
# $Id$
|
||||||
|
#
|
||||||
|
# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
# 1785 E. Sahara Avenue, Suite 490-204
|
||||||
|
# Las Vegas, Nevada 89104
|
||||||
|
#
|
||||||
|
# Licensed under The MIT License
|
||||||
|
# For full copyright and license information, please see the LICENSE.txt
|
||||||
|
# Redistributions of files must retain the above copyright notice.
|
||||||
|
# MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||||
|
|
||||||
|
CREATE TABLE cake_sessions (
|
||||||
|
id varchar(255) NOT NULL default '',
|
||||||
|
data text,
|
||||||
|
expires int(11) default NULL,
|
||||||
|
PRIMARY KEY (id)
|
||||||
|
);
|
|
@ -0,0 +1,65 @@
|
||||||
|
;<?php exit() ?>
|
||||||
|
;/**
|
||||||
|
; * ACL Configuration
|
||||||
|
; *
|
||||||
|
; * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
; * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
; *
|
||||||
|
; * Licensed under The MIT License
|
||||||
|
; * Redistributions of files must retain the above copyright notice.
|
||||||
|
; *
|
||||||
|
; * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
; * @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
; * @package app.Config
|
||||||
|
; * @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
; * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
; */
|
||||||
|
|
||||||
|
; acl.ini.php - Cake ACL Configuration
|
||||||
|
; ---------------------------------------------------------------------
|
||||||
|
; Use this file to specify user permissions.
|
||||||
|
; aco = access control object (something in your application)
|
||||||
|
; aro = access request object (something requesting access)
|
||||||
|
;
|
||||||
|
; User records are added as follows:
|
||||||
|
;
|
||||||
|
; [uid]
|
||||||
|
; groups = group1, group2, group3
|
||||||
|
; allow = aco1, aco2, aco3
|
||||||
|
; deny = aco4, aco5, aco6
|
||||||
|
;
|
||||||
|
; Group records are added in a similar manner:
|
||||||
|
;
|
||||||
|
; [gid]
|
||||||
|
; allow = aco1, aco2, aco3
|
||||||
|
; deny = aco4, aco5, aco6
|
||||||
|
;
|
||||||
|
; The allow, deny, and groups sections are all optional.
|
||||||
|
; NOTE: groups names *cannot* ever be the same as usernames!
|
||||||
|
;
|
||||||
|
; ACL permissions are checked in the following order:
|
||||||
|
; 1. Check for user denies (and DENY if specified)
|
||||||
|
; 2. Check for user allows (and ALLOW if specified)
|
||||||
|
; 3. Gather user's groups
|
||||||
|
; 4. Check group denies (and DENY if specified)
|
||||||
|
; 5. Check group allows (and ALLOW if specified)
|
||||||
|
; 6. If no aro, aco, or group information is found, DENY
|
||||||
|
;
|
||||||
|
; ---------------------------------------------------------------------
|
||||||
|
|
||||||
|
;-------------------------------------
|
||||||
|
;Users
|
||||||
|
;-------------------------------------
|
||||||
|
|
||||||
|
[username-goes-here]
|
||||||
|
groups = group1, group2
|
||||||
|
deny = aco1, aco2
|
||||||
|
allow = aco3, aco4
|
||||||
|
|
||||||
|
;-------------------------------------
|
||||||
|
;Groups
|
||||||
|
;-------------------------------------
|
||||||
|
|
||||||
|
[groupname-goes-here]
|
||||||
|
deny = aco5, aco6
|
||||||
|
allow = aco7, aco8
|
|
@ -0,0 +1,133 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is the PHP base ACL configuration file.
|
||||||
|
*
|
||||||
|
* Use it to configure access control of your CakePHP application.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 2.1
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Example
|
||||||
|
* -------
|
||||||
|
*
|
||||||
|
* Assumptions:
|
||||||
|
*
|
||||||
|
* 1. In your application you created a User model with the following properties:
|
||||||
|
* username, group_id, password, email, firstname, lastname and so on.
|
||||||
|
* 2. You configured AuthComponent to authorize actions via
|
||||||
|
* $this->Auth->authorize = array('Actions' => array('actionPath' => 'controllers/'),...)
|
||||||
|
*
|
||||||
|
* Now, when a user (i.e. jeff) authenticates successfully and requests a controller action (i.e. /invoices/delete)
|
||||||
|
* that is not allowed by default (e.g. via $this->Auth->allow('edit') in the Invoices controller) then AuthComponent
|
||||||
|
* will ask the configured ACL interface if access is granted. Under the assumptions 1. and 2. this will be
|
||||||
|
* done via a call to Acl->check() with
|
||||||
|
*
|
||||||
|
* array('User' => array('username' => 'jeff', 'group_id' => 4, ...))
|
||||||
|
*
|
||||||
|
* as ARO and
|
||||||
|
*
|
||||||
|
* '/controllers/invoices/delete'
|
||||||
|
*
|
||||||
|
* as ACO.
|
||||||
|
*
|
||||||
|
* If the configured map looks like
|
||||||
|
*
|
||||||
|
* $config['map'] = array(
|
||||||
|
* 'User' => 'User/username',
|
||||||
|
* 'Role' => 'User/group_id',
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* then PhpAcl will lookup if we defined a role like User/jeff. If that role is not found, PhpAcl will try to
|
||||||
|
* find a definition for Role/4. If the definition isn't found then a default role (Role/default) will be used to
|
||||||
|
* check rules for the given ACO. The search can be expanded by defining aliases in the alias configuration.
|
||||||
|
* E.g. if you want to use a more readable name than Role/4 in your definitions you can define an alias like
|
||||||
|
*
|
||||||
|
* $config['alias'] = array(
|
||||||
|
* 'Role/4' => 'Role/editor',
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* In the roles configuration you can define roles on the lhs and inherited roles on the rhs:
|
||||||
|
*
|
||||||
|
* $config['roles'] = array(
|
||||||
|
* 'Role/admin' => null,
|
||||||
|
* 'Role/accountant' => null,
|
||||||
|
* 'Role/editor' => null,
|
||||||
|
* 'Role/manager' => 'Role/editor, Role/accountant',
|
||||||
|
* 'User/jeff' => 'Role/manager',
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* In this example manager inherits all rules from editor and accountant. Role/admin doesn't inherit from any role.
|
||||||
|
* Lets define some rules:
|
||||||
|
*
|
||||||
|
* $config['rules'] = array(
|
||||||
|
* 'allow' => array(
|
||||||
|
* '*' => 'Role/admin',
|
||||||
|
* 'controllers/users/(dashboard|profile)' => 'Role/default',
|
||||||
|
* 'controllers/invoices/*' => 'Role/accountant',
|
||||||
|
* 'controllers/articles/*' => 'Role/editor',
|
||||||
|
* 'controllers/users/*' => 'Role/manager',
|
||||||
|
* 'controllers/invoices/delete' => 'Role/manager',
|
||||||
|
* ),
|
||||||
|
* 'deny' => array(
|
||||||
|
* 'controllers/invoices/delete' => 'Role/accountant, User/jeff',
|
||||||
|
* 'controllers/articles/(delete|publish)' => 'Role/editor',
|
||||||
|
* ),
|
||||||
|
* );
|
||||||
|
*
|
||||||
|
* Ok, so as jeff inherits from Role/manager he's matched every rule that references User/jeff, Role/manager,
|
||||||
|
* Role/editor, Role/accountant and Role/default. However, for jeff, rules for User/jeff are more specific than
|
||||||
|
* rules for Role/manager, rules for Role/manager are more specific than rules for Role/editor and so on.
|
||||||
|
* This is important when allow and deny rules match for a role. E.g. Role/accountant is allowed
|
||||||
|
* controllers/invoices/* but at the same time controllers/invoices/delete is denied. But there is a more
|
||||||
|
* specific rule defined for Role/manager which is allowed controllers/invoices/delete. However, the most specific
|
||||||
|
* rule denies access to the delete action explicitly for User/jeff, so he'll be denied access to the resource.
|
||||||
|
*
|
||||||
|
* If we would remove the role definition for User/jeff, then jeff would be granted access as he would be resolved
|
||||||
|
* to Role/manager and Role/manager has an allow rule.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The role map defines how to resolve the user record from your application
|
||||||
|
* to the roles you defined in the roles configuration.
|
||||||
|
*/
|
||||||
|
$config['map'] = array(
|
||||||
|
'User' => 'User/username',
|
||||||
|
'Role' => 'User/group_id',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* define aliases to map your model information to
|
||||||
|
* the roles defined in your role configuration.
|
||||||
|
*/
|
||||||
|
$config['alias'] = array(
|
||||||
|
'Role/4' => 'Role/editor',
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* role configuration
|
||||||
|
*/
|
||||||
|
$config['roles'] = array(
|
||||||
|
'Role/admin' => null,
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* rule configuration
|
||||||
|
*/
|
||||||
|
$config['rules'] = array(
|
||||||
|
'allow' => array(
|
||||||
|
'*' => 'Role/admin',
|
||||||
|
),
|
||||||
|
'deny' => array(),
|
||||||
|
);
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This file is loaded automatically by the app/webroot/index.php file after core.php
|
||||||
|
*
|
||||||
|
* This file should load/create any application wide configuration settings, such as
|
||||||
|
* Caching, Logging, loading additional configuration files.
|
||||||
|
*
|
||||||
|
* You should also use this file to include any files that provide global functions/constants
|
||||||
|
* that your application uses.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 0.10.8.2117
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
// Setup a 'default' cache configuration for use in the application.
|
||||||
|
Cache::config('default', array('engine' => 'File'));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The settings below can be used to set additional paths to models, views and controllers.
|
||||||
|
*
|
||||||
|
* App::build(array(
|
||||||
|
* 'Model' => array('/path/to/models/', '/next/path/to/models/'),
|
||||||
|
* 'Model/Behavior' => array('/path/to/behaviors/', '/next/path/to/behaviors/'),
|
||||||
|
* 'Model/Datasource' => array('/path/to/datasources/', '/next/path/to/datasources/'),
|
||||||
|
* 'Model/Datasource/Database' => array('/path/to/databases/', '/next/path/to/database/'),
|
||||||
|
* 'Model/Datasource/Session' => array('/path/to/sessions/', '/next/path/to/sessions/'),
|
||||||
|
* 'Controller' => array('/path/to/controllers/', '/next/path/to/controllers/'),
|
||||||
|
* 'Controller/Component' => array('/path/to/components/', '/next/path/to/components/'),
|
||||||
|
* 'Controller/Component/Auth' => array('/path/to/auths/', '/next/path/to/auths/'),
|
||||||
|
* 'Controller/Component/Acl' => array('/path/to/acls/', '/next/path/to/acls/'),
|
||||||
|
* 'View' => array('/path/to/views/', '/next/path/to/views/'),
|
||||||
|
* 'View/Helper' => array('/path/to/helpers/', '/next/path/to/helpers/'),
|
||||||
|
* 'Console' => array('/path/to/consoles/', '/next/path/to/consoles/'),
|
||||||
|
* 'Console/Command' => array('/path/to/commands/', '/next/path/to/commands/'),
|
||||||
|
* 'Console/Command/Task' => array('/path/to/tasks/', '/next/path/to/tasks/'),
|
||||||
|
* 'Lib' => array('/path/to/libs/', '/next/path/to/libs/'),
|
||||||
|
* 'Locale' => array('/path/to/locales/', '/next/path/to/locales/'),
|
||||||
|
* 'Vendor' => array('/path/to/vendors/', '/next/path/to/vendors/'),
|
||||||
|
* 'Plugin' => array('/path/to/plugins/', '/next/path/to/plugins/'),
|
||||||
|
* ));
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Custom Inflector rules can be set to correctly pluralize or singularize table, model, controller names or whatever other
|
||||||
|
* string is passed to the inflection functions
|
||||||
|
*
|
||||||
|
* Inflector::rules('singular', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
|
||||||
|
* Inflector::rules('plural', array('rules' => array(), 'irregular' => array(), 'uninflected' => array()));
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plugins need to be loaded manually, you can either load them one by one or all of them in a single call
|
||||||
|
* Uncomment one of the lines below, as you need. Make sure you read the documentation on CakePlugin to use more
|
||||||
|
* advanced ways of loading plugins
|
||||||
|
*
|
||||||
|
* CakePlugin::loadAll(); // Loads all plugins at once
|
||||||
|
* CakePlugin::load('DebugKit'); //Loads a single plugin named DebugKit
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* You can attach event listeners to the request lifecycle as Dispatcher Filter. By default CakePHP bundles two filters:
|
||||||
|
*
|
||||||
|
* - AssetDispatcher filter will serve your asset files (css, images, js, etc) from your themes and plugins
|
||||||
|
* - CacheDispatcher filter will read the Cache.check configure variable and try to serve cached content generated from controllers
|
||||||
|
*
|
||||||
|
* Feel free to remove or add filters as you see fit for your application. A few examples:
|
||||||
|
*
|
||||||
|
* Configure::write('Dispatcher.filters', array(
|
||||||
|
* 'MyCacheFilter', // will use MyCacheFilter class from the Routing/Filter package in your app.
|
||||||
|
* 'MyCacheFilter' => array('prefix' => 'my_cache_'), // will use MyCacheFilter class from the Routing/Filter package in your app with settings array.
|
||||||
|
* 'MyPlugin.MyFilter', // will use MyFilter class from the Routing/Filter package in MyPlugin plugin.
|
||||||
|
* array('callable' => $aFunction, 'on' => 'before', 'priority' => 9), // A valid PHP callback type to be called on beforeDispatch
|
||||||
|
* array('callable' => $anotherMethod, 'on' => 'after'), // A valid PHP callback type to be called on afterDispatch
|
||||||
|
*
|
||||||
|
* ));
|
||||||
|
*/
|
||||||
|
Configure::write('Dispatcher.filters', array(
|
||||||
|
'AssetDispatcher',
|
||||||
|
'CacheDispatcher'
|
||||||
|
));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configures default file logging options
|
||||||
|
*/
|
||||||
|
App::uses('CakeLog', 'Log');
|
||||||
|
CakeLog::config('debug', array(
|
||||||
|
'engine' => 'File',
|
||||||
|
'types' => array('notice', 'info', 'debug'),
|
||||||
|
'file' => 'debug',
|
||||||
|
));
|
||||||
|
CakeLog::config('error', array(
|
||||||
|
'engine' => 'File',
|
||||||
|
'types' => array('warning', 'error', 'critical', 'alert', 'emergency'),
|
||||||
|
'file' => 'error',
|
||||||
|
));
|
|
@ -0,0 +1,387 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* This is core configuration file.
|
||||||
|
*
|
||||||
|
* Use it to configure core behavior of Cake.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* CakePHP Debug Level:
|
||||||
|
*
|
||||||
|
* Production Mode:
|
||||||
|
* 0: No error messages, errors, or warnings shown. Flash messages redirect.
|
||||||
|
*
|
||||||
|
* Development Mode:
|
||||||
|
* 1: Errors and warnings shown, model caches refreshed, flash messages halted.
|
||||||
|
* 2: As in 1, but also with full debug messages and SQL output.
|
||||||
|
*
|
||||||
|
* In production mode, flash messages redirect after a time interval.
|
||||||
|
* In development mode, you need to click the flash message to continue.
|
||||||
|
*/
|
||||||
|
Configure::write('debug', 2);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the Error handler used to handle errors for your application. By default
|
||||||
|
* ErrorHandler::handleError() is used. It will display errors using Debugger, when debug > 0
|
||||||
|
* and log errors with CakeLog when debug = 0.
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
*
|
||||||
|
* - `handler` - callback - The callback to handle errors. You can set this to any callable type,
|
||||||
|
* including anonymous functions.
|
||||||
|
* Make sure you add App::uses('MyHandler', 'Error'); when using a custom handler class
|
||||||
|
* - `level` - integer - The level of errors you are interested in capturing.
|
||||||
|
* - `trace` - boolean - Include stack traces for errors in log files.
|
||||||
|
*
|
||||||
|
* @see ErrorHandler for more information on error handling and configuration.
|
||||||
|
*/
|
||||||
|
Configure::write('Error', array(
|
||||||
|
'handler' => 'ErrorHandler::handleError',
|
||||||
|
'level' => E_ALL & ~E_DEPRECATED,
|
||||||
|
'trace' => true
|
||||||
|
));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the Exception handler used for uncaught exceptions. By default,
|
||||||
|
* ErrorHandler::handleException() is used. It will display a HTML page for the exception, and
|
||||||
|
* while debug > 0, framework errors like Missing Controller will be displayed. When debug = 0,
|
||||||
|
* framework errors will be coerced into generic HTTP errors.
|
||||||
|
*
|
||||||
|
* Options:
|
||||||
|
*
|
||||||
|
* - `handler` - callback - The callback to handle exceptions. You can set this to any callback type,
|
||||||
|
* including anonymous functions.
|
||||||
|
* Make sure you add App::uses('MyHandler', 'Error'); when using a custom handler class
|
||||||
|
* - `renderer` - string - The class responsible for rendering uncaught exceptions. If you choose a custom class you
|
||||||
|
* should place the file for that class in app/Lib/Error. This class needs to implement a render method.
|
||||||
|
* - `log` - boolean - Should Exceptions be logged?
|
||||||
|
* - `skipLog` - array - list of exceptions to skip for logging. Exceptions that
|
||||||
|
* extend one of the listed exceptions will also be skipped for logging.
|
||||||
|
* Example: `'skipLog' => array('NotFoundException', 'UnauthorizedException')`
|
||||||
|
*
|
||||||
|
* @see ErrorHandler for more information on exception handling and configuration.
|
||||||
|
*/
|
||||||
|
Configure::write('Exception', array(
|
||||||
|
'handler' => 'ErrorHandler::handleException',
|
||||||
|
'renderer' => 'ExceptionRenderer',
|
||||||
|
'log' => true
|
||||||
|
));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application wide charset encoding
|
||||||
|
*/
|
||||||
|
Configure::write('App.encoding', 'UTF-8');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To configure CakePHP *not* to use mod_rewrite and to
|
||||||
|
* use CakePHP pretty URLs, remove these .htaccess
|
||||||
|
* files:
|
||||||
|
*
|
||||||
|
* /.htaccess
|
||||||
|
* /app/.htaccess
|
||||||
|
* /app/webroot/.htaccess
|
||||||
|
*
|
||||||
|
* And uncomment the App.baseUrl below. But keep in mind
|
||||||
|
* that plugin assets such as images, CSS and JavaScript files
|
||||||
|
* will not work without URL rewriting!
|
||||||
|
* To work around this issue you should either symlink or copy
|
||||||
|
* the plugin assets into you app's webroot directory. This is
|
||||||
|
* recommended even when you are using mod_rewrite. Handling static
|
||||||
|
* assets through the Dispatcher is incredibly inefficient and
|
||||||
|
* included primarily as a development convenience - and
|
||||||
|
* thus not recommended for production applications.
|
||||||
|
*/
|
||||||
|
//Configure::write('App.baseUrl', env('SCRIPT_NAME'));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To configure CakePHP to use a particular domain URL
|
||||||
|
* for any URL generation inside the application, set the following
|
||||||
|
* configuration variable to the http(s) address to your domain. This
|
||||||
|
* will override the automatic detection of full base URL and can be
|
||||||
|
* useful when generating links from the CLI (e.g. sending emails)
|
||||||
|
*/
|
||||||
|
//Configure::write('App.fullBaseUrl', 'http://example.com');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web path to the public images directory under webroot.
|
||||||
|
* If not set defaults to 'img/'
|
||||||
|
*/
|
||||||
|
//Configure::write('App.imageBaseUrl', 'img/');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web path to the CSS files directory under webroot.
|
||||||
|
* If not set defaults to 'css/'
|
||||||
|
*/
|
||||||
|
//Configure::write('App.cssBaseUrl', 'css/');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web path to the js files directory under webroot.
|
||||||
|
* If not set defaults to 'js/'
|
||||||
|
*/
|
||||||
|
//Configure::write('App.jsBaseUrl', 'js/');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uncomment the define below to use CakePHP prefix routes.
|
||||||
|
*
|
||||||
|
* The value of the define determines the names of the routes
|
||||||
|
* and their associated controller actions:
|
||||||
|
*
|
||||||
|
* Set to an array of prefixes you want to use in your application. Use for
|
||||||
|
* admin or other prefixed routes.
|
||||||
|
*
|
||||||
|
* Routing.prefixes = array('admin', 'manager');
|
||||||
|
*
|
||||||
|
* Enables:
|
||||||
|
* `admin_index()` and `/admin/controller/index`
|
||||||
|
* `manager_index()` and `/manager/controller/index`
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//Configure::write('Routing.prefixes', array('admin'));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Turn off all caching application-wide.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//Configure::write('Cache.disable', true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable cache checking.
|
||||||
|
*
|
||||||
|
* If set to true, for view caching you must still use the controller
|
||||||
|
* public $cacheAction inside your controllers to define caching settings.
|
||||||
|
* You can either set it controller-wide by setting public $cacheAction = true,
|
||||||
|
* or in each action using $this->cacheAction = true.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
//Configure::write('Cache.check', true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enable cache view prefixes.
|
||||||
|
*
|
||||||
|
* If set it will be prepended to the cache name for view file caching. This is
|
||||||
|
* helpful if you deploy the same application via multiple subdomains and languages,
|
||||||
|
* for instance. Each version can then have its own view cache namespace.
|
||||||
|
* Note: The final cache file name will then be `prefix_cachefilename`.
|
||||||
|
*/
|
||||||
|
//Configure::write('Cache.viewPrefix', 'prefix');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Session configuration.
|
||||||
|
*
|
||||||
|
* Contains an array of settings to use for session configuration. The defaults key is
|
||||||
|
* used to define a default preset to use for sessions, any settings declared here will override
|
||||||
|
* the settings of the default config.
|
||||||
|
*
|
||||||
|
* ## Options
|
||||||
|
*
|
||||||
|
* - `Session.cookie` - The name of the cookie to use. Defaults to 'CAKEPHP'
|
||||||
|
* - `Session.timeout` - The number of minutes you want sessions to live for. This timeout is handled by CakePHP
|
||||||
|
* - `Session.cookieTimeout` - The number of minutes you want session cookies to live for.
|
||||||
|
* - `Session.checkAgent` - Do you want the user agent to be checked when starting sessions? You might want to set the
|
||||||
|
* value to false, when dealing with older versions of IE, Chrome Frame or certain web-browsing devices and AJAX
|
||||||
|
* - `Session.defaults` - The default configuration set to use as a basis for your session.
|
||||||
|
* There are four builtins: php, cake, cache, database.
|
||||||
|
* - `Session.handler` - Can be used to enable a custom session handler. Expects an array of callables,
|
||||||
|
* that can be used with `session_save_handler`. Using this option will automatically add `session.save_handler`
|
||||||
|
* to the ini array.
|
||||||
|
* - `Session.autoRegenerate` - Enabling this setting, turns on automatic renewal of sessions, and
|
||||||
|
* sessionids that change frequently. See CakeSession::$requestCountdown.
|
||||||
|
* - `Session.ini` - An associative array of additional ini values to set.
|
||||||
|
*
|
||||||
|
* The built in defaults are:
|
||||||
|
*
|
||||||
|
* - 'php' - Uses settings defined in your php.ini.
|
||||||
|
* - 'cake' - Saves session files in CakePHP's /tmp directory.
|
||||||
|
* - 'database' - Uses CakePHP's database sessions.
|
||||||
|
* - 'cache' - Use the Cache class to save sessions.
|
||||||
|
*
|
||||||
|
* To define a custom session handler, save it at /app/Model/Datasource/Session/<name>.php.
|
||||||
|
* Make sure the class implements `CakeSessionHandlerInterface` and set Session.handler to <name>
|
||||||
|
*
|
||||||
|
* To use database sessions, run the app/Config/Schema/sessions.php schema using
|
||||||
|
* the cake shell command: cake schema create Sessions
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
Configure::write('Session', array(
|
||||||
|
'defaults' => 'php'
|
||||||
|
));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A random string used in security hashing methods.
|
||||||
|
*/
|
||||||
|
Configure::write('Security.salt', '@ZM_API_SALT@');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A random numeric string (digits only) used to encrypt/decrypt strings.
|
||||||
|
*/
|
||||||
|
Configure::write('Security.cipherSeed', '@ZM_API_SEED@');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Apply timestamps with the last modified time to static assets (js, css, images).
|
||||||
|
* Will append a query string parameter containing the time the file was modified. This is
|
||||||
|
* useful for invalidating browser caches.
|
||||||
|
*
|
||||||
|
* Set to `true` to apply timestamps when debug > 0. Set to 'force' to always enable
|
||||||
|
* timestamping regardless of debug value.
|
||||||
|
*/
|
||||||
|
//Configure::write('Asset.timestamp', true);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compress CSS output by removing comments, whitespace, repeating tags, etc.
|
||||||
|
* This requires a/var/cache directory to be writable by the web server for caching.
|
||||||
|
* and /vendors/csspp/csspp.php
|
||||||
|
*
|
||||||
|
* To use, prefix the CSS link URL with '/ccss/' instead of '/css/' or use HtmlHelper::css().
|
||||||
|
*/
|
||||||
|
//Configure::write('Asset.filter.css', 'css.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Plug in your own custom JavaScript compressor by dropping a script in your webroot to handle the
|
||||||
|
* output, and setting the config below to the name of the script.
|
||||||
|
*
|
||||||
|
* To use, prefix your JavaScript link URLs with '/cjs/' instead of '/js/' or use JsHelper::link().
|
||||||
|
*/
|
||||||
|
//Configure::write('Asset.filter.js', 'custom_javascript_output_filter.php');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The class name and database used in CakePHP's
|
||||||
|
* access control lists.
|
||||||
|
*/
|
||||||
|
Configure::write('Acl.classname', 'DbAcl');
|
||||||
|
Configure::write('Acl.database', 'default');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uncomment this line and correct your server timezone to fix
|
||||||
|
* any date & time related errors.
|
||||||
|
*/
|
||||||
|
//date_default_timezone_set('UTC');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* `Config.timezone` is available in which you can set users' timezone string.
|
||||||
|
* If a method of CakeTime class is called with $timezone parameter as null and `Config.timezone` is set,
|
||||||
|
* then the value of `Config.timezone` will be used. This feature allows you to set users' timezone just
|
||||||
|
* once instead of passing it each time in function calls.
|
||||||
|
*/
|
||||||
|
//Configure::write('Config.timezone', 'Europe/Paris');
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Cache Engine Configuration
|
||||||
|
* Default settings provided below
|
||||||
|
*
|
||||||
|
* File storage engine.
|
||||||
|
*
|
||||||
|
* Cache::config('default', array(
|
||||||
|
* 'engine' => 'File', //[required]
|
||||||
|
* 'duration' => 3600, //[optional]
|
||||||
|
* 'probability' => 100, //[optional]
|
||||||
|
* 'path' => CACHE, //[optional] use system tmp directory - remember to use absolute path
|
||||||
|
* 'prefix' => 'cake_', //[optional] prefix every cache file with this string
|
||||||
|
* 'lock' => false, //[optional] use file locking
|
||||||
|
* 'serialize' => true, //[optional]
|
||||||
|
* 'mask' => 0664, //[optional]
|
||||||
|
* ));
|
||||||
|
*
|
||||||
|
* APC (http://pecl.php.net/package/APC)
|
||||||
|
*
|
||||||
|
* Cache::config('default', array(
|
||||||
|
* 'engine' => 'Apc', //[required]
|
||||||
|
* 'duration' => 3600, //[optional]
|
||||||
|
* 'probability' => 100, //[optional]
|
||||||
|
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
|
||||||
|
* ));
|
||||||
|
*
|
||||||
|
* Xcache (http://xcache.lighttpd.net/)
|
||||||
|
*
|
||||||
|
* Cache::config('default', array(
|
||||||
|
* 'engine' => 'Xcache', //[required]
|
||||||
|
* 'duration' => 3600, //[optional]
|
||||||
|
* 'probability' => 100, //[optional]
|
||||||
|
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
|
||||||
|
* 'user' => 'user', //user from xcache.admin.user settings
|
||||||
|
* 'password' => 'password', //plaintext password (xcache.admin.pass)
|
||||||
|
* ));
|
||||||
|
*
|
||||||
|
* Memcached (http://www.danga.com/memcached/)
|
||||||
|
*
|
||||||
|
* Uses the memcached extension. See http://php.net/memcached
|
||||||
|
*
|
||||||
|
* Cache::config('default', array(
|
||||||
|
* 'engine' => 'Memcached', //[required]
|
||||||
|
* 'duration' => 3600, //[optional]
|
||||||
|
* 'probability' => 100, //[optional]
|
||||||
|
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
|
||||||
|
* 'servers' => array(
|
||||||
|
* '127.0.0.1:11211' // localhost, default port 11211
|
||||||
|
* ), //[optional]
|
||||||
|
* 'persistent' => 'my_connection', // [optional] The name of the persistent connection.
|
||||||
|
* 'compress' => false, // [optional] compress data in Memcached (slower, but uses less memory)
|
||||||
|
* ));
|
||||||
|
*
|
||||||
|
* Wincache (http://php.net/wincache)
|
||||||
|
*
|
||||||
|
* Cache::config('default', array(
|
||||||
|
* 'engine' => 'Wincache', //[required]
|
||||||
|
* 'duration' => 3600, //[optional]
|
||||||
|
* 'probability' => 100, //[optional]
|
||||||
|
* 'prefix' => Inflector::slug(APP_DIR) . '_', //[optional] prefix every cache file with this string
|
||||||
|
* ));
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the cache handlers that CakePHP will use for internal
|
||||||
|
* metadata like class maps, and model schema.
|
||||||
|
*
|
||||||
|
* By default File is used, but for improved performance you should use APC.
|
||||||
|
*
|
||||||
|
* Note: 'default' and other application caches should be configured in app/Config/bootstrap.php.
|
||||||
|
* Please check the comments in bootstrap.php for more info on the cache engines available
|
||||||
|
* and their settings.
|
||||||
|
*/
|
||||||
|
$engine = 'File';
|
||||||
|
|
||||||
|
// In development mode, caches should expire quickly.
|
||||||
|
$duration = '+999 days';
|
||||||
|
if (Configure::read('debug') > 0) {
|
||||||
|
$duration = '+10 seconds';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prefix each application on the same server with a different string, to avoid Memcache and APC conflicts.
|
||||||
|
$prefix = 'myapp_';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the cache used for general framework caching. Path information,
|
||||||
|
* object listings, and translation cache files are stored with this configuration.
|
||||||
|
*/
|
||||||
|
Cache::config('_cake_core_', array(
|
||||||
|
'engine' => $engine,
|
||||||
|
'prefix' => $prefix . 'cake_core_',
|
||||||
|
'path' => CACHE . 'persistent' . DS,
|
||||||
|
'serialize' => ($engine === 'File'),
|
||||||
|
'duration' => $duration
|
||||||
|
));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the cache for model and datasource caches. This cache configuration
|
||||||
|
* is used to store schema descriptions, and table listings in connections.
|
||||||
|
*/
|
||||||
|
Cache::config('_cake_model_', array(
|
||||||
|
'engine' => $engine,
|
||||||
|
'prefix' => $prefix . 'cake_model_',
|
||||||
|
'path' => CACHE . 'models' . DS,
|
||||||
|
'serialize' => ($engine === 'File'),
|
||||||
|
'duration' => $duration
|
||||||
|
));
|
|
@ -0,0 +1,88 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Database configuration class.
|
||||||
|
*
|
||||||
|
* You can specify multiple configurations for production, development and testing.
|
||||||
|
*
|
||||||
|
* datasource => The name of a supported datasource; valid options are as follows:
|
||||||
|
* Database/Mysql - MySQL 4 & 5,
|
||||||
|
* Database/Sqlite - SQLite (PHP5 only),
|
||||||
|
* Database/Postgres - PostgreSQL 7 and higher,
|
||||||
|
* Database/Sqlserver - Microsoft SQL Server 2005 and higher
|
||||||
|
*
|
||||||
|
* You can add custom database datasources (or override existing datasources) by adding the
|
||||||
|
* appropriate file to app/Model/Datasource/Database. Datasources should be named 'MyDatasource.php',
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* persistent => true / false
|
||||||
|
* Determines whether or not the database should use a persistent connection
|
||||||
|
*
|
||||||
|
* host =>
|
||||||
|
* the host you connect to the database. To add a socket or port number, use 'port' => #
|
||||||
|
*
|
||||||
|
* prefix =>
|
||||||
|
* Uses the given prefix for all the tables in this database. This setting can be overridden
|
||||||
|
* on a per-table basis with the Model::$tablePrefix property.
|
||||||
|
*
|
||||||
|
* schema =>
|
||||||
|
* For Postgres/Sqlserver specifies which schema you would like to use the tables in.
|
||||||
|
* Postgres defaults to 'public'. For Sqlserver, it defaults to empty and use
|
||||||
|
* the connected user's default schema (typically 'dbo').
|
||||||
|
*
|
||||||
|
* encoding =>
|
||||||
|
* For MySQL, Postgres specifies the character encoding to use when connecting to the
|
||||||
|
* database. Uses database default not specified.
|
||||||
|
*
|
||||||
|
* unix_socket =>
|
||||||
|
* For MySQL to connect via socket specify the `unix_socket` parameter instead of `host` and `port`
|
||||||
|
*
|
||||||
|
* settings =>
|
||||||
|
* Array of key/value pairs, on connection it executes SET statements for each pair
|
||||||
|
* For MySQL : http://dev.mysql.com/doc/refman/5.6/en/set-statement.html
|
||||||
|
* For Postgres : http://www.postgresql.org/docs/9.2/static/sql-set.html
|
||||||
|
* For Sql Server : http://msdn.microsoft.com/en-us/library/ms190356.aspx
|
||||||
|
*
|
||||||
|
* flags =>
|
||||||
|
* A key/value array of driver specific connection options.
|
||||||
|
*/
|
||||||
|
class DATABASE_CONFIG {
|
||||||
|
|
||||||
|
public $default = array(
|
||||||
|
'datasource' => 'Database/Mysql',
|
||||||
|
'persistent' => false,
|
||||||
|
'host' => '@ZM_DB_HOST@',
|
||||||
|
'login' => '@ZM_DB_USER@',
|
||||||
|
'password' => '@ZM_DB_PASS@',
|
||||||
|
'database' => '@ZM_DB_NAME@',
|
||||||
|
'prefix' => '',
|
||||||
|
//'encoding' => 'utf8',
|
||||||
|
);
|
||||||
|
|
||||||
|
public $test = array(
|
||||||
|
'datasource' => 'Database/Mysql',
|
||||||
|
'persistent' => false,
|
||||||
|
'host' => 'localhost',
|
||||||
|
'login' => 'user',
|
||||||
|
'password' => 'password',
|
||||||
|
'database' => 'test_database_name',
|
||||||
|
'prefix' => '',
|
||||||
|
//'encoding' => 'utf8',
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,94 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 2.0.0
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is email configuration file.
|
||||||
|
*
|
||||||
|
* Use it to configure email transports of CakePHP.
|
||||||
|
*
|
||||||
|
* Email configuration class.
|
||||||
|
* You can specify multiple configurations for production, development and testing.
|
||||||
|
*
|
||||||
|
* transport => The name of a supported transport; valid options are as follows:
|
||||||
|
* Mail - Send using PHP mail function
|
||||||
|
* Smtp - Send using SMTP
|
||||||
|
* Debug - Do not send the email, just return the result
|
||||||
|
*
|
||||||
|
* You can add custom transports (or override existing transports) by adding the
|
||||||
|
* appropriate file to app/Network/Email. Transports should be named 'YourTransport.php',
|
||||||
|
* where 'Your' is the name of the transport.
|
||||||
|
*
|
||||||
|
* from =>
|
||||||
|
* The origin email. See CakeEmail::from() about the valid values
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class EmailConfig {
|
||||||
|
|
||||||
|
public $default = array(
|
||||||
|
'transport' => 'Mail',
|
||||||
|
'from' => 'you@localhost',
|
||||||
|
//'charset' => 'utf-8',
|
||||||
|
//'headerCharset' => 'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
public $smtp = array(
|
||||||
|
'transport' => 'Smtp',
|
||||||
|
'from' => array('site@localhost' => 'My Site'),
|
||||||
|
'host' => 'localhost',
|
||||||
|
'port' => 25,
|
||||||
|
'timeout' => 30,
|
||||||
|
'username' => 'user',
|
||||||
|
'password' => 'secret',
|
||||||
|
'client' => null,
|
||||||
|
'log' => false,
|
||||||
|
//'charset' => 'utf-8',
|
||||||
|
//'headerCharset' => 'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
public $fast = array(
|
||||||
|
'from' => 'you@localhost',
|
||||||
|
'sender' => null,
|
||||||
|
'to' => null,
|
||||||
|
'cc' => null,
|
||||||
|
'bcc' => null,
|
||||||
|
'replyTo' => null,
|
||||||
|
'readReceipt' => null,
|
||||||
|
'returnPath' => null,
|
||||||
|
'messageId' => true,
|
||||||
|
'subject' => null,
|
||||||
|
'message' => null,
|
||||||
|
'headers' => null,
|
||||||
|
'viewRender' => null,
|
||||||
|
'template' => false,
|
||||||
|
'layout' => false,
|
||||||
|
'viewVars' => null,
|
||||||
|
'attachments' => null,
|
||||||
|
'emailFormat' => null,
|
||||||
|
'transport' => 'Smtp',
|
||||||
|
'host' => 'localhost',
|
||||||
|
'port' => 25,
|
||||||
|
'timeout' => 30,
|
||||||
|
'username' => 'user',
|
||||||
|
'password' => 'secret',
|
||||||
|
'client' => null,
|
||||||
|
'log' => true,
|
||||||
|
//'charset' => 'utf-8',
|
||||||
|
//'headerCharset' => 'utf-8',
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Routes configuration
|
||||||
|
*
|
||||||
|
* In this file, you set up routes to your controllers and their actions.
|
||||||
|
* Routes are very important mechanism that allows you to freely connect
|
||||||
|
* different URLs to chosen controllers and their actions (functions).
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Config
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the API / REST routes
|
||||||
|
*/
|
||||||
|
Router::mapResources('monitors');
|
||||||
|
Router::mapResources('zones');
|
||||||
|
Router::mapResources('configs');
|
||||||
|
Router::mapResources('events');
|
||||||
|
Router::mapResources('frames');
|
||||||
|
Router::parseExtensions();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Here, we are connecting '/' (base path) to controller called 'Pages',
|
||||||
|
* its action called 'display', and we pass a param to select the view file
|
||||||
|
* to use (in this case, /app/View/Pages/home.ctp)...
|
||||||
|
*/
|
||||||
|
Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
|
||||||
|
/**
|
||||||
|
* ...and connect the rest of 'Pages' controller's URLs.
|
||||||
|
*/
|
||||||
|
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load all plugin routes. See the CakePlugin documentation on
|
||||||
|
* how to customize the loading of plugin routes.
|
||||||
|
*/
|
||||||
|
CakePlugin::routes();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Load the CakePHP default routes. Only remove this if you do not want to use
|
||||||
|
* the built-in default routes.
|
||||||
|
*/
|
||||||
|
require CAKE . 'Config' . DS . 'routes.php';
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* AppShell file
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @since CakePHP(tm) v 2.0
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
App::uses('Shell', 'Console');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application Shell
|
||||||
|
*
|
||||||
|
* Add your application-wide methods in the class below, your shells
|
||||||
|
* will inherit them.
|
||||||
|
*
|
||||||
|
* @package app.Console.Command
|
||||||
|
*/
|
||||||
|
class AppShell extends Shell {
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
################################################################################
|
||||||
|
#
|
||||||
|
# Bake is a shell script for running CakePHP bake script
|
||||||
|
#
|
||||||
|
# CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
# Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
#
|
||||||
|
# Licensed under The MIT License
|
||||||
|
# For full copyright and license information, please see the LICENSE.txt
|
||||||
|
# Redistributions of files must retain the above copyright notice.
|
||||||
|
#
|
||||||
|
# @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
# @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
# @package app.Console
|
||||||
|
# @since CakePHP(tm) v 1.2.0.5012
|
||||||
|
# @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
#
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
# Canonicalize by following every symlink of the given name recursively
|
||||||
|
canonicalize() {
|
||||||
|
NAME="$1"
|
||||||
|
if [ -f "$NAME" ]
|
||||||
|
then
|
||||||
|
DIR=$(dirname -- "$NAME")
|
||||||
|
NAME=$(cd -P "$DIR" && pwd -P)/$(basename -- "$NAME")
|
||||||
|
fi
|
||||||
|
while [ -h "$NAME" ]; do
|
||||||
|
DIR=$(dirname -- "$NAME")
|
||||||
|
SYM=$(readlink "$NAME")
|
||||||
|
NAME=$(cd "$DIR" && cd $(dirname -- "$SYM") && pwd)/$(basename -- "$SYM")
|
||||||
|
done
|
||||||
|
echo "$NAME"
|
||||||
|
}
|
||||||
|
|
||||||
|
CONSOLE=$(dirname -- "$(canonicalize "$0")")
|
||||||
|
APP=$(dirname "$CONSOLE")
|
||||||
|
|
||||||
|
exec php -q "$CONSOLE"/cake.php -working "$APP" "$@"
|
||||||
|
exit
|
|
@ -0,0 +1,31 @@
|
||||||
|
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
::
|
||||||
|
:: Bake is a shell script for running CakePHP bake script
|
||||||
|
::
|
||||||
|
:: CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
:: Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
::
|
||||||
|
:: Licensed under The MIT License
|
||||||
|
:: Redistributions of files must retain the above copyright notice.
|
||||||
|
::
|
||||||
|
:: @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
:: @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
:: @package app.Console
|
||||||
|
:: @since CakePHP(tm) v 2.0
|
||||||
|
:: @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
::
|
||||||
|
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|
||||||
|
:: In order for this script to work as intended, the cake\console\ folder must be in your PATH
|
||||||
|
|
||||||
|
@echo.
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
SET app=%0
|
||||||
|
SET lib=%~dp0
|
||||||
|
|
||||||
|
php -q "%lib%cake.php" -working "%CD% " %*
|
||||||
|
|
||||||
|
echo.
|
||||||
|
|
||||||
|
exit /B %ERRORLEVEL%
|
|
@ -0,0 +1,36 @@
|
||||||
|
#!/usr/bin/php -q
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Command-line code generation utility to automate programmer chores.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Console
|
||||||
|
* @since CakePHP(tm) v 2.0
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
$ds = DIRECTORY_SEPARATOR;
|
||||||
|
$dispatcher = 'Cake' . $ds . 'Console' . $ds . 'ShellDispatcher.php';
|
||||||
|
|
||||||
|
if (function_exists('ini_set')) {
|
||||||
|
$root = dirname(dirname(dirname(__FILE__)));
|
||||||
|
|
||||||
|
// the following line differs from its sibling
|
||||||
|
// /lib/Cake/Console/Templates/skel/Console/cake.php
|
||||||
|
ini_set('include_path', $root . $ds . 'lib' . PATH_SEPARATOR . ini_get('include_path'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!include $dispatcher) {
|
||||||
|
trigger_error('Could not locate CakePHP core files.', E_USER_ERROR);
|
||||||
|
}
|
||||||
|
unset($paths, $path, $dispatcher, $root, $ds);
|
||||||
|
|
||||||
|
return ShellDispatcher::run($argv);
|
|
@ -0,0 +1,34 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Application level Controller
|
||||||
|
*
|
||||||
|
* This file is application-wide controller file. You can put all
|
||||||
|
* application-wide controller-related methods here.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Controller
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
App::uses('Controller', 'Controller');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application Controller
|
||||||
|
*
|
||||||
|
* Add your application-wide methods in the class below, your controllers
|
||||||
|
* will inherit them.
|
||||||
|
*
|
||||||
|
* @package app.Controller
|
||||||
|
* @link http://book.cakephp.org/2.0/en/controllers.html#the-app-controller
|
||||||
|
*/
|
||||||
|
class AppController extends Controller {
|
||||||
|
}
|
|
@ -0,0 +1,91 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
/**
|
||||||
|
* Configs Controller
|
||||||
|
*
|
||||||
|
* @property Config $Config
|
||||||
|
*/
|
||||||
|
class ConfigsController extends AppController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Components
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $components = array('RequestHandler');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index() {
|
||||||
|
$this->Config->recursive = 0;
|
||||||
|
$configs = $this->Config->find('all');
|
||||||
|
$this->set(array(
|
||||||
|
'configs' => $configs,
|
||||||
|
'_serialize' => array('configs')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* view method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view($id = null) {
|
||||||
|
if (!$this->Config->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid config'));
|
||||||
|
}
|
||||||
|
$options = array('conditions' => array('Config.' . $this->Config->primaryKey => $id));
|
||||||
|
$config = $this->Config->find('first', $options);
|
||||||
|
$this->set(array(
|
||||||
|
'config' => $config,
|
||||||
|
'_serialize' => array('config')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit($id = null) {
|
||||||
|
$this->Config->id = $id;
|
||||||
|
|
||||||
|
if (!$this->Config->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid config'));
|
||||||
|
}
|
||||||
|
if ($this->request->is(array('post', 'put'))) {
|
||||||
|
if ($this->Config->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The config has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$options = array('conditions' => array('Config.' . $this->Config->primaryKey => $id));
|
||||||
|
$this->request->data = $this->Config->find('first', $options);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function delete($id = null) {
|
||||||
|
$this->Config->id = $id;
|
||||||
|
if (!$this->Config->exists()) {
|
||||||
|
throw new NotFoundException(__('Invalid config'));
|
||||||
|
}
|
||||||
|
$this->request->allowMethod('post', 'delete');
|
||||||
|
if ($this->Config->delete()) {
|
||||||
|
return $this->flash(__('The config has been deleted.'), array('action' => 'index'));
|
||||||
|
} else {
|
||||||
|
return $this->flash(__('The config could not be deleted. Please, try again.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}}
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
/**
|
||||||
|
* Events Controller
|
||||||
|
*
|
||||||
|
* @property Event $Event
|
||||||
|
*/
|
||||||
|
class EventsController extends AppController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Components
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $components = array('RequestHandler');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index() {
|
||||||
|
$this->Event->recursive = -1;
|
||||||
|
$events = $this->Event->find('all');
|
||||||
|
$this->set(array(
|
||||||
|
'events' => $events,
|
||||||
|
'_serialize' => array('events')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* view method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view($id = null) {
|
||||||
|
$this->Event->recursive = -1;
|
||||||
|
if (!$this->Event->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid event'));
|
||||||
|
}
|
||||||
|
$options = array('conditions' => array('Event.' . $this->Event->primaryKey => $id));
|
||||||
|
$event = $this->Event->find('first', $options);
|
||||||
|
$this->set(array(
|
||||||
|
'event' => $event,
|
||||||
|
'_serialize' => array('event')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add() {
|
||||||
|
if ($this->request->is('post')) {
|
||||||
|
$this->Event->create();
|
||||||
|
if ($this->Event->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The event has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$monitors = $this->Event->Monitor->find('list');
|
||||||
|
$this->set(compact('monitors'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit($id = null) {
|
||||||
|
$this->Event->id = $id;
|
||||||
|
|
||||||
|
if (!$this->Event->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid event'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->Event->save($this->request->data)) {
|
||||||
|
$message = 'Saved';
|
||||||
|
} else {
|
||||||
|
$message = 'Error';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->set(array(
|
||||||
|
'message' => $message,
|
||||||
|
'_serialize' => array('message')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function delete($id = null) {
|
||||||
|
$this->Event->id = $id;
|
||||||
|
if (!$this->Event->exists()) {
|
||||||
|
throw new NotFoundException(__('Invalid event'));
|
||||||
|
}
|
||||||
|
$this->request->allowMethod('post', 'delete');
|
||||||
|
if ($this->Event->delete()) {
|
||||||
|
return $this->flash(__('The event has been deleted.'), array('action' => 'index'));
|
||||||
|
} else {
|
||||||
|
return $this->flash(__('The event could not be deleted. Please, try again.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}}
|
|
@ -0,0 +1,108 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
/**
|
||||||
|
* Frames Controller
|
||||||
|
*
|
||||||
|
* @property Frame $Frame
|
||||||
|
*/
|
||||||
|
class FramesController extends AppController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Components
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $components = array('RequestHandler');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index() {
|
||||||
|
$this->Frame->recursive = -1;
|
||||||
|
$frames = $this->Frame->find('all');
|
||||||
|
$this->set(array(
|
||||||
|
'frames' => $frames,
|
||||||
|
'_serialize' => array('frames')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* view method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view($id = null) {
|
||||||
|
$this->Frame->recursive = -1;
|
||||||
|
if (!$this->Frame->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid frame'));
|
||||||
|
}
|
||||||
|
$options = array('conditions' => array('Frame.' . $this->Frame->primaryKey => $id));
|
||||||
|
$frame = $this->Frame->find('first', $options);
|
||||||
|
$this->set(array(
|
||||||
|
'frame' => $frame,
|
||||||
|
'_serialize' => array('frame')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add() {
|
||||||
|
if ($this->request->is('post')) {
|
||||||
|
$this->Frame->create();
|
||||||
|
if ($this->Frame->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The frame has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$events = $this->Frame->Event->find('list');
|
||||||
|
$this->set(compact('events'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit($id = null) {
|
||||||
|
if (!$this->Frame->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid frame'));
|
||||||
|
}
|
||||||
|
if ($this->request->is(array('post', 'put'))) {
|
||||||
|
if ($this->Frame->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The frame has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$options = array('conditions' => array('Frame.' . $this->Frame->primaryKey => $id));
|
||||||
|
$this->request->data = $this->Frame->find('first', $options);
|
||||||
|
}
|
||||||
|
$events = $this->Frame->Event->find('list');
|
||||||
|
$this->set(compact('events'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function delete($id = null) {
|
||||||
|
$this->Frame->id = $id;
|
||||||
|
if (!$this->Frame->exists()) {
|
||||||
|
throw new NotFoundException(__('Invalid frame'));
|
||||||
|
}
|
||||||
|
$this->request->allowMethod('post', 'delete');
|
||||||
|
if ($this->Frame->delete()) {
|
||||||
|
return $this->flash(__('The frame has been deleted.'), array('action' => 'index'));
|
||||||
|
} else {
|
||||||
|
return $this->flash(__('The frame could not be deleted. Please, try again.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}}
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
/**
|
||||||
|
* Monitors Controller
|
||||||
|
*
|
||||||
|
* @property Monitor $Monitor
|
||||||
|
* @property PaginatorComponent $Paginator
|
||||||
|
*/
|
||||||
|
class MonitorsController extends AppController {
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Components
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $components = array('Paginator', 'RequestHandler');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index() {
|
||||||
|
$this->Monitor->recursive = 0;
|
||||||
|
$monitors = $this->Monitor->find('all');
|
||||||
|
$this->set(array(
|
||||||
|
'monitors' => $monitors,
|
||||||
|
'_serialize' => array('monitors')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* view method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view($id = null) {
|
||||||
|
$this->Monitor->recursive = 0;
|
||||||
|
if (!$this->Monitor->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid monitor'));
|
||||||
|
}
|
||||||
|
$options = array('conditions' => array('Monitor.' . $this->Monitor->primaryKey => $id));
|
||||||
|
$monitor = $this->Monitor->find('first', $options);
|
||||||
|
$this->set(array(
|
||||||
|
'monitor' => $monitor,
|
||||||
|
'_serialize' => array('monitor')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add() {
|
||||||
|
if ($this->request->is('post')) {
|
||||||
|
$this->Monitor->create();
|
||||||
|
if ($this->Monitor->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The monitor has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit($id = null) {
|
||||||
|
$this->Monitor->id = $id;
|
||||||
|
|
||||||
|
if (!$this->Monitor->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid monitor'));
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($this->Monitor->save($this->request->data)) {
|
||||||
|
$message = 'Saved';
|
||||||
|
} else {
|
||||||
|
$message = 'Error';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->set(array(
|
||||||
|
'message' => $message,
|
||||||
|
'_serialize' => array('message')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function delete($id = null) {
|
||||||
|
$this->Monitor->id = $id;
|
||||||
|
if (!$this->Monitor->exists()) {
|
||||||
|
throw new NotFoundException(__('Invalid monitor'));
|
||||||
|
}
|
||||||
|
$this->request->allowMethod('post', 'delete');
|
||||||
|
if ($this->Monitor->delete()) {
|
||||||
|
return $this->flash(__('The monitor has been deleted.'), array('action' => 'index'));
|
||||||
|
} else {
|
||||||
|
return $this->flash(__('The monitor could not be deleted. Please, try again.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}}
|
|
@ -0,0 +1,77 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Static content controller.
|
||||||
|
*
|
||||||
|
* This file will render views from views/pages/
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Controller
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static content controller
|
||||||
|
*
|
||||||
|
* Override this controller by placing a copy in controllers directory of an application
|
||||||
|
*
|
||||||
|
* @package app.Controller
|
||||||
|
* @link http://book.cakephp.org/2.0/en/controllers/pages-controller.html
|
||||||
|
*/
|
||||||
|
class PagesController extends AppController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This controller does not use a model
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $uses = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays a view
|
||||||
|
*
|
||||||
|
* @param mixed What page to display
|
||||||
|
* @return void
|
||||||
|
* @throws NotFoundException When the view file could not be found
|
||||||
|
* or MissingViewException in debug mode.
|
||||||
|
*/
|
||||||
|
public function display() {
|
||||||
|
$path = func_get_args();
|
||||||
|
|
||||||
|
$count = count($path);
|
||||||
|
if (!$count) {
|
||||||
|
return $this->redirect('/');
|
||||||
|
}
|
||||||
|
$page = $subpage = $title_for_layout = null;
|
||||||
|
|
||||||
|
if (!empty($path[0])) {
|
||||||
|
$page = $path[0];
|
||||||
|
}
|
||||||
|
if (!empty($path[1])) {
|
||||||
|
$subpage = $path[1];
|
||||||
|
}
|
||||||
|
if (!empty($path[$count - 1])) {
|
||||||
|
$title_for_layout = Inflector::humanize($path[$count - 1]);
|
||||||
|
}
|
||||||
|
$this->set(compact('page', 'subpage', 'title_for_layout'));
|
||||||
|
|
||||||
|
try {
|
||||||
|
$this->render(implode('/', $path));
|
||||||
|
} catch (MissingViewException $e) {
|
||||||
|
if (Configure::read('debug')) {
|
||||||
|
throw $e;
|
||||||
|
}
|
||||||
|
throw new NotFoundException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,111 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppController', 'Controller');
|
||||||
|
/**
|
||||||
|
* Zones Controller
|
||||||
|
*
|
||||||
|
* @property Zone $Zone
|
||||||
|
* @property PaginatorComponent $Paginator
|
||||||
|
*/
|
||||||
|
class ZonesController extends AppController {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Components
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $components = array('Paginator', 'RequestHandler');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* index method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function index() {
|
||||||
|
$this->Zone->recursive = -1;
|
||||||
|
$zones = $this->Zone->find('all');
|
||||||
|
$this->set(array(
|
||||||
|
'zones' => $zones,
|
||||||
|
'_serialize' => array('zones')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* view method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function view($id = null) {
|
||||||
|
$this->Zone->recursive = -1;
|
||||||
|
if (!$this->Zone->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid zone'));
|
||||||
|
}
|
||||||
|
$options = array('conditions' => array('Zone.' . $this->Zone->primaryKey => $id));
|
||||||
|
$zone = $this->Zone->find('first', $options);
|
||||||
|
$this->set(array(
|
||||||
|
'zone' => $zone,
|
||||||
|
'_serialize' => array('zone')
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add method
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function add() {
|
||||||
|
if ($this->request->is('post')) {
|
||||||
|
$this->Zone->create();
|
||||||
|
if ($this->Zone->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The zone has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$monitors = $this->Zone->Monitor->find('list');
|
||||||
|
$this->set(compact('monitors'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* edit method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function edit($id = null) {
|
||||||
|
$this->Zone->id = $id;
|
||||||
|
|
||||||
|
if (!$this->Zone->exists($id)) {
|
||||||
|
throw new NotFoundException(__('Invalid zone'));
|
||||||
|
}
|
||||||
|
if ($this->request->is(array('post', 'put'))) {
|
||||||
|
if ($this->Zone->save($this->request->data)) {
|
||||||
|
return $this->flash(__('The zone has been saved.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$options = array('conditions' => array('Zone.' . $this->Zone->primaryKey => $id));
|
||||||
|
$this->request->data = $this->Zone->find('first', $options);
|
||||||
|
}
|
||||||
|
$monitors = $this->Zone->Monitor->find('list');
|
||||||
|
$this->set(compact('monitors'));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* delete method
|
||||||
|
*
|
||||||
|
* @throws NotFoundException
|
||||||
|
* @param string $id
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function delete($id = null) {
|
||||||
|
$this->Zone->id = $id;
|
||||||
|
if (!$this->Zone->exists()) {
|
||||||
|
throw new NotFoundException(__('Invalid zone'));
|
||||||
|
}
|
||||||
|
$this->request->allowMethod('post', 'delete');
|
||||||
|
if ($this->Zone->delete()) {
|
||||||
|
return $this->flash(__('The zone has been deleted.'), array('action' => 'index'));
|
||||||
|
} else {
|
||||||
|
return $this->flash(__('The zone could not be deleted. Please, try again.'), array('action' => 'index'));
|
||||||
|
}
|
||||||
|
}}
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Application model for CakePHP.
|
||||||
|
*
|
||||||
|
* This file is application-wide model file. You can put all
|
||||||
|
* application-wide model-related methods here.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.Model
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
App::uses('Model', 'Model');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application model for Cake.
|
||||||
|
*
|
||||||
|
* Add your application-wide methods in the class below, your models
|
||||||
|
* will inherit them.
|
||||||
|
*
|
||||||
|
* @package app.Model
|
||||||
|
*/
|
||||||
|
class AppModel extends Model {
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppModel', 'Model');
|
||||||
|
/**
|
||||||
|
* Config Model
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class Config extends AppModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use table
|
||||||
|
*
|
||||||
|
* @var mixed False or table name
|
||||||
|
*/
|
||||||
|
public $useTable = 'Config';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary key field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $primaryKey = 'Id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $displayField = 'Name';
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,71 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppModel', 'Model');
|
||||||
|
/**
|
||||||
|
* Event Model
|
||||||
|
*
|
||||||
|
* @property Monitor $Monitor
|
||||||
|
* @property Frame $Frame
|
||||||
|
*/
|
||||||
|
class Event extends AppModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use table
|
||||||
|
*
|
||||||
|
* @var mixed False or table name
|
||||||
|
*/
|
||||||
|
public $useTable = 'Events';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary key field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $primaryKey = 'Id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $displayField = 'Name';
|
||||||
|
|
||||||
|
|
||||||
|
//The Associations below have been created with all possible keys, those that are not needed can be removed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* belongsTo associations
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $belongsTo = array(
|
||||||
|
'Monitor' => array(
|
||||||
|
'className' => 'Monitor',
|
||||||
|
'foreignKey' => 'MonitorId',
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hasMany associations
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $hasMany = array(
|
||||||
|
'Frame' => array(
|
||||||
|
'className' => 'Frame',
|
||||||
|
'foreignKey' => 'EventId',
|
||||||
|
'dependent' => true,
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => '',
|
||||||
|
'limit' => '',
|
||||||
|
'offset' => '',
|
||||||
|
'exclusive' => '',
|
||||||
|
'finderQuery' => '',
|
||||||
|
'counterQuery' => ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppModel', 'Model');
|
||||||
|
/**
|
||||||
|
* Frame Model
|
||||||
|
*
|
||||||
|
* @property Event $Event
|
||||||
|
*/
|
||||||
|
class Frame extends AppModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use table
|
||||||
|
*
|
||||||
|
* @var mixed False or table name
|
||||||
|
*/
|
||||||
|
public $useTable = 'Frames';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary key field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $primaryKey = 'FrameId';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validation rules
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $validate = array(
|
||||||
|
'EventId' => array(
|
||||||
|
'numeric' => array(
|
||||||
|
'rule' => array('numeric'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
'notEmpty' => array(
|
||||||
|
'rule' => array('notEmpty'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'FrameId' => array(
|
||||||
|
'numeric' => array(
|
||||||
|
'rule' => array('numeric'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
'notEmpty' => array(
|
||||||
|
'rule' => array('notEmpty'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'Type' => array(
|
||||||
|
'multiple' => array(
|
||||||
|
'rule' => array('multiple'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'TimeStamp' => array(
|
||||||
|
'time' => array(
|
||||||
|
'rule' => array('datetime'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'Delta' => array(
|
||||||
|
'numeric' => array(
|
||||||
|
'rule' => array('numeric'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
'Score' => array(
|
||||||
|
'numeric' => array(
|
||||||
|
'rule' => array('numeric'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
//The Associations below have been created with all possible keys, those that are not needed can be removed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* belongsTo associations
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $belongsTo = array(
|
||||||
|
'Event' => array(
|
||||||
|
'className' => 'Event',
|
||||||
|
'foreignKey' => 'EventId',
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppModel', 'Model');
|
||||||
|
/**
|
||||||
|
* Monitor Model
|
||||||
|
*
|
||||||
|
* @property Event $Event
|
||||||
|
* @property Zone $Zone
|
||||||
|
*/
|
||||||
|
class Monitor extends AppModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use table
|
||||||
|
*
|
||||||
|
* @var mixed False or table name
|
||||||
|
*/
|
||||||
|
public $useTable = 'Monitors';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary key field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $primaryKey = 'Id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $displayField = 'Name';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validation rules
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $validate = array(
|
||||||
|
'Id' => array(
|
||||||
|
'numeric' => array(
|
||||||
|
'rule' => array('numeric'),
|
||||||
|
//'message' => 'Your custom message here',
|
||||||
|
//'allowEmpty' => false,
|
||||||
|
//'required' => false,
|
||||||
|
//'last' => false, // Stop validation after this rule
|
||||||
|
//'on' => 'create', // Limit validation to 'create' or 'update' operations
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
//The Associations below have been created with all possible keys, those that are not needed can be removed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* hasMany associations
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $hasMany = array(
|
||||||
|
'Event' => array(
|
||||||
|
'className' => 'Event',
|
||||||
|
'foreignKey' => 'MonitorId',
|
||||||
|
'dependent' => false,
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => '',
|
||||||
|
'limit' => '',
|
||||||
|
'offset' => '',
|
||||||
|
'exclusive' => '',
|
||||||
|
'finderQuery' => '',
|
||||||
|
'counterQuery' => ''
|
||||||
|
),
|
||||||
|
'Zone' => array(
|
||||||
|
'className' => 'Zone',
|
||||||
|
'foreignKey' => 'MonitorId',
|
||||||
|
'dependent' => true,
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => '',
|
||||||
|
'limit' => '',
|
||||||
|
'offset' => '',
|
||||||
|
'exclusive' => '',
|
||||||
|
'finderQuery' => '',
|
||||||
|
'counterQuery' => ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
<?php
|
||||||
|
App::uses('AppModel', 'Model');
|
||||||
|
/**
|
||||||
|
* Zone Model
|
||||||
|
*
|
||||||
|
* @property Monitor $Monitor
|
||||||
|
*/
|
||||||
|
class Zone extends AppModel {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Use table
|
||||||
|
*
|
||||||
|
* @var mixed False or table name
|
||||||
|
*/
|
||||||
|
public $useTable = 'Zones';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Primary key field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $primaryKey = 'Id';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display field
|
||||||
|
*
|
||||||
|
* @var string
|
||||||
|
*/
|
||||||
|
public $displayField = 'Name';
|
||||||
|
|
||||||
|
|
||||||
|
//The Associations below have been created with all possible keys, those that are not needed can be removed
|
||||||
|
|
||||||
|
/**
|
||||||
|
* belongsTo associations
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $belongsTo = array(
|
||||||
|
'Monitor' => array(
|
||||||
|
'className' => 'Monitor',
|
||||||
|
'foreignKey' => 'MonitorId',
|
||||||
|
'conditions' => '',
|
||||||
|
'fields' => '',
|
||||||
|
'order' => ''
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
echo json_encode($configs);
|
|
@ -0,0 +1 @@
|
||||||
|
echo json_encode($config);
|
|
@ -0,0 +1,2 @@
|
||||||
|
$xml = Xml::fromArray(array('response' => $configs));
|
||||||
|
echo $xml->asXML();
|
|
@ -0,0 +1,2 @@
|
||||||
|
$xml = Xml::fromArray(array('response' => $config));
|
||||||
|
echo $xml->asXML();
|
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Emails.html
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<?php
|
||||||
|
$content = explode("\n", $content);
|
||||||
|
|
||||||
|
foreach ($content as $line):
|
||||||
|
echo '<p> ' . $line . "</p>\n";
|
||||||
|
endforeach;
|
||||||
|
?>
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Emails.text
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<?php echo $content; ?>
|
|
@ -0,0 +1,31 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Errors
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<h2><?php echo $message; ?></h2>
|
||||||
|
<p class="error">
|
||||||
|
<strong><?php echo __d('cake', 'Error'); ?>: </strong>
|
||||||
|
<?php printf(
|
||||||
|
__d('cake', 'The requested address %s was not found on this server.'),
|
||||||
|
"<strong>'{$url}'</strong>"
|
||||||
|
); ?>
|
||||||
|
</p>
|
||||||
|
<?php
|
||||||
|
if (Configure::read('debug') > 0):
|
||||||
|
echo $this->element('exception_stack_trace');
|
||||||
|
endif;
|
||||||
|
?>
|
|
@ -0,0 +1,28 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Errors
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<h2><?php echo $message; ?></h2>
|
||||||
|
<p class="error">
|
||||||
|
<strong><?php echo __d('cake', 'Error'); ?>: </strong>
|
||||||
|
<?php echo __d('cake', 'An Internal Error Has Occurred.'); ?>
|
||||||
|
</p>
|
||||||
|
<?php
|
||||||
|
if (Configure::read('debug') > 0):
|
||||||
|
echo $this->element('exception_stack_trace');
|
||||||
|
endif;
|
||||||
|
?>
|
|
@ -0,0 +1 @@
|
||||||
|
echo json_encode($events);
|
|
@ -0,0 +1 @@
|
||||||
|
echo json_encode($event);
|
|
@ -0,0 +1,2 @@
|
||||||
|
$xml = Xml::fromArray(array('response' => $events));
|
||||||
|
echo $xml->asXML();
|
|
@ -0,0 +1,2 @@
|
||||||
|
$xml = Xml::fromArray(array('response' => $event));
|
||||||
|
echo $xml->asXML();
|
|
@ -0,0 +1,33 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Application level View Helper
|
||||||
|
*
|
||||||
|
* This file is application-wide helper file. You can put all
|
||||||
|
* application-wide helper-related methods here.
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Helper
|
||||||
|
* @since CakePHP(tm) v 0.2.9
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
App::uses('Helper', 'View');
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Application helper
|
||||||
|
*
|
||||||
|
* Add your application-wide methods in the class below, your helpers
|
||||||
|
* will inherit them.
|
||||||
|
*
|
||||||
|
* @package app.View.Helper
|
||||||
|
*/
|
||||||
|
class AppHelper extends Helper {
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Layouts.Email.html
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title><?php echo $title_for_layout; ?></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<?php echo $this->fetch('content'); ?>
|
||||||
|
|
||||||
|
<p>This email was sent using the <a href="http://cakephp.org">CakePHP Framework</a></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,21 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Layouts.Email.text
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<?php echo $this->fetch('content'); ?>
|
||||||
|
|
||||||
|
This email was sent using the CakePHP Framework, http://cakephp.org.
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Layouts
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
?>
|
||||||
|
<?php echo $this->fetch('content'); ?>
|
|
@ -0,0 +1,65 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Layouts
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
$cakeDescription = __d('cake_dev', 'CakePHP: the rapid development php framework');
|
||||||
|
$cakeVersion = __d('cake_dev', 'CakePHP %s', Configure::version())
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<?php echo $this->Html->charset(); ?>
|
||||||
|
<title>
|
||||||
|
<?php echo $cakeDescription ?>:
|
||||||
|
<?php echo $title_for_layout; ?>
|
||||||
|
</title>
|
||||||
|
<?php
|
||||||
|
echo $this->Html->meta('icon');
|
||||||
|
|
||||||
|
echo $this->Html->css('cake.generic');
|
||||||
|
|
||||||
|
echo $this->fetch('meta');
|
||||||
|
echo $this->fetch('css');
|
||||||
|
echo $this->fetch('script');
|
||||||
|
?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<div id="header">
|
||||||
|
<h1><?php echo $this->Html->link($cakeDescription, 'http://cakephp.org'); ?></h1>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<?php echo $this->Session->flash(); ?>
|
||||||
|
|
||||||
|
<?php echo $this->fetch('content'); ?>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<?php echo $this->Html->link(
|
||||||
|
$this->Html->image('cake.power.gif', array('alt' => $cakeDescription, 'border' => '0')),
|
||||||
|
'http://www.cakephp.org/',
|
||||||
|
array('target' => '_blank', 'escape' => false, 'id' => 'cake-powered')
|
||||||
|
);
|
||||||
|
?>
|
||||||
|
<p>
|
||||||
|
<?php echo $cakeVersion; ?>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo $this->element('sql_dump'); ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,61 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
|
||||||
|
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
*
|
||||||
|
* Licensed under The MIT License
|
||||||
|
* For full copyright and license information, please see the LICENSE.txt
|
||||||
|
* Redistributions of files must retain the above copyright notice.
|
||||||
|
*
|
||||||
|
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||||||
|
* @link http://cakephp.org CakePHP(tm) Project
|
||||||
|
* @package app.View.Layouts
|
||||||
|
* @since CakePHP(tm) v 0.10.0.1076
|
||||||
|
* @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||||||
|
*/
|
||||||
|
|
||||||
|
$cakeDescription = __d('cake_dev', 'CakePHP: the rapid development php framework');
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<?php echo $this->Html->charset(); ?>
|
||||||
|
<title>
|
||||||
|
<?php echo $cakeDescription ?>:
|
||||||
|
<?php echo $title_for_layout; ?>
|
||||||
|
</title>
|
||||||
|
<?php
|
||||||
|
echo $this->Html->meta('icon');
|
||||||
|
|
||||||
|
echo $this->Html->css('cake.generic');
|
||||||
|
|
||||||
|
echo $this->fetch('meta');
|
||||||
|
echo $this->fetch('css');
|
||||||
|
echo $this->fetch('script');
|
||||||
|
?>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="container">
|
||||||
|
<div id="header">
|
||||||
|
<h1><?php echo $this->Html->link($cakeDescription, 'http://cakephp.org'); ?></h1>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
|
||||||
|
<?php echo $this->Session->flash(); ?>
|
||||||
|
|
||||||
|
<?php echo $this->fetch('content'); ?>
|
||||||
|
</div>
|
||||||
|
<div id="footer">
|
||||||
|
<?php echo $this->Html->link(
|
||||||
|
$this->Html->image('cake.power.gif', array('alt' => $cakeDescription, 'border' => '0')),
|
||||||
|
'http://www.cakephp.org/',
|
||||||
|
array('target' => '_blank', 'escape' => false)
|
||||||
|
);
|
||||||
|
?>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<?php echo $this->element('sql_dump'); ?>
|
||||||
|
</body>
|
||||||
|
</html>
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue