Also look in the next-highest directory when detecting VCS; add SVN
[interchange.git] / code / SystemTag / discount_space.coretag
1 # Copyright 2002-2007 Interchange Development Group and others
2
3 # This program is free software; you can redistribute it and/or modify
4 # it under the terms of the GNU General Public License as published by
5 # the Free Software Foundation; either version 2 of the License, or
6 # (at your option) any later version.  See the LICENSE file for details.
7
8 UserTag discount_space  Documentation <<EOF
9 The discount-space is rather equivalent to the values-space functionality.
10 Interchange keeps discount information in a single hash at $Vend::Session->{discount}.
11 This is fine except when you start using multiple shopping carts to represent different
12 portions of the store and fundamentally different transactions; any common item codes
13 will result in one cart's discounts leaking into that of the other cart...
14
15 Consequently, we can use a discount space to give a different namespace to various discounts.
16 This can be used in parallel with mv_cartname for different shopping carts.
17 Set up a master hash of different discount namespaces in the session. Treat the default one
18 as 'main' (like Interchange does with the cart). When discount space is called and a name
19 is given, point the $Vend::Session->{discount} to the appropriate hashref held in this master
20 hash.
21
22 Some options:
23 clear - this will empty the discounts for the space specified, after switching to that space.
24 current - this will not change the namespace; it simply returns the current space name.
25 EOF
26
27 UserTag discount_space  order      name
28 UserTag discount_space  AttrAlias  space   name
29 UserTag discount_space  AddAttr
30 UserTag discount_space  Version    1.6
31 UserTag discount_space  Routine    <<EOF
32 sub {
33         my ($namespace, $opt) = @_;
34         $namespace ||= 'main';
35 #::logDebug("Tag discount-space called for namespace '$namespace'! Clear: '$opt->{clear}' Current: '$opt->{current}'");
36
37         unless ($Vend::Session->{discount} and $Vend::Session->{discount_space}) {
38                 # Initialize the discount space hash, and just assign whatever's in
39                 # the current discount hash to it as the 'main' entry.
40                 # Furthermore, instantiate the discount hash if it doesn't already exist, otherwise
41                 # the linkage between that hashref and the discount_space hashref might break...
42 #::logDebug('Tag discount-space: initializing discount_space hash; first call to this tag for this session.');
43                 $::Discounts
44                         = $Vend::Session->{discount}
45                         = $Vend::Session->{discount_space}{$Vend::DiscountSpaceName = 'main'}
46                         ||= ($Vend::Session->{discount} || {});
47                 $Vend::Session->{discount_space}{main} = $Vend::Session->{discount} ||= {};
48         }
49
50         logError('Discount-space tag called but discount spaces are deactivated in this catalog.'), return undef
51                 unless $Vend::Cfg->{DiscountSpacesOn};
52
53         return ($Vend::DiscountSpaceName ||= 'main') if $opt->{current};
54
55         $::Discounts = $Vend::Session->{discount} = $Vend::Session->{discount_space}{$namespace} ||= {};
56         $Vend::DiscountSpaceName = $namespace;
57 #::logDebug("Tag discount-space: set discount space to '$namespace'");
58
59         %$::Discounts = () if $opt->{clear};
60
61         return undef;
62 }
63 EOF