summaryrefslogtreecommitdiff
path: root/src/page.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/page.cpp')
-rw-r--r--src/page.cpp113
1 files changed, 113 insertions, 0 deletions
diff --git a/src/page.cpp b/src/page.cpp
new file mode 100644
index 0000000..cff0118
--- /dev/null
+++ b/src/page.cpp
@@ -0,0 +1,113 @@
+#include "content.hpp"
+#include "page.hpp"
+#include "strusCms.hpp"
+
+#include <cppcms/url_dispatcher.h>
+#include <cppcms/url_mapper.h>
+#include <cppdb/frontend.h>
+
+namespace apps {
+
+// page
+
+page::page( strusCms &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::strusCms &cms )
+ : page_edit( cms )
+{
+}
+
+page_edit_form::page_edit_form( apps::strusCms &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