PageSourceSearch

https://classic.ptotoday.com/components/com_store/app/software/software.controller.js?6ab4ec80cf304

js ptotoday.com collected 2026-09-24 09:26:08 UTC 3,180 bytes, 101 lines download raw bytes

1"use strict";
2angular
3  .module("sfmStore")
4  .controller("softwareController", function(
5    $stateParams,
6    $products,
7    $order,
8    $state,
9    $analytics,
10    $sfmRerouteFM,
11    prepProduct,
12    prepPackageProducts
13  ) {
14    var vm = this;
15    vm.order = $order;
16    vm.analytics = $analytics;
17    vm.profile = $order.getProfile();
18    vm.product = prepProduct.data.data;
19    vm.packageProducts = prepPackageProducts.data.data;
20    // vm.message = false;
21    // send a view_item event whenever this controller is invoked
22    dataLayer.push({ ecommerce: null });
23    dataLayer.push({
24      'event': 'view_item',
25      'ecommerce': {
26        'items': [{
27          'item_name': vm.product.title,
28          'item_id': String(vm.product.id),
29          'item_category': String(vm.product.category_id),
30          'currency': "USD",
31          'price': Number(vm.product.cost)
32        }]
33      }
34    });
35
36    $products
37    .checkSubscriptionStatus($order.getSchool().id, vm.product.id)
38    .then(function(res) {
39      var data = res.data.data || {};
40      if (data.reroute) {
41        $stateParams.isSoftReroute = data.reroute.soft;
42        $stateParams.rerouteMessage = data.reroute.message;
43        $sfmRerouteFM.showRerouteModal();
44      }
45    });
46
47    vm.addToCart = function() {
48      var item = vm.product;
49      if (vm.packageProducts.length) { item.subItems = vm.packageProducts; }
50      $products
51        .checkSubscriptionStatus($order.getSchool().id, item.id)
52        .then(function(res) {
53          var data = res.data.data || {};
54          var stateParams = {};
55          if (!angular.isUndefined(data.message) && data.message !== null) {
56            stateParams.warnings = data;
57          }
58          if (
59            !angular.isUndefined(data.allow_purchase) &&
60            data.allow_purchase
61          ) {
62            item.qty = 1;
63            stateParams.previousPage = vm.product.category_id;
64            stateParams.itemAdded = item;
65            item.renewal = data.renewal
66            item.trial = data.trial || "0"
67            var response = $order.addOrderItem(item);
68            if (response.success) {
69              dataLayer.push({ ecommerce: null });  // Clear the previous ecommerce object.
70              dataLayer.push({
71                'event': 'add_to_cart',
72                'ecommerce': {
73                  'items': [{
74                    'item_name': item.title,
75                    'item_id': String(item.id),
76                    'item_category': String(item.category_id),
77                    'quantity': item.qty
78                  }]
79                }
80              });
81            } else {
82              stateParams.itemAdded = "";
83              stateParams.cartValid = false;
84              stateParams.warnings = [
85                {
86                  message: response.error
87                }
88              ];
89            }
90            
91            $state.go("cart", stateParams);
92          } else {
93            stateParams.previousPage = vm.product.category_id;
94            stateParams.itemAdded = null;
95            $state.go("cart", stateParams);
96          }
97        });
98    };
99
100    $analytics.pushVirtualPageview(window.location.href);
101  });

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.