1: <?php
2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31:
32:
33:
34: interface projectAclHandlerImpl {
35:
36: function initialize();
37: function getPluginAppId();
38: function enableObject($enable = true);
39: function getAppMainViewItem();
40: function registerAppMenuHandler(&$obj);
41: function setAppMainView(&$pagewrap,&$apphandler,&$baseui,$db,$params_arr);
42: function setAdministrationView(&$pagewrap,&$mainhandler,&$baseui,$params_arr = null);
43:
44: }
45:
46:
47: class projectAclHandler implements projectAclHandlerImpl {
48:
49: private $PLUGIN_APP_ID = PROJECT_APP;
50: private $instance;
51: private $enabled;
52: private $menuhandler;
53: public function __construct (){
54: $this->instance = $this;
55: $this->enabled = true;
56: $this->handler = 'project';
57: $this->appview = 'bmm_erp_project_acl_handler';
58: $this->initialize();
59: }
60:
61: public function initialize(){
62: }
63:
64: public function getPluginAppId(){
65: return $this->PLUGIN_APP_ID;
66: }
67:
68: public function enableObject($enable = true){
69: $this->enabled = $enable;
70: }
71:
72: public function getObjectStatus(){
73: return $this->enabled;
74: }
75:
76: public function getAppMainViewItem(){
77: return $this->appview;
78: }
79:
80: public function registerAppMenuHandler(&$obj){
81: $obj->setMenuObject($this->appview,"access",$this->handler,null,true,'WRITE');
82: }
83:
84: public function registerHttpRequestObjects(&$apphandler){
85: $apphandler->registerHttpRequestObjects(array(get_class($this->instance),$this->appview,"bmm_erp_project_acl_handler_invite","sendProjectUserInvitation",$this->PLUGIN_APP_ID));
86: }
87:
88: public function setAppMainView(&$pagewrap,&$mainhandler,&$baseui,$db,$params_arr){
89: $this->setAdministrationView($pagewrap,$mainhandler,$baseui,$params_arr);
90: }
91:
92: public function setAdministrationView(&$pagewrap,&$mainhandler,&$baseui,$params_arr = null){
93: global $STATUS_LIST;
94:
95: $dataobj = $params_arr['actionhandler']->getDataObject();
96: $target_types = array("member","group");
97:
98:
99: echo "
100: <table style=\"border:0px solid #fff\">
101: <tr>
102: <th colspan=3 style='background-color:#000;color:#fff;font-weight:bold'>{$mainhandler->translator->translate('modify_project_permissions','u')}</th>
103: </tr>";
104: if ($mainhandler->getAppTargetId() &&
105: $mainhandler->verifyApplicationPermission($mainhandler->getAppTargetId(),$mainhandler->getUserId(),null,'WRITE') ){
106:
107: echo "
108: <tr style=\"boddrder:1px solid #000\">
109: <td colspan=3 style='border:0px;color:#727272;background-color:#fff'>
110: <span>
111: <img style=\"margin-right:5px;margin-top:5px\" width=\"24\" heigth=\"24\" src=\"img/recepcionist_add_48.gif\">
112: </span>
113: <span style=\"margin-left:0px\"><a style=\"color: #0014ab;font-weight:bold\" name=\"add_item\" id=\"add_member\" href=\"?page=search&ptype=dialog&handler=user&action=user_search&subaction=member&select=true&category=all_user&appnr=6\" rel=\"gb_page_center[780, 600]\">{$mainhandler->translator->translate('member','u')}</a></span>
114: <span style=\"margin-left:40px\">
115: <img style=\"margin-right:5px;margin-top:5px;\" width=\"24\" heigth=\"24\" src=\"img/niche_fav_48.gif\">
116: <span style=\"margin-left:0px\"><a style=\"color: #0014ab;font-weight:bold\" name=\"add_item\" id=\"add_group\" href=\"?page=search&handler=group&action=group_search&subaction=group&ptype=dialog&select=true&appnr=6\" rel=\"gb_page_center[780, 600]\">{$mainhandler->translator->translate('group','u')}</a></span>
117: </span>
118: <span style=\”margin-left:40px\">
119: <img style=\"margin-right:5px;margin-top:5px\" src=\"img/square.jpg\">
120: </span>
121: </td>
122: </tr>";
123: }else{
124: echo "
125: <tr><td>{$mainhandler->translator->translate('project_write_access_required','u')}</td></tr>";
126: }
127: echo "
128: </table>";
129:
130: echo "
131: <br>
132: <div style=\"float:left;margin:10px 5px 0px 0px;width:600px\">";
133: foreach($target_types as $target){
134: echo "
135: <table class='search_medium'>
136: <tr><td colspan=\"5\" style=\"font-weight:bold;background-color:#eff2f8\">{$mainhandler->translator->translate($target,"u")}</td></tr>
137: <tr style=\"border:0px\">
138: <th style=\"border:0px;width:150px;font-size:12px;font-weight:bold\" >{$mainhandler->translator->translate('name','U')}</td>
139: <th style=\"border:0px;font-size:12px;font-weight:bold\" >{$mainhandler->translator->translate('read','U')}</td>
140: <th style=\"border:0px;font-size:12px;font-weight:bold\" >{$mainhandler->translator->translate('write','U')}</td>
141: <th style=\"border:0px;font-size:12px;font-weight:bold\" >{$mainhandler->translator->translate('create','U')}</td>
142: <th style=\"border:0px;font-size:12px;font-weight:bold\" >{$mainhandler->translator->translate('modify','U')}</td>
143: </tr>";
144: $i = 0;
145: $chre = "";
146: $chwr = "";
147: $chcr = "";
148: $chmd = "";
149: while(1){
150: $chre = null;
151: $chwr = null;
152: $chmd = null;
153: $chcr = null;
154:
155: $accobj = $dataobj->getAppAccessObjByIndx($i);
156: if ( !is_object($accobj) ) break;
157:
158:
159: if ($accobj->getAccessPermTargetType() != $target ) {$i++;continue;}
160: if ($accobj->getAccessRead() == 1) $chre = "checked=\"checked\"";
161: if ($accobj->getAccessWrite() == 1) $chwr = "checked=\"checked\"";
162: if ($accobj->getAccessModify() == 1) $chmd = "checked=\"checked\"";
163: if ($accobj->getAccessCreate() == 1) $chcr = "checked=\"checked\"";
164:
165: echo "
166: <tr style=\"border:0px;background-color: #fff\">
167: <td style=\"border:0px;background-color: #fff;color:#000\">{$accobj->getIdent()}</td>
168: <td style=\"border:0px;\"><input type=\"checkbox\" style=\"width:5px\" style=\"margin:0px;padding:0px\" value=\"acc_re:$i\" onClick=\"javascript:setAccessStatus(this)\" $chre /></td>
169: <td style=\"border:0px;\"><input type=\"checkbox\" style=\"width:5px\" style=\"margin:0px;padding:0px\" value=\"acc_wr:$i\" onClick=\"javascript:setAccessStatus(this)\" $chwr /></td>
170: <td style=\"border:0px;\"><input type=\"checkbox\" style=\"width:5px\" style=\"margin:0px;padding:0px\" value=\"acc_cr:$i\" onClick=\"javascript:setAccessStatus(this)\" $chcr /></td>
171: <td style=\"border:0px;\" ><input type=\"checkbox\" style=\"width:5px\" style=\"margin:0px;padding:0px\" value=\"acc_md:$i\" onClick=\"javascript:setAccessStatus(this)\" $chmd /></td>
172:
173: <input type=\"hidden\" id=\"acc_re:$i\" name=\"acc_re:$i\" value=\"$target:{$accobj->getAccessRead()}\" />
174: <input type=\"hidden\" id=\"acc_wr:$i\" name=\"acc_wr:$i\" value=\"$target:{$accobj->getAccessWrite()}\" />
175: <input type=\"hidden\" id=\"acc_cr:$i\" name=\"acc_cr:$i\" value=\"$target:{$accobj->getAccessCreate()}\" />
176: <input type=\"hidden\" id=\"acc_md:$i\" name=\"acc_md:$i\" value=\"$target:{$accobj->getAccessModify()}\" />
177: <input type=\"hidden\" id=\"acc_perm_t_type:$i\" name=\"acc_perm_t_type:$i\" value=\"$target\" />
178: <input type=\"hidden\" id=\"perm_type_tmp:$i\" name=\"perm_type_tmp:$i\" value=\"$target\" />
179: </tr>";
180: $i++;
181: }
182: echo "
183: </table> ";
184: }
185: echo "
186: <div class=\”clearfix\" style=\"margin-left:400px\">
187: <div style=\"margin-top:30px\">
188: <span><input type=\"checkbox\" style=\"width:5px\" onClick=\"javascript:bmm_erp_project_acl_handler.enable_guest_read_access(this,'{$mainhandler->getProjectId()}')\" /></span>
189: <span>{$mainhandler->translator->translate('enable_guest_access','u')}</span>
190: </div>
191: </div>
192:
193: </div>";
194:
195: if (INSTALL_TYPE != 'SERVER_INSTALL'){
196: echo "
197: <div style=\"margin-top:20px\">
198: <a href=\"javascript:bmm_erp_project_acl_handler.project_registration_invite()\">{$mainhandler->translator->translate('send_invitation','u')}</a>
199: </div>";
200:
201: echo "
202: <div id=\"project_registration_invite_area\" style=\"visibility:hidden\">
203: <div style=\"margin-left:0px;margin-top:50px\">
204: <span style=\"color:#000;font-size:13px;font-weight:bold\">{$mainhandler->translator->translate('name','u')}</span>
205: </div>
206: <div style=\"margin-left:0px;margin-top:0px;\">
207: <span><input style=\"width:400px;font-size:18px;border:1px solid #969696\" type=\"text\" id=\"reg_project_user_name_invite\" name=\"reg_project_user_name_invite\" /></span>
208: </div>
209:
210: <div style=\"margin-left:0px;margin-top:10px\">
211: <span style=\"color:#000;font-size:13px;font-weight:bold\">{$mainhandler->translator->translate('email','u')}</span>
212: </div>
213: <div style=\"margin-left:0px;margin-top:0px;\">
214: <span><input style=\"width:400px;font-size:18px;border:1px solid #969696\" type=\"text\" id=\"reg_project_email_invite\" name=\"reg_project_email_invite\" /></span>
215: </div>";
216:
217: echo "
218: <div style=\"margin-left:160px;margin-top:20px;\">
219: <span>{$mainhandler->translator->translate('send_invitation','u')} !</span>
220: <span style=\"margin-left:20px\"><input type=\"button\" onClick=\"javascript: bmm_erp_project_acl_handler.project_registration_invite_send(this,'{$mainhandler->getProjectId()}');\" value=\"{$mainhandler->translator->translate('send','u')}\"></span>
221: </div>
222: </div>";
223: }
224: }
225:
226: public function sendProjectUserInvitation(&$mainhandler,$data_arr){
227: try {
228: $user_name = $data_arr['user_name'];
229: $email = $data_arr['email'];
230: if (!strstr($email,'@'))
231: return json_encode(array('success'=>false,'msg'=>"{$mainhandler->translator->translate('invalid_email')}"));
232:
233: $mainhandler->setInvitationRequest($email,$token);
234: $this->addProjectMember($mainhandler,$email,$user_name);
235: $token = $mainhandler->getSecureToken();
236: $mainhandler->setInvitationRequest($email,$token);
237: if (!$this->emailProjectUserInvitation($mainhandler,$email,$token))
238: throw new Exception('failed to sent invitation');
239: }catch (Exception $e){
240: return json_encode(array('success'=>false,'msg'=>"{$mainhandler->translator->translate('failed_to_sent_invitation')}"));
241: }
242: return json_encode(array('success'=>true,'msg'=>"{$mainhandler->translator->translate('invite_sent_to')} $email"));
243: }
244:
245: private function addProjectMember(&$mainhandler,$user_id,$user_name){
246: try {
247:
248: $mainhandler->managerhandler->initialize();
249: $mainhandler->managerhandler->setUserLoginId($user_id);
250: $mainhandler->managerhandler->setUserName($user_name);
251: $mainhandler->managerhandler->setUserEmail($user_id);
252: $mainhandler->managerhandler->syncStorageInsert();
253: }catch(Exception $e){
254:
255: }
256:
257: try {
258: $uid = $mainhandler->managerhandler->verifyLoginId($user_id);
259:
260: $mainhandler->setAccessPermissions(PROJECT_APP,$mainhandler->getProjectId(),$uid,"member","default",array('read' => true));
261: $mainhandler->syncStorage();
262: }catch (Exception $e){
263: error_log("error: {$e->getMessage()}");
264: throw new Exception($e->getMessage());
265: }
266: }
267:
268: private function emailProjectUserInvitation(&$mainhandler,$email,$token){
269: $username = "{$mainhandler->getFullname()}";
270: $url = "{$mainhandler->getApplicationUrl()}/?page=manage&handler=register&action=project_member_registration&view=member&token=$token";
271: $msg ="
272: <html>
273: <body>
274: <div style=\"margin-top:20px;margin-left:10px\">
275: <span>$username {$mainhandler->translator->translate('has_invited_you_to_scrumix_project','u')} {$mainhandler->getProjectKey()}</span>
276: </div>
277: <br>
278: <div style=\"margin-left:10px\">
279: <span>{$mainhandler->translator->translate('click','u')} <a style=\"font-weight:bold\" href=\"$url\">$url</a> {$mainhandler->translator->translate('and_activate_you_project_membership')} !</span>
280: </div>";
281:
282: return $this->send($mainhandler,$email,$msg);
283: }
284:
285: private function send(&$mainhandler,$to,$message){
286:
287: $hostname = "scrumix@scrumix.com";
288: $subject = "{$mainhandler->translator->translate('invitation_to_scrumix_project','u')}";
289: $headers = "From: $hostname \r\n".
290: "Reply-To: NO-REPLY \r\n".
291: "Content-type: text/html\r\n";
292:
293: return mail( $to, $subject, $message, $headers );
294: }
295:
296:
297:
298: }?>
299: