diff --git a/Dockerfile b/Dockerfile index 964570928..08bfd406e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -58,6 +58,7 @@ RUN apt-get update \ php-mysql \ vlc-data \ yasm \ + zip \ && rm -rf /var/lib/apt/lists/* # Copy local code into our container diff --git a/distros/redhat/zoneminder.spec b/distros/redhat/zoneminder.spec index d56c0cc21..fc6a0c7ab 100644 --- a/distros/redhat/zoneminder.spec +++ b/distros/redhat/zoneminder.spec @@ -166,7 +166,7 @@ too much degradation of performance. find %{buildroot} \( -name .htaccess -or -name .editorconfig -or -name .packlist -or -name .git -or -name .gitignore -or -name .gitattributes -or -name .travis.yml \) -type f -delete > /dev/null 2>&1 || : # Recursively change shebang in all relevant scripts and set execute permission -find %{buildroot}%{_datadir}/zoneminder/www/api \( -name cake -or -name cake.php \) -type f -exec sed -i 's\^#!/usr/bin/env bash$\#!/usr/bin/bash\' {} \; -exec %{__chmod} 755 {} \; +find %{buildroot}%{_datadir}/zoneminder/www/api \( -name cake -or -name cake.php \) -type f -exec sed -i 's\^#!/usr/bin/env bash$\#!%{_buildshell}\' {} \; -exec %{__chmod} 755 {} \; # Use the system cacert file rather then the one bundled with CakePHP %{__rm} -f %{buildroot}%{_datadir}/zoneminder/www/api/lib/Cake/Config/cacert.pem diff --git a/distros/ubuntu1604/zoneminder.preinst b/distros/ubuntu1604/zoneminder.preinst index 9459b48d0..6088c3ea9 100644 --- a/distros/ubuntu1604/zoneminder.preinst +++ b/distros/ubuntu1604/zoneminder.preinst @@ -8,29 +8,4 @@ if [ -h "${ol}" ]; then [ "$(readlink ${ol})" = "/etc/zm/apache.conf" ] && rm -f "${ol}" fi -abort=false -if [ -h /usr/share/zoneminder/www/events ]; then - l=$(readlink /usr/share/zoneminder/www/events) - if [ "$l" != "/var/cache/zoneminder/events" -a "$l" != "/var/cache/zoneminder/events/" ]; then - abort=true - fi -fi -if [ -h /usr/share/zoneminder/www/images ]; then - l=$(readlink /usr/share/zoneminder/www/images ) - if [ "$l" != "/var/cache/zoneminder/images" -a "$l" != "/var/cache/zoneminder/images/" ]; then - abort=true - fi -fi - -if [ "$abort" = "true" ]; then - cat >&2 << EOF -Aborting installation of zoneminder due to non-default symlinks in -/usr/share/zoneminder for the images and/or events directory, which could -result in loss of data. Please move your data in each of these directories to -/var/cache/zoneminder before installing zoneminder from the package. -EOF - exit 1 - -fi - #DEBHELPER# diff --git a/src/zmc.cpp b/src/zmc.cpp index 5915d4ef5..487ddbe29 100644 --- a/src/zmc.cpp +++ b/src/zmc.cpp @@ -72,25 +72,25 @@ possible, this should run at more or less constant speed. #include "zm_monitor.h" void Usage() { - fprintf( stderr, "zmc -d or -r -H -P -p or -f or -m \n" ); + fprintf(stderr, "zmc -d or -r -H -P -p or -f or -m \n"); - fprintf( stderr, "Options:\n" ); + fprintf(stderr, "Options:\n"); #if defined(BSD) - fprintf( stderr, " -d, --device : For local cameras, device to access. E.g /dev/bktr0 etc\n" ); + fprintf(stderr, " -d, --device : For local cameras, device to access. E.g /dev/bktr0 etc\n"); #else - fprintf( stderr, " -d, --device : For local cameras, device to access. E.g /dev/video0 etc\n" ); + fprintf(stderr, " -d, --device : For local cameras, device to access. E.g /dev/video0 etc\n"); #endif - fprintf( stderr, " -f, --file : For local images, jpg file to access.\n" ); - fprintf( stderr, " -m, --monitor : For sources associated with a single monitor\n" ); - fprintf( stderr, " -h, --help : This screen\n" ); - fprintf( stderr, " -v, --version : Report the installed version of ZoneMinder\n" ); - exit( 0 ); + fprintf(stderr, " -f, --file : For local images, jpg file to access.\n"); + fprintf(stderr, " -m, --monitor : For sources associated with a single monitor\n"); + fprintf(stderr, " -h, --help : This screen\n"); + fprintf(stderr, " -v, --version : Report the installed version of ZoneMinder\n"); + exit(0); } -int main( int argc, char *argv[] ) { +int main(int argc, char *argv[]) { self = argv[0]; - srand( getpid() * time( 0 ) ); + srand(getpid() * time(0)); const char *device = ""; const char *protocol = ""; @@ -116,13 +116,12 @@ int main( int argc, char *argv[] ) { while (1) { int option_index = 0; - int c = getopt_long (argc, argv, "d:H:P:p:f:m:h:v", long_options, &option_index); - if (c == -1) { + int c = getopt_long(argc, argv, "d:H:P:p:f:m:h:v", long_options, &option_index); + if ( c == -1 ) { break; } - switch (c) - { + switch (c) { case 'd': device = optarg; break; @@ -154,61 +153,61 @@ int main( int argc, char *argv[] ) { } } - if (optind < argc) { - fprintf( stderr, "Extraneous options, " ); - while (optind < argc) - printf ("%s ", argv[optind++]); - printf ("\n"); + if ( optind < argc ) { + fprintf(stderr, "Extraneous options, "); + while ( optind < argc ) + printf("%s ", argv[optind++]); + printf("\n"); Usage(); } - int modes = ( device[0]?1:0 + host[0]?1:0 + file[0]?1:0 + (monitor_id>0?1:0) ); + int modes = (device[0]?1:0 + host[0]?1:0 + file[0]?1:0 + (monitor_id > 0 ? 1 : 0)); if ( modes > 1 ) { - fprintf( stderr, "Only one of device, host/port/path, file or monitor id allowed\n" ); + fprintf(stderr, "Only one of device, host/port/path, file or monitor id allowed\n"); Usage(); - exit( 0 ); + exit(0); } if ( modes < 1 ) { - fprintf( stderr, "One of device, host/port/path, file or monitor id must be specified\n" ); + fprintf(stderr, "One of device, host/port/path, file or monitor id must be specified\n"); Usage(); - exit( 0 ); + exit(0); } char log_id_string[32] = ""; if ( device[0] ) { - const char *slash_ptr = strrchr( device, '/' ); - snprintf( log_id_string, sizeof(log_id_string), "zmc_d%s", slash_ptr?slash_ptr+1:device ); + const char *slash_ptr = strrchr(device, '/'); + snprintf(log_id_string, sizeof(log_id_string), "zmc_d%s", slash_ptr?slash_ptr+1:device); } else if ( host[0] ) { - snprintf( log_id_string, sizeof(log_id_string), "zmc_h%s", host ); + snprintf(log_id_string, sizeof(log_id_string), "zmc_h%s", host); } else if ( file[0] ) { - const char *slash_ptr = strrchr( file, '/' ); - snprintf( log_id_string, sizeof(log_id_string), "zmc_f%s", slash_ptr?slash_ptr+1:file ); + const char *slash_ptr = strrchr(file, '/'); + snprintf(log_id_string, sizeof(log_id_string), "zmc_f%s", slash_ptr?slash_ptr+1:file); } else { - snprintf( log_id_string, sizeof(log_id_string), "zmc_m%d", monitor_id ); + snprintf(log_id_string, sizeof(log_id_string), "zmc_m%d", monitor_id); } zmLoadConfig(); - logInit( log_id_string ); - + logInit(log_id_string); + hwcaps_detect(); Monitor **monitors = 0; int n_monitors = 0; #if ZM_HAS_V4L if ( device[0] ) { - n_monitors = Monitor::LoadLocalMonitors( device, monitors, Monitor::CAPTURE ); + n_monitors = Monitor::LoadLocalMonitors(device, monitors, Monitor::CAPTURE); } else #endif // ZM_HAS_V4L if ( host[0] ) { if ( !port ) port = "80"; - n_monitors = Monitor::LoadRemoteMonitors( protocol, host, port, path, monitors, Monitor::CAPTURE ); + n_monitors = Monitor::LoadRemoteMonitors(protocol, host, port, path, monitors, Monitor::CAPTURE); } else if ( file[0] ) { - n_monitors = Monitor::LoadFileMonitors( file, monitors, Monitor::CAPTURE ); + n_monitors = Monitor::LoadFileMonitors(file, monitors, Monitor::CAPTURE); } else { - Monitor *monitor = Monitor::Load( monitor_id, true, Monitor::CAPTURE ); + Monitor *monitor = Monitor::Load(monitor_id, true, Monitor::CAPTURE); if ( monitor ) { monitors = new Monitor *[1]; monitors[0] = monitor; @@ -217,25 +216,25 @@ int main( int argc, char *argv[] ) { } if ( !n_monitors ) { - Error( "No monitors found" ); - exit ( -1 ); + Error("No monitors found"); + exit(-1); } - Info( "Starting Capture version %s", ZM_VERSION ); + Info("Starting Capture version %s", ZM_VERSION); zmSetDefaultTermHandler(); zmSetDefaultDieHandler(); sigset_t block_set; - sigemptyset( &block_set ); + sigemptyset(&block_set); - sigaddset( &block_set, SIGUSR1 ); - sigaddset( &block_set, SIGUSR2 ); + sigaddset(&block_set, SIGUSR1); + sigaddset(&block_set, SIGUSR2); - monitors[0]->setStartupTime( (time_t)time(NULL) ); + monitors[0]->setStartupTime((time_t)time(NULL)); if ( monitors[0]->PrimeCapture() < 0 ) { - Error( "Failed to prime capture of initial monitor" ); - exit( -1 ); + Error("Failed to prime capture of initial monitor"); + exit(-1); } long *capture_delays = new long[n_monitors]; @@ -251,15 +250,15 @@ int main( int argc, char *argv[] ) { int result = 0; struct timeval now; struct DeltaTimeval delta_time; - while( !zm_terminate ) { - sigprocmask( SIG_BLOCK, &block_set, 0 ); + while ( !zm_terminate ) { + sigprocmask(SIG_BLOCK, &block_set, 0); for ( int i = 0; i < n_monitors; i++ ) { long min_delay = MAXINT; - gettimeofday( &now, NULL ); + gettimeofday(&now, NULL); for ( int j = 0; j < n_monitors; j++ ) { if ( last_capture_times[j].tv_sec ) { - DELTA_TIMEVAL( delta_time, now, last_capture_times[j], DT_PREC_3 ); + DELTA_TIMEVAL(delta_time, now, last_capture_times[j], DT_PREC_3); if ( monitors[i]->GetState() == Monitor::ALARM ) next_delays[j] = alarm_capture_delays[j]-delta_time.delta; else @@ -276,38 +275,38 @@ int main( int argc, char *argv[] ) { if ( next_delays[i] <= min_delay || next_delays[i] <= 0 ) { if ( monitors[i]->PreCapture() < 0 ) { - Error( "Failed to pre-capture monitor %d %d (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); + Error("Failed to pre-capture monitor %d %d (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors); zm_terminate = true; result = -1; break; } if ( monitors[i]->Capture() < 0 ) { - Error( "Failed to capture image from monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); + Error("Failed to capture image from monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors); zm_terminate = true; result = -1; break; } if ( monitors[i]->PostCapture() < 0 ) { - Error( "Failed to post-capture monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors ); + Error("Failed to post-capture monitor %d %s (%d/%d)", monitors[i]->Id(), monitors[i]->Name(), i+1, n_monitors); zm_terminate = true; result = -1; break; } if ( next_delays[i] > 0 ) { - gettimeofday( &now, NULL ); - DELTA_TIMEVAL( delta_time, now, last_capture_times[i], DT_PREC_3 ); + gettimeofday(&now, NULL); + DELTA_TIMEVAL(delta_time, now, last_capture_times[i], DT_PREC_3); long sleep_time = next_delays[i]-delta_time.delta; if ( sleep_time > 0 ) { - usleep( sleep_time*(DT_MAXGRAN/DT_PREC_3) ); + usleep(sleep_time*(DT_MAXGRAN/DT_PREC_3)); } } - gettimeofday( &(last_capture_times[i]), NULL ); - } // end if next_delay <= min_delay || next_delays[i] <= 0 ) + gettimeofday(&(last_capture_times[i]), NULL); + } // end if next_delay <= min_delay || next_delays[i] <= 0 ) - } // end foreach n_monitors - sigprocmask( SIG_UNBLOCK, &block_set, 0 ); - } // end while ! zm_terminate + } // end foreach n_monitors + sigprocmask(SIG_UNBLOCK, &block_set, 0); + } // end while ! zm_terminate for ( int i = 0; i < n_monitors; i++ ) { delete monitors[i]; } diff --git a/web/skins/classic/js/skin.js.php b/web/skins/classic/js/skin.js.php index 87a76b921..d97f7eff7 100644 --- a/web/skins/classic/js/skin.js.php +++ b/web/skins/classic/js/skin.js.php @@ -61,6 +61,7 @@ var focusWindow = ; var imagePrefix = ""; +var auth_hash; -var auth_hash = ''; +auth_hash = ''; diff --git a/web/skins/classic/views/event.php b/web/skins/classic/views/event.php index 11458380e..b4ee322d0 100644 --- a/web/skins/classic/views/event.php +++ b/web/skins/classic/views/event.php @@ -130,8 +130,9 @@ if ( canEdit( 'Events' ) ) { ?>
- - +
Archived == 1 ){echo " class=\"hidden\">";}else{echo ">";} ?>
+
Archived == 0 ){echo " class=\"hidden\">";}else{echo">";} ?>
+ DefaultVideo() ) { ?> @@ -220,7 +221,7 @@ if ( ZM_WEB_STREAM_METHOD == 'mpeg' && ZM_MPEG_LIVE_FORMAT ) {
- +
diff --git a/web/skins/classic/views/js/event.js b/web/skins/classic/views/js/event.js index 5396eef2f..20beaa885 100644 --- a/web/skins/classic/views/js/event.js +++ b/web/skins/classic/views/js/event.js @@ -455,7 +455,7 @@ function checkFrames( eventId, frameId, loadImage ) { for ( var fid = loFid; fid <= hiFid; fid++ ) { if ( !$('eventThumb'+fid) ) { - var img = new Element( 'img', { 'id': 'eventThumb'+fid, 'src': 'graphics/transparent.gif', 'alt': fid, 'class': 'placeholder' } ); + var img = new Element( 'img', { 'id': 'eventThumb'+fid, 'src': 'graphics/transparent.png', 'alt': fid, 'class': 'placeholder' } ); img.addEvent( 'click', function() { eventData['frames'][fid] = null; checkFrames( eventId, fid ); } ); frameQuery( eventId, fid, loadImage && (fid == frameId) ); var imgs = $('eventThumbs').getElements( 'img' ); diff --git a/web/skins/classic/views/js/montagereview.js b/web/skins/classic/views/js/montagereview.js index 5a7c73ede..214b1748b 100644 --- a/web/skins/classic/views/js/montagereview.js +++ b/web/skins/classic/views/js/montagereview.js @@ -492,7 +492,7 @@ function clicknav(minSecs,maxSecs,arch,live) {// we use the current time if we c if ( monitorZoomScale[monitorPtr[i]] < 0.99 || monitorZoomScale[monitorPtr[i]] > 1.01 ) // allow for some up/down changes and just treat as 1 of almost 1 zoomStr += "&z" + monitorPtr[i].toString() + "=" + monitorZoomScale[monitorPtr[i]].toFixed(2); - var uri = "?view=" + currentView + fitStr + groupStr + minStr + maxStr + currentStr + intervalStr + liveStr + zoomStr + "&scale=" + document.getElementById("scaleslider").value + "&speed=" + speeds[$j("#speedslider").value]; + var uri = "?view=" + currentView + fitStr + groupStr + minStr + maxStr + currentStr + intervalStr + liveStr + zoomStr + "&scale=" + document.getElementById("scaleslider").value + "&speed=" + document.getElementById("speedslider").value; window.location = uri; } diff --git a/web/skins/classic/views/js/timeline.js b/web/skins/classic/views/js/timeline.js index 8210aa9e3..0c37f0284 100644 --- a/web/skins/classic/views/js/timeline.js +++ b/web/skins/classic/views/js/timeline.js @@ -94,7 +94,7 @@ function previewEvent( eventId, frameId ) { if ( event['frames'] ) { if ( event['frames'][frameId] ) { showEventDetail( event['frames'][frameId]['html'] ); - var imagePath = '/index.php?view=image&eid='+eventId+'&fid='+frameId; + var imagePath = 'index.php?view=image&eid='+eventId+'&fid='+frameId; var videoName = event.DefaultVideo; loadEventImage( imagePath, eventId, frameId, event.Width, event.Height, event.Frames/event.Length, videoName, event.Length, event.StartTime, monitors[event.MonitorId]); return; diff --git a/web/skins/classic/views/monitor.php b/web/skins/classic/views/monitor.php index 1699d7186..d54a1b028 100644 --- a/web/skins/classic/views/monitor.php +++ b/web/skins/classic/views/monitor.php @@ -498,7 +498,7 @@ if ( canEdit( 'Monitors' ) ) { -

- Name()) ?>Id()) ) { ?> (Id()?>)

+

- Name()) ?>Id() ) { ?> (Id()?>)

    @@ -702,19 +702,19 @@ switch ( $tab ) { } ?> - Enabled()) ) { ?> checked="checked"/> + Enabled() ) { ?> checked="checked"/> RTSPDescribe()) ) { ?> checked="checked"/> + Protocol()!= 'rtsp' ) { echo ' style="display:none;"'; } ?>> () RTSPDescribe() ) { ?> checked="checked"/> - RecordAudio()) ) { ?> checked="checked"/> + RecordAudio() ) { ?> checked="checked"/> - Controllable()) ) { ?> checked="checked"/> + Controllable() ) { ?> checked="checked"/>   - TrackMotion()) ) { ?> checked="checked"/> + TrackMotion() ) { ?> checked="checked"/> translate('None'), @@ -987,7 +987,7 @@ switch ( $tab ) {  () - Exif()) ) { ?> checked="checked"/> + Exif() ) { ?> checked="checked"/> " disabled="disabled"/>
-
diff --git a/web/skins/classic/views/storage.php b/web/skins/classic/views/storage.php index b525f24e8..e6b459c5e 100644 --- a/web/skins/classic/views/storage.php +++ b/web/skins/classic/views/storage.php @@ -56,7 +56,7 @@ xhtmlHeaders(__FILE__, translate('Storage')." - ".$newStorage['Name'] ); - + diff --git a/web/skins/classic/views/timeline.php b/web/skins/classic/views/timeline.php index ade6f03e8..9a7f3ff0d 100644 --- a/web/skins/classic/views/timeline.php +++ b/web/skins/classic/views/timeline.php @@ -710,7 +710,7 @@ xhtmlHeaders(__FILE__, translate('Timeline') );
- <?php echo translate('ViewEvent') ?> + <?php echo translate('ViewEvent') ?> - <?php echo $monitors[$monitorId]['Name'] ?> + <?php echo $monitors[$monitorId]['Name'] ?>