Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make everything multilanguage - All changes at once. #236

Open
wants to merge 126 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
126 commits
Select commit Hold shift + click to select a range
40aa395
allow for RON currency
meiremans Aug 26, 2021
b861a48
added romanian as language option.
meiremans Aug 26, 2021
5a880a2
added romanian as language option.
meiremans Aug 26, 2021
9ba41d8
themes are loaded from views not public
meiremans Aug 26, 2021
d725bd1
Add wiretransfer and payment on delivery as payment options
meiremans Aug 26, 2021
ed9b524
added account number to the wiretransfer config
meiremans Aug 26, 2021
78fad9c
make search fuzzy by 1 edit, for convenience for the end user
meiremans Aug 26, 2021
647ef40
make search fuzzy by 1 edit, for convenience for the end user
meiremans Aug 26, 2021
47d6948
Merge pull request #1 from meiremans/EXTRA_CUIRRENCY_RON
meiremans Aug 26, 2021
424385a
Merge pull request #2 from meiremans/FUZZY_SEARCH
meiremans Aug 26, 2021
4a41710
Merge remote-tracking branch 'origin/FUZZY_SEARCH' into FUZZY_SEARCH
meiremans Aug 26, 2021
5a1c28a
save order currency in DB.
meiremans Aug 26, 2021
17385e7
Merge pull request #3 from meiremans/SAVE_ORDER_CURRENCY
meiremans Aug 26, 2021
8b9a4cd
there are shipping costs when using wiretransfer or pay on delivery
meiremans Aug 26, 2021
1e05992
add RO translations
meiremans Aug 26, 2021
5b5bbc2
add RO translations
meiremans Aug 26, 2021
74e1c22
Merge pull request #5 from meiremans/EXTRA_LANGUAGE_RO
meiremans Aug 26, 2021
9f43ad6
Merge branch 'master' into PAYMENT_PAY_ON_DELIVERY
meiremans Aug 26, 2021
5a6a6ba
Merge pull request #4 from meiremans/PAYMENT_PAY_ON_DELIVERY
meiremans Aug 26, 2021
e69b165
Merge pull request #6 from meiremans/THEMES_LOADED_FROM_VIEWS
meiremans Aug 26, 2021
fd77d85
Merge pull request #7 from meiremans/FUZZY_SEARCH
meiremans Aug 26, 2021
a433b27
Merge remote-tracking branch 'origin/EXTRA_LANGUAGE_RO' into EXTRA_LA…
meiremans Aug 26, 2021
ad095bd
current version didn't work for me, bumping it solved the issue
meiremans Aug 26, 2021
667069d
Merge pull request #8 from meiremans/BUMP_STRIPE
meiremans Aug 26, 2021
f3ddbee
running on a deprecated LTS is not recomended?
meiremans Aug 26, 2021
9a8c25c
Merge pull request #9 from meiremans/BUMP_DOCKER_NODE
meiremans Aug 26, 2021
4e6913d
Merge pull request #10 from meiremans/EXTRA_LANGUAGE_RO
meiremans Aug 26, 2021
c5aa55b
fixed a lot of missing I18N fixed strings
meiremans Aug 27, 2021
a42291b
Merge pull request #11 from meiremans/I18N_EVERYWHERE
meiremans Aug 27, 2021
f19270e
fixed a lot of missing I18N fixed strings
meiremans Aug 27, 2021
a341d3f
product can be edited in multiple languages, without breaking current…
meiremans Aug 27, 2021
f18d31a
titles are also variable
meiremans Aug 27, 2021
72f6c9f
variants can be translated
meiremans Aug 27, 2021
1b0f244
make menu multilanguage in view
meiremans Aug 27, 2021
bec9708
menus can be translated
meiremans Aug 27, 2021
67ff746
add new menu is also multilanguage.
meiremans Aug 28, 2021
31c00f3
menu will need an unique identifier. searching on current menu name i…
meiremans Aug 28, 2021
1116895
added Id to menu
meiremans Aug 28, 2021
768ce20
made migration so current users can flawlessly upgrade to new menu
meiremans Aug 28, 2021
d7b05f8
make variant translation show correct in options
meiremans Aug 28, 2021
fc80d47
save menus correct
meiremans Aug 28, 2021
24f4bbe
fixed sorting on the menus
meiremans Aug 28, 2021
516f71f
products show with right language title & description
meiremans Aug 28, 2021
4e99e1b
right language on pages for product
meiremans Aug 28, 2021
6b0d111
show right language in related products
meiremans Aug 28, 2021
2c5f2e4
removed minimum length restrictions for non default language
meiremans Aug 28, 2021
489025c
Merge branch 'master' into MAKE_PRODUCTS_MULTILANGUAGE
meiremans Aug 28, 2021
8816f07
Merge pull request #12 from meiremans/MAKE_PRODUCTS_MULTILANGUAGE
meiremans Aug 28, 2021
474ec63
add new data to testdata
meiremans Aug 28, 2021
96717cb
Merge pull request #13 from meiremans/MAKE_PRODUCTS_MULTILANGUAGE
meiremans Aug 28, 2021
4bba15d
if language is not passed in body of variants, we update default lang…
meiremans Aug 29, 2021
7c9fe96
Merge pull request #14 from meiremans/tests
meiremans Aug 29, 2021
69d63ec
google productfeeds in multiple languages
meiremans Aug 29, 2021
2eabd55
Merge pull request #15 from meiremans/GOOGLE_FEED_MULTILANGUAGE
meiremans Aug 29, 2021
605ff5f
completet translations ro
meiremans Aug 29, 2021
d19e01b
Merge pull request #16 from meiremans/complete_ro_translations
meiremans Aug 29, 2021
b08ebfd
revised hooks & add product on create hook
meiremans Aug 29, 2021
fcb9ee5
Merge pull request #17 from meiremans/PRODUCT_HOOK
meiremans Aug 29, 2021
d879f85
fixed variant currency symbol
meiremans Aug 30, 2021
70d633d
space
meiremans Aug 30, 2021
b4432a0
fixed summernote not showing up in admin panel when switching language
meiremans Aug 30, 2021
8af96db
fixed double field in default lang on prodcut edit
meiremans Aug 30, 2021
02c4754
remove "
meiremans Aug 30, 2021
46e5422
Merge pull request #18 from meiremans/PRODUCT_HOOK
meiremans Aug 30, 2021
db98a25
make resized thumbnails on upload
meiremans Aug 30, 2021
d6a3ae1
Merge pull request #19 from meiremans/RESIZE_IMAGES_ON_UPLOAD
meiremans Aug 30, 2021
2a35b3e
sharp is not compatible with node versions below 12.13.0
meiremans Aug 30, 2021
aa5b2e5
Merge pull request #20 from meiremans/RESIZE_IMAGES_ON_UPLOAD
meiremans Aug 30, 2021
6b21ecb
send right variants
meiremans Sep 1, 2021
9b8f40f
Merge pull request #21 from meiremans/PRODUCT_HOOK
meiremans Sep 1, 2021
e205ed8
fixed types possiblke for variants
meiremans Sep 1, 2021
6500ddd
Merge pull request #22 from meiremans/VARIANT_FIXED_TYPES
meiremans Sep 1, 2021
72e93db
save & update product dimensions
meiremans Sep 2, 2021
bdd1a8e
dimensions
meiremans Sep 2, 2021
28f1857
show dimensions if present
meiremans Sep 2, 2021
2dcbbce
can we test on windows too?
meiremans Sep 2, 2021
3ad9a7f
Merge pull request #23 from meiremans/SIZE_FOR_PRODUCT
meiremans Sep 2, 2021
551f1cd
Size for product (#25)
meiremans Sep 2, 2021
f3d1c3c
Size for product (#26)
meiremans Sep 2, 2021
7a16a59
also copy locales... (#27)
meiremans Sep 2, 2021
de652b7
merged production hotfixes
meiremans Sep 2, 2021
6e38a29
sidebar-brand is 80% height, to scale for other logo's
meiremans Sep 4, 2021
cb2d732
Merge pull request #28 from meiremans/VARIOUS_SMALL_FIXES
meiremans Sep 4, 2021
8ecaa18
pass test
meiremans Sep 4, 2021
2b15a9c
productDimensions is optional, also in update
meiremans Sep 4, 2021
3125618
Merge pull request #29 from meiremans/VARIOUS_SMALL_FIXES
meiremans Sep 4, 2021
07bc4c5
add .iml to gitignore
meiremans Sep 4, 2021
8d1561e
Merge pull request #30 from meiremans/VARIOUS_SMALL_FIXES
meiremans Sep 4, 2021
fe9890b
delete menu with id
meiremans Sep 4, 2021
e8c9787
Fix discount code
JorgeN118 Oct 12, 2021
3d5d208
Merge pull request #31 from IoannisMatzaris/Fix-Discount-Code
meiremans Oct 14, 2021
fa75194
Merge pull request #32 from meiremans/VARIOUS_SMALL_FIXES
meiremans Oct 14, 2021
8aa4326
Merge branch 'master' of https://github.com/mrvautin/expressCart into…
meiremans Nov 4, 2021
e70cdae
update docker compose to use node v16
meiremans Nov 4, 2021
c66c49e
add new engine in tests and package
meiremans Nov 4, 2021
a8d4460
update package-lock
meiremans Nov 4, 2021
7ace486
remove obsolete dockerfile
meiremans Nov 4, 2021
cb54c0c
v++
meiremans Nov 4, 2021
2cb9f0d
add testdata to dockerfile
meiremans Nov 4, 2021
e096c18
Merge pull request #34 from meiremans/PREPARE_NEXT_VERSION
meiremans Nov 4, 2021
770ca4d
v++
meiremans Nov 4, 2021
4485b89
Merge pull request #35 from meiremans/PREPARE_NEXT_VERSION
meiremans Nov 4, 2021
19945e1
remove build from dockerfile
meiremans Nov 4, 2021
53a3c06
Merge pull request #36 from meiremans/PREPARE_NEXT_VERSION
meiremans Nov 4, 2021
398b0f7
add production docker in compose
meiremans Nov 4, 2021
10b3019
Merge pull request #37 from meiremans/SEPARATE_DEV_AND_PROD_DOKER
meiremans Nov 4, 2021
93fcb6e
no need to install extras, as we are not using alpine anymore
meiremans Nov 4, 2021
0cea7d9
Merge pull request #38 from meiremans/SEPARATE_DEV_AND_PROD_DOKER
meiremans Nov 4, 2021
adc15df
fix # in selector productEdit when selecting default language
meiremans Nov 5, 2021
012913a
Merge pull request #39 from meiremans/SEPARATE_DEV_AND_PROD_DOKER
meiremans Nov 5, 2021
f01da1a
will take thumbnail if one was generated in the system, otherwise it …
meiremans Nov 5, 2021
b4cdd71
Merge pull request #40 from meiremans/FIX_THUMBNAILS
meiremans Nov 5, 2021
44a0fb3
remove dimensions if one dimension is not filled in
meiremans Nov 5, 2021
31a4329
Merge pull request #41 from meiremans/HIDE_DIMENSIONS_IF_EMPTY
meiremans Nov 5, 2021
8718c37
new version minified JS/css
meiremans Nov 5, 2021
3f36a6c
Merge pull request #42 from meiremans/NEW_MENU_ADD_LANGUAGE
meiremans Nov 5, 2021
e2b538a
add deploy to dockerfile to generate min js/css on rebuild
meiremans Nov 5, 2021
a036c30
Merge pull request #43 from meiremans/NEW_MENU_ADD_LANGUAGE
meiremans Nov 5, 2021
664001e
actually wait for promises to resolve
meiremans Nov 5, 2021
a516eb0
Merge pull request #44 from meiremans/NEW_MENU_ADD_LANGUAGE
meiremans Nov 5, 2021
52284e7
check language on returned menu
meiremans Nov 5, 2021
6c2c0d9
Merge pull request #45 from meiremans/NEW_MENU_ADD_LANGUAGE
meiremans Nov 5, 2021
a413423
V++
meiremans Nov 5, 2021
41fbc43
Merge pull request #46 from meiremans/NEW_MENU_ADD_LANGUAGE
meiremans Nov 5, 2021
979b26e
merged upstream
meiremans Nov 30, 2021
d705697
keep bodyparser removed
meiremans Nov 30, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .github/workflows/tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ jobs:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [10.x, 12.x, 13.x, 14.x]
mongodb-version: [4.2]
node-version: [16.x]
mongodb-version: [5.0]
steps:
- uses: actions/checkout@v2
- name: Use Node.js ${{ matrix.node-version }}
Expand All @@ -27,4 +27,4 @@ jobs:
run: npm run test
env:
test: true
CI: true
CI: true
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ data/
public/uploads
/config/*-local.json
.vscode
.idea
**.DS_Store
env.yaml
ecosystem.config.js
bin/googleproducts.xml
bin/googleproducts.xml
/expressCart.iml
9 changes: 5 additions & 4 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
FROM mhart/alpine-node:8
FROM node:16.13.0

ENV NODE_VERSION 8.9.4

RUN apk add --no-cache make gcc g++ python bash
ENV NODE_VERSION 16.13.0

WORKDIR /var/expressCart

Expand All @@ -12,13 +10,16 @@ COPY config/ /var/expressCart/config/
COPY public/ /var/expressCart/public/
COPY routes/ /var/expressCart/routes/
COPY views/ /var/expressCart/views/
COPY locales/ /var/expressCart/locales/

COPY app.js /var/expressCart/
COPY package.json /var/expressCart/
COPY deploy.js /var/expressCart/

RUN npm install

RUN npm run deploy

VOLUME /var/expressCart/data

EXPOSE 1111
Expand Down
74 changes: 73 additions & 1 deletion app.js
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,13 @@ handlebars = handlebars.create({
discountExpiry: (start, end) => {
return moment().isBetween(moment(start), moment(end));
},
IsHidden: (v1, operator, v2) => {
switch(operator){
case '==':
return (v1 === v2) ? "" : "hidden"

}
},
ifCond: (v1, operator, v2, options) => {
switch(operator){
case '==':
Expand Down Expand Up @@ -250,7 +257,7 @@ handlebars = handlebars.create({
}
if(status === 'Pending'){
const paymentConfig = getPaymentConfig();
if(config.paymentGateway === 'instore'){
if(['instore', 'wiretransfer' , 'ondelivery'].includes(config.paymentGateway) ){
return `<h2 class="text-warning">${paymentConfig.resultMessage}</h2>`;
}
return '<h2 class="text-warning">The payment for this order is pending. We will be in contact shortly.</h2>';
Expand Down Expand Up @@ -315,6 +322,43 @@ handlebars = handlebars.create({
timeAgo: (date) => {
return moment(date).fromNow();
},
setVar: (varName, varValue, options) => {
options.data.root[varName] = varValue;
},
getDescriptionLanguage: (result, language) => {
return result[`productDescription_${language}`] ? result[`productDescription_${language}`] : ""
},
getExtraLanguageFromKey: (result, key, language, defaultLanguage) => {
if (defaultLanguage !== language) {
return result[`${key}_${language}`] ? result[`${key}_${language}`] : ""
} else {
return result[key];
}
},
getIdForLanguages : (idName, language, defaultLanguage) => {
return defaultLanguage === language ?idName : `${idName}_${language}`;
},
getIdForLanguagesForMenuId : (idName, language, defaultLanguage,menu) => {
if(menu.language === language || (!menu.language && language === defaultLanguage)){
return defaultLanguage === language ?idName : `${idName}_${language}`;
}else{
return "dont_use";
}

},
getIdForLanguagesWithId : (idName,id, language, defaultLanguage) => {
return defaultLanguage === language ? `${idName}-${id}` : `${idName}-${id}_${language}`;
},
getMinLength : (language, defaultLanguage, minLengthIfDefaultLang ) => {
return language === defaultLanguage ? minLengthIfDefaultLang : 0
},
getRequired : (language, defaultLanguage ) => {
return language === defaultLanguage ? "required" : ""
},
isMatchingLanguageOrDefault : (menu, lang2 , deflocale, options) => {
const result = (lang2 === menu.language) || (typeof menu.language === "undefined" && deflocale === lang2);
return result ? options.fn(this) : options.inverse(this);
},
imagePath: (value) => {
if(value && value.substring(0, 4) === 'http'){
return value;
Expand All @@ -336,6 +380,7 @@ handlebars = handlebars.create({
<use xlink:href="/dist/feather-sprite.svg#${icon}"/>
</svg>`;
}

}
});

Expand Down Expand Up @@ -363,6 +408,7 @@ app.set('port', process.env.PORT || 1111);
app.use(logger('dev'));
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser(config.secretCookie));

app.use(session({
resave: true,
saveUninitialized: true,
Expand Down Expand Up @@ -498,6 +544,7 @@ initDb(config.databaseConnectionString, async (err, db) => {
await db.cart.deleteMany({
sessionId: { $nin: validSessionIds }
});

});

// Fire up the cron job to create google product feed
Expand Down Expand Up @@ -525,6 +572,7 @@ initDb(config.databaseConnectionString, async (err, db) => {
});
};


// Set trackStock for testing
if(process.env.NODE_ENV === 'test'){
config.trackStock = true;
Expand All @@ -535,6 +583,7 @@ initDb(config.databaseConnectionString, async (err, db) => {

// Start the app
try{
await versionUpdate(db);
await app.listen(app.get('port'));
app.emit('appStarted');
if(process.env.NODE_ENV !== 'test'){
Expand All @@ -545,5 +594,28 @@ initDb(config.databaseConnectionString, async (err, db) => {
process.exit(2);
}
});
const versionUpdate = async (db) => {
const version = await db.systeminfo.findOne({_id : "version"});
if(!version){
console.warn('will upgrade data to latest version');
try{
const menus = await (db.menu.find({})).toArray();
for(const menu of menus){
const items = menu.items.map(x => {
x.id = `${Math.floor(Math.random()*10000000000)}`
return x;
});
db.menu.updateOne({_id : menu._id},{$set : {items : items}});

}
db.systeminfo.insertOne({_id : "version", value :"1.2.0"});
}catch(e){
console.error("upgrade failed",e);
}

}else{
console.log(`expressCart is running V${version.value}`);
}

}
module.exports = app;
7 changes: 6 additions & 1 deletion bin/testdata.json
Original file line number Diff line number Diff line change
Expand Up @@ -242,15 +242,20 @@
"menu": {
"items": [
{
"id" : "9999999999",
"title": "Backpacks",
"link": "/category/backpack",
"order": 0
},
{
"id" : "1111111111",
"title": "Boots",
"link": "/category/boots",
"order": 1
}
]
},
"systeminfo" : {
"version": "1.2.0"
}
}
}
6 changes: 6 additions & 0 deletions config/payment/config/ondelivery.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"description": "Pay on Delivery",
"orderStatus": "Pending",
"buttonText": "You will pay on delivery",
"resultMessage": "The order is place. Please pay for your order on delivery."
}
7 changes: 7 additions & 0 deletions config/payment/config/wiretransfer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"description": "Pay with wire transfer",
"orderStatus": "Pending",
"buttonText": "You will pay with wire transfer",
"resultMessage": "The order is place. Please pay for your order with wiretransfer.",
"accountNumber" : "XXXXXXXXX-XXXXXX-X"
}
24 changes: 24 additions & 0 deletions config/payment/schema/ondelivery.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{
"properties": {
"description": {
"type": "string"
},
"orderStatus": {
"type": "string",
"enum": ["Completed", "Paid", "Pending"]
},
"buttonText": {
"type": "string"
},
"resultMessage": {
"type": "string"
}
},
"required": [
"description",
"orderStatus",
"buttonText",
"resultMessage"
],
"additionalProperties": false
}
28 changes: 28 additions & 0 deletions config/payment/schema/wiretransfer.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{
"properties": {
"description": {
"type": "string"
},
"orderStatus": {
"type": "string",
"enum": ["Completed", "Paid", "Pending"]
},
"buttonText": {
"type": "string"
},
"resultMessage": {
"type": "string"
},
"accountNumber": {
"type": "string"
}
},
"required": [
"description",
"orderStatus",
"buttonText",
"resultMessage",
"accountNumber"
],
"additionalProperties": false
}
26 changes: 21 additions & 5 deletions config/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,31 @@
"googleAnalytics": "",
"injectJs": "",
"customCss": "",
"currencySymbol": "£",
"currencyISO": "USD",
"currencySymbol": "lei",
"currencyISO": "RON",
"paymentGateway": [
"stripe"
],
"databaseConnectionString": "mongodb://127.0.0.1:27017/expresscart",
"theme": "Cloth",
"trackStock": false,
"orderHook": "",
"hooks" : {
"product" : {
"onCreate" : ""
},
"variant" : {
"onCreate" : ""
},
"order" : {
"onCreate" : ""
}

},
"availableLanguages": [
"en",
"it"
"it",
"ro"
],
"defaultLocale": "en",
"maxQuantity": 25,
Expand All @@ -47,5 +60,8 @@
}
},
"showRelatedProducts": true,
"showHomepageVariants": false
}
"showHomepageVariants": false,
"variantTemplates" : [{
"color" : ["black","white","red"]
}]
}
43 changes: 43 additions & 0 deletions config/settingsSchema.json
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,35 @@
"orderHook": {
"format": "uri-template"
},
"hooks" : {
"type": "object",
"properties": {
"product" : {
"type": "object",
"properties": {
"onCreate": {
"format": "uri-template"
}
}
},
"variant" : {
"type": "object",
"properties": {
"onCreate": {
"format": "uri-template"
}
}
},
"order" : {
"type": "object",
"properties": {
"onCreate": {
"format": "uri-template"
}
}
}
}
},
"secretCookie": {
"type": "string"
},
Expand Down Expand Up @@ -192,6 +221,20 @@
"showHomepageVariants": {
"type": "boolean",
"default": false
},
"variantTemplates" : {
"type": "array",
"items" : {
"type" : "object",
"patternProperties" : {
".*" : {
"type" : "array",
"items" : {
"type" : "string"
}
}
}
}
}
},
"required": [
Expand Down
Loading