diff --git a/docs/changelog/6.x.x.txt b/docs/changelog/6.x.x.txt index 4d0b46244..1ae48dc4f 100644 --- a/docs/changelog/6.x.x.txt +++ b/docs/changelog/6.x.x.txt @@ -39,6 +39,8 @@ - Bugfix: [ 995088 ] Error in printable macro 6.1.1 - Bugfix: [ 1003511 ] Users cannot be added to Registered Users if removed - Bugfix: [ 996592 ] Fixed Infinite loop in Page.pm makeUnique in 6.1.1 + - Converted all IDs to use global unique ids rather than incremented ids as + they were in the past. 6.1.1 diff --git a/lib/WebGUI/Wobject.pm b/lib/WebGUI/Wobject.pm index 866372642..4c0c872fe 100644 --- a/lib/WebGUI/Wobject.pm +++ b/lib/WebGUI/Wobject.pm @@ -523,14 +523,11 @@ sub moveCollateralDown { unless (defined $setValue) { $setValue = $_[0]->get($setName); } - ($seq) = WebGUI::SQL->quickArray("select sequenceNumber from $_[1] where $_[2]=$_[3] and $setName=".quote($setValue)); - ($id) = WebGUI::SQL->quickArray("select $_[2] from $_[1] where $setName=".quote($setValue) - ." and sequenceNumber=$seq+1"); + ($seq) = WebGUI::SQL->quickArray("select sequenceNumber from $_[1] where $_[2]=".quote($_[3])." and $setName=".quote($setValue)); + ($id) = WebGUI::SQL->quickArray("select $_[2] from $_[1] where $setName=".quote($setValue)." and sequenceNumber=$seq+1"); if ($id ne "") { - WebGUI::SQL->write("update $_[1] set sequenceNumber=sequenceNumber+1 where $_[2]=".quote($_[3])." and $setName=" - .quote($setValue)); - WebGUI::SQL->write("update $_[1] set sequenceNumber=sequenceNumber-1 where $_[2]=".quote($id)." and $setName=" - .quote($setValue)); + WebGUI::SQL->write("update $_[1] set sequenceNumber=sequenceNumber+1 where $_[2]=".quote($_[3])." and $setName=" .quote($setValue)); + WebGUI::SQL->write("update $_[1] set sequenceNumber=sequenceNumber-1 where $_[2]=".quote($id)." and $setName=" .quote($setValue)); } } diff --git a/lib/WebGUI/Wobject/DataForm.pm b/lib/WebGUI/Wobject/DataForm.pm index 309c42b17..96766ba96 100644 --- a/lib/WebGUI/Wobject/DataForm.pm +++ b/lib/WebGUI/Wobject/DataForm.pm @@ -109,7 +109,7 @@ sub _tabAdminIcons { #------------------------------------------------------------------- sub _createTabInit { my $wid = $_[0]; - my @tabCount = WebGUI::SQL->quickArray("select count(DataForm_tabId) from DataForm_tab where wobjectId=$wid"); + my @tabCount = WebGUI::SQL->quickArray("select count(DataForm_tabId) from DataForm_tab where wobjectId=".quote($wid)); my $output = ''; return $output; } @@ -120,7 +120,7 @@ sub duplicate { tie %data, 'Tie::CPHash'; $w = $_[0]->SUPER::duplicate($_[1]); $w = WebGUI::Wobject::DataForm->new({wobjectId=>$w,namespace=>$_[0]->get("namespace")}); - $sth = WebGUI::SQL->read("select * from DataForm_field where wobjectId=".$_[0]->get("wobjectId")); + $sth = WebGUI::SQL->read("select * from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))); while (%data = $sth->hash) { $data{DataForm_fieldId} = "new"; $w->setCollateral("DataForm_field","DataForm_fieldId",\%data); @@ -157,8 +157,8 @@ sub getIndexerParams { fieldsToIndex => ["label", "subtext", "possibleValues"], contentType => 'wobjectDetail', url => '$data{urlizedTitle}."#".$data{wid}', - headerShortcut => 'select label from DataForm_field where DataForm_fieldId = $data{fid}', - bodyShortcut => 'select subtext from DataForm_field where DataForm_fieldId = $data{fid}', + headerShortcut => 'select label from DataForm_field where DataForm_fieldId = \'$data{fid}\'', + bodyShortcut => 'select subtext from DataForm_field where DataForm_fieldId = \'$data{fid}\'', }, DataForm_entryData => { sql => "select distinct(DataForm_entryData.wobjectId) as wid, @@ -177,10 +177,10 @@ sub getIndexerParams { and wobject.endDate > $now and page.startDate < $now and page.endDate > $now", - fieldsToIndex => ['select distinct(value) from DataForm_entryData where wobjectId = $data{wid}'], + fieldsToIndex => ['select distinct(value) from DataForm_entryData where wobjectId = \'$data{wid}\''], contentType => 'wobjectDetail', url => 'WebGUI::URL::append($data{urlizedTitle}, "func=view&entryId=list&wid=$data{wid}")', - headerShortcut => 'select title from wobject where wobjectId = $data{wid}', + headerShortcut => 'select title from wobject where wobjectId = \'$data{wid}\'', } }; } @@ -194,7 +194,7 @@ sub getListTemplateVars { $var->{"back.url"} = WebGUI::URL::page(); $var->{"back.label"} = WebGUI::International::get(18,$self->get("namespace")); my $a = WebGUI::SQL->read("select DataForm_fieldId,name,label,isMailField,type from DataForm_field - where wobjectId=".$self->get("wobjectId")." order by sequenceNumber"); + where wobjectId=".quote($self->get("wobjectId"))." order by sequenceNumber"); while (my $field = $a->hashRef) { push(@fieldLoop,{ "field.name"=>$field->{name}, @@ -208,11 +208,11 @@ sub getListTemplateVars { $var->{field_loop} = \@fieldLoop; my @recordLoop; my $a = WebGUI::SQL->read("select ipAddress,username,userid,submissionDate,DataForm_entryId from DataForm_entry - where wobjectId=".$self->get("wobjectId")." order by submissionDate desc"); + where wobjectId=".quote($self->get("wobjectId"))." order by submissionDate desc"); while (my $record = $a->hashRef) { my @dataLoop; my $b = WebGUI::SQL->read("select b.name, b.label, b.isMailField, a.value from DataForm_entryData a left join DataForm_field b - on a.DataForm_fieldId=b.DataForm_fieldId where a.DataForm_entryId=".$record->{DataForm_entryId}." + on a.DataForm_fieldId=b.DataForm_fieldId where a.DataForm_entryId=".quote($record->{DataForm_entryId})." order by b.sequenceNumber"); while (my $data = $b->hashRef) { push(@dataLoop,{ @@ -265,7 +265,7 @@ sub getRecordTemplateVars { my @tabs; my $select = "select a.name, a.DataForm_fieldId, a.DataForm_tabId,a.label, a.status, a.isMailField, a.subtext, a.type, a.defaultValue, a.possibleValues, a.width, a.rows, a.extras, a.vertical"; my $join; - my $where = "where a.wobjectId=".$self->get("wobjectId"); + my $where = "where a.wobjectId=".quote($self->get("wobjectId")); if ($var->{entryId}) { $var->{"form.start"} .= WebGUI::Form::hidden({name=>"entryId",value=>$var->{entryId}}); my $entry = $self->getCollateral("DataForm_entry","DataForm_entryId",$var->{entryId}); @@ -275,7 +275,7 @@ sub getRecordTemplateVars { $var->{date} = WebGUI::DateTime::epochToHuman($entry->{submissionDate}); $var->{epoch} = $entry->{submissionDate}; $var->{"edit.URL"} = WebGUI::URL::page('func=view&wid='.$self->get("wobjectId").'&entryId='.$var->{entryId}); - $where .= " and b.DataForm_entryId=".$var->{entryId}; + $where .= " and b.DataForm_entryId=".quote($var->{entryId}); $join = "left join DataForm_entryData as b on a.DataForm_fieldId=b.DataForm_fieldId"; $select .= ", b.value"; } @@ -283,10 +283,10 @@ sub getRecordTemplateVars { tie %data, 'Tie::CPHash'; my %tab; tie %tab, 'Tie::CPHash'; - my $tabsth = WebGUI::SQL->read("select * from DataForm_tab where wobjectId=".$self->get("wobjectId")." order by sequenceNumber"); + my $tabsth = WebGUI::SQL->read("select * from DataForm_tab where wobjectId=".quote($self->get("wobjectId"))." order by sequenceNumber"); while (%tab = $tabsth->hash) { my @fields; - my $sth = WebGUI::SQL->read("$select from DataForm_field as a $join $where and a.DataForm_tabId=".$tab{DataForm_tabId}." order by a.sequenceNumber"); + my $sth = WebGUI::SQL->read("$select from DataForm_field as a $join $where and a.DataForm_tabId=".quote($tab{DataForm_tabId})." order by a.sequenceNumber"); while (%data = $sth->hash) { my $formValue = $session{form}{$data{name}}; if ((not exists $data{value}) && $session{form}{func} ne "editSave" && $session{form}{func} ne "editFieldSave" && defined $formValue) { @@ -405,10 +405,10 @@ sub new { #------------------------------------------------------------------- sub purge { - WebGUI::SQL->write("delete from DataForm_field where wobjectId=".$_[0]->get("wobjectId")); - WebGUI::SQL->write("delete from DataForm_entry where wobjectId=".$_[0]->get("wobjectId")); - WebGUI::SQL->write("delete from DataForm_entryData where wobjectId=".$_[0]->get("wobjectId")); - WebGUI::SQL->write("delete from DataForm_tab where wobjectId=".$_[0]->get("wobjectId")); + WebGUI::SQL->write("delete from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))); + WebGUI::SQL->write("delete from DataForm_entry where wobjectId=".quote($_[0]->get("wobjectId"))); + WebGUI::SQL->write("delete from DataForm_entryData where wobjectId=".quote($_[0]->get("wobjectId"))); + WebGUI::SQL->write("delete from DataForm_tab where wobjectId=".quote($_[0]->get("wobjectId"))); $_[0]->SUPER::purge(); } @@ -625,9 +625,9 @@ sub www_editField { ); $session{form}{fid} = "new" if ($session{form}{fid} eq ""); unless ($session{form}{fid} eq "new") { - %field = WebGUI::SQL->quickHash("select * from DataForm_field where DataForm_fieldId=$session{form}{fid}"); + %field = WebGUI::SQL->quickHash("select * from DataForm_field where DataForm_fieldId=".quote($session{form}{fid})); } - $tab = WebGUI::SQL->buildHashRef("select DataForm_tabId,label from DataForm_tab where wobjectId=".$_[0]->get("wobjectId")); + $tab = WebGUI::SQL->buildHashRef("select DataForm_tabId,label from DataForm_tab where wobjectId=".quote($_[0]->get("wobjectId"))); $output = helpIcon("data form fields add/edit",$_[0]->get("namespace")); $output .= '

'.WebGUI::International::get(20,$_[0]->get("namespace")).'

'; $f = WebGUI::HTMLForm->new; @@ -754,7 +754,7 @@ sub www_editTab { $session{form}{tid} = "new" if ($session{form}{tid} eq ""); unless ($session{form}{tid} eq "new") { - %tab = WebGUI::SQL->quickHash("select * from DataForm_tab where DataForm_tabId=$session{form}{tid}"); + %tab = WebGUI::SQL->quickHash("select * from DataForm_tab where DataForm_tabId=".quote($session{form}{tid})); } $output = helpIcon("data form fields add/edit",$_[0]->get("namespace")); $output .= '

'.WebGUI::International::get(20,$_[0]->get("namespace")).'

'; @@ -811,11 +811,11 @@ sub www_editTabSave { sub www_exportTab { return WebGUI::Privilege::insufficient() unless ($_[0]->canEdit); WebGUI::HTTP::setFilename(WebGUI::URL::urlize($_[0]->get("title")).".tab","text/plain"); - my %fields = WebGUI::SQL->buildHash("select DataForm_fieldId,name from DataForm_field where wobjectId=".$_[0]->get("wobjectId")." order by sequenceNumber"); + my %fields = WebGUI::SQL->buildHash("select DataForm_fieldId,name from DataForm_field where wobjectId=".quote($_[0]->get("wobjectId"))." order by sequenceNumber"); my $select = "select a.DataForm_entryId as entryId, a.ipAddress, a.username, a.userId, a.submissionDate"; my $from = " from DataForm_entry a"; my $join; - my $where = " where a.wobjectId=".$_[0]->get("wobjectId"); + my $where = " where a.wobjectId=".quote($_[0]->get("wobjectId")); my $orderBy = " order by a.DataForm_entryId"; my $columnCounter = "b"; foreach my $fieldId (keys %fields) { @@ -871,7 +871,7 @@ sub www_process { $var->{entryId} = $entryId; tie %row, "Tie::CPHash"; my $sth = WebGUI::SQL->read("select DataForm_fieldId,label,name,status,type,defaultValue,isMailField from DataForm_field - where wobjectId=".$_[0]->get("wobjectId")." order by sequenceNumber"); + where wobjectId=".quote($_[0]->get("wobjectId"))." order by sequenceNumber"); while (%row = $sth->hash) { my $value = $row{defaultValue}; if ($row{status} eq "required" || $row{status} eq "editable") { @@ -889,7 +889,7 @@ sub www_process { $value = WebGUI::Macro::process($row{defaultValue}); } unless ($hadErrors) { - my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=$entryId + my ($exists) = WebGUI::SQL->quickArray("select count(*) from DataForm_entryData where DataForm_entryId=".quote($entryId)." and DataForm_fieldId=".quote($row{DataForm_fieldId})); if ($exists) { WebGUI::SQL->write("update DataForm_entryData set value=".quote($value)." diff --git a/lib/WebGUI/Wobject/EventsCalendar.pm b/lib/WebGUI/Wobject/EventsCalendar.pm index 6a72f669c..d07210365 100644 --- a/lib/WebGUI/Wobject/EventsCalendar.pm +++ b/lib/WebGUI/Wobject/EventsCalendar.pm @@ -16,6 +16,7 @@ use WebGUI::DateTime; use WebGUI::FormProcessor; use WebGUI::HTMLForm; use WebGUI::Icon; +use WebGUI::Id; use WebGUI::International; use WebGUI::Paginator; use WebGUI::Privilege; @@ -36,9 +37,9 @@ sub duplicate { $sth = WebGUI::SQL->read("select * from EventsCalendar_event where wobjectId=" .$_[0]->get("wobjectId")." order by EventsCalendar_recurringId"); while (@row = $sth->array) { - $newEventId = getNextId("EventsCalendar_eventId"); + $newEventId = WebGUI::Id::generate(); if ($row[6] > 0 && $row[6] != $previousRecurringEventId) { - $row[6] = getNextId("EventsCalendar_recurringId"); + $row[6] = WebGUI::Id::generate(); $previousRecurringEventId = $row[6]; } WebGUI::SQL->write("insert into EventsCalendar_event values (".quote($newEventId).", ".$w.", ". @@ -315,18 +316,18 @@ sub www_editEventSave { $endDate[0] = $startDate[0] unless ($endDate[0] >= $startDate[0]); if ($session{form}{eid} eq "new") { $session{form}{name} = $session{form}{name} || "unnamed"; - $session{form}{eid} = getNextId("EventsCalendar_eventId"); + $session{form}{eid} = WebGUI::Id::generate(); $until = WebGUI::FormProcessor::date("until"); $until = $endDate[0] unless ($until >= $endDate[0]); - $eventId[0] = getNextId("EventsCalendar_eventId"); + $eventId[0] = WebGUI::Id::generate(); $session{form}{interval} = 1 if ($session{form}{interval} < 1); if ($session{form}{recursEvery} eq "never") { $recurringEventId = 0; } else { - $recurringEventId = getNextId("EventsCalendar_recurringId"); + $recurringEventId = WebGUI::Id::generate(); while ($startDate[$i] < $until) { $i++; - $eventId[$i] = getNextId("EventsCalendar_eventId"); + $eventId[$i] = WebGUI::Id::generate(); if ($session{form}{recursEvery} eq "day") { $startDate[$i] = addToDate($startDate[0],0,0,($i*$session{form}{interval})); $endDate[$i] = addToDate($endDate[0],0,0,($i*$session{form}{interval})); @@ -344,11 +345,11 @@ sub www_editEventSave { } $i = 0; while ($eventId[$i] > 0) { - WebGUI::SQL->write("insert into EventsCalendar_event values ($eventId[$i], + WebGUI::SQL->write("insert into EventsCalendar_event values (".quote($eventId[$i]).", ".quote($_[0]->get("wobjectId")).", ".quote($session{form}{name}).", ".quote($session{form}{description}).", - $startDate[$i], $endDate[$i], $recurringEventId)"); + $startDate[$i], $endDate[$i], ".quote($recurringEventId).")"); $i++; } } else { diff --git a/lib/WebGUI/Wobject/FileManager.pm b/lib/WebGUI/Wobject/FileManager.pm index 5f17802d9..efd8c68c4 100644 --- a/lib/WebGUI/Wobject/FileManager.pm +++ b/lib/WebGUI/Wobject/FileManager.pm @@ -17,6 +17,7 @@ use WebGUI::Grouping; use WebGUI::HTMLForm; use WebGUI::HTTP; use WebGUI::Icon; +use WebGUI::Id; use WebGUI::International; use WebGUI::Paginator; use WebGUI::Privilege; @@ -46,7 +47,7 @@ sub duplicate { $w = $_[0]->SUPER::duplicate($_[1]); $sth = WebGUI::SQL->read("select * from FileManager_file where wobjectId=".$_[0]->get("wobjectId")); while (%row = $sth->hash) { - $newDownloadId = getNextId("FileManager_fileId"); + $newDownloadId = WebGUI::Id::generate(); $file = WebGUI::Attachment->new($row{downloadFile},$_[0]->get("wobjectId"),$row{FileManager_fileId}); $file->copy($w,$newDownloadId); $file = WebGUI::Attachment->new($row{alternateVersion1},$_[0]->get("wobjectId"),$row{FileManager_fileId}); diff --git a/lib/WebGUI/Wobject/Survey.pm b/lib/WebGUI/Wobject/Survey.pm index 2fcdce536..8bf9e421a 100644 --- a/lib/WebGUI/Wobject/Survey.pm +++ b/lib/WebGUI/Wobject/Survey.pm @@ -17,6 +17,7 @@ use WebGUI::Grouping; use WebGUI::HTMLForm; use WebGUI::HTTP; use WebGUI::Icon; +use WebGUI::Id; use WebGUI::International; use WebGUI::Privilege; use WebGUI::Session; @@ -56,20 +57,20 @@ sub duplicate { my ($w, $newSurveyId, $qdata, $adata, $rdata, $a, $b, $c); $w = $_[0]->SUPER::duplicate($_[1]); $w = WebGUI::Wobject::Survey->new({wobjectId=>$w,namespace=>$_[0]->get("namespace")}); - $newSurveyId = getNextId("Survey_id"); + $newSurveyId = WebGUI::Id::generate(); $w->set({ Survey_id=>$newSurveyId }); - $a = WebGUI::SQL->read("select * from Survey_question where Survey_id=".$_[0]->get("Survey_id") + $a = WebGUI::SQL->read("select * from Survey_question where Survey_id=".quote($_[0]->get("Survey_id")) ." order by sequenceNumber"); while ($qdata = $a->hashRef) { - $b = WebGUI::SQL->read("select * from Survey_answer where Survey_questionId=".$qdata->{Survey_questionId} + $b = WebGUI::SQL->read("select * from Survey_answer where Survey_questionId=".quote($qdata->{Survey_questionId}) ." order by sequenceNumber"); $qdata->{Survey_questionId} = "new"; $qdata->{Survey_id} = $newSurveyId; $qdata->{Survey_questionId} = $w->setCollateral("Survey_question","Survey_questionId",$qdata,1,0,"Survey_id"); while ($adata = $b->hashRef) { - $c = WebGUI::SQL->read("select * from Survey_response where Survey_answerId=".$adata->{Survey_answerId}); + $c = WebGUI::SQL->read("select * from Survey_response where Survey_answerId=".quote($adata->{Survey_answerId})); $adata->{Survey_answerId} = "new"; $adata->{Survey_questionId} = $qdata->{Survey_questionId}; $adata->{Survey_id} = $newSurveyId; @@ -499,7 +500,7 @@ sub www_edit { my $properties = WebGUI::HTMLForm->new; my $layout = WebGUI::HTMLForm->new; my $privileges = WebGUI::HTMLForm->new; - $properties->hidden("Survey_id",($_[0]->get("Survey_id") || getNextId("Survey_id"))); + $properties->hidden("Survey_id",($_[0]->get("Survey_id") || WebGUI::Id::generate())); $layout->selectList( -name=>"questionOrder", -options=>{ diff --git a/lib/WebGUI/Wobject/USS.pm b/lib/WebGUI/Wobject/USS.pm index e3baa040c..6c12f0c74 100644 --- a/lib/WebGUI/Wobject/USS.pm +++ b/lib/WebGUI/Wobject/USS.pm @@ -21,6 +21,7 @@ use WebGUI::HTML; use WebGUI::HTMLForm; use WebGUI::HTTP; use WebGUI::Icon; +use WebGUI::Id; use WebGUI::International; use WebGUI::MessageLog; use WebGUI::Operation; @@ -68,7 +69,7 @@ sub duplicate { $w = WebGUI::Wobject::USS->new({wobjectId=>$w}); my $sth = WebGUI::SQL->read("select * from USS_submission where USS_id=".$_[0]->get("USS_id")); while (%row = $sth->hash) { - my $newSubmissionId = getNextId("USS_submissionId"); + my $newSubmissionId = WebGUI::Id::generate(); my $file = WebGUI::Attachment->new($row{image},$_[0]->get("wobjectId"),$row{USS_submissionId}); $file->copy($w,$newSubmissionId); $file = WebGUI::Attachment->new($row{attachment},$_[0]->get("wobjectId"),$row{USS_submissionId});