選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

142 行
3.6 KiB

  1. // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd.
  2. // MIT License. See license.txt
  3. // misc user functions
  4. wn.user_info = function(uid) {
  5. var def = {
  6. 'fullname':uid,
  7. 'image': 'lib/images/ui/avatar.png'
  8. }
  9. if(!wn.boot.user_info) return def
  10. if(!wn.boot.user_info[uid]) return def
  11. if(!wn.boot.user_info[uid].fullname)
  12. wn.boot.user_info[uid].fullname = uid;
  13. if(!wn.boot.user_info[uid].image)
  14. wn.boot.user_info[uid].image = def.image;
  15. return wn.boot.user_info[uid];
  16. }
  17. wn.avatar = function(user, large, title) {
  18. var image = wn.utils.get_file_link(wn.user_info(user).image);
  19. var to_size = large ? 72 : 30;
  20. if(!title) title = wn.user_info(user).fullname;
  21. return repl('<span class="avatar %(small_or_large)s" title="%(title)s">\
  22. <img src="%(image)s"></span>', {
  23. image: image,
  24. title: title,
  25. small_or_large: large ? "avatar-large" : "avatar-small"
  26. });
  27. }
  28. wn.ui.set_user_background = function(src) {
  29. if(!src) src = "lib/images/ui/field.jpg";
  30. wn.dom.set_style(repl('#page-desktop { \
  31. position: fixed;\
  32. left: 0px; min-width: 100%; height: 100%; overflow: auto;\
  33. padding-top: 14px; \
  34. background: url("%(src)s") no-repeat center center fixed; \
  35. -webkit-background-size: cover; -moz-background-size: cover; \
  36. -o-background-size: cover; \
  37. background-size: cover;\
  38. }', {src:src}))
  39. }
  40. wn.provide('wn.user');
  41. $.extend(wn.user, {
  42. name: (wn.boot ? wn.boot.profile.name : 'Guest'),
  43. full_name: function(uid) {
  44. return uid===user ?
  45. "You" :
  46. wn.user_info(uid).fullname;
  47. },
  48. image: function(uid) {
  49. return wn.user_info(uid).image;
  50. },
  51. avatar: function(uid, large) {
  52. return wn.avatar(uid, large);
  53. },
  54. has_role: function(rl) {
  55. if(typeof rl=='string')
  56. rl = [rl];
  57. for(var i in rl) {
  58. if((wn.boot ? wn.boot.profile.roles : ['Guest']).indexOf(rl[i])!=-1)
  59. return true;
  60. }
  61. },
  62. get_desktop_items: function() {
  63. // get user sequence preference
  64. var user_list = wn.defaults.get_default("_desktop_items");
  65. if(user_list && user_list.length)
  66. var modules_list = user_list;
  67. if(modules_list) {
  68. // add missing modules - they will be hidden anyways by the view
  69. $.each(wn.modules, function(m, data) {
  70. if(modules_list.indexOf(m)==-1) {
  71. modules_list.push(m);
  72. }
  73. });
  74. }
  75. if(!modules_list || !modules_list.length) {
  76. // all modules
  77. modules_list = keys(wn.modules).sort();
  78. }
  79. // filter hidden modules
  80. if(wn.boot.hidden_modules && modules_list) {
  81. var hidden_list = JSON.parse(wn.boot.hidden_modules);
  82. var modules_list = $.map(modules_list, function(m) {
  83. if(hidden_list.indexOf(m)==-1) return m; else return null;
  84. });
  85. }
  86. // hide based on permission
  87. modules_list = $.map(modules_list, function(m) {
  88. var type = wn.modules[m] && wn.modules[m].type;
  89. var ret = null;
  90. switch(type) {
  91. case "module":
  92. if(wn.boot.profile.allow_modules.indexOf(m)!=-1)
  93. ret = m;
  94. break;
  95. case "page":
  96. if(wn.boot.allowed_pages.indexOf(wn.modules[m].link)!=-1)
  97. ret = m;
  98. break;
  99. case "list":
  100. if(wn.model.can_read(wn.modules[m].doctype))
  101. ret = m;
  102. break;
  103. case "view":
  104. ret = m;
  105. break;
  106. case "setup":
  107. ret = m;
  108. break;
  109. default:
  110. ret = m;
  111. }
  112. return ret;
  113. })
  114. return modules_list;
  115. },
  116. is_report_manager: function() {
  117. return wn.user.has_role(['Administrator', 'System Manager', 'Report Manager']);
  118. }
  119. })
  120. wn.session_alive = true;
  121. $(document).bind('mousemove', function() {
  122. if(wn.session_alive===false) {
  123. $(document).trigger("session_alive");
  124. }
  125. wn.session_alive = true;
  126. if(wn.session_alive_timeout)
  127. clearTimeout(wn.session_alive_timeout);
  128. wn.session_alive_timeout = setTimeout('wn.session_alive=false;', 30000);
  129. })