in Dataset/JS/AngularCosmoPage/pageCtrl.js [191:448]
$scope.savePage = function(duplicate){
// Check for duplicate URL
if(duplicate && $scope.page.url === $location.path()){
$translate('page_different_url').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText, classes: 'alert-error'});
});
return;
}
// Make sure there is a page type
if(!$scope.page.type){
$translate('page_no_type_selected').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText, classes: 'alert-error'});
});
return;
}
// If there's no custom title tag, use the header
if($scope.page.title){
if($scope.page.title.length === 0)
$scope.page.title = Page.header;
}
// If there's no custom url, throw an error
if($scope.page.url.length === 0 || $scope.page.url === 'new'){
$translate('page_no_url').then(function(translatedText){
$rootScope.$broadcast('notify', { message: translatedText, classes: 'alert-error' });
});
return;
}
// Get the scheduled date to publish
var scheduleDate;
if($scope.page.publish === 'Y' && Page.publish === 'Y') // If this was already published, don't update the published date
scheduleDate = Page.scheduleDate;
else if($scope.page.publish === 'Y') // If publishing now, set the publish date to the current time
scheduleDate = Math.round(+new Date().getTime()/1000);
else if($scope.page.publish === 'schedule'){
scheduleDate = Date.parse($scope.page.scheduleDate).getTime()/1000;
// Check if this is back dated
if(Date.parse($scope.page.scheduleDate).getTime() < Math.round(+new Date().getTime()))
$scope.page.publish = 'Y';
else
$scope.page.publish = 'N';
}
// Get the featured image URL
if(Page.extras.featured)
var featured = Page.extras.featured.src;
else
var featured = null;
// Create a new page or a duplicate
if($location.path() === '/new' || duplicate){
// Save content
REST.content.save({
title: $scope.page.title,
description: $scope.page.description,
header: Page.header,
subheader: Page.subheader,
featured: featured,
body: Page.body,
url: $scope.page.url,
type: $scope.page.type,
published: $scope.page.publish,
published_date: scheduleDate,
author: Users.id
}, newPagePromise, function(){ // Error
$translate('page_error_saving').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText, classes: 'alert-error'});
});
});
} else { // Update existing page
var revisionID;
// Update the page
REST.content.update({
contentID: Page.id,
title: $scope.page.title,
description: $scope.page.description,
header: Page.header,
subheader: Page.subheader,
featured: featured,
body: Page.body,
url: $scope.page.url,
type: $scope.page.type,
published: $scope.page.publish,
published_date: scheduleDate,
author: Users.id
}, updatePagePromise, function(data){ // Error
$translate('page_error_updating').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText, classes: 'alert-error'});
});
});
}
// Update the page after a new page was saved
function newPagePromise(data){
var contentID = data.id;
// Reset variables to edit page
$scope.page.id = contentID;
$scope.autoURL = false;
// Save new tags
if($scope.page.tags){
angular.forEach($scope.page.tags, function(value){
REST.contentTags.save({ contentID: contentID, tag: value });
});
}
// Save page as a revision
REST.contentRevisions.save({
contentID: contentID,
title: $scope.page.title,
description: $scope.page.description,
header: Page.header,
subheader: Page.subheader,
featured: featured,
body: Page.body,
url: $scope.page.url,
type: $scope.page.type,
published: $scope.page.publish,
published_date: scheduleDate,
author: Users.id
}, saveRevisionPromise);
}
// Update the page after saving a page revision
function saveRevisionPromise(data){
revisionID = data.id;
// Save additional data if there is any
if(Object.keys(Page.extras).length === 0){
// Success message
$translate('saved').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
// Redirect to new page
$location.path($scope.page.url);
} else {
for(var key in Page.extras){
// Stringify arrays and objects
if(typeof Page.extras[key] === 'object')
Page.extras[key] = angular.toJson(Page.extras[key]);
// Save extra
REST.contentExtras.save({
contentID: $scope.page.id,
name: key,
extra: Page.extras[key]
}, saveExtrasPromise, saveExtrasPromise);
// Save extra to revisions
REST.contentRevisionsExtras.save({
revisionID: revisionID,
contentID: $scope.page.id,
name: key,
extra: Page.extras[key]
});
}
}
$translate('page_created').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
}
var extrasCounter = {
i: 1
};
// Notify the user after saving the last extra
function saveExtrasPromise(){
// Wait for the last extra to be saved, then redirect the user
if(extrasCounter.i === Object.keys(Page.extras).length){
// Success message
$translate('page_created').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
// Redirect to new page
$location.path($scope.page.url);
} else
extrasCounter.i++;
}
// Update the page after it's been saved
function updatePagePromise(data){
// Delete old tags
REST.contentTags.delete({ contentID: $scope.page.id }, deleteTagsPromise);
// Save page as a revision
REST.contentRevisions.save({
contentID: $scope.page.id,
title: $scope.page.title,
description: $scope.page.description,
header: Page.header,
subheader: Page.subheader,
featured: featured,
body: Page.body,
url: $scope.page.url,
type: $scope.page.type,
published: $scope.page.publish,
published_date: $scope.page.scheduleDate,
author: Users.id
}, savePageRevisionPromise);
}
// Callback for saving a page revision
function savePageRevisionPromise(data){
revisionID = data.id;
// Delete old extras
REST.contentExtras.delete({ contentID: $scope.page.id }, deleteExtrasPromise);
}
// Callback after tags are deleted
function deleteTagsPromise(){
// Save new tags
angular.forEach($scope.page.tags, function(value){
REST.contentTags.save({ contentID: $scope.page.id, tag: value });
});
}
// Callback after deleting extras
function deleteExtrasPromise(){
// Save additional data
for (var key in Page.extras){
if (Page.extras.hasOwnProperty(key)){
// Stringify arrays and objects
if(typeof Page.extras[key] === 'object')
Page.extras[key] = angular.toJson(Page.extras[key]);
// Save new extra
REST.contentExtras.save({
contentID: $scope.page.id,
name: key,
extra: Page.extras[key]
}, saveExtrasPromise, saveExtrasPromise);
// Save new extra to revisions
REST.contentRevisionsExtras.save({
revisionID: revisionID,
contentID: $scope.page.id,
name: key,
extra: Page.extras[key]
});
}
}
// If there were no extras, notify right away
if(!Page.extras.length) {
$translate('page_updated').then(function(translatedText){
$rootScope.$broadcast('notify', {message: translatedText});
});
}
}
};