00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef menu_item_hpp
00012 #define menu_item_hpp
00013
00014 #include "connectstring"
00015 #include "ocTypes.h"
00016 #include "ocString.h"
00017 #include "read_write_base.hpp"
00018 #include "openLogger.h"
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 enum menu_item_direction
00038 {
00039 up,rgt,btm,lft
00040 };
00041
00042 class menu_item: public read_write_base
00043 {
00044 public:
00045 identifier id;
00046 long long site_id;
00047 long long menu_id;
00048 long long link_id;
00049 string template_tag;
00050 string locate_tag;
00051 string target_tag;
00052 string label_tag;
00053 int place_order;
00054 int place_level;
00055
00056 menu_item()
00057 :read_write_base(),id(0LL),site_id(0LL),menu_id(0LL)
00058 ,locate_tag("$location"),label_tag("$label"),target_tag("_self")
00059 ,place_order(0),place_level(1)
00060 {
00061
00062 data_name("metasite.menu_items");
00063
00064 addDXMap( new llongXfer("id", &id ));
00065 addDXMap( new llongXfer("site_id", &site_id ));
00066 addDXMap( new llongXfer("menu_id", &menu_id ));
00067 addDXMap( new llongXfer("link_id", &link_id ));
00068 addDXMap( new stringXfer("template_tag", &template_tag ));
00069 addDXMap( new stringXfer("locate_tag", &locate_tag ));
00070 addDXMap( new stringXfer("target_tag", &target_tag ));
00071 addDXMap( new stringXfer("label_tag", &label_tag ));
00072 addDXMap( new intXfer("place_order", &place_order ));
00073 addDXMap( new intXfer("place_level", &place_level ));
00074 }
00075
00076 virtual bool ivalidate( void )
00077 {
00078 bool bres = true;
00079 if( template_tag.length() == 0 )
00080 {
00081 bres=false;
00082 m_result="No Template Text Specified!";
00083 }
00084 else
00085 {
00086
00087 if( place_order == 0 )
00088 {
00089 place_order = 1;
00090 ocString msql = "select max(place_order) from metasite.menu_items "
00091 "where menu_id = ";
00092 msql.append( menu_id );
00093 if(rs.open(msql))
00094 {
00095 place_order = atol(rs.getField(0).format().c_str()) + 1;
00096 rs.close();
00097 }
00098 }
00099 }
00100 return bres;
00101 }
00102 bool usupplemental( changeMap & changes )
00103 {
00104 if( changes.find("place_order") != changes.end() )
00105 {
00106 ocString mvSql = "update metasite.menu_items set place_order = place_order+1 where place_order >= ";
00107 mvSql.append(place_order);
00108 mvSql += " and menu_id = ";
00109 mvSql.append(menu_id);
00110 mvSql += " and id <> ";
00111 mvSql.append(id);
00112 cmd.execute(mvSql);
00113 }
00114 return true;
00115 }
00116
00117 bool move( long long mid, menu_item_direction dir )
00118 {
00119 bool bret=false;
00120 int nplace_order=0;
00121 int oplace_order;
00122 long long oid=0;
00123
00124 id=mid;
00125 key(mid);
00126 bret = get_data();
00127 ocString mvSql;
00128 if(bret)
00129 {
00130 oplace_order=place_order;
00131 changeMap changes;
00132
00133 switch(dir)
00134 {
00135 case up:
00136
00137 mvSql = "select id, place_order from metasite.menu_items where place_order < ";
00138 mvSql.append(place_order);
00139 mvSql += " and menu_id = ";
00140 mvSql.append(menu_id);
00141 mvSql += " order by place_order desc limit 1";
00142 bret = false;
00143 if(rs.open(mvSql))
00144 {
00145 oid = atoi(rs.getField(0).format().c_str());
00146 place_order = atoll(rs.getField(1).format().c_str());
00147 }
00148 if( !oid ) place_order--;
00149 changes["place_order"]="place_order";
00150 bret = db_action( "u", changes );
00151 if( oid )
00152 {
00153 id=oid;
00154 key(oid);
00155 bret = get_data();
00156 place_order=oplace_order;
00157 changes["place_order"]="place_order";
00158 bret = db_action( "u", changes );
00159 }
00160 break;
00161
00162 case rgt:
00163 ++place_level;
00164 changes["place_level"]="place_level";
00165 bret = db_action( "u", changes );
00166 break;
00167
00168 case btm:
00169
00170 mvSql = "select id, place_order from metasite.menu_items where place_order > ";
00171 mvSql.append(place_order);
00172 mvSql += " and menu_id = ";
00173 mvSql.append(menu_id);
00174 mvSql += " order by place_order asc limit 1";
00175 bret = false;
00176 if(rs.open(mvSql))
00177 {
00178 oid = atoi(rs.getField(0).format().c_str());
00179 place_order = atoll(rs.getField(1).format().c_str());
00180 }
00181 if( !oid ) place_order++;
00182 changes["place_order"]="place_order";
00183 bret = db_action( "u", changes );
00184 if( oid )
00185 {
00186 id=oid;
00187 key(oid);
00188 bret = get_data();
00189 place_order=oplace_order;
00190 changes["place_order"]="place_order";
00191 bret = db_action( "u", changes );
00192 }
00193 break;
00194
00195 case lft:
00196
00197 if( place_level > 1 )
00198 {
00199 --place_level;
00200 changes["place_level"]="place_level";
00201 bret=db_action( "u", changes );
00202 }
00203 break;
00204 }
00205 }
00206
00207 return bret;
00208 }
00209 };
00210 #endif