You are viewing a plain text version of this content. The canonical link for it is here.
Posted to olio-commits@incubator.apache.org by ak...@apache.org on 2009/01/27 00:33:17 UTC
svn commit: r737947 -
/incubator/olio/webapp/php/trunk/public_html/addEventResult.php
Author: akara
Date: Tue Jan 27 00:33:17 2009
New Revision: 737947
URL: http://svn.apache.org/viewvc?rev=737947&view=rev
Log:
Fix for issue OLIO-45:
1. sorted events before accessing them
2. Separate out transaction from geocoder and file access
3. Copy image after transaction is done
4. Update record with a separate transaction
Modified:
incubator/olio/webapp/php/trunk/public_html/addEventResult.php
Modified: incubator/olio/webapp/php/trunk/public_html/addEventResult.php
URL: http://svn.apache.org/viewvc/incubator/olio/webapp/php/trunk/public_html/addEventResult.php?rev=737947&r1=737946&r2=737947&view=diff
==============================================================================
--- incubator/olio/webapp/php/trunk/public_html/addEventResult.php (original)
+++ incubator/olio/webapp/php/trunk/public_html/addEventResult.php Tue Jan 27 00:33:17 2009
@@ -22,232 +22,260 @@
$connection = DBConnection::getWriteInstance();
// 1. Get data from submission page.
- $description=$_POST['description'];
- $summary = $_POST['summary'];
- $title=$_POST['title'];
- $strt1= $_POST['street1'];
- $street2= $_POST['street2'];
- $cty = $_POST['city'];
- $street1 = str_replace(" ","+",$strt1);
- $city = str_replace(" ","+",$cty);
- $state = $_POST['state'];
- $zip = $_POST['zip'];
- $country = $_POST['country'];
- $telephone = $_POST['telephone'];
- $year = $_POST['year'];
- $month = $_POST['month'];
- $day = $_POST['day'];
- $hour = $_POST['hour'];
- $minute = $_POST['minute'];
- $eventtime=$year."-".$month."-".$day." ".$hour.":".$minute.":00";
- $eventdate=$year."-".$month."-".$day;
- $tags=$_POST['tags'];
- //echo "Tags = ".$tags."<br/>";
-
- $image_name= basename($_FILES['upload_image']['name']);
- $literature_name=basename($_FILES['upload_literature']['name']);
-
-
+$description=$_POST['description'];
+$summary = $_POST['summary'];
+$title=$_POST['title'];
+$strt1= $_POST['street1'];
+$street2= $_POST['street2'];
+$cty = $_POST['city'];
+$street1 = str_replace(" ","+",$strt1);
+$city = str_replace(" ","+",$cty);
+$state = $_POST['state'];
+$zip = $_POST['zip'];
+$country = $_POST['country'];
+$telephone = $_POST['telephone'];
+$year = $_POST['year'];
+$month = $_POST['month'];
+$day = $_POST['day'];
+$hour = $_POST['hour'];
+$minute = $_POST['minute'];
+$eventtime=$year."-".$month."-".$day." ".$hour.":".$minute.":00";
+$eventdate=$year."-".$month."-".$day;
+$tags=$_POST['tags'];
+//echo "Tags = ".$tags."<br/>";
+
+$image_name= basename($_FILES['upload_image']['name']);
+$literature_name=basename($_FILES['upload_literature']['name']);
+
+
// 2. Get coordinates of the address.
- $geocode = new Geocoder($street1, $city, $state, $zip);
+$geocode = new Geocoder($street1, $city, $state, $zip);
// 3. Insert address and get the address id.
- $insertaddr = "insert into ADDRESS (street1, street2, city, state, zip, country, latitude, longitude) ".
+$insertaddr = "insert into ADDRESS (street1, street2, city, state, zip, country, latitude, longitude) ".
"values ('$strt1', '$street2', '$cty', '$state', '$zip', '$country', ".
"'$geocode->latitude', '$geocode->longitude')";
- $connection->beginTransaction();
- $connection->exec($insertaddr);
- $cq = "select last_insert_id()";
- $idres = $connection->query($cq);
- while($idres->next()) {
- $addrid = $idres->get(1);
- }
- unset($idres);
+$connection->beginTransaction();
+$connection->exec($insertaddr);
+$cq = "select last_insert_id()";
+$idres = $connection->query($cq);
+while($idres->next()) {
+ $addrid = $idres->get(1);
+}
+unset($idres);
// 4. Insert event and get the event id.
- $usrnm = $_SESSION["uname"];
- $evid = $_SESSION["addEventSE"];
+$usrnm = $_SESSION["uname"];
+$evid = $_SESSION["addEventSE"];
- if (isset($_POST['addeventsubmit'])) {
+if (isset($_POST['addeventsubmit'])) {
$insertse = "insert into SOCIALEVENT (title, description,summary, submitterUserName, ADDRESS_addressid,telephone, timezone, eventtimestamp, eventdate) values ('$title', '$description','$summary', '$usrnm', '$addrid', '$telephone', '$timezone', '$eventtime', '$eventdate')";
- $connection->exec($insertse);
- $idres = $connection->query($cq);
- while ($idres->next()) {
- $eventid=$idres->get(1);
- }
- unset($idres);
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $updse = "update SOCIALEVENT set title='$title',description='$description',summary='$summary', submitterUserName='$usrnm',ADDRESS_addressid='$addrid',telephone='$telephone',timezone='$timezone',eventtimestamp='$eventtime',eventdate='$eventdate' where socialeventid = '$evid'";
- $upd = $connection->exec($updse);
- if ($upd != 1)
- throw new Exception("Error updating event with image locations. Update returned $updated!");
-
- }
+ $connection->exec($insertse);
+ $idres = $connection->query($cq);
+ while ($idres->next()) {
+ $eventid=$idres->get(1);
+ }
+ unset($idres);
+}else if (isset($_POST['addeventsubmitupdate'])) {
+ $updse = "update SOCIALEVENT set title='$title',description='$description',summary='$summary', submitterUserName='$usrnm',ADDRESS_addressid='$addrid',telephone='$telephone',timezone='$timezone',eventtimestamp='$eventtime',eventdate='$eventdate' where socialeventid = '$evid'";
+ $upd = $connection->exec($updse);
+ if ($upd != 1)
+ throw new Exception("Error updating event with image locations. Update returned $updated!");
+
+}
// 5. Check tags. Insert if not available and get id, then insert relationship.
- $tagList = preg_split("/[\s,]+/", trim($tags));
- //echo "TagList = ".$tagList."<br/>";
-
- foreach ($tagList as $tag) {
- if (isset($_POST['addeventsubmit'])) {
- //echo "in foreach tag=" .$tag."<br/>";
- // Try to update first.
- $updatetagcount="update SOCIALEVENTTAG set refcount = refcount + 1 where tag='$tag'";
- $count = $connection->exec($updatetagcount);
- //echo "count=".$count."<br/>";
- if ($count == 0) { // Update did not find the tag, so we insert.
- $inserttag="insert into SOCIALEVENTTAG (tag,refcount) values ('$tag',1)";
- $inserttagresult = $connection->exec($inserttag);
- $idres = $connection->query($cq);
- while ($idres->next()) {
- $tagid = $idres->get(1);
- }
- unset($idres);
- } else { // Even if we update, we still need the tagid.
- $checktag = "select socialeventtagid from SOCIALEVENTTAG where tag='$tag'";
- $checktagresult = $connection->query($checktag);
- $rowsFound = false;
- while ($checktagresult->next()) {
- $rowsFound = true;
- $tagid = $checktagresult->get(1);
- }
- unset($checktagresult);
- }
- // Now, insert relationship.
- $inserttagid = "insert into SOCIALEVENTTAG_SOCIALEVENT (socialeventtagid, socialeventid) ".
- "values ('$tagid', '$eventid')";
- $connection->exec($inserttagid);
- }
+$tagList = preg_split("/[\s,]+/", trim($tags));
+//echo "TagList = ".$tagList."<br/>";
+
+// We need to sort the tags before insert/update. Different tag sequences
+// can lead to deadlocks.
+sort($tagList);
- if (isset($_POST['addeventsubmitupdate'])) {
- //echo "in foreach tag=" .$tag."<br/>";
+foreach ($tagList as $tag) {
+ if (isset($_POST['addeventsubmit'])) {
+ //echo "in foreach tag=" .$tag."<br/>";
+ // Try to update first.
+ $updatetagcount="update SOCIALEVENTTAG set refcount = refcount + 1 where tag='$tag'";
+ $count = $connection->exec($updatetagcount);
+ //echo "count=".$count."<br/>";
+ if ($count == 0) { // Update did not find the tag, so we insert.
+ $inserttag="insert into SOCIALEVENTTAG (tag,refcount) values ('$tag',1)";
+ $inserttagresult = $connection->exec($inserttag);
+ $idres = $connection->query($cq);
+ while ($idres->next()) {
+ $tagid = $idres->get(1);
+ }
+ unset($idres);
+ } else { // Even if we update, we still need the tagid.
$checktag = "select socialeventtagid from SOCIALEVENTTAG where tag='$tag'";
- $checktagresult = $connection->query($checktag);
+ $checktagresult = $connection->query($checktag);
$rowsFound = false;
while ($checktagresult->next()) {
- $rowsFound = true;
- $tagid = $checktagresult->get(1);
- }
+ $rowsFound = true;
+ $tagid = $checktagresult->get(1);
+ }
unset($checktagresult);
- if(!$rowsFound){
- $inserttag="insert into SOCIALEVENTTAG (tag,refcount) values ('$tag',1)";
- $inserttagresult = $connection->exec($inserttag);
- $idres = $connection->query($cq);
- while ($idres->next()) {
- $tagid = $idres->get(1);
- }
- unset($idres);
- $inserttagid = "insert into SOCIALEVENTTAG_SOCIALEVENT (socialeventtagid, socialeventid) ".
+ }
+ // Now, insert relationship.
+ $inserttagid = "insert into SOCIALEVENTTAG_SOCIALEVENT (socialeventtagid, socialeventid) ".
+ "values ('$tagid', '$eventid')";
+ $connection->exec($inserttagid);
+ }
+
+ if (isset($_POST['addeventsubmitupdate'])) {
+ //echo "in foreach tag=" .$tag."<br/>";
+ $checktag = "select socialeventtagid from SOCIALEVENTTAG where tag='$tag'";
+ $checktagresult = $connection->query($checktag);
+ $rowsFound = false;
+ while ($checktagresult->next()) {
+ $rowsFound = true;
+ $tagid = $checktagresult->get(1);
+ }
+ unset($checktagresult);
+ if(!$rowsFound){
+ $inserttag="insert into SOCIALEVENTTAG (tag,refcount) values ('$tag',1)";
+ $inserttagresult = $connection->exec($inserttag);
+ $idres = $connection->query($cq);
+ while ($idres->next()) {
+ $tagid = $idres->get(1);
+ }
+ unset($idres);
+ $inserttagid = "insert into SOCIALEVENTTAG_SOCIALEVENT (socialeventtagid, socialeventid) ".
"values ('$tagid', '$evid')";
$connection->exec($inserttagid);
- }
}
+ }
+}
+
+// 6. Insert submitter to the event attendee list.
+if (isset($_POST['addeventsubmit'])) {
+ $insertPS = "insert into PERSON_SOCIALEVENT values('$usrnm','$eventid')";
+ $connection->exec($insertPS);
+}
+
+// 7. Determine image and thumbnail file names.
+$default_image = false;
+if ($image_name != "") {
+ $pos=strpos($image_name,'.');
+ $img_ext = substr($image_name,$pos,strlen($image_name));
+ if (isset($_POST['addeventsubmit'])) {
+ $modified_image_name = "E".$eventid.$img_ext;
+ }else if (isset($_POST['addeventsubmitupdate'])) {
+ $modified_image_name = "E".$evid.$img_ext;
+ }
+ if (isset($_POST['addeventsubmit'])) {
+ $imagethumb = "E".$eventid."T".$img_ext;
+ }else if (isset($_POST['addeventsubmitupdate'])) {
+ $imagethumb = "E".$evid."T".$img_ext;
+ }
+} else {
+ if (isset($_POST['addeventsubmit'])) {
+ $default_image = true;
+ $modified_image_name = "";
+ $imagethumb = "";
+ }else if (isset($_POST['addeventsubmitupdate'])) {
+ $imgq = "select imageurl,imagethumburl from SOCIALEVENT where socialeventid='$evid'";
+ $imgqresult = $connection->query($imgq);
+ while ($imgqresult->next()) {
+ $modified_image_name = $imgqresult->get(1);
+ $imagethumb = $imgqresult->get(2);
}
-
-// 6. Generate thumbnail and save images to file storage
- if ($image_name != "") {
- $pos=strpos($image_name,'.');
- $img_ext = substr($image_name,$pos,strlen($image_name));
- if (isset($_POST['addeventsubmit'])) {
- $modified_image_name = "E".$eventid.$img_ext;
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $modified_image_name = "E".$evid.$img_ext;
- }
- $resourcedir = '/tmp/';
- $user_image_location = $resourcedir . $modified_image_name;
- if (!move_uploaded_file($_FILES['upload_image']['tmp_name'], $user_image_location)) {
- throw new Exception("Error moving uploaded file to $modified_image_name");
- }
- if (isset($_POST['addeventsubmit'])) {
- $imagethumb = "E".$eventid."T".$img_ext;
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $imagethumb = "E".$evid."T".$img_ext;
- }
- $thumb_location = $resourcedir . $imagethumb;
- ImageUtil::createThumb($user_image_location, $thumb_location, 133, 99);
- if (!isset($fs))
- $fs = FileSystem::getInstance();
- $fs->create($user_image_location, "NO_OP", "NO_OP");
- $fs->create($thumb_location, "NO_OP", "NO_OP");
- unlink($user_image_location);
- unlink($thumb_location);
- } else {
- if (isset($_POST['addeventsubmit'])) {
- $modified_image_name ="business-walker.jpg";
- $imagethumb = "business-walker-thumb.jpg";
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $imgq = "select imageurl,imagethumburl from SOCIALEVENT where socialeventid='$evid'";
- $imgqresult = $connection->query($imgq);
- while ($imgqresult->next()) {
- $modified_image_name = $imgqresult->get(1);
- $imagethumb = $imgqresult->get(2);
- }
- unset($imgqresult);
- }
- }
-
-// 7. Save literature file to storage
- if ($literature_name != "") {
- $pos=strpos($literature_name,'.');
- $lit_ext = substr($literature_name,$pos,strlen($literature_name));
- if (isset($_POST['addeventsubmit'])) {
- $modified_literature_name="E".$eventid."L".$lit_ext;
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $modified_literature_name="E".$evid."L".$lit_ext;
- }
- $lit_resourcedir = '/tmp/';
- $upload_literature_location = $lit_resourcedir . $modified_literature_name;
- if (!move_uploaded_file($_FILES['upload_literature']['tmp_name'], $upload_literature_location)) {
- throw new Exception("Error moving uploaded file to $upload_literature_location");
- }
- if (!isset($fs))
- $fs = FileSystem::getInstance();
- $fs->create($upload_literature_location, "NO_OP", "NO_OP");
- unlink($upload_literature_location);
- }else{
- if (isset($_POST['addeventsubmit'])) {
- $modified_literature_name="business-walker.pdf";
- }else if (isset($_POST['addeventsubmitupdate'])) {
- $litq = "select literatureurl from SOCIALEVENT where socialeventid='$evid'";
- $litqresult = $connection->query($litq);
- while ($litqresult->next()) {
- $modified_literature_name=$litqresult->get(1);
- }
- unset($litqresult);
- }
- }
-
-// 8. Update the image names back to the database.
- if (isset($_POST['addeventsubmit'])) {
- $updatese = "update SOCIALEVENT set imageurl = '$modified_image_name', ".
+ unset($imgqresult);
+ }
+}
+
+// 8. Determine literature file names.
+$default_literature = false;
+if ($literature_name != "") {
+ $pos=strpos($literature_name,'.');
+ $lit_ext = substr($literature_name,$pos,strlen($literature_name));
+ if (isset($_POST['addeventsubmit'])) {
+ $modified_literature_name="E".$eventid."L".$lit_ext;
+ }else if (isset($_POST['addeventsubmitupdate'])) {
+ $modified_literature_name="E".$evid."L".$lit_ext;
+ }
+} else {
+ if (isset($_POST['addeventsubmit'])) {
+ $default_literature = true;
+ $modified_literature_name="";
+ }else if (isset($_POST['addeventsubmitupdate'])) {
+ $litq = "select literatureurl from SOCIALEVENT where socialeventid='$evid'";
+ $litqresult = $connection->query($litq);
+ while ($litqresult->next()) {
+ $modified_literature_name=$litqresult->get(1);
+ }
+ unset($litqresult);
+ }
+}
+
+// We end the DB transaction here.
+$connection->commit();
+
+// 9. Generate thumbnail and save images to file storage (outside tx)
+if ($image_name != "") {
+ $resourcedir = '/tmp/';
+ $user_image_location = $resourcedir . $modified_image_name;
+ if (!move_uploaded_file($_FILES['upload_image']['tmp_name'], $user_image_location)) {
+ throw new Exception("Error moving uploaded file to $modified_image_name");
+ }
+ $thumb_location = $resourcedir . $imagethumb;
+ ImageUtil::createThumb($user_image_location, $thumb_location, 133, 99);
+ if (!isset($fs))
+ $fs = FileSystem::getInstance();
+ if (!$fs->create($user_image_location, "NO_OP", "NO_OP")) {
+ error_log("Error copying image " . $user_image_location);
+ }
+ if (!$fs->create($thumb_location, "NO_OP", "NO_OP")) {
+ error_log("Error copying thumb " . $thumb_location);
+ }
+ unlink($user_image_location);
+ unlink($thumb_location);
+}
+
+// 10. Save literature file to storage
+if ($literature_name != "") {
+ $lit_resourcedir = '/tmp/';
+ $upload_literature_location = $lit_resourcedir . $modified_literature_name;
+ if (!move_uploaded_file($_FILES['upload_literature']['tmp_name'], $upload_literature_location)) {
+ throw new Exception("Error moving uploaded file to $upload_literature_location");
+ }
+ if (!isset($fs))
+ $fs = FileSystem::getInstance();
+ if (!$fs->create($upload_literature_location, "NO_OP", "NO_OP")) {
+ error_log("Error copying literature " . $upload_literature_location);
+ }
+ unlink($upload_literature_location);
+}
+
+
+// 11. Update the image names back to the database.
+// Note: this update is in it's own transaction, after the images are
+// properly stored. It is a single statement transaction and with autocommit
+// on, we do not need to start and commit.
+if (isset($_POST['addeventsubmit'])) {
+ $updatese = "update SOCIALEVENT set imageurl = '$modified_image_name', ".
"imagethumburl = '$imagethumb', ".
"literatureurl = '$modified_literature_name' ".
"where socialeventid = '$eventid'";
- }else if (isset($_POST['addeventsubmitupdate'])) {
- //echo "imageurl = ".$modified_image_name;
- //echo "imagethumburl =".$imagethumb;
- //echo "literatureurl =".$modified_literature_name;
- //echo "evid =".$evid;
- $updatese = "update SOCIALEVENT set imageurl = '$modified_image_name', ".
+} else if (isset($_POST['addeventsubmitupdate'])) {
+ //echo "imageurl = ".$modified_image_name;
+ //echo "imagethumburl =".$imagethumb;
+ //echo "literatureurl =".$modified_literature_name;
+ //echo "evid =".$evid;
+ $updatese = "update SOCIALEVENT set imageurl = '$modified_image_name', ".
"imagethumburl = '$imagethumb', ".
"literatureurl = '$modified_literature_name' ".
"where socialeventid = '$evid'";
- }
- $updated = $connection->exec($updatese);
- //echo "Updated =".$updated;
-
-// 9. Insert submitter to the event attendee list.
- if (isset($_POST['addeventsubmit'])) {
- $insertPS = "insert into PERSON_SOCIALEVENT values('$usrnm','$eventid')";
- $connection->exec($insertPS);
- }
-$connection->commit();
-
+}
+
+$updated = $connection->exec($updatese);
+
+// 12. Redirect the results.
if (isset($_POST['addeventsubmit'])) {
- header("Location:events.php?socialEventID=".$eventid);
+ header("Location:events.php?socialEventID=".$eventid);
}else if (isset($_POST['addeventsubmitupdate'])) {
- header("Location:events.php?socialEventID=".$evid);
+ header("Location:events.php?socialEventID=".$evid);
}
-
?>