4
0

invites.js 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546
  1. /* PHP MAILER JS FILE */
  2. /*
  3. $(document).on('click', '#PHPMAILER-settings-button', function() {
  4. var post = {
  5. plugin:'PHPMailer/settings/get', // used for switch case in your API call
  6. api:'api/?v1/plugin', // API Endpoint will always be this for custom plugin API calls
  7. name:$(this).attr('data-plugin-name'),
  8. configName:$(this).attr('data-config-name'),
  9. messageTitle:'', // Send succees message title (top line)
  10. messageBody:'Disabled '+$(this).attr('data-plugin-name'), // Send succees message body (bottom line)
  11. error:'Organizr Function: API Connection Failed' // conole error message
  12. };
  13. var callbacks = $.Callbacks(); // init callbacks var
  14. //callbacks.add( ); // add function to callback to be fired after API call
  15. //settingsAPI(post,callbacks); // exec API call
  16. //ajaxloader(".content-wrap","in");
  17. //setTimeout(function(){ buildPlugins();ajaxloader(); }, 3000);
  18. });
  19. */
  20. // FUNCTIONS
  21. inviteLaunch()
  22. function inviteLaunch(){
  23. if(typeof activeInfo == 'undefined'){
  24. setTimeout(function () {
  25. inviteLaunch();
  26. }, 1000);
  27. }else{
  28. var menuList = '';
  29. var htmlDOM = `
  30. <div id="invite-area" class="white-popup mfp-with-anim mfp-hide">
  31. <div class="col-md-10 col-md-offset-1">
  32. <div class="invite-div"></div>
  33. </div>
  34. </div>
  35. `;
  36. if(activeInfo.plugins["INVITES-enabled"] == true){
  37. if (activeInfo.user.loggedin === true && activeInfo.user.groupID <= 1) {
  38. menuList = `<li><a class="inline-popups inviteModal" href="#invite-area" data-effect="mfp-zoom-out"><i class="fa fa-ticket fa-fw"></i> <span lang="en">Manage Invites</span></a></li>`;
  39. htmlDOM += `
  40. <div id="new-invite-area" class="white-popup mfp-with-anim mfp-hide">
  41. <div class="col-md-10 col-md-offset-1">
  42. <div class="col-md-12">
  43. <div class="panel panel-info m-b-0">
  44. <div class="panel-heading" lang="en">New Invite</div>
  45. <div class="panel-wrapper collapse in" aria-expanded="true">
  46. <div class="panel-body">
  47. <form id="new-invite-form">
  48. <fieldset style="border:0;">
  49. <div class="form-group">
  50. <label class="control-label" for="new-invite-form-inputUsername" lang="en">Name or Username</label>
  51. <input type="text" class="form-control" id="new-invite-form-inputUsername" name="username" required="" autofocus="">
  52. </div>
  53. <div class="form-group">
  54. <label class="control-label" for="new-invite-form-inputEmail" lang="en">Email</label>
  55. <input type="text" class="form-control" id="new-invite-form-inputEmail" name="email" required="" autofocus="">
  56. </div>
  57. </fieldset>
  58. <button class="btn btn-sm btn-info btn-rounded waves-effect waves-light pull-right row b-none" onclick="createNewInvite();" type="button"><span class="btn-label"><i class="fa fa-plus"></i></span><span lang="en">Create/Send Invite</span></button>
  59. <div class="clearfix"></div>
  60. </form>
  61. </div>
  62. </div>
  63. </div>
  64. </div>
  65. <div class="clearfix"></div>
  66. </div>
  67. </div>`;
  68. }else if (activeInfo.user.loggedin === false){
  69. menuList = `<li><a class="inline-popups inviteModal" href="#invite-area" data-effect="mfp-zoom-out"><i class="fa fa-ticket fa-fw"></i> <span lang="en">Use Invite Code</span></a></li>`;
  70. }
  71. $('.append-menu').after(menuList);
  72. $('.organizr-area').after(htmlDOM);
  73. pageLoad();
  74. getInvite();
  75. }
  76. }
  77. }
  78. function joinPlex(){
  79. var username = $('#invitePlexJoinUsername');
  80. var email = $('#invitePlexJoinEmail');
  81. var password = $('#invitePlexJoinPassword');
  82. if(username.val() == ''){
  83. username.focus();
  84. message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  85. }else if(email.val() == ''){
  86. email.focus();
  87. message('Invite Error',' Please Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  88. }else if(password.val() == ''){
  89. password.focus();
  90. message('Invite Error',' Please Enter Passowrd',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  91. }
  92. if(email.val() !== '' && username.val() !== '' && password.val() !== ''){
  93. organizrAPI('POST','api/?v1/plex/join',{username:username.val(), email:email.val(), password:password.val()}).success(function(data) {
  94. var response = JSON.parse(data);
  95. if(response.data === true){
  96. $('.invite-step-3-plex-no').toggleClass('hidden');
  97. $('.invite-step-3-plex-yes').toggleClass('hidden');
  98. message('Invite Function',' User Created',activeInfo.settings.notifications.position,'#FFF','success','5000');
  99. $('#inviteUsernameInvite').val(username.val());
  100. hasPlexUsername();
  101. }else{
  102. message('Invite Error',' '+response.data,activeInfo.settings.notifications.position,'#FFF','warning','5000');
  103. }
  104. }).fail(function(xhr) {
  105. console.error("Organizr Function: API Connection Failed");
  106. });
  107. }
  108. }
  109. function joinEmby(){
  110. var username = $('#inviteEmbyJoinUsername');
  111. var email = $('#inviteEmbyJoinEmail');
  112. var password = $('#inviteEmbyJoinPassword');
  113. if(username.val() == ''){
  114. username.focus();
  115. message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  116. }else if(email.val() == ''){
  117. email.focus();
  118. message('Invite Error',' Please Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  119. }else if(password.val() == ''){
  120. password.focus();
  121. message('Invite Error',' Please Enter Passowrd',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  122. }
  123. if(email.val() !== '' && username.val() !== '' && password.val() !== ''){
  124. organizrAPI('POST','api/?v1/emby/join',{username:username.val(), email:email.val(), password:password.val()}).success(function(data) {
  125. var response = JSON.parse(data);
  126. if(response.data === true){
  127. $('.invite-step-3-emby-no').toggleClass('hidden');
  128. $('.invite-step-3-emby-yes').toggleClass('hidden');
  129. message('Invite Function',' User Created',activeInfo.settings.notifications.position,'#FFF','success','5000');
  130. $('#inviteUsernameInviteEmby').val(username.val());
  131. hasEmbyUsername();
  132. }else{
  133. message('Invite Error',' '+response.data,activeInfo.settings.notifications.position,'#FFF','warning','5000');
  134. }
  135. }).fail(function(xhr) {
  136. console.error("Organizr Function: API Connection Failed");
  137. });
  138. }
  139. }
  140. function inviteHasAccount(type,value){
  141. switch (type) {
  142. case 'plex':
  143. if(value){
  144. $('.invite-step-2').toggleClass('hidden');
  145. $('.invite-step-3-plex-yes').toggleClass('hidden');
  146. }else{
  147. $('.invite-step-2').toggleClass('hidden');
  148. $('.invite-step-3-plex-no').toggleClass('hidden');
  149. }
  150. break;
  151. case 'emby' :
  152. if(value){
  153. $('.invite-step-2').toggleClass('hidden');
  154. $('.invite-step-3-emby-yes').toggleClass('hidden');
  155. }else{
  156. $('.invite-step-2').toggleClass('hidden');
  157. $('.invite-step-3-emby-no').toggleClass('hidden');
  158. }
  159. break;
  160. default:
  161. alert(type+' is not set up yet');
  162. }
  163. }
  164. function hasPlexUsername(){
  165. var code = $('#inviteCodeInput').val().toUpperCase();
  166. var username = $('#inviteUsernameInvite');
  167. if(username.val() == ''){
  168. username.focus();
  169. message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  170. }else{
  171. var post = {
  172. plugin:'Invites/codes',
  173. action:'use',
  174. code:code,
  175. usedby:username.val()
  176. };
  177. ajaxloader(".content-wrap","in");
  178. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  179. var response = JSON.parse(data);
  180. if(response.data === true){
  181. $('.invite-step-3-plex-yes').toggleClass('hidden');
  182. $('.invite-step-4-plex-accept').toggleClass('hidden');
  183. if(local('get', 'invite')){
  184. local('remove', 'invite');
  185. }
  186. }else{
  187. message('Invite Error',' Code Incorrect',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  188. }
  189. ajaxloader();;
  190. }).fail(function(xhr) {
  191. console.error("Organizr Function: API Connection Failed");
  192. ajaxloader();
  193. });
  194. }
  195. }
  196. function hasEmbyUsername(){
  197. var code = $('#inviteCodeInput').val().toUpperCase();
  198. var username = $('#inviteUsernameInviteEmby');
  199. if(username.val() == ''){
  200. username.focus();
  201. message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  202. }else{
  203. var post = {
  204. plugin:'Invites/codes',
  205. action:'use',
  206. code:code,
  207. usedby:username.val()
  208. };
  209. ajaxloader(".content-wrap","in");
  210. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  211. var response = JSON.parse(data);
  212. if(response.data === true){
  213. $('.invite-step-3-emby-yes').toggleClass('hidden');
  214. $('.invite-step-4-emby-accept').toggleClass('hidden');
  215. if(local('get', 'invite')){
  216. local('remove', 'invite');
  217. }
  218. }else{
  219. message('Invite Error',' Code Incorrect',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  220. }
  221. ajaxloader();;
  222. }).fail(function(xhr) {
  223. console.error("Organizr Function: API Connection Failed");
  224. ajaxloader();
  225. });
  226. }
  227. }
  228. function verifyInvite(){
  229. var code = $('#inviteCodeInput').val().toUpperCase();
  230. var post = {
  231. plugin:'Invites/codes',
  232. action:'check',
  233. code:code
  234. };
  235. ajaxloader(".content-wrap","in");
  236. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  237. var response = JSON.parse(data);
  238. if(response.data === true){
  239. $('.invite-step-1').toggleClass('hidden');
  240. $('.invite-step-2').toggleClass('hidden');
  241. }else{
  242. message('Invite Error',' Code Incorrect',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  243. }
  244. if(local('get', 'invite')){
  245. local('remove', 'invite');
  246. }
  247. ajaxloader();;
  248. }).fail(function(xhr) {
  249. console.error("Organizr Function: API Connection Failed");
  250. ajaxloader();
  251. });
  252. }
  253. function getInvite(invite=null){
  254. if(invite){
  255. local('set','invite',invite);
  256. }
  257. if($.urlParam('invite') !== null){
  258. local('set','invite',$.urlParam('invite'));
  259. }
  260. if(local('get', 'invite')){
  261. //show error page
  262. $('.inviteModal').trigger('click');
  263. $('#inviteCodeInput').val(local('get', 'invite'));
  264. window.history.pushState({}, document.title, "./" );
  265. local('remove', 'invite');
  266. }
  267. }
  268. function createNewInvite(){
  269. var username = $('#new-invite-form-inputUsername');
  270. var email = $('#new-invite-form-inputEmail');
  271. if(username.val() == ''){
  272. username.focus();
  273. message('Invite Error',' Please Enter Username',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  274. }else if(email.val() == ''){
  275. email.focus();
  276. message('Invite Error',' Please Enter Email',activeInfo.settings.notifications.position,'#FFF','warning','5000');
  277. }
  278. if(email.val() !== '' && username.val() !== ''){
  279. var post = {
  280. plugin:'Invites/codes',
  281. action:'create',
  282. code:createRandomString(6).toUpperCase(),
  283. email:email.val(),
  284. username:username.val(),
  285. };
  286. ajaxloader(".content-wrap","in");
  287. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  288. var response = JSON.parse(data);
  289. $.magnificPopup.close();
  290. ajaxloader();
  291. message('Invite',' Invite Created',activeInfo.settings.notifications.position,'#FFF','success','5000');
  292. }).fail(function(xhr) {
  293. console.error("Organizr Function: API Connection Failed");
  294. ajaxloader();
  295. message('Invite Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','error','5000');
  296. });
  297. }
  298. }
  299. function deleteInvite(id){
  300. var post = {
  301. plugin:'Invites/codes',
  302. action:'delete',
  303. id:id,
  304. };
  305. ajaxloader(".content-wrap","in");
  306. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  307. var response = JSON.parse(data);
  308. $('#inviteItem-'+id).remove();
  309. //$.magnificPopup.close();
  310. ajaxloader();
  311. message('Invite',' Invite Deleted',activeInfo.settings.notifications.position,'#FFF','success','5000');
  312. }).fail(function(xhr) {
  313. console.error("Organizr Function: API Connection Failed");
  314. ajaxloader();
  315. message('Invite Error',' An Error Occured',activeInfo.settings.notifications.position,'#FFF','error','5000');
  316. });
  317. }
  318. // EVENTS and LISTENERS
  319. function buildInvites(array){
  320. if(array.length == 0){
  321. return '<h2 class="text-center" lang="en">No Invites</h2>';
  322. }
  323. var invites = '';
  324. $.each(array, function(i,v) {
  325. v.dateused = (v.dateused) ? v.dateused : '-';
  326. v.usedby = (v.usedby) ? v.usedby : '-';
  327. v.ip = (v.ip) ? v.ip : '-';
  328. invites += `
  329. <tr id="inviteItem-`+v.id+`">
  330. <td class="text-center">`+v.id+`</td>
  331. <td>`+v.username+`</td>
  332. <td>`+v.email+`</td>
  333. <td>`+v.code+`</td>
  334. <td>`+v.date+`</td>
  335. <td>`+v.dateused+`</td>
  336. <td>`+v.usedby+`</td>
  337. <td>`+v.ip+`</td>
  338. <td>`+v.valid+`</td>
  339. <td><button type="button" class="btn btn-danger btn-outline btn-circle btn-lg m-r-5" onclick="deleteInvite('`+v.id+`');"><i class="ti-trash"></i></button></td>
  340. </tr>
  341. `;
  342. });
  343. return invites;
  344. }
  345. $(document).on('click', '.inviteModal', function() {
  346. var htmlDOM = '';
  347. if (activeInfo.user.loggedin === true && activeInfo.user.groupID <= 1) {
  348. var post = {
  349. plugin:'Invites/codes',
  350. action:'get',
  351. };
  352. ajaxloader(".content-wrap","in");
  353. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  354. var response = JSON.parse(data);
  355. var htmlDOM = '';
  356. htmlDOM = `
  357. <div class="col-md-12">
  358. <div class="panel bg-org panel-info">
  359. <div class="panel-heading">
  360. <span lang="en">Manage Invites</span>
  361. <button type="button" class="btn btn-info btn-circle pull-right popup-with-form" href="#new-invite-area" data-effect="mfp-3d-unfold"><i class="fa fa-plus"></i> </button>
  362. </div>
  363. <div class="table-responsive">
  364. <table class="table table-hover manage-u-table">
  365. <thead>
  366. <tr>
  367. <th width="70" class="text-center">#</th>
  368. <th lang="en">USERNAME</th>
  369. <th lang="en">EMAIL</th>
  370. <th lang="en">INVITE CODE</th>
  371. <th lang="en">DATE SENT</th>
  372. <th lang="en">DATE USED</th>
  373. <th lang="en">USED BY</th>
  374. <th lang="en">IP ADDRESS</th>
  375. <th lang="en">VALID</th>
  376. <th lang="en">DELETE</th>
  377. </tr>
  378. </thead>
  379. <tbody id="manageInviteTable">
  380. `+buildInvites(response.data)+`
  381. </tbody>
  382. </table>
  383. </div>
  384. </div>
  385. </div>
  386. <div class="clearfix"></div>
  387. `;
  388. $('.invite-div').html(htmlDOM);
  389. }).fail(function(xhr) {
  390. console.error("Organizr Function: API Connection Failed");
  391. });
  392. ajaxloader();
  393. }else if (activeInfo.user.loggedin === false){
  394. htmlDOM = `
  395. <div class="col-md-12">
  396. <div class="panel panel-info m-b-0">
  397. <div class="panel-heading" lang="en">Use Invite Code</div>
  398. <div class="panel-wrapper collapse in" aria-expanded="true">
  399. <div class="panel-body">
  400. <div class="form-group invite-step-1">
  401. <div class="input-group" style="width: 100%;">
  402. <div class="input-group-addon hidden-xs"><i class="ti-lock"></i></div>
  403. <input type="text" class="form-control text-uppercase" id="inviteCodeInput" placeholder="Code" autocomplete="off" autocorrect="off" autocapitalize="off" maxlength="6" spellcheck="false" autofocus="" required="">
  404. </div>
  405. <br />
  406. <button class="btn btn-block btn-info" onclick="verifyInvite();">Verify</button>
  407. </div>
  408. <div class="form-group invite-step-2 hidden">
  409. <div class="row">
  410. <h2 class="text-center" lang="en">Do you have a `+activeInfo.plugins.includes["INVITES-type-include"].toUpperCase()+` account?</h2>
  411. <div class="col-lg-6">
  412. <button class="btn btn-block btn-info m-b-10" onclick="inviteHasAccount('`+activeInfo.plugins.includes["INVITES-type-include"]+`',true);" lang="en">Yes</button>
  413. </div>
  414. <div class="col-lg-6">
  415. <button class="btn btn-block btn-primary m-b-10" onclick="inviteHasAccount('`+activeInfo.plugins.includes["INVITES-type-include"]+`',false);" lang="en">No</button>
  416. </div>
  417. </div>
  418. </div>
  419. <div class="form-group invite-step-3-plex-yes hidden">
  420. <div class="input-group" style="width: 100%;">
  421. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  422. <input type="text" class="form-control" id="inviteUsernameInvite" placeholder="Plex Username or Email" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" required="">
  423. </div>
  424. <br />
  425. <button class="btn btn-block btn-info" onclick="hasPlexUsername();">Submit</button>
  426. </div>
  427. <div class="form-group invite-step-3-plex-no hidden">
  428. <div class="input-group" style="width: 100%;">
  429. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  430. <input type="text" class="form-control" id="invitePlexJoinUsername" lang="en" placeholder="Username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" required="">
  431. </div>
  432. <div class="input-group" style="width: 100%;">
  433. <div class="input-group-addon hidden-xs"><i class="ti-email"></i></div>
  434. <input type="text" class="form-control" id="invitePlexJoinEmail" lang="en" placeholder="E-Mail" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" required="">
  435. </div>
  436. <div class="input-group" style="width: 100%;">
  437. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  438. <input type="password" class="form-control" id="invitePlexJoinPassword" lang="en" placeholder="Password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" required="">
  439. </div>
  440. <br />
  441. <button class="btn btn-block btn-info" onclick="joinPlex();">Submit</button>
  442. </div>
  443. <div class="form-group invite-step-4-plex-accept hidden">
  444. <h4 class="" lang="en">You have been invited. Please goto <a href="https://plex.tv" target="_blank">PLEX.TV</a> and login to accept the invite. Once you have done that, you may head back here and login with your credentials.</h4>
  445. </div>
  446. <!-- Begin Emby Invites -->
  447. <div class="form-group invite-step-3-emby-yes hidden">
  448. <div class="input-group" style="width: 100%;">
  449. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  450. <input type="text" class="form-control" id="inviteUsernameInviteEmby" placeholder="Emby Username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" required="">
  451. </div>
  452. <br />
  453. <button class="btn btn-block btn-info" onclick="hasEmbyUsername();">Submit</button>
  454. </div>
  455. <div class="form-group invite-step-3-emby-no hidden">
  456. <div class="input-group" style="width: 100%;">
  457. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  458. <input type="text" class="form-control" id="inviteEmbyJoinUsername" lang="en" placeholder="Username" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" autofocus="" required="">
  459. </div>
  460. <div class="input-group" style="width: 100%;">
  461. <div class="input-group-addon hidden-xs"><i class="ti-email"></i></div>
  462. <input type="text" class="form-control" id="inviteEmbyJoinEmail" lang="en" placeholder="E-Mail" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" required="">
  463. </div>
  464. <div class="input-group" style="width: 100%;">
  465. <div class="input-group-addon hidden-xs"><i class="ti-user"></i></div>
  466. <input type="password" class="form-control" id="inviteEmbyJoinPassword" lang="en" placeholder="Password" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" required="">
  467. </div>
  468. <br />
  469. <button class="btn btn-block btn-info" onclick="joinEmby();">Submit</button>
  470. </div>
  471. <div class="form-group invite-step-4-emby-accept hidden">
  472. <h4 class="" lang="en">You Have been added to emby!</h4>
  473. </div>
  474. </div>
  475. </div>
  476. </div>
  477. </div>
  478. <div class="clearfix"></div>
  479. `;
  480. $('.invite-div').html(htmlDOM);
  481. }
  482. });
  483. // CHANGE CUSTOMIZE Options
  484. $(document).on('change asColorPicker::close', '#INVITES-settings-page1 :input', function(e) {
  485. var input = $(this);
  486. switch ($(this).attr('type')) {
  487. case 'switch':
  488. case 'checkbox':
  489. var value = $(this).prop("checked") ? true : false;
  490. break;
  491. default:
  492. var value = $(this).val().toString();
  493. }
  494. var post = {
  495. api:'api/?v1/update/config',
  496. name:$(this).attr("name"),
  497. type:$(this).attr("data-type"),
  498. value:value,
  499. messageTitle:'',
  500. messageBody:'Updated Value for '+$(this).parent().parent().find('label').text(),
  501. error:'Organizr Function: API Connection Failed'
  502. };
  503. var callbacks = $.Callbacks();
  504. //callbacks.add( buildCustomizeAppearance );
  505. settingsAPI(post,callbacks);
  506. //disable button then renable
  507. $('#INVITES-settings-page :input').prop('disabled', 'true');
  508. setTimeout(
  509. function(){
  510. $('#INVITES-settings-page :input').prop('disabled', null);
  511. input.emulateTab();
  512. },
  513. 2000
  514. );
  515. });
  516. $(document).on('click', '#INVITES-settings-button', function() {
  517. var post = {
  518. plugin:'Invites/settings/get', // used for switch case in your API call
  519. };
  520. ajaxloader(".content-wrap","in");
  521. organizrAPI('POST','api/?v1/plugin',post).success(function(data) {
  522. var response = JSON.parse(data);
  523. $('#INVITES-settings-items').html(buildFormGroup(response.data));
  524. $('.selectpicker').selectpicker();
  525. }).fail(function(xhr) {
  526. console.error("Organizr Function: API Connection Failed");
  527. });
  528. ajaxloader();
  529. });