query.js 18 KB

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