Commit 1859d25e by Munteanu Petrisor

Add auth middleware for homepage

Remove unnecessary DOM elements Add initial sql script
parent 67867f9a
vendor
uploads
.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 = {
direction: 'future',
directionScrolling: true,
useYearNav: false,
blackout: function(date) {
blackout: function (date) {
var dateFmt = 'YYYY-MM-DD';
var date = Kalendae.moment(date).startOf('day');
var shortDate = date.format(dateFmt);
var day = date.day();
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;
});
if (!publication) {
return [1,0,0,0,0,0,0][day];
return [1, 0, 0, 0, 0, 0, 0][day];
}
var disabledWeekDays = publication.disabledWeekDays();
......@@ -101,7 +101,7 @@ var kalOpt = {
}
};
var PublicationModel = function(data) {
var PublicationModel = function (data) {
ko.mapping.fromJS(data, {}, this);
var self = this;
......@@ -111,25 +111,25 @@ var PublicationModel = function(data) {
self.optionIDs = ko.observableArray([]);
self.dates = ko.observableArray([]);
self.pubName = data.name;
self.distribution = ko.pureComputed(function() {
self.distribution = ko.pureComputed(function () {
return self.type() == 1 ? 'National' : 'Local';
});
self.price = ko.observable({'total': '0', 'vat': '0', 'base': '0'});
self.isPristine = function() {
self.isPristine = function () {
return (self.dates().length && self.columnID());
};
self.options = ko.pureComputed(function() {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) {
self.options = ko.pureComputed(function () {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function (column) {
return column.id == self.columnID();
});
return selectedColumn.length ? selectedColumn[0].options : [];
}, self).extend({ notify: 'always' });
}, self).extend({notify: 'always'});
self.columnName = ko.pureComputed(function(){
var selectedColumn = ko.utils.arrayFilter(self.columns(), function(column) {
self.columnName = ko.pureComputed(function () {
var selectedColumn = ko.utils.arrayFilter(self.columns(), function (column) {
return column.id == self.columnID();
});
......@@ -139,23 +139,23 @@ var PublicationModel = function(data) {
self.columnID.subscribe(app.getSummary);
self.optionIDs.subscribe(app.getSummary);
self.dates.subscribe(function() {
if(self.dates().length == 0) {
self.dates.subscribe(function () {
if (self.dates().length == 0) {
self.price({'vat': '0', 'base': '0', 'total': '0'});
}
app.getSummary();
});
self.columnID.subscribe(function() {
self.columnID.subscribe(function () {
self.optionIDs([]);
});
self.optionStr = ko.pureComputed(function() {
self.optionStr = ko.pureComputed(function () {
var optionNames = [];
ko.utils.arrayForEach(self.optionIDs(), function(sopt) {
ko.utils.arrayForEach(self.options(), function(opt) {
if(sopt == opt.id) {
ko.utils.arrayForEach(self.optionIDs(), function (sopt) {
ko.utils.arrayForEach(self.options(), function (opt) {
if (sopt == opt.id) {
optionNames.push(opt.name);
}
});
......@@ -163,9 +163,9 @@ var PublicationModel = function(data) {
return optionNames.join(', ');
});
self.columnStr = function() {
self.columnStr = function () {
ret = '';
ko.utils.arrayForEach(self.columns(), function(col) {
ko.utils.arrayForEach(self.columns(), function (col) {
if (col.id == self.columnID()) {
ret = col.name;
}
......@@ -174,9 +174,9 @@ var PublicationModel = function(data) {
return ret ? ret : '';
};
self.datesStr = ko.pureComputed(function() {
self.datesStr = ko.pureComputed(function () {
var sDates = '';
ko.utils.arrayForEach(self.dates(), function(date) {
ko.utils.arrayForEach(self.dates(), function (date) {
sDates = sDates + moment(date).format('D-M-Y, ');
});
......@@ -188,10 +188,10 @@ var PublicationModel = function(data) {
return sDates;
});
self.selected.subscribe(function(isSelected) {
self.selected.subscribe(function (isSelected) {
app.getSummary();
if (isSelected && self.columns().length == 0) {
$.get('/columns/' + self.id()).done(function(data) {
$.get('/columns/' + self.id()).done(function (data) {
self.columns(data);
if (self.columns().length == 0) {
return;
......@@ -202,7 +202,7 @@ var PublicationModel = function(data) {
kalOpt.publicationID = self.id();
var k = new Kalendae('cal' + self.id(), kalOpt);
k.subscribe('change', function(date) {
k.subscribe('change', function (date) {
app.text.pauseNotifications = true;
$('#textarea1').blur();
app.text.pauseNotifications = false;
......@@ -214,12 +214,12 @@ var PublicationModel = function(data) {
});
}
var Application = function() {
var Application = function () {
var self = this;
// my vars
self.isLoggedIn = ko.observable(false);
self.adType = ko.observable(1);
self.adType = ko.observable(2);
self.kinds = ko.observableArray([]);
self.selectedKind = ko.observable();
self.invoicePerAd = ko.observable(true);
......@@ -248,35 +248,30 @@ var Application = function() {
self.contactValid = ko.observable(false);
// my functions
self.changeAdType = function(adType) {
self.adType(adType);
};
self.isPristineQuote = function(){
self.isPristineQuote = function () {
return self.adType() && self.contactValid() && Object.keys(self.quoteFile()).length != 0;
};
self.selectedKind.subscribe(function() {
if(self.selectedKind() == 3){
ko.utils.arrayForEach(self.publications(), function(publication){
if(publication.id() == jenuPublication){
self.selectedKind.subscribe(function () {
if (self.selectedKind() == 3) {
ko.utils.arrayForEach(self.publications(), function (publication) {
if (publication.id() == jenuPublication) {
publication.selected(true);
}else{
} else {
publication.selected(false);
}
});
}else{
ko.utils.arrayForEach(self.publications(), function(publication){
publication.selected(false);
} else {
ko.utils.arrayForEach(self.publications(), function (publication) {
publication.selected(false);
});
$(".collapsible > li:first-child .collapsible-header").trigger("click");
}
});
self.doFinalQuote = function(){
if(self.isPristineQuote() && self.selected().length) {
self.doFinalQuote = function () {
if (self.isPristineQuote() && self.selected().length) {
$(".quote-btn-create").addClass("disabled").text("Asteptati...");
var adObj = {
columns: [],
......@@ -286,15 +281,15 @@ var Application = function() {
};
ko.utils.arrayForEach(self.selected(), function(pub) {
ko.utils.arrayForEach(self.selected(), function (pub) {
var days = [];
var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) {
ko.utils.arrayForEach(pub.optionIDs(), function (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]')});
});
......@@ -328,7 +323,7 @@ var Application = function() {
iban: self.iban()
};
if(!Object.keys(self.quoteFile()).length){
if (!Object.keys(self.quoteFile()).length) {
return;
}
......@@ -349,8 +344,8 @@ var Application = function() {
processData: false,
contentType: false,
data: formData,
success: function(resp){
if(resp.success){
success: function (resp) {
if (resp.success) {
//redirect here to the user account
window.location = '/contul-meu';
}
......@@ -360,20 +355,20 @@ var Application = function() {
};
// end of my functions
self.buildSummary = function() {
self.buildSummary = function () {
var obj = {
text: self.text(), columns: [],
};
ko.utils.arrayForEach(self.selected(), function(pub) {
ko.utils.arrayForEach(self.selected(), function (pub) {
var days = [];
var options = [];
ko.utils.arrayForEach(pub.optionIDs(), function(id) {
ko.utils.arrayForEach(pub.optionIDs(), function (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]')});
});
......@@ -390,7 +385,7 @@ var Application = function() {
return obj;
};
self.createDraft = function() {
self.createDraft = function () {
var obj = self.buildSummary();
var name = (self.company() != '') ? self.company() :
self.firstName() + ' ' + self.lastName();
......@@ -411,8 +406,8 @@ var Application = function() {
};
var payButton = $('.pay-ad');
var doPayment = function(data) {
$.each(data, function(k, v) {
var doPayment = function (data) {
$.each(data, function (k, v) {
$('#payForm input[name=' + k + ']').attr('value', v);
});
......@@ -427,7 +422,7 @@ var Application = function() {
dataType: 'json',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj),
success: function(data) {
success: function (data) {
var id = data.ad_id;
if (!id) {
payButton.removeAttr('disabled');
......@@ -451,42 +446,42 @@ var Application = function() {
data: formData,
processData: false,
contentType: false,
success: function() {
success: function () {
doPayment(data);
},
error: function(data) {
error: function (data) {
payButton.removeAttr('disabled');
}
});
},
error: function(data) {
error: function (data) {
payButton.removeAttr('disabled');
}
});
};
self.isPristine = ko.computed(function() {
self.isPristine = ko.computed(function () {
return self.price().total !== '0' && self.contactValid();
});
self.doFinal = function() {
if(self.isPristine() && self.selected().length) {
self.doFinal = function () {
if (self.isPristine() && self.selected().length) {
self.finalStep(true);
}
};
self.selected = function() {
return ko.utils.arrayFilter(self.publications(), function(publication) {
self.selected = function () {
return ko.utils.arrayFilter(self.publications(), function (publication) {
return publication.selected();
});
};
self.addTooltip = function(els) {
self.addTooltip = function (els) {
$('label[for="' + els[1].id + '"]').tooltip();
};
self.resetPrice = function() {
ko.utils.arrayForEach(self.selected(), function(pub) {
self.resetPrice = function () {
ko.utils.arrayForEach(self.selected(), function (pub) {
pub.price({'vat': '0', 'base': '0', 'total': '0'});
});
......@@ -494,14 +489,14 @@ var Application = function() {
self.finalStep(false);
};
self.getSummary = function() {
if(!self.text().length) {
self.getSummary = function () {
if (!self.text().length) {
self.words('0');
self.resetPrice();
return;
}
if(!self.selected().length) {
if (!self.selected().length) {
self.resetPrice();
return;
}
......@@ -518,13 +513,13 @@ var Application = function() {
dataType: 'json',
contentType: 'application/json;charset=utf-8',
data: JSON.stringify(obj),
success: function(data) {
success: function (data) {
self.price(data.price);
self.words(data.words);
ko.utils.arrayForEach(data.columns, function(column) {
ko.utils.arrayForEach(self.selected(), function(pub) {
if(column.id === pub.id()) {
ko.utils.arrayForEach(data.columns, function (column) {
ko.utils.arrayForEach(self.selected(), function (pub) {
if (column.id === pub.id()) {
pub.price(column.price);
return;
}
......@@ -537,29 +532,30 @@ var Application = function() {
self.text.subscribe(self.getSummary);
};
Application.prototype = function() {
Application.prototype = function () {
return {
getPublications: function() {
getPublications: function () {
var self = this;
$.get('/listing', function(data) {
$.get('/listing', function (data) {
ko.mapping.fromJS(data, {
create: function(options) {
create: function (options) {
return new PublicationModel(options.data);
}}, self.publications);
}
}, self.publications);
// just testing for viata libera
// var pub = self.publications()[3];
// self.publications.removeAll();
// self.publications.push(pub);
if(self.publications().length == 1){
if (self.publications().length == 1) {
self.publications()[0].selected(true);
}
});
},
getUserProfile: function() {
getUserProfile: function () {
var self = this;
$.get('/users/profile', function(resp) {
$.get('/users/profile', function (resp) {
var profile = resp.data;
// date personale
......@@ -580,12 +576,12 @@ Application.prototype = function() {
self.invoicePerAd(profile.group.invoiceInterval);
if(self.invoicePerAd() != 0){
if (self.invoicePerAd() != 0) {
$("#date_persoana input").prop("disabled", "disabled");
self.contactValid(true);
}
if(constants.group[profile.group.type]){
if (constants.group[profile.group.type]) {
self.kinds(constants.group[profile.group.type].kinds);
$('select').material_select();
}
......@@ -594,19 +590,19 @@ Application.prototype = function() {
};
}();
function gotostep(step){
$('#'+step).click();
function gotostep(step) {
$('#' + step).click();
}
var app = new Application();
app.getPublications();
ko.bindingHandlers.visible = {
init: function(element, valueAccessor) {
init: function (element, valueAccessor) {
var value = valueAccessor();
$(element).toggle(ko.unwrap(value));
},
update: function(element, valueAccessor) {
update: function (element, valueAccessor) {
var value = valueAccessor();
ko.unwrap(value) ? $(element).slideDown('fast') :
$(element).slideUp('fast');
......@@ -615,10 +611,10 @@ ko.bindingHandlers.visible = {
ko.applyBindings(app);
$(document).ready(function(){
$(document).ready(function () {
var isLoggedIn = !!$("#loggedInUser").val();
if(isLoggedIn){
if (isLoggedIn) {
app.isLoggedIn(isLoggedIn);
app.getUserProfile();
}
......@@ -636,7 +632,7 @@ $(document).ready(function(){
$('.modal').modal();
$('#do-payment').on('click', function(e) {
$('#do-payment').on('click', function (e) {
$('#date_persoana').submit();
});
......@@ -680,10 +676,10 @@ $(document).ready(function(){
folderUpload: 'Nu puteti incarca directoare.'
}
},
onSelect: function(f){
onSelect: function (f) {
app.quoteFile(f);
},
onRemove: function(){
onRemove: function () {
app.quoteFile({});
}
});
......@@ -734,7 +730,7 @@ $(document).ready(function(){
$('.image-preview-finalize').empty().append(img);
});
$('.btn-delete-image').click(function() {
$('.btn-delete-image').click(function () {
var el = $('#image-upload');
el.prop('jFiler').reset();
$('#file-path-name').val('');
......@@ -742,21 +738,21 @@ $(document).ready(function(){
});
$.validate({
lang : 'ro',
lang: 'ro',
form: '#date_persoana',
scrollToTopOnError : true,
modules : 'html5',
modules : 'sanitize',
modules : 'security',
modules : 'sepa',
onError : function($form) {
scrollToTopOnError: true,
modules: 'html5',
modules: 'sanitize',
modules: 'security',
modules: 'sepa',
onError: function ($form) {
return false;
},
onSuccess : function($form) {
onSuccess: function ($form) {
return false;
},
onElementValidate : function(valid, $el, $form, errorMess) {
if(!app.invoicePerAd()){
onElementValidate: function (valid, $el, $form, errorMess) {
if (!app.invoicePerAd()) {
app.contactValid(true);
} else {
app.contactValid(valid);
......
......@@ -26,7 +26,8 @@ class API
protected $smtp;
function __construct(Container $c = null) {
function __construct(Container $c = null)
{
global $settings;
$api = $settings['settings']['api'];
......@@ -41,7 +42,7 @@ class API
$this->smtp = $settings["settings"]["smtp"];
$this->uploadDirectory = $settings['settings']['upload']['path'];
if($c){
if ($c) {
$this->db = $c->get('db');
$this->query_factory = new QueryFactory('mysql');
$this->session = $c->get('session');
......@@ -50,8 +51,62 @@ class API
$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 = [],
$saveCookies = false, $upload = false) {
$saveCookies = false, $upload = false)
{
$curl = curl_init();
......@@ -74,14 +129,14 @@ class API
$opts[CURLOPT_CAINFO] = $this->certificate;
}
if($saveCookies) {
if ($saveCookies) {
$opts[CURLOPT_COOKIEJAR] = $this->cookieFile;
} else {
$opts[CURLOPT_COOKIEFILE] = $this->cookieFile;
}
if(strtoupper($method) !== 'GET') {
if($upload) {
if (strtoupper($method) !== 'GET') {
if ($upload) {
$opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data',
......@@ -105,7 +160,7 @@ class API
curl_close($curl);
if($path !== '/users/login' && $info['http_code'] == 401) {
if ($path !== '/users/login' && $info['http_code'] == 401) {
$ret = $this::Login();
if ($ret['info']['http_code'] == 200) {
return $this->Request($method, $path, $data, $saveCookies);
......@@ -116,10 +171,17 @@ class API
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 ($v as $key => $value) {
if (!in_array($key, $keys)) {
......@@ -133,71 +195,16 @@ class API
return $arr;
}
function Login() {
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) {
function GetPublicationsExt($id)
{
$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'],
['id','name','options']);
['id', 'name', 'options']);
foreach ($ret['data'] as $id => $col) {
if(!is_array($ret['data'][$id]['options'])) {
if (!is_array($ret['data'][$id]['options'])) {
continue;
}
......@@ -207,8 +214,8 @@ class API
);
$options = [];
foreach($ret['data'][$id]['options'] as $oid => $o) {
if($o['active'] !== true) {
foreach ($ret['data'][$id]['options'] as $oid => $o) {
if ($o['active'] !== true) {
continue;
}
......@@ -221,8 +228,9 @@ class API
return $ret;
}
function MarkPayment($id, $amount, $transaction) {
$ad = $this::Request('GET', '/ads/'.$id);
function MarkPayment($id, $amount, $transaction)
{
$ad = $this::Request('GET', '/ads/' . $id);
if (empty($ad['data'])) {
return false;
}
......@@ -232,20 +240,20 @@ class API
$ad['invoiceValue']['total'] != $amount) {
return false;
}
if(empty($transaction)) {
if (empty($transaction)) {
return false;
}
if(!empty($ad['transaction'])) {
if (!empty($ad['transaction'])) {
return true;
}
$ad['transaction'] = $transaction;
$result = $this::Request('PUT', '/ads/'.$id, $ad);
$result = $this::Request('PUT', '/ads/' . $id, $ad);
if (empty($result['data'])) {
return false;
}
$ad = $this::Request('GET', '/ads/'.$id);
$ad = $this::Request('GET', '/ads/' . $id);
if (empty($ad['data']['transaction']) ||
$ad['data']['transaction'] != $transaction) {
return false;
......@@ -254,117 +262,70 @@ class API
return true;
}
function GetAd($id) {
return $this::Request('GET', '/ads/'.$id);
function GetAd($id)
{
return $this::Request('GET', '/ads/' . $id);
}
function CancelDraft($id) {
return $this::Request('POST', '/ads/'.$id.'/cancel', '');
function CancelDraft($id)
{
return $this::Request('POST', '/ads/' . $id . '/cancel', '');
}
function CreateDraft($data) {
function CreateDraft($data)
{
$data['source'] = 2;
$data['hasImage'] = false;
$data['kind'] = 1;
$data['type'] = 1;
if(is_string($data['contact'])){
if (is_string($data['contact'])) {
$data["contact"] = json_decode($data["contact"], true);
}
if(is_string($data['columns'])){
if (is_string($data['columns'])) {
$data["columns"] = json_decode($data["columns"], true);
}
if(isset($data["invoicePerAd"])){
if (isset($data["invoicePerAd"])) {
unset($data["invoicePerAd"]);
}
if(isset($data["selectedKind"])){
if (isset($data["selectedKind"])) {
unset($data["selectedKind"]);
}
return $this::Request('POST', '/ads', $data);
}
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);
function UploadImage($id, $data)
{
$this::Request('POST', '/ads/' . $id . '/images/display/upload',
$data, false, true);
return $response;
return $this::Request('POST', '/ads/' . $id . '/images/print/upload',
$data, false, true);
}
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);
$nw = array('columns' => array());
foreach($ret['data']['columns'] as $column) {
array_push($nw['columns'], array(
'id' => $column['publicationID'],
'price' => $column['invoiceValue'],
));
function AuthenticateUser($params = [])
{
if (!empty($params)) {
$ret = $this::LoginUser($params);
return $ret;
}
$nw['words'] = $ret['data']['words'];
$nw['price'] = $ret['data']['invoiceValue'];
$ret['data'] = $nw;
return $ret;
return [];
}
function UploadImage($id, $data) {
$this::Request('POST', '/ads/'.$id.'/images/display/upload',
$data, false, true);
return $this::Request('POST', '/ads/'.$id.'/images/print/upload',
$data, false, true);
function LoginUser($credentials)
{
return $this::RequestClient('POST', '/users/login',
['email' => $credentials['email'], 'password' => $credentials['password']], false, true);
}
function RequestClient($method, $path, $data = [],
$upload = false, $withHeaders = false, $cookie = '') {
$upload = false, $withHeaders = false, $cookie = '')
{
$curl = curl_init();
......@@ -379,9 +340,11 @@ class API
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_NONE,
);
if($withHeaders){
$opts[CURLOPT_HEADER] = 1;}
{}
if ($withHeaders) {
$opts[CURLOPT_HEADER] = 1;
}
{
}
if (empty($this->certificate)) {
$opts[CURLOPT_SSL_VERIFYPEER] = false;
......@@ -392,8 +355,8 @@ class API
}
if(strtoupper($method) !== 'GET') {
if($upload) {
if (strtoupper($method) !== 'GET') {
if ($upload) {
$opts[CURLOPT_POSTFIELDS] = $data;
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: multipart/form-data',
......@@ -408,7 +371,7 @@ class API
}
}
if(strlen($cookie)){
if (strlen($cookie)) {
$opts[CURLOPT_HTTPHEADER][] = "Cookie: rl=$cookie;";
}
......@@ -419,11 +382,11 @@ class API
$err = curl_error($curl);
$info = curl_getinfo($curl);
if($path == '/users/login'){
if ($path == '/users/login') {
preg_match('/Set-Cookie:\s*rl=([^;]+);/i', $response, $m);
if(count($m)){
if (count($m)) {
$cookies = $m[1];
if(strlen($cookies)){
if (strlen($cookies)) {
$newR = explode("\n\r\n", $response);
$user = json_decode($newR[1]);
......@@ -438,9 +401,9 @@ class API
$result = $this->db->fetchOne($select->getStatement(), $select->getBindValues());
if(!$result){
if (!$result) {
$insert = $this->query_factory->newInsert();
$insert->into('cookies')->cols([
$insert->into('cookies')->cols([
'cookie' => $cookies,
'user_id' => $user->id
]);
......@@ -464,7 +427,7 @@ class API
$exists = $this->session->exists('user_id');
if(!$exists){
if (!$exists) {
$this->session->set('user_id', $user->id);
}
......@@ -476,50 +439,14 @@ class API
curl_close($curl);
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());
return ['info' => $info, 'data' => json_decode($response, true)];
}
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 AddQuote($params, $file) {
if(count($params) && !empty($file) && $this->session->exists('user_id')){
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);
}
......@@ -527,7 +454,7 @@ class API
$insert->into("quotes")
->cols([
"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,
"price" => NULL,
"details" => json_encode($params),
......@@ -540,7 +467,7 @@ class API
$contact = json_decode($params["contact"], true);
// 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;
......@@ -549,22 +476,59 @@ class API
return false;
}
function GetUserQuotes($params = []){
if($this->session->exists("user_id")){
function moveUploadedFile($directory, UploadedFile $uploadedFile)
{
$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->from('quotes')->cols(["*"])->where('user_id = :user_id')->orderBy(['status', 'created_at desc'])
->bindValues([
"user_id" => $this->session->user_id
]);
$limit = isset($params['limit']) ? $params['limit']:'';
$offset = isset($params['offset']) ? $params['offset']:0;
$limit = isset($params['limit']) ? $params['limit'] : '';
$offset = isset($params['offset']) ? $params['offset'] : 0;
if(!empty($offset) && is_numeric($offset)){
if (!empty($offset) && is_numeric($offset)) {
$select->offset($offset);
}
if(!empty($limit) && is_numeric($limit)){
if (!empty($limit) && is_numeric($limit)) {
$select->limit($limit);
}
......@@ -583,21 +547,22 @@ class API
return false;
}
function GetAdminQuotes($params = []){
if($this->session->exists('user_id')){
function GetAdminQuotes($params = [])
{
if ($this->session->exists('user_id')) {
$isAdmin = $this::CheckAdmin();
if($isAdmin){
if ($isAdmin) {
$select = $this->query_factory->newSelect();
$select->from('quotes')->cols(["*"])->orderBy(['status', 'created_at desc']);
$limit = isset($params['limit']) ? $params['limit']:'';
$offset = isset($params['offset']) ? $params['offset']:0;
$limit = isset($params['limit']) ? $params['limit'] : '';
$offset = isset($params['offset']) ? $params['offset'] : 0;
if(!empty($offset) && is_numeric($offset)){
if (!empty($offset) && is_numeric($offset)) {
$select->offset($offset);
}
if(!empty($limit) && is_numeric($limit)){
if (!empty($limit) && is_numeric($limit)) {
$select->limit($limit);
}
......@@ -615,17 +580,22 @@ class API
}
}
function moveUploadedFile($directory, UploadedFile $uploadedFile)
function CheckAdmin()
{
$basename = bin2hex(openssl_random_pseudo_bytes(8));
$filename = sprintf('%s', $basename . '_' . $uploadedFile->getClientFilename());
$uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
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 $filename;
return false;
}
return false;
}
function GetQuote($quoteId){
if($quoteId && $this->session->exists('user_id')){
function GetQuote($quoteId)
{
if ($quoteId && $this->session->exists('user_id')) {
$params = [
"id" => (int)$quoteId,
......@@ -636,16 +606,16 @@ class API
$select->from('quotes')->cols(["*"])
->where('id = :id');
if(!$this::CheckAdmin()){
if (!$this::CheckAdmin()) {
$params["user_id"] = $this->session->user_id;
$select->where('user_id = :user_id');
}
$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;
}
......@@ -655,24 +625,25 @@ class API
return false;
}
function UpdateQuote($params = []){
if(!empty($params) && isset($params['id'])){
function UpdateQuote($params = [])
{
if (!empty($params) && isset($params['id'])) {
$isAdmin = $this::CheckAdmin();
$cols = ["status"];
if(isset($params["price"]) || !empty($params['adText'])){
if($isAdmin){
if (isset($params["price"]) || !empty($params['adText'])) {
if ($isAdmin) {
$cols[] = "price";
}else{
} else {
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;
}
if(isset($params["fromUser"])){
if (isset($params["fromUser"])) {
unset($params["fromUser"]);
}
......@@ -684,21 +655,21 @@ class API
"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);
if(!empty($params["adText"])){
if (!empty($params["adText"])) {
$quoteDetails["text"] = $params["adText"];
$quoteDetails["columns"] = json_decode($quoteDetails["columns"]);
$quoteDetails["contact"] = json_decode($quoteDetails["contact"], true);
$price = $this::GetPrice($quoteDetails);
$params['price'] = $price['data']['price']['total'];
$params['price'] = $price['data']['price']['total'];
unset($params['adText']);
$params['details'] = json_encode($quoteDetails);
$cols[] = 'details';
}
if($params["status"] == 3){
if ($params["status"] == 3) {
// $quoteDetails["group_id"] = 8;
$data = $this::ClientCreateDraft($quoteDetails);
......@@ -712,7 +683,7 @@ class API
$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;
}
......@@ -720,14 +691,14 @@ class API
$update->table('quotes')
->cols($cols);
if(!$isAdmin && empty($params["payment"])){
if (!$isAdmin && empty($params["payment"])) {
$update->where('user_id = :user_id');
$params["user_id"] = $this->session->user_id;
}
$isPayment = !empty($params["payment"]);
if($isPayment){
if ($isPayment) {
unset($params["payment"]);
}
......@@ -738,20 +709,20 @@ class API
$stmt = $this->db->prepare($update->getStatement());
$stmt->execute($update->getBindValues());
if($params["status"] == 2 && $isAdmin){
$this::SendMail($this->admin["email"], $quoteDetails["contact"]["email"], "Cotatia calculata", "Cotatia a fost calculata la pretul de: " . $params["price"] );
if ($params["status"] == 2 && $isAdmin) {
$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){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Acceptata", "Cotatia a fost acceptata");
if (($params["status"] == 3 || $params["status"] == 6) && !$isAdmin) {
$this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Acceptata", "Cotatia a fost acceptata");
}
if($params["status"] == 7 && !$isAdmin){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Refuzata", "Cotatia a fost refuzata");
if ($params["status"] == 7 && !$isAdmin) {
$this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Refuzata", "Cotatia a fost refuzata");
}
if($params["status"] == 4 && $isPayment){
$this::SendMail( $quoteDetails["contact"]["email"], $this->admin["email"],"Cotatia Platita ", "Cotatia a fost platita");
if ($params["status"] == 4 && $isPayment) {
$this::SendMail($quoteDetails["contact"]["email"], $this->admin["email"], "Cotatia Platita ", "Cotatia a fost platita");
}
return true;
......@@ -760,9 +731,105 @@ class API
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->from('quotes')->where('user_id = :user_id')
->where('id = :id')
......@@ -781,20 +848,8 @@ class API
return false;
}
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(){
function QuoteStatuses()
{
return [
1 => 'Cotatie noua',
2 => 'Calculata',
......@@ -807,38 +862,14 @@ class API
];
}
function AdTypes(){
function AdTypes()
{
return [
1 => 'Simplu',
2 => 'LTD',
3 => 'UNEJ'
1 => 'Simplu',
2 => 'LTD',
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
$app->get('/', function ($request, $response, $args) {
if($this->session->exists('user_id')){
if ($this->session->exists('user_id')) {
$args['loggedIn'] = true;
$api = new Api($this);
$args['admin'] = $api->CheckAdmin();
$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');
$app->get('/contul-meu', function($request, $response, $args){
if($this->session->exists('user_id')){
$app->get('/contul-meu', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$params = $request->getQueryParams();
$quotes = $api->GetUserQuotes($params);
......@@ -28,11 +30,11 @@ $app->get('/contul-meu', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile');
$app->get('/admin/cotatii', function($request, $response, $args){
if($this->session->exists('user_id')){
$app->get('/admin/cotatii', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$isAdmin = $api->CheckAdmin();
if($isAdmin){
if ($isAdmin) {
$params = $request->getQueryParams();
$quotes = $api->GetAdminQuotes($params);
$args["quotes"] = $quotes["quotes"];
......@@ -51,8 +53,8 @@ $app->get('/admin/cotatii', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303);
})->setName('profile');
$app->post('/quote/{id}/update', function($request, $response, $args){
if($this->session->exists('user_id')){
$app->post('/quote/{id}/update', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$params = $request->getParsedBody();
$fields = [
......@@ -60,15 +62,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
"status" => 2
];
if(!empty($params["price"])){
if (!empty($params["price"])) {
$fields["price"] = $params["price"];
}
if(!empty($params["status"])){
if (!empty($params["status"])) {
$fields["status"] = $params["status"];
}
if(!empty($params["adText"])){
if (!empty($params["adText"])) {
$fields["adText"] = $params["adText"];
}
......@@ -76,7 +78,7 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
$updated = $api->UpdateQuote($fields);
if($updated){
if ($updated) {
return $response->withJson(['success' => 'Updated']);
}
......@@ -86,15 +88,15 @@ $app->post('/quote/{id}/update', function($request, $response, $args){
return $response->withJson(['error' => 'Unauthenticated']);
});
$app->get('/uploads/{id}', function($request, $response, $args) {
if($this->session->exists('user_id')){
$app->get('/uploads/{id}', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$quote = $api->GetQuote($request->getAttribute('id'));
if($quote){
if ($quote) {
$file = __DIR__ . '/../uploads/' . $quote['file'];
$fh = fopen($file, 'rb');
if($fh){
if ($fh) {
$stream = new \Slim\Http\Stream($fh); // create a stream instance for the response body
return $response->withHeader('Content-Type', 'application/force-download')
......@@ -118,13 +120,13 @@ $app->get('/uploads/{id}', function($request, $response, $args) {
return $response->withRedirect($this->router->pathFor('home'), 303);
});
$app->delete('/quotation/{id}', function($request, $response, $args) {
if($this->session->exists('user_id')){
$app->delete('/quotation/{id}', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$quoteDeleted = $api->DeleteQuote($request->getAttribute('id'));
if($quoteDeleted){
if ($quoteDeleted) {
return $response->withJson(['success' => true]);
}
......@@ -134,8 +136,8 @@ $app->delete('/quotation/{id}', function($request, $response, $args) {
return $response->withJson(['error' => 'not logged in']);
});
$app->post('/quotation', function($request, $response, $args){
if($this->session->exists('user_id')){
$app->post('/quotation', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$params = $request->getParsedBody();
$files = $request->getUploadedFiles();
......@@ -154,8 +156,8 @@ $app->post('/quotation', function($request, $response, $args){
return $response->withJson(['error' => 'not logged in']);
});
$app->get('/logout', function($request, $response, $args){
if($this->session->exists("user_id")){
$app->get('/logout', function ($request, $response, $args) {
if ($this->session->exists("user_id")) {
$this->session->delete('user_id');
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
}
......@@ -163,8 +165,8 @@ $app->get('/logout', function($request, $response, $args){
return $response->withRedirect($this->router->pathFor('home'), 303);
});
$app->get('/users/profile', function($request, $response, $args) {
if ($this->session->exists('user_id')){
$app->get('/users/profile', function ($request, $response, $args) {
if ($this->session->exists('user_id')) {
$api = new Api($this);
$profile = $api->FetchUserProfile();
......@@ -174,8 +176,8 @@ $app->get('/users/profile', function($request, $response, $args) {
return $response->withJson(['error' => 'not logged in']);
});
$app->get('/autentificare', function($request, $response, $args){
if(!$this->session->exists('user_id')){
$app->get('/autentificare', function ($request, $response, $args) {
if (!$this->session->exists('user_id')) {
$args["errors"] = $this->flash->getMessages();
return $this->renderer->render($response, 'autentificare.phtml', $args);
}
......@@ -184,21 +186,21 @@ $app->get('/autentificare', function($request, $response, $args){
})->setName('autentificare');
$app->post('/autentificare', function($request, $response, $args){
$app->post('/autentificare', function ($request, $response, $args) {
$api = new API($this);
if(empty($args)){
if (empty($args)) {
$args = array();
}
$params = $request->getParsedBody();
if(!empty($params)){
if (!empty($params)) {
$res = $api->AuthenticateUser($params);
if(!empty($res)){
if($res['info']['http_code'] !== 200){
if (!empty($res)) {
if ($res['info']['http_code'] !== 200) {
$this->flash->addMessage("error", "Credentiale invalide");
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
return $response->withRedirect($this->router->pathFor('autentificare'), 303);
} else {
return $response->withRedirect($this->router->pathFor('home'), 303);
}
......@@ -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/Card.php';
require_once 'Mobilpay/Payment/Request/Notify.php';
require_once 'Mobilpay/Payment/Invoice.php';
require_once 'Mobilpay/Payment/Address.php';
$errorCode = 0;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
$errorMessage = '';
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0)
{
if(isset($_POST['env_key']) && isset($_POST['data']))
{
$errorCode = 0;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
$errorMessage = '';
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) {
if (isset($_POST['env_key']) && isset($_POST['data'])) {
#calea catre cheia privata
#cheia privata este generata de mobilpay, accesibil in Admin -> Conturi de comerciant -> Detalii -> Setari securitate
$params = $request->getParsedBody();
......@@ -227,8 +227,7 @@ $app->post('/confirm-payment', function($request, $response, $args){
$paymentSettings = $settings['settings']['payments'];
$privateKeyFilePath = $paymentSettings["privateCertificate"];
try
{
try {
$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
// print_r($objPmReq);
......@@ -236,7 +235,7 @@ $app->post('/confirm-payment', function($request, $response, $args){
$api = new API($this);
$id = $objPmReq->params["ad"];
if(!empty($objPmReq->params["quote"])){
if (!empty($objPmReq->params["quote"])) {
$quoteId = $objPmReq->params["quote"];
}
$amount = $objPmReq->invoice->amount;
......@@ -244,67 +243,65 @@ $app->post('/confirm-payment', function($request, $response, $args){
// action = status only if the associated error code is zero
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;
#pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId;
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
//update DB, SET status = "confirmed/captured"
$api->MarkPayment($id, $amount, $transaction);
if(isset($quoteId)){
$api->UpdateQuote([
"status" => 4,
"id" => $quoteId,
"payment" => true
]);
}
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "open/preauthorized"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'canceled':
#cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere.
//update DB, SET status = "canceled"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
$api->CancelDraft($id);
if(isset($quoteId)){
$api->UpdateQuote([
"status" => 8,
"id" => $quoteId,
"payment" => true
]);
}
break;
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.
//update DB, SET status = "refunded"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
default:
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
$errorMessage = 'mobilpay_refference_action paramaters is invalid';
break;
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
//update DB, SET status = "confirmed/captured"
$api->MarkPayment($id, $amount, $transaction);
if (isset($quoteId)) {
$api->UpdateQuote([
"status" => 4,
"id" => $quoteId,
"payment" => true
]);
}
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "pending"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
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.
//update DB, SET status = "open/preauthorized"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
case 'canceled':
#cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere.
//update DB, SET status = "canceled"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
$api->CancelDraft($id);
if (isset($quoteId)) {
$api->UpdateQuote([
"status" => 8,
"id" => $quoteId,
"payment" => true
]);
}
break;
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.
//update DB, SET status = "refunded"
$errorMessage = $objPmReq->objPmNotify->errorMessage;
break;
default:
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
$errorMessage = 'mobilpay_refference_action paramaters is invalid';
break;
}
}
else {
} else {
//update DB, SET status = "rejected"
$api->CancelDraft($id);
if(isset($quoteId)){
if (isset($quoteId)) {
$api->UpdateQuote([
"status" => 5,
"id" => $quoteId,
......@@ -313,35 +310,26 @@ $app->post('/confirm-payment', function($request, $response, $args){
}
$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)
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY;
$errorCode = $e->getCode();
$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 {
$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
{
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
$errorMessage = 'invalid request metod for payment confirmation';
} else {
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
$errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
$errorMessage = 'invalid request metod for payment confirmation';
}
header('Content-type: application/xml');
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
if($errorCode == 0)
{
if ($errorCode == 0) {
echo "<crc>{$errorMessage}</crc>";
}
else
{
} else {
echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>";
}
});
......@@ -420,13 +408,13 @@ $app->post('/payment-quote', function ($request, $response, $args) {
);
if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name'];
$billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban'];
} else {
$billing['billCNP'] = $contact['nin'];
$billing['billCNP'] = $contact['nin'];
}
$data = array(
......@@ -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'];
}
......@@ -492,13 +480,13 @@ $app->post('/payment', function ($request, $response, $args) {
);
if ($contact['type'] == 2) {
$billing['billCompany'] = $contact['name'];
$billing['billCompany'] = $contact['name'];
$billing['billFiscalCode'] = $contact['vat'];
$billing['billRegNumber'] = $contact['crn'];
$billing['billBank'] = $contact['bank'];
$billing['billBankAccount'] = $contact['iban'];
} else {
$billing['billCNP'] = $contact['nin'];
$billing['billCNP'] = $contact['nin'];
}
$data = array(
......@@ -539,7 +527,7 @@ $app->post('/summary', function ($request, $response, $args) {
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();
$data = $api->CreateDraft($request->getParsedBody());
......@@ -551,7 +539,7 @@ $app->post('/createDraft', function($request, $response, $args) {
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);
if (empty($id)) {
throw new Exception('Ad id expected');
......@@ -563,7 +551,7 @@ $app->post('/uploadImage', function($request, $response, $args) {
}
$file = $files['file'];
$path = '/tmp/'.uniqid('', true).'_'.$file->getClientFilename();
$path = '/tmp/' . uniqid('', true) . '_' . $file->getClientFilename();
$file->moveTo($path);
$curlFile = curl_file_create($path,
......
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<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/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<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">
<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/styleadd.css" type="text/css" rel="stylesheet">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
</head>
<body>
<div class="navbar-fixed">
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="row">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
</div>
<div class="container">
<div class="row">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
alt="Anunturi mica publicitate"></a>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
<div class="section loginForm">
<div class="section loginForm">
<div class="container">
<div class="row">
<div class="col s4 offset-s4">
<?php
if (!empty($errors)) {
?>
<strong class="error">Credentiale incorecte</strong>
<?php
}
?>
<div class="card">
<div class="card-content login-card-content">
<div class="row">
<form action="/autentificare" method="POST">
<div class="input-field col s12">
<input placeholder="Email" id="email" name="email" type="email" />
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input placeholder="Parola" name="password" id="password" type="password" />
<label for="password">Parola</label>
</div>
<div class="col s12">
<button class="btn waves-effect waves-light" type="submit" name="action">Autentificare
<i class="material-icons right">send</i>
</button>
</div>
</form>
</div>
<div class="row">
<div class="col s4 offset-s4">
<?php
if (!empty($errors)) {
?>
<strong class="error">Credentiale incorecte</strong>
<?php
}
?>
<div class="card">
<div class="card-content login-card-content">
<div class="row">
<form action="/autentificare" method="POST">
<div class="input-field col s12">
<input placeholder="Email" id="email" name="email" type="email"/>
<label for="email">Email</label>
</div>
<div class="input-field col s12">
<input placeholder="Parola" name="password" id="password" type="password"/>
<label for="password">Parola</label>
</div>
<div class="col s12">
<button class="btn waves-effect waves-light" type="submit" name="action">
Autentificare
<i class="material-icons right">send</i>
</button>
</div>
</form>
</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="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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 class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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>
<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 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>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<title>Manager Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="/css/materialize.css" type="text/css" 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/styleadd.css" type="text/css" rel="stylesheet">
<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">
<title>Manager Cotatii - Anunturi mica publicitate - Anuțuri presa scrisă - Rofusion Advertising Srl</title>
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="/css/materialize.css" type="text/css" 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/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="../img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large btnmo">Contul meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo pink darken-4">Manager Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="../img/logo.svg"
alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if (!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if (!$admin) { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large btnmo">Contul meu</a>
</li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo pink darken-4">Manager
Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
<div class="container cotatii">
<h1>Manager Cotatii</h1>
<div class="container cotatii">
<h1>Manager Cotatii</h1>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Id anunt</th>
<th>Nume client</th>
<th>Companie</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Publicatii</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Id anunt</th>
<th>Nume client</th>
<th>Companie</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Publicatii</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<tbody>
<?php
foreach($quotes as $quote){
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3';
$quoteContact = $quoteDetails["contact"];
if(is_string($quoteDetails["contact"])){
$quoteContact = json_decode($quoteDetails["contact"], true);
}
$adDetails = $quoteDetails["columns"];
if(is_string($quoteDetails["columns"])){
$adDetails = json_decode($quoteDetails["columns"], true);
}
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php echo !empty($quoteDetails['ad_id']) ? $quoteDetails['ad_id']:'-'?>
</td>
<td><?= $quoteContact["firstName"] . " " . $quoteContact["lastName"] ?></td>
<td><?= $quoteContact["name"] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
foreach($adDetails as $column){
?>
<tbody>
<?php
foreach ($quotes as $quote) {
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red' : 'cyan darken-3';
$quoteContact = $quoteDetails["contact"];
if (is_string($quoteDetails["contact"])) {
$quoteContact = json_decode($quoteDetails["contact"], true);
}
$adDetails = $quoteDetails["columns"];
if (is_string($quoteDetails["columns"])) {
$adDetails = json_decode($quoteDetails["columns"], true);
}
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php echo !empty($quoteDetails['ad_id']) ? $quoteDetails['ad_id'] : '-' ?>
</td>
<td><?= $quoteContact["firstName"] . " " . $quoteContact["lastName"] ?></td>
<td><?= $quoteContact["name"] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s', $quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
foreach ($adDetails as $column) {
?>
<?php if(!empty($column["publicationName"])){ ?>
<p>
Publicatie: <?= $column["publicationName"] ?> <br>
Categorie:
<?= $column["columnName"] ?> <br>
</p>
<?php if (!empty($column["publicationName"])) { ?>
<p>
Publicatie: <?= $column["publicationName"] ?> <br>
Categorie:
<?= $column["columnName"] ?> <br>
</p>
<?php } ?>
<?php } ?>
</td>
<td>
<?php
if(!empty($quote['file'])){
?>
<!-- <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> -->
<a href="<?php echo '/uploads/' . $quote['id']; ?>">Descarca</a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?php
if(empty($quote['price'])){
?>
<!-- <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 } ?>
</td>
<td>
<?php
if (!empty($quote['file'])) {
?>
<!-- <a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a> -->
<a href="<?php echo '/uploads/' . $quote['id']; ?>">Descarca</a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?php
if (empty($quote['price'])) {
?>
<!-- <input min="0" step="0.01" placeholder="Pret" name="price" type="number" id="price-quote-<?php echo $quote['id']; ?>" value=""/> -->
-
<?php
}
} else {
?>
</td>
<?= $quote['price'] ?> lei
<?php
}
?>
</td>
<td>
<td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?>
</span>
</td>
<td>
<?php
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>
</td>
<td>
<?php
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>
<div id="modal-send-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<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 class="input-field">
<textarea id="textarea1"
......@@ -155,79 +159,91 @@
</div>
</div>
<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>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
<?php
$limit = 10;
</tr>
<?php } ?>
</tbody>
</table>
<?php
$limit = 10;
$numberOfPages = ($total/$limit) > 1 ? $total/$limit:1;
$numberOfPages = ($total / $limit) > 1 ? $total / $limit : 1;
if(!empty($_GET['offset'])){
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1;
}else{
$currentPage = 1;
$currentOffset = 0;
}
if (!empty($_GET['offset'])) {
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset'] / $limit) + 1;
} else {
$currentPage = 1;
$currentOffset = 0;
}
?>
<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>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?>
?>
<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>
<?php for ($i = 1; $i <= $numberOfPages; $i++) { ?>
<?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 } ?>
<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>
</ul>
</div>
<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>
</ul>
</div>
<footer class="page-footer default_color scrollspy" >
<footer class="page-footer default_color scrollspy">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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 class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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>
<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 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>
</footer>
<div id="reguli" class="modal">
<div id="reguli" class="modal">
<div class="modal-content">
<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>
<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>
</div>
<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>
<script src="/js/jquery-3.1.0.min.js"></script>
<script src="/js/materialize.js"></script>
<script src="/js/quotes.js"></script>
</div>
<script src="/js/jquery-3.1.0.min.js"></script>
<script src="/js/materialize.js"></script>
<script src="/js/quotes.js"></script>
</body>
......
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<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="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
<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">
<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="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link href="css/kalendae.css" type="text/css" rel="stylesheet">
<link href="css/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo">Manager Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if (!$loggedIn) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if (!$admin) { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul
meu</a></li>
<?php } else { ?>
<li><a href="/admin/cotatii" class="waves-effect waves-light btn-large btnmo">Manager
Cotatii</a></li>
<?php } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
<div class="container cotatii">
<h1>Cotatii mele</h1>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<div class="container cotatii">
<h1>Cotatii mele</h1>
<table class="striped highlight responsive-table">
<thead>
<tr>
<th>ID</th>
<th>Data</th>
<th>Tip anunt</th>
<th>Fisier</th>
<th>Pret</th>
<th>Status</th>
<th>Actiuni</th>
</tr>
</thead>
<tbody>
<?php
<tbody>
<?php
foreach($quotes as $quote){
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red':'cyan darken-3';
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s',$quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
if(!empty($quote['file'])){
?>
<a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?= empty($quote['price']) ? '':$quote['price'] . ' lei' ?>
</td>
<td>
foreach ($quotes as $quote) {
$quoteDetails = json_decode($quote['details'], true);
$statusClass = $quote["status"] == 7 ? 'red' : 'cyan darken-3';
?>
<tr>
<td><?= $quote['id'] ?></td>
<td>
<?php
$date = date_create_from_format('Y-m-d H:i:s', $quote['created_at']);
$fDate = date_format($date, "H:i d-m-Y");
?>
<?= $fDate; ?></td>
<td>
<?php echo $adTypes[$quoteDetails['selectedKind']] ?>
</td>
<td>
<?php
if (!empty($quote['file'])) {
?>
<a href="<?php echo '/uploads/' . $quote['id']; ?>"><?= $quote['file'] ?></a>
<?php } ?>
</td>
<td class="right-align blue-grey darken-1 white-text">
<?= empty($quote['price']) ? '' : $quote['price'] . ' lei' ?>
</td>
<td>
<span class="new badge <?php echo $statusClass ?>" data-badge-caption="">
<?= $statuses[$quote['status']] ?>
</span>
</td>
<td class="right-align">
<?php
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>
</td>
<td class="right-align">
<?php
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 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 class="modal-content">
<h4>Accepta cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<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 id="modal-decline-<?php echo $quote['id'] ?>" class="modal">
......@@ -107,98 +113,112 @@
<h4>Refuzati cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<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>
<?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>
<form action="/payment-quote" method="POST">
<input name="ad_id" type="hidden" value="<?php echo $quoteDetails['ad_id']; ?>"/>
<input name="quote_id" type="hidden" value="<?php echo $quote['id']; ?>"/>
</form>
<?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>
<?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>
<div id="modal-delete-<?php echo $quote['id'] ?>" class="modal">
<div class="modal-content">
<h4>Sterge cotatia cu id: <?php echo $quote['id'] ?></h4>
</div>
<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>
<?php } ?>
</td>
</tr>
<?php } ?>
</tbody>
</table>
</tr>
<?php } ?>
</tbody>
</table>
<?php
$limit = !empty($_GET['limit']) ? $_GET['limit']:10;
<?php
$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'])){
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset']/$limit) + 1;
}else{
$currentPage = 1;
$currentOffset = 0;
}
if (!empty($_GET['offset'])) {
$currentOffset = $_GET['offset'];
$currentPage = ($_GET['offset'] / $limit) + 1;
} else {
$currentPage = 1;
$currentOffset = 0;
}
?>
<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>
<?php for($i = 1; $i <= $numberOfPages; $i++){ ?>
?>
<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>
<?php for ($i = 1; $i <= $numberOfPages; $i++) { ?>
<?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 } ?>
<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>
</ul>
</div>
<footer class="page-footer default_color scrollspy" >
<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>
</ul>
</div>
<footer class="page-footer default_color scrollspy">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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 class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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>
<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 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>
</footer>
<div id="reguli" class="modal">
<div id="reguli" class="modal">
<div class="modal-content">
<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>
<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>
</div>
<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>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/quotes.js"></script>
</div>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/quotes.js"></script>
</body>
......
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<link href="css/materialize.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">
<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">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<link href="css/materialize.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">
</head>
<body>
<div class="navbar-fixed">
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="row">
<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>
<div class="container">
<div class="row">
<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>
</div>
</div>
</div>
</div>
</div>
</nav>
</div>
</div>
<div class="section">
<div class="section">
<div class="container">
<br><br>
<?php if ($ok): ?>
<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>
<br><br><hr><br>
<br><br>
<hr><br>
<a href="/" title="" class="btn">Adaugă un anunț nou</a>
<br><br>
<?php else: ?>
<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>
<br><br><hr><br>
<br><br>
<hr><br>
<a href="/" title="" class="btn">Adaugă anunț</a>
<br><br>
<?php endif; ?>
</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="row">
<div class="col l6 s12">
<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>
</div>
<div class="col l3 s12">
<h5 class="white-text">Info</h5>
<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 class="row">
<div class="col l6 s12">
<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>
</div>
<div class="col l3 s12">
<h5 class="white-text">Info</h5>
<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 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="footer-copyright z-depth-1">
<div class="container">
<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>
</div>
<div class="container">
<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>
</div>
</div>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</footer>
<script src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<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="description" 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="language" content="RO"/>
<meta name="robots" content="index,follow" />
<meta name="abstract" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="topic" content="Ads">
<meta name="summary" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="Classification" content="Business">
<meta name="author" content="Rofusion Advertising Srl, anuturi@rofusion.ro">
<meta name="designer" content="Activemall SRL">
<meta name="copyright" content="Rofusion Advertising Srl">
<meta name="reply-to" content="office@rofusion.ro">
<meta name="owner" content="Rofusion Advertising Srl">
<meta name="url" content="https://www.rofusion.ro">
<meta name="identifier-URL" content="https://www.rofusion.ro">
<meta name="directory" content="submission">
<meta name="category" content="Ads">
<meta name="coverage" content="Worldwide">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="revisit-after" content="7 days">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="css/materialize.css" type="text/css" 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/styleadd.css" type="text/css" rel="stylesheet">
<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">
<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="description" 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="language" content="RO"/>
<meta name="robots" content="index,follow"/>
<meta name="abstract" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="topic" content="Ads">
<meta name="summary" content="anuțuri presa scrisă, anunturi mica publicitate">
<meta name="Classification" content="Business">
<meta name="author" content="Rofusion Advertising Srl, anuturi@rofusion.ro">
<meta name="designer" content="Activemall SRL">
<meta name="copyright" content="Rofusion Advertising Srl">
<meta name="reply-to" content="office@rofusion.ro">
<meta name="owner" content="Rofusion Advertising Srl">
<meta name="url" content="https://www.rofusion.ro">
<meta name="identifier-URL" content="https://www.rofusion.ro">
<meta name="directory" content="submission">
<meta name="category" content="Ads">
<meta name="coverage" content="Worldwide">
<meta name="distribution" content="Global">
<meta name="rating" content="General">
<meta name="revisit-after" content="7 days">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache">
<link href="css/materialize.css" type="text/css" 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/styleadd.css" type="text/css" rel="stylesheet">
</head>
<body id="top" class="scrollspy">
<div id="loader-wrapper">
<div id="loader-wrapper">
<div id="loader"></div>
<div class="loader-section section-left"></div>
<div class="loader-section section-right"></div>
</div>
<div class="navbar-fixed">
</div>
<div class="navbar-fixed">
<nav role="navigation">
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg" alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if(!isset($loggedIn)) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if(!$admin){ ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul 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>
<div class="container">
<div class="nav-wrapper">
<a href="/" class="brand-logo" title="Anunturi mica publicitate"><img src="img/logo.svg"
alt="Anunturi mica publicitate"></a>
<ul id="nav-mobile" class="right">
<li>
<?php if (!isset($loggedIn)) { ?>
<li><a href="/autentificare" class="waves-effect waves-light btn-large btnmo">Autentificare</a></li>
<?php } else { ?>
<?php if (!$admin) { ?>
<li><a href="/contul-meu" class="waves-effect waves-light btn-large pink darken-4 btnmo">Contul
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 } ?>
<li><a href="/logout" class="waves-effect waves-light btn-large btnmo">Logout</a></li>
<?php } ?>
</li>
</ul>
</li>
</ul>
</div>
</div>
</div>
</nav>
</div>
</div>
<div class="slider">
<div class="slider">
<ul class="slides">
<li>
<img src="img/slide/slide1.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
<li>
<img src="img/slide/slide2.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
<li>
<img src="img/slide/slide1.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
<li>
<img src="img/slide/slide2.jpg">
<div class="caption left-align container">
<h1>Anunțuri Mică Publicitate</h1>
<h2>în Presa Scrisă</h2>
</div>
</li>
</ul>
</div>
<?php if(isset($loggedIn) && $loggedIn) { ?>
<input id="loggedInUser" type="text" value="true" style="display:none" />
<?php } ?>
<div class="section no-pad" data-bind="visible: !finalStep()">
</div>
<?php if (isset($loggedIn) && $loggedIn) { ?>
<input id="loggedInUser" type="text" value="true" style="display:none"/>
<?php } ?>
<div class="section no-pad" data-bind="visible: !finalStep()">
<div class="container">
<div class="row">
<div class="col s12 m12 l9">
<ul class="collapsible" data-collapsible="accordion">
<li data-bind="visible: 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>
<div class="collapsible-body">
<div class="row">
<div class="col s12 m12 l9">
<ul class="collapsible" data-collapsible="accordion">
<li data-bind="visible: 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>
<div class="collapsible-body">
<div class="row">
<div class="pubs" data-bind="template: {foreach:publications}, css: {disabled: selectedKind() == 3 }">
<div class="col s12 m3 l25">
<div class="card">
<div class="card-image" data-bind="style: { backgroundImage: 'url(\'' + image() + '\')'}"></div>
<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 class="pubs"
data-bind="template: {foreach:publications}, css: {disabled: selectedKind() == 3 }">
<div class="col s12 m3 l25">
<div class="card">
<div class="card-image"
data-bind="style: { backgroundImage: 'url(\'' + image() + '\')'}"></div>
<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 class="row">
<div class="col s12">
<button class="btn waves-effect waves-light right btn-next" onclick="gotostep('list_publicatii');">Pasul următor</button>
</div>
<div class="col s12">
<button class="btn waves-effect waves-light right btn-next"
onclick="gotostep('list_publicatii');">Pasul următor
</button>
</div>
</div>
</div>
</div>
</li>
<li>
<div class="collapsible-header"
id="list_publicatii"
data-bind="css: {active: publications().length ==1 }"
>
<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>
<div class="collapsible-body" id="detalii_anunt">
<div class="row">
<div class="col s12 m12 l12">
<ul class="tabs" data-bind="if: isLoggedIn">
<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>
<li class="tab col"><a href="#cotatie" data-bind="click: changeAdType.bind($data, 2)">Cere o Cotatie</a></li>
</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="collapsible-header"
id="list_publicatii"
data-bind="css: {active: publications().length ==1 }"
>
<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>
<div class="collapsible-body" id="detalii_anunt">
<div class="row">
<div class="col s12 m12 l12">
<div id="cotatie">
<div class="row">
<div class="input-field input-field col s12 mb20 select-ad-type">
<select data-bind="options: kinds,
<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="input-field input-field col s12 mb20 select-ad-type">
<select data-bind="options: kinds,
optionsText: 'name',
optionsValue: 'id',
value: selectedKind" class="kind-select">
</select>
<label for="" class="active select-label">Tip anunt</label>
</div>
<div class="file-field input-field col s12 m10 l11">
<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">
</select>
<label for="" class="active select-label">Tip anunt</label>
</div>
<div class="file-field input-field col s12 m10 l11">
<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" 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>
</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>
<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>
<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 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>
<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>
</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 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>
</li>
<li>
<div class="collapsible-header" id="date_personale">
<i class="material-icons">person_pin</i>
<span class="step" data-bind="text: publications().length > 1 ? 'Pasul 3':'Pasul 2'">Pasul 3</span>Completează datele personale</div>
<div class="collapsible-body">
<div class="row">
<form id="date_persoana">
</ul>
<div class="row">
<form id="date_persoana">
<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">
<blockquote>
<h5>Persoană Contact</h5>
<b>Pentru Persoanele Fizice și Juridice</b>
</blockquote>
<blockquote>
<h5>Companie / Instituție (opțional)</h5>
<b>Numai pentru Persoanele 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>
<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="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>
<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="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>
<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="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>
<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="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>
<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="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>
<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>
<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>
</form>
</div>
</div>
</li>
</ul>
</form>
</div>
</div>
<div class="col s12 m12 l3" id="right-column">
<div class="block-pin" id="total">
<div class="card image-preview-container" data-bind="if: adType() == 1">
<div class="card-content white-text">
<span class="card-title">Imagine Anunț</span>
</div>
<div class="card-image image-preview-summary"></div>
</div>
<ul class="collection with-header z-depth-1">
<li class="collection-header">
<b>Sumar Anunț</b>
</li>
<li class="no-publication-message">
Nu există nici o publicație selectată.
</li>
<div data-bind="foreach: publications">
<li class="collection-item avatar" data-bind="visible: selected">
<img data-bind="attr: {src: image}" class="circle" >
<span class="title" data-bind="text: name"></span>
<div class="subtotal-item">Zile aparitii <span data-bind="text: dates().length"></span></div>
<div data-bind="if: $parent.adType() == 1" class="subtotal-item">Total de plata <span data-bind=" text: price().total"></span></div>
<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>
</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 class="block-pin" id="total">
<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 class="card-action">
<span>
<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 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 class="section no-pad-bot" data-bind="visible: finalStep">
</div>
</div>
<div class="section no-pad-bot" data-bind="visible: finalStep">
<div class="container">
<div class="row">
<div class="col s12 m12 l9">
<div class="row">
<ul class="collection final">
<li class="collection-item">
<b>Sumar Anunț</b>
<a href="#" data-bind="click: finalStep(false);"
class="waves-effect waves-light btn-link btn-ad-edit">Modifică Anunțul</a>
</li>
<div data-bind="foreach: publications">
<li class="collection-item avatar" data-bind="visible: isPristine() && selected">
<img alt="" class="circle" data-bind="attr: {src: image}">
<span class="title" data-bind="text: name"></span>
<p>Categorie: <span data-bind="text: columnStr()"></span></p>
<p>Date Apariție: <span data-bind="text: datesStr"></span></p>
<p data-bind="visible: optionStr().length > 0">Optionale:
<span data-bind="text: optionStr"></span>
</p>
<p>Total de Plată: <span class="ron badge" data-bind="text: price().total"></span></p>
</li>
<div class="row">
<!-- <div class="col s12 m12 l9">-->
<!-- <div class="row">-->
<!-- <ul class="collection final">-->
<!-- <li class="collection-item">-->
<!-- <b>Sumar Anunț</b>-->
<!-- <a href="#" data-bind="click: finalStep(false);"-->
<!-- class="waves-effect waves-light btn-link btn-ad-edit">Modifică Anunțul</a>-->
<!-- </li>-->
<!-- <div data-bind="foreach: publications">-->
<!-- <li class="collection-item avatar" data-bind="visible: isPristine() && selected">-->
<!-- <img alt="" class="circle" data-bind="attr: {src: image}">-->
<!-- <span class="title" data-bind="text: name"></span>-->
<!-- <p>Categorie: <span data-bind="text: columnStr()"></span></p>-->
<!-- <p>Date Apariție: <span data-bind="text: datesStr"></span></p>-->
<!---->
<!-- <p data-bind="visible: optionStr().length > 0">Optionale:-->
<!-- <span data-bind="text: optionStr"></span>-->
<!-- </p>-->
<!-- <p>Total de Plată: <span class="ron badge" data-bind="text: price().total"></span></p>-->
<!-- </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>
<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>
<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>
<footer class="page-footer default_color scrollspy">
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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="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 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>
<form action="/payment" id="payForm" method="post" style="display: none;">
<input type="hidden" name="ad_id" value="">
</form>
</div>
</div>
</div>
</div>
</div>
<footer class="page-footer default_color scrollspy" >
<div class="container">
<div class="row">
<div class="col l6 s12">
<h5 class="white-text">Rofusion Advertising Srl</h5>
<p class="white-text text-lighten-4">Anunturi mica publicitate<br>Anuțuri presa scrisă</p>
<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 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">
<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>
<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>
</div>
<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>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
<script src="js/kalendae.standalone.js"></script>
<script src="js/moment.js"></script>
<script src="js/knockout-min.js"></script>
<script src="js/knockout.mapping-latest.js"></script>
<script src="js/form-validator/jquery.form-validator.min.js"></script>
<script src="js/jquery.filer.min.js"></script>
<script>
var jenuPublication = <?php echo $jenuPublication; ?>;
</script>
<script src="js/main.js"></script>
</div>
<script src="js/jquery-3.1.0.min.js"></script>
<script src="js/materialize.js"></script>
<script src="js/modernizr.js"></script>
<script src="js/kalendae.standalone.js"></script>
<script src="js/moment.js"></script>
<script src="js/knockout-min.js"></script>
<script src="js/knockout.mapping-latest.js"></script>
<script src="js/form-validator/jquery.form-validator.min.js"></script>
<script src="js/jquery.filer.min.js"></script>
<script>
var jenuPublication = <?php echo $jenuPublication; ?>;
</script>
<script src="js/main.js"></script>
<!--Start of Tawk.to Script-->
<!--Start of Tawk.to Script-->
<!-- <script type="text/javascript">
var Tawk_API=Tawk_API||{}, Tawk_LoadStart=new Date();
(function(){
......@@ -581,7 +541,7 @@
s0.parentNode.insertBefore(s1,s0);
})();
</script> -->
<!--End of Tawk.to Script-->
<!--End of Tawk.to Script-->
</body>
</html>
<!DOCTYPE html>
<html lang="ro-RO">
<head>
<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">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<head>
<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">
<title>mica24.ro - Anunțuri Presa Scrisă - România Liberă</title>
<script src="js/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#payForm').submit();
});
</script>
</head>
<script src="js/jquery-3.1.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#payForm').submit();
});
</script>
</head>
<body>
<?php
if (!empty($data) && !empty($data['order']) && !empty($data['billing'])) {
$order = $data['order'];
<?php
if (!empty($data) && !empty($data['order']) && !empty($data['billing'])) {
$order = $data['order'];
$paymentSettings = $data["paymentSettings"];
$paymentSettings = $data["paymentSettings"];
require_once '../src/Mobilpay/Payment/Request/Abstract.php';
require_once '../src/Mobilpay/Payment/Request/Card.php';
require_once '../src/Mobilpay/Payment/Invoice.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
#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 = '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
// $x509FilePath = 'i.e: /ome/certificates/public.cer';
$x509FilePath = $paymentSettings["publicCertificate"];
// if(file_exists($x509FilePath)){
// var_dump($x509FilePath);
// die();
// }
try
{
srand((double) microtime() * 1000000);
$objPmReqCard = new Mobilpay_Payment_Request_Card();
#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
$objPmReqCard->signature = $paymentSettings["signature"];
#you should assign here the transaction ID registered by your application for this commercial operation
#order_id should be unique for a merchant account
$objPmReqCard->orderId = md5(uniqid(rand()));
require_once '../src/Mobilpay/Payment/Request/Abstract.php';
require_once '../src/Mobilpay/Payment/Request/Card.php';
require_once '../src/Mobilpay/Payment/Invoice.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
#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 = '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
// $x509FilePath = 'i.e: /ome/certificates/public.cer';
$x509FilePath = $paymentSettings["publicCertificate"];
// if(file_exists($x509FilePath)){
// var_dump($x509FilePath);
// die();
// }
try {
srand((double)microtime() * 1000000);
$objPmReqCard = new Mobilpay_Payment_Request_Card();
#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
$objPmReqCard->signature = $paymentSettings["signature"];
#you should assign here the transaction ID registered by your application for this commercial operation
#order_id should be unique for a merchant account
$objPmReqCard->orderId = md5(uniqid(rand()));
$objPmReqCard->params = [
"ad" => $order["reference"]
];
$objPmReqCard->params = [
"ad" => $order["reference"]
];
if(!empty($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
$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
$objPmReqCard->returnUrl = $paymentSettings["redirectUrl"] . '?ad=' . $order["reference"];
#detalii cu privire la plata: moneda, suma, descrierea
#payment details: currency, amount, description
$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
#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)
$objPmReqCard->invoice->currency = $paymentSettings["currency"];
$objPmReqCard->invoice->amount = $order["amount"];
#available installments number; if this parameter is present, only its value(s) will be available
//$objPmReqCard->invoice->installments= '2,3';
#selected installments number; its value should be within the available installments defined above
//$objPmReqCard->invoice->selectedInstallments= '3';
//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->details = $order["name"];
if (!empty($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
$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
$objPmReqCard->returnUrl = $paymentSettings["redirectUrl"] . '?ad=' . $order["reference"];
#detalii cu privire la plata: moneda, suma, descrierea
#payment details: currency, amount, description
$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
#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)
$objPmReqCard->invoice->currency = $paymentSettings["currency"];
$objPmReqCard->invoice->amount = $order["amount"];
#available installments number; if this parameter is present, only its value(s) will be available
//$objPmReqCard->invoice->installments= '2,3';
#selected installments number; its value should be within the available installments defined above
//$objPmReqCard->invoice->selectedInstallments= '3';
//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->details = $order["name"];
#detalii cu privire la adresa posesorului cardului
#details on the cardholder address (optional)
$billingAddress = new Mobilpay_Payment_Address();
$billingAddress->type = "person"; //should be "person"
// $billingAddress->type = $_POST['billing_type']; //should be "person"
$billingAddress->firstName = $data["billing"]["billFName"];
$billingAddress->lastName = $data["billing"]["billLName"];
$billingAddress->address = $data["billing"]["billAddress1"];
$billingAddress->email = $data["billing"]["billEmail"];
$billingAddress->mobilePhone = $data["billing"]["billPhone"];
$objPmReqCard->invoice->setBillingAddress($billingAddress);
#detalii cu privire la adresa posesorului cardului
#details on the cardholder address (optional)
$billingAddress = new Mobilpay_Payment_Address();
$billingAddress->type = "person"; //should be "person"
// $billingAddress->type = $_POST['billing_type']; //should be "person"
$billingAddress->firstName = $data["billing"]["billFName"];
$billingAddress->lastName = $data["billing"]["billLName"];
$billingAddress->address = $data["billing"]["billAddress1"];
$billingAddress->email = $data["billing"]["billEmail"];
$billingAddress->mobilePhone = $data["billing"]["billPhone"];
$objPmReqCard->invoice->setBillingAddress($billingAddress);
#detalii cu privire la adresa de livrare
#details on the shipping address
// $shippingAddress = new Mobilpay_Payment_Address();
// $shippingAddress->type = "ziar";
// $shippingAddress->firstName = "";
// $shippingAddress->lastName = "";
// $shippingAddress->address = "";
// $shippingAddress->email = "";
// $shippingAddress->mobilePhone = "";
// $objPmReqCard->invoice->setShippingAddress($shippingAddress);
#uncomment the line below in order to see the content of the request
// echo "<pre>";print_r($objPmReqCard);echo "</pre>";
$objPmReqCard->encrypt($x509FilePath);
}
catch(Exception $e)
{
}
#detalii cu privire la adresa de livrare
#details on the shipping address
// $shippingAddress = new Mobilpay_Payment_Address();
// $shippingAddress->type = "ziar";
// $shippingAddress->firstName = "";
// $shippingAddress->lastName = "";
// $shippingAddress->address = "";
// $shippingAddress->email = "";
// $shippingAddress->mobilePhone = "";
// $objPmReqCard->invoice->setShippingAddress($shippingAddress);
#uncomment the line below in order to see the content of the request
// echo "<pre>";print_r($objPmReqCard);echo "</pre>";
$objPmReqCard->encrypt($x509FilePath);
} catch (Exception $e) {
}
// die();
// die();
?>
<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="data" value="<?php echo $objPmReqCard->getEncData();?>"/>
<input type="submit" style="display: none;">
</form>
<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="data" value="<?php echo $objPmReqCard->getEncData(); ?>"/>
<input type="submit" style="display: none;">
</form>
<?php
}
?>
}
?>
</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