00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef Web_Page_Hpp
00010 #define Web_Page_Hpp
00011
00012
00013 #include "read_base.hpp"
00014
00015 #include "openLogin.h"
00016
00017
00018
00019 openLogin oLogin;
00020 string baseUrl;
00021 bool isSignedOn;
00022
00023 #include "pg_handlers.hpp"
00024 #include "page_template.hpp"
00025 #include "page_menu.hpp"
00026 #include "pg_paragraph.hpp"
00027 #include "global_content.hpp"
00028
00029 class page : protected read_base
00030 {
00031 protected:
00032 string getSql( string url, string domain )
00033 {
00034
00035 sql = "select p.id, "
00036 "p.site_id, "
00037 "p.template_id, "
00038 "p.name, "
00039 "p.url, "
00040 "p.meta_description "
00041 "from metasite.pages p "
00042 "inner join metasite.sites s on p.site_id = s.id "
00043 "where concat(s.url,p.url) = '";
00044 sql+= url + "' and s.domain = '" ;
00045 sql+= domain;
00046 sql+= "'";
00047 return sql;
00048 }
00049
00050 void propset( void )
00051 {
00052 m_id = atoll(rs.getField(0).format().c_str());
00053 m_site_id = atoll(rs.getField(1).format().c_str());
00054 m_template_id = atoll(rs.getField(2).format().c_str());
00055 m_name = rs.getField(3).format();
00056 m_url = rs.getField(4).format();
00057 m_meta_description = rs.getField(5).format();
00058 }
00059
00060
00061 long long m_id;
00062 long long m_site_id;
00063 long long m_template_id;
00064 string m_name;
00065 string m_url;
00066 string m_meta_description;
00067 string sql;
00068
00069
00070 bool defaultPage;
00071
00072
00073 cgiScript & script;
00074
00075
00076 page_template pg_template;
00077
00078
00079
00080 page_menus pg_menus;
00081
00082
00083 page_paragraphs pg_paragraphs;
00084
00085
00086 global_contents m_global_contents;
00087 ocString loadResults;
00088 public:
00089
00090
00091 string editIcon;
00092
00093
00094 page(cgiScript & in)
00095 :read_base(),script(in)
00096 ,pg_paragraphs(db),m_id(0),m_site_id(0),m_template_id(0)
00097 ,defaultPage(false)
00098 {
00099 ;
00100 }
00101 virtual ~page()
00102 {
00103 ;
00104 }
00105 string getLoadResult( void )
00106 {
00107 return loadResults;
00108 }
00109 virtual bool load( void )
00110 {
00111 bool breturn = false;
00112
00113
00114
00115 string relUrl = script.ScriptName();
00116 relUrl += script.PathInfo().c_str();
00117 loadResults = "Attempt to get page ";
00118 loadResults += getSql(relUrl,script.ServerName().c_str());
00119 loadResults += " failed";
00120
00121 if( script.PathInfo().length() == 0 )
00122 {
00123 defaultPage = true;
00124 }
00125
00126 if( rs.open( sql.c_str() ) )
00127 {
00128
00129 propset();
00130 rs.close();
00131
00132
00133
00134 breturn = pg_template.load(template_id());
00135 if( !breturn )
00136 {
00137 loadResults = "Attempt to load template failed";
00138 }
00139 else
00140 {
00141 loadResults = "Good!";
00142
00143 pg_menus.load(id());
00144
00145
00146 pg_paragraphs.load(id());
00147
00148
00149 m_global_contents.load(site_id());
00150 }
00151 }
00152 return breturn;
00153 }
00154
00155 void addGlobalContent( string tag, ocString & part )
00156 {
00157 global_content_map::iterator pos = m_global_contents.find(tag);
00158 if( pos != m_global_contents.end() )
00159 {
00160
00161 part = part.replace( "$content$", pos->second.content().c_str() );
00162 }
00163 }
00164
00165 virtual string getTop( void )
00166 {
00167 string strRet = "";
00168
00169 if( pg_template.id() != 0 )
00170 {
00171
00172 ocString top = pg_template.getParagraph("top");
00173 addGlobalContent( "top", top );
00174 strRet = top.replace( "$meta_description$",
00175 m_meta_description.c_str() )
00176 .replace( "$title$", m_name.c_str() );
00177 }
00178 return strRet;
00179 }
00180 virtual string getSpacer( string name )
00181 {
00182 ocString spacer = paragraph_string(name);
00183 addGlobalContent( name, spacer );
00184 return spacer.replace( "$title$", m_name.c_str() );
00185 }
00186 virtual string getEnd( void )
00187 {
00188
00189 ocString end = pg_template.getParagraph("end");
00190 addGlobalContent( "end", end );
00191 return end;
00192 }
00193
00194 virtual bool emitMenu( string name, string startTag, string endTag,
00195 string boundStart = "", string boundEnd="" )
00196 {
00197 bool bRet = true;
00198 pg_menus.emit( name, pg_template.getParagraphs(),
00199 script, script.PathInfo().c_str(),
00200 defaultPage,
00201 startTag, endTag, boundStart, boundEnd);
00202 return bRet;
00203 }
00204
00205 virtual bool emitContent( string contentTags, string replaceTag, string section = "" )
00206 {
00207 bool bRet = true;
00208 paragraphMap & paras = pg_template.getParagraphs();
00209 pg_paragraphs.emit(paras,script,contentTags,replaceTag,section);
00210 return bRet;
00211 }
00212
00213
00214
00215
00216 long long id( void ){return m_id;}
00217 long long site_id( void ){return m_site_id;}
00218 long long template_id( void ){return m_template_id;}
00219 string name( void ){return m_name;}
00220 string url( void ){return m_url;}
00221 string meta_description( void ){return m_meta_description; }
00222
00223
00224 string loaded_control_string( void )
00225 {
00226
00227 if( pg_template.id() == 0 || pg_template.getParagraphs().empty() )
00228 {
00229 return "<xml>Empty Template!</xml>";
00230 }
00231 paragraphMap & paras = pg_template.getParagraphs();
00232 paragraphMap::iterator pos = paras.find(string("control"));
00233
00234 if( pos != paras.end() )
00235 {
00236 return pos->second;
00237 }
00238 else
00239 {
00240 return "<xml>Can't Find control!</xml>";
00241 }
00242 }
00243
00244
00245
00246
00247
00248
00249 string paragraph_string( string name )
00250 {
00251 if( pg_template.id() == 0 || pg_template.getParagraphs().empty() )
00252 {
00253 return "<xml>Empty Template!</xml>";
00254 }
00255 paragraphMap & paras = pg_template.getParagraphs();
00256 paragraphMap::iterator pos = paras.find(name);
00257
00258 if( pos != paras.end() )
00259 {
00260 return pos->second;
00261 }
00262 else
00263 {
00264 string err = "<xml><error>Can't Find named paragraph!</error><detail>";
00265 err += name;
00266 err += "</detail></xml>";
00267 return err;
00268 }
00269 }
00270
00271
00272 page_paragraphs & get_page_paragraphs( void )
00273 {
00274 return pg_paragraphs;
00275 }
00276
00277
00278 page_template & get_template( void )
00279 {
00280 return pg_template;
00281 }
00282
00283
00284 void id( long long in ){m_id=in;}
00285 void site_id( long long in ){m_site_id=in;}
00286 void template_id( long long in ){m_template_id=in;}
00287 void name( string in ){m_name=in;}
00288 void url( string in ){m_url=in;}
00289 void meta_description ( string in ){m_meta_description=in; }
00290
00291 cgiScript & get_script(void) { return script; }
00292 page_menus & get_menus(void) { return pg_menus; }
00293 };
00294
00295
00296 #endif