This commit is contained in:
Max Hunt 2020-05-17 00:09:20 +01:00
parent 4263d9b7ba
commit cb69e20e3b
7 changed files with 169 additions and 43 deletions

View File

@ -53,25 +53,16 @@ app.get('/search', function(request, responce){
if (request.query.search) { if (request.query.search) {
let sQuery = request.query.search.toLowerCase() let sQuery = request.query.search.toLowerCase()
dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){ dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){
var data = { var data = {'x': {name: 'Nothing found 😢',price: ''}}
'x': {desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''},
}
if (snapshot.val()) { if (snapshot.val()) {
data = snapshot.val() data = snapshot.val()
var sResults = [{desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''}] var sResults = [{name: 'Nothing found 😢',price: ''}]
var keys = Object.keys(data) var keys = Object.keys(data)
keys.forEach(key => { keys.forEach(key => {
if (data[key].name.toLowerCase().includes(sQuery) || data[key].desc.toLowerCase().includes(sQuery)) { if (data[key].name.toLowerCase().includes(sQuery) || data[key].desc.toLowerCase().includes(sQuery)) {sResults[key] = data[key]}
sResults[key] = data[key]
console.log(sResults)
}
}) })
if (Object.keys(sResults).length > 1) { if (Object.keys(sResults).length > 1) {delete sResults[0]}
delete sResults[0]
}
console.log(sResults)
responce.render('search.ejs', {products: sResults}) responce.render('search.ejs', {products: sResults})
} }
else {responce.render('search.ejs', {products: data})} else {responce.render('search.ejs', {products: data})}
@ -79,9 +70,7 @@ app.get('/search', function(request, responce){
} }
else { else {
dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){ dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){
var data = { var data = {'x': {name: 'Nothing found 😢',price: ''}}
'x': {desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''},
}
if (snapshot.val()) {data = snapshot.val()} if (snapshot.val()) {data = snapshot.val()}
responce.render('search.ejs', {products: data}) responce.render('search.ejs', {products: data})
}) })
@ -202,7 +191,8 @@ app.get('/product', function(request, responce){
var keys = Object.keys(vals) var keys = Object.keys(vals)
uData = vals[keys[0]] uData = vals[keys[0]]
sellerName = uData.fName + " " + uData.lName sellerName = uData.fName + " " + uData.lName
responce.render('product.ejs', {item:data, key:request.query.productid, seller:sellerName}) sellerDBID = keys[0]
responce.render('product.ejs', {item:data, key:request.query.productid, seller:{name:sellerName, dbid:sellerDBID}})
}) })
.catch(e => {console.log(e)}) .catch(e => {console.log(e)})
} }
@ -216,6 +206,58 @@ app.get('/product', function(request, responce){
} }
}) })
app.get('/user-profile', function(request, responce){
if (request.query.dbid) {
var dbRef = database.ref("/users/" + request.query.dbid)
dbRef.once('value', function(snapshot){
user = snapshot.val()
if (user){
let productsRef = database.ref("/products")
let userProfile = {
name: user.fName + " " + user.lName,
location: user.address,
rating: "WIP",
startDate: "WIP",
pPic: user.pPic
}
productsRef.orderByChild("owner").equalTo(user.UID).once('value', function(snapshot){
if (snapshot.exists()) {
let allProductsDict = snapshot.val()
let allProductsKeys = Object.keys(allProductsDict)
let filteredKeys = allProductsKeys.filter(function( obj ) {
return allProductsDict[obj].status == 'on-sale';
})
let filteredProducts = {"0":{img: '',name: 'Nothing listed 😢',price: ''}}
filteredKeys.forEach(function(key){filteredProducts[key] = allProductsDict[key]})
if (Object.keys(filteredProducts).length > 1) {delete filteredProducts["0"]}
responce.render('user-profile.ejs', {userProducts:filteredProducts, user:userProfile})
} else {
responce.render('user-profile.ejs', {userProducts:[], user:userProfile})
}
})
.catch(e => {
console.log(e)
responce.render('404.ejs')
})
}
else {
responce.render('404.ejs')
}
})
.catch(e => {
console.log(e)
responce.render('404.ejs')
})
}
else {
responce.render('404.ejs')
}
})
app.get('/registration', function(request, responce){ app.get('/registration', function(request, responce){
responce.render('user-registration.ejs') responce.render('user-registration.ejs')
}) })
@ -291,8 +333,7 @@ app.post('/request-api', async function(request, responce){
let buyerName = buyer.fName + ' ' + buyer.lName let buyerName = buyer.fName + ' ' + buyer.lName
let buyerEmail = buyer.email let buyerEmail = buyer.email
let content = contentMaker(sellerName, buyerName, buyerEmail, productName, pid, bMsg) let content = contentMaker(sellerName, buyerName, buyerEmail, productName, pid, bMsg)
let rsp = sendEmail(sellerEmail, content) sendEmail(sellerEmail, content)
console.log(rsp)
responce.send({success:true, error:null}) responce.send({success:true, error:null})
} else { } else {
responce.send({success:false, error:'Unregistered user!'}) responce.send({success:false, error:'Unregistered user!'})

View File

@ -846,8 +846,8 @@ input:focus, textarea:focus, select:focus{
width: 100%; width: 100%;
height: 100%; height: 100%;
} }
/* DARK MODE SUPPORT: */
@media (prefers-color-scheme: dark) { /* @media (prefers-color-scheme: dark) {
body, .page, main, .navbar { body, .page, main, .navbar {
background: #222222; background: #222222;
} }
@ -855,4 +855,4 @@ input:focus, textarea:focus, select:focus{
background: rgb(20, 20, 20); background: rgb(20, 20, 20);
box-shadow: none; box-shadow: none;
} }
} } */

File diff suppressed because one or more lines are too long

View File

@ -445,6 +445,13 @@ function fileAddSequence(file){
} }
} }
function contactSeller() {
const cBtn = document.getElementById('contact-btn')
cBtn.innerHTML = "Unsupported, contact through product listing"
cBtn.setAttribute('style', "width:410px; transition: 0.7s; background:#FFAAAA; color:gray;")
cBtn.disabled = true
}
try { try {
var addressField = document.getElementById("shippingaddressinput") var addressField = document.getElementById("shippingaddressinput")
addressField.addEventListener("keyup", function(event) { addressField.addEventListener("keyup", function(event) {

View File

@ -7,7 +7,7 @@
<div class="product-page-img"><img class="dyn-img" src="media/noimage.png" title="<%= item.img %>"></div> <div class="product-page-img"><img class="dyn-img" src="media/noimage.png" title="<%= item.img %>"></div>
<div class="product-page-info"> <div class="product-page-info">
<h2><%= item.name %> </h2> <h2><%= item.name %> </h2>
<p>Seller: <%= seller %></p> <p>Seller: <a href="user-profile?dbid=<%= seller.dbid %>"><%= seller.name %></a></p>
<p>Location: <%= item.location %></p> <p>Location: <%= item.location %></p>
<p>Quantity: <%= item.stock %></p> <p>Quantity: <%= item.stock %></p>
<p>Price: £<%= item.price %></p> <p>Price: £<%= item.price %></p>

View File

@ -0,0 +1,37 @@
<%- include("partials/header") %>
<div id="api-response" class="purchase-message" style="display: none;color: #DD0000"></div>
<div class="product-page-container">
<div class="product-page-info-container">
<div class="product-page-img"><img class="dyn-img" src="media/noimage.png" title="<%= user.pPic %>"></div>
<div class="product-page-info">
<h2><%= user.name %> </h2>
<p>Member since <%= user.startDate %></p>
<p>Location: <%= user.location %></p>
<p>Rating: <%= user.rating %></p>
<p></p>
<input id="sMsg" type="text" placeholder="Your message" style="display: none;">
<button onclick={contactSeller()} id="contact-btn">Contact</button>
</div>
</div>
<div class="products">
<p>Products on sale</p>
<div class="my-products-container">
<% var keys = Object.keys(userProducts) %>
<% keys.forEach(function(key){ %>
<div class="my-product-container">
<img class="dyn-img" onclick={window.location.replace('product?productid=<%=key%>')} title="<%= userProducts[key].img %>" alt="img" src="media/var.png">
<div class="my-product-details-container">
<p class="top"><%= userProducts[key].name%></p>
<p class="middle-top"></p>
<p class="middle-bottom"></p>
<p class="bottom">£ <%= userProducts[key].price%></p>
</div>
</div>
<% }) %>
</div>
</div>
</div>
<div class="space"></div>
</div>
</main>
<%- include("partials/footer") %>

View File

@ -51,25 +51,16 @@ app.get('/search', function(request, responce){
if (request.query.search) { if (request.query.search) {
let sQuery = request.query.search.toLowerCase() let sQuery = request.query.search.toLowerCase()
dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){ dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){
var data = { var data = {'x': {name: 'Nothing found 😢',price: ''}}
'x': {desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''},
}
if (snapshot.val()) { if (snapshot.val()) {
data = snapshot.val() data = snapshot.val()
var sResults = [{desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''}] var sResults = [{name: 'Nothing found 😢',price: ''}]
var keys = Object.keys(data) var keys = Object.keys(data)
keys.forEach(key => { keys.forEach(key => {
if (data[key].name.toLowerCase().includes(sQuery) || data[key].desc.toLowerCase().includes(sQuery)) { if (data[key].name.toLowerCase().includes(sQuery) || data[key].desc.toLowerCase().includes(sQuery)) {sResults[key] = data[key]}
sResults[key] = data[key]
console.log(sResults)
}
}) })
if (Object.keys(sResults).length > 1) { if (Object.keys(sResults).length > 1) {delete sResults[0]}
delete sResults[0]
}
console.log(sResults)
responce.render('search.ejs', {products: sResults}) responce.render('search.ejs', {products: sResults})
} }
else {responce.render('search.ejs', {products: data})} else {responce.render('search.ejs', {products: data})}
@ -77,9 +68,7 @@ app.get('/search', function(request, responce){
} }
else { else {
dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){ dbRef.orderByChild("status").equalTo("on-sale").once('value', function(snapshot){
var data = { var data = {'x': {name: 'Nothing found 😢',price: ''}}
'x': {desc: '',holder: '',id: 999,img: '',location: '',name: 'Nothing found 😢',owner: '',price: '',public: '',stock: ''},
}
if (snapshot.val()) {data = snapshot.val()} if (snapshot.val()) {data = snapshot.val()}
responce.render('search.ejs', {products: data}) responce.render('search.ejs', {products: data})
}) })
@ -200,7 +189,8 @@ app.get('/product', function(request, responce){
var keys = Object.keys(vals) var keys = Object.keys(vals)
uData = vals[keys[0]] uData = vals[keys[0]]
sellerName = uData.fName + " " + uData.lName sellerName = uData.fName + " " + uData.lName
responce.render('product.ejs', {item:data, key:request.query.productid, seller:sellerName}) sellerDBID = keys[0]
responce.render('product.ejs', {item:data, key:request.query.productid, seller:{name:sellerName, dbid:sellerDBID}})
}) })
.catch(e => {console.log(e)}) .catch(e => {console.log(e)})
} }
@ -214,6 +204,58 @@ app.get('/product', function(request, responce){
} }
}) })
app.get('/user-profile', function(request, responce){
if (request.query.dbid) {
var dbRef = database.ref("/users/" + request.query.dbid)
dbRef.once('value', function(snapshot){
user = snapshot.val()
if (user){
let productsRef = database.ref("/products")
let userProfile = {
name: user.fName + " " + user.lName,
location: user.address,
rating: "WIP",
startDate: "WIP",
pPic: user.pPic
}
productsRef.orderByChild("owner").equalTo(user.UID).once('value', function(snapshot){
if (snapshot.exists()) {
let allProductsDict = snapshot.val()
let allProductsKeys = Object.keys(allProductsDict)
let filteredKeys = allProductsKeys.filter(function( obj ) {
return allProductsDict[obj].status == 'on-sale';
})
let filteredProducts = {"0":{img: '',name: 'Nothing listed 😢',price: ''}}
filteredKeys.forEach(function(key){filteredProducts[key] = allProductsDict[key]})
if (Object.keys(filteredProducts).length > 1) {delete filteredProducts["0"]}
responce.render('user-profile.ejs', {userProducts:filteredProducts, user:userProfile})
} else {
responce.render('user-profile.ejs', {userProducts:[], user:userProfile})
}
})
.catch(e => {
console.log(e)
responce.render('404.ejs')
})
}
else {
responce.render('404.ejs')
}
})
.catch(e => {
console.log(e)
responce.render('404.ejs')
})
}
else {
responce.render('404.ejs')
}
})
app.get('/registration', function(request, responce){ app.get('/registration', function(request, responce){
responce.render('user-registration.ejs') responce.render('user-registration.ejs')
}) })
@ -289,8 +331,7 @@ app.post('/request-api', async function(request, responce){
let buyerName = buyer.fName + ' ' + buyer.lName let buyerName = buyer.fName + ' ' + buyer.lName
let buyerEmail = buyer.email let buyerEmail = buyer.email
let content = contentMaker(sellerName, buyerName, buyerEmail, productName, pid, bMsg) let content = contentMaker(sellerName, buyerName, buyerEmail, productName, pid, bMsg)
let rsp = sendEmail(sellerEmail, content) sendEmail(sellerEmail, content)
console.log(rsp)
responce.send({success:true, error:null}) responce.send({success:true, error:null})
} else { } else {
responce.send({success:false, error:'Unregistered user!'}) responce.send({success:false, error:'Unregistered user!'})