diff --git a/OCAPI_Settings_Examples/OCAPI_SHOP_Products_example.json b/OCAPI_Settings_Examples/OCAPI_SHOP_Products_example.json new file mode 100644 index 0000000..30cbb10 --- /dev/null +++ b/OCAPI_Settings_Examples/OCAPI_SHOP_Products_example.json @@ -0,0 +1,32 @@ +{ + "_v": "21.9a", + "clients": [ + { + "allowed_origins": [ + "http://www.sitegenesis.com", + "https://secure.sitegenesis.com" + ], + "client_id": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", + "resources": [ + { + "resource_id": "/product_search", + "methods": [ + "get" + ], + "read_attributes": "(**)", + "write_attributes": "(**)", + "cache_time": 900 + }, + { + "resource_id": "/products/*", + "methods": [ + "get" + ], + "read_attributes": "(**)", + "write_attributes": "(**)", + "cache_time": 900 + } + ] + } + ] +} \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/controllers/Cyborg.js b/the_learning_cartridge/cartridge/controllers/Cyborg.js new file mode 100644 index 0000000..73a9462 --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/Cyborg.js @@ -0,0 +1,57 @@ +'use strict'; + +var server = require('server'); +var cyborgForm = server.forms.getForm('cyborgregistrationform'); + +var Logger = require('dw/system/Logger'); +var log = Logger.getLogger('DevTest','Cyborg'); + +server.get('Start', function (req, res, next) { + + cyborgForm.clear(); + + log.info('Form loaded.'); + + res.render('cyborgTracker/registrationform', { + cyborgForm: cyborgForm, + disabled: false + }); + + next(); +}); + +server.post('HandleForm', function (req, res, next) { + + + var storageService = require('~/cartridge/scripts/storageService'); + var Transaction = require('dw/system/Transaction'); + var message = ''; + + log.info('Cyborg form handler loaded.'); + + Transaction.begin(); + try { + + var co = storageService.storeCyborgForm(cyborgForm); + + Transaction.commit(); + message = 'Form Saved'; + log.info('Cyborg form saved'); + } + catch (e){ + + Transaction.rollback(); + message = 'Failed to save'; + log.warn('Cyborg form failed to save ' + e); + } + + res.render('cyborgTracker/registrationform', { + cyborgForm: cyborgForm, + message: message, + disabled: true + }); + + next(); +}); + +module.exports = server.exports(); \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/controllers/Demo.js b/the_learning_cartridge/cartridge/controllers/Demo.js new file mode 100644 index 0000000..c98db32 --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/Demo.js @@ -0,0 +1,43 @@ +'use strict'; + +var server = require('server'); +var cache = require('*/cartridge/scripts/middleware/cache'); + +var ProductFactory = require('*/cartridge/scripts/factories/product'); +var StoreMgr = require('dw/catalog/StoreMgr'); + +var Logger = require('dw/system/Logger'); +var log = Logger.getLogger('DevTest','Cyborg'); + +server.get('Start', + cache.applyShortPromotionSensitiveCache, + function (req, res, next) { + + var params = {'pid':'sony-kdl-55xbr8M'}; + var productModel = ProductFactory.get(params); + + var storeModel = StoreMgr.getStore('store1'); + + var viewData = { + 'productModel': productModel, + 'storeModel': storeModel + }; + + log.debug('Loaded demo page'); + res.render('demo', viewData); + + next(); +}); + +server.get('Designer', function (req, res, next) { + + let PageMgr = require('dw/experience/PageMgr'); + let page = PageMgr.getPage('testpage'); + + log.warn('Loaded page designer page'); + res.print(PageMgr.renderPage(page.ID, 'testpage')); + + next(); +}); + +module.exports = server.exports(); diff --git a/the_learning_cartridge/cartridge/controllers/Hello.js b/the_learning_cartridge/cartridge/controllers/Hello.js new file mode 100755 index 0000000..d9644aa --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/Hello.js @@ -0,0 +1,22 @@ +'use strict'; + +var server = require('server'); + +server.get('Start', function (req, res, next) { + + res.print('Greetings Planet'); + next(); + +}); + +server.get('Showme', function (req, res, next) { + + // Use template hello.isml + // Pass data to pdict using name param1 + res.render('hello', { 'param1':'This will render.' }); + + next(); + +}); + +module.exports = server.exports(); diff --git a/the_learning_cartridge/cartridge/controllers/Home.js b/the_learning_cartridge/cartridge/controllers/Home.js new file mode 100755 index 0000000..ec44749 --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/Home.js @@ -0,0 +1,44 @@ +'use strict'; + +var server = require('server'); +//Use super module to extend existing home route +server.extend(module.superModule); +//import userLoggedIn middleware +var userLoggedIn = require('*/cartridge/scripts/middleware/userLoggedIn'); + +//Use prepend to check for logged in user +server.prepend('Show', userLoggedIn.validateLoggedIn, function (req, res, next) { + + var viewData = res.getViewData(); + + viewData.detailText = 'Please log in'; //One method to set view data + + if (req.currentCustomer.profile) { + viewData.detailText = 'Welcome ' + customer.getProfile().getFirstName(); + } + + + next(); +}); + +//Use append to check for promotion +server.append('Show', function (req, res, next) { + + var promoText = 'There are no Promotions at this time'; + + //read query string to check for fromotions + if (req.querystring.promo == 1) { + promoText = 'All Electronics are 98% off! Practically free!'; + } + if (req.querystring.promo == 2) { + promoText = 'Overnight shipping is free!'; + } + + res.setViewData( + { promoText: promoText } //Another way to set view data + ); + + next(); +}); + +module.exports = server.exports(); diff --git a/the_learning_cartridge/cartridge/controllers/Notifications.js b/the_learning_cartridge/cartridge/controllers/Notifications.js new file mode 100644 index 0000000..b36a9cb --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/Notifications.js @@ -0,0 +1,79 @@ +'use strict'; + +var server = require('server'); + +var csrfProtection = require('*/cartridge/scripts/middleware/csrf'); +var userLoggedIn = require('*/cartridge/scripts/middleware/userLoggedIn'); +var consentTracking = require('*/cartridge/scripts/middleware/consentTracking'); + +var Logger = require('dw/system/Logger'); +var log = Logger.getLogger('DevTest','Notifications'); + +server.get('Start', + server.middleware.https, + userLoggedIn.validateLoggedIn, + consentTracking.consent, + csrfProtection.generateToken, + function (req, res, next) { + + var notificationsForm = server.forms.getForm('notifications'); + notificationsForm.clear(); + + if(customer.profile.custom.notificationSales){ + notificationsForm.notificationSales.checked = 'checked'; + } + if(customer.profile.custom.notificationNew){ + notificationsForm.notificationNew.checked = 'checked'; + } + if(customer.profile.custom.notificationStock){ + notificationsForm.notificationStock.checked = 'checked'; + } + + res.render('notificationsform', { + notificationsForm: notificationsForm + }); + + log.debug('Rendered Notifications Form'); + + next(); + +}); + +server.post('HandleForm', + server.middleware.https, + csrfProtection.validateRequest, + function (req, res, next) { + + var notificationsForm = server.forms.getForm('notifications'); + + var URLUtils = require('dw/web/URLUtils'); + var Transaction = require('dw/system/Transaction'); + + Transaction.begin(); + try { + + customer.profile.custom.notificationSales = notificationsForm.notificationSales.value + customer.profile.custom.notificationNew = notificationsForm.notificationNew.value + customer.profile.custom.notificationStock = notificationsForm.notificationStock.value + + Transaction.commit(); + log.error('Saved notifications'); + + var HookMgr = require('dw/system/HookMgr'); + var userEmail = customer.getProfile().getEmail(); + HookMgr.callHook('app.notification.email', 'sendNotificationsChange', userEmail); + + } catch (error) { + + Transaction.rollback(); + log.error(error); + } + + // res.redirect( URLUtils.url('Notifications') ); //For testing + res.redirect( URLUtils.url('Account-Show') ); + + next(); + +}) + +module.exports = server.exports(); \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/controllers/SimpleBasket.js b/the_learning_cartridge/cartridge/controllers/SimpleBasket.js new file mode 100644 index 0000000..a764aea --- /dev/null +++ b/the_learning_cartridge/cartridge/controllers/SimpleBasket.js @@ -0,0 +1,19 @@ +'use strict'; + +var server = require('server'); + +//Basket Manager will get all the users basket information +var BasketMgr = require('dw/order/BasketMgr'); + +server.get('List', function (req, res, next) { + + var viewData = { + 'basket': BasketMgr.getCurrentOrNewBasket() + }; + + res.render('simplebasket', viewData); + + next(); +}); + +module.exports = server.exports(); diff --git a/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.js b/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.js new file mode 100644 index 0000000..b8d4c0d --- /dev/null +++ b/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.js @@ -0,0 +1,22 @@ +'use strict'; + +var Template = require('dw/util/Template'); +var HashMap = require('dw/util/HashMap'); + +/** + * Render logic for storefront.imageAndText component. + * @param {dw.experience.ComponentScriptContext} context The Component script context object. + * @param {dw.util.Map} [modelIn] Additional model values created by another cartridge. + * + * @returns {string} The markup to be displayed + */ +module.exports.render = function (context, modelIn) { + var model = modelIn || new HashMap(); + var content = context.content; + + model.title = content.title ? content.title : null; + model.comment = content.comment ? content.comment : null; + model.name = content.name ? content.name : null; + + return new Template('experience/components/commerce_assets/feedback').render(model).text; +}; diff --git a/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.json b/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.json new file mode 100644 index 0000000..6c7c78f --- /dev/null +++ b/the_learning_cartridge/cartridge/experience/components/commerce_assets/feedback.json @@ -0,0 +1,36 @@ +{ + "name": "Feedback", + "description": "Hardcoded customer feedback", + "group": "Custom", + "attribute_definition_groups": [ + { + "id": "feedback_content", + "name": "Feedback Content", + "description": "Enter feedback below, all fields required", + "attribute_definitions": [ + { + "id": "title", + "name": "Title", + "description": "title of feedback", + "type": "string", + "required": true + }, + { + "id": "comment", + "name": "Comment", + "description": "Text body of feedback", + "type": "markup", + "required": true + }, + { + "id": "name", + "name": "Username", + "description": "User who submitted this feebback", + "type": "string", + "required": true + } + ] + } + ], + "region_definitions": [] +} diff --git a/the_learning_cartridge/cartridge/forms/default/cyborgregistrationform.xml b/the_learning_cartridge/cartridge/forms/default/cyborgregistrationform.xml new file mode 100644 index 0000000..6bfd2e6 --- /dev/null +++ b/the_learning_cartridge/cartridge/forms/default/cyborgregistrationform.xml @@ -0,0 +1,12 @@ + +
+ + + + + + \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/forms/default/notifications.xml b/the_learning_cartridge/cartridge/forms/default/notifications.xml new file mode 100644 index 0000000..492a8d2 --- /dev/null +++ b/the_learning_cartridge/cartridge/forms/default/notifications.xml @@ -0,0 +1,7 @@ + +
+ + + + + diff --git a/the_learning_cartridge/cartridge/models/product/decorators/stockInformation.js b/the_learning_cartridge/cartridge/models/product/decorators/stockInformation.js new file mode 100755 index 0000000..f11158f --- /dev/null +++ b/the_learning_cartridge/cartridge/models/product/decorators/stockInformation.js @@ -0,0 +1,9 @@ +'use strict'; + +module.exports = function (object, productApi) { + var inventoryRecord = productApi.availabilityModel.inventoryRecord; + Object.defineProperty(object, 'stockInformation', { + enumerable: true, + value: inventoryRecord==null ? 0 :parseInt(inventoryRecord.ATS,10) + }); +}; diff --git a/the_learning_cartridge/cartridge/models/product/fullProduct.js b/the_learning_cartridge/cartridge/models/product/fullProduct.js new file mode 100755 index 0000000..1c25515 --- /dev/null +++ b/the_learning_cartridge/cartridge/models/product/fullProduct.js @@ -0,0 +1,23 @@ +'use strict'; + +var base = module.superModule; +//Load our stock information decorator +var stockInformation = require('*/cartridge/models/product/decorators/stockInformation'); + +/** + * Decorate product with product line item information + * @param {Object} product - Product Model to be decorated + * @param {dw.catalog.Product} apiProduct - Product information returned by the script API + * @param {Object} options - Options passed in from the factory + * @returns {Object} - Decorated product model + */ +function fullProduct(product, apiProduct, options) { + + //Call base, pass all the same paramters + base.call(this, product, apiProduct, options); + //use decorator to lead invintory from product api + stockInformation(product,apiProduct); + return product; +} + +module.exports = fullProduct; diff --git a/the_learning_cartridge/cartridge/models/store.js b/the_learning_cartridge/cartridge/models/store.js new file mode 100755 index 0000000..822edf3 --- /dev/null +++ b/the_learning_cartridge/cartridge/models/store.js @@ -0,0 +1,12 @@ +'use strict'; + +var base = module.superModule; + +function store(storeObject) { + base.call(this, storeObject); + this.email = storeObject.email; +} + +store.prototype = Object.create(base.prototype); + +module.exports = store; diff --git a/the_learning_cartridge/cartridge/scripts/hooks/notificationChangeEmail.js b/the_learning_cartridge/cartridge/scripts/hooks/notificationChangeEmail.js new file mode 100755 index 0000000..6177601 --- /dev/null +++ b/the_learning_cartridge/cartridge/scripts/hooks/notificationChangeEmail.js @@ -0,0 +1,23 @@ +'use strict'; + +function sendNotificationsChange(emailAddress) { + + var Mail = require('dw/net/Mail'); + var Site = require('dw/system/Site'); + var Template = require('dw/util/Template'); + var HashMap = require('dw/util/HashMap'); + + var context = new HashMap(); + var email = new Mail(); + var template = new Template('notificationchangeemail'); + + email.addTo(emailAddress); + email.setFrom(Site.current.getCustomPreferenceValue('customerServiceEmail') || 'no-reply@salesforce.com'); + email.setSubject('Notification Settings Changed'); + email.setContent(template.render(context).text, 'text/html', 'UTF-8'); + email.send(); +} + +module.exports = { + sendNotificationsChange: sendNotificationsChange +}; \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/scripts/storageService.js b/the_learning_cartridge/cartridge/scripts/storageService.js new file mode 100644 index 0000000..2ab2052 --- /dev/null +++ b/the_learning_cartridge/cartridge/scripts/storageService.js @@ -0,0 +1,17 @@ +'use strict'; + +var CustomObjectMgr = require('dw/object/CustomObjectMgr'); + +function storeCyborgForm(cyborgForm) { + + var CustomObject = CustomObjectMgr.createCustomObject('Cyborgtracker', cyborgForm.email.value); + + CustomObject.custom.cyborgname = cyborgForm.cyborgname.value; + CustomObject.custom.humanname = cyborgForm.humanname.value; + CustomObject.custom.email = cyborgForm.email.value; + CustomObject.custom.mostlyhuman = cyborgForm.mostlyhuman.value; + + return CustomObject; +} + +module.exports = {storeCyborgForm: storeCyborgForm}; diff --git a/the_learning_cartridge/cartridge/templates/default/account/accountDashboard.isml b/the_learning_cartridge/cartridge/templates/default/account/accountDashboard.isml new file mode 100644 index 0000000..e2f07ba --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/account/accountDashboard.isml @@ -0,0 +1,26 @@ + + + + + + + + var assets = require('*/cartridge/scripts/assets.js'); + assets.addCss('/css/account/dashboard.css'); + + + + +
+ + + + custom notifications form + + + +
+ +
diff --git a/the_learning_cartridge/cartridge/templates/default/cyborgTracker/registrationform.isml b/the_learning_cartridge/cartridge/templates/default/cyborgTracker/registrationform.isml new file mode 100644 index 0000000..f723fcf --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/cyborgTracker/registrationform.isml @@ -0,0 +1,74 @@ + + + +
+

${pdict.message}

+
+
+ +
+
+ +
+ + human name +
+ + + + /> +
+ + cyborg name +
+ + + + /> +
+ + email +
+ + + + /> +
+
+ mostly human +
+
+ + + /> + + +
+
+ + + Back to Edit + + submit button +
+ +
+
+ +
+
+ +
\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/demo.isml b/the_learning_cartridge/cartridge/templates/default/demo.isml new file mode 100644 index 0000000..3f2845a --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/demo.isml @@ -0,0 +1,37 @@ + + +
+
+
+ +
+
+
+ +
+

+ ${ Resource.msg('label.title','demo', 'demo title') } +

+

+ ${pdict.storeModel.name} +

+

+ ${pdict.storeModel.email} - ${pdict.storeModel.postalCode} +

+

+ ${ Resource.msg('label.featured','demo', 'demo featured') } +

+

+ ${pdict.productModel.productName} +

+

+ ${ Resource.msg('label.stock','demo', 'demo stock') }: + ${pdict.productModel.stockInformation} +

+
+ + + + + +
\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/demoinclude.isml b/the_learning_cartridge/cartridge/templates/default/demoinclude.isml new file mode 100644 index 0000000..b943e62 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/demoinclude.isml @@ -0,0 +1,3 @@ +
+ New Demos coming soon +
\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/experience/components/commerce_assets/feedback.isml b/the_learning_cartridge/cartridge/templates/default/experience/components/commerce_assets/feedback.isml new file mode 100644 index 0000000..c144085 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/experience/components/commerce_assets/feedback.isml @@ -0,0 +1,13 @@ +
+
+
+ +
+

+ +

+
+ - +
+
+
diff --git a/the_learning_cartridge/cartridge/templates/default/hello.isml b/the_learning_cartridge/cartridge/templates/default/hello.isml new file mode 100755 index 0000000..a3afe2f --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/hello.isml @@ -0,0 +1,5 @@ + + +

${pdict.param1}

+ + diff --git a/the_learning_cartridge/cartridge/templates/default/home/homePage.isml b/the_learning_cartridge/cartridge/templates/default/home/homePage.isml new file mode 100755 index 0000000..4d68cf6 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/home/homePage.isml @@ -0,0 +1,50 @@ + + + var assets = require('*/cartridge/scripts/assets.js'); + assets.addJs('/js/productTile.js'); + assets.addCss('/css/homePage.css'); + + +
+

${pdict.detailText}

+

${pdict.promoText}

+
+ + +
+ +
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+ +
+ +
diff --git a/the_learning_cartridge/cartridge/templates/default/notificationchangeemail.isml b/the_learning_cartridge/cartridge/templates/default/notificationchangeemail.isml new file mode 100644 index 0000000..7adce91 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/notificationchangeemail.isml @@ -0,0 +1,3 @@ +

+Your Notification settings have been changed. +

\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/notificationsform.isml b/the_learning_cartridge/cartridge/templates/default/notificationsform.isml new file mode 100644 index 0000000..c212318 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/notificationsform.isml @@ -0,0 +1,57 @@ +
+

${ Resource.msg('title.notifications','forms', null) }

+ +
+ +
+ + checkbox +
+
+ + /> + +
+
+ + checkbox +
+
+ + /> + +
+
+ + checkbox +
+
+ + /> + +
+
+ +
+ + submit button +
+ +
+ + CSRF protection + + +
+
\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/product/components/productAvailability.isml b/the_learning_cartridge/cartridge/templates/default/product/components/productAvailability.isml new file mode 100755 index 0000000..15238f7 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/product/components/productAvailability.isml @@ -0,0 +1,9 @@ + total stock +

+ Total Stock: ${pdict.product.stockInformation} +

+ + +
+ +
\ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/default/simplebasket.isml b/the_learning_cartridge/cartridge/templates/default/simplebasket.isml new file mode 100644 index 0000000..2ab2a18 --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/simplebasket.isml @@ -0,0 +1,18 @@ +
+ + + +
    + Assign product line item to variable product + +
  • + ${product.productName} - ${product.price} +
  • +
    +
+ + + Your Basket is empty. +
+ +
diff --git a/the_learning_cartridge/cartridge/templates/default/storeLocator/storeDetails.isml b/the_learning_cartridge/cartridge/templates/default/storeLocator/storeDetails.isml new file mode 100755 index 0000000..370a82e --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/default/storeLocator/storeDetails.isml @@ -0,0 +1,35 @@ + diff --git a/the_learning_cartridge/cartridge/templates/resources/demo.properties b/the_learning_cartridge/cartridge/templates/resources/demo.properties new file mode 100644 index 0000000..7e65b9e --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/resources/demo.properties @@ -0,0 +1,3 @@ +label.title=(En)You are Shopping at +label.featured=(En)Featured Product +label.stock=(En)Total Stock \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/resources/demo_ja_JP.properties b/the_learning_cartridge/cartridge/templates/resources/demo_ja_JP.properties new file mode 100644 index 0000000..eb3b3cf --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/resources/demo_ja_JP.properties @@ -0,0 +1,3 @@ +label.title=(日本語) You are Shopping at +label.featured=(日本語) Featured Product +label.stock=(日本語) total stock \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/templates/resources/forms.properties b/the_learning_cartridge/cartridge/templates/resources/forms.properties new file mode 100755 index 0000000..933c72b --- /dev/null +++ b/the_learning_cartridge/cartridge/templates/resources/forms.properties @@ -0,0 +1,6 @@ +## Notification preferences, extends profile ## +title.notifications=Store Notification Settings +label.notification.sales=Recieve email notifications about upcoming sales +label.notification.new=Recieve email notifications about new products +label.notification.stock=Recieve email notifications about back in stock products +button.notification.submit=Save notification preferences \ No newline at end of file diff --git a/the_learning_cartridge/cartridge/the_learning_cartridge.properties b/the_learning_cartridge/cartridge/the_learning_cartridge.properties new file mode 100755 index 0000000..ed2bee5 --- /dev/null +++ b/the_learning_cartridge/cartridge/the_learning_cartridge.properties @@ -0,0 +1,4 @@ +## cartridge.properties for cartridge the_learning_cartridge +#Thu Jun 09 11:30:40 EDT 2016 +demandware.cartridges.the_learning_cartridge.multipleLanguageStorefront=true +demandware.cartridges.the_learning_cartridge.id=the_learning_cartridge \ No newline at end of file diff --git a/the_learning_cartridge/hooks.json b/the_learning_cartridge/hooks.json new file mode 100755 index 0000000..50f00c4 --- /dev/null +++ b/the_learning_cartridge/hooks.json @@ -0,0 +1,8 @@ +{ + "hooks": [ + { + "name": "app.notification.email", + "script": "./cartridge/scripts/hooks/notificationChangeEmail" + } + ] +} \ No newline at end of file diff --git a/the_learning_cartridge/package.json b/the_learning_cartridge/package.json new file mode 100755 index 0000000..3150218 --- /dev/null +++ b/the_learning_cartridge/package.json @@ -0,0 +1,4 @@ +{ + "hooks": "./hooks.json" +} + \ No newline at end of file