From eecf56804143a703f2c26dd96a64306e36e99081 Mon Sep 17 00:00:00 2001 From: Isaac Connor Date: Fri, 6 Aug 2021 13:18:06 -0400 Subject: [PATCH] Pass exportStructure around so that it can be used to put the right filename to the jpg in the html. Fix flat zips. Fix video files being included if exportMisc is true. --- .../classic/includes/export_functions.php | 137 ++++++++++-------- 1 file changed, 77 insertions(+), 60 deletions(-) diff --git a/web/skins/classic/includes/export_functions.php b/web/skins/classic/includes/export_functions.php index bc6bba1ed..2af1764ef 100644 --- a/web/skins/classic/includes/export_functions.php +++ b/web/skins/classic/includes/export_functions.php @@ -570,14 +570,14 @@ else if (document.layers) window.onload=start_slider; return ob_get_clean(); } # end function exportEventImages($event, $exportDetail, $exportFrames, $myfilelist) -function eventlist_html($Event, $exportDetail, $exportFrames) { +function eventlist_html($Event, $exportDetail, $exportFrames, $exportStructure) { $html = '
'; if ( $Event->SaveJPEGs() ) { $html .= ' '; if ( ZM_WEB_LIST_THUMBS ) { - $html .= ''.$Event->Id().' + $html .= ''.$Event->Id().' '; } else { $html .= $Event->Id(); @@ -588,7 +588,7 @@ function eventlist_html($Event, $exportDetail, $exportFrames) { if ( $Event->DefaultVideo() ) { if ( ZM_WEB_LIST_THUMBS ) { $html .= ''; - $html .= ''.$Event->Id().''; + $html .= ''.$Event->Id().''; $html .= '
'; } @@ -606,7 +606,7 @@ function eventlist_html($Event, $exportDetail, $exportFrames) { return $html; } // end function eventlist_html -function exportEventImagesMaster($eids, $exportDetail, $exportFrames) { +function exportEventImagesMaster($eids, $exportDetail, $exportFrames, $exportStructure) { ob_start(); exportHeader(translate('Images').' Master'); ?> @@ -648,7 +648,7 @@ function exportEventImagesMaster($eids, $exportDetail, $exportFrames) {

All

@@ -658,7 +658,7 @@ function exportEventImagesMaster($eids, $exportDetail, $exportFrames) { echo '

Monitor: '.$monitorNames[$monitor_id].'

'; foreach ( $events as $event ) { if ( $event->MonitorId() == $monitor_id ) { - echo eventlist_html($event, $exportDetail, $exportFrames); + echo eventlist_html($event, $exportDetail, $exportFrames, $exportStructure); } # end if its the right monitor } # end foreach event echo ''; @@ -772,52 +772,57 @@ function exportFileList( $exportVideo, $exportMisc ) { - - if ( !canView('Events') or !$event ) { + if (!canView('Events') or !$event) { + ZM\Error("Can't view events or !event"); return; } $eventPath = $event->Path(); $eventRelativePath = $event->Relative_Path(); $files = array(); - if ( $dir = opendir($eventPath) ) { - while ( ($file = readdir($dir)) !== false ) { - if ( is_file($eventPath.'/'.$file) ) { + if ($dir = opendir($eventPath)) { + while (($file = readdir($dir)) !== false) { + if (is_file($eventPath.'/'.$file)) { $files[$file] = $file; } } closedir($dir); } + ZM\Debug(print_r($files, true)); $exportFileList = array(); - if ( $exportDetail ) { + if ($exportDetail) { $file = 'zmEventDetail.html'; - if ( $fp = fopen($eventPath.'/'.$file, 'w') ) { + if ($fp = fopen($eventPath.'/'.$file, 'w')) { fwrite($fp, exportEventDetail($event, $exportFrames, $exportImages)); fclose($fp); $exportFileList[$file] = $file; } else { - ZM\Error("Can't open event detail export file '$file'"); + ZM\Error("Can't open event detail export file '$eventPath/$file'"); } + } else { + ZM\Debug('Not including detail'); } - if ( $exportFrames ) { + if ($exportFrames) { $file = 'zmEventFrames.html'; - if ( $fp = fopen($eventPath.'/'.$file, 'w') ) { + if ($fp = fopen($eventPath.'/'.$file, 'w')) { fwrite($fp, exportEventFrames($event, $exportDetail, $exportImages)); fclose($fp); $exportFileList[$file] = $file; } else { - ZM\Error("Can't open event frames export file '$file'"); + ZM\Error("Can't open event frames export file '$eventPath/$file' is writable? ".is_writable($eventPath)); } + } else { + ZM\Debug('Not including frames'); } - if ( $exportImages ) { + if ($exportImages) { $filesLeft = array(); $myfilelist = array(); - foreach ( $files as $file ) { - if ( preg_match('/-(?:capture|analyse).jpg$/', $file) ) { + foreach ($files as $file) { + if (preg_match('/-(?:capture|analyse).jpg$/', $file)) { $myfilelist[$file] = $exportFileList[$file] = $file; } else { $filesLeft[$file] = $file; @@ -826,9 +831,9 @@ function exportFileList( $files = $filesLeft; // create an image slider - if ( !empty($myfilelist) ) { + if (!empty($myfilelist)) { $file = 'zmEventImages.html'; - if ( $fp = fopen($eventPath.'/'.$file, 'w') ) { + if ($fp = fopen($eventPath.'/'.$file, 'w')) { fwrite($fp, exportEventImages($event, $exportDetail, $exportFrames, $myfilelist)); fclose($fp); $exportFileList[$file] = $file; @@ -836,26 +841,31 @@ function exportFileList( ZM\Error("Can't open event images export file '$file'"); } } + } else { + ZM\Debug('Not including frame images'); } # end if exportImages - if ( $exportVideo ) { - $filesLeft = array(); - foreach ( $files as $file ) { - if ( preg_match('/\.(?:mpg|mpeg|mov|swf|mp4|mkv|avi|asf|3gp)$/', $file) ) { + $filesLeft = array(); + foreach ($files as $file) { + if (preg_match('/\.(?:mpg|mpeg|mov|swf|mp4|mkv|avi|asf|3gp)$/', $file)) { + if ($exportVideo) { $exportFileList[$file] = $file; - } else { - $filesLeft[$file] = $file; } + } else { + $filesLeft[$file] = $file; } - $files = $filesLeft; - } # end if exportVideo + } + $files = $filesLeft; - if ( $exportMisc ) { - foreach ( $files as $file ) { + if ($exportMisc) { + foreach ($files as $file) { $exportFileList[$file] = $file; } $files = array(); + } else { + ZM\Debug('Not including misc'); } + ZM\Debug(print_r($exportFileList, true)); return array_values($exportFileList); } # end exportFileList() @@ -873,34 +883,33 @@ function exportEvents( $export_root = 'zmExport' ) { - if ( !canView('Events') ) { + if (!canView('Events')) { ZM\Error('You do not have permission to view events.'); return false; - } else if ( empty($eids) ) { + } else if (empty($eids)) { ZM\Error('Attempt to export an empty list of events.'); return false; } - if ( !($exportFormat == 'tar' or $exportFormat == 'zip') ) { + if (!($exportFormat == 'tar' or $exportFormat == 'zip')) { ZM\Error("None or invalid exportFormat specified $exportFormat."); return false; } # Ensure that we are going to be able to do this. - if ( ! ( mkdir(ZM_DIR_EXPORTS) or file_exists(ZM_DIR_EXPORTS) ) ) { + if (!(mkdir(ZM_DIR_EXPORTS) or file_exists(ZM_DIR_EXPORTS))) { ZM\Fatal('Can\'t create exports dir at \''.ZM_DIR_EXPORTS.'\''); } chmod(ZM_DIR_EXPORTS, 0700); $export_dir = ZM_DIR_EXPORTS.'/'.$export_root.($connkey?'_'.$connkey:''); # Ensure that we are going to be able to do this. - if ( ! ( mkdir($export_dir) or file_exists($export_dir) ) ) { + if (!(mkdir($export_dir) or file_exists($export_dir))) { ZM\Error("Can't create exports dir at '$export_dir'"); return false; } - ZM\Debug("Successfully created dir '$export_dir'"); chmod($export_dir, 0700); - if ( !chdir($export_dir) ) { + if (!chdir($export_dir)) { ZM\Error("Can't chdir to $export_dir"); return; } @@ -909,36 +918,45 @@ function exportEvents( $exportFileList = array(); $html_eventMaster = ''; - if ( !is_array($eids) ) { + if (!is_array($eids)) { $eids = array($eids); } - foreach ( $eids as $eid ) { + foreach ($eids as $eid) { $event = new ZM\Event($eid); $event_dir = $export_dir.'/'.$event->Id(); - if ( !(mkdir($event_dir) or file_exists($event_dir)) ) { + if (!(mkdir($event_dir) or file_exists($event_dir))) { ZM\Error("Can't mkdir $event_dir"); } $event_exportFileList = exportFileList($event, $exportDetail, $exportFrames, $exportImages, $exportVideo, $exportMisc); $exportFileList = array_merge($exportFileList, $event_exportFileList); - foreach ( $event_exportFileList as $file ) { + foreach ($event_exportFileList as $file) { #if ( preg_match('/\.html$/', $file) ) #continue; - $cmd = 'cp -as '.$event->Path().'/'.$file.' '.$export_dir.'/'.$event->Id().'/'.$file. ' 2>&1'; + if ($exportStructure == 'flat') { + $cmd = 'cp -as '.$event->Path().'/'.$file.' '.$export_dir.'/'.$event->Id().'_'.$file. ' 2>&1'; + } else { + $cmd = 'cp -as '.$event->Path().'/'.$file.' '.$export_dir.'/'.$event->Id().'/'.$file. ' 2>&1'; + } exec($cmd, $output, $return); ZM\Debug($cmd.' return code: '.$return.' output: '.print_r($output,true)); } # end foreach event_exportFile } # end foreach event - if ( !symlink(ZM_PATH_WEB.'/'.ZM_SKIN_PATH.'/js/jquery.min.js', $export_dir.'/jquery.min.js') ) + if (!( + symlink(ZM_PATH_WEB.'/'.ZM_SKIN_PATH.'/js/jquery.min.js', $export_dir.'/jquery.min.js') + or + file_exists($export_dir.'/jquery.min.js') + )) { ZM\Error('Failed linking '.ZM_PATH_WEB.'/'.ZM_SKIN_PATH.'/js/jquery.min.js to '.$export_dir.'/jquery.min.js'); + } //if ( !symlink(ZM_PATH_WEB.'/'.ZM_SKIN_PATH.'/js/video.js', $export_dir.'/video.js') ) //Error("Failed linking video.js"); $html_eventMaster_file = 'zmEventImagesMaster.html'; $html_eventMaster_path = $export_dir.'/'.$html_eventMaster_file; - if ( ($fp = fopen($html_eventMaster_path, 'w')) ) { - fwrite($fp, exportEventImagesMaster($eids, $exportDetail, $exportFrames)); + if (($fp = fopen($html_eventMaster_path, 'w'))) { + fwrite($fp, exportEventImagesMaster($eids, $exportDetail, $exportFrames, $exportStructure)); fclose($fp); $exportFileList[] = $html_eventMaster_file; } else { @@ -946,11 +964,11 @@ function exportEvents( } $listFile = $export_dir.'/'.$export_listFile; - if ( !($fp = fopen($listFile, 'w')) ) { + if (!($fp = fopen($listFile, 'w'))) { ZM\Error("Can't open event export list file '$listFile'"); return false; } - foreach ( $exportFileList as $exportFile ) { + foreach ($exportFileList as $exportFile) { $exportFile = $export_root.$connkey.'/'.$exportFile; fwrite($fp, $exportFile.PHP_EOL); } @@ -959,19 +977,18 @@ function exportEvents( chdir(ZM_DIR_EXPORTS); $archive = ''; - if ( $exportFormat == 'tar' ) { - + if ($exportFormat == 'tar') { $archive = $export_root.($connkey?'_'.$connkey:'').'.tar'; $version = shell_exec('tar -v'); $command = 'tar --create --dereference'; - if ( $exportCompressed ) { + if ($exportCompressed) { $archive .= '.gz'; $command .= ' --gzip'; $exportFormat .= '.gz'; } - if ( $exportStructure == 'flat' ) { - if ( preg_match('/BSD/i', $version) ) { + if ($exportStructure == 'flat') { + if (preg_match('/BSD/i', $version)) { $command .= ' -s \'#^.*/##\''; } else { $command .= ' --xform=\'s#^.+/##x\''; @@ -979,27 +996,27 @@ function exportEvents( } $archive_path = ZM_DIR_EXPORTS.'/'.$archive; $command .= ' --file='.escapeshellarg($archive_path); - } elseif ( $exportFormat == 'zip' ) { + } else if ($exportFormat == 'zip') { $archive = $export_root.($connkey?'_'.$connkey:'').'.zip'; $archive_path = ZM_DIR_EXPORTS.'/'.$archive; - $command = 'zip '; - $command .= ($exportStructure == 'flat' ? ' -j ' : ' -r ' ).escapeshellarg($archive_path); + $command = 'zip -r '; + $command .= ($exportStructure == 'flat' ? ' -j ' : '').escapeshellarg($archive_path); $command .= $exportCompressed ? ' -9' : ' -0'; } // if $exportFormat @unlink($archive_path); $command .= ' '.$export_root.($connkey?'_'.$connkey:'').'/'; exec($command, $output, $status); - if ( $status ) { + if ($status) { ZM\Error("Command '$command' returned with status $status"); - if ( isset($output[0]) ) { + if (isset($output[0])) { ZM\Error('First line of output is \''.$output[0].'\''); } return false; } // clean up temporary files - if ( !empty($html_eventMaster) ) { + if (!empty($html_eventMaster)) { unlink($monitorPath.'/'.$html_eventMaster); }