Bug 5010: Fix OPACBaseURL to include protocol
[srvgit] / C4 / Suggestions.pm
index c55968a..8fa5a85 100644 (file)
@@ -5,30 +5,31 @@ package C4::Suggestions;
 #
 # This file is part of Koha.
 #
-# Koha is free software; you can redistribute it and/or modify it under the
-# terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
+# Koha is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
 #
-# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
-# A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
+# Koha is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
 #
-# You should have received a copy of the GNU General Public License along
-# with Koha; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 use strict;
 
 #use warnings; FIXME - Bug 2505
-use CGI;
+use CGI qw ( -utf8 );
 
 use C4::Context;
 use C4::Output;
 use C4::Dates qw(format_date format_date_in_iso);
-use C4::SQLHelper qw(:all);
 use C4::Debug;
 use C4::Letters;
+use Koha::DateUtils qw( dt_from_string );
+
 use List::MoreUtils qw(any);
 use C4::Dates qw(format_date_in_iso);
 use base qw(Exporter);
@@ -100,6 +101,7 @@ sub SearchSuggestion {
             B1.branchname       AS branchnamesuggestedby,
             U1.surname          AS surnamesuggestedby,
             U1.firstname        AS firstnamesuggestedby,
+            U1.cardnumber       AS cardnumbersuggestedby,
             U1.email            AS emailsuggestedby,
             U1.borrowernumber   AS borrnumsuggestedby,
             U1.categorycode     AS categorycodesuggestedby,
@@ -132,10 +134,10 @@ sub SearchSuggestion {
     }
 
     # filter on user branch
-    if ( C4::Context->preference('IndependantBranches') ) {
+    if ( C4::Context->preference('IndependentBranches') ) {
         my $userenv = C4::Context->userenv;
         if ($userenv) {
-            if ( ( $userenv->{flags} % 2 ) != 1 && !$suggestion->{branchcode} )
+            if ( !C4::Context->IsSuperLibrarian() && !$suggestion->{branchcode} )
             {
                 push @sql_params, $$userenv{branch};
                 push @query,      q{
@@ -157,16 +159,17 @@ sub SearchSuggestion {
         qw( STATUS itemtype suggestedby managedby acceptedby budgetid biblionumber )
       )
     {
-        if ( exists $suggestion->{$field} ) {
-            if ( defined $suggestion->{$field} and $suggestion->{$field} ne '' )
-            {
-                push @sql_params, $suggestion->{$field};
-                push @query,      qq{ AND suggestions.$field=? };
+        if ( exists $suggestion->{$field}
+                and defined $suggestion->{$field}
+                and $suggestion->{$field} ne '__ANY__'
+                and $suggestion->{$field} ne q||
+        ) {
+            if ( $suggestion->{$field} eq '__NONE__' ) {
+                push @query, qq{ AND (suggestions.$field = '' OR suggestions.$field IS NULL) };
             }
             else {
-                push @query, qq{
-                    AND (suggestions.$field='' OR suggestions.$field IS NULL)
-                };
+                push @sql_params, $suggestion->{$field};
+                push @query, qq{ AND suggestions.$field = ? };
             }
         }
     }
@@ -201,9 +204,9 @@ sub SearchSuggestion {
 
 =head2 GetSuggestion
 
-\%sth = &GetSuggestion($ordernumber)
+\%sth = &GetSuggestion($suggestionid)
 
-this function get the detail of the suggestion $ordernumber (input arg)
+this function get the detail of the suggestion $suggestionid (input arg)
 
 return :
     the result of the SQL query as a hash : $sth->fetchrow_hashref.
@@ -211,7 +214,7 @@ return :
 =cut
 
 sub GetSuggestion {
-    my ($ordernumber) = @_;
+    my ($suggestionid) = @_;
     my $dbh           = C4::Context->dbh;
     my $query         = q{
         SELECT *
@@ -219,7 +222,7 @@ sub GetSuggestion {
         WHERE  suggestionid=?
     };
     my $sth = $dbh->prepare($query);
-    $sth->execute($ordernumber);
+    $sth->execute($suggestionid);
     return ( $sth->fetchrow_hashref );
 }
 
@@ -339,10 +342,10 @@ sub GetSuggestionByStatus {
     };
 
     # filter on branch
-    if ( C4::Context->preference("IndependantBranches") || $branchcode ) {
+    if ( C4::Context->preference("IndependentBranches") || $branchcode ) {
         my $userenv = C4::Context->userenv;
         if ($userenv) {
-            unless ( $userenv->{flags} % 2 == 1 ) {
+            unless ( C4::Context->IsSuperLibrarian() ) {
                 push @sql_params, $userenv->{branch};
                 $query .= q{ AND (U1.branchcode = ? OR U1.branchcode ='') };
             }
@@ -352,7 +355,7 @@ sub GetSuggestionByStatus {
             $query .= q{ AND (U1.branchcode = ? OR U1.branchcode ='') };
         }
     }
-    
+
     my $sth = $dbh->prepare($query);
     $sth->execute(@sql_params);
     my $results;
@@ -389,8 +392,8 @@ sub CountSuggestion {
     my $dbh = C4::Context->dbh;
     my $sth;
     my $userenv = C4::Context->userenv;
-    if ( C4::Context->preference("IndependantBranches")
-        && $userenv->{flags} % 2 != 1 )
+    if ( C4::Context->preference("IndependentBranches")
+        && !C4::Context->IsSuperLibrarian() )
     {
         my $query = q{
             SELECT count(*)
@@ -426,8 +429,27 @@ Insert a new suggestion on database with value given on input arg.
 
 sub NewSuggestion {
     my ($suggestion) = @_;
+
+    for my $field ( qw(
+        suggestedby
+        managedby
+        manageddate
+        acceptedby
+        accepteddate
+        rejectedby
+        rejecteddate
+        budgetid
+    ) ) {
+        # Set the fields to NULL if not given.
+        $suggestion->{$field} ||= undef;
+    }
+
     $suggestion->{STATUS} = "ASKED" unless $suggestion->{STATUS};
-    return InsertInTable( "suggestions", $suggestion );
+
+    $suggestion->{suggesteddate} = dt_from_string unless $suggestion->{suggesteddate};
+
+    my $rs = Koha::Database->new->schema->resultset('Suggestion');
+    return $rs->create($suggestion)->id;
 }
 
 =head2 ModSuggestion
@@ -436,16 +458,40 @@ sub NewSuggestion {
 
 Modify the suggestion according to the hash passed by ref.
 The hash HAS to contain suggestionid
-Data not defined is not updated unless it is a note or sort1 
+Data not defined is not updated unless it is a note or sort1
 Send a mail to notify the user that did the suggestion.
 
-Note that there is no function to modify a suggestion. 
+Note that there is no function to modify a suggestion.
 
 =cut
 
 sub ModSuggestion {
     my ($suggestion) = @_;
-    my $status_update_table = UpdateInTable( "suggestions", $suggestion );
+    return unless( $suggestion and defined($suggestion->{suggestionid}) );
+
+    for my $field ( qw(
+        suggestedby
+        managedby
+        manageddate
+        acceptedby
+        accepteddate
+        rejectedby
+        rejecteddate
+        budgetid
+    ) ) {
+        # Set the fields to NULL if not given.
+        $suggestion->{$field} = undef
+          if exists $suggestion->{$field}
+          and ($suggestion->{$field} eq '0'
+            or $suggestion->{$field} eq '' );
+    }
+
+    my $rs = Koha::Database->new->schema->resultset('Suggestion')->find($suggestion->{suggestionid});
+    my $status_update_table = 1;
+    eval {
+        $rs->update($suggestion);
+    };
+    $status_update_table = 0 if( $@ );
 
     if ( $suggestion->{STATUS} ) {
 
@@ -533,9 +579,9 @@ sub DelSuggestion {
 
 =head2 DelSuggestionsOlderThan
     &DelSuggestionsOlderThan($days)
-    
+
     Delete all suggestions older than TODAY-$days , that have be accepted or rejected.
-    
+
 =cut
 
 sub DelSuggestionsOlderThan {