00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef Web_Page_Paragraph_Hpp
00010 #define Web_Page_Paragraph_Hpp
00011
00012
00013 #include "cgiTemplates.h"
00014 #include "read_base.hpp"
00015 #include <vector>
00016
00017
00018 #include "openLogger.h"
00019
00020 using namespace std;
00021
00022 class page_paragraph
00023 {
00024 protected:
00025 long long m_id;
00026 long long m_site_id;
00027 long long m_page_id;
00028 long m_place_order;
00029 string m_template_tag;
00030 string m_replace_tag;
00031 string m_name;
00032 string m_content;
00033
00034 public:
00035 page_paragraph()
00036 :m_id(0),m_site_id(0),m_page_id(0),m_place_order(0)
00037 {
00038 ;
00039 }
00040
00041 virtual ~page_paragraph()
00042 {
00043 ;
00044 }
00045
00046 page_paragraph & operator = ( const page_paragraph & in )
00047 {
00048 id(in.id());
00049 site_id(in.site_id());
00050 page_id(in.page_id());
00051 place_order(in.place_order());
00052 template_tag(in.template_tag());
00053 replace_tag(in.replace_tag());
00054 name (in.name());
00055 content(in.content());
00056 return *this;
00057 }
00058
00059 void propset( openRS & rs )
00060 {
00061 id(atoll(rs.getField(0).format().c_str()));
00062 site_id(atoll(rs.getField(1).format().c_str()));
00063 page_id(atoll(rs.getField(2).format().c_str()));
00064 place_order(atol(rs.getField(3).format().c_str()));
00065 template_tag(rs.getField(4).format());
00066 replace_tag(rs.getField(5).format());
00067 name(rs.getField(6).format());
00068 content(rs.getField(7).format());
00069 }
00070
00071
00072 void emit( paragraphMap & paras, ostream & toBrowser, string replace_tag )
00073 {
00074 paragraphMap::iterator pos = paras.find(template_tag());
00075 if( pos != paras.end() )
00076 {
00077 ocString uniqueId = "paragraph_";
00078 uniqueId.append(place_order());
00079 ocString output = pos->second;
00080 toBrowser <<
00081 output.replace( "$id",uniqueId.c_str() )
00082 .replace( replace_tag.c_str(),
00083 content().c_str() );
00084 }
00085 }
00086
00087
00088
00089 long long id(void) const {return m_id;}
00090 long long site_id(void) const {return m_site_id;}
00091 long long page_id(void) const {return m_page_id;}
00092 long place_order(void) const {return m_place_order;}
00093 string template_tag(void) const {return m_template_tag;}
00094 string replace_tag(void) const {return m_replace_tag;}
00095 string name(void) const {return m_name;}
00096 string content(void) const {return m_content;}
00097
00098 void id(long long in) { m_id=in; }
00099 void site_id( long long in) { m_site_id=in; }
00100 void page_id( long long in) { m_page_id=in; }
00101 void place_order( long in) { m_place_order=in; }
00102 void template_tag( string in) { m_template_tag=in; }
00103 void replace_tag( string in) { m_replace_tag=in; }
00104 void name (string in) { m_name=in; }
00105 void content( string in) { m_content=in; }
00106 };
00107
00108 typedef vector<page_paragraph> paragraph_vector;
00109
00110 class page_paragraphs : protected ref_base, public paragraph_vector
00111 {
00112 public:
00113 page_paragraphs(openDB & dbIn):ref_base(dbIn),paragraph_vector()
00114 {
00115 ;
00116 }
00117 ~page_paragraphs()
00118 {
00119 ;
00120 }
00121 string getSQL( long long pgid )
00122 {
00123 ocString sql = "select id, site_id,page_id,place_order, "
00124 "template_tag,replace_tag,name,content "
00125 "from metasite.paragraphs where page_id = ";
00126 sql.append( pgid );
00127 sql += " order by place_order";
00128 writelog( sql );
00129 return sql;
00130 }
00131
00132 bool load( long long pgid )
00133 {
00134 bool breturn=false;
00135 bool bData;
00136 for( bData=rs.open(getSQL(pgid));bData;bData=rs.next() )
00137 {
00138 page_paragraph pp;
00139 pp.propset(rs);
00140 push_back(pp);
00141 }
00142 rs.close();
00143 return breturn;
00144 }
00145
00146 void emit( paragraphMap & paras, ostream & toBrowser,
00147 ocString templateTags, string replace_tag )
00148 {
00149 paragraph_vector::iterator pos;
00150 for( pos=begin(); pos!=end(); ++pos )
00151 {
00152 ocString tags = "," + templateTags + ",";
00153 string testTag = "," + pos->template_tag() + ",";
00154 if( tags.regExMatch( testTag.c_str() ) )
00155 {
00156 pos->emit(paras,toBrowser,replace_tag);
00157 }
00158 }
00159 }
00160 };
00161
00162 #endif