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
|