/** * commit the upload process */ function commit($method = '', $skip_cleanup = false) { global $USER, $CONF, $memcache; if ($this->validUploadId($this->upload_id)) { $uploadfile = $this->_pendingJPEG($this->upload_id); if (!file_exists($uploadfile)) { return "Upload image not found"; } } else { return "Must assign upload id"; } if (!is_object($this->square)) { return "Must assign square"; } $viewpoint = new GridSquare(); if ($this->viewpoint_gridreference) { $ok = $viewpoint->setByFullGridRef($this->viewpoint_gridreference, true, true, true); } //get sequence number $mkey = $this->square->gridsquare_id; $seq_no =& $memcache->name_get('sid', $mkey); if (empty($seq_no) && !empty($CONF['use_insertionqueue'])) { $seq_no = $this->db->GetOne("select max(seq_no) from gridimage_queue where gridsquare_id={$this->square->gridsquare_id}"); } if (empty($seq_no)) { $seq_no = $this->db->GetOne("select max(seq_no) from gridimage where gridsquare_id={$this->square->gridsquare_id}"); } $seq_no = max($seq_no + 1, 0); $memcache->name_set('sid', $mkey, $seq_no, false, $memcache->period_long); //ftf is zero under image is moderated $ftf = 0; //get the exif data and set orientation $this->reReadExifFile(); if (!empty($CONF['use_insertionqueue'])) { $table = "gridimage_queue"; } else { $table = "gridimage"; } //create record // nateasting/natnorthings will only have values if getNatEastings has been called (in this case because setByFullGridRef has been called IF an exact location is specifed) $sql = sprintf("insert into {$table} (" . "gridsquare_id, seq_no, user_id, ftf," . "moderation_status,title,comment,title2,comment2,nateastings,natnorthings,natgrlen,imageclass,imagetaken," . "submitted,viewpoint_eastings,viewpoint_northings,viewpoint_grlen,view_direction,use6fig,user_status,realname,reference_index,viewpoint_refindex) values " . "(%d,%d,%d,%d," . "'pending',%s,%s,%s,%s,%d,%d,'%d',%s,%s," . "now(),%d,%d,'%d',%d,%d,%s,%s,'%d','%d')", $this->square->gridsquare_id, $seq_no, $USER->user_id, $ftf, $this->db->Quote($this->title), $this->db->Quote($this->comment), $this->db->Quote($this->title2), $this->db->Quote($this->comment2), $this->square->nateastings, $this->square->natnorthings, $this->square->natgrlen, $this->db->Quote($this->imageclass), $this->db->Quote($this->imagetaken), $viewpoint->nateastings, $viewpoint->natnorthings, $viewpoint->natgrlen, $this->view_direction, $this->use6fig, $this->db->Quote($this->user_status), $this->db->Quote($this->realname), $this->square->reference_index, $viewpoint->reference_index); $this->db->Query($sql); //get the id $gridimage_id = $this->db->Insert_ID(); //save the exif $sql = sprintf("insert into gridimage_exif (" . "gridimage_id,exif) values " . "(%d,%s)", $gridimage_id, $this->db->Quote($exif)); $this->db->Query($sql); //copy image to correct area $src = $this->_pendingJPEG($this->upload_id); $image = new GridImage(); $image->gridimage_id = $gridimage_id; $image->user_id = $USER->user_id; if ($this->clearexif && $CONF['exiftooldir'] !== '') { $cmd = sprintf("\"%sexiftool\" -overwrite_original -all= \"%s\" > /dev/null 2>&1", $CONF['exiftooldir'], $src); passthru($cmd); } $storedoriginal = false; if ($ok = $image->storeImage($src)) { $orginalfile = $this->_originalJPEG($this->upload_id); if (file_exists($orginalfile) && $this->largestsize && $this->largestsize > $CONF['img_max_size']) { if ($this->switchxy) { list($oheight, $owidth, $otype, $oattr) = getimagesize($orginalfile); } else { list($owidth, $oheight, $otype, $oattr) = getimagesize($orginalfile); } list($destwidth, $destheight, $destdim, $changedim) = $this->_new_size($owidth, $oheight, $this->largestsize); $this->_downsizeFile($orginalfile, $destdim); if ($this->clearexif && $CONF['exiftooldir'] !== '') { $cmd = sprintf("\"%sexiftool\" -overwrite_original -all= \"%s\" > /dev/null 2>&1", $CONF['exiftooldir'], $orginalfile); passthru($cmd); } $storedoriginal = $image->storeOriginal($orginalfile); } if (!$skip_cleanup) { $this->cleanUp(); } } //fire an event require_once 'geograph/event.class.php'; new Event(EVENT_NEWPHOTO, $gridimage_id . ',' . $USER->user_id . ',' . $storedoriginal); #//assign the snippets now we know the real id. #$gid = crc32($this->upload_id)+4294967296; #$gid += $USER->user_id * 4294967296; # #$this->db->Execute($sql = "UPDATE gridimage_snippet SET gridimage_id = $gridimage_id WHERE gridimage_id = ".$gid); $this->gridimage_id = $gridimage_id; #if (!empty($method)) { # if (!empty($GLOBALS['STARTTIME'])) { # # list($usec, $sec) = explode(' ',microtime()); # $endtime = ((float)$usec + (float)$sec); # $timetaken = $endtime - $GLOBALS['STARTTIME']; # # $this->db->Execute("INSERT INTO submission_method SET gridimage_id = $gridimage_id,method='$method',timetaken=$timetaken"); # } else { # $this->db->Execute("INSERT INTO submission_method SET gridimage_id = $gridimage_id,method='$method'"); # } #} }
//do some processing? if (isset($_POST['go'])) { //this takes a long time, so we output a header first of all $smarty->display('_std_begin.tpl'); echo "<h3><a href=\"hashchanger.php\"><<</a> Changing image hashes...</h3>"; flush(); set_time_limit(3600 * 24); $recordSet =& $db->Execute("select * from gridimage"); while (!$recordSet->EOF) { $image = new GridImage(); $image->loadFromRecordset($recordSet); $CONF['photo_hashing_secret'] = $from; $oldfile = $image->_getFullpath(); if ($oldfile != '/photos/error.jpg' && file_exists($_SERVER['DOCUMENT_ROOT'] . $oldfile)) { $CONF['photo_hashing_secret'] = $to; $image->storeImage($_SERVER['DOCUMENT_ROOT'] . $oldfile, true); $newfile = $image->_getFullpath(); echo "<li>renamed {$oldfile}<br>to {$newfile}</li>"; flush(); } else { echo "<li>skipping {$oldfile} (not found)</li>"; } $recordSet->MoveNext(); } $recordSet->Close(); $smarty->display('_std_end.tpl'); exit; } $smarty->assign('from', $from); $smarty->assign('to', $to); $smarty->display('hashchanger.tpl');
} //save the pending as original $image->storeOriginal($_SERVER['DOCUMENT_ROOT'] . $image->pendingUrl, true); if (!empty($CONF['awsAccessKey'])) { $image->originalUrl = $image->_getOriginalpath(true, false, '_original'); require_once "3rdparty/S3.php"; $s3 = new S3($CONF['awsAccessKey'], $CONF['awsSecretKey']); $ok = $s3->putObjectFile($_SERVER['DOCUMENT_ROOT'] . $image->originalUrl, $CONF['awsS3Bucket'], preg_replace("/^\\//", '', $image->originalUrl), S3::ACL_PRIVATE); } if ($image->previewUrl != "/photos/error.jpg") { if (!empty($_POST['confirm'])) { //delete the preview - we dont need it unlink($_SERVER['DOCUMENT_ROOT'] . $image->previewUrl); } else { //store the preview as an alterantive fullsize $image->storeImage($_SERVER['DOCUMENT_ROOT'] . $image->previewUrl, true, '_640x640'); } } //clear caches involving the image $ab = floor($gridimage_id / 10000); $smarty->clear_cache('', "img{$ab}|{$gridimage_id}|"); $mkey = "{$gridimage_id}:F"; $memcache->name_delete('is', $mkey); $db->Execute("DELETE FROM gridimage_size WHERE gridimage_id = {$gridimage_id}"); if (!empty($_POST['confirm'])) { $db->Execute("UPDATE gridimage_pending gp SET status = 'confirmed' WHERE gridimage_id = {$gridimage_id} "); } else { $db->Execute("UPDATE gridimage_pending gp SET status = 'accepted' WHERE gridimage_id = {$gridimage_id} "); } } else { $smarty->assign('message', 'Verification failed - please let us know!');