query.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460
  1. function myJsonCategory(Qcategory, div, addTagCategory) {
  2. $.mobile.loading('show');
  3. FONTE.dbHandler.executeSql("SELECT * FROM xm24_posts WHERE category = ? ORDER BY date COLLATE NOCASE DESC;", [Qcategory], function (resultSet) {
  4. var items = [];
  5. for (var i = 0; i < resultSet.rows.length; i++) {
  6. var val = JSON.parse(resultSet.rows.item(i).post);
  7. var id = val.id;
  8. var time = val.modified;
  9. var title = val.title.rendered;
  10. var url = val.guid.rendered;
  11. var splitTime = time.split("T");
  12. var cleanTime = splitTime[0];
  13. var tag = '';
  14. var cattag = '';
  15. /* if (addTagCategory) {
  16. $.each(val.tags, function (index, value) {
  17. if (value == 43) {
  18. }
  19. if (value == 36) {
  20. }
  21. });
  22. //key mi dice l'indice'
  23. items.push("<li class='"+ cattag +"'><a href='#singleQpost' data-post='" + id + "'>" + title + "</a><br/><small>" + cleanTime + "</small><span>" + tag + "</span>|</li>");
  24. }
  25. else {*/
  26. items.push("<li><a href='#singleQpost' data-post='" + id + "'>" + title + "</a><br/><small>" + cleanTime + "</small></li>");
  27. }
  28. $("<ul/>", {
  29. "class": "my-new-list",
  30. html: items.join("")
  31. }).prependTo(div);
  32. });
  33. $.mobile.loading('hide');
  34. }
  35. var drawListPost = function(div, resultSet, position) {
  36. var items = [];
  37. for (var i = 0; i < resultSet.rows.length; i++) {
  38. var val = JSON.parse(resultSet.rows.item(i).post);
  39. var id = val.id;
  40. var date = val.date;
  41. var title = val.title.rendered;
  42. var url = val.guid.rendered;
  43. var cleanTime = EVENTS.formatDate(date, EVENTS.dateFormat.display.date);
  44. var li = "<li>"+
  45. "<a href='#singleQpost' data-post='" + id + "'>" +
  46. title +
  47. "</a>"+
  48. "<br/>"+
  49. "<small>" + cleanTime + "</small>"+
  50. "<hr class='post-divider'>"+
  51. "</li>";
  52. items.push(li);
  53. }
  54. var ul = $("<ul/>", {
  55. html: items.join("")
  56. });
  57. if(position == 'append'){
  58. ul.appendTo(div);
  59. } else if(position == 'prepend'){
  60. ul.prependTo(div);
  61. }
  62. };
  63. var appendPostList = function(div, resultSet, categories, fallback) {
  64. var type = getObjKey(FONTE.categories, categories);
  65. if (resultSet.rows.length > 0) {
  66. FONTE.page_loaded[type]++;
  67. drawListPost(div, resultSet, 'append');
  68. } else if (fallback) {
  69. fallback();
  70. } else {
  71. toastr.info("Non ci sono altri articoli da visualizzare");
  72. }
  73. };
  74. var prependPostsList = function(div, resultSet, categories, fallback) {
  75. var type = getObjKey(FONTE.categories, categories);
  76. $(div).empty();
  77. if (resultSet.rows.length > 0) {
  78. FONTE.page_loaded[type]++;
  79. drawListPost(div, resultSet, 'prepend');
  80. } else if (fallback) {
  81. fallback(div, categories);
  82. } else {
  83. drawNoPostsFound(div);
  84. }
  85. };
  86. function drawNoPostsFound(div) {
  87. $(div).empty();
  88. $(div).append('<span>Non ci sono nuovi contenuti.</span>');
  89. }
  90. function sqlErrHandler(error){
  91. console.log(error.message);
  92. }
  93. var getCategoryWhere = function(categories) {
  94. var catsWhere = "";
  95. for(var i = 0, len = categories.length; i < len; i++) {
  96. var cat = categories[i];
  97. var c = 'catid = '+ cat + ' ';
  98. if(i === 0) {
  99. catsWhere = '(' + c;
  100. } else if(i == len -1) {
  101. catsWhere += 'OR ' + c + ')';
  102. } else {
  103. catsWhere += 'OR ' + c;
  104. }
  105. }
  106. return catsWhere;
  107. };
  108. var POST = POST || {};
  109. POST.sql = {
  110. init: "SELECT * FROM xm24_posts JOIN xm24_cats_to_posts USING(id) WHERE ",
  111. end : "ORDER BY date COLLATE NOCASE DESC LIMIT ?"
  112. };
  113. var selectLastNews = function(div, categories) {
  114. var catsWhere = getCategoryWhere(categories);
  115. var sql = POST.sql.init + catsWhere + POST.sql.end;
  116. FONTE.dbHandler.executeSql(sql, [REST_PARAMS.max_page], function (resultSet) {
  117. prependPostsList(div, resultSet, categories);
  118. }, sqlErrHandler);
  119. };
  120. function renderLastNews(div, categories) {
  121. var storage = window.localStorage;
  122. var type = getObjKey(FONTE.categories, categories);
  123. var lastnewsDate = storage.getItem('db_last_' + type + '_date');
  124. var firstTime = storage.getItem('db_last_' + type + '_firsttime');
  125. if (firstTime == 'yes') {
  126. selectLastNews(div, categories);
  127. } else if (firstTime == 'no') {
  128. if (lastnewsDate) {
  129. var sql = POST.sql.init + "date > ? AND " + getCategoryWhere(categories) + POST.sql.end;
  130. FONTE.dbHandler.executeSql(sql, [lastnewsDate, REST_PARAMS.max_page], function (resultSet) {
  131. prependPostsList(div, resultSet, categories, selectLastNews);
  132. }, sqlErrHandler);
  133. } else {
  134. selectLastNews(div, categories);
  135. toastr.info("Non ci sono nuovi contenuti");
  136. }
  137. } else {
  138. drawNoPostsFound(div);
  139. }
  140. }
  141. function renderPrevNews(div, categories, page, callback){
  142. var sql = POST.sql.init + getCategoryWhere(categories) + POST.sql.end + ', ?';
  143. FONTE.dbHandler.executeSql(sql, [page * REST_PARAMS.max_page, (page+1) * REST_PARAMS.max_page], function (resultSet) {
  144. appendPostList(div, resultSet, categories, callback);
  145. }, sqlErrHandler);
  146. }
  147. function myJsonLastPage(div) {
  148. var storage = window.localStorage;
  149. var lastnewsDate = storage.getItem('db_lastnews_date');
  150. var firstTime = storage.getItem('db_lastnews_firsttime');
  151. if (firstTime != 'yes') {
  152. if (lastnewsDate) {
  153. FONTE.dbHandler.executeSql("SELECT * FROM xm24_posts WHERE date > ? ORDER BY date COLLATE NOCASE DESC LIMIT 40;", [lastnewsDate], function (resultSet) {
  154. var items = [];
  155. $(div).empty();
  156. if (resultSet.rows.length > 0) {
  157. for (var i = 0; i < resultSet.rows.length; i++) {
  158. var val = JSON.parse(resultSet.rows.item(i).post);
  159. var id = val.id;
  160. var time = val.modified;
  161. var title = val.title.rendered;
  162. var url = val.guid.rendered;
  163. // console.log(Url);
  164. var splitTime = time.split("T");
  165. var cleanTime = splitTime[0];
  166. //key mi dice l'indice'
  167. items.push("<li><a href='#singleQpost' data-post='" + id + "'>" + title + "</a><br/><small>" + cleanTime + "</small>");
  168. }
  169. $("<ul/>", {
  170. "class": "my-new-list",
  171. html: items.join("")
  172. }).prependTo(div);
  173. } else {
  174. $(div).empty();
  175. $(div).append('<span>Non ci sono nuovi contenuti.</span>');
  176. }
  177. });
  178. } else {
  179. $(div).empty();
  180. $(div).append('<span>Tutti i contenuti sono nuovi.</span>');
  181. }
  182. } else {
  183. $(div).empty();
  184. $(div).append('<span>Tutti i contenuti sono nuovi.</span>');
  185. }
  186. }
  187. function myJsonCategoryPaginated(Qcategory, div, pageNumber) {
  188. $.mobile.loading('show');
  189. FONTE.dbHandler.executeSql("SELECT * FROM xm24_posts WHERE category = ? ORDER BY date COLLATE NOCASE DESC;", [Qcategory], function (resultSet) {
  190. var items = [];
  191. $(div).empty();
  192. for (var i = 0; i < resultSet.rows.length; i++) {
  193. var val = JSON.parse(resultSet.rows.item(i).post);
  194. var id = val.id;
  195. var time = val.modified;
  196. var title = val.title.rendered;
  197. var url = val.guid.rendered;
  198. var tag = val.tags;
  199. var splitTime = time.split("T");
  200. var cleanTime = splitTime[0];
  201. //key mi dice l'indice'
  202. items.push("<li><a href='#singleQpost' data-post='" + id + "'>" + title + "</a><br/><small>" + cleanTime + "</small></li>");
  203. }
  204. $("<ul/>", {
  205. "class": "my-new-list",
  206. html: items.join("")
  207. }).prependTo(div);
  208. }, function (error) {
  209. console.log('errore myJsonCategoryPaginated: ' + error);
  210. });
  211. $.mobile.loading('hide');
  212. }
  213. function drawPost(div_title, div_content, resultSet){
  214. for (var i = 0; i < resultSet.rows.length; i++) {
  215. var val = JSON.parse(resultSet.rows.item(i).post);
  216. var id = val.id;
  217. var time = val.date;
  218. var title = val.title.rendered;
  219. var url = val.guid.rendered;
  220. var content = val.content.rendered;
  221. var tags = val.tags;
  222. content = findImg(content);
  223. $(div_title).html(title);
  224. var shareButton = $('<button>', {
  225. class : "share-btn ui-btn ui-shadow ui-corner-all",
  226. text: "Condividi"
  227. }).click(function(){
  228. shareMeNow(title, '',url);
  229. });
  230. $('.share-btn').remove();
  231. $(div_content).html("<p>" + content + "</p>");
  232. $(div_content).after(shareButton);
  233. }
  234. }
  235. function drawEvent(div_title, div_content, resultSet){
  236. for (var i = 0; i < resultSet.rows.length; i++) {
  237. var val = resultSet.rows.item(i);
  238. var evInitDate = EVENTS.formatDate(val.initDate, EVENTS.displayDateFormat);
  239. var evEndDate = EVENTS.formatDate(val.endDate, EVENTS.displayDateFormat);
  240. var id = val.id;
  241. var title = val.title;
  242. var url = val.url;
  243. var content = val.description;
  244. var geo = val.geo;
  245. $(div_title).html(title);
  246. var shareButton = $('<button>', {
  247. class : "share-btn ui-btn ui-shadow ui-corner-all",
  248. text: "Condividi"
  249. }).click(function(){
  250. shareMeNow(title, evInitDate + " "+ evEndDate, url);
  251. });
  252. $('.share-btn').remove();
  253. $(div_content).html("<small>" + evInitDate +"-" + evEndDate +"</small><p>" + content + "</p>");
  254. $(div_content).after(shareButton);
  255. }
  256. }
  257. function myJsonPost(Qid, div_title, div_content, _class) {
  258. var table = "xm24_posts";
  259. if(_class){
  260. table = EVENTS.table.single;
  261. }
  262. FONTE.dbHandler.executeSql("SELECT * FROM " + table + " WHERE id = ?;", [Qid], function(resultSet) {
  263. if(!_class){
  264. drawPost(div_title, div_content, resultSet);
  265. } else {
  266. drawEvent(div_title, div_content, resultSet);
  267. }
  268. }, function (error) {
  269. console.log(error);
  270. });
  271. }
  272. function myJsonPage(Qid, div_title, div_content) {
  273. $.mobile.loading('show');
  274. var pageId = parseInt(Qid);
  275. FONTE.dbHandler.executeSql("SELECT * FROM xm24_pages WHERE id = ?;", [pageId], function (resultSet) {
  276. for (var i = 0; i < resultSet.rows.length; i++) {
  277. var data = resultSet.rows.item(i);
  278. var id = data.id;
  279. var time = data.time;
  280. var title = data.title;
  281. var content = data.page;
  282. content = findImg(content);
  283. $(div_title).html(title);
  284. //key mi dice l'indice'
  285. $(div_content).html("<p>" + content + "</p>");
  286. }
  287. });
  288. $.mobile.loading('hide');
  289. }
  290. function myJsonRandomPost(div_title, div_content) {
  291. $.mobile.loading('show');
  292. FONTE.dbHandler.executeSql("SELECT * FROM xm24_posts ORDER BY RANDOM() LIMIT 1;", [], function (resultSet) {
  293. for (var i = 0; i < resultSet.rows.length; i++) {
  294. var val = JSON.parse(resultSet.rows.item(i).post);
  295. var id = val.id;
  296. var time = val.modified;
  297. var title = val.title.rendered;
  298. var url = val.guid.rendered;
  299. var content = val.content.rendered;
  300. content = findImg(content);
  301. $(div_title).html(title);
  302. //key mi dice l'indice'
  303. $(div_content).html("<p>" + content + "</p>");
  304. }
  305. });
  306. $.mobile.loading('hide');
  307. }
  308. function createDB() {
  309. //crea il databse per i posts se non esiste
  310. FONTE.dbHandler = window.sqlitePlugin.openDatabase({
  311. name: FONTE.dbName,
  312. location: 'default'
  313. }, function () {
  314. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_posts (id INTEGER PRIMARY KEY, title, date, post)');
  315. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_cats (catid INTEGER PRIMARY KEY, title, cat)');
  316. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_cats_to_posts (id, catid, PRIMARY KEY (id, catid))');
  317. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags (id INTEGER PRIMARY KEY, title, tag)');
  318. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags_to_posts (id, tagid)');
  319. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_pages (id INTEGER PRIMARY KEY, title, date, page)');
  320. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_events_single (id INTEGER PRIMARY KEY, title, description, initDate, endDate, url, geo)');
  321. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags_to_events (id, tagid)');
  322. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_events_repeat (id INTEGER PRIMARY KEY, title, description, initDate, endDate, url, geo)');
  323. }, function () {
  324. console.log('error');
  325. console.log(arguments);
  326. });
  327. }
  328. function insertOrUpdateCatToPost(id, catId) {
  329. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_cats_to_posts VALUES (?,?)', [id, catId], function (resultSet) {
  330. console.log('resultSet.insertId: ' + resultSet.insertId);
  331. console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected);
  332. }, function (error) {
  333. console.log('INSERT error: ' + error.message);
  334. //feedback
  335. $("#aggiorna").attr("src", "./image/aggiorna.png");
  336. });
  337. }
  338. function deleteDB() {
  339. window.sqlitePlugin.deleteDatabase({
  340. name: FONTE.dbName,
  341. location: 'default'
  342. });
  343. var storage = window.localStorage;
  344. storage.setItem('db_update_date', null);
  345. storage.setItem('db_lastnews_date', null);
  346. createDB();
  347. }
  348. function getSinglePageRecur(url, category, pagenum) {
  349. $.ajax({
  350. dataType: "json",
  351. url: url + "&categories=" + category + "&page=" + pagenum,
  352. success: function (data, textStatus, jqXHR) {
  353. var totalPages = jqXHR.getResponseHeader('X-WP-TotalPages');
  354. if (pagenum == totalPages || totalPages === 0) FONTE.updatedCategoriesCount += 1;
  355. FONTE.neededPostsCount += data.length;
  356. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.neededPostsCount === 0) {
  357. toastr.info('Nessun nuovo articolo.');
  358. var date = new Date();
  359. var currentUpdate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
  360. currentUpdate += 'T' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
  361. var lastUpdate = window.localStorage.getItem('db_update_date');
  362. window.localStorage.setItem('db_update_date', currentUpdate);
  363. window.localStorage.setItem('db_lastnews_date', lastUpdate);
  364. //feedback
  365. $("#aggiorna").attr("src", "./image/aggiorna.png");
  366. }
  367. $.each(data, function (key, val) {
  368. var id = val.id;
  369. var time = val.date;
  370. var title = val.title.rendered;
  371. var tags = val.tags;
  372. var blob = JSON.stringify(val);
  373. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_posts VALUES (?,?,?,?,?)', [id, title, time, category, blob], function (resultSet) {
  374. FONTE.updatedPostsCount += 1;
  375. console.log('Voci aggiornate: ' + FONTE.updatedPostsCount);
  376. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  377. //window.localStorage.setItem('has_run', 'true');
  378. var date = new Date();
  379. var currentUpdate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
  380. currentUpdate += 'T' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
  381. var lastUpdate = window.localStorage.getItem('db_update_date');
  382. window.localStorage.setItem('db_update_date', currentUpdate);
  383. window.localStorage.setItem('db_lastnews_date', lastUpdate);
  384. toastr.info('Aggiornati ' + FONTE.updatedPostsCount + ' articoli.');
  385. //feedback
  386. $("#aggiorna").attr("src", "./image/aggiorna.png");
  387. displayLastUpdateDate();
  388. } //manca il caso in cui sono stati cancellati dei post online, vanno cancellati anche dall'app.
  389. }, function (error) {
  390. FONTE.updatedPostsCount += 1;
  391. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  392. toastr.info('Aggiornati ' + FONTE.updatedPostsCount + ' articoli.');
  393. //feedback
  394. $("#aggiorna").attr("src", "./image/aggiorna.png");
  395. }
  396. });
  397. $.each(tags, function (key, val) {
  398. aggiornaTagsToPosts(id, val);
  399. });
  400. });
  401. if (pagenum < totalPages) {
  402. pagenum += 1;
  403. getSinglePageRecur(url, category, pagenum);
  404. }
  405. },
  406. error: JSONErrorHandler
  407. });
  408. }