| Lines 19-25
          package C4::Context;
      
      
        Link Here | 
        
          | 19 |  | 19 |  | 
        
          | 20 | use Modern::Perl; | 20 | use Modern::Perl; | 
        
          | 21 |  | 21 |  | 
          
            
              | 22 | use vars qw($AUTOLOAD $context @context_stack); | 22 | use vars qw($AUTOLOAD $context); | 
        
          | 23 | BEGIN { | 23 | BEGIN { | 
        
          | 24 |     if ( $ENV{'HTTP_USER_AGENT'} ) { # Only hit when plack is not enabled | 24 |     if ( $ENV{'HTTP_USER_AGENT'} ) { # Only hit when plack is not enabled | 
        
          | 25 |  | 25 |  | 
  
    | Lines 79-96
          This module takes care of setting up the context for a script:
      
      
        Link Here | 
        
          | 79 | figuring out which configuration file to load, and loading it, opening | 79 | figuring out which configuration file to load, and loading it, opening | 
        
          | 80 | a connection to the right database, and so forth. | 80 | a connection to the right database, and so forth. | 
        
          | 81 |  | 81 |  | 
            
              | 82 | Most scripts will only use one context. They can simply have |  |  | 
            
              | 83 |  | 
            
              | 84 |   use C4::Context; | 
            
              | 85 |  | 
            
              | 86 | at the top. | 
            
              | 87 |  | 
            
              | 88 | Other scripts may need to use several contexts. For instance, if a | 
            
              | 89 | library has two databases, one for a certain collection, and the other | 
            
              | 90 | for everything else, it might be necessary for a script to use two | 
            
              | 91 | different contexts to search both databases. Such scripts should use | 
            
              | 92 | the C<&set_context> and C<&restore_context> functions, below. | 
            
              | 93 |  | 
        
          | 94 | By default, C4::Context reads the configuration from | 82 | By default, C4::Context reads the configuration from | 
        
          | 95 | F</etc/koha/koha-conf.xml>. This may be overridden by setting the C<$KOHA_CONF> | 83 | F</etc/koha/koha-conf.xml>. This may be overridden by setting the C<$KOHA_CONF> | 
        
          | 96 | environment variable to the pathname of a configuration file to use. | 84 | environment variable to the pathname of a configuration file to use. | 
  
    | Lines 116-122
          environment variable to the pathname of a configuration file to use.
      
      
        Link Here | 
        
          | 116 | #     A connection object for the Zebra server | 104 | #     A connection object for the Zebra server | 
        
          | 117 |  | 105 |  | 
        
          | 118 | $context = undef;        # Initially, no context is set | 106 | $context = undef;        # Initially, no context is set | 
            
              | 119 | @context_stack = ();        # Initially, no saved contexts |  |  | 
        
          | 120 |  | 107 |  | 
        
          | 121 | sub import { | 108 | sub import { | 
        
          | 122 |     # Create the default context ($C4::Context::Context) | 109 |     # Create the default context ($C4::Context::Context) | 
  
    | Lines 196-209
          sub new {
      
      
        Link Here | 
        
          | 196 | or | 183 | or | 
        
          | 197 |   set_context C4::Context $context; | 184 |   set_context C4::Context $context; | 
        
          | 198 |  | 185 |  | 
            
              | 199 |   ... |  |  | 
            
              | 200 |   restore_context C4::Context; | 
            
              | 201 |  | 
            
              | 202 | In some cases, it might be necessary for a script to use multiple | 
            
              | 203 | contexts. C<&set_context> saves the current context on a stack, then | 
            
              | 204 | sets the context to C<$context>, which will be used in future | 
            
              | 205 | operations. To restore the previous context, use C<&restore_context>. | 
            
              | 206 |  | 
        
          | 207 | =cut | 186 | =cut | 
        
          | 208 |  | 187 |  | 
        
          | 209 | #' | 188 | #' | 
  
    | Lines 230-268
          sub set_context
      
      
        Link Here | 
        
          | 230 |         $new_context = $self; | 209 |         $new_context = $self; | 
        
          | 231 |     } | 210 |     } | 
        
          | 232 |  | 211 |  | 
            
              | 233 |     # Save the old context, if any, on the stack |  |  | 
            
              | 234 |     push @context_stack, $context if defined($context); | 
            
              | 235 |  | 
        
          | 236 |     # Set the new context | 212 |     # Set the new context | 
        
          | 237 |     $context = $new_context; | 213 |     $context = $new_context; | 
        
          | 238 | } | 214 | } | 
        
          | 239 |  | 215 |  | 
            
              | 240 | =head2 restore_context |  |  | 
            
              | 241 |  | 
            
              | 242 |   &restore_context; | 
            
              | 243 |  | 
            
              | 244 | Restores the context set by C<&set_context>. | 
            
              | 245 |  | 
            
              | 246 | =cut | 
            
              | 247 |  | 
            
              | 248 | #' | 
            
              | 249 | sub restore_context | 
            
              | 250 | { | 
            
              | 251 |     my $self = shift; | 
            
              | 252 |  | 
            
              | 253 |     if ($#context_stack < 0) | 
            
              | 254 |     { | 
            
              | 255 |         # Stack underflow. | 
            
              | 256 |         die "Context stack underflow"; | 
            
              | 257 |     } | 
            
              | 258 |  | 
            
              | 259 |     # Pop the old context and set it. | 
            
              | 260 |     $context = pop @context_stack; | 
            
              | 261 |  | 
            
              | 262 |     # FIXME - Should this return something, like maybe the context | 
            
              | 263 |     # that was current when this was called? | 
            
              | 264 | } | 
            
              | 265 |  | 
        
          | 266 | =head2 config | 216 | =head2 config | 
        
          | 267 |  | 217 |  | 
        
          | 268 |   $value = C4::Context->config("config_variable"); | 218 |   $value = C4::Context->config("config_variable"); | 
  
    | Lines 699-707
          sub new_dbh
      
      
        Link Here | 
        
          | 699 |   ... | 649 |   ... | 
        
          | 700 |   C4::Connect->restore_dbh; | 650 |   C4::Connect->restore_dbh; | 
        
          | 701 |  | 651 |  | 
            
              | 702 | C<&set_dbh> and C<&restore_dbh> work in a manner analogous to |  |  | 
            
              | 703 | C<&set_context> and C<&restore_context>. | 
            
              | 704 |  | 
        
          | 705 | C<&set_dbh> saves the current database handle on a stack, then sets | 652 | C<&set_dbh> saves the current database handle on a stack, then sets | 
        
          | 706 | the current database handle to C<$my_dbh>. | 653 | the current database handle to C<$my_dbh>. | 
        
          | 707 |  | 654 |  | 
  
    | Lines 745-753
          sub restore_dbh
      
      
        Link Here | 
        
          | 745 |  | 692 |  | 
        
          | 746 |     # Pop the old database handle and set it. | 693 |     # Pop the old database handle and set it. | 
        
          | 747 |     $context->{"dbh"} = pop @{$context->{"dbh_stack"}}; | 694 |     $context->{"dbh"} = pop @{$context->{"dbh_stack"}}; | 
            
              | 748 |  |  |  | 
            
              | 749 |     # FIXME - If it is determined that restore_context should | 
            
              | 750 |     # return something, then this function should, too. | 
        
          | 751 | } | 695 | } | 
        
          | 752 |  | 696 |  | 
        
          | 753 | =head2 userenv | 697 | =head2 userenv |