module_index_act_mysql_setup.go 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963
  1. package modules
  2. import (
  3. "os"
  4. "strconv"
  5. "golang-fave/engine/sqlw"
  6. "golang-fave/engine/wrapper"
  7. "golang-fave/utils"
  8. )
  9. func (this *Modules) RegisterAction_IndexMysqlSetup() *Action {
  10. return this.newAction(AInfo{
  11. WantDB: false,
  12. Mount: "index-mysql-setup",
  13. }, func(wrap *wrapper.Wrapper) {
  14. pf_host := wrap.R.FormValue("host")
  15. pf_port := wrap.R.FormValue("port")
  16. pf_name := wrap.R.FormValue("name")
  17. pf_user := wrap.R.FormValue("user")
  18. pf_password := wrap.R.FormValue("password")
  19. if pf_host == "" {
  20. wrap.MsgError(`Please specify host for MySQL connection`)
  21. return
  22. }
  23. if pf_port == "" {
  24. wrap.MsgError(`Please specify host port for MySQL connection`)
  25. return
  26. }
  27. if _, err := strconv.Atoi(pf_port); err != nil {
  28. wrap.MsgError(`MySQL host port must be integer number`)
  29. return
  30. }
  31. if pf_name == "" {
  32. wrap.MsgError(`Please specify MySQL database name`)
  33. return
  34. }
  35. if pf_user == "" {
  36. wrap.MsgError(`Please specify MySQL user`)
  37. return
  38. }
  39. // Security, check if still need to run this action
  40. if wrap.ConfMysqlExists {
  41. wrap.MsgError(`CMS is already configured`)
  42. return
  43. }
  44. // Try connect to mysql
  45. db, err := sqlw.Open("mysql", pf_user+":"+pf_password+"@tcp("+pf_host+":"+pf_port+")/"+pf_name)
  46. if err != nil {
  47. wrap.MsgError(err.Error())
  48. return
  49. }
  50. defer db.Close()
  51. err = db.Ping()
  52. if err != nil {
  53. wrap.MsgError(err.Error())
  54. return
  55. }
  56. // Start transaction
  57. tx, err := db.Begin()
  58. if err != nil {
  59. wrap.MsgError(err.Error())
  60. return
  61. }
  62. // Table: blog_cats
  63. if _, err = tx.Exec(
  64. `CREATE TABLE blog_cats (
  65. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  66. user int(11) NOT NULL COMMENT 'User id',
  67. name varchar(255) NOT NULL COMMENT 'Category name',
  68. alias varchar(255) NOT NULL COMMENT 'Category alias',
  69. lft int(11) NOT NULL COMMENT 'For nested set model',
  70. rgt int(11) NOT NULL COMMENT 'For nested set model',
  71. PRIMARY KEY (id)
  72. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  73. ); err != nil {
  74. tx.Rollback()
  75. wrap.MsgError(err.Error())
  76. return
  77. }
  78. // Table: blog_cat_post_rel
  79. if _, err = tx.Exec(
  80. `CREATE TABLE blog_cat_post_rel (
  81. post_id int(11) NOT NULL COMMENT 'Post id',
  82. category_id int(11) NOT NULL COMMENT 'Category id'
  83. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  84. ); err != nil {
  85. tx.Rollback()
  86. wrap.MsgError(err.Error())
  87. return
  88. }
  89. // Table: blog_posts
  90. if _, err = tx.Exec(
  91. `CREATE TABLE blog_posts (
  92. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  93. user int(11) NOT NULL COMMENT 'User id',
  94. name varchar(255) NOT NULL COMMENT 'Post name',
  95. alias varchar(255) NOT NULL COMMENT 'Post alias',
  96. category int(11) NOT NULL,
  97. briefly text NOT NULL COMMENT 'Post brief content',
  98. content text NOT NULL COMMENT 'Post content',
  99. datetime datetime NOT NULL COMMENT 'Creation date/time',
  100. active int(1) NOT NULL COMMENT 'Is active post or not',
  101. PRIMARY KEY (id)
  102. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  103. ); err != nil {
  104. tx.Rollback()
  105. wrap.MsgError(err.Error())
  106. return
  107. }
  108. // Table: notify_mail
  109. if _, err = tx.Exec(
  110. `CREATE TABLE notify_mail (
  111. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  112. email varchar(255) NOT NULL COMMENT 'Email address',
  113. subject varchar(800) NOT NULL COMMENT 'Email subject',
  114. message text NOT NULL COMMENT 'Email body',
  115. error text NOT NULL COMMENT 'Send error message',
  116. datetime datetime NOT NULL COMMENT 'Creation date/time',
  117. status int(1) NOT NULL COMMENT 'Sending status',
  118. PRIMARY KEY (id)
  119. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  120. ); err != nil {
  121. tx.Rollback()
  122. wrap.MsgError(err.Error())
  123. return
  124. }
  125. // Table: pages
  126. if _, err = tx.Exec(
  127. `CREATE TABLE pages (
  128. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  129. user int(11) NOT NULL COMMENT 'User id',
  130. name varchar(255) NOT NULL COMMENT 'Page name',
  131. alias varchar(255) NOT NULL COMMENT 'Page url part',
  132. content text NOT NULL COMMENT 'Page content',
  133. meta_title varchar(255) NOT NULL DEFAULT '' COMMENT 'Page meta title',
  134. meta_keywords varchar(255) NOT NULL DEFAULT '' COMMENT 'Page meta keywords',
  135. meta_description varchar(510) NOT NULL DEFAULT '' COMMENT 'Page meta description',
  136. datetime datetime NOT NULL COMMENT 'Creation date/time',
  137. active int(1) NOT NULL COMMENT 'Is active page or not',
  138. PRIMARY KEY (id)
  139. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  140. ); err != nil {
  141. tx.Rollback()
  142. wrap.MsgError(err.Error())
  143. return
  144. }
  145. // Table: settings
  146. if _, err = tx.Exec(
  147. `CREATE TABLE settings (
  148. name varchar(255) NOT NULL COMMENT 'Setting name',
  149. value text NOT NULL COMMENT 'Setting value'
  150. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  151. ); err != nil {
  152. tx.Rollback()
  153. wrap.MsgError(err.Error())
  154. return
  155. }
  156. // Table: shop_cat_product_rel
  157. if _, err = tx.Exec(
  158. `CREATE TABLE shop_cat_product_rel (
  159. product_id int(11) NOT NULL COMMENT 'Product id',
  160. category_id int(11) NOT NULL COMMENT 'Category id'
  161. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  162. ); err != nil {
  163. tx.Rollback()
  164. wrap.MsgError(err.Error())
  165. return
  166. }
  167. // Table: shop_cats
  168. if _, err = tx.Exec(
  169. `CREATE TABLE shop_cats (
  170. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  171. user int(11) NOT NULL COMMENT 'User id',
  172. name varchar(255) NOT NULL COMMENT 'Category name',
  173. alias varchar(255) NOT NULL COMMENT 'Category alias',
  174. lft int(11) NOT NULL COMMENT 'For nested set model',
  175. rgt int(11) NOT NULL COMMENT 'For nested set model',
  176. PRIMARY KEY (id)
  177. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  178. ); err != nil {
  179. tx.Rollback()
  180. wrap.MsgError(err.Error())
  181. return
  182. }
  183. // Table: shop_currencies
  184. if _, err = tx.Exec(
  185. `CREATE TABLE shop_currencies (
  186. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  187. name varchar(255) NOT NULL COMMENT 'Currency name',
  188. coefficient float(8,4) NOT NULL DEFAULT '1.0000' COMMENT 'Currency coefficient',
  189. code varchar(10) NOT NULL COMMENT 'Currency code',
  190. symbol varchar(5) NOT NULL COMMENT 'Currency symbol',
  191. PRIMARY KEY (id)
  192. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  193. ); err != nil {
  194. tx.Rollback()
  195. wrap.MsgError(err.Error())
  196. return
  197. }
  198. // Table: shop_filter_product_values
  199. if _, err = tx.Exec(
  200. `CREATE TABLE shop_filter_product_values (
  201. product_id int(11) NOT NULL COMMENT 'Product id',
  202. filter_value_id int(11) NOT NULL COMMENT 'Filter value id'
  203. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  204. ); err != nil {
  205. tx.Rollback()
  206. wrap.MsgError(err.Error())
  207. return
  208. }
  209. // Table: shop_filters
  210. if _, err = tx.Exec(
  211. `CREATE TABLE shop_filters (
  212. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  213. name varchar(255) NOT NULL COMMENT 'Filter name in CP',
  214. filter varchar(255) NOT NULL COMMENT 'Filter name in site',
  215. PRIMARY KEY (id)
  216. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  217. ); err != nil {
  218. tx.Rollback()
  219. wrap.MsgError(err.Error())
  220. return
  221. }
  222. // Table: shop_filters_values
  223. if _, err = tx.Exec(
  224. `CREATE TABLE shop_filters_values (
  225. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  226. filter_id int(11) NOT NULL COMMENT 'Filter id',
  227. name varchar(255) NOT NULL COMMENT 'Value name',
  228. PRIMARY KEY (id)
  229. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  230. ); err != nil {
  231. tx.Rollback()
  232. wrap.MsgError(err.Error())
  233. return
  234. }
  235. // Table: shop_product_images
  236. if _, err = tx.Exec(
  237. `CREATE TABLE shop_product_images (
  238. id int(11) NOT NULL AUTO_INCREMENT,
  239. product_id int(11) NOT NULL,
  240. filename varchar(255) NOT NULL,
  241. ord int(11) NOT NULL DEFAULT '0',
  242. PRIMARY KEY (id)
  243. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  244. ); err != nil {
  245. tx.Rollback()
  246. wrap.MsgError(err.Error())
  247. return
  248. }
  249. // Table: shop_products
  250. if _, err = tx.Exec(
  251. `CREATE TABLE shop_products (
  252. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  253. parent_id int(11) DEFAULT NULL,
  254. user int(11) NOT NULL COMMENT 'User id',
  255. currency int(11) NOT NULL COMMENT 'Currency id',
  256. price float(8,2) NOT NULL COMMENT 'Product price',
  257. gname varchar(255) NOT NULL,
  258. name varchar(255) NOT NULL COMMENT 'Product name',
  259. alias varchar(255) NOT NULL COMMENT 'Product alias',
  260. vendor varchar(255) NOT NULL,
  261. quantity int(11) NOT NULL,
  262. category int(11) NOT NULL,
  263. briefly text NOT NULL COMMENT 'Product brief content',
  264. content text NOT NULL COMMENT 'Product content',
  265. datetime datetime NOT NULL COMMENT 'Creation date/time',
  266. active int(1) NOT NULL COMMENT 'Is active product or not',
  267. PRIMARY KEY (id)
  268. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  269. ); err != nil {
  270. tx.Rollback()
  271. wrap.MsgError(err.Error())
  272. return
  273. }
  274. // Table: users
  275. if _, err = tx.Exec(
  276. `CREATE TABLE users (
  277. id int(11) NOT NULL AUTO_INCREMENT COMMENT 'AI',
  278. first_name varchar(64) NOT NULL DEFAULT '' COMMENT 'User first name',
  279. last_name varchar(64) NOT NULL DEFAULT '' COMMENT 'User last name',
  280. email varchar(64) NOT NULL COMMENT 'User email',
  281. password varchar(32) NOT NULL COMMENT 'User password (MD5)',
  282. admin int(1) NOT NULL COMMENT 'Is admin user or not',
  283. active int(1) NOT NULL COMMENT 'Is active user or not',
  284. PRIMARY KEY (id)
  285. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;`,
  286. ); err != nil {
  287. tx.Rollback()
  288. wrap.MsgError(err.Error())
  289. return
  290. }
  291. // Demo datas
  292. if _, err = tx.Exec(
  293. `INSERT INTO blog_cats (id, user, name, alias, lft, rgt)
  294. VALUES
  295. (1, 1, 'ROOT', 'ROOT', 1, 24),
  296. (2, 1, 'Health and food', 'health-and-food', 2, 15),
  297. (3, 1, 'News', 'news', 16, 21),
  298. (4, 1, 'Hobby', 'hobby', 22, 23),
  299. (5, 1, 'Juices', 'juices', 3, 8),
  300. (6, 1, 'Nutrition', 'nutrition', 9, 14),
  301. (7, 1, 'Natural', 'natural', 4, 5),
  302. (8, 1, 'For kids', 'for-kids', 6, 7),
  303. (9, 1, 'For all', 'for-all', 10, 11),
  304. (10, 1, 'For athletes', 'for-athletes', 12, 13),
  305. (11, 1, 'Computers and technology', 'computers-and-technology', 17, 18),
  306. (12, 1, 'Film industry', 'film-industry', 19, 20);`,
  307. ); err != nil {
  308. tx.Rollback()
  309. wrap.MsgError(err.Error())
  310. return
  311. }
  312. if _, err = tx.Exec(
  313. `INSERT INTO blog_cat_post_rel (post_id, category_id) VALUES (1, 9), (2, 12), (3, 8);`,
  314. ); err != nil {
  315. tx.Rollback()
  316. wrap.MsgError(err.Error())
  317. return
  318. }
  319. if _, err = tx.Exec(
  320. `INSERT INTO blog_posts SET
  321. id = ?,
  322. user = ?,
  323. name = ?,
  324. alias = ?,
  325. category = ?,
  326. briefly = ?,
  327. content = ?,
  328. datetime = ?,
  329. active = ?
  330. ;`,
  331. 1,
  332. 1,
  333. "Why should we eat wholesome food?",
  334. "why-should-we-eat-wholesome-food",
  335. 9,
  336. "<p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  337. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  338. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  339. 1,
  340. ); err != nil {
  341. tx.Rollback()
  342. wrap.MsgError(err.Error())
  343. return
  344. }
  345. if _, err = tx.Exec(
  346. `INSERT INTO blog_posts SET
  347. id = ?,
  348. user = ?,
  349. name = ?,
  350. alias = ?,
  351. category = ?,
  352. briefly = ?,
  353. content = ?,
  354. datetime = ?,
  355. active = ?
  356. ;`,
  357. 2,
  358. 1,
  359. "Latest top space movies",
  360. "latest-top-space-movies",
  361. 12,
  362. "<p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  363. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  364. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  365. 1,
  366. ); err != nil {
  367. tx.Rollback()
  368. wrap.MsgError(err.Error())
  369. return
  370. }
  371. if _, err = tx.Exec(
  372. `INSERT INTO blog_posts SET
  373. id = ?,
  374. user = ?,
  375. name = ?,
  376. alias = ?,
  377. category = ?,
  378. briefly = ?,
  379. content = ?,
  380. datetime = ?,
  381. active = ?
  382. ;`,
  383. 3,
  384. 1,
  385. "The best juices for a child",
  386. "the-best-juices-for-a-child",
  387. 8,
  388. "<p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  389. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  390. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  391. 1,
  392. ); err != nil {
  393. tx.Rollback()
  394. wrap.MsgError(err.Error())
  395. return
  396. }
  397. if _, err = tx.Exec(
  398. `INSERT INTO pages SET
  399. id = ?,
  400. user = ?,
  401. name = ?,
  402. alias = ?,
  403. content = ?,
  404. datetime = ?,
  405. active = ?
  406. ;`,
  407. 1,
  408. 1,
  409. "Home",
  410. "/",
  411. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p><p>Ante metus dictum at tempor commodo ullamcorper a. Facilisis mauris sit amet massa vitae. Enim neque volutpat ac tincidunt vitae. Tempus quam pellentesque nec nam aliquam sem. Mollis aliquam ut porttitor leo a diam sollicitudin. Nunc pulvinar sapien et ligula ullamcorper. Dignissim suspendisse in est ante in nibh mauris. Eget egestas purus viverra accumsan in. Vitae tempus quam pellentesque nec nam aliquam sem et. Sodales ut etiam sit amet nisl. Aliquet risus feugiat in ante. Rhoncus urna neque viverra justo nec ultrices dui sapien. Sit amet aliquam id diam maecenas ultricies. Sed odio morbi quis commodo odio aenean sed adipiscing diam.</p>",
  412. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  413. 1,
  414. ); err != nil {
  415. tx.Rollback()
  416. wrap.MsgError(err.Error())
  417. return
  418. }
  419. if _, err = tx.Exec(
  420. `INSERT INTO pages SET
  421. id = ?,
  422. user = ?,
  423. name = ?,
  424. alias = ?,
  425. content = ?,
  426. datetime = ?,
  427. active = ?
  428. ;`,
  429. 2,
  430. 1,
  431. "Another",
  432. "/another/",
  433. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p><p>Ante metus dictum at tempor commodo ullamcorper a. Facilisis mauris sit amet massa vitae. Enim neque volutpat ac tincidunt vitae. Tempus quam pellentesque nec nam aliquam sem. Mollis aliquam ut porttitor leo a diam sollicitudin. Nunc pulvinar sapien et ligula ullamcorper. Dignissim suspendisse in est ante in nibh mauris. Eget egestas purus viverra accumsan in. Vitae tempus quam pellentesque nec nam aliquam sem et. Sodales ut etiam sit amet nisl. Aliquet risus feugiat in ante. Rhoncus urna neque viverra justo nec ultrices dui sapien. Sit amet aliquam id diam maecenas ultricies. Sed odio morbi quis commodo odio aenean sed adipiscing diam.</p>",
  434. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  435. 1,
  436. ); err != nil {
  437. tx.Rollback()
  438. wrap.MsgError(err.Error())
  439. return
  440. }
  441. if _, err = tx.Exec(
  442. `INSERT INTO pages SET
  443. id = ?,
  444. user = ?,
  445. name = ?,
  446. alias = ?,
  447. content = ?,
  448. datetime = ?,
  449. active = ?
  450. ;`,
  451. 3,
  452. 1,
  453. "About",
  454. "/about/",
  455. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p><p>Ante metus dictum at tempor commodo ullamcorper a. Facilisis mauris sit amet massa vitae. Enim neque volutpat ac tincidunt vitae. Tempus quam pellentesque nec nam aliquam sem. Mollis aliquam ut porttitor leo a diam sollicitudin. Nunc pulvinar sapien et ligula ullamcorper. Dignissim suspendisse in est ante in nibh mauris. Eget egestas purus viverra accumsan in. Vitae tempus quam pellentesque nec nam aliquam sem et. Sodales ut etiam sit amet nisl. Aliquet risus feugiat in ante. Rhoncus urna neque viverra justo nec ultrices dui sapien. Sit amet aliquam id diam maecenas ultricies. Sed odio morbi quis commodo odio aenean sed adipiscing diam.</p>",
  456. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  457. 1,
  458. ); err != nil {
  459. tx.Rollback()
  460. wrap.MsgError(err.Error())
  461. return
  462. }
  463. if _, err = tx.Exec(
  464. `INSERT INTO settings (name, value) VALUES ('database_version', '000000014');`,
  465. ); err != nil {
  466. tx.Rollback()
  467. wrap.MsgError(err.Error())
  468. return
  469. }
  470. if _, err = tx.Exec(
  471. `INSERT INTO shop_cat_product_rel (product_id, category_id)
  472. VALUES
  473. (1, 3);`,
  474. ); err != nil {
  475. tx.Rollback()
  476. wrap.MsgError(err.Error())
  477. return
  478. }
  479. if _, err = tx.Exec(
  480. `INSERT INTO shop_cats (id, user, name, alias, lft, rgt)
  481. VALUES
  482. (1, 1, 'ROOT', 'ROOT', 1, 6),
  483. (2, 1, 'Electronics', 'electronics', 2, 5),
  484. (3, 1, 'Mobile phones', 'mobile-phones', 3, 4);`,
  485. ); err != nil {
  486. tx.Rollback()
  487. wrap.MsgError(err.Error())
  488. return
  489. }
  490. if _, err = tx.Exec(
  491. `INSERT INTO shop_currencies (id, name, coefficient, code, symbol)
  492. VALUES
  493. (1, 'US Dollar', 1.0000, 'USD', '$');`,
  494. ); err != nil {
  495. tx.Rollback()
  496. wrap.MsgError(err.Error())
  497. return
  498. }
  499. if _, err = tx.Exec(
  500. `INSERT INTO shop_filter_product_values (product_id, filter_value_id)
  501. VALUES
  502. (1, 3),
  503. (1, 7),
  504. (1, 9),
  505. (1, 10),
  506. (1, 11);`,
  507. ); err != nil {
  508. tx.Rollback()
  509. wrap.MsgError(err.Error())
  510. return
  511. }
  512. if _, err = tx.Exec(
  513. `INSERT INTO shop_filters (id, name, filter)
  514. VALUES
  515. (1, 'Mobile phones manufacturer', 'Manufacturer'),
  516. (2, 'Mobile phones memory', 'Memory'),
  517. (3, 'Mobile phones communication standard', 'Communication standard');`,
  518. ); err != nil {
  519. tx.Rollback()
  520. wrap.MsgError(err.Error())
  521. return
  522. }
  523. if _, err = tx.Exec(
  524. `INSERT INTO shop_filters_values (id, filter_id, name)
  525. VALUES
  526. (1, 1, 'Apple'),
  527. (2, 1, 'Asus'),
  528. (3, 1, 'Samsung'),
  529. (4, 2, '16 Gb'),
  530. (5, 2, '32 Gb'),
  531. (6, 2, '64 Gb'),
  532. (7, 2, '128 Gb'),
  533. (8, 2, '256 Gb'),
  534. (9, 3, '4G'),
  535. (10, 3, '2G'),
  536. (11, 3, '3G');`,
  537. ); err != nil {
  538. tx.Rollback()
  539. wrap.MsgError(err.Error())
  540. return
  541. }
  542. if _, err = tx.Exec(
  543. `INSERT INTO shop_products SET
  544. id = ?,
  545. user = ?,
  546. currency = ?,
  547. price = ?,
  548. gname = ?,
  549. name = ?,
  550. alias = ?,
  551. vendor = ?,
  552. quantity = ?,
  553. category = ?,
  554. briefly = ?,
  555. content = ?,
  556. datetime = ?,
  557. active = ?
  558. ;`,
  559. 1,
  560. 1,
  561. 1,
  562. 1000.00,
  563. "",
  564. "Samsung Galaxy S10",
  565. "samsung-galaxy-s10",
  566. "Samsung",
  567. "1",
  568. "3",
  569. "<p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent.</p>",
  570. "<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Feugiat in ante metus dictum at tempor commodo ullamcorper a. Et malesuada fames ac turpis egestas sed tempus urna et. Euismod elementum nisi quis eleifend. Nisi porta lorem mollis aliquam ut porttitor. Ac turpis egestas maecenas pharetra convallis posuere. Nunc non blandit massa enim nec dui. Commodo elit at imperdiet dui accumsan sit amet nulla. Viverra accumsan in nisl nisi scelerisque. Dui nunc mattis enim ut tellus. Molestie ac feugiat sed lectus vestibulum mattis ullamcorper. Faucibus ornare suspendisse sed nisi lacus. Nulla facilisi morbi tempus iaculis. Ut eu sem integer vitae justo eget magna fermentum iaculis. Ullamcorper sit amet risus nullam eget felis eget nunc. Volutpat sed cras ornare arcu dui vivamus. Eget magna fermentum iaculis eu non diam.</p><p>Arcu ac tortor dignissim convallis aenean et tortor. Vitae auctor eu augue ut lectus arcu. Ac turpis egestas integer eget aliquet nibh praesent. Interdum velit euismod in pellentesque massa placerat duis. Vestibulum rhoncus est pellentesque elit ullamcorper dignissim cras tincidunt. Nisl rhoncus mattis rhoncus urna neque viverra justo. Odio ut enim blandit volutpat. Ac auctor augue mauris augue neque gravida. Ut lectus arcu bibendum at varius vel. Porttitor leo a diam sollicitudin tempor id eu nisl nunc. Dolor sit amet consectetur adipiscing elit duis tristique. Semper quis lectus nulla at volutpat diam ut. Sapien eget mi proin sed.</p>",
  571. utils.UnixTimestampToMySqlDateTime(utils.GetCurrentUnixTimestamp()),
  572. 1,
  573. ); err != nil {
  574. tx.Rollback()
  575. wrap.MsgError(err.Error())
  576. return
  577. }
  578. if _, err = tx.Exec(
  579. `INSERT INTO users (id, first_name, last_name, email, password, admin, active) VALUES (1, 'First Name', 'Last Name', 'example@example.com', '23463b99b62a72f26ed677cc556c44e8', 1, 1);`,
  580. ); err != nil {
  581. tx.Rollback()
  582. wrap.MsgError(err.Error())
  583. return
  584. }
  585. // Indexes
  586. if _, err = tx.Exec(`ALTER TABLE blog_cat_post_rel ADD UNIQUE KEY post_category (post_id,category_id) USING BTREE;`); err != nil {
  587. tx.Rollback()
  588. wrap.MsgError(err.Error())
  589. return
  590. }
  591. if _, err = tx.Exec(`ALTER TABLE blog_cat_post_rel ADD KEY FK_blog_cat_post_rel_post_id (post_id);`); err != nil {
  592. tx.Rollback()
  593. wrap.MsgError(err.Error())
  594. return
  595. }
  596. if _, err = tx.Exec(`ALTER TABLE blog_cat_post_rel ADD KEY FK_blog_cat_post_rel_category_id (category_id);`); err != nil {
  597. tx.Rollback()
  598. wrap.MsgError(err.Error())
  599. return
  600. }
  601. if _, err = tx.Exec(`ALTER TABLE blog_cats ADD UNIQUE KEY alias (alias);`); err != nil {
  602. tx.Rollback()
  603. wrap.MsgError(err.Error())
  604. return
  605. }
  606. if _, err = tx.Exec(`ALTER TABLE blog_cats ADD KEY lft (lft), ADD KEY rgt (rgt);`); err != nil {
  607. tx.Rollback()
  608. wrap.MsgError(err.Error())
  609. return
  610. }
  611. if _, err = tx.Exec(`ALTER TABLE blog_cats ADD KEY FK_blog_cats_user (user);`); err != nil {
  612. tx.Rollback()
  613. wrap.MsgError(err.Error())
  614. return
  615. }
  616. if _, err = tx.Exec(`ALTER TABLE blog_posts ADD UNIQUE KEY alias (alias);`); err != nil {
  617. tx.Rollback()
  618. wrap.MsgError(err.Error())
  619. return
  620. }
  621. if _, err = tx.Exec(`ALTER TABLE blog_posts ADD KEY FK_blog_posts_user (user);`); err != nil {
  622. tx.Rollback()
  623. wrap.MsgError(err.Error())
  624. return
  625. }
  626. if _, err = tx.Exec(`ALTER TABLE blog_posts ADD KEY FK_blog_posts_category (category);`); err != nil {
  627. tx.Rollback()
  628. wrap.MsgError(err.Error())
  629. return
  630. }
  631. if _, err = tx.Exec(`ALTER TABLE notify_mail ADD KEY status (status);`); err != nil {
  632. tx.Rollback()
  633. wrap.MsgError(err.Error())
  634. return
  635. }
  636. if _, err = tx.Exec(`ALTER TABLE pages ADD UNIQUE KEY alias (alias);`); err != nil {
  637. tx.Rollback()
  638. wrap.MsgError(err.Error())
  639. return
  640. }
  641. if _, err = tx.Exec(`ALTER TABLE pages ADD KEY alias_active (alias,active) USING BTREE;`); err != nil {
  642. tx.Rollback()
  643. wrap.MsgError(err.Error())
  644. return
  645. }
  646. if _, err = tx.Exec(`ALTER TABLE pages ADD KEY FK_pages_user (user);`); err != nil {
  647. tx.Rollback()
  648. wrap.MsgError(err.Error())
  649. return
  650. }
  651. if _, err = tx.Exec(`ALTER TABLE settings ADD UNIQUE KEY name (name);`); err != nil {
  652. tx.Rollback()
  653. wrap.MsgError(err.Error())
  654. return
  655. }
  656. if _, err = tx.Exec(`ALTER TABLE shop_cat_product_rel ADD UNIQUE KEY product_category (product_id,category_id) USING BTREE;`); err != nil {
  657. tx.Rollback()
  658. wrap.MsgError(err.Error())
  659. return
  660. }
  661. if _, err = tx.Exec(`ALTER TABLE shop_cat_product_rel ADD KEY FK_shop_cat_product_rel_product_id (product_id);`); err != nil {
  662. tx.Rollback()
  663. wrap.MsgError(err.Error())
  664. return
  665. }
  666. if _, err = tx.Exec(`ALTER TABLE shop_cat_product_rel ADD KEY FK_shop_cat_product_rel_category_id (category_id);`); err != nil {
  667. tx.Rollback()
  668. wrap.MsgError(err.Error())
  669. return
  670. }
  671. if _, err = tx.Exec(`ALTER TABLE shop_cats ADD UNIQUE KEY alias (alias);`); err != nil {
  672. tx.Rollback()
  673. wrap.MsgError(err.Error())
  674. return
  675. }
  676. if _, err = tx.Exec(`ALTER TABLE shop_cats ADD KEY lft (lft), ADD KEY rgt (rgt);`); err != nil {
  677. tx.Rollback()
  678. wrap.MsgError(err.Error())
  679. return
  680. }
  681. if _, err = tx.Exec(`ALTER TABLE shop_cats ADD KEY FK_shop_cats_user (user);`); err != nil {
  682. tx.Rollback()
  683. wrap.MsgError(err.Error())
  684. return
  685. }
  686. if _, err = tx.Exec(`ALTER TABLE shop_filter_product_values ADD UNIQUE KEY product_filter_value (product_id,filter_value_id) USING BTREE;`); err != nil {
  687. tx.Rollback()
  688. wrap.MsgError(err.Error())
  689. return
  690. }
  691. if _, err = tx.Exec(`ALTER TABLE shop_filter_product_values ADD KEY FK_shop_filter_product_values_product_id (product_id);`); err != nil {
  692. tx.Rollback()
  693. wrap.MsgError(err.Error())
  694. return
  695. }
  696. if _, err = tx.Exec(`ALTER TABLE shop_filter_product_values ADD KEY FK_shop_filter_product_values_filter_value_id (filter_value_id);`); err != nil {
  697. tx.Rollback()
  698. wrap.MsgError(err.Error())
  699. return
  700. }
  701. if _, err = tx.Exec(`ALTER TABLE shop_filters ADD KEY name (name);`); err != nil {
  702. tx.Rollback()
  703. wrap.MsgError(err.Error())
  704. return
  705. }
  706. if _, err = tx.Exec(`ALTER TABLE shop_filters_values ADD KEY FK_shop_filters_values_filter_id (filter_id);`); err != nil {
  707. tx.Rollback()
  708. wrap.MsgError(err.Error())
  709. return
  710. }
  711. if _, err = tx.Exec(`ALTER TABLE shop_filters_values ADD KEY name (name);`); err != nil {
  712. tx.Rollback()
  713. wrap.MsgError(err.Error())
  714. return
  715. }
  716. if _, err = tx.Exec(`ALTER TABLE shop_product_images ADD UNIQUE KEY product_filename (product_id,filename) USING BTREE;`); err != nil {
  717. tx.Rollback()
  718. wrap.MsgError(err.Error())
  719. return
  720. }
  721. if _, err = tx.Exec(`ALTER TABLE shop_product_images ADD KEY FK_shop_product_images_product_id (product_id);`); err != nil {
  722. tx.Rollback()
  723. wrap.MsgError(err.Error())
  724. return
  725. }
  726. if _, err = tx.Exec(`ALTER TABLE shop_products ADD UNIQUE KEY alias (alias);`); err != nil {
  727. tx.Rollback()
  728. wrap.MsgError(err.Error())
  729. return
  730. }
  731. if _, err = tx.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_user (user);`); err != nil {
  732. tx.Rollback()
  733. wrap.MsgError(err.Error())
  734. return
  735. }
  736. if _, err = tx.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_currency (currency);`); err != nil {
  737. tx.Rollback()
  738. wrap.MsgError(err.Error())
  739. return
  740. }
  741. if _, err = tx.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_category (category);`); err != nil {
  742. tx.Rollback()
  743. wrap.MsgError(err.Error())
  744. return
  745. }
  746. if _, err = tx.Exec(`ALTER TABLE shop_products ADD KEY FK_shop_products_parent_id (parent_id);`); err != nil {
  747. tx.Rollback()
  748. wrap.MsgError(err.Error())
  749. return
  750. }
  751. if _, err = tx.Exec(`ALTER TABLE shop_products ADD KEY name (name);`); err != nil {
  752. tx.Rollback()
  753. wrap.MsgError(err.Error())
  754. return
  755. }
  756. if _, err = tx.Exec(`ALTER TABLE users ADD UNIQUE KEY email (email);`); err != nil {
  757. tx.Rollback()
  758. wrap.MsgError(err.Error())
  759. return
  760. }
  761. // References
  762. if _, err = tx.Exec(`
  763. ALTER TABLE blog_cat_post_rel ADD CONSTRAINT FK_blog_cat_post_rel_post_id
  764. FOREIGN KEY (post_id) REFERENCES blog_posts (id) ON DELETE RESTRICT;
  765. `); err != nil {
  766. tx.Rollback()
  767. wrap.MsgError(err.Error())
  768. return
  769. }
  770. if _, err = tx.Exec(`
  771. ALTER TABLE blog_cat_post_rel ADD CONSTRAINT FK_blog_cat_post_rel_category_id
  772. FOREIGN KEY (category_id) REFERENCES blog_cats (id) ON DELETE RESTRICT;
  773. `); err != nil {
  774. tx.Rollback()
  775. wrap.MsgError(err.Error())
  776. return
  777. }
  778. if _, err = tx.Exec(`
  779. ALTER TABLE blog_cats ADD CONSTRAINT FK_blog_cats_user
  780. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  781. `); err != nil {
  782. tx.Rollback()
  783. wrap.MsgError(err.Error())
  784. return
  785. }
  786. if _, err = tx.Exec(`
  787. ALTER TABLE blog_posts ADD CONSTRAINT FK_blog_posts_user
  788. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  789. `); err != nil {
  790. tx.Rollback()
  791. wrap.MsgError(err.Error())
  792. return
  793. }
  794. if _, err = tx.Exec(`
  795. ALTER TABLE blog_posts ADD CONSTRAINT FK_blog_posts_category
  796. FOREIGN KEY (category) REFERENCES blog_cats (id) ON DELETE RESTRICT;
  797. `); err != nil {
  798. tx.Rollback()
  799. wrap.MsgError(err.Error())
  800. return
  801. }
  802. if _, err = tx.Exec(`
  803. ALTER TABLE pages ADD CONSTRAINT FK_pages_user
  804. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  805. `); err != nil {
  806. tx.Rollback()
  807. wrap.MsgError(err.Error())
  808. return
  809. }
  810. if _, err = tx.Exec(`
  811. ALTER TABLE shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_product_id
  812. FOREIGN KEY (product_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  813. `); err != nil {
  814. tx.Rollback()
  815. wrap.MsgError(err.Error())
  816. return
  817. }
  818. if _, err = tx.Exec(`
  819. ALTER TABLE shop_cat_product_rel ADD CONSTRAINT FK_shop_cat_product_rel_category_id
  820. FOREIGN KEY (category_id) REFERENCES shop_cats (id) ON DELETE RESTRICT;
  821. `); err != nil {
  822. tx.Rollback()
  823. wrap.MsgError(err.Error())
  824. return
  825. }
  826. if _, err = tx.Exec(`
  827. ALTER TABLE shop_cats ADD CONSTRAINT FK_shop_cats_user
  828. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  829. `); err != nil {
  830. tx.Rollback()
  831. wrap.MsgError(err.Error())
  832. return
  833. }
  834. if _, err = tx.Exec(`
  835. ALTER TABLE shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_product_id
  836. FOREIGN KEY (product_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  837. `); err != nil {
  838. tx.Rollback()
  839. wrap.MsgError(err.Error())
  840. return
  841. }
  842. if _, err = tx.Exec(`
  843. ALTER TABLE shop_filter_product_values ADD CONSTRAINT FK_shop_filter_product_values_filter_value_id
  844. FOREIGN KEY (filter_value_id) REFERENCES shop_filters_values (id) ON DELETE RESTRICT;
  845. `); err != nil {
  846. tx.Rollback()
  847. wrap.MsgError(err.Error())
  848. return
  849. }
  850. if _, err = tx.Exec(`
  851. ALTER TABLE shop_filters_values ADD CONSTRAINT FK_shop_filters_values_filter_id
  852. FOREIGN KEY (filter_id) REFERENCES shop_filters (id) ON DELETE RESTRICT;
  853. `); err != nil {
  854. tx.Rollback()
  855. wrap.MsgError(err.Error())
  856. return
  857. }
  858. if _, err = tx.Exec(`
  859. ALTER TABLE shop_product_images ADD CONSTRAINT FK_shop_product_images_product_id
  860. FOREIGN KEY (product_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  861. `); err != nil {
  862. tx.Rollback()
  863. wrap.MsgError(err.Error())
  864. return
  865. }
  866. if _, err = tx.Exec(`
  867. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_user
  868. FOREIGN KEY (user) REFERENCES users (id) ON DELETE RESTRICT;
  869. `); err != nil {
  870. tx.Rollback()
  871. wrap.MsgError(err.Error())
  872. return
  873. }
  874. if _, err = tx.Exec(`
  875. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_currency
  876. FOREIGN KEY (currency) REFERENCES shop_currencies (id) ON DELETE RESTRICT;
  877. `); err != nil {
  878. tx.Rollback()
  879. wrap.MsgError(err.Error())
  880. return
  881. }
  882. if _, err = tx.Exec(`
  883. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_category
  884. FOREIGN KEY (category) REFERENCES shop_cats (id) ON DELETE RESTRICT;
  885. `); err != nil {
  886. tx.Rollback()
  887. wrap.MsgError(err.Error())
  888. return
  889. }
  890. if _, err = tx.Exec(`
  891. ALTER TABLE shop_products ADD CONSTRAINT FK_shop_products_parent_id
  892. FOREIGN KEY (parent_id) REFERENCES shop_products (id) ON DELETE RESTRICT;
  893. `); err != nil {
  894. tx.Rollback()
  895. wrap.MsgError(err.Error())
  896. return
  897. }
  898. // Commit all changes
  899. err = tx.Commit()
  900. if err != nil {
  901. wrap.MsgError(err.Error())
  902. return
  903. }
  904. // Save mysql config file
  905. err = utils.MySqlConfigWrite(wrap.DConfig+string(os.PathSeparator)+"mysql.json", pf_host, pf_port, pf_name, pf_user, pf_password)
  906. if err != nil {
  907. wrap.MsgError(err.Error())
  908. return
  909. }
  910. // Reset robots.txt file
  911. f, err := os.Create(wrap.DTemplate + string(os.PathSeparator) + "robots.txt")
  912. if err == nil {
  913. defer f.Close()
  914. if _, err = f.WriteString("User-agent: *\r\nDisallow: /\r\n"); err != nil {
  915. wrap.MsgError(err.Error())
  916. return
  917. }
  918. }
  919. // Create first config file
  920. if err := wrap.ConfigSave(); err != nil {
  921. wrap.MsgError(err.Error())
  922. return
  923. }
  924. wrap.ResetCacheBlocks()
  925. // Reload current page
  926. wrap.Write(`window.location.reload(false);`)
  927. })
  928. }