Commit 1859d25e by Munteanu Petrisor

Add auth middleware for homepage

Remove unnecessary DOM elements Add initial sql script
parent 67867f9a
vendor vendor
uploads uploads
.gitignore.swp .gitignore.swp
.idea
config.php
CREATE TABLE IF NOT EXISTS `cookies`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`cookie` text NOT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = latin1
AUTO_INCREMENT = 10;
CREATE TABLE IF NOT EXISTS `quotes`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`created_at` datetime NOT NULL,
`status` int(11) NOT NULL,
`price` double DEFAULT NULL,
`details` text,
`file` text,
PRIMARY KEY (`id`),
KEY `user_id_index` (`user_id`),
KEY `status_index` (`status`)
) ENGINE = InnoDB
DEFAULT CHARSET = latin1
AUTO_INCREMENT = 100;
\ No newline at end of file
...@@ -68,19 +68,19 @@ var kalOpt = { ...@@ -68,19 +68,19 @@ var kalOpt = {
direction: 'future', direction: 'future',
directionScrolling: true, directionScrolling: true,
useYearNav: false, useYearNav: false,
blackout: function(date) { blackout: function (date) {
var dateFmt = 'YYYY-MM-DD'; var dateFmt = 'YYYY-MM-DD';
var date = Kalendae.moment(date).startOf('day'); var date = Kalendae.moment(date).startOf('day');
var shortDate = date.format(dateFmt); var shortDate = date.format(dateFmt);
var day = date.day(); var day = date.day();
var publicationID = this.settings.publicationID; var publicationID = this.settings.publicationID;
var publication = ko.utils.arrayFirst(app.publications(), function(e) { var publication = ko.utils.arrayFirst(app.publications(), function (e) {
return e.id() === publicationID; return e.id() === publicationID;
}); });
if (!publication) { if (!publication) {
return [1,0,0,0,0,0,0][day]; return [1, 0, 0, 0, 0, 0, 0][day];
} }
var disabledWeekDays = publication.disabledWeekDays(); var disabledWeekDays = publication.disabledWeekDays();
...@@ -101,7 +101,7 @@ var kalOpt = { ...@@ -101,7 +101,7 @@ var kalOpt = {
} }
}; };
var PublicationModel = function(data) { var PublicationModel = function (data) {
ko.mapping.fromJS(data, {}, this); ko.mapping.fromJS(data, {}, this);
var self = this; var self = this;
...@@ -111,25 +111,25 @@ var PublicationModel = function(data) { ...@@ -111,25 +111,25 @@ var PublicationModel = function(data) {
self.optionIDs = ko.observableArray([]); self.optionIDs = ko.observableArray([]);
self.dates = ko.observableArray([]); self.dates = ko.observableArray([]);
self.pubName = data.name; self.pubName = data.name;
self.distribution = ko.pureComputed(function() { self.distribution = ko.pureComputed(function () {
return self.type() == 1 ? 'National' : 'Local'; return self.type() == 1 ? 'National' : 'Local';
}); });
self.price = ko.observable({'total': '0', 'vat': '0', 'base': '0'}); self.price = ko.observable({'total': '0', 'vat': '0', 'base': '0'});
self.isPristine = function() { self.isPristine = function () {
return (self.dates().length && self.columnID()); return (self.dates().length && self.columnID());
}; };
self.options = ko.pureComputed(function() { self.options = ko.pureComputed(function () {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) { var selectedColumn = ko.utils.arrayFilter(self.columns(), function (column) {
return column.id == self.columnID(); return column.id == self.columnID();
}); });
return selectedColumn.length ? selectedColumn[0].options : []; return selectedColumn.length ? selectedColumn[0].options : [];
}, self).extend({ notify: 'always' }); }, self).extend({notify: 'always'});
self.columnName = ko.pureComputed(function(){ self.columnName = ko.pureComputed(function () {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) { var selectedColumn = ko.utils.arrayFilter(self.columns(), function (column) {
return column.id == self.columnID(); return column.id == self.columnID();
}); });
...@@ -139,23 +139,23 @@ var PublicationModel = function(data) { ...@@ -139,23 +139,23 @@ var PublicationModel = function(data) {
self.columnID.subscribe(app.getSummary); self.columnID.subscribe(app.getSummary);
self.optionIDs.subscribe(app.getSummary); self.optionIDs.subscribe(app.getSummary);
self.dates.subscribe(function() { self.dates.subscribe(function () {
if(self.dates().length == 0) { if (self.dates().length == 0) {
self.price({'vat': '0', 'base': '0', 'total': '0'}); self.price({'vat': '0', 'base': '0', 'total': '0'});
} }
app.getSummary(); app.getSummary();
}); });
self.columnID.subscribe(function() { self.columnID.subscribe(function () {
self.optionIDs([]); self.optionIDs([]);
}); });
self.optionStr = ko.pureComputed(function() { self.optionStr = ko.pureComputed(function () {
var optionNames = []; var optionNames = [];
ko.utils.arrayForEach(self.optionIDs(), function(sopt) { ko.utils.arrayForEach(self.optionIDs(), function (sopt) {
ko.utils.arrayForEach(self.options(), function(opt) { ko.utils.arrayForEach(self.options(), function (opt) {
if(sopt == opt.id) { if (sopt == opt.id) {
optionNames.push(opt.name); optionNames.push(opt.name);
} }
}); });
...@@ -163,9 +163,9 @@ var PublicationModel = function(data) { ...@@ -163,9 +163,9 @@ var PublicationModel = function(data) {
return optionNames.join(', '); return optionNames.join(', ');
}); });
self.columnStr = function() { self.columnStr = function () {
ret = ''; ret = '';
ko.utils.arrayForEach(self.columns(), function(col) { ko.utils.arrayForEach(self.columns(), function (col) {
if (col.id == self.columnID()) { if (col.id == self.columnID()) {
ret = col.name; ret = col.name;
} }
...@@ -174,9 +174,9 @@ var PublicationModel = function(data) { ...@@ -174,9 +174,9 @@ var PublicationModel = function(data) {
return ret ? ret : ''; return ret ? ret : '';
}; };
self.datesStr = ko.pureComputed(function() { self.datesStr = ko.pureComputed(function () {
var sDates = ''; var sDates = '';
ko.utils.arrayForEach(self.dates(), function(date) { ko.utils.arrayForEach(self.dates(), function (date) {
sDates = sDates + moment(date).format('D-M-Y, '); sDates = sDates + moment(date).format('D-M-Y, ');
}); });
...@@ -188,10 +188,10 @@ var PublicationModel = function(data) { ...@@ -188,10 +188,10 @@ var PublicationModel = function(data) {
return sDates; return sDates;
}); });
self.selected.subscribe(function(isSelected) { self.selected.subscribe(function (isSelected) {
app.getSummary(); app.getSummary();
if (isSelected && self.columns().length == 0) { if (isSelected && self.columns().length == 0) {
$.get('/columns/' + self.id()).done(function(data) { $.get('/columns/' + self.id()).done(function (data) {
self.columns(data); self.columns(data);
if (self.columns().length == 0) { if (self.columns().length == 0) {
return; return;
...@@ -202,7 +202,7 @@ var PublicationModel = function(data) { ...@@ -202,7 +202,7 @@ var PublicationModel = function(data) {
kalOpt.publicationID = self.id(); kalOpt.publicationID = self.id();
var k = new Kalendae('cal' + self.id(), kalOpt); var k = new Kalendae('cal' + self.id(), kalOpt);
k.subscribe('change', function(date) { k.subscribe('change', function (date) {
app.text.pauseNotifications = true; app.text.pauseNotifications = true;
$('#textarea1').blur(); $('#textarea1').blur();
app.text.pauseNotifications = false; app.text.pauseNotifications = false;
...@@ -214,12 +214,12 @@ var PublicationModel = function(data) { ...@@ -214,12 +214,12 @@ var PublicationModel = function(data) {
}); });
} }
var Application = function() { var Application = function () {
var self = this; var self = this;
// my vars // my vars
self.isLoggedIn = ko.observable(false); self.isLoggedIn = ko.observable(false);
self.adType = ko.observable(1); self.adType = ko.observable(2);
self.kinds = ko.observableArray([]); self.kinds = ko.observableArray([]);
self.selectedKind = ko.observable(); self.selectedKind = ko.observable();
self.invoicePerAd = ko.observable(true); self.invoicePerAd = ko.observable(true);
...@@ -248,35 +248,30 @@ var Application = function() { ...@@ -248,35 +248,30 @@ var Application = function() {
self.contactValid = ko.observable(false); self.contactValid = ko.observable(false);
// my functions // my functions
self.isPristineQuote = function () {
self.changeAdType = function(adType) {
self.adType(adType);
};
self.isPristineQuote = function(){
return self.adType() && self.contactValid() && Object.keys(self.quoteFile()).length != 0; return self.adType() && self.contactValid() && Object.keys(self.quoteFile()).length != 0;
}; };
self.selectedKind.subscribe(function() { self.selectedKind.subscribe(function () {
if(self.selectedKind() == 3){ if (self.selectedKind() == 3) {
ko.utils.arrayForEach(self.publications(), function(publication){ ko.utils.arrayForEach(self.publications(), function (publication) {
if(publication.id() == jenuPublication){ if (publication.id() == jenuPublication) {
publication.selected(true); publication.selected(true);
}else{ } else {
publication.selected(false); publication.selected(false);
} }
}); });
}else{ } else {
ko.utils.arrayForEach(self.publications(), function(publication){ ko.utils.arrayForEach(self.publications(), function (publication) {
publication.selected(false); publication.selected(false);
}); });
$(".collapsible > li:first-child .collapsible-header").trigger("click"); $(".collapsible > li:first-child .collapsible-header").trigger("click");
} }
}); });
self.doFinalQuote = function(){ self.doFinalQuote = function () {
if(self.isPristineQuote() && self.selected().length) { if (self.isPristineQuote() && self.selected().length) {
$(".quote-btn-create").addClass("disabled").text("Asteptati..."); $(".quote-btn-create").addClass("disabled").text("Asteptati...");
var adObj = { var adObj = {
columns: [], columns: [],
...@@ -286,15 +281,15 @@ var Application = function() { ...@@ -286,15 +281,15 @@ var Application = function() {
}; };
ko.utils.arrayForEach(self.selected(), function(pub) { ko.utils.arrayForEach(self.selected(), function (pub) {
var days = []; var days = [];
var options = []; var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) { ko.utils.arrayForEach(pub.optionIDs(), function (id) {
options.push({'OptionID': id}); options.push({'OptionID': id});
}); });
ko.utils.arrayForEach(pub.dates(), function(date) { ko.utils.arrayForEach(pub.dates(), function (date) {
days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')}); days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')});
}); });
...@@ -328,7 +323,7 @@ var Application = function() { ...@@ -328,7 +323,7 @@ var Application = function() {
iban: self.iban() iban: self.iban()
}; };
if(!Object.keys(self.quoteFile()).length){ if (!Object.keys(self.quoteFile()).length) {
return; return;
} }
...@@ -349,8 +344,8 @@ var Application = function() { ...@@ -349,8 +344,8 @@ var Application = function() {
processData: false, processData: false,
contentType: false, contentType: false,
data: formData, data: formData,
success: function(resp){ success: function (resp) {
if(resp.success){ if (resp.success) {
//redirect here to the user account //redirect here to the user account
window.location = '/contul-meu'; window.location = '/contul-meu';
} }
...@@ -360,20 +355,20 @@ var Application = function() { ...@@ -360,20 +355,20 @@ var Application = function() {
}; };
// end of my functions // end of my functions
self.buildSummary = function() { self.buildSummary = function () {
var obj = { var obj = {
text: self.text(), columns: [], text: self.text(), columns: [],
}; };
ko.utils.arrayForEach(self.selected(), function(pub) { ko.utils.arrayForEach(self.selected(), function (pub) {
var days = []; var days = [];
var options = []; var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) { ko.utils.arrayForEach(pub.optionIDs(), function (id) {
options.push({'OptionID': id}); options.push({'OptionID': id});
}); });
ko.utils.arrayForEach(pub.dates(), function(date) { ko.utils.arrayForEach(pub.dates(), function (date) {
days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')}); days.push({'Date': moment(date).format('YYYY-MM-DDT00:00:00[Z]')});
}); });
...@@ -390,7 +385,7 @@ var Application = function() { ...@@ -390,7 +385,7 @@ var Application = function() {
return obj; return obj;
}; };
self.createDraft = function() { self.createDraft = function () {
var obj = self.buildSummary(); var obj = self.buildSummary();
var name = (self.company() != '') ? self.company() : var name = (self.company() != '') ? self.company() :
self.firstName() + ' ' + self.lastName(); self.firstName() + ' ' + self.lastName();
...@@ -411,8 +406,8 @@ var Application = function() { ...@@ -411,8 +406,8 @@ var Application = function() {
}; };
var payButton = $('.pay-ad'); var payButton = $('.pay-ad');
var doPayment = function(data) { var doPayment = function (data) {
$.each(data, function(k, v) { $.each(data, function (k, v) {
$('#payForm input[name=' + k + ']').attr('value', v); $('#payForm input[name=' + k + ']').attr('value', v);
}); });
...@@ -427,7 +422,7 @@ var Application = function() { ...@@ -427,7 +422,7 @@ var Application = function() {
dataType: 'json', dataType: 'json',
contentType: 'application/json;charset=utf-8', contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj), data: JSON.stringify(obj),
success: function(data) { success: function (data) {
var id = data.ad_id; var id = data.ad_id;
if (!id) { if (!id) {
payButton.removeAttr('disabled'); payButton.removeAttr('disabled');
...@@ -451,42 +446,42 @@ var Application = function() { ...@@ -451,42 +446,42 @@ var Application = function() {
data: formData, data: formData,
processData: false, processData: false,
contentType: false, contentType: false,
success: function() { success: function () {
doPayment(data); doPayment(data);
}, },
error: function(data) { error: function (data) {
payButton.removeAttr('disabled'); payButton.removeAttr('disabled');
} }
}); });
}, },
error: function(data) { error: function (data) {
payButton.removeAttr('disabled'); payButton.removeAttr('disabled');
} }
}); });
}; };
self.isPristine = ko.computed(function() { self.isPristine = ko.computed(function () {
return self.price().total !== '0' && self.contactValid(); return self.price().total !== '0' && self.contactValid();
}); });
self.doFinal = function() { self.doFinal = function () {
if(self.isPristine() && self.selected().length) { if (self.isPristine() && self.selected().length) {
self.finalStep(true); self.finalStep(true);
} }
}; };
self.selected = function() { self.selected = function () {
return ko.utils.arrayFilter(self.publications(), function(publication) { return ko.utils.arrayFilter(self.publications(), function (publication) {
return publication.selected(); return publication.selected();
}); });
}; };
self.addTooltip = function(els) { self.addTooltip = function (els) {
$('label[for="' + els[1].id + '"]').tooltip(); $('label[for="' + els[1].id + '"]').tooltip();
}; };
self.resetPrice = function() { self.resetPrice = function () {
ko.utils.arrayForEach(self.selected(), function(pub) { ko.utils.arrayForEach(self.selected(), function (pub) {
pub.price({'vat': '0', 'base': '0', 'total': '0'}); pub.price({'vat': '0', 'base': '0', 'total': '0'});
}); });
...@@ -494,14 +489,14 @@ var Application = function() { ...@@ -494,14 +489,14 @@ var Application = function() {
self.finalStep(false); self.finalStep(false);
}; };
self.getSummary = function() { self.getSummary = function () {
if(!self.text().length) { if (!self.text().length) {
self.words('0'); self.words('0');
self.resetPrice(); self.resetPrice();
return; return;
} }
if(!self.selected().length) { if (!self.selected().length) {
self.resetPrice(); self.resetPrice();
return; return;
} }
...@@ -518,13 +513,13 @@ var Application = function() { ...@@ -518,13 +513,13 @@ var Application = function() {
dataType: 'json', dataType: 'json',
contentType: 'application/json;charset=utf-8', contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj), data: JSON.stringify(obj),
success: function(data) { success: function (data) {
self.price(data.price); self.price(data.price);
self.words(data.words); self.words(data.words);
ko.utils.arrayForEach(data.columns, function(column) { ko.utils.arrayForEach(data.columns, function (column) {
ko.utils.arrayForEach(self.selected(), function(pub) { ko.utils.arrayForEach(self.selected(), function (pub) {
if(column.id === pub.id()) { if (column.id === pub.id()) {
pub.price(column.price); pub.price(column.price);
return; return;
} }
...@@ -537,29 +532,30 @@ var Application = function() { ...@@ -537,29 +532,30 @@ var Application = function() {
self.text.subscribe(self.getSummary); self.text.subscribe(self.getSummary);
}; };
Application.prototype = function() { Application.prototype = function () {
return { return {
getPublications: function() { getPublications: function () {
var self = this; var self = this;
$.get('/listing', function(data) { $.get('/listing', function (data) {
ko.mapping.fromJS(data, { ko.mapping.fromJS(data, {
create: function(options) { create: function (options) {
return new PublicationModel(options.data); return new PublicationModel(options.data);
}}, self.publications); }
}, self.publications);
// just testing for viata libera // just testing for viata libera
// var pub = self.publications()[3]; // var pub = self.publications()[3];
// self.publications.removeAll(); // self.publications.removeAll();
// self.publications.push(pub); // self.publications.push(pub);
if(self.publications().length == 1){ if (self.publications().length == 1) {
self.publications()[0].selected(true); self.publications()[0].selected(true);
} }
}); });
}, },
getUserProfile: function() { getUserProfile: function () {
var self = this; var self = this;
$.get('/users/profile', function(resp) { $.get('/users/profile', function (resp) {
var profile = resp.data; var profile = resp.data;
// date personale // date personale
...@@ -580,12 +576,12 @@ Application.prototype = function() { ...@@ -580,12 +576,12 @@ Application.prototype = function() {
self.invoicePerAd(profile.group.invoiceInterval); self.invoicePerAd(profile.group.invoiceInterval);
if(self.invoicePerAd() != 0){ if (self.invoicePerAd() != 0) {
$("#date_persoana input").prop("disabled", "disabled"); $("#date_persoana input").prop("disabled", "disabled");
self.contactValid(true); self.contactValid(true);
} }
if(constants.group[profile.group.type]){ if (constants.group[profile.group.type]) {
self.kinds(constants.group[profile.group.type].kinds); self.kinds(constants.group[profile.group.type].kinds);
$('select').material_select(); $('select').material_select();
} }
...@@ -594,19 +590,19 @@ Application.prototype = function() { ...@@ -594,19 +590,19 @@ Application.prototype = function() {
}; };
}(); }();
function gotostep(step){ function gotostep(step) {
$('#'+step).click(); $('#' + step).click();
} }
var app = new Application(); var app = new Application();
app.getPublications(); app.getPublications();
ko.bindingHandlers.visible = { ko.bindingHandlers.visible = {
init: function(element, valueAccessor) { init: function (element, valueAccessor) {
var value = valueAccessor(); var value = valueAccessor();
$(element).toggle(ko.unwrap(value)); $(element).toggle(ko.unwrap(value));
}, },
update: function(element, valueAccessor) { update: function (element, valueAccessor) {
var value = valueAccessor(); var value = valueAccessor();
ko.unwrap(value) ? $(element).slideDown('fast') : ko.unwrap(value) ? $(element).slideDown('fast') :
$(element).slideUp('fast'); $(element).slideUp('fast');
...@@ -615,10 +611,10 @@ ko.bindingHandlers.visible = { ...@@ -615,10 +611,10 @@ ko.bindingHandlers.visible = {
ko.applyBindings(app); ko.applyBindings(app);
$(document).ready(function(){ $(document).ready(function () {
var isLoggedIn = !!$("#loggedInUser").val(); var isLoggedIn = !!$("#loggedInUser").val();
if(isLoggedIn){ if (isLoggedIn) {
app.isLoggedIn(isLoggedIn); app.isLoggedIn(isLoggedIn);
app.getUserProfile(); app.getUserProfile();
} }
...@@ -636,7 +632,7 @@ $(document).ready(function(){ ...@@ -636,7 +632,7 @@ $(document).ready(function(){
$('.modal').modal(); $('.modal').modal();
$('#do-payment').on('click', function(e) { $('#do-payment').on('click', function (e) {
$('#date_persoana').submit(); $('#date_persoana').submit();
}); });
...@@ -680,10 +676,10 @@ $(document).ready(function(){ ...@@ -680,10 +676,10 @@ $(document).ready(function(){
folderUpload: 'Nu puteti incarca directoare.' folderUpload: 'Nu puteti incarca directoare.'
} }
}, },
onSelect: function(f){ onSelect: function (f) {
app.quoteFile(f); app.quoteFile(f);
}, },
onRemove: function(){ onRemove: function () {
app.quoteFile({}); app.quoteFile({});
} }
}); });
...@@ -734,7 +730,7 @@ $(document).ready(function(){ ...@@ -734,7 +730,7 @@ $(document).ready(function(){
$('.image-preview-finalize').empty().append(img); $('.image-preview-finalize').empty().append(img);
}); });
$('.btn-delete-image').click(function() { $('.btn-delete-image').click(function () {
var el = $('#image-upload'); var el = $('#image-upload');
el.prop('jFiler').reset(); el.prop('jFiler').reset();
$('#file-path-name').val(''); $('#file-path-name').val('');
...@@ -742,21 +738,21 @@ $(document).ready(function(){ ...@@ -742,21 +738,21 @@ $(document).ready(function(){
}); });
$.validate({ $.validate({
lang : 'ro', lang: 'ro',
form: '#date_persoana', form: '#date_persoana',
scrollToTopOnError : true, scrollToTopOnError: true,
modules : 'html5', modules: 'html5',
modules : 'sanitize', modules: 'sanitize',
modules : 'security', modules: 'security',
modules : 'sepa', modules: 'sepa',
onError : function($form) { onError: function ($form) {
return false; return false;
}, },
onSuccess : function($form) { onSuccess: function ($form) {
return false; return false;
}, },
onElementValidate : function(valid, $el, $form, errorMess) { onElementValidate: function (valid, $el, $form, errorMess) {
if(!app.invoicePerAd()){ if (!app.invoicePerAd()) {
app.contactValid(true); app.contactValid(true);
} else { } else {
app.contactValid(valid); app.contactValid(valid);
......
...@@ -26,7 +26,8 @@ class API ...@@ -26,7 +26,8 @@ class API
protected $smtp; protected $smtp;
function __construct(Container $c = null) { function __construct(Container $c = null)
{
global $settings; global $settings;
$api = $settings['settings']['api']; $api = $settings['settings']['api'];
...@@ -41,7 +42,7 @@ class API ...@@ -41,7 +42,7 @@ class API
$this->smtp = $settings["settings"]["smtp"]; $this->smtp = $settings["settings"]["smtp"];
$this->uploadDirectory = $settings['settings']['upload']['path']; $this->uploadDirectory = $settings['settings']['upload']['path'];
if($c){ if ($c) {
$this->db = $c->get('db'); $this->db = $c->get('db');
$this->query_factory = new QueryFactory('mysql'); $this->query_factory = new QueryFactory('mysql');
$this->session = $c->get('session'); $this->session = $c->get('session');
...@@ -50,8 +51,62 @@ class API ...@@ -50,8 +51,62 @@ class API
$this->cookieFileClient = "/tmp/cookieFileClient.txt"; $this->cookieFileClient = "/tmp/cookieFileClient.txt";
} }
function GetPublications()
{
$settings = $this->GetSettings()['data'];
$disabledDates = $settings['dates']['disabledDates'];
$disabledWeekDays = $settings['dates']['disabledWeekDays'];
$ret = $this::Request('GET',
'/publications?active=true&onwebsite=true&&order=position');
foreach ($ret['data']['list'] as $id => $val) {
$logo = $this->address . '/publications/' . $val['id'] . '/logo';
$ret['data']['list'][$id]['image'] = $logo;
$enabledDates = [];
$pubDisabledDates = $disabledDates;
if (!empty($val['enabledDates'])) {
foreach ($val['enabledDates'] as $enabledDate) {
$enabledDates[] = $enabledDate['date'];
}
}
$enabledWeekDays = [];
$pubDisabledWeekDays = $disabledWeekDays;
if (!empty($val['enabledWeekDays'])) {
foreach ($val['enabledWeekDays'] as $enabledWeekDay) {
$enabledWeekDays[] = $enabledWeekDay['day'];
}
}
$ret['data']['list'][$id]['disabledDates'] = array_values(
array_diff($pubDisabledDates, $enabledDates)
);
$ret['data']['list'][$id]['disabledWeekDays'] = array_values(
array_diff($pubDisabledWeekDays, $enabledWeekDays)
);
}
$ret['data'] = $this::preserve(
$ret['data']['list'], [
'id', 'name', 'image', 'description', 'topics', 'circulation',
'type', 'disabledDates', 'disabledWeekDays'
]
);
return $ret;
}
function GetSettings()
{
return $this::Request('GET', '/application/settings');
}
function Request($method, $path, $data = [], function Request($method, $path, $data = [],
$saveCookies = false, $upload = false) { $saveCookies = false, $upload = false)
{
$curl = curl_init(); $curl = curl_init();
...@@ -74,14 +129,14 @@ class API ...@@ -74,14 +129,14 @@ class API
$opts[CURLOPT_CAINFO] = $this->certificate; $opts[CURLOPT_CAINFO] = $this->certificate;
} }
if($saveCookies) { if ($saveCookies) {
$opts[CURLOPT_COOKIEJAR] = $this->cookieFile; $opts[CURLOPT_COOKIEJAR] = $this->cookieFile;
} else { } else {
$opts[CURLOPT_COOKIEFILE] = $this->cookieFile; $opts[CURLOPT_COOKIEFILE] = $this->cookieFile;
} }
if(strtoupper($method) !== 'GET') { if (strtoupper($method) !== 'GET') {
if($upload) { if ($upload) {
$opts[CURLOPT_POSTFIELDS] = $data; $opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array( $opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data', 'Content-Type: multipart/form-data',
...@@ -105,7 +160,7 @@ class API ...@@ -105,7 +160,7 @@ class API
curl_close($curl); curl_close($curl);
if($path !== '/users/login' && $info['http_code'] == 401) { if ($path !== '/users/login' && $info['http_code'] == 401) {
$ret = $this::Login(); $ret = $this::Login();
if ($ret['info']['http_code'] == 200) { if ($ret['info']['http_code'] == 200) {
return $this->Request($method, $path, $data, $saveCookies); return $this->Request($method, $path, $data, $saveCookies);
...@@ -116,10 +171,17 @@ class API ...@@ -116,10 +171,17 @@ class API
throw new Exception('Internal API error'); throw new Exception('Internal API error');
} }
return ['info' => $info, 'data' => json_decode($response, true)]; return ['info' => $info, 'data' => json_decode($response, true)];
}
function Login()
{
return $this::Request('POST', '/users/login',
['email' => $this->email, 'password' => $this->password], true);
} }
function preserve($arr, $keys, $add = array()) { function preserve($arr, $keys, $add = array())
{
foreach ($arr as $id => $v) { foreach ($arr as $id => $v) {
foreach ($v as $key => $value) { foreach ($v as $key => $value) {
if (!in_array($key, $keys)) { if (!in_array($key, $keys)) {
...@@ -133,71 +195,16 @@ class API ...@@ -133,71 +195,16 @@ class API
return $arr; return $arr;
} }
function Login() { function GetPublicationsExt($id)
return $this::Request('POST', '/users/login', {
['email' => $this->email, 'password' => $this->password], true);
}
function GetSettings() {
return $this::Request('GET', '/application/settings');
}
function GetPublications() {
$settings = $this->GetSettings()['data'];
$disabledDates = $settings['dates']['disabledDates'];
$disabledWeekDays = $settings['dates']['disabledWeekDays'];
$ret = $this::Request('GET',
'/publications?active=true&onwebsite=true&&order=position');
foreach($ret['data']['list'] as $id => $val) {
$logo = $this->address.'/publications/'.$val['id'].'/logo';
$ret['data']['list'][$id]['image'] = $logo;
$enabledDates = [];
$pubDisabledDates = $disabledDates;
if (!empty($val['enabledDates'])) {
foreach ($val['enabledDates'] as $enabledDate) {
$enabledDates[] = $enabledDate['date'];
}
}
$enabledWeekDays = [];
$pubDisabledWeekDays = $disabledWeekDays;
if (!empty($val['enabledWeekDays'])) {
foreach ($val['enabledWeekDays'] as $enabledWeekDay) {
$enabledWeekDays[] = $enabledWeekDay['day'];
}
}
$ret['data']['list'][$id]['disabledDates'] = array_values(
array_diff($pubDisabledDates, $enabledDates)
);
$ret['data']['list'][$id]['disabledWeekDays'] = array_values(
array_diff($pubDisabledWeekDays, $enabledWeekDays)
);
}
$ret['data'] = $this::preserve(
$ret['data']['list'], [
'id', 'name', 'image', 'description', 'topics', 'circulation',
'type', 'disabledDates', 'disabledWeekDays'
]
);
return $ret;
}
function GetPublicationsExt($id) {
$ret = $this::Request('GET', $ret = $this::Request('GET',
'/publications/'.$id.'/columns?active=true&order=name'); '/publications/' . $id . '/columns?active=true&order=name');
$ret['data'] = $this::preserve($ret['data']['list'], $ret['data'] = $this::preserve($ret['data']['list'],
['id','name','options']); ['id', 'name', 'options']);
foreach ($ret['data'] as $id => $col) { foreach ($ret['data'] as $id => $col) {
if(!is_array($ret['data'][$id]['options'])) { if (!is_array($ret['data'][$id]['options'])) {
continue; continue;
} }
...@@ -207,8 +214,8 @@ class API ...@@ -207,8 +214,8 @@ class API
); );
$options = []; $options = [];
foreach($ret['data'][$id]['options'] as $oid => $o) { foreach ($ret['data'][$id]['options'] as $oid => $o) {
if($o['active'] !== true) { if ($o['active'] !== true) {
continue; continue;
} }
...@@ -221,8 +228,9 @@ class API ...@@ -221,8 +228,9 @@ class API
return $ret; return $ret;
} }
function MarkPayment($id, $amount, $transaction) { function MarkPayment($id, $amount, $transaction)
$ad = $this::Request('GET', '/ads/'.$id); {
$ad = $this::Request('GET', '/ads/' . $id);
if (empty($ad['data'])) { if (empty($ad['data'])) {
return false; return false;
} }
...@@ -232,20 +240,20 @@ class API ...@@ -232,20 +240,20 @@ class API
$ad['invoiceValue']['total'] != $amount) { $ad['invoiceValue']['total'] != $amount) {
return false; return false;
} }
if(empty($transaction)) { if (empty($transaction)) {
return false; return false;
} }
if(!empty($ad['transaction'])) { if (!empty($ad['transaction'])) {
return true; return true;
} }
$ad['transaction'] = $transaction; $ad['transaction'] = $transaction;
$result = $this::Request('PUT', '/ads/'.$id, $ad); $result = $this::Request('PUT', '/ads/' . $id, $ad);
if (empty($result['data'])) { if (empty($result['data'])) {
return false; return false;
} }
$ad = $this::Request('GET', '/ads/'.$id); $ad = $this::Request('GET', '/ads/' . $id);
if (empty($ad['data']['transaction']) || if (empty($ad['data']['transaction']) ||
$ad['data']['transaction'] != $transaction) { $ad['data']['transaction'] != $transaction) {
return false; return false;
...@@ -254,117 +262,70 @@ class API ...@@ -254,117 +262,70 @@ class API
return true; return true;
} }
function GetAd($id) { function GetAd($id)
return $this::Request('GET', '/ads/'.$id); {
return $this::Request('GET', '/ads/' . $id);
} }
function CancelDraft($id) { function CancelDraft($id)
return $this::Request('POST', '/ads/'.$id.'/cancel', ''); {
return $this::Request('POST', '/ads/' . $id . '/cancel', '');
} }
function CreateDraft($data) { function CreateDraft($data)
{
$data['source'] = 2; $data['source'] = 2;
$data['hasImage'] = false; $data['hasImage'] = false;
$data['kind'] = 1; $data['kind'] = 1;
$data['type'] = 1; $data['type'] = 1;
if(is_string($data['contact'])){ if (is_string($data['contact'])) {
$data["contact"] = json_decode($data["contact"], true); $data["contact"] = json_decode($data["contact"], true);
} }
if(is_string($data['columns'])){ if (is_string($data['columns'])) {
$data["columns"] = json_decode($data["columns"], true); $data["columns"] = json_decode($data["columns"], true);
} }
if(isset($data["invoicePerAd"])){ if (isset($data["invoicePerAd"])) {
unset($data["invoicePerAd"]); unset($data["invoicePerAd"]);
} }
if(isset($data["selectedKind"])){ if (isset($data["selectedKind"])) {
unset($data["selectedKind"]); unset($data["selectedKind"]);
} }
return $this::Request('POST', '/ads', $data); return $this::Request('POST', '/ads', $data);
} }
function ClientCreateDraft($data) { function UploadImage($id, $data)
$data['source'] = 2; {
$data['hasImage'] = false; $this::Request('POST', '/ads/' . $id . '/images/display/upload',
$data['type'] = 1; $data, false, true);
if(is_string($data['contact'])){
$data["contact"] = json_decode($data["contact"], true);
}
if(is_string($data['columns'])){
$data["columns"] = json_decode($data["columns"], true);
}
if(isset($data["invoicePerAd"])){
unset($data["invoicePerAd"]);
}
if(isset($data["selectedKind"])){
$data["kind"] = (int)$data["selectedKind"];
unset($data["selectedKind"]);
}
if(!empty($data["groupID"])){
$data["groupID"] = (int)$data["groupID"];
$data["groupUserID"] = $data["groupID"];
}
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie'];
$profile = $this::FetchUserProfile();
$data["group_id"] = $profile["data"]["group"]['id'];
$response = $this::RequestClient('POST', '/ads', $data, false, false, $userCookie);
return $response; return $this::Request('POST', '/ads/' . $id . '/images/print/upload',
$data, false, true);
} }
function GetPrice($data) { function AuthenticateUser($params = [])
$data['source'] = 2; {
$data['hasImage'] = false; if (!empty($params)) {
$data['type'] = 1; $ret = $this::LoginUser($params);
return $ret;
if(empty($data["selectedKind"])){
$data['kind'] = 1;
}else{
$data['kind'] = (int)$data["selectedKind"];
}
if(!empty($data["groupID"])){
$data["groupID"] = (int)$data["groupID"];
}
$ret = $this::Request('POST', '/ads/summary', $data);
$nw = array('columns' => array());
foreach($ret['data']['columns'] as $column) {
array_push($nw['columns'], array(
'id' => $column['publicationID'],
'price' => $column['invoiceValue'],
));
} }
$nw['words'] = $ret['data']['words']; return [];
$nw['price'] = $ret['data']['invoiceValue'];
$ret['data'] = $nw;
return $ret;
} }
function UploadImage($id, $data) { function LoginUser($credentials)
$this::Request('POST', '/ads/'.$id.'/images/display/upload', {
$data, false, true); return $this::RequestClient('POST', '/users/login',
['email' => $credentials['email'], 'password' => $credentials['password']], false, true);
return $this::Request('POST', '/ads/'.$id.'/images/print/upload',
$data, false, true);
} }
function RequestClient($method, $path, $data = [], function RequestClient($method, $path, $data = [],
$upload = false, $withHeaders = false, $cookie = '') { $upload = false, $withHeaders = false, $cookie = '')
{
$curl = curl_init(); $curl = curl_init();
...@@ -379,9 +340,11 @@ class API ...@@ -379,9 +340,11 @@ class API
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE,
); );
if($withHeaders){ if ($withHeaders) {
$opts[CURLOPT_HEADER] = 1;} $opts[CURLOPT_HEADER] = 1;
{} }
{
}
if (empty($this->certificate)) { if (empty($this->certificate)) {
$opts[CURLOPT_SSL_VERIFYPEER] = false; $opts[CURLOPT_SSL_VERIFYPEER] = false;
...@@ -392,8 +355,8 @@ class API ...@@ -392,8 +355,8 @@ class API
} }
if(strtoupper($method) !== 'GET') { if (strtoupper($method) !== 'GET') {
if($upload) { if ($upload) {
$opts[CURLOPT_POSTFIELDS] = $data; $opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array( $opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data', 'Content-Type: multipart/form-data',
...@@ -408,7 +371,7 @@ class API ...@@ -408,7 +371,7 @@ class API
} }
} }
if(strlen($cookie)){ if (strlen($cookie)) {
$opts[CURLOPT_HTTPHEADER][] = "Cookie: rl=$cookie;"; $opts[CURLOPT_HTTPHEADER][] = "Cookie: rl=$cookie;";
} }
...@@ -419,11 +382,11 @@ class API ...@@ -419,11 +382,11 @@ class API
$err = curl_error($curl); $err = curl_error($curl);
$info = curl_getinfo($curl); $info = curl_getinfo($curl);
if($path == '/users/login'){ if ($path == '/users/login') {
preg_match('/Set-Cookie:\s*rl=([^;]+);/i', $response, $m); preg_match('/Set-Cookie:\s*rl=([^;]+);/i', $response, $m);
if(count($m)){ if (count($m)) {
$cookies = $m[1]; $cookies = $m[1];
if(strlen($cookies)){ if (strlen($cookies)) {
$newR = explode("\n\r\n", $response); $newR = explode("\n\r\n", $response);
$user = json_decode($newR[1]); $user = json_decode($newR[1]);
...@@ -438,9 +401,9 @@ class API ...@@ -438,9 +401,9 @@ class API
$result = $this->db->fetchOne($select->getStatement(), $select->getBindValues()); $result = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
if(!$result){ if (!$result) {
$insert = $this->query_factory->newInsert(); $insert = $this->query_factory->newInsert();
$insert->into('cookies')->cols([ $insert->into('cookies')->cols([
'cookie' => $cookies, 'cookie' => $cookies,
'user_id' => $user->id 'user_id' => $user->id
]); ]);
...@@ -464,7 +427,7 @@ class API ...@@ -464,7 +427,7 @@ class API
$exists = $this->session->exists('user_id'); $exists = $this->session->exists('user_id');
if(!$exists){ if (!$exists) {
$this->session->set('user_id', $user->id); $this->session->set('user_id', $user->id);
} }
...@@ -476,50 +439,14 @@ class API ...@@ -476,50 +439,14 @@ class API
curl_close($curl); curl_close($curl);
return ['info' => $info, 'data' => json_decode($response, true)]; return ['info' => $info, 'data' => json_decode($response, true)];
}
function LoginUser($credentials) {
return $this::RequestClient('POST', '/users/login',
['email' => $credentials['email'], 'password' => $credentials['password']], false, true);
}
function AuthenticateUser($params = []){
if(!empty($params)){
$ret = $this::LoginUser($params);
return $ret;
}
return [];
}
function GetUserCookie($userId){
$select = $this->query_factory->newSelect();
$select->from('cookies')->cols([
'cookie'
])
->where("user_id = :user_id")
->bindValues([
'user_id' => $userId
]);
return $this->db->fetchOne($select->getStatement(), $select->getBindValues());
} }
function FetchUserProfile() { function AddQuote($params, $file)
if ($this->session->exists('user_id')){ {
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie']; if (count($params) && !empty($file) && $this->session->exists('user_id')) {
$rsp = $this::RequestClient('GET','/users/profile',[], false, false, $userCookie);
return $rsp;
}
return false;
}
function AddQuote($params, $file) {
if(count($params) && !empty($file) && $this->session->exists('user_id')){
if( $file->getError() === UPLOAD_ERR_OK ){ if ($file->getError() === UPLOAD_ERR_OK) {
$filename = $this->moveUploadedFile($this->uploadDirectory, $file); $filename = $this->moveUploadedFile($this->uploadDirectory, $file);
} }
...@@ -527,7 +454,7 @@ class API ...@@ -527,7 +454,7 @@ class API
$insert->into("quotes") $insert->into("quotes")
->cols([ ->cols([
"user_id" => $this->session->user_id, "user_id" => $this->session->user_id,
"created_at" => date("Y-m-d H:i:s") , "created_at" => date("Y-m-d H:i:s"),
"status" => 1, "status" => 1,
"price" => NULL, "price" => NULL,
"details" => json_encode($params), "details" => json_encode($params),
...@@ -540,7 +467,7 @@ class API ...@@ -540,7 +467,7 @@ class API
$contact = json_decode($params["contact"], true); $contact = json_decode($params["contact"], true);
// TODO de pus email-ul clientului aici // TODO de pus email-ul clientului aici
$this::SendMail($this->admin["email"], $contact['email'], "Cotatie adaugata", "O noua cotatie a fost adaugata" ); $this::SendMail($this->admin["email"], $contact['email'], "Cotatie adaugata", "O noua cotatie a fost adaugata");
return true; return true;
...@@ -549,22 +476,59 @@ class API ...@@ -549,22 +476,59 @@ class API
return false; return false;
} }
function GetUserQuotes($params = []){ function moveUploadedFile($directory, UploadedFile $uploadedFile)
if($this->session->exists("user_id")){ {
$basename = bin2hex(openssl_random_pseudo_bytes(8));
$filename = sprintf('%s', $basename . '_' . $uploadedFile->getClientFilename());
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
return $filename;
}
function SendMail($from, $to, $subject, $body, $altBody = '')
{
$mail = new PHPMailer(true);
try {
//Server settings
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = $this->smtp["host"]; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = $this->smtp["username"]; // SMTP username
$mail->Password = $this->smtp["password"]; // SMTP password
$mail->SMTPSecure = $this->smtp["secure"]; // Enable TLS encryption, `ssl` also accepted
$mail->Port = $this->smtp["port"]; // TCP port to connect to
//Recipients
$mail->setFrom($from);
$mail->addAddress($to); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = $altBody;
$mail->send();
} catch (PException $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}
function GetUserQuotes($params = [])
{
if ($this->session->exists("user_id")) {
$select = $this->query_factory->newSelect(); $select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])->where('user_id = :user_id')->orderBy(['status', 'created_at desc']) $select->from('quotes')->cols(["*"])->where('user_id = :user_id')->orderBy(['status', 'created_at desc'])
->bindValues([ ->bindValues([
"user_id" => $this->session->user_id "user_id" => $this->session->user_id
]); ]);
$limit = isset($params['limit']) ? $params['limit']:''; $limit = isset($params['limit']) ? $params['limit'] : '';
$offset = isset($params['offset']) ? $params['offset']:0; $offset = isset($params['offset']) ? $params['offset'] : 0;
if(!empty($offset) && is_numeric($offset)){ if (!empty($offset) && is_numeric($offset)) {
$select->offset($offset); $select->offset($offset);
} }
if(!empty($limit) && is_numeric($limit)){ if (!empty($limit) && is_numeric($limit)) {
$select->limit($limit); $select->limit($limit);
} }
...@@ -583,21 +547,22 @@ class API ...@@ -583,21 +547,22 @@ class API
return false; return false;
} }
function GetAdminQuotes($params = []){ function GetAdminQuotes($params = [])
if($this->session->exists('user_id')){ {
if ($this->session->exists('user_id')) {
$isAdmin = $this::CheckAdmin(); $isAdmin = $this::CheckAdmin();
if($isAdmin){ if ($isAdmin) {
$select = $this->query_factory->newSelect(); $select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])->orderBy(['status', 'created_at desc']); $select->from('quotes')->cols(["*"])->orderBy(['status', 'created_at desc']);
$limit = isset($params['limit']) ? $params['limit']:''; $limit = isset($params['limit']) ? $params['limit'] : '';
$offset = isset($params['offset']) ? $params['offset']:0; $offset = isset($params['offset']) ? $params['offset'] : 0;
if(!empty($offset) && is_numeric($offset)){ if (!empty($offset) && is_numeric($offset)) {
$select->offset($offset); $select->offset($offset);
} }
if(!empty($limit) && is_numeric($limit)){ if (!empty($limit) && is_numeric($limit)) {
$select->limit($limit); $select->limit($limit);
} }
...@@ -615,17 +580,22 @@ class API ...@@ -615,17 +580,22 @@ class API
} }
} }
function moveUploadedFile($directory, UploadedFile $uploadedFile) function CheckAdmin()
{ {
$basename = bin2hex(openssl_random_pseudo_bytes(8)); if ($this->session->exists('user_id')) {
$filename = sprintf('%s', $basename . '_' . $uploadedFile->getClientFilename()); $userProfile = $this::Request('GET', '/users/' . $this->session->user_id);
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename); if ($userProfile['info']['http_code'] == 200) {
return $userProfile['data']['admin'];
}
return $filename; return false;
}
return false;
} }
function GetQuote($quoteId){ function GetQuote($quoteId)
if($quoteId && $this->session->exists('user_id')){ {
if ($quoteId && $this->session->exists('user_id')) {
$params = [ $params = [
"id" => (int)$quoteId, "id" => (int)$quoteId,
...@@ -636,16 +606,16 @@ class API ...@@ -636,16 +606,16 @@ class API
$select->from('quotes')->cols(["*"]) $select->from('quotes')->cols(["*"])
->where('id = :id'); ->where('id = :id');
if(!$this::CheckAdmin()){ if (!$this::CheckAdmin()) {
$params["user_id"] = $this->session->user_id; $params["user_id"] = $this->session->user_id;
$select->where('user_id = :user_id'); $select->where('user_id = :user_id');
} }
$select->bindValues($params); $select->bindValues($params);
$quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues()); $quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
if($quote){ if ($quote) {
return $quote; return $quote;
} }
...@@ -655,24 +625,25 @@ class API ...@@ -655,24 +625,25 @@ class API
return false; return false;
} }
function UpdateQuote($params = []){ function UpdateQuote($params = [])
if(!empty($params) && isset($params['id'])){ {
if (!empty($params) && isset($params['id'])) {
$isAdmin = $this::CheckAdmin(); $isAdmin = $this::CheckAdmin();
$cols = ["status"]; $cols = ["status"];
if(isset($params["price"]) || !empty($params['adText'])){ if (isset($params["price"]) || !empty($params['adText'])) {
if($isAdmin){ if ($isAdmin) {
$cols[] = "price"; $cols[] = "price";
}else{ } else {
unset($params["price"]); unset($params["price"]);
} }
} }
if(!in_array($params["status"], [2,3,7]) && !empty($params["fromUser"]) && $params["fromUser"]){ if (!in_array($params["status"], [2, 3, 7]) && !empty($params["fromUser"]) && $params["fromUser"]) {
return false; return false;
} }
if(isset($params["fromUser"])){ if (isset($params["fromUser"])) {
unset($params["fromUser"]); unset($params["fromUser"]);
} }
...@@ -684,21 +655,21 @@ class API ...@@ -684,21 +655,21 @@ class API
"id" => $params["id"] "id" => $params["id"]
]); ]);
$quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues()); $quote = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
$quoteDetails = json_decode($quote["details"], true); $quoteDetails = json_decode($quote["details"], true);
if(!empty($params["adText"])){ if (!empty($params["adText"])) {
$quoteDetails["text"] = $params["adText"]; $quoteDetails["text"] = $params["adText"];
$quoteDetails["columns"] = json_decode($quoteDetails["columns"]); $quoteDetails["columns"] = json_decode($quoteDetails["columns"]);
$quoteDetails["contact"] = json_decode($quoteDetails["contact"], true); $quoteDetails["contact"] = json_decode($quoteDetails["contact"], true);
$price = $this::GetPrice($quoteDetails); $price = $this::GetPrice($quoteDetails);
$params['price'] = $price['data']['price']['total']; $params['price'] = $price['data']['price']['total'];
unset($params['adText']); unset($params['adText']);
$params['details'] = json_encode($quoteDetails); $params['details'] = json_encode($quoteDetails);
$cols[] = 'details'; $cols[] = 'details';
} }
if($params["status"] == 3){ if ($params["status"] == 3) {
// $quoteDetails["group_id"] = 8; // $quoteDetails["group_id"] = 8;
$data = $this::ClientCreateDraft($quoteDetails); $data = $this::ClientCreateDraft($quoteDetails);
...@@ -712,7 +683,7 @@ class API ...@@ -712,7 +683,7 @@ class API
$params['details'] = json_encode($quoteDetails); $params['details'] = json_encode($quoteDetails);
} }
if(!empty($quoteDetails["invoicePerAd"]) && $quoteDetails["invoicePerAd"] != 0 && $params["status"] == 3){ if (!empty($quoteDetails["invoicePerAd"]) && $quoteDetails["invoicePerAd"] != 0 && $params["status"] == 3) {
$params["status"] = 6; $params["status"] = 6;
} }
...@@ -720,14 +691,14 @@ class API ...@@ -720,14 +691,14 @@ class API
$update->table('quotes') $update->table('quotes')
->cols($cols); ->cols($cols);
if(!$isAdmin && empty($params["payment"])){ if (!$isAdmin && empty($params["payment"])) {
$update->where('user_id = :user_id'); $update->where('user_id = :user_id');
$params["user_id"] = $this->session->user_id; $params["user_id"] = $this->session->user_id;
} }
$isPayment = !empty($params["payment"]); $isPayment = !empty($params["payment"]);
if($isPayment){ if ($isPayment) {
unset($params["payment"]); unset($params["payment"]);
} }
...@@ -738,20 +709,20 @@ class API ...@@ -738,20 +709,20 @@ class API
$stmt = $this->db->prepare($update->getStatement()); $stmt = $this->db->prepare($update->getStatement());
$stmt->execute($update->getBindValues()); $stmt->execute($update->getBindValues());
if($params["status"] == 2 && $isAdmin){ if ($params["status"] == 2 && $isAdmin) {
$this::SendMail($this->admin["email"], $quoteDetails["contact"]["email"], "Cotatia calculata", "Cotatia a fost calculata la pretul de: " . $params["price"] ); $this::SendMail($this->admin["email"], $quoteDetails["contact"]["email"], "Cotatia calculata", "Cotatia a fost calculata la pretul de: " . $params["price"]);
} }
if(($params["status"] == 3 || $params["status"] == 6) && !$isAdmin){ if (($params["status"] == 3 || $params["status"] == 6) && !$isAdmin) {
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Acceptata", "Cotatia a fost acceptata"); $this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Acceptata", "Cotatia a fost acceptata");
} }
if($params["status"] == 7 && !$isAdmin){ if ($params["status"] == 7 && !$isAdmin) {
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Refuzata", "Cotatia a fost refuzata"); $this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Refuzata", "Cotatia a fost refuzata");
} }
if($params["status"] == 4 && $isPayment){ if ($params["status"] == 4 && $isPayment) {
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Platita ", "Cotatia a fost platita"); $this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Platita ", "Cotatia a fost platita");
} }
return true; return true;
...@@ -760,9 +731,105 @@ class API ...@@ -760,9 +731,105 @@ class API
return false; return false;
} }
function DeleteQuote($id){ function GetPrice($data)
{
$data['source'] = 2;
$data['hasImage'] = false;
$data['type'] = 1;
if (empty($data["selectedKind"])) {
$data['kind'] = 1;
} else {
$data['kind'] = (int)$data["selectedKind"];
}
if (!empty($data["groupID"])) {
$data["groupID"] = (int)$data["groupID"];
}
$ret = $this::Request('POST', '/ads/summary', $data);
if($this->session->exists('user_id')){ $nw = array('columns' => array());
foreach ($ret['data']['columns'] as $column) {
array_push($nw['columns'], array(
'id' => $column['publicationID'],
'price' => $column['invoiceValue'],
));
}
$nw['words'] = $ret['data']['words'];
$nw['price'] = $ret['data']['invoiceValue'];
$ret['data'] = $nw;
return $ret;
}
function ClientCreateDraft($data)
{
$data['source'] = 2;
$data['hasImage'] = false;
$data['type'] = 1;
if (is_string($data['contact'])) {
$data["contact"] = json_decode($data["contact"], true);
}
if (is_string($data['columns'])) {
$data["columns"] = json_decode($data["columns"], true);
}
if (isset($data["invoicePerAd"])) {
unset($data["invoicePerAd"]);
}
if (isset($data["selectedKind"])) {
$data["kind"] = (int)$data["selectedKind"];
unset($data["selectedKind"]);
}
if (!empty($data["groupID"])) {
$data["groupID"] = (int)$data["groupID"];
$data["groupUserID"] = $data["groupID"];
}
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie'];
$profile = $this::FetchUserProfile();
$data["group_id"] = $profile["data"]["group"]['id'];
$response = $this::RequestClient('POST', '/ads', $data, false, false, $userCookie);
return $response;
}
function GetUserCookie($userId)
{
$select = $this->query_factory->newSelect();
$select->from('cookies')->cols([
'cookie'
])
->where("user_id = :user_id")
->bindValues([
'user_id' => $userId
]);
return $this->db->fetchOne($select->getStatement(), $select->getBindValues());
}
function FetchUserProfile()
{
if ($this->session->exists('user_id')) {
$userCookie = $this::GetUserCookie($this->session->user_id)['cookie'];
$rsp = $this::RequestClient('GET', '/users/profile', [], false, false, $userCookie);
return $rsp;
}
return false;
}
function DeleteQuote($id)
{
if ($this->session->exists('user_id')) {
$delete = $this->query_factory->newDelete(); $delete = $this->query_factory->newDelete();
$delete->from('quotes')->where('user_id = :user_id') $delete->from('quotes')->where('user_id = :user_id')
->where('id = :id') ->where('id = :id')
...@@ -781,20 +848,8 @@ class API ...@@ -781,20 +848,8 @@ class API
return false; return false;
} }
function QuoteStatuses()
function CheckAdmin(){ {
if($this->session->exists('user_id')){
$userProfile = $this::Request('GET', '/users/' . $this->session->user_id);
if($userProfile['info']['http_code'] == 200){
return $userProfile['data']['admin'];
}
return false;
}
return false;
}
function QuoteStatuses(){
return [ return [
1 => 'Cotatie noua', 1 => 'Cotatie noua',
2 => 'Calculata', 2 => 'Calculata',
...@@ -807,38 +862,14 @@ class API ...@@ -807,38 +862,14 @@ class API
]; ];
} }
function AdTypes(){ function AdTypes()
{
return [ return [
1 => 'Simplu', 1 => 'Simplu',
2 => 'LTD', 2 => 'LTD',
3 => 'UNEJ' 3 => 'UNEJ'
]; ];
} }
function SendMail($from, $to, $subject, $body , $altBody = ''){
$mail = new PHPMailer(true);
try{
//Server settings
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = $this->smtp["host"]; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = $this->smtp["username"]; // SMTP username
$mail->Password = $this->smtp["password"]; // SMTP password
$mail->SMTPSecure = $this->smtp["secure"]; // Enable TLS encryption, `ssl` also accepted
$mail->Port = $this->smtp["port"]; // TCP port to connect to
//Recipients
$mail->setFrom($from);
$mail->addAddress($to); // Add a recipient
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body = $body;
$mail->AltBody = $altBody;
$mail->send();
} catch (PException $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
}
} }
?> ?>
<?php <?php
$app->get('/', function ($request, $response, $args) { $app->get('/', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$args['loggedIn'] = true; $args['loggedIn'] = true;
$api = new Api($this); $api = new Api($this);
$args['admin'] = $api->CheckAdmin(); $args['admin'] = $api->CheckAdmin();
$args['jenuPublication'] = $this->jenuPublication; $args['jenuPublication'] = $this->jenuPublication;
return $this->renderer->render($response, 'index.phtml', $args);
} }
return $this->renderer->render($response, 'index.phtml', $args);
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
})->setName('home'); })->setName('home');
$app->get('/contul-meu', function($request, $response, $args){ $app->get('/contul-meu', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$params = $request->getQueryParams(); $params = $request->getQueryParams();
$quotes = $api->GetUserQuotes($params); $quotes = $api->GetUserQuotes($params);
...@@ -28,11 +30,11 @@ $app->get('/contul-meu', function($request, $response, $args){ ...@@ -28,11 +30,11 @@ $app->get('/contul-meu', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303); return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile'); })->setName('profile');
$app->get('/admin/cotatii', function($request, $response, $args){ $app->get('/admin/cotatii', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$isAdmin = $api->CheckAdmin(); $isAdmin = $api->CheckAdmin();
if($isAdmin){ if ($isAdmin) {
$params = $request->getQueryParams(); $params = $request->getQueryParams();
$quotes = $api->GetAdminQuotes($params); $quotes = $api->GetAdminQuotes($params);
$args["quotes"] = $quotes["quotes"]; $args["quotes"] = $quotes["quotes"];
...@@ -51,8 +53,8 @@ $app->get('/admin/cotatii', function($request, $response, $args){ ...@@ -51,8 +53,8 @@ $app->get('/admin/cotatii', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303); return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile'); })->setName('profile');
$app->post('/quote/{id}/update', function($request, $response, $args){ $app->post('/quote/{id}/update', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$params = $request->getParsedBody(); $params = $request->getParsedBody();
$fields = [ $fields = [
...@@ -60,15 +62,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){ ...@@ -60,15 +62,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
"status" => 2 "status" => 2
]; ];
if(!empty($params["price"])){ if (!empty($params["price"])) {
$fields["price"] = $params["price"]; $fields["price"] = $params["price"];
} }
if(!empty($params["status"])){ if (!empty($params["status"])) {
$fields["status"] = $params["status"]; $fields["status"] = $params["status"];
} }
if(!empty($params["adText"])){ if (!empty($params["adText"])) {
$fields["adText"] = $params["adText"]; $fields["adText"] = $params["adText"];
} }
...@@ -76,7 +78,7 @@ $app->post('/quote/{id}/update', function($request, $response, $args){ ...@@ -76,7 +78,7 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
$updated = $api->UpdateQuote($fields); $updated = $api->UpdateQuote($fields);
if($updated){ if ($updated) {
return $response->withJson(['success' => 'Updated']); return $response->withJson(['success' => 'Updated']);
} }
...@@ -86,15 +88,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){ ...@@ -86,15 +88,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
return $response->withJson(['error' => 'Unauthenticated']); return $response->withJson(['error' => 'Unauthenticated']);
}); });
$app->get('/uploads/{id}', function($request, $response, $args) { $app->get('/uploads/{id}', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$quote = $api->GetQuote($request->getAttribute('id')); $quote = $api->GetQuote($request->getAttribute('id'));
if($quote){ if ($quote) {
$file = __DIR__ . '/../uploads/' . $quote['file']; $file = __DIR__ . '/../uploads/' . $quote['file'];
$fh = fopen($file, 'rb'); $fh = fopen($file, 'rb');
if($fh){ if ($fh) {
$stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body $stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', 'application/force-download') return $response->withHeader('Content-Type', 'application/force-download')
...@@ -118,13 +120,13 @@ $app->get('/uploads/{id}', function($request, $response, $args) { ...@@ -118,13 +120,13 @@ $app->get('/uploads/{id}', function($request, $response, $args) {
return $response->withRedirect($this->router->pathFor('home'), 303); return $response->withRedirect($this->router->pathFor('home'), 303);
}); });
$app->delete('/quotation/{id}', function($request, $response, $args) { $app->delete('/quotation/{id}', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$quoteDeleted = $api->DeleteQuote($request->getAttribute('id')); $quoteDeleted = $api->DeleteQuote($request->getAttribute('id'));
if($quoteDeleted){ if ($quoteDeleted) {
return $response->withJson(['success' => true]); return $response->withJson(['success' => true]);
} }
...@@ -134,8 +136,8 @@ $app->delete('/quotation/{id}', function($request, $response, $args) { ...@@ -134,8 +136,8 @@ $app->delete('/quotation/{id}', function($request, $response, $args) {
return $response->withJson(['error' => 'not logged in']); return $response->withJson(['error' => 'not logged in']);
}); });
$app->post('/quotation', function($request, $response, $args){ $app->post('/quotation', function ($request, $response, $args) {
if($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$params = $request->getParsedBody(); $params = $request->getParsedBody();
$files = $request->getUploadedFiles(); $files = $request->getUploadedFiles();
...@@ -154,8 +156,8 @@ $app->post('/quotation', function($request, $response, $args){ ...@@ -154,8 +156,8 @@ $app->post('/quotation', function($request, $response, $args){
return $response->withJson(['error' => 'not logged in']); return $response->withJson(['error' => 'not logged in']);
}); });
$app->get('/logout', function($request, $response, $args){ $app->get('/logout', function ($request, $response, $args) {
if($this->session->exists("user_id")){ if ($this->session->exists("user_id")) {
$this->session->delete('user_id'); $this->session->delete('user_id');
return $response->withRedirect($this->router->pathFor('autentificare'), 303); return $response->withRedirect($this->router->pathFor('autentificare'), 303);
} }
...@@ -163,8 +165,8 @@ $app->get('/logout', function($request, $response, $args){ ...@@ -163,8 +165,8 @@ $app->get('/logout', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303); return $response->withRedirect($this->router->pathFor('home'), 303);
}); });
$app->get('/users/profile', function($request, $response, $args) { $app->get('/users/profile', function ($request, $response, $args) {
if ($this->session->exists('user_id')){ if ($this->session->exists('user_id')) {
$api = new Api($this); $api = new Api($this);
$profile = $api->FetchUserProfile(); $profile = $api->FetchUserProfile();
...@@ -174,8 +176,8 @@ $app->get('/users/profile', function($request, $response, $args) { ...@@ -174,8 +176,8 @@ $app->get('/users/profile', function($request, $response, $args) {
return $response->withJson(['error' => 'not logged in']); return $response->withJson(['error' => 'not logged in']);
}); });
$app->get('/autentificare', function($request, $response, $args){ $app->get('/autentificare', function ($request, $response, $args) {
if(!$this->session->exists('user_id')){ if (!$this->session->exists('user_id')) {
$args["errors"] = $this->flash->getMessages(); $args["errors"] = $this->flash->getMessages();
return $this->renderer->render($response, 'autentificare.phtml', $args); return $this->renderer->render($response, 'autentificare.phtml', $args);
} }
...@@ -184,21 +186,21 @@ $app->get('/autentificare', function($request, $response, $args){ ...@@ -184,21 +186,21 @@ $app->get('/autentificare', function($request, $response, $args){
})->setName('autentificare'); })->setName('autentificare');
$app->post('/autentificare', function($request, $response, $args){ $app->post('/autentificare', function ($request, $response, $args) {
$api = new API($this); $api = new API($this);
if(empty($args)){ if (empty($args)) {
$args = array(); $args = array();
} }
$params = $request->getParsedBody(); $params = $request->getParsedBody();
if(!empty($params)){ if (!empty($params)) {
$res = $api->AuthenticateUser($params); $res = $api->AuthenticateUser($params);
if(!empty($res)){ if (!empty($res)) {
if($res['info']['http_code'] !== 200){ if ($res['info']['http_code'] !== 200) {
$this->flash->addMessage("error", "Credentiale invalide"); $this->flash->addMessage("error", "Credentiale invalide");
return $response->withRedirect($this->router->pathFor('autentificare'), 303); return $response->withRedirect($this->router->pathFor('autentificare'), 303);
} else { } else {
return $response->withRedirect($this->router->pathFor('home'), 303); return $response->withRedirect($this->router->pathFor('home'), 303);
} }
...@@ -206,19 +208,17 @@ $app->post('/autentificare', function($request, $response, $args){ ...@@ -206,19 +208,17 @@ $app->post('/autentificare', function($request, $response, $args){
} }
}); });
$app->post('/confirm-payment', function($request, $response, $args){ $app->post('/confirm-payment', function ($request, $response, $args) {
require_once 'Mobilpay/Payment/Request/Abstract.php'; require_once 'Mobilpay/Payment/Request/Abstract.php';
require_once 'Mobilpay/Payment/Request/Card.php'; require_once 'Mobilpay/Payment/Request/Card.php';
require_once 'Mobilpay/Payment/Request/Notify.php'; require_once 'Mobilpay/Payment/Request/Notify.php';
require_once 'Mobilpay/Payment/Invoice.php'; require_once 'Mobilpay/Payment/Invoice.php';
require_once 'Mobilpay/Payment/Address.php'; require_once 'Mobilpay/Payment/Address.php';
$errorCode = 0; $errorCode = 0;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE; $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
$errorMessage = ''; $errorMessage = '';
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) {
{ if (isset($_POST['env_key']) && isset($_POST['data'])) {
if(isset($_POST['env_key']) && isset($_POST['data']))
{
#calea catre cheia privata #calea catre cheia privata
#cheia privata este generata de mobilpay, accesibil in Admin -> Conturi de comerciant -> Detalii -> Setari securitate #cheia privata este generata de mobilpay, accesibil in Admin -> Conturi de comerciant -> Detalii -> Setari securitate
$params = $request->getParsedBody(); $params = $request->getParsedBody();
...@@ -227,8 +227,7 @@ $app->post('/confirm-payment', function($request, $response, $args){ ...@@ -227,8 +227,7 @@ $app->post('/confirm-payment', function($request, $response, $args){
$paymentSettings = $settings['settings']['payments']; $paymentSettings = $settings['settings']['payments'];
$privateKeyFilePath = $paymentSettings["privateCertificate"]; $privateKeyFilePath = $paymentSettings["privateCertificate"];
try try {
{
$objPmReq = Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($params['env_key'], $params['data'], $privateKeyFilePath); $objPmReq = Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($params['env_key'], $params['data'], $privateKeyFilePath);
#uncomment the line below in order to see the content of the request #uncomment the line below in order to see the content of the request
// print_r($objPmReq); // print_r($objPmReq);
...@@ -236,7 +235,7 @@ $app->post('/confirm-payment', function($request, $response, $args){ ...@@ -236,7 +235,7 @@ $app->post('/confirm-payment', function($request, $response, $args){
$api = new API($this); $api = new API($this);
$id = $objPmReq->params["ad"]; $id = $objPmReq->params["ad"];
if(!empty($objPmReq->params["quote"])){ if (!empty($objPmReq->params["quote"])) {
$quoteId = $objPmReq->params["quote"]; $quoteId = $objPmReq->params["quote"];
} }
$amount = $objPmReq->invoice->amount; $amount = $objPmReq->invoice->amount;
...@@ -244,67 +243,65 @@ $app->post('/confirm-payment', function($request, $response, $args){ ...@@ -244,67 +243,65 @@ $app->post('/confirm-payment', function($request, $response, $args){
// action = status only if the associated error code is zero // action = status only if the associated error code is zero
if ($objPmReq->objPmNotify->errorCode == 0) { if ($objPmReq->objPmNotify->errorCode == 0) {
switch($objPmReq->objPmNotify->action) switch ($objPmReq->objPmNotify->action) {
{
#orice action este insotit de un cod de eroare si de un mesaj de eroare. Acestea pot fi citite folosind $cod_eroare = $objPmReq->objPmNotify->errorCode; respectiv $mesaj_eroare = $objPmReq->objPmNotify->errorMessage; #orice action este insotit de un cod de eroare si de un mesaj de eroare. Acestea pot fi citite folosind $cod_eroare = $objPmReq->objPmNotify->errorCode; respectiv $mesaj_eroare = $objPmReq->objPmNotify->errorMessage;
#pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId; #pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId;
case 'confirmed': case 'confirmed':
#cand action este confirmed avem certitudinea ca banii au plecat din contul posesorului de card si facem update al starii comenzii si livrarea produsului #cand action este confirmed avem certitudinea ca banii au plecat din contul posesorului de card si facem update al starii comenzii si livrarea produsului
//update DB, SET status = "confirmed/captured" //update DB, SET status = "confirmed/captured"
$api->MarkPayment($id, $amount, $transaction); $api->MarkPayment($id, $amount, $transaction);
if(isset($quoteId)){ if (isset($quoteId)) {
$api->UpdateQuote([ $api->UpdateQuote([
"status" => 4, "status" => 4,
"id" => $quoteId, "id" => $quoteId,
"payment" => true "payment" => true
]); ]);
} }
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
break; break;
case 'confirmed_pending': case 'confirmed_pending':
#cand action este confirmed_pending inseamna ca tranzactia este in curs de verificare antifrauda. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare. #cand action este confirmed_pending inseamna ca tranzactia este in curs de verificare antifrauda. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "pending" //update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
break; break;
case 'paid_pending': case 'paid_pending':
#cand action este paid_pending inseamna ca tranzactia este in curs de verificare. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare. #cand action este paid_pending inseamna ca tranzactia este in curs de verificare. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "pending" //update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
break; break;
case 'paid': case 'paid':
#cand action este paid inseamna ca tranzactia este in curs de procesare. Nu facem livrare/expediere. In urma trecerii de aceasta procesare se va primi o noua notificare pentru o actiune de confirmare sau anulare. #cand action este paid inseamna ca tranzactia este in curs de procesare. Nu facem livrare/expediere. In urma trecerii de aceasta procesare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
//update DB, SET status = "open/preauthorized" //update DB, SET status = "open/preauthorized"
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
break; break;
case 'canceled': case 'canceled':
#cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere. #cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere.
//update DB, SET status = "canceled" //update DB, SET status = "canceled"
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
$api->CancelDraft($id); $api->CancelDraft($id);
if(isset($quoteId)){ if (isset($quoteId)) {
$api->UpdateQuote([ $api->UpdateQuote([
"status" => 8, "status" => 8,
"id" => $quoteId, "id" => $quoteId,
"payment" => true "payment" => true
]); ]);
} }
break; break;
case 'credit': case 'credit':
#cand action este credit inseamna ca banii sunt returnati posesorului de card. Daca s-a facut deja livrare, aceasta trebuie oprita sau facut un reverse. #cand action este credit inseamna ca banii sunt returnati posesorului de card. Daca s-a facut deja livrare, aceasta trebuie oprita sau facut un reverse.
//update DB, SET status = "refunded" //update DB, SET status = "refunded"
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
break; break;
default: default:
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT; $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION; $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
$errorMessage = 'mobilpay_refference_action paramaters is invalid'; $errorMessage = 'mobilpay_refference_action paramaters is invalid';
break; break;
} }
} } else {
else {
//update DB, SET status = "rejected" //update DB, SET status = "rejected"
$api->CancelDraft($id); $api->CancelDraft($id);
if(isset($quoteId)){ if (isset($quoteId)) {
$api->UpdateQuote([ $api->UpdateQuote([
"status" => 5, "status" => 5,
"id" => $quoteId, "id" => $quoteId,
...@@ -313,35 +310,26 @@ $app->post('/confirm-payment', function($request, $response, $args){ ...@@ -313,35 +310,26 @@ $app->post('/confirm-payment', function($request, $response, $args){
} }
$errorMessage = $objPmReq->objPmNotify->errorMessage; $errorMessage = $objPmReq->objPmNotify->errorMessage;
} }
} catch (Exception $e) {
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY;
$errorCode = $e->getCode();
$errorMessage = $e->getMessage();
} }
catch(Exception $e) } else {
{ $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY; $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_PARAMETERS;
$errorCode = $e->getCode(); $errorMessage = 'mobilpay.ro posted invalid parameters';
$errorMessage = $e->getMessage();
}
}
else
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_PARAMETERS;
$errorMessage = 'mobilpay.ro posted invalid parameters';
} }
} } else {
else $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
{ $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT; $errorMessage = 'invalid request metod for payment confirmation';
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
$errorMessage = 'invalid request metod for payment confirmation';
} }
header('Content-type: application/xml'); header('Content-type: application/xml');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"; echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
if($errorCode == 0) if ($errorCode == 0) {
{
echo "<crc>{$errorMessage}</crc>"; echo "<crc>{$errorMessage}</crc>";
} } else {
else
{
echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>"; echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>";
} }
}); });
...@@ -420,13 +408,13 @@ $app->post('/payment-quote', function ($request, $response, $args) { ...@@ -420,13 +408,13 @@ $app->post('/payment-quote', function ($request, $response, $args) {
); );
if ($contact['type'] == 2) { if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name']; $billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat']; $billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn']; $billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank']; $billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban']; $billing['billBankAccount'] = $contact['iban'];
} else { } else {
$billing['billCNP'] = $contact['nin']; $billing['billCNP'] = $contact['nin'];
} }
$data = array( $data = array(
...@@ -442,7 +430,7 @@ $app->post('/payment-quote', function ($request, $response, $args) { ...@@ -442,7 +430,7 @@ $app->post('/payment-quote', function ($request, $response, $args) {
) )
); );
if(!empty($params['quote_id'])){ if (!empty($params['quote_id'])) {
$data['order']['quote_id'] = $params['quote_id']; $data['order']['quote_id'] = $params['quote_id'];
} }
...@@ -492,13 +480,13 @@ $app->post('/payment', function ($request, $response, $args) { ...@@ -492,13 +480,13 @@ $app->post('/payment', function ($request, $response, $args) {
); );
if ($contact['type'] == 2) { if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name']; $billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat']; $billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn']; $billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank']; $billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban']; $billing['billBankAccount'] = $contact['iban'];
} else { } else {
$billing['billCNP'] = $contact['nin']; $billing['billCNP'] = $contact['nin'];
} }
$data = array( $data = array(
...@@ -539,7 +527,7 @@ $app->post('/summary', function ($request, $response, $args) { ...@@ -539,7 +527,7 @@ $app->post('/summary', function ($request, $response, $args) {
return $response->withJson($price['data'], $price['info']['http_code']); return $response->withJson($price['data'], $price['info']['http_code']);
}); });
$app->post('/createDraft', function($request, $response, $args) { $app->post('/createDraft', function ($request, $response, $args) {
$api = new API(); $api = new API();
$data = $api->CreateDraft($request->getParsedBody()); $data = $api->CreateDraft($request->getParsedBody());
...@@ -551,7 +539,7 @@ $app->post('/createDraft', function($request, $response, $args) { ...@@ -551,7 +539,7 @@ $app->post('/createDraft', function($request, $response, $args) {
return $response->withJson($ret, $data['info']['http_code']); return $response->withJson($ret, $data['info']['http_code']);
}); });
$app->post('/uploadImage', function($request, $response, $args) { $app->post('/uploadImage', function ($request, $response, $args) {
$id = $request->getParam('id', false); $id = $request->getParam('id', false);
if (empty($id)) { if (empty($id)) {
throw new Exception('Ad id expected'); throw new Exception('Ad id expected');
...@@ -563,7 +551,7 @@ $app->post('/uploadImage', function($request, $response, $args) { ...@@ -563,7 +551,7 @@ $app->post('/uploadImage', function($request, $response, $args) {
} }
$file = $files['file']; $file = $files['file'];
$path = '/tmp/'.uniqid('', true).'_'.$file->getClientFilename(); $path = '/tmp/' . uniqid('', true) . '_' . $file->getClientFilename();
$file->moveTo($path); $file->moveTo($path);
$curlFile = curl_file_create($path, $curlFile = curl_file_create($path,
......
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title> <title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet"> <link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet"> <link href="css/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head> </head>
<body> <body>
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav role="navigation"> <nav role="navigation">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="nav-wrapper"> <div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a> <a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
</div> alt="Anunturi mica publicitate"></a>
</div>
</div>
</div> </div>
</div>
</nav> </nav>
</div> </div>
<div class="section loginForm"> <div class="section loginForm">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col s4 offset-s4"> <div class="col s4 offset-s4">
<?php <?php
if (!empty($errors)) { if (!empty($errors)) {
?> ?>
<strong class="error">Credentiale incorecte</strong> <strong class="error">Credentiale incorecte</strong>
<?php <?php
} }
?> ?>
<div class="card"> <div class="card">
<div class="card-content login-card-content"> <div class="card-content login-card-content">
<div class="row"> <div class="row">
<form action="/autentificare" method="POST"> <form action="/autentificare" method="POST">
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Email" id="email" name="email" type="email" /> <input placeholder="Email" id="email" name="email" type="email"/>
<label for="email">Email</label> <label for="email">Email</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Parola" name="password" id="password" type="password" /> <input placeholder="Parola" name="password" id="password" type="password"/>
<label for="password">Parola</label> <label for="password">Parola</label>
</div> </div>
<div class="col s12"> <div class="col s12">
<button class="btn waves-effect waves-light" type="submit" name="action">Autentificare <button class="btn waves-effect waves-light" type="submit" name="action">
<i class="material-icons right">send</i> Autentificare
</button> <i class="material-icons right">send</i>
</div> </button>
</form> </div>
</div> </form>
</div>
</div>
</div>
</div> </div>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
<footer class="page-footer default_color scrollspy" > <footer class="page-footer default_color scrollspy">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col l6 s12"> <div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5> <h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p> <p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul> <ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li> <li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni
</ul> și Condiții</a></li>
</div> </ul>
<div class="col l6 s12 right-align"> </div>
<h5 class="white-text" id="contact">Contact</h5> <div class="col l6 s12 right-align">
<ul class="white-text"> <h5 class="white-text" id="contact">Contact</h5>
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li> <ul class="white-text">
<li>Telefon </li> <li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
</ul> <li>Telefon</li>
</ul>
</div>
</div> </div>
</div>
</div> </div>
<div class="footer-copyright z-depth-1"> <div class="footer-copyright z-depth-1">
<div class="container"> <div class="container">
<b>&copy; Rofusion Advertising Srl</b> <b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span> <span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank"
</div> title="activemall.ro">activemall.ro</a></span>
</div>
</div> </div>
</footer> </footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script> <script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script> <script src="js/modernizr.js"></script>
</body> </body>
</html> </html>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Manager Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title> <title>Manager Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache">
<link href="/css/materialize.css" type="text/css" rel="stylesheet"> <link href="/css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="/css/kalendae.css" type="text/css" rel="stylesheet"> <link href="/css/kalendae.css" type="text/css" rel="stylesheet">
<link href="/css/styleadd.css" type="text/css" rel="stylesheet"> <link href="/css/styleadd.css" type="text/css" rel="stylesheet">
</head> </head>
<body id="top" class="scrollspy"> <body id="top" class="scrollspy">
<div id="loader-wrapper"> <div id="loader-wrapper">
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="loader-section section-left"></div>
<div class="loader-section section-right"></div> <div class="loader-section section-right"></div>
</div> </div>
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav role="navigation"> <nav role="navigation">
<div class="container"> <div class="container">
<div class="nav-wrapper"> <div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="../img/logo.svg" alt="Anunturi mica publicitate"></a> <a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="../img/logo.svg"
<ul id="nav-mobile" class="right"> alt="Anunturi mica publicitate"></a>
<li> <ul id="nav-mobile" class="right">
<?php if(!$loggedIn) { ?> <li>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li> <?php if (!$loggedIn) { ?>
<?php } else { ?> <li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php if(!$admin){ ?> <?php } else { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large btnmo">Contul meu</a></li> <?php if (!$admin) { ?>
<?php } else { ?> <li><a href="/contul-meu" class="waves-effect waves-light btn-large btnmo">Contul meu</a>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo pink darken-4">Manager Cotatii</a></li> </li>
<?php } ?> <?php } else { ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li> <li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo pink darken-4">Manager
<?php } ?> Cotatii</a></li>
</li> <?php } ?>
</ul> <li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div> </div>
</div>
</nav> </nav>
</div> </div>
<div class="container cotatii"> <div class="container cotatii">
<h1>Manager Cotatii</h1> <h1>Manager Cotatii</h1>
<table class="striped highlight responsive-table"> <table class="striped highlight responsive-table">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>ID</th>
<th>Id anunt</th> <th>Id anunt</th>
<th>Nume client</th> <th>Nume client</th>
<th>Companie</th> <th>Companie</th>
<th>Data</th> <th>Data</th>
<th>Tip anunt</th> <th>Tip anunt</th>
<th>Publicatii</th> <th>Publicatii</th>
<th>Fisier</th> <th>Fisier</th>
<th>Pret</th> <th>Pret</th>
<th>Status</th> <th>Status</th>
<th>Actiuni</th> <th>Actiuni</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php <?php
foreach($quotes as $quote){ foreach ($quotes as $quote) {
$quoteDetails = json_decode($quote['details'], true); $quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3'; $statusClass = $quote["status"] == 7 ? 'red' : 'cyan darken-3';
$quoteContact = $quoteDetails["contact"]; $quoteContact = $quoteDetails["contact"];
if(is_string($quoteDetails["contact"])){ if (is_string($quoteDetails["contact"])) {
$quoteContact = json_decode($quoteDetails["contact"], true); $quoteContact = json_decode($quoteDetails["contact"], true);
} }
$adDetails = $quoteDetails["columns"]; $adDetails = $quoteDetails["columns"];
if(is_string($quoteDetails["columns"])){ if (is_string($quoteDetails["columns"])) {
$adDetails = json_decode($quoteDetails["columns"], true); $adDetails = json_decode($quoteDetails["columns"], true);
} }
?> ?>
<tr> <tr>
<td><?= $quote['id'] ?></td> <td><?= $quote['id'] ?></td>
<td> <td>
<?php echo !empty($quoteDetails['ad_id']) ? $quoteDetails['ad_id']:'-'?> <?php echo !empty($quoteDetails['ad_id']) ? $quoteDetails['ad_id'] : '-' ?>
</td> </td>
<td><?= $quoteContact["firstName"] . " " . $quoteContact["lastName"] ?></td> <td><?= $quoteContact["firstName"] . " " . $quoteContact["lastName"] ?></td>
<td><?= $quoteContact["name"] ?></td> <td><?= $quoteContact["name"] ?></td>
<td> <td>
<?php <?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']); $date = date_create_from_format('Y-m-d H:i:s', $quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y"); $fDate = date_format($date, "H:i d-m-Y");
?> ?>
<?= $fDate; ?></td> <?= $fDate; ?></td>
<td> <td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?> <?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td> </td>
<td> <td>
<?php <?php
foreach($adDetails as $column){ foreach ($adDetails as $column) {
?> ?>
<?php if(!empty($column["publicationName"])){ ?> <?php if (!empty($column["publicationName"])) { ?>
<p> <p>
Publicatie: <?= $column["publicationName"] ?> <br> Publicatie: <?= $column["publicationName"] ?> <br>
Categorie: Categorie:
<?= $column["columnName"] ?> <br> <?= $column["columnName"] ?> <br>
</p> </p>
<?php } ?> <?php } ?>
<?php } ?> <?php } ?>
</td> </td>
<td> <td>
<?php <?php
if(!empty($quote['file'])){ if (!empty($quote['file'])) {
?> ?>
<!-- <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> --> <!-- <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> -->
<a href="<?php echo '/uploads/' . $quote['id']; ?>">Descarca</a> <a href="<?php echo '/uploads/' . $quote['id']; ?>">Descarca</a>
<?php } ?> <?php } ?>
</td> </td>
<td class="right-align blue-grey darken-1 white-text"> <td class="right-align blue-grey darken-1 white-text">
<?php <?php
if(empty($quote['price'])){ if (empty($quote['price'])) {
?> ?>
<!-- <input min="0" step="0.01" placeholder="Pret" name="price" type="number" id="price-quote-<?php echo $quote['id']; ?>" value=""/> --> <!-- <input min="0" step="0.01" placeholder="Pret" name="price" type="number" id="price-quote-<?php echo $quote['id']; ?>" value=""/> -->
- -
<?php
} else {
?>
<?= $quote['price'] ?> lei
<?php <?php
} } else {
?> ?>
</td> <?= $quote['price'] ?> lei
<?php
}
?>
</td>
<td> <td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption=""> <span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?> <?= $statuses[$quote['status']] ?>
</span> </span>
</td> </td>
<td> <td>
<?php <?php
if( $quote['status'] == 1 ){ if ($quote['status'] == 1) {
?> ?>
<a class="waves-effect waves-light btn btn-small modal-trigger" href="#modal-send-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Trimite</a> <a class="waves-effect waves-light btn btn-small modal-trigger"
href="#modal-send-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Trimite</a>
<div id="modal-send-<?php echo $quote['id'] ?>" class="modal"> <div id="modal-send-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content"> <div class="modal-content">
<div> <div>
<b>Trimite cotatia cu id: <?php echo $quote['id'] ?></b><br><br> <b>Trimite cotatia cu id: <?php echo $quote['id'] ?></b><br><br>
</div> </div>
<div class="input-field"> <div class="input-field">
<textarea id="textarea1" <textarea id="textarea1"
...@@ -155,79 +159,91 @@ ...@@ -155,79 +159,91 @@
</div> </div>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a class=" send-quote-price waves-effect waves-light btn btn-small action-btn" data-quote="<?php echo $quote['id'] ?>">Trimite</a> <a class=" send-quote-price waves-effect waves-light btn btn-small action-btn"
data-quote="<?php echo $quote['id'] ?>">Trimite</a>
</div> </div>
</div> </div>
<?php } ?> <?php } ?>
</td> </td>
</tr> </tr>
<?php } ?> <?php } ?>
</tbody> </tbody>
</table> </table>
<?php <?php
$limit = 10; $limit = 10;
$numberOfPages = ($total/$limit) > 1 ? $total/$limit:1; $numberOfPages = ($total / $limit) > 1 ? $total / $limit : 1;
if(!empty($_GET['offset'])){ if (!empty($_GET['offset'])) {
$currentOffset = $_GET['offset']; $currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1; $currentPage = ($_GET['offset'] / $limit) + 1;
}else{ } else {
$currentPage = 1; $currentPage = 1;
$currentOffset = 0; $currentOffset = 0;
} }
?> ?>
<ul class="pagination"> <ul class="pagination">
<li <?php if($currentOffset/$limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?> class="<?php echo ($currentPage == 1) ? 'disabled':''; ?> waves-effect"><a href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset-$limit; ?>"><i class="material-icons">chevron_left</i></a></li> <li <?php if ($currentOffset / $limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?> class="<?php echo ($currentPage == 1) ? 'disabled' : ''; ?> waves-effect"><a
href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset - $limit; ?>"><i
class="material-icons">chevron_left</i></a></li>
<?php for ($i = 1; $i <= $numberOfPages; $i++) { ?>
<?php $offset = ($i - 1) * $limit; <?php $offset = ($i - 1) * $limit;
?> ?>
<li class="<?php echo ($currentPage == $i) ? 'active':''; ?>"><a href="/admin/cotatii?limit=<?php echo $limit;?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a></li> <li class="<?php echo ($currentPage == $i) ? 'active' : ''; ?>"><a
href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a>
</li>
<?php } ?> <?php } ?>
<li <?php if($currentOffset/$limit + 1 == $numberOfPages){ ?> style="pointer-events: none;" <?php } ?> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : '' ;?>"><a href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset+$limit; ?>"><i class="material-icons">chevron_right</i></a></li> <li <?php if ($currentOffset / $limit + 1 == $numberOfPages) { ?> style="pointer-events: none;" <?php } ?>
</ul> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : ''; ?>"><a
</div> href="/admin/cotatii?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset + $limit; ?>"><i
class="material-icons">chevron_right</i></a></li>
</ul>
</div>
<footer class="page-footer default_color scrollspy" > <footer class="page-footer default_color scrollspy">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col l6 s12"> <div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5> <h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p> <p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul> <ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li> <li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni
</ul> și Condiții</a></li>
</div> </ul>
<div class="col l6 s12 right-align"> </div>
<h5 class="white-text" id="contact">Contact</h5> <div class="col l6 s12 right-align">
<ul class="white-text"> <h5 class="white-text" id="contact">Contact</h5>
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li> <ul class="white-text">
<li>Telefon </li> <li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
</ul> <li>Telefon</li>
</ul>
</div>
</div> </div>
</div>
</div> </div>
<div class="footer-copyright z-depth-1"> <div class="footer-copyright z-depth-1">
<div class="container"> <div class="container">
<b>&copy; Rofusion Advertising Srl</b> <b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span> <span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank"
</div> title="activemall.ro">activemall.ro</a></span>
</div>
</div> </div>
</footer> </footer>
<div id="reguli" class="modal"> <div id="reguli" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4> <h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p> <p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul
minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a> <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div> </div>
</div> </div>
<script src="/js/jquery-3.1.0.min.js"></script> <script src="/js/jquery-3.1.0.min.js"></script>
<script src="/js/materialize.js"></script> <script src="/js/materialize.js"></script>
<script src="/js/quotes.js"></script> <script src="/js/quotes.js"></script>
</body> </body>
......
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title> <title>Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet"> <link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet"> <link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet"> <link href="css/styleadd.css" type="text/css" rel="stylesheet">
</head> </head>
<body id="top" class="scrollspy"> <body id="top" class="scrollspy">
<div id="loader-wrapper"> <div id="loader-wrapper">
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="loader-section section-left"></div>
<div class="loader-section section-right"></div> <div class="loader-section section-right"></div>
</div> </div>
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav role="navigation"> <nav role="navigation">
<div class="container"> <div class="container">
<div class="nav-wrapper"> <div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a> <a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
<ul id="nav-mobile" class="right"> alt="Anunturi mica publicitate"></a>
<li> <ul id="nav-mobile" class="right">
<?php if(!$loggedIn) { ?> <li>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li> <?php if (!$loggedIn) { ?>
<?php } else { ?> <li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php if(!$admin){ ?> <?php } else { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul meu</a></li> <?php if (!$admin) { ?>
<?php } else { ?> <li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo">Manager Cotatii</a></li> meu</a></li>
<?php } ?> <?php } else { ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li> <li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo">Manager
<?php } ?> Cotatii</a></li>
</li> <?php } ?>
</ul> <li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div> </div>
</div>
</nav> </nav>
</div> </div>
<div class="container cotatii"> <div class="container cotatii">
<h1>Cotatii mele</h1> <h1>Cotatii mele</h1>
<table class="striped highlight responsive-table"> <table class="striped highlight responsive-table">
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>ID</th>
<th>Data</th> <th>Data</th>
<th>Tip anunt</th> <th>Tip anunt</th>
<th>Fisier</th> <th>Fisier</th>
<th>Pret</th> <th>Pret</th>
<th>Status</th> <th>Status</th>
<th>Actiuni</th> <th>Actiuni</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php <?php
foreach($quotes as $quote){ foreach ($quotes as $quote) {
$quoteDetails = json_decode($quote['details'], true); $quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3'; $statusClass = $quote["status"] == 7 ? 'red' : 'cyan darken-3';
?> ?>
<tr> <tr>
<td><?= $quote['id'] ?></td> <td><?= $quote['id'] ?></td>
<td> <td>
<?php <?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']); $date = date_create_from_format('Y-m-d H:i:s', $quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y"); $fDate = date_format($date, "H:i d-m-Y");
?> ?>
<?= $fDate; ?></td> <?= $fDate; ?></td>
<td> <td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?> <?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td> </td>
<td> <td>
<?php <?php
if(!empty($quote['file'])){ if (!empty($quote['file'])) {
?> ?>
<a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a>
<?php } ?> <?php } ?>
</td> </td>
<td class="right-align blue-grey darken-1 white-text"> <td class="right-align blue-grey darken-1 white-text">
<?= empty($quote['price']) ? '':$quote['price'] . ' lei' ?> <?= empty($quote['price']) ? '' : $quote['price'] . ' lei' ?>
</td> </td>
<td> <td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption=""> <span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?> <?= $statuses[$quote['status']] ?>
</span> </span>
</td> </td>
<td class="right-align"> <td class="right-align">
<?php <?php
if( $quote['status'] == 2 ){ if ($quote['status'] == 2) {
?> ?>
<a class="waves-effect waves-light btn btn-small modal-trigger" href="#modal-accept-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Accepta</a> <a class="waves-effect waves-light btn btn-small modal-trigger"
href="#modal-accept-<?php echo $quote['id']; ?>" data-quote="<?php echo $quote['id'] ?>">Accepta</a>
<a class="waves-effect waves-light btn btn-small red modal-trigger" href="#modal-decline-<?php echo $quote['id'] ?>">Refuza</a> <a class="waves-effect waves-light btn btn-small red modal-trigger"
href="#modal-decline-<?php echo $quote['id'] ?>">Refuza</a>
<div id="modal-accept-<?php echo $quote['id'] ?>" class="modal"> <div id="modal-accept-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Accepta cotatia cu id: <?php echo $quote['id'] ?></h4> <h4>Accepta cotatia cu id: <?php echo $quote['id'] ?></h4>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a class="accept-quote waves-effect waves-light btn btn-small" data-quote="<?php echo $quote['id'] ?>">Accepta</a> <a class="accept-quote waves-effect waves-light btn btn-small"
data-quote="<?php echo $quote['id'] ?>">Accepta</a>
</div> </div>
</div> </div>
<div id="modal-decline-<?php echo $quote['id'] ?>" class="modal"> <div id="modal-decline-<?php echo $quote['id'] ?>" class="modal">
...@@ -107,98 +113,112 @@ ...@@ -107,98 +113,112 @@
<h4>Refuzati cotatia cu id: <?php echo $quote['id'] ?></h4> <h4>Refuzati cotatia cu id: <?php echo $quote['id'] ?></h4>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a class="deny-quote waves-effect waves-light btn btn-small red" data-quote="<?php echo $quote['id'] ?>">Refuza</a> <a class="deny-quote waves-effect waves-light btn btn-small red"
data-quote="<?php echo $quote['id'] ?>">Refuza</a>
</div> </div>
</div> </div>
<?php } else if($quote['status'] == 3 && $quoteDetails['invoicePerAd'] == 0){ ?> <?php } else if ($quote['status'] == 3 && $quoteDetails['invoicePerAd'] == 0) { ?>
<a class=" waves-effect waves-light btn pay-quote" data-quote="<?php echo $quote['id'] ?>">Plateste</a> <a class=" waves-effect waves-light btn pay-quote" data-quote="<?php echo $quote['id'] ?>">Plateste</a>
<form action="/payment-quote" method="POST"> <form action="/payment-quote" method="POST">
<input name="ad_id" type="hidden" value="<?php echo $quoteDetails['ad_id']; ?>"/> <input name="ad_id" type="hidden" value="<?php echo $quoteDetails['ad_id']; ?>"/>
<input name="quote_id" type="hidden" value="<?php echo $quote['id']; ?>"/> <input name="quote_id" type="hidden" value="<?php echo $quote['id']; ?>"/>
</form> </form>
<?php } else if($quote['status'] == 7) { ?> <?php } else if ($quote['status'] == 7) { ?>
<a class=" waves-effect waves-light btn btn-small modal-trigger red" href="#modal-delete-<?php echo $quote['id']; ?>" >Sterge</a> <a class=" waves-effect waves-light btn btn-small modal-trigger red"
href="#modal-delete-<?php echo $quote['id']; ?>">Sterge</a>
<div id="modal-delete-<?php echo $quote['id'] ?>" class="modal"> <div id="modal-delete-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Sterge cotatia cu id: <?php echo $quote['id'] ?></h4> <h4>Sterge cotatia cu id: <?php echo $quote['id'] ?></h4>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a class=" waves-effect waves-light btn btn-small red delete-quote" data-quote="<?php echo $quote['id'] ?>">Sterge</a> <a class=" waves-effect waves-light btn btn-small red delete-quote"
data-quote="<?php echo $quote['id'] ?>">Sterge</a>
</div> </div>
</div> </div>
<?php } ?> <?php } ?>
</td> </td>
</tr> </tr>
<?php } ?> <?php } ?>
</tbody> </tbody>
</table> </table>
<?php <?php
$limit = !empty($_GET['limit']) ? $_GET['limit']:10; $limit = !empty($_GET['limit']) ? $_GET['limit'] : 10;
$numberOfPages = ($total/$limit) > 1 ? $total/$limit:1; $numberOfPages = ($total / $limit) > 1 ? $total / $limit : 1;
if(!empty($_GET['offset'])){ if (!empty($_GET['offset'])) {
$currentOffset = $_GET['offset']; $currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1; $currentPage = ($_GET['offset'] / $limit) + 1;
}else{ } else {
$currentPage = 1; $currentPage = 1;
$currentOffset = 0; $currentOffset = 0;
} }
?> ?>
<ul class="pagination"> <ul class="pagination">
<li <?php if($currentOffset/$limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?> class="<?php echo ($currentPage == 1) ? 'disabled':''; ?> waves-effect"><a href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset-$limit; ?>"><i class="material-icons">chevron_left</i></a></li> <li <?php if ($currentOffset / $limit - 1 < 0) { ?> style="pointer-events: none;" <?php } ?>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?> class="<?php echo ($currentPage == 1) ? 'disabled' : ''; ?> waves-effect"><a
href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset - $limit; ?>"><i
class="material-icons">chevron_left</i></a></li>
<?php for ($i = 1; $i <= $numberOfPages; $i++) { ?>
<?php $offset = ($i - 1) * $limit; <?php $offset = ($i - 1) * $limit;
?> ?>
<li class="<?php echo ($currentPage == $i) ? 'active':''; ?>"><a href="/contul-meu?limit=<?php echo $limit;?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a></li> <li class="<?php echo ($currentPage == $i) ? 'active' : ''; ?>"><a
href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $offset; ?>"><?php echo $i; ?></a>
</li>
<?php } ?> <?php } ?>
<li <?php if($currentOffset/$limit + 1 == $numberOfPages){ ?> style="pointer-events: none;" <?php } ?> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : '' ;?>"><a href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset+$limit; ?>"><i class="material-icons">chevron_right</i></a></li> <li <?php if ($currentOffset / $limit + 1 == $numberOfPages) { ?> style="pointer-events: none;" <?php } ?>
</ul> class="waves-effect <?php echo ($currentPage == $numberOfPages) ? 'disabled' : ''; ?>"><a
</div> href="/contul-meu?limit=<?php echo $limit; ?>&offset=<?php echo $currentOffset + $limit; ?>"><i
class="material-icons">chevron_right</i></a></li>
<footer class="page-footer default_color scrollspy" > </ul>
</div>
<footer class="page-footer default_color scrollspy">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col l6 s12"> <div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5> <h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p> <p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<ul> <ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li> <li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni
</ul> și Condiții</a></li>
</div> </ul>
<div class="col l6 s12 right-align"> </div>
<h5 class="white-text" id="contact">Contact</h5> <div class="col l6 s12 right-align">
<ul class="white-text"> <h5 class="white-text" id="contact">Contact</h5>
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li> <ul class="white-text">
<li>Telefon </li> <li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
</ul> <li>Telefon</li>
</ul>
</div>
</div> </div>
</div>
</div> </div>
<div class="footer-copyright z-depth-1"> <div class="footer-copyright z-depth-1">
<div class="container"> <div class="container">
<b>&copy; Rofusion Advertising Srl</b> <b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span> <span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank"
</div> title="activemall.ro">activemall.ro</a></span>
</div>
</div> </div>
</footer> </footer>
<div id="reguli" class="modal"> <div id="reguli" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4> <h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p> <p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul
minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a> <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div> </div>
</div> </div>
<script src="js/jquery-3.1.0.min.js"></script> <script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script> <script src="js/materialize.js"></script>
<script src="js/quotes.js"></script> <script src="js/quotes.js"></script>
</body> </body>
......
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title> <title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<link href="css/materialize.css" type="text/css" rel="stylesheet"> <link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet"> <link href="css/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head> </head>
<body> <body>
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav role="navigation"> <nav role="navigation">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="nav-wrapper"> <div class="nav-wrapper">
<a href="/" class="brand-logo" title="mica24.ro - Anunțuri Presa Scrisă - România Liberă"><img src="img/logo-mica24.png" alt="mica24.ro - Anunțuri Presa Scrisă - România Liberă"></a> <a href="/" class="brand-logo" title="mica24.ro - Anunțuri Presa Scrisă - România Liberă"><img
src="img/logo-mica24.png" alt="mica24.ro - Anunțuri Presa Scrisă - România Liberă"></a>
</div>
</div>
</div> </div>
</div>
</div>
</nav> </nav>
</div> </div>
<div class="section"> <div class="section">
<div class="container"> <div class="container">
<br><br> <br><br>
<?php if ($ok): ?> <?php if ($ok): ?>
<h1><b>Plata a fost finalizată cu succes!</b></h1> <h1><b>Plata a fost finalizată cu succes!</b></h1>
<b>Veți primi un email cu detaliile comenzii dvs.<br>Vă mulțumim.</b> <b>Veți primi un email cu detaliile comenzii dvs.<br>Vă mulțumim.</b>
<br><br><hr><br> <br><br>
<hr><br>
<a href="/" title="" class="btn">Adaugă un anunț nou</a> <a href="/" title="" class="btn">Adaugă un anunț nou</a>
<br><br> <br><br>
<?php else: ?> <?php else: ?>
<h1><b>Plata nu a fost efectuată!<br>Eroare de procesare.</b></h1> <h1><b>Plata nu a fost efectuată!<br>Eroare de procesare.</b></h1>
<b>Ne cerem scuze și vă rugăm să încercați din nou.<br>Vă mulțumim.</b> <b>Ne cerem scuze și vă rugăm să încercați din nou.<br>Vă mulțumim.</b>
<br><br><hr><br> <br><br>
<hr><br>
<a href="/" title="" class="btn">Adaugă anunț</a> <a href="/" title="" class="btn">Adaugă anunț</a>
<br><br> <br><br>
<?php endif; ?> <?php endif; ?>
</div> </div>
</div> </div>
<footer class="page-footer default_color scrollspy z-depth-2"> <footer class="page-footer default_color scrollspy z-depth-2">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col l6 s12"> <div class="col l6 s12">
<h5 class="white-text">mica24.ro - Magazinul de Mică Publicitate România Liberă</h5> <h5 class="white-text">mica24.ro - Magazinul de Mică Publicitate România Liberă</h5>
<p class="white-text text-lighten-4">mica24.ro - Magazinul de Mică Publicitate este un produs al Grupului de Presă Român, parte a Medien Holding, din portofoliul căruia mai fac parte: cotidianul România Liberă, bilunarul Academia Cațavencu, revista Casa Mea, revistele TAROM (Insight, SkyLady), website-urile www.romanialibera.ro, www.casamea.ro, www.academiacatavencu.info și tipografia Sigma Media.</p> <p class="white-text text-lighten-4">mica24.ro - Magazinul de Mică Publicitate este un produs al
</div> Grupului de Presă Român, parte a Medien Holding, din portofoliul căruia mai fac parte: cotidianul
<div class="col l3 s12"> România Liberă, bilunarul Academia Cațavencu, revista Casa Mea, revistele TAROM (Insight, SkyLady),
<h5 class="white-text">Info</h5> website-urile www.romanialibera.ro, www.casamea.ro, www.academiacatavencu.info și tipografia Sigma
<ul> Media.</p>
<li><a href="contact-mica24.html" class="white-text">Listă Agenții România Liberă</a></li> </div>
<li><a href="http://publicitate.romanialibera.ro/" class="white-text" target="_blank" title="Mica Publicitate">Mica Publicitate</a></li> <div class="col l3 s12">
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li> <h5 class="white-text">Info</h5>
</ul> <ul>
<li><a href="contact-mica24.html" class="white-text">Listă Agenții România Liberă</a></li>
<li><a href="http://publicitate.romanialibera.ro/" class="white-text" target="_blank"
title="Mica Publicitate">Mica Publicitate</a></li>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni
și Condiții</a></li>
</ul>
</div>
<div class="col l3 s12">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Theodor Pallady nr. 54-56<br>32266 Sector 3, București</li>
<li>Telefon +40 21 202.82.02</li>
<li>Fax +40 21 223.09.96</li>
</ul>
</div>
</div> </div>
<div class="col l3 s12">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Theodor Pallady nr. 54-56<br>32266 Sector 3, București</li>
<li>Telefon +40 21 202.82.02</li>
<li>Fax +40 21 223.09.96</li>
</ul>
</div>
</div>
</div> </div>
<div class="footer-copyright z-depth-1"> <div class="footer-copyright z-depth-1">
<div class="container"> <div class="container">
<b>&copy; România Liberă SA / Grupul de Presă Român / Medien Holding</b> <b>&copy; România Liberă SA / Grupul de Presă Român / Medien Holding</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span> <span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank"
</div> title="activemall.ro">activemall.ro</a></span>
</div>
</div> </div>
</footer> </footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script> <script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script> <script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script> <script src="js/modernizr.js"></script>
</body> </body>
</html> </html>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title> <title>Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta name="keywords" content="anuțuri presa scrisă, anunturi mica publicitate"/> <meta name="keywords" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="description" content="anuțuri presa scrisă, anunturi mica publicitate"/> <meta name="description" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="subject" content="anuțuri presa scrisă, anunturi mica publicitate"/> <meta name="subject" content="anuțuri presa scrisă, anunturi mica publicitate"/>
<meta name="copyright" content="Rofusion Advertising Srl"/> <meta name="copyright" content="Rofusion Advertising Srl"/>
<meta name="language" content="RO"/> <meta name="language" content="RO"/>
<meta name="robots" content="index,follow" /> <meta name="robots" content="index,follow"/>
<meta name="abstract" content="anuțuri presa scrisă, anunturi mica publicitate"> <meta name="abstract" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="topic" content="Ads"> <meta name="topic" content="Ads">
<meta name="summary" content="anuțuri presa scrisă, anunturi mica publicitate"> <meta name="summary" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="Classification" content="Business"> <meta name="Classification" content="Business">
<meta name="author" content="Rofusion Advertising Srl, anuturi@rofusion.ro"> <meta name="author" content="Rofusion Advertising Srl, anuturi@rofusion.ro">
<meta name="designer" content="Activemall SRL"> <meta name="designer" content="Activemall SRL">
<meta name="copyright" content="Rofusion Advertising Srl"> <meta name="copyright" content="Rofusion Advertising Srl">
<meta name="reply-to" content="office@rofusion.ro"> <meta name="reply-to" content="office@rofusion.ro">
<meta name="owner" content="Rofusion Advertising Srl"> <meta name="owner" content="Rofusion Advertising Srl">
<meta name="url" content="https://www.rofusion.ro"> <meta name="url" content="https://www.rofusion.ro">
<meta name="identifier-URL" content="https://www.rofusion.ro"> <meta name="identifier-URL" content="https://www.rofusion.ro">
<meta name="directory" content="submission"> <meta name="directory" content="submission">
<meta name="category" content="Ads"> <meta name="category" content="Ads">
<meta name="coverage" content="Worldwide"> <meta name="coverage" content="Worldwide">
<meta name="distribution" content="Global"> <meta name="distribution" content="Global">
<meta name="rating" content="General"> <meta name="rating" content="General">
<meta name="revisit-after" content="7 days"> <meta name="revisit-after" content="7 days">
<meta http-equiv="Expires" content="0"> <meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache"> <meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache"> <meta http-equiv="Cache-Control" content="no-cache">
<link href="css/materialize.css" type="text/css" rel="stylesheet"> <link href="css/materialize.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet"> <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet"> <link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet"> <link href="css/styleadd.css" type="text/css" rel="stylesheet">
</head> </head>
<body id="top" class="scrollspy"> <body id="top" class="scrollspy">
<div id="loader-wrapper"> <div id="loader-wrapper">
<div id="loader"></div> <div id="loader"></div>
<div class="loader-section section-left"></div> <div class="loader-section section-left"></div>
<div class="loader-section section-right"></div> <div class="loader-section section-right"></div>
</div> </div>
<div class="navbar-fixed"> <div class="navbar-fixed">
<nav role="navigation"> <nav role="navigation">
<div class="container"> <div class="container">
<div class="nav-wrapper"> <div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a> <a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
<ul id="nav-mobile" class="right"> alt="Anunturi mica publicitate"></a>
<li> <ul id="nav-mobile" class="right">
<?php if(!isset($loggedIn)) { ?> <li>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li> <?php if (!isset($loggedIn)) { ?>
<?php } else { ?> <li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php if(!$admin){ ?> <?php } else { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul meu</a></li> <?php if (!$admin) { ?>
<?php } else { ?> <li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large pink darken-4 btnmo">Manager Cotatii</a></li> meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large pink darken-4 btnmo">Manager
Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?> <?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li> </li>
<?php } ?> </ul>
</li> </div>
</ul>
</div> </div>
</div>
</nav> </nav>
</div> </div>
<div class="slider"> <div class="slider">
<ul class="slides"> <ul class="slides">
<li> <li>
<img src="img/slide/slide1.jpg"> <img src="img/slide/slide1.jpg">
<div class="caption left-align container"> <div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1> <h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2> <h2>în Presa Scrisă</h2>
</div> </div>
</li> </li>
<li> <li>
<img src="img/slide/slide2.jpg"> <img src="img/slide/slide2.jpg">
<div class="caption left-align container"> <div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1> <h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2> <h2>în Presa Scrisă</h2>
</div> </div>
</li> </li>
</ul> </ul>
</div> </div>
<?php if(isset($loggedIn) && $loggedIn) { ?> <?php if (isset($loggedIn) && $loggedIn) { ?>
<input id="loggedInUser" type="text" value="true" style="display:none" /> <input id="loggedInUser" type="text" value="true" style="display:none"/>
<?php } ?> <?php } ?>
<div class="section no-pad" data-bind="visible: !finalStep()"> <div class="section no-pad" data-bind="visible: !finalStep()">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col s12 m12 l9"> <div class="col s12 m12 l9">
<ul class="collapsible" data-collapsible="accordion"> <ul class="collapsible" data-collapsible="accordion">
<li data-bind="visible: publications().length > 1"> <li data-bind="visible: publications().length > 1">
<div class="collapsible-header" data-bind="css: {active: publications().length > 1" }"> <div class="collapsible-header" data-bind="css: {active: publications().length > 1" }
<i class="material-icons">playlist_add</i> ">
<span class="step">Pasul 1</span>Alege Publicațiile în care dorești să apară anunțul tău</div> <i class="material-icons">playlist_add</i>
<div class="collapsible-body"> <span class="step">Pasul 1</span>Alege Publicațiile în care dorești să apară anunțul tău
</div>
<div class="collapsible-body">
<div class="row"> <div class="row">
<div class="pubs" data-bind="template: {foreach:publications}, css: {disabled: selectedKind() == 3 }"> <div class="pubs"
<div class="col s12 m3 l25"> data-bind="template: {foreach:publications}, css: {disabled: selectedKind() == 3 }">
<div class="card"> <div class="col s12 m3 l25">
<div class="card-image" data-bind="style: { backgroundImage: 'url(\'' + image() + '\')'}"></div> <div class="card">
<div class="card-action"> <div class="card-image"
<input data-bind="attr: {id: 'p' + id()}, checked: selected" type="checkbox" data-bind="checked: selected" class="filled-in" > data-bind="style: { backgroundImage: 'url(\'' + image() + '\')'}"></div>
<label data-bind="attr: {for: 'p' + id()}, text: name"></label> <div class="card-action">
<input data-bind="attr: {id: 'p' + id()}, checked: selected" type="checkbox"
data-bind="checked: selected" class="filled-in">
<label data-bind="attr: {for: 'p' + id()}, text: name"></label>
</div>
</div>
</div> </div>
</div>
</div> </div>
</div>
</div> </div>
<div class="row"> <div class="row">
<div class="col s12"> <div class="col s12">
<button class="btn waves-effect waves-light right btn-next" onclick="gotostep('list_publicatii');">Pasul următor</button> <button class="btn waves-effect waves-light right btn-next"
</div> onclick="gotostep('list_publicatii');">Pasul următor
</button>
</div>
</div> </div>
</div> </div>
</li> </li>
<li> <li>
<div class="collapsible-header" <div class="collapsible-header"
id="list_publicatii" id="list_publicatii"
data-bind="css: {active: publications().length ==1 }" data-bind="css: {active: publications().length ==1 }"
> >
<i class="material-icons">today</i> <i class="material-icons">today</i>
<span class="step" data-bind="text: publications().length > 1 ? 'Pasul 2':'Pasul 1'">Pasul 2</span>Adaugă textul Anunțului și Zilele de publicare</div> <span class="step" data-bind="text: publications().length > 1 ? 'Pasul 2':'Pasul 1'">Pasul 2</span>Adaugă
<div class="collapsible-body" id="detalii_anunt"> textul Anunțului și Zilele de publicare
<div class="row"> </div>
<div class="col s12 m12 l12"> <div class="collapsible-body" id="detalii_anunt">
<ul class="tabs" data-bind="if: isLoggedIn"> <div class="row">
<li class="tab col"><a class="active" href="#anunt-simplu" id="simple-ad-link" data-bind="click: changeAdType.bind($data, 1)">Anunt Simplu</a></li> <div class="col s12 m12 l12">
<li class="tab col"><a href="#cotatie" data-bind="click: changeAdType.bind($data, 2)">Cere o Cotatie</a></li> <div id="cotatie">
</ul>
<div id="cotatie" data-bind="if: isLoggedIn">
<div class="row">
<div class="col s12">
<div class="info-contatie">
Alege tipul și încarcă un fisier cu anuțul.<br>
Vom analiza fișierul și veți găsi cotația de preț în meniul de sus COTAȚII sau pe email.<br>
<b> Dacă acceptați cotația anuțul va fi publicat.</b> Dacă refuzați îl puteți șterge.
</div>
</div>
</div>
<div class="row"> <div class="row">
<div class="input-field input-field col s12 mb20 select-ad-type"> <div class="col s12">
<select data-bind="options: kinds, <div class="info-contatie">
Alege tipul și încarcă un fisier cu anuțul.<br>
Vom analiza fișierul și veți găsi cotația de preț în meniul de sus COTAȚII
sau pe email.<br>
<b> Dacă acceptați cotația anuțul va fi publicat.</b> Dacă refuzați îl
puteți șterge.
</div>
</div>
</div>
<div class="row">
<div class="input-field input-field col s12 mb20 select-ad-type">
<select data-bind="options: kinds,
optionsText: 'name', optionsText: 'name',
optionsValue: 'id', optionsValue: 'id',
value: selectedKind" class="kind-select"> value: selectedKind" class="kind-select">
</select> </select>
<label for="" class="active select-label">Tip anunt</label> <label for="" class="active select-label">Tip anunt</label>
</div> </div>
<div class="file-field input-field col s12 m10 l11"> <div class="file-field input-field col s12 m10 l11">
<div class="btn"> <div class="btn">
<span class="tooltipped" data-position="top"
data-delay="50" data-tooltip="Alege o Imagine">Imagine</span>
<button class="btn-floating btn-delete-image waves-effect waves-light red lighten-1 tooltipped"
data-position="top" data-delay="50" data-tooltip="Șterge Imaginea">
<i class="large material-icons">delete</i>
</button>
<input name="file" id="image-upload-quote" type="file">
</div>
<div class="file-path-wrapper">
<input id="file-path-name" class="file-path validate" type="text">
</div>
</div>
<div class="col s12 m2 l1 hide-on-small-only">
<button data-target="reguli" class="btn-floating waves-effect waves-light right"><i class="material-icons">info_outline</i></button>
</div>
</div>
</div>
<div id="anunt-simplu" class="active">
<div class="input-field">
<textarea id="textarea1"
placeholder="Scrie anunțul tău aici."
class="materialize-textarea tooltipped"
data-position="bottom" data-delay="50"
data-bind="value: text"
data-tooltip="Scrie anunțul tău aici. Apasă pe INFO pentru regulament."
length="5000"></textarea>
<label for="textarea1">Text Anunț</label>
</div>
<div class="row">
<div class="file-field input-field col s12 m10 l11">
<div class="btn">
<span class="tooltipped" data-position="top" <span class="tooltipped" data-position="top"
data-delay="50" data-tooltip="Alege o Imagine">Imagine</span> data-delay="50" data-tooltip="Alege o Imagine">Imagine</span>
<button class="btn-floating btn-delete-image waves-effect waves-light red lighten-1 tooltipped" <button class="btn-floating btn-delete-image waves-effect waves-light red lighten-1 tooltipped"
data-position="top" data-delay="50" data-tooltip="Șterge Imaginea"> data-position="top" data-delay="50" data-tooltip="Șterge Imaginea">
<i class="large material-icons">delete</i> <i class="large material-icons">delete</i>
</button> </button>
<input name="file" id="image-upload" type="file"> <input name="file" id="image-upload-quote" type="file">
</div> </div>
<div class="file-path-wrapper"> <div class="file-path-wrapper">
<input id="file-path-name" class="file-path validate" type="text"> <input id="file-path-name" class="file-path validate" type="text">
</div> </div>
</div> </div>
<div class="col s12 m2 l1 hide-on-small-only"> <div class="col s12 m2 l1 hide-on-small-only">
<button data-target="reguli" class="btn-floating waves-effect waves-light right"><i class="material-icons">info_outline</i></button> <button data-target="reguli"
</div> class="btn-floating waves-effect waves-light right"><i
</div> class="material-icons">info_outline</i></button>
</div>
</div> </div>
</div>
</div>
<div class="row">
<div class="col s12" data-bind="foreach: publications">
<div data-bind="visible: selected">
<div class="row">
<div class="col s12 m12 l12">
<div class="card-select">
<div class="row">
<div class="col s1">
<img data-bind="attr: {src: image}" class="circle responsive-img">
</div>
<div class="col s11">
<h3 class="title" data-bind="text: name"></h3>
</div>
<div class="clr"></div>
<div class="col s12 m3">
<label>Alege o Categorie</label>
</div>
<div class="col s12 m9">
<select data-bind="options: columns, optionsValue: 'id', value: columnID, uniqueName: true, optionsText: 'name'">
</select>
</div>
</div> </div>
</div>
<ul class="options-list1" data-bind="visible: options"> </div>
<div class="row"> </div>
<div class="col s12 m3 card-select"> <div class="row">
<label>Opționale</label> <div class="col s12" data-bind="foreach: publications">
</div> <div data-bind="visible: selected">
<div class="col s12 m9"> <div class="row">
<div class="row" data-bind="template: {foreach: options}"> <div class="col s12 m12 l12">
<div class="col s12 m4"> <div class="card-select">
<li class="options-item" data-bind="template: {afterRender: app.addTooltip}"> <div class="row">
<input data-bind="checked: $parent.optionIDs, value: id, attr: {id: 'o' + id}" type="checkbox" class="filled-in"> <div class="col s1">
<label class="tooltipped" <img data-bind="attr: {src: image}" class="circle responsive-img">
data-bind="text: name, attr: {'data-tooltip': description, 'for': 'o' + id}" </div>
data-position="bottom" data-delay="50"></label> <div class="col s11">
</li> <h3 class="title" data-bind="text: name"></h3>
</div> </div>
<div class="clr"></div>
<div class="col s12 m3">
<label>Alege o Categorie</label>
</div>
<div class="col s12 m9">
<select data-bind="options: columns, optionsValue: 'id', value: columnID, uniqueName: true, optionsText: 'name'">
</select>
</div>
</div>
</div>
<ul class="options-list1" data-bind="visible: options">
<div class="row">
<div class="col s12 m3 card-select">
<label>Opționale</label>
</div>
<div class="col s12 m9">
<div class="row" data-bind="template: {foreach: options}">
<div class="col s12 m4">
<li class="options-item"
data-bind="template: {afterRender: app.addTooltip}">
<input data-bind="checked: $parent.optionIDs, value: id, attr: {id: 'o' + id}"
type="checkbox" class="filled-in">
<label class="tooltipped"
data-bind="text: name, attr: {'data-tooltip': description, 'for': 'o' + id}"
data-position="bottom" data-delay="50"></label>
</li>
</div>
</div>
</div>
</div>
</ul>
<div data-bind="attr:{id: 'cal' + id()}" class="tooltipped"
data-position="bottom" data-delay="50"
data-tooltip="Alege zilele de publicare">
</div>
</div>
</div> </div>
</div>
</div> </div>
</ul>
<div data-bind="attr:{id: 'cal' + id()}" class="tooltipped"
data-position="bottom" data-delay="50"
data-tooltip="Alege zilele de publicare">
</div>
</div> </div>
</div>
</div> </div>
</div>
</div>
<div class="row">
<div class="col s12">
<button class="btn waves-effect waves-light right btn-next" onclick="gotostep('date_personale');">Pasul următor</button>
</div>
</div> </div>
</div>
</li> </li>
<li>
<div class="collapsible-header" id="date_personale"> </ul>
<i class="material-icons">person_pin</i> <div class="row">
<span class="step" data-bind="text: publications().length > 1 ? 'Pasul 3':'Pasul 2'">Pasul 3</span>Completează datele personale</div> <form id="date_persoana">
<div class="collapsible-body">
<div class="row">
<form id="date_persoana">
<div class="col s6"> <div class="col s6">
<div class="row"> <div class="row">
<div class="col s12">
<blockquote>
<h5>Persoană Contact</h5>
<b>Pentru Persoanele Fizice și Juridice</b>
</blockquote>
</div>
<div class="input-field col s12">
<input placeholder="Nume (de familie)" id="first_name" type="text"
data-bind="value: firstName"
data-sanitize="trim upper"
data-validation="required length custom"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$"
data-validation-length="3-20"
data-suggestions="White, Green, Blue, Black, Brown"
data-validation-error-msg="Numele trebuie să conțină doar litere (min 3, max 20 caractere)">
<label for="first_name">Nume</label>
</div>
<div class="input-field col s12">
<input placeholder="Prenume" id="last_name" type="text"
data-bind="value: lastName"
data-sanitize="trim upper"
data-validation="required length custom"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$"
data-validation-length="3-20"
data-validation-error-msg="Prenumele trebuie să conțină doar litere (min 3, max 20 caractere)">
<label for="last_name">Prenume</label>
</div>
<div class="input-field col s12">
<input placeholder="Adresă completă" id="adresa" type="text"
data-bind="value: address"
data-sanitize="trim"
data-validation="required length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="10-100"
data-validation-error-msg="Adresa trebuie să conțină litere, cifre și caractere speciale (min 10, max 100 caractere)">
<label for="adresa">Adresă</label>
</div>
<div class="input-field col s12">
<input placeholder="Telefon (mobil/fix)" id="telefon" type="text"
data-bind="value: phone"
data-sanitize="trim"
data-validation="required length number"
data-validation-length="9-15"
data-validation-error-msg="Telefonul trebuie să conțină doar cifre (min 9, max 15 caractere)">
<label for="telefon">Telefon</label>
</div>
<div class="input-field col s12">
<input placeholder="Email" id="email" type="email" data-bind="value: email"
data-sanitize="trim lower"
data-validation="required length email alphanumeric"
data-validation-allowing="@-_."
data-validation-length="5-100"
data-validation-error-msg="Email-ul trebuie să conțină doar litere, cifre și @ - _ . (min 7, max 100 caractere)">
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input placeholder="CNP" id="nin" type="text" data-bind="value: nin"
data-sanitize="trim"
data-validation="length number"
data-validation-length="13"
data-validation-optional="true"
data-validation-error-msg="CNP-ul trebuie să conțină doar cifre (13 caractere)">
<label for="nin">CNP - opțional, dacă doriți factură fiscală</label>
</div>
</div>
</div>
<div class="col s6 tooltipped" data-position="top" data-delay="50"
data-tooltip="Completați numai dacă sunteți Persoană Juridică">
<div class="col s12"> <div class="col s12">
<blockquote> <blockquote>
<h5>Persoană Contact</h5> <h5>Companie / Instituție (opțional)</h5>
<b>Pentru Persoanele Fizice și Juridice</b> <b>Numai pentru Persoanele Juridice</b>
</blockquote> </blockquote>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Nume (de familie)" id="first_name" type="text" data-bind="value: firstName" <input placeholder="Denumire Societate / Instituție" id="societate_denumire"
data-sanitize="trim upper" type="text" data-bind="value: company"
data-validation="required length custom" data-sanitize="trim"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$" data-validation="length alphanumeric"
data-validation-length="3-20" data-suggestions="White, Green, Blue, Black, Brown" data-validation-length="3-100"
data-validation-error-msg="Numele trebuie să conțină doar litere (min 3, max 20 caractere)"> data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
<label for="first_name">Nume</label> data-validation-optional="true"
data-validation-error-msg="Trebuie să conțină doar caractere alfanumerice (min 3, max 100 caractere)">
<label for="societate_denumire">Denumire Societate / Instituție</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Prenume" id="last_name" type="text" data-bind="value: lastName" <input placeholder="Codul Unic de Înregistrare" id="societate_cui" type="text"
data-sanitize="trim upper" data-bind="value: vat"
data-validation="required length custom" data-sanitize="trim upper"
data-validation-regexp="^([A-Za-zăîâșțĂÎÂȘȚ \-]+)$" data-validation="custom"
data-validation-length="3-20" data-validation-regexp="^(RO)?[0-9]{2,10}$"
data-validation-error-msg="Prenumele trebuie să conțină doar litere (min 3, max 20 caractere)"> data-validation-optional="true"
<label for="last_name">Prenume</label> data-validation-error-msg="CUI-ul trebuie să conțină doar cifre și secvența RO (min 2, max 10 caractere)">
<label for="societate_cui">C.U.I.</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Adresă completă" id="adresa" type="text" data-bind="value: address" <input placeholder="Număr Registrul Comerțului" id="societate_nrc" type="text"
data-sanitize="trim" data-bind="value: crn"
data-validation="required length alphanumeric" data-sanitize="trim upper"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ" data-validation="length alphanumeric"
data-validation-length="10-100" data-validation-allowing="/"
data-validation-error-msg="Adresa trebuie să conțină litere, cifre și caractere speciale (min 10, max 100 caractere)"> data-validation-length="10-15"
<label for="adresa">Adresă</label> data-validation-optional="true"
data-validation-error-msg="Nr.Reg.Com. trebuie să conțină doar litere, cifre și / (min 10, max 15 caractere)">
<label for="societate_nrc">Nr.Reg.Com.</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Telefon (mobil/fix)" id="telefon" type="text" data-bind="value: phone" <input placeholder="Adresă completă" id="adresa_firma" type="text"
data-sanitize="trim" data-bind="value: address"
data-validation="required length number" data-sanitize="trim upper"
data-validation-length="9-15" data-validation="length alphanumeric"
data-validation-error-msg="Telefonul trebuie să conțină doar cifre (min 9, max 15 caractere)"> data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
<label for="telefon">Telefon</label> data-validation-length="10-100"
data-validation-optional="true"
data-validation-error-msg="Adresa trebuie să conțină doar litere (min 10, max 100 caractere)">
<label for="adresa_firma">Adresă Companie</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="Email" id="email" type="email" data-bind="value: email" <input placeholder="Cont Bancar" id="societate_cont" type="text"
data-sanitize="trim lower" data-bind="value: iban"
data-validation="required length email alphanumeric" data-sanitize="trim upper"
data-validation-allowing="@-_." data-validation="length alphanumeric iban"
data-validation-length="5-100" data-validation-length="24"
data-validation-error-msg="Email-ul trebuie să conțină doar litere, cifre și @ - _ . (min 7, max 100 caractere)"> data-validation-optional="true"
<label for="email">Email</label> data-validation-error-msg="Cont Bancar trebuie să conțină doar litere, cifre și / (24 caractere)">
<label for="societate_cont">Cont Bancar</label>
</div> </div>
<div class="input-field col s12"> <div class="input-field col s12">
<input placeholder="CNP" id="nin" type="text" data-bind="value: nin" <input placeholder="Nume Bancă" id="societate_banca" type="text"
data-sanitize="trim" data-bind="value: bank"
data-validation="length number" data-sanitize="trim upper"
data-validation-length="13" data-validation="length alphanumeric"
data-validation-optional="true" data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-error-msg="CNP-ul trebuie să conțină doar cifre (13 caractere)"> data-validation-length="3-50"
<label for="nin">CNP - opțional, dacă doriți factură fiscală</label> data-validation-optional="true"
data-validation-error-msg="Numele băncii trebuie să conțină doar litere (min 3, max 50 caractere)">
<label for="societate_banca">Bancă</label>
</div> </div>
</div>
</div>
<div class="col s6 tooltipped" data-position="top" data-delay="50" data-tooltip="Completați numai dacă sunteți Persoană Juridică">
<div class="col s12">
<blockquote>
<h5>Companie / Instituție (opțional)</h5>
<b>Numai pentru Persoanele Juridice</b>
</blockquote>
</div>
<div class="input-field col s12">
<input placeholder="Denumire Societate / Instituție" id="societate_denumire" type="text" data-bind="value: company"
data-sanitize="trim"
data-validation="length alphanumeric"
data-validation-length="3-100"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-optional="true"
data-validation-error-msg="Trebuie să conțină doar caractere alfanumerice (min 3, max 100 caractere)">
<label for="societate_denumire">Denumire Societate / Instituție</label>
</div>
<div class="input-field col s12">
<input placeholder="Codul Unic de Înregistrare" id="societate_cui" type="text" data-bind="value: vat"
data-sanitize="trim upper"
data-validation="custom"
data-validation-regexp="^(RO)?[0-9]{2,10}$"
data-validation-optional="true"
data-validation-error-msg="CUI-ul trebuie să conțină doar cifre și secvența RO (min 2, max 10 caractere)">
<label for="societate_cui">C.U.I.</label>
</div>
<div class="input-field col s12">
<input placeholder="Număr Registrul Comerțului" id="societate_nrc" type="text" data-bind="value: crn"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing="/"
data-validation-length="10-15"
data-validation-optional="true"
data-validation-error-msg="Nr.Reg.Com. trebuie să conțină doar litere, cifre și / (min 10, max 15 caractere)">
<label for="societate_nrc">Nr.Reg.Com.</label>
</div>
<div class="input-field col s12">
<input placeholder="Adresă completă" id="adresa_firma" type="text" data-bind="value: address"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="10-100"
data-validation-optional="true"
data-validation-error-msg="Adresa trebuie să conțină doar litere (min 10, max 100 caractere)">
<label for="adresa_firma">Adresă Companie</label>
</div>
<div class="input-field col s12">
<input placeholder="Cont Bancar" id="societate_cont" type="text" data-bind="value: iban"
data-sanitize="trim upper"
data-validation="length alphanumeric iban"
data-validation-length="24"
data-validation-optional="true"
data-validation-error-msg="Cont Bancar trebuie să conțină doar litere, cifre și / (24 caractere)">
<label for="societate_cont">Cont Bancar</label>
</div>
<div class="input-field col s12">
<input placeholder="Nume Bancă" id="societate_banca" type="text" data-bind="value: bank"
data-sanitize="trim upper"
data-validation="length alphanumeric"
data-validation-allowing=" -.ăîâșțĂÎÂȘȚ"
data-validation-length="3-50"
data-validation-optional="true"
data-validation-error-msg="Numele băncii trebuie să conțină doar litere (min 3, max 50 caractere)">
<label for="societate_banca">Bancă</label>
</div>
</div> </div>
</form> </form>
</div> </div>
</div>
</li>
</ul>
</div> </div>
<div class="col s12 m12 l3" id="right-column"> <div class="col s12 m12 l3" id="right-column">
<div class="block-pin" id="total"> <div class="block-pin" id="total">
<div class="card image-preview-container" data-bind="if: adType() == 1"> <div class="card cyan darken-3">
<div class="card-content white-text"> <div class="card-content white-text">
<span class="card-title">Imagine Anunț</span> <span class="card-title" data-bind="text: adType() == 1 ? 'Total General':'Info'"></span>
</div> <div data-bind="if: adType() == '1'">
<div class="card-image image-preview-summary"></div> <div class="total-item">Cuvinte <span data-bind="text: words"></span></div>
</div> <div class="total-item">Total fară TVA <span data-bind="text: price().base"></span></div>
<div class="total-item">TVA <span data-bind="text: price().vat"></span></div>
<ul class="collection with-header z-depth-1"> <div class="total-item">Total cu TVA <span data-bind="text: price().total"></span></div>
<li class="collection-header"> </div>
<b>Sumar Anunț</b> <div data-bind="if: adType() == 2">
</li> <div class="total-item">
<li class="no-publication-message"> Tip anunt: <span data-bind="text: kindNames[selectedKind()]"></span>
Nu există nici o publicație selectată. </div>
</li> </div>
<div data-bind="foreach: publications"> </div>
<li class="collection-item avatar" data-bind="visible: selected"> <div class="card-action">
<img data-bind="attr: {src: image}" class="circle" > <span>
<span class="title" data-bind="text: name"></span> <button type="button" id="do-quote" disabled="disabled"
<div class="subtotal-item">Zile aparitii <span data-bind="text: dates().length"></span></div> class="waves-effect waves-light btn btn-full quote-btn-create"
<div data-bind="if: $parent.adType() == 1" class="subtotal-item">Total de plata <span data-bind=" text: price().total"></span></div> data-bind="enable: isPristineQuote(), click: doFinalQuote">Cotatie</button>
<a href="#!" class="secondary-content tooltipped" data-position="left" data-delay="50" data-tooltip="Șterge" data-bind="click: function(pub) {pub.selected(false);}"><i class="material-icons">delete_forever</i></a> </span>
</li>
</div>
</ul>
<div class="card cyan darken-3">
<div class="card-content white-text">
<span class="card-title" data-bind="text: adType() == 1 ? 'Total General':'Info'"></span>
<div data-bind="if: adType() == '1'">
<div class="total-item">Cuvinte <span data-bind="text: words"></span></div>
<div class="total-item">Total fară TVA <span data-bind="text: price().base"></span></div>
<div class="total-item">TVA <span data-bind="text: price().vat"></span></div>
<div class="total-item">Total cu TVA <span data-bind="text: price().total"></span></div>
</div>
<div data-bind="if: adType() == 2">
<div class="total-item">
Tip anunt: <span data-bind="text: kindNames[selectedKind()]"></span>
</div> </div>
</div> </div>
</div>
<div class="card-action">
<span data-bind="if: adType() == 1">
<button type="button" id="do-payment" disabled="disabled"
class="waves-effect waves-light btn btn-full"
data-bind="enable: isPristine(), click: doFinal">Finalizează</button>
</span>
<span data-bind="if: adType() == 2">
<button type="button" id="do-quote" disabled="disabled"
class="waves-effect waves-light btn btn-full quote-btn-create"
data-bind="enable: isPristineQuote(), click: doFinalQuote">Cotatie</button>
</span>
</div>
</div> </div>
</div>
</div> </div>
</div>
</div> </div>
</div> </div>
<div class="section no-pad-bot" data-bind="visible: finalStep"> </div>
<div class="section no-pad-bot" data-bind="visible: finalStep">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col s12 m12 l9"> <!-- <div class="col s12 m12 l9">-->
<div class="row"> <!-- <div class="row">-->
<ul class="collection final"> <!-- <ul class="collection final">-->
<li class="collection-item"> <!-- <li class="collection-item">-->
<b>Sumar Anunț</b> <!-- <b>Sumar Anunț</b>-->
<a href="#" data-bind="click: finalStep(false);" <!-- <a href="#" data-bind="click: finalStep(false);"-->
class="waves-effect waves-light btn-link btn-ad-edit">Modifică Anunțul</a> <!-- class="waves-effect waves-light btn-link btn-ad-edit">Modifică Anunțul</a>-->
</li> <!-- </li>-->
<div data-bind="foreach: publications"> <!-- <div data-bind="foreach: publications">-->
<li class="collection-item avatar" data-bind="visible: isPristine() && selected"> <!-- <li class="collection-item avatar" data-bind="visible: isPristine() && selected">-->
<img alt="" class="circle" data-bind="attr: {src: image}"> <!-- <img alt="" class="circle" data-bind="attr: {src: image}">-->
<span class="title" data-bind="text: name"></span> <!-- <span class="title" data-bind="text: name"></span>-->
<p>Categorie: <span data-bind="text: columnStr()"></span></p> <!-- <p>Categorie: <span data-bind="text: columnStr()"></span></p>-->
<p>Date Apariție: <span data-bind="text: datesStr"></span></p> <!-- <p>Date Apariție: <span data-bind="text: datesStr"></span></p>-->
<!---->
<p data-bind="visible: optionStr().length > 0">Optionale: <!-- <p data-bind="visible: optionStr().length > 0">Optionale:-->
<span data-bind="text: optionStr"></span> <!-- <span data-bind="text: optionStr"></span>-->
</p> <!-- </p>-->
<p>Total de Plată: <span class="ron badge" data-bind="text: price().total"></span></p> <!-- <p>Total de Plată: <span class="ron badge" data-bind="text: price().total"></span></p>-->
</li> <!-- </li>-->
<!-- </div>-->
<!-- <li class="collection-item avatar finalize-ad-text">-->
<!-- <p><b>Text Anunț: </b><span data-bind="text: text"></span></p>-->
<!-- </li>-->
<!-- </ul>-->
<!-- </div>-->
<!-- </div>-->
<div class="col s12 m12 l3">
<div class="card card-final">
<div class="card-image image-preview-finalize"></div>
<div class="card-content white finalize-sidebar">
<ul class="collection">
<li class="collection-item">Cuvinte <span class="right" data-bind="text: words"></span></li>
<li class="collection-item">Total fară TVA <span class="right"
data-bind="text: price().base"></span></li>
<li class="collection-item">TVA <span class="right" data-bind="text: price().vat"></span>
</li>
<li class="collection-item"><b>Total de Plată: </b><b><span class="right"
data-bind="text: price().total"></span></b>
</li>
</ul>
</div>
<div class="card-action">
<a href="#" data-bind="click: createDraft" class="pay-ad waves-effect waves-light btn btn-full">Plătește</a>
<div class="clr"></div>
</div>
<form action="/payment" id="payForm" method="post" style="display: none;">
<input type="hidden" name="ad_id" value="">
</form>
</div> </div>
<li class="collection-item avatar finalize-ad-text"> </div>
<p><b>Text Anunț: </b><span data-bind="text: text"></span></p>
</li>
</ul>
</div>
</div> </div>
<div class="col s12 m12 l3"> </div>
<div class="card card-final"> </div>
<div class="card-image image-preview-finalize"></div>
<div class="card-content white finalize-sidebar"> <footer class="page-footer default_color scrollspy">
<ul class="collection"> <div class="container">
<li class="collection-item">Cuvinte <span class="right" data-bind="text: words"></span></li> <div class="row">
<li class="collection-item">Total fară TVA <span class="right" data-bind="text: price().base"></span></li> <div class="col l6 s12">
<li class="collection-item">TVA <span class="right" data-bind="text: price().vat"></span></li> <h5 class="white-text">Rofusion Advertising Srl</h5>
<li class="collection-item"><b>Total de Plată: </b><b><span class="right" data-bind="text: price().total"></span></b></li> <p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
</ul> <ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni
și Condiții</a></li>
</ul>
</div> </div>
<div class="card-action"> <div class="col l6 s12 right-align">
<a href="#" data-bind="click: createDraft" class="pay-ad waves-effect waves-light btn btn-full">Plătește</a> <h5 class="white-text" id="contact">Contact</h5>
<div class="clr"></div> <ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon</li>
</ul>
</div> </div>
<form action="/payment" id="payForm" method="post" style="display: none;">
<input type="hidden" name="ad_id" value="">
</form>
</div>
</div> </div>
</div>
</div> </div>
</div> <div class="footer-copyright z-depth-1">
<div class="container">
<footer class="page-footer default_color scrollspy" > <b>&copy; Rofusion Advertising Srl</b>
<div class="container"> <span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank"
<div class="row"> title="activemall.ro">activemall.ro</a></span>
<div class="col l6 s12"> </div>
<h5 class="white-text">Rofusion Advertising Srl</h5> </div>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p> </footer>
<ul>
<li><a href="termeni-si-conditii-mica24.html" class="white-text" title="Termeni și Condiții">Termeni și Condiții</a></li>
</ul>
</div>
<div class="col l6 s12 right-align">
<h5 class="white-text" id="contact">Contact</h5>
<ul class="white-text">
<li>Bd. Ion Mihalache nr. 140 S<br>Sector 1, București</li>
<li>Telefon </li>
</ul>
</div>
</div>
</div>
<div class="footer-copyright z-depth-1">
<div class="container">
<b>&copy; Rofusion Advertising Srl</b>
<span class="right">dezvoltat de <a href="http://www.activemall.ro" class="white-text" target="_blank" title="activemall.ro">activemall.ro</a></span>
</div>
</div>
</footer>
<div id="reguli" class="modal"> <div id="reguli" class="modal">
<div class="modal-content"> <div class="modal-content">
<h4>Reguli de redactare a unui anunț</h4> <h4>Reguli de redactare a unui anunț</h4>
<p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p> <p>1. Nu scrieți cuvinte jignitoare sau ofensatoare.<br>2. Nu scrieți cuvintele legate între ele.<br>3. Numărul
minim de cuvinte taxate este de 10, indiferent de lungimea anunțului dvs.</p>
</div> </div>
<div class="modal-footer"> <div class="modal-footer">
<a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a> <a href="#!" class=" modal-action modal-close waves-effect waves-green btn-flat">OK</a>
</div> </div>
</div> </div>
<script src="js/jquery-3.1.0.min.js"></script> <script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script> <script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script> <script src="js/modernizr.js"></script>
<script src="js/kalendae.standalone.js"></script> <script src="js/kalendae.standalone.js"></script>
<script src="js/moment.js"></script> <script src="js/moment.js"></script>
<script src="js/knockout-min.js"></script> <script src="js/knockout-min.js"></script>
<script src="js/knockout.mapping-latest.js"></script> <script src="js/knockout.mapping-latest.js"></script>
<script src="js/form-validator/jquery.form-validator.min.js"></script> <script src="js/form-validator/jquery.form-validator.min.js"></script>
<script src="js/jquery.filer.min.js"></script> <script src="js/jquery.filer.min.js"></script>
<script> <script>
var jenuPublication = <?php echo $jenuPublication; ?>; var jenuPublication = <?php echo $jenuPublication; ?>;
</script> </script>
<script src="js/main.js"></script> <script src="js/main.js"></script>
<!--Start of Tawk.to Script--> <!--Start of Tawk.to Script-->
<!-- <script type="text/javascript"> <!-- <script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date(); var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){ (function(){
...@@ -581,7 +541,7 @@ ...@@ -581,7 +541,7 @@
s0.parentNode.insertBefore(s1,s0); s0.parentNode.insertBefore(s1,s0);
})(); })();
</script> --> </script> -->
<!--End of Tawk.to Script--> <!--End of Tawk.to Script-->
</body> </body>
</html> </html>
<!DOCTYPE html> <!DOCTYPE html>
<html lang="ro-RO"> <html lang="ro-RO">
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title> <title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<script src="js/jquery-3.1.0.min.js"></script> <script src="js/jquery-3.1.0.min.js"></script>
<script type="text/javascript"> <script type="text/javascript">
$(document).ready(function() { $(document).ready(function () {
$('#payForm').submit(); $('#payForm').submit();
}); });
</script> </script>
</head> </head>
<body> <body>
<?php <?php
if (!empty($data) && !empty($data['order']) && !empty($data['billing'])) { if (!empty($data) && !empty($data['order']) && !empty($data['billing'])) {
$order = $data['order']; $order = $data['order'];
$paymentSettings = $data["paymentSettings"]; $paymentSettings = $data["paymentSettings"];
require_once '../src/Mobilpay/Payment/Request/Abstract.php'; require_once '../src/Mobilpay/Payment/Request/Abstract.php';
require_once '../src/Mobilpay/Payment/Request/Card.php'; require_once '../src/Mobilpay/Payment/Request/Card.php';
require_once '../src/Mobilpay/Payment/Invoice.php'; require_once '../src/Mobilpay/Payment/Invoice.php';
require_once '../src/Mobilpay/Payment/Address.php'; require_once '../src/Mobilpay/Payment/Address.php';
#for testing purposes, all payment requests will be sent to the sandbox server. Once your account will be active you must switch back to the live server https://secure.mobilpay.ro #for testing purposes, all payment requests will be sent to the sandbox server. Once your account will be active you must switch back to the live server https://secure.mobilpay.ro
#in order to display the payment form in a different language, simply add the language identifier to the end of the paymentUrl, i.e https://secure.mobilpay.ro/en for English #in order to display the payment form in a different language, simply add the language identifier to the end of the paymentUrl, i.e https://secure.mobilpay.ro/en for English
$paymentUrl = $paymentSettings["url"]; $paymentUrl = $paymentSettings["url"];
//$paymentUrl = 'https://secure.mobilpay.ro'; //$paymentUrl = 'https://secure.mobilpay.ro';
// this is the path on your server to the public certificate. You may download this from Admin -> Conturi de comerciant -> Detalii -> Setari securitate // this is the path on your server to the public certificate. You may download this from Admin -> Conturi de comerciant -> Detalii -> Setari securitate
// $x509FilePath = 'i.e: /ome/certificates/public.cer'; // $x509FilePath = 'i.e: /ome/certificates/public.cer';
$x509FilePath = $paymentSettings["publicCertificate"]; $x509FilePath = $paymentSettings["publicCertificate"];
// if(file_exists($x509FilePath)){ // if(file_exists($x509FilePath)){
// var_dump($x509FilePath); // var_dump($x509FilePath);
// die(); // die();
// } // }
try try {
{ srand((double)microtime() * 1000000);
srand((double) microtime() * 1000000); $objPmReqCard = new Mobilpay_Payment_Request_Card();
$objPmReqCard = new Mobilpay_Payment_Request_Card(); #merchant account signature - generated by mobilpay.ro for every merchant account
#merchant account signature - generated by mobilpay.ro for every merchant account #semnatura contului de comerciant - mergi pe www.mobilpay.ro Admin -> Conturi de comerciant -> Detalii -> Setari securitate
#semnatura contului de comerciant - mergi pe www.mobilpay.ro Admin -> Conturi de comerciant -> Detalii -> Setari securitate $objPmReqCard->signature = $paymentSettings["signature"];
$objPmReqCard->signature = $paymentSettings["signature"]; #you should assign here the transaction ID registered by your application for this commercial operation
#you should assign here the transaction ID registered by your application for this commercial operation #order_id should be unique for a merchant account
#order_id should be unique for a merchant account $objPmReqCard->orderId = md5(uniqid(rand()));
$objPmReqCard->orderId = md5(uniqid(rand()));
$objPmReqCard->params = [ $objPmReqCard->params = [
"ad" => $order["reference"] "ad" => $order["reference"]
]; ];
if(!empty($order['quote_id'])){ if (!empty($order['quote_id'])) {
$objPmReqCard->params["quote"] = $order["quote_id"]; $objPmReqCard->params["quote"] = $order["quote_id"];
} }
#below is where mobilPay will send the payment result. This URL will always be called first; mandatory #below is where mobilPay will send the payment result. This URL will always be called first; mandatory
$objPmReqCard->confirmUrl = $paymentSettings["backref"]; $objPmReqCard->confirmUrl = $paymentSettings["backref"];
#below is where mobilPay redirects the client once the payment process is finished. Not to be mistaken for a "successURL" nor "cancelURL"; mandatory #below is where mobilPay redirects the client once the payment process is finished. Not to be mistaken for a "successURL" nor "cancelURL"; mandatory
$objPmReqCard->returnUrl = $paymentSettings["redirectUrl"] . '?ad=' . $order["reference"]; $objPmReqCard->returnUrl = $paymentSettings["redirectUrl"] . '?ad=' . $order["reference"];
#detalii cu privire la plata: moneda, suma, descrierea #detalii cu privire la plata: moneda, suma, descrierea
#payment details: currency, amount, description #payment details: currency, amount, description
$objPmReqCard->invoice = new Mobilpay_Payment_Invoice(); $objPmReqCard->invoice = new Mobilpay_Payment_Invoice();
#payment currency in ISO Code format; permitted values are RON, EUR, USD, MDL; please note that unless you have mobilPay permission to #payment currency in ISO Code format; permitted values are RON, EUR, USD, MDL; please note that unless you have mobilPay permission to
#process a currency different from RON, a currency exchange will occur from your currency to RON, using the official BNR exchange rate from that moment #process a currency different from RON, a currency exchange will occur from your currency to RON, using the official BNR exchange rate from that moment
#and the customer will be presented with the payment amount in a dual currency in the payment page, i.e N.NN RON (e.ee EUR) #and the customer will be presented with the payment amount in a dual currency in the payment page, i.e N.NN RON (e.ee EUR)
$objPmReqCard->invoice->currency = $paymentSettings["currency"]; $objPmReqCard->invoice->currency = $paymentSettings["currency"];
$objPmReqCard->invoice->amount = $order["amount"]; $objPmReqCard->invoice->amount = $order["amount"];
#available installments number; if this parameter is present, only its value(s) will be available #available installments number; if this parameter is present, only its value(s) will be available
//$objPmReqCard->invoice->installments= '2,3'; //$objPmReqCard->invoice->installments= '2,3';
#selected installments number; its value should be within the available installments defined above #selected installments number; its value should be within the available installments defined above
//$objPmReqCard->invoice->selectedInstallments= '3'; //$objPmReqCard->invoice->selectedInstallments= '3';
//platile ulterioare vor contine in request si informatiile despre token. Prima plata nu va contine linia de mai jos. //platile ulterioare vor contine in request si informatiile despre token. Prima plata nu va contine linia de mai jos.
$objPmReqCard->invoice->tokenId = 'token_id'; $objPmReqCard->invoice->tokenId = 'token_id';
$objPmReqCard->invoice->details = $order["name"]; $objPmReqCard->invoice->details = $order["name"];
#detalii cu privire la adresa posesorului cardului #detalii cu privire la adresa posesorului cardului
#details on the cardholder address (optional) #details on the cardholder address (optional)
$billingAddress = new Mobilpay_Payment_Address(); $billingAddress = new Mobilpay_Payment_Address();
$billingAddress->type = "person"; //should be "person" $billingAddress->type = "person"; //should be "person"
// $billingAddress->type = $_POST['billing_type']; //should be "person" // $billingAddress->type = $_POST['billing_type']; //should be "person"
$billingAddress->firstName = $data["billing"]["billFName"]; $billingAddress->firstName = $data["billing"]["billFName"];
$billingAddress->lastName = $data["billing"]["billLName"]; $billingAddress->lastName = $data["billing"]["billLName"];
$billingAddress->address = $data["billing"]["billAddress1"]; $billingAddress->address = $data["billing"]["billAddress1"];
$billingAddress->email = $data["billing"]["billEmail"]; $billingAddress->email = $data["billing"]["billEmail"];
$billingAddress->mobilePhone = $data["billing"]["billPhone"]; $billingAddress->mobilePhone = $data["billing"]["billPhone"];
$objPmReqCard->invoice->setBillingAddress($billingAddress); $objPmReqCard->invoice->setBillingAddress($billingAddress);
#detalii cu privire la adresa de livrare #detalii cu privire la adresa de livrare
#details on the shipping address #details on the shipping address
// $shippingAddress = new Mobilpay_Payment_Address(); // $shippingAddress = new Mobilpay_Payment_Address();
// $shippingAddress->type = "ziar"; // $shippingAddress->type = "ziar";
// $shippingAddress->firstName = ""; // $shippingAddress->firstName = "";
// $shippingAddress->lastName = ""; // $shippingAddress->lastName = "";
// $shippingAddress->address = ""; // $shippingAddress->address = "";
// $shippingAddress->email = ""; // $shippingAddress->email = "";
// $shippingAddress->mobilePhone = ""; // $shippingAddress->mobilePhone = "";
// $objPmReqCard->invoice->setShippingAddress($shippingAddress); // $objPmReqCard->invoice->setShippingAddress($shippingAddress);
#uncomment the line below in order to see the content of the request #uncomment the line below in order to see the content of the request
// echo "<pre>";print_r($objPmReqCard);echo "</pre>"; // echo "<pre>";print_r($objPmReqCard);echo "</pre>";
$objPmReqCard->encrypt($x509FilePath); $objPmReqCard->encrypt($x509FilePath);
} } catch (Exception $e) {
catch(Exception $e) }
{
}
// die(); // die();
?> ?>
<form name="payForm" id="payForm" action="<?php echo $paymentUrl; ?>" method="post"> <form name="payForm" id="payForm" action="<?php echo $paymentUrl; ?>" method="post">
<input type="hidden" name="env_key" value="<?php echo $objPmReqCard->getEnvKey();?>"/> <input type="hidden" name="env_key" value="<?php echo $objPmReqCard->getEnvKey(); ?>"/>
<input type="hidden" name="data" value="<?php echo $objPmReqCard->getEncData();?>"/> <input type="hidden" name="data" value="<?php echo $objPmReqCard->getEncData(); ?>"/>
<input type="submit" style="display: none;"> <input type="submit" style="display: none;">
</form> </form>
<?php <?php
} }
?> ?>
</body> </body>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment