query.js 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482
  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 = entityToHtml(val.description);
  268. var geo = val.geo;
  269. var imgUrlThumb = getImageUrl(val.img, 'thumb');
  270. $(div_title).html(title);
  271. var img = imgUrlThumb != "" ? "<a href='" + getImageUrl(val.img, 'large') + "'>" +
  272. "<img src='" + imgUrlThumb + "'/>" +
  273. "</a><br>" : "";
  274. $(div_content).html(img + "<small>" + evInitDate +"-" + evEndDate +"</small><p>" + content + "</p>");
  275. renderShareButton(div_content, title, url, evInitDate + " "+ evEndDate);
  276. }
  277. }
  278. function myJsonPost(Qid, div_title, div_content, _class) {
  279. var table = POST.table;
  280. if(_class){
  281. table = EVENTS.table.single;
  282. }
  283. FONTE.dbHandler.executeSql("SELECT DISTINCT * FROM " + table + " WHERE id = ?;", [Qid], function(resultSet) {
  284. if(!_class){
  285. drawPost(div_title, div_content, resultSet);
  286. } else {
  287. drawEvent(div_title, div_content, resultSet);
  288. }
  289. }, sqlErrHandler);
  290. }
  291. function myJsonPage(Qid, div_title, div_content) {
  292. $.mobile.loading('show');
  293. var pageId = parseInt(Qid);
  294. FONTE.dbHandler.executeSql("SELECT DISTINCT * FROM xm24_pages WHERE id = ?;", [pageId], function (resultSet) {
  295. for (var i = 0; i < resultSet.rows.length; i++) {
  296. var data = resultSet.rows.item(i);
  297. var id = data.id;
  298. var time = data.time;
  299. var title = data.title;
  300. var content = data.page;
  301. content = findImg(content);
  302. $(div_title).html(title);
  303. $(div_content).html("<p>" + content + "</p>");
  304. }
  305. });
  306. $.mobile.loading('hide');
  307. }
  308. function myJsonRandomPost(div_title, div_content) {
  309. $.mobile.loading('show');
  310. FONTE.dbHandler.executeSql("SELECT DISTINCT * FROM xm24_posts ORDER BY RANDOM() LIMIT 1;", [], function (resultSet) {
  311. for (var i = 0; i < resultSet.rows.length; i++) {
  312. var val = JSON.parse(resultSet.rows.item(i).post);
  313. var id = val.id;
  314. var time = val.modified;
  315. var title = val.title.rendered;
  316. var url = val.guid.rendered;
  317. var content = val.content.rendered;
  318. content = findImg(content);
  319. $(div_title).html(title);
  320. //key mi dice l'indice'
  321. $(div_content).html("<p>" + content + "</p>");
  322. }
  323. });
  324. $.mobile.loading('hide');
  325. }
  326. function createDB() {
  327. //crea il databse per i posts se non esiste
  328. FONTE.dbHandler = window.sqlitePlugin.openDatabase({
  329. name: FONTE.dbName,
  330. location: 'default'
  331. }, function () {
  332. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_posts (id INTEGER PRIMARY KEY, title, date, post)');
  333. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_cats (catid INTEGER PRIMARY KEY, title, cat)');
  334. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_cats_to_posts (id, catid, PRIMARY KEY (id, catid))');
  335. //FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags (id INTEGER PRIMARY KEY, title, tag)');
  336. //FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags_to_posts (id, tagid)');
  337. //FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_pages (id INTEGER PRIMARY KEY, title, date, page)');
  338. FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_events_single (id INTEGER PRIMARY KEY, title, description, initDate, endDate, url, geo, img)');
  339. //FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_tags_to_events (id, tagid)');
  340. //FONTE.dbHandler.executeSql('CREATE TABLE IF NOT EXISTS xm24_events_repeat (id INTEGER PRIMARY KEY, title, description, initDate, endDate, url, geo)');
  341. }, function () {
  342. console.log('error');
  343. console.log(arguments);
  344. });
  345. }
  346. function insertOrUpdateCatToPost(id, catId) {
  347. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_cats_to_posts VALUES (?,?)', [id, catId], function (resultSet) {
  348. console.log('resultSet.insertId: ' + resultSet.insertId);
  349. console.log('resultSet.rowsAffected: ' + resultSet.rowsAffected);
  350. }, function (error) {
  351. console.log('INSERT error: ' + error.message);
  352. //feedback
  353. $("#aggiorna").attr("src", "./image/aggiorna.png");
  354. });
  355. }
  356. function deleteDB() {
  357. window.sqlitePlugin.deleteDatabase({
  358. name: FONTE.dbName,
  359. location: 'default'
  360. });
  361. var storage = window.localStorage;
  362. storage.setItem('db_update_date', null);
  363. storage.setItem('db_lastnews_date', null);
  364. createDB();
  365. }
  366. function getSinglePageRecur(url, category, pagenum) {
  367. $.ajax({
  368. dataType: "json",
  369. url: url + "&categories=" + category + "&page=" + pagenum,
  370. success: function (data, textStatus, jqXHR) {
  371. var totalPages = jqXHR.getResponseHeader('X-WP-TotalPages');
  372. if (pagenum == totalPages || totalPages === 0) FONTE.updatedCategoriesCount += 1;
  373. FONTE.neededPostsCount += data.length;
  374. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.neededPostsCount === 0) {
  375. toastr.info('Nessun nuovo articolo.');
  376. var date = new Date();
  377. var currentUpdate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
  378. currentUpdate += 'T' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
  379. var lastUpdate = window.localStorage.getItem('db_update_date');
  380. window.localStorage.setItem('db_update_date', currentUpdate);
  381. window.localStorage.setItem('db_lastnews_date', lastUpdate);
  382. //feedback
  383. $("#aggiorna").attr("src", "./image/aggiorna.png");
  384. }
  385. $.each(data, function (key, val) {
  386. var id = val.id;
  387. var time = val.date;
  388. var title = val.title.rendered;
  389. var tags = val.tags;
  390. var blob = JSON.stringify(val);
  391. FONTE.dbHandler.executeSql('INSERT OR REPLACE INTO xm24_posts VALUES (?,?,?,?,?)', [id, title, time, category, blob], function (resultSet) {
  392. FONTE.updatedPostsCount += 1;
  393. console.log('Voci aggiornate: ' + FONTE.updatedPostsCount);
  394. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  395. //window.localStorage.setItem('has_run', 'true');
  396. var date = new Date();
  397. var currentUpdate = date.getFullYear() + '-' + ('0' + (date.getMonth() + 1)).slice(-2) + '-' + ('0' + date.getDate()).slice(-2);
  398. currentUpdate += 'T' + ('0' + date.getHours()).slice(-2) + ':' + ('0' + date.getMinutes()).slice(-2) + ':' + ('0' + date.getSeconds()).slice(-2);
  399. var lastUpdate = window.localStorage.getItem('db_update_date');
  400. window.localStorage.setItem('db_update_date', currentUpdate);
  401. window.localStorage.setItem('db_lastnews_date', lastUpdate);
  402. toastr.info('Aggiornati ' + FONTE.updatedPostsCount + ' articoli.');
  403. //feedback
  404. $("#aggiorna").attr("src", "./image/aggiorna.png");
  405. displayLastUpdateDate();
  406. } //manca il caso in cui sono stati cancellati dei post online, vanno cancellati anche dall'app.
  407. }, function (error) {
  408. FONTE.updatedPostsCount += 1;
  409. if (FONTE.updatedCategoriesCount >= FONTE.categoriesList.length && FONTE.updatedPostsCount >= FONTE.neededPostsCount) {
  410. toastr.info('Aggiornati ' + FONTE.updatedPostsCount + ' articoli.');
  411. //feedback
  412. $("#aggiorna").attr("src", "./image/aggiorna.png");
  413. }
  414. });
  415. $.each(tags, function (key, val) {
  416. aggiornaTagsToPosts(id, val);
  417. });
  418. });
  419. if (pagenum < totalPages) {
  420. pagenum += 1;
  421. getSinglePageRecur(url, category, pagenum);
  422. }
  423. },
  424. error: JSONErrorHandler
  425. });
  426. }