setPageTitle(WT_I18N::translate('Add a new media object'));
$controller->pageHeader();
// TODO use GET/POST, rather than $_REQUEST
// TODO decide what validation is required on these input parameters
$pid =safe_REQUEST($_REQUEST, 'pid', WT_REGEX_XREF);
$mid =safe_REQUEST($_REQUEST, 'mid', WT_REGEX_XREF);
$gid =safe_REQUEST($_REQUEST, 'gid', WT_REGEX_XREF);
$linktoid =safe_REQUEST($_REQUEST, 'linktoid', WT_REGEX_XREF);
$action =safe_REQUEST($_REQUEST, 'action', WT_REGEX_NOSCRIPT, 'showmediaform');
$folder =safe_REQUEST($_REQUEST, 'folder', WT_REGEX_UNSAFE);
$oldFolder =safe_REQUEST($_REQUEST, 'oldFolder', WT_REGEX_UNSAFE);
$filename =safe_REQUEST($_REQUEST, 'filename', WT_REGEX_UNSAFE);
$oldFilename=safe_REQUEST($_REQUEST, 'oldFilename', WT_REGEX_UNSAFE, $filename);
$level =safe_REQUEST($_REQUEST, 'level', WT_REGEX_UNSAFE);
$text =safe_REQUEST($_REQUEST, 'text', WT_REGEX_UNSAFE);
$tag =safe_REQUEST($_REQUEST, 'tag', WT_REGEX_UNSAFE);
$islink =safe_REQUEST($_REQUEST, 'islink', WT_REGEX_UNSAFE);
$glevels =safe_REQUEST($_REQUEST, 'glevels', WT_REGEX_UNSAFE);
$update_CHAN=!safe_POST_bool('preserve_last_changed');
$success=false; // If successful, we close this window automatically
$disp = true;
if (empty($pid) && !empty($mid)) $pid = $mid;
if (!empty($pid)) {
$disp = WT_GedcomRecord::getInstance($pid)->canDisplayDetails();
}
if ($action=='update' || $action=='newentry') {
if (!isset($linktoid) || $linktoid=='new') $linktoid='';
if (empty($linktoid) && !empty($gid)) $linktoid = $gid;
if (!empty($linktoid)) {
$disp = WT_GedcomRecord::getInstance($linktoid)->canDisplayDetails();
}
}
if (!WT_USER_CAN_EDIT || !$disp || !$ALLOW_EDIT_GEDCOM) {
echo WT_I18N::translate('Access Denied
You do not have access to this resource.');
//-- display messages as to why the editing access was denied
if (!WT_USER_CAN_EDIT) {
echo '
', WT_I18N::translate('This user name cannot edit this GEDCOM.');
}
if (!$ALLOW_EDIT_GEDCOM) {
echo '
', WT_I18N::translate('Editing this GEDCOM has been disabled by the administrator.');
}
if (!$disp) {
echo '
', WT_I18N::translate('Privacy settings prevent you from editing this record.');
if (!empty($pid)) {
echo '
', WT_I18N::translate('You have no access to'), ' pid ', $pid;
}
}
echo '
';
exit;
}
if ($ENABLE_AUTOCOMPLETE) require WT_ROOT.'/js/autocomplete.js.htm';
echo WT_JS_START;
?>
// Shared Notes =========================
function findnote(field) {
pastefield = field;
findwin = window.open('find.php?type=note', '_blank', 'left=50, top=50, width=600, height=520, resizable=1, scrollbars=1');
return false;
}
var pastefield;
function openerpasteid(id) {
window.opener.paste_id(id);
window.close();
}
function paste_id(value) {
pastefield.value = value;
}
function paste_char(value) {
pastefield.value += value;
}
function checkpath(folder) {
value = folder.value;
if (value.substr(value.length-1, 1) == "/") value = value.substr(0, value.length-1);
if (value.substr(0, 1) == "/") value = value.substr(1, value.length-1);
result = value.split("/");
if (result.length > ) {
alert('');
folder.focus();
return false;
}
}
';
} else {
if (!move_uploaded_file($_FILES['mediafile']['tmp_name'], filename_decode($newFile))) {
// the file cannot be copied
$error .= WT_I18N::translate('There was an error uploading your file.').'
'.file_upload_error_text($_FILES['mediafile']['error']).'
';
} else {
@chmod(filename_decode($newFile), WT_PERM_FILE);
AddToLog("Media file {$folderName}{$mediaFile} uploaded", 'media');
}
}
}
if ($error=='' && !empty($_FILES['thumbnail']['name'])) {
$newThum = $realThumbFolderName.$mediaFile;
// Copy user-supplied thumbnail file into the destination directory
if (file_exists(filename_decode($newThum))) {
$error .= WT_I18N::translate('Media thumbnail already exists.').' '.$newThum.'
';
} else {
if (!move_uploaded_file($_FILES['thumbnail']['tmp_name'], filename_decode($newThum))) {
// the file cannot be copied
$error .= WT_I18N::translate('There was an error uploading your file.').'
'.file_upload_error_text($_FILES['thumbnail']['error']).'
';
} else {
@chmod(filename_decode($newThum), WT_PERM_FILE);
AddToLog("Media file {$thumbFolderName}{$mediaFile} uploaded", 'media');
}
}
}
if ($error=='' && empty($_FILES['mediafile']['name']) && !empty($_FILES['thumbnail']['name'])) {
// Copy user-supplied thumbnail file into the main destination directory
if (!copy(filename_decode($whichFile1), filename_decode($whichFile2))) {
// the file cannot be copied
$error .= WT_I18N::translate('There was an error uploading your file.').'
'.WT_I18N::translate('The file %s could not be copied from %s', $realThumbFolderName.$mediaFile, $realThumbFolderName.$mediaFile).'
';
} else {
@chmod(filename_decode($whichFile2), WT_PERM_FILE);
AddToLog("Media file {$folderName}{$mediaFile} copied from {$thumbFolderName}{$mediaFile}", 'media');
}
}
if ($error=='' && !empty($_FILES['mediafile']['name']) && empty($_FILES['thumbnail']['name'])) {
if (safe_POST('genthumb', 'yes', 'no') == 'yes') {
// Generate thumbnail from main image
$parts = pathinfo_utf($mediaFile);
if (!empty($parts['extension'])) {
$ext = strtolower($parts['extension']);
if (isImageTypeSupported($ext)) {
$thumbnail = $thumbFolderName.$mediaFile;
$okThumb = generate_thumbnail($folderName.$mediaFile, $thumbnail, 'OVERWRITE');
if (!$okThumb) {
$error .= WT_I18N::translate('Thumbnail %s could not be generated automatically.', $thumbnail);
} else {
echo WT_I18N::translate('Thumbnail %s generated automatically.', $thumbnail);
echo '
';
AddToLog("Media thumbnail {$thumbnail} generated", 'media');
}
}
}
}
}
// Let's see if there are any errors generated and print it
if (!empty($error)) {
echo '', $error, '
';
$mediaFile = '';
$finalResult = false;
} else $finalResult = true;
}
if ($mediaFile=='') {
// No upload: should be an existing file on server
if ($tag[0]=='FILE') {
if (!empty($text[0])) {
$isExternal = isFileExternal($text[0]);
if ($isExternal) {
$fileName = $text[0];
$mediaFile = $fileName;
$folderName = '';
} else {
$fileName = check_media_depth($text[0], 'BACK');
$mediaFile = basename($fileName);
$folderName = dirname($fileName).'/';
}
}
if ($mediaFile=='') {
echo '', WT_I18N::translate('Blank name or illegal characters in name'), '
';
$finalResult = false;
} else $finalResult = true;
} else {
//-- check if the file is used in more than one gedcom
//-- do not allow it to be moved or renamed if it is
$myFile = str_replace($MEDIA_DIRECTORY, '', $oldFolder.$oldFilename);
$multi_gedcom=is_media_used_in_other_gedcom($myFile, WT_GED_ID);
// Handle Admin request to rename or move media file
if ($filename!=$oldFilename) {
$parts = pathinfo_utf($filename);
if (empty($parts['extension']) || !in_array(strtolower($parts['extension']), $MEDIATYPE)) {
$parts = pathinfo_utf($oldFilename);
$filename .= '.'.$parts['extension'];
}
}
if (substr($folder, -1)!='/') $folder .= '/';
if ($folder=='/') $folder = '';
$folder = check_media_depth($folder.'y.z', 'BACK');
$folder = dirname($folder).'/';
if (substr($oldFolder, -1)!='/') $oldFolder .= '/';
if ($oldFolder=='/') $oldFolder = '';
$oldFolder = check_media_depth($oldFolder.'y.z', 'BACK');
$oldFolder = dirname($oldFolder).'/';
$_SESSION['upload_folder'] = $folder; // store standard media folder in session
$finalResult = true;
if ($filename!=$oldFilename || $folder!=$oldFolder) {
if ($multi_gedcom) {
echo '', WT_I18N::translate('This file is linked to another genealogical database on this server. It cannot be deleted, moved, or renamed until these links have been removed.'), '
';
if ($filename!=$oldFilename) {
echo WT_I18N::translate('Media file could not be moved or renamed.');
} else {
echo WT_I18N::translate('Media file could not be moved.');
}
echo '
';
$finalResult = false;
} else {
$oldMainFile = $oldFolder.$oldFilename;
$newMainFile = $folder.$filename;
$oldThumFile = str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldMainFile);
$newThumFile = str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $newMainFile);
if (media_exists($oldMainFile) == 3) {
// the file is in the media firewall directory
$oldMainFile = get_media_firewall_path($oldMainFile);
$newMainFile = get_media_firewall_path($newMainFile);
}
if (media_exists($oldThumFile) == 3) {
$oldThumFile = get_media_firewall_path($oldThumFile);
$newThumFile = get_media_firewall_path($newThumFile);
}
$isMain = file_exists(filename_decode($oldMainFile));
$okMain = !file_exists(filename_decode($newMainFile));
$isThum = file_exists(filename_decode($oldThumFile));
$okThum = !file_exists(filename_decode($newThumFile));
if ($okMain && $okThum) {
// make sure the directories exist before moving the files
mkdirs(dirname($newMainFile).'/');
mkdirs(dirname($newThumFile).'/');
if ($isMain) $okMain = @rename(filename_decode($oldMainFile), filename_decode($newMainFile));
if ($isThum) $okThum = @rename(filename_decode($oldThumFile), filename_decode($newThumFile));
}
// Build text to tell Admin about the success or failure of the requested operation
$mediaAction = 0;
if ($filename!=$oldFilename) $mediaAction = 1;
if ($folder!=$oldFolder) $mediaAction = $mediaAction + 2;
if (!$isMain) {
echo WT_I18N::translate(
'Media file %s does not exist.',
''.$oldFolder.$oldFilename.''
);
} else {
if ($okMain) {
echo WT_I18N::translate(
'Media file %1$s successfully renamed to %2$s.',
''.$oldFolder.$oldFilename.'',
''.$folder.$filename.''
);
} else {
$finalResult = false;
echo '';
echo WT_I18N::translate(
'Media file %1$s could not be renamed to %2$s.',
''.$oldFolder.$oldFilename.'',
''.$folder.$filename.''
);
echo '';
}
}
echo '
';
if (!$isThum) {
echo WT_I18N::translate(
'Thumbnail file %s does not exist.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.''
);
} else {
if ($okThum) {
echo WT_I18N::translate(
'Thumbnail file %1$s successfully renamed to %2$s.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.'',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $folder).$filename.''
);
} else {
$finalResult = false;
echo '';
echo WT_I18N::translate(
'Thumbnail file %1$s could not be renamed to %2$s.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.'',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $folder).$filename.''
);
echo '';
}
}
echo '
';
}
}
// Insert the 1 FILE xxx record into the arrays used by function handle_updates()
$glevels = array_merge(array('1'), $glevels);
$tag = array_merge(array('FILE'), $tag);
$islink = array_merge(array(0), $islink);
$text = array_merge(array($folder.$filename), $text);
$mediaFile = $filename;
$folderName = $folder;
}
}
if ($finalResult && $mediaFile!='') {
// NOTE: Build the gedcom record
// NOTE: Level 0
$media_id = get_new_xref('OBJE');
$newged = '0 @'.$media_id."@ OBJE\n";
//-- set the FILE text to the correct file location in the standard media directory
if (WT_USER_GEDCOM_ADMIN) $text[0] = $folderName.$mediaFile;
else $newged .= '1 FILE '.$folderName.$mediaFile."\n";
$newged = handle_updates($newged);
$media_obje = new WT_Media($newged);
$mediaid = WT_Media::in_obje_list($media_obje, WT_GED_ID);
if (!$mediaid) $mediaid = append_gedrec($newged, WT_GED_ID);
if ($mediaid) {
AddToLog('Media ID '.$mediaid.' successfully added.', 'edit');
if ($linktoid!='') $link = linkMedia($mediaid, $linktoid, $level);
else $link = false;
if ($link) {
AddToLog('Media ID '.$media_id." successfully added to $linktoid.", 'edit');
$success=true;
} else {
echo "", WT_I18N::translate('Paste the following ID into your editing fields to reference the newly created record '), " $mediaid
";
echo WT_JS_START;
echo "openerpasteid('", $mediaid, "');";
echo WT_JS_END;
}
}
echo WT_I18N::translate('Update successful');
}
}
// **** end action 'newentry'
// **** begin action 'update'
if ($action == 'update') {
if (empty($level)) $level = 1;
//-- check if the file is used in more than one gedcom
//-- do not allow it to be moved or renamed if it is
$myFile = str_replace($MEDIA_DIRECTORY, '', $oldFolder.$oldFilename);
$multi_gedcom=is_media_used_in_other_gedcom($myFile, WT_GED_ID);
$isExternal = isFileExternal($oldFilename) || isFileExternal($filename);
$finalResult = true;
// Handle Admin request to rename or move media file
if (!$isExternal) {
if ($filename!=$oldFilename) {
$parts = pathinfo_utf($filename);
if (empty($parts['extension']) || !in_array(strtolower($parts['extension']), $MEDIATYPE)) {
$parts = pathinfo_utf($oldFilename);
$filename .= '.'.$parts['extension'];
}
}
if (!isset($folder) && isset($oldFolder)) $folder = $oldFolder;
$folder = trim($folder);
if (substr($folder, -1)!='/') $folder .= '/';
if ($folder=='/') $folder = '';
$folder = check_media_depth($folder.'y.z', 'BACK');
$folder = dirname($folder).'/';
if (substr($oldFolder, -1)!='/') $oldFolder .= '/';
if ($oldFolder=='/') $oldFolder = '';
$oldFolder = check_media_depth($oldFolder.'y.z', 'BACK');
$oldFolder = dirname($oldFolder).'/';
}
if ($filename!=$oldFilename || $folder!=$oldFolder) {
if ($multi_gedcom) {
echo '', WT_I18N::translate('This file is linked to another genealogical database on this server. It cannot be deleted, moved, or renamed until these links have been removed.'), '
';
if ($filename!=$oldFilename) {
echo WT_I18N::translate('Media file could not be moved or renamed.');
} else {
echo WT_I18N::translate('Media file could not be moved.');
}
echo '
';
$finalResult = false;
} else if (!$isExternal) {
$oldMainFile = $oldFolder.$oldFilename;
$newMainFile = $folder.$filename;
$oldThumFile = str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldMainFile);
$newThumFile = str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $newMainFile);
if (media_exists($oldMainFile) == 3) {
// the file is in the media firewall directory
$oldMainFile = get_media_firewall_path($oldMainFile);
$newMainFile = get_media_firewall_path($newMainFile);
}
if (media_exists($oldThumFile) == 3) {
$oldThumFile = get_media_firewall_path($oldThumFile);
$newThumFile = get_media_firewall_path($newThumFile);
}
$isMain = file_exists(filename_decode($oldMainFile));
$okMain = !file_exists(filename_decode($newMainFile));
$isThum = file_exists(filename_decode($oldThumFile));
$okThum = !file_exists(filename_decode($newThumFile));
if ($okMain && $okThum) {
// make sure the directories exist before moving the files
mkdirs(dirname($newMainFile).'/');
mkdirs(dirname($newThumFile).'/');
if ($isMain) $okMain = @rename(filename_decode($oldMainFile), filename_decode($newMainFile));
if ($isThum) $okThum = @rename(filename_decode($oldThumFile), filename_decode($newThumFile));
}
// Build text to tell Admin about the success or failure of the requested operation
$mediaAction = 0;
if ($filename!=$oldFilename) $mediaAction = 1;
if ($folder!=$oldFolder) $mediaAction = $mediaAction + 2;
if (!$isMain) {
echo WT_I18N::translate(
'Media file %s does not exist.',
''.$oldFolder.$oldFilename.''
);
} else {
if ($okMain) {
echo WT_I18N::translate(
'Media file %1$s successfully renamed to %2$s.',
''.$oldFolder.$oldFilename.'',
''.$folder.$filename.''
);
} else {
$finalResult = false;
echo '';
echo WT_I18N::translate(
'Media file %1$s could not be renamed to %2$s.',
''.$oldFolder.$oldFilename.'',
''.$folder.$filename.''
);
echo '';
}
}
echo '
';
if (!$isThum) {
echo WT_I18N::translate(
'Thumbnail file %s does not exist.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.''
);
} else {
if ($okThum) {
echo WT_I18N::translate(
'Thumbnail file %1$s successfully renamed to %2$s.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.'',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $folder).$filename.''
);
} else {
$finalResult = false;
echo '';
echo WT_I18N::translate(
'Thumbnail file %1$s could not be renamed to %2$s.',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $oldFolder).$oldFilename.'',
''.str_replace($MEDIA_DIRECTORY, $MEDIA_DIRECTORY.'thumbs/', $folder).$filename.''
);
echo '';
}
}
echo '
';
}
}
if ($finalResult) {
$_SESSION['upload_folder'] = $folder; // store standard media folder in session
// Insert the 1 FILE xxx record into the arrays used by function handle_updates()
$glevels = array_merge(array('1'), $glevels);
$tag = array_merge(array('FILE'), $tag);
$islink = array_merge(array(0), $islink);
$text = array_merge(array($folder.$filename), $text);
if (!empty($pid)) {
$gedrec=find_gedcom_record($pid, WT_GED_ID, true);
}
$newrec = "0 @$pid@ OBJE\n";
$newrec = handle_updates($newrec);
if (!$update_CHAN) {
$newrec .= get_sub_record(1, '1 CHAN', $gedrec);
}
//-- look for the old record media in the file
//-- if the old media record does not exist that means it was
//-- generated at import and we need to append it
replace_gedrec($pid, WT_GED_ID, $newrec, $update_CHAN);
if ($pid && $linktoid!='') {
$link = linkMedia($pid, $linktoid, $level);
if ($link) {
AddToLog('Media ID '.$pid." successfully added to $linktoid.", 'edit');
}
}
}
if ($finalResult) {
echo WT_I18N::translate('Update successful');
$success=true;
}
}
// **** end action 'update'
// **** begin action 'delete'
if ($action=='delete') {
if (delete_gedrec($pid, WT_GED_ID)) {
AddToLog('Media ID '.$pid.' successfully deleted.', 'edit');
echo WT_I18N::translate('Update successful');
$success=true;
}
}
// **** end action 'delete'
// **** begin action 'showmediaform'
if ($action=='showmediaform') {
if (!isset($pid)) $pid = '';
if (empty($level)) $level = 1;
if (!isset($linktoid)) $linktoid = '';
show_media_form($pid, 'newentry', $filename, $linktoid, $level);
}
// **** end action 'showmediaform'
// **** begin action 'editmedia'
if ($action=='editmedia') {
if (!isset($pid)) $pid = '';
if (empty($level)) $level = 1;
show_media_form($pid, 'update', $filename, $linktoid, $level);
}
// **** end action 'editmedia'
if ($success && !WT_DEBUG) {
echo
WT_JS_START,
'if (window.opener.showchanges) window.opener.showchanges();',
'window.close();',
WT_JS_END;
} else {
echo '
';
echo '';
echo '
';
}