summaryrefslogtreecommitdiff
path: root/src/page.cpp
blob: 1e3debfec9d755f68b7cdca603a68f45f4a6a62e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#include "content.hpp"
#include "page.hpp"
#include "aCms.hpp"

#include <cppcms/url_dispatcher.h>  
#include <cppcms/url_mapper.h>   
#include <cppdb/frontend.h>

namespace apps {

// page

page::page( aCms &cms )
	: master( cms )
{
	cms.dispatcher( ).assign( "/page/(\\w+)", &page::display, this, 1 );

	cms.dispatcher( ).assign( "/api/pages", &page::api_pages, this );
	cms.dispatcher( ).assign( "/api/page/(\\w+)", &page::api_page, this, 1 );
}

void page::display( std::string slug )
{
	content::page c( cms );
	ini( c );
	render( "page_display", c );
}

void page::api_pages(  )
{
	cppdb::session sql( cms.conn );
	cppdb::result r;
	r = sql << "SELECT slug, title, content FROM page";
	std::vector<Page> pages;
	while( r.next( ) ) {	
		Page page;
		r >> page.slug;
		r >> page.title;
		r >> page.content;
		pages.push_back( page );
	}

	cppcms::json::value j;
	
	j = pages;
	
	response( ).out( ) << j;
}

void page::api_page( std::string slug )
{
	cppdb::session sql( cms.conn );
	cppdb::result r;
	r = sql << "SELECT slug, title, content FROM page WHERE slug=?" << slug << cppdb::row;
	if( r.empty( ) ) {
		return;
	}
	
	Page page;
	r >> page.slug;
	r >> page.title;
	r >> page.content;

	cppcms::json::value j;
	
	j = page;
	
	response( ).out( ) << j;
}

void page::ini( content::page &c )
{
	master::ini( c );
}

} // namespace apps

namespace content {

page::page( apps::aCms &cms )
	: page_edit( cms )
{
}
	
page_edit_form::page_edit_form( apps::aCms &cms  )
	: cppcms::form( ),
	cms( cms )
{
	title.message( "Title" );
	title.error_message( "The title must not be empty" );
	content.message( "Content" );
	
	save.value( "Save" );
	preview.value( "Preview" );
	
	add( title );
	add( content );
	add( save );
	add( preview );
	
	title.non_empty( );
}
	
bool page_edit_form::validate( )
{
	if( !form::validate( ) ) {
		return false;
	}
		
	return true;
}

} // namespace content