PageRenderTime 58ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/s3db3.5.10/s3dbcore/insert_entries.php

https://code.google.com/p/s3db/
PHP | 689 lines | 426 code | 183 blank | 80 comment | 62 complexity | 53591bbf9ee157c8c0855e9d69df0115 MD5 | raw file
  1. <?php
  2. function insertLogs($uid, $info, $user_id, $db)
  3. {
  4. $letter = strtoupper(substr($uid, 0,1));
  5. $oldvalues = $info[$uid];
  6. $action = 'delete';
  7. switch ($letter) {
  8. case 'R':
  9. {
  10. $rule_info = $info[$uid];
  11. insert_rule_log(compact('oldvalues', 'action', 'rule_info', 'user_id', 'db'));
  12. }
  13. break;
  14. case 'S':
  15. {
  16. $statement_info = $info[$uid];
  17. #echo '<pre>';print_r($oldvalues);exit;
  18. insert_statement_log(compact('oldvalues', 'action', 'statement_info', 'user_id', 'db'));
  19. }
  20. break;
  21. case 'U':
  22. {
  23. $user_info = $info[$uid];
  24. insert_access_log(compact('user_id', 'db'));
  25. }
  26. break;
  27. }
  28. }
  29. function insert_statement($S)
  30. {
  31. #Extract the simple vars
  32. extract($S);
  33. if(is_array($statement_info))
  34. extract($statement_info);
  35. $created_by = $user_id;
  36. if($created_on =='')
  37. $created_on = 'now()';
  38. else
  39. $created_on = "'".$created_on."'";
  40. if ($modified_on==''|| $modified_on==0)
  41. $modified_on = 'null';
  42. else
  43. $modified_on = "'".$modified_on."'";
  44. if($statement_id=='')
  45. $statement_id = s3id();
  46. #$statement_id = find_latest_UID('statement', $db)+1;
  47. #$statement_id = str_replace (array('.', ' '),'', microtime());
  48. $sql = "insert into s3db_statement(statement_id, project_id, resource_id, rule_id, value, notes, file_name, mime_type, file_size, created_on, created_by, permission, status) values ('".$statement_id."', '".$project_id."', '".$resource_id."', '".$rule_id."', '".$value."', '".$notes."', '".$filename."', '".$mimetype."', '".$filesize."',".$created_on.", '".$created_by."', '".$project_id."_', 'A')";
  49. #echo $sql;exit;
  50. $db->query($sql, __LINE__, __FILE__);
  51. $dbdata = get_object_vars($db);
  52. if($dbdata['Errno']==0) return array(TRUE, $GLOBALS['messages']['success'].'<statement_id>'.$statement_id.'</statement_id>');
  53. else
  54. return array(False);
  55. }
  56. function insert_statement_log($S)
  57. {
  58. extract($S);
  59. if(is_array($statement_info))
  60. extract($statement_info);
  61. $tableFields = array('statement_id', 'rule_id', 'resource_id', 'project_id', 'value', 'notes', 'created_on', 'created_by');
  62. foreach ($tableFields as $a_field) {
  63. if($inputs[$a_field]=='')
  64. $oldvalues[$a_field] = $statement_info[$a_field];
  65. }
  66. #echo '<pre>';print_r($inputs);
  67. $statement_log_id = s3id();
  68. $modified_by=$user_id;
  69. $sql = "insert into s3db_statement_log (statement_log_id, statement_id, old_rule_id, old_resource_id, old_project_id, old_value, old_notes, action, modified_by, modified_on, created_on, created_by) values ('".$statement_log_id."', '".$oldvalues['statement_id']."', '".$oldvalues['rule_id']."','".$oldvalues['resource_id']."','".$oldvalues['project_id']."','".$oldvalues['value']."','".$oldvalues['notes']."','".$action."','".$modified_by."', now(), '".$oldvalues['created_on']."', '".$oldvalues['created_by']."')";
  70. #echo $sql;exit;
  71. $db->query($sql, __LINE__, __FILE__);
  72. $dbdata = get_object_vars($db);
  73. if($dbdata['Errno']==0) return TRUE;
  74. else
  75. {$sql = "insert into s3db_statement_log (statement_log_id, statement_id, old_rule_id, old_resource_id, old_project_id, old_value, old_notes, action, modified_by, modified_on, created_on, created_by) values ('', '".$oldvalues['statement_id']."', '".$oldvalues['rule_id']."','".$oldvalues['resource_id']."','".$oldvalues['project_id']."','".$oldvalues['value']."','".$oldvalues['notes']."','".$action."','".$modified_by."', now(), '".$oldvalues['created_on']."', '".$oldvalues['created_by']."')";
  76. #echo $sql;
  77. $db->query($sql, __LINE__, __FILE__);
  78. }
  79. }
  80. function insert_access_log($S)
  81. {
  82. extract($S);
  83. if($_SESSION['db']) { $session_id= session_id();}
  84. else { $session_id= 'key'; }
  85. $sql = "insert into s3db_access_log (session_id,login_timestamp,login_id,ip) values ('".$session_id."',now(),'','".$user_id."','".$_SERVER['REMOTE_ADDR']."')";
  86. $db->query($sql);
  87. if($db->Errno==0){
  88. return (true);
  89. }
  90. else {
  91. return (false);
  92. }
  93. }
  94. function insert_rule($R)
  95. {
  96. extract($R);
  97. if($rule_id=='')
  98. $rule_id = s3id();
  99. #$rule_id = str_replace (array('.', ' '),'', microtime());
  100. $sql = "insert into s3db_rule (rule_id, project_id, subject, verb, object, notes, created_on, created_by, permission, subject_id, verb_id, object_id, validation, status) values ('".$rule_id."', '".$rule_info['project_id']."', '".$rule_info['subject']."','".$rule_info['verb']."','".$rule_info['object']."','".$rule_info['notes']."', now(),'".$user_id."', '_".$rule_info['project_id']."_', '".$rule_info['subject_id']."', '".$rule_info['verb_id']."', '".$rule_info['object_id']."', '".$rule_info['validation']."', 'A')";
  101. #echo $sql;
  102. $db->query($sql, __LINE__, __FILE__);
  103. $dbdata = get_object_vars($db);
  104. $rule_info['rule_id'] = find_latest_UID('rule', $db);
  105. $action = 'create';
  106. $inputs = array('newsubject'=>$rule_info['subject'], 'newverb'=>$rule_info['verb'], 'newobject'=>$rule_info['object'], 'newnotes'=>$rule_info['notes']);
  107. $oldvalues = array('oldsubject'=>'', 'oldsverb'=>'', 'oldsobject'=>'');
  108. $log = compact('action', 'inputs','project_id', 'oldvalues', 'rule_info', 'user_id', 'db');
  109. #echo $sql;
  110. #exit;
  111. if($dbdata['Errno']==0)
  112. {
  113. $logged = insert_rule_log($log);
  114. return TRUE;
  115. }
  116. else #try again, make compatible with older versions
  117. {
  118. $sql = "insert into s3db_rule (project_id, subject, verb, object, notes, created_on, created_by, permission, subject_id, object_id, status) values ('".$rule_info['project_id']."', '".$rule_info['subject']."','".$rule_info['verb']."','".$rule_info['object']."','".$rule_info['notes']."', now(),'".$user_id."', '".$rule_info['project_id']."_', '".$rule_info['subject_id']."', '".$rule_info['object_id']."', 'A')";
  119. $db->query($sql, __LINE__, __FILE__);
  120. $dbdata = get_object_vars($db);
  121. if($dbdata['Errno']==0)
  122. {
  123. $logged = insert_rule_log($log);
  124. return TRUE;
  125. }
  126. else
  127. return FALSE;
  128. }
  129. }
  130. function insert_rule_log($R)
  131. {
  132. extract($R);
  133. #echo '<pre>';print_r($R);exit;
  134. $old_table_fields = array('subject', 'verb', 'object', 'subject_id', 'verb_id', 'object_id', 'notes');
  135. if($oldvalues!='')
  136. {
  137. foreach ($old_table_fields as $oldfield) {
  138. if($oldvalues[$oldfield]=='')
  139. $oldvalues[$oldfield] = $rule_info[$oldfield];
  140. }
  141. $rule_info['oldvalues']=$oldvalues;
  142. }
  143. $new_table_fields = array('subject', 'verb', 'object', 'subject_id', 'verb_id', 'object_id', 'notes');
  144. foreach ($new_table_fields as $newfield) {
  145. if($action!='delete'){
  146. if($inputs[$newfield]!='')
  147. $rule_info[$newfield] = $inputs[$newfield];
  148. }
  149. else {
  150. $rule_info[$newfield]='';
  151. }
  152. }
  153. if($rule_info['action_by']=='') $rule_info['action_by']=$user_id;
  154. #$sql ="insert into s3db_rule_change_log (project_id, rule_id, action, action_by, action_timestamp, new_subject, new_verb, new_object, new_notes, old_subject, old_verb, old_object, old_notes) values ('".$rule_info['project_id']."', '".$rule_info['rule_id']."', '".$action."', '".$rule_info['action_by']."', now(), '".$rule_info['subject']."', '".$rule_info['verb']."', '".$rule_info['object']."', '".$rule_info['notes']."', '".$rule_info['oldsubject']."', '".$rule_info['oldverb']."', '".$rule_info['oldobject']."', '".$rule_info['oldnotes']."')";
  155. $sql ="insert into s3db_rule_change_log (project_id, rule_id, action, action_by, action_timestamp, new_subject, new_verb, new_object, new_subject_id, new_verb_id, new_object_id, new_notes, old_subject, old_verb, old_object, old_subject_id, old_verb_id, old_object_id, old_notes) values ('".$rule_info['project_id']."', '".$rule_info['rule_id']."', '".$action."', '".$rule_info['action_by']."', now(), '".$rule_info['subject']."', '".$rule_info['verb']."', '".$rule_info['object']."', '".$rule_info['subject_id']."', '".$rule_info['verb_id']."', '".$rule_info['object_id']."', '".$rule_info['notes']."', '".$rule_info['oldvalues']['subject']."', '".$rule_info['oldvalues']['verb']."', '".$rule_info['oldvalues']['object']."', '".$rule_info['oldvalues']['subject_id']."', '".$rule_info['oldvalues']['verb_id']."', '".$rule_info['oldvalues']['object_id']."','".$rule_info['oldnotes']."')";
  156. #echo $sql;exit;
  157. $db->query($sql, __LINE__, __FILE__);
  158. $dbdata = get_object_vars($db);
  159. if($dbdata['Errno']==0) return TRUE;
  160. else return FALSE;
  161. }
  162. function insert_address($U)
  163. {
  164. extract($U);
  165. #if($inputs['addr1']!=''||$inputs['addr2']!=''||$inputs['city']!=''||$inputs['state']!=''||$inputs['postal_code']!=''||$inputs['country']!='')
  166. #{
  167. $sql = "insert into s3db_addr(addr_id, addr1, addr2, city, state, postal_code, country) values('".s3id()."','".$inputs['addr1']."','".$inputs['addr2']."','".$inputs['city']."','".$inputs['state']."','".$inputs['postal_code']."','".$inputs['country']."')";
  168. $db->query($sql, __LINE__, __FILE__);
  169. #$addr_id = $db->get_last_insert_id('s3db_addr', 'addr_id');
  170. #Find the latest adress UID
  171. $sql = "SELECT addr_id FROM s3db_addr WHERE addr_id = (SELECT max(addr_id) FROM s3db_addr)";
  172. $db-> query($sql, __LINE__, __FILE__);
  173. if($db->next_record())
  174. {
  175. $addr_id = $db->f('addr_id');
  176. }
  177. if($addr_id != '')
  178. {
  179. return $addr_id;
  180. }
  181. else {
  182. return (-10);
  183. }
  184. #}
  185. #else {
  186. $sql = "insert into s3db_addr (addr_id) values('1')";
  187. $db->query($sql, __LINE__, __FILE__);
  188. return (-10);
  189. #}
  190. }
  191. function insert_file_for_transfer($filedata, $user_id, $db)
  192. {
  193. $sql = "insert into s3db_file_transfer (file_id, filename, filesize, status, expires, filekey, created_by) values ('".$filedata['file_id']."', '".$filedata['filename']."', '".$filedata['filesize']."', '".$filedata['status']."', '".$filedata['expires']."', '".$filedata['filekey']."', '".$user_id."')";
  194. #echo $sql;
  195. $db->query($sql, __LINE__, __FILE__);
  196. $dbdata = get_object_vars($db);
  197. if($dbdata['Errno']==0) return TRUE;
  198. else return FALSE;
  199. }
  200. function insert_permission($Z)
  201. {#function insert +_pemission makes an entry on s3db_permissions, that specifies what permission a certain resource has on another resource
  202. #Syntax: insert_permission(compact('permission_info', 'db', 'user_id'))
  203. extract($Z);
  204. $uid = $permission_info['uid'];
  205. #some ids can be swapped, that is class is swapped with rule "hasUID" and instance is swapped with statement of rule "hasUID"
  206. if(!is_array($info[$uid]))
  207. $info[$uid] = URI($uid, $user_id, $db);
  208. $permission_info['id']=substr($permission_info['uid'], 1, strlen($permission_info['uid']));
  209. if(strlen($permission_info['permission_level'])=='2')
  210. $permission_info['permission_level'] = $permission_info['permission_level'].substr($permission_info['permission_level'], -1);
  211. $sql = "insert into s3db_permission (uid, id, shared_with, permission_level, created_by, created_on, pl_view, pl_change, pl_use, id_num, id_code, shared_with_num, shared_with_code) values ('".$permission_info['uid']."','".$permission_info['id']."', '".$permission_info['shared_with']."', '".$permission_info['permission_level']."', '".$user_id."', now(), '".substr($permission_info['permission_level'],0,1)."','".substr($permission_info['permission_level'],1,1)."','".substr($permission_info['permission_level'],0,1)."', '".$permission_info['id']."', '".strtoupper(substr($permission_info['uid'],0,1))."', '".substr($permission_info['shared_with'],1,strlen($permission_info['shared_with']))."', '".strtoupper(substr($permission_info['shared_with'],0,1))."')";
  212. #echo $sql.chr(10);
  213. $db->query($sql, __LINE__, __FILE__);
  214. #echo '<pre>';print_r($db);
  215. #exit;
  216. if($new_id!='')
  217. { $sql = "insert into s3db_permission (uid, id, shared_with, permission_level, created_by, created_on) values ('".$new_id."','".substr($new_id, 1, strlen($new_id))."', '".$permission_info['shared_with']."', '".$permission_info['permission_level']."', '".$user_id."', now())";
  218. $db->query($sql, __LINE__, __FILE__);
  219. }
  220. $dbdata = get_object_vars($db);
  221. ##Now Change the queryMethod to b such that the permissions file is updated whenever a new permission is added
  222. if(is_file($GLOBALS['uploads'].'/queryMethod'))
  223. file_put_contents($GLOBALS['uploads'].'/queryMethod', 'a');
  224. #echo $sql;
  225. #echo '<pre>';print_r($dbdata);
  226. if($dbdata['Errno']==0)
  227. return TRUE;
  228. else
  229. return False;
  230. }
  231. function insert_s3db($D)
  232. {#insert_s3db(compact('element', 'inputs', 'user_id', 'db'));
  233. #this is meant to be a general function for every insert, froum user to group. It create the entry, based on information on array $info and adds an entry on permissions
  234. #There will be 2 special cases: creating a class also creates the rule "has UID" and creating an instance also creates the statament where reosurce_id is instance_id and rule is "hasUID"
  235. extract($D);
  236. $table = $GLOBALS['s3tables'][$element];
  237. #echo '<pre>';print_r($D);
  238. $cols_for_entry = $GLOBALS['dbstruct'][$element];
  239. $letter = strtoupper(substr($element,0,1));
  240. #some special restrictions apply
  241. switch ($letter) {
  242. case 'U':
  243. { $cols_for_entry = array_diff($cols_for_entry, array('addr1', 'addr2', 'city', 'state', 'postal_code', 'country'));
  244. array_push($cols_for_entry, 'account_pwd');
  245. $inputs['account_addr_id']=insert_address($D);
  246. }
  247. break;
  248. case 'G':
  249. {
  250. $cols_for_entry = array_merge($cols_for_entry, array('account_pwd', 'account_group'));
  251. $inputs['account_type'] = 'g';
  252. $inputs['account_group'] = $inputs['account_type'];
  253. $inputs['account_uname'] = $inputs['account_lid'];
  254. break;
  255. }
  256. case 'C':
  257. {
  258. $inputs['iid'] = '0';
  259. break;
  260. }
  261. case 'I':
  262. {
  263. $inputs['iid'] = '1';
  264. $inputs['resource_class_id']=($inputs['resource_class_id']=='')?$inputs['class_id']:$inputs['resource_class_id'];
  265. $inputs['resource_id']=($inputs['resource_id']!='')?$inputs['resource_id']:$inputs['instance_id'];
  266. break;
  267. }
  268. case 'F':
  269. {
  270. $element='statement';
  271. $cols_for_entry = $GLOBALS['dbstruct']['statements'];
  272. $table = $GLOBALS['s3tables']['statements'];
  273. $inputs['statement_id']= s3id();
  274. #now need to move file from tmp folder into final folder
  275. $moved = tmpfile2folder(array('inputs'=>$inputs, 'db'=>$db, 'user_id'=>$user_id));
  276. if(!$moved[0])#something went wrong, delete the statement.
  277. {
  278. return ($moved[1]);
  279. }
  280. else {
  281. $inputs=$moved[1];
  282. }
  283. }
  284. break;
  285. }
  286. #remove ''_id from cols for entry if that field is empty;
  287. if($inputs[$GLOBALS['s3ids'][$element]]=='')
  288. {
  289. #never levae the primary key input empty
  290. #$inputs[$GLOBALS['s3ids'][$element]] = find_latest_UID($table, $db)+1;
  291. $inputs[$GLOBALS['s3ids'][$element]] = s3id();
  292. }
  293. $sql = buildInsertString($cols_for_entry, $inputs, $table);
  294. #echo $sql;exit;
  295. $db->query($sql, __LINE__, __FILE__);
  296. if($db->Errno==1) #This is a duplicate key. No problem, let's try again
  297. {
  298. $inputs[$GLOBALS['s3ids'][$element]] = s3id();
  299. $sql = buildInsertString($cols_for_entry, $inputs, $table);
  300. $db->query($sql, __LINE__, __FILE__);
  301. }
  302. $dbdata = get_object_vars($db);
  303. #$dbdata['Errno']='0';
  304. #echo '<pre>';print_r($dbdata);exit;
  305. if($dbdata['Errno']!='0')
  306. {
  307. if($table=='account'){
  308. $sql = "update s3db_".$table." set account_status = 'A' where account_id = '".$inputs['account_id']."'";
  309. $db->query($sql, __LINE__, __FILE__);
  310. $dbdata = get_object_vars($db);
  311. }
  312. if($dbdata['Errno']!=0) {
  313. return array(False,$GLOBALS['error_codes']['something_went_wrong'].'<message>'.str_replace('key', $GLOBALS['COREids'][$element], $dbdata['Error']).'</message>', $GLOBALS['error_codes']['something_went_wrong'], $dbdata['Error']);
  314. }
  315. }
  316. else{
  317. #$element_id = $db->get_last_insert_id($table, $GLOBALS['s3ids'][$element]);
  318. #$element_id = find_latest_UID($table, $db);
  319. $element_id = $inputs[$GLOBALS['s3ids'][$element]];
  320. $info[$letter.$element_id]=$inputs;
  321. #special restrictions apply after create:
  322. switch ($letter) {
  323. case 'P':
  324. {
  325. $project_id = $element_id;
  326. #if project_id is remote, need to change it's name a bit because / and # are not allowed in project_name;
  327. #$project_id = urlencode($project_id);
  328. #create the folder on the extras for the files of this project
  329. $folder_code_name = random_string(15).'.project'.urlencode($project_id);
  330. $maindir = $GLOBALS['s3db_info']['server']['db']['uploads_folder'].$GLOBALS['s3db_info']['server']['db']['uploads_file'];
  331. $destinationfolder = $maindir.'/'.$folder_code_name;
  332. #create the folder for the project
  333. if(mkdir($destinationfolder, 0777))
  334. {
  335. $indexfile = $destinationfolder.'/index.php';
  336. if (file_exists($destinationfolder))
  337. {
  338. file_put_contents ($indexfile , 'This folder cannot be accessed');
  339. chmod($indexfile, 0777);
  340. }
  341. $sql = "update s3db_project set project_folder = '".$folder_code_name."' where project_id = '".$project_id."'";
  342. $db->query($sql, __LINE__, __FILE__);
  343. }
  344. else {
  345. echo "Could not create directory for this project. You might not be able to upload files to this project.";
  346. }
  347. }
  348. break;
  349. case 'I':
  350. {
  351. $class_id = $inputs['resource_class_id'];
  352. $statement_info = $inputs;
  353. $statement_info['rule_id'] = fastRuleID4class(compact('class_id', 'db', 'user_id'));
  354. $statement_info['value'] = $element_id;
  355. $statement_info['resource_id'] = $element_id;
  356. #$stat_inserted = insert_s3db(array('element'=>'statement', 'inputs'=>$statement_info, 'db'=>$db, 'user_id'=>$user_id));
  357. #echo '<pre>';print_r($statement_info);exit;
  358. $stat_inserted = insert_statement(compact('statement_info', 'db', 'user_id'));
  359. $action='create';
  360. insert_statement_log(compact('oldvalues', 'inputs', 'action', 'statement_info', 'user_id', 'db'));
  361. #echo '<pre>';print_r($stat_inserted);
  362. if($stat_inserted[0])
  363. {ereg('<statement_id>([0-9]+)</statement_id>', $stat_inserted[1], $s3qlout);
  364. $statement_info['statement_id'] = $stat_inserted[1];}
  365. $info['S'.$statement_info['statement_id']]=$statement_info;
  366. }
  367. break;
  368. case 'C':
  369. {
  370. $rule_info = $inputs;
  371. $rule_info['subject']=$inputs['entity'];
  372. $rule_info['subject_id']=$element_id;
  373. $rule_info['verb_id']='0';
  374. $rule_info['verb']='has UID';
  375. $rule_info['object']='UID';
  376. #echo '<pre>';print_r($inputs);
  377. #echo '<pre>';print_r($rule_info);exit;
  378. $rule_inserted = insert_rule(compact('rule_info', 'db', 'user_id'));
  379. }
  380. break;
  381. case 'R':
  382. {
  383. $rule_info = $inputs;
  384. $rule_info['rule_id']=$element_id;
  385. #echo '<pre>';print_r($rule_info);exit;
  386. $action='create';
  387. $rule_inserted = insert_rule_log(compact('rule_info', 'action', 'db', 'user_id'));
  388. }
  389. break;
  390. case 'S':
  391. {
  392. $statement_info=$inputs;
  393. $action='create';
  394. insert_statement_log(compact('oldvalues', 'action', 'statement_info', 'user_id', 'db'));
  395. }
  396. case 'F':
  397. {
  398. $statement_info=$inputs;
  399. $action='create';
  400. insert_statement_log(compact('oldvalues', 'action', 'statement_info', 'user_id', 'db'));
  401. }
  402. }
  403. #now add an entry that specifies user "creator' with permission level on 222 this entry (because someone has to have it)
  404. #some resources need to be mirrored, or swapped:
  405. if(ereg('^(U|G)$', $letter))
  406. {
  407. #owner of groups is automatically created within it with PL 222
  408. if(ereg('^G$', $letter))
  409. {$permission_info = array('uid'=>'U'.$user_id, 'shared_with'=>strtoupper(substr($element, 0,1)).$element_id,
  410. 'permission_level'=>'222');
  411. #echo '<pre>';print_r($permission_info);
  412. insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  413. }
  414. elseif(ereg('^U$', $letter)){
  415. ##also, for each user insertions, create an item_id for this user in the userManagement project. This will only create it if it does not yet exist
  416. include_once(S3DB_SERVER_ROOT.'/s3dbcore/authentication.php');
  417. $user_proj=create_authentication_proj($db,$user_id);
  418. #now, create an item in the userManagement project for this user
  419. $user2add = $element_id;
  420. $c=compact('user2add','user_proj', 'user_id','db');
  421. $user_proj=insert_authentication_tuple($c);
  422. if($inputs['permission_level']!=""){ ##creator has specified that his own permissions can propagate
  423. $permission_info = array('uid'=>'U'.$user_id, 'shared_with'=>'U'.$user2add, 'permission_level'=>$inputs['permission_level']);
  424. insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  425. }
  426. }
  427. #and then insert them i deployment
  428. $permission_info = array('uid'=>'D'.$GLOBALS['Did'], 'shared_with'=>strtoupper(substr($element, 0,1)).$element_id);
  429. $permission_info['permission_level']=($inputs['permission_level']!='')?$inputs['permission_level']:'200';
  430. }
  431. else {
  432. if(ereg('^P$', $letter)) {
  433. #project has a special treatment, creators of project get to have permission level 222 on it.
  434. $permission_info['shared_with'] = 'U'.$user_id;
  435. $permission_info['shared_with'] = 'U'.$user_id;
  436. $permission_info['uid'] = $letter.$element_id;
  437. $permission_info['permission_level']='YYY';##This assures that it will migrate to child resources
  438. insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  439. }
  440. elseif(ereg('^R$', $letter)){
  441. #Rule require permission to be inserted also for subject_id, verb_id and, if exists, object-id
  442. ##For SUBJECT
  443. $permission_info = array('uid'=>'R'.$rule_info['rule_id'], 'shared_with'=>'C'.$rule_info['subject_id'], 'permission_level'=>'222', 'info'=>$info);
  444. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  445. ##For VERB
  446. $permission_info = array('uid'=>'R'.$rule_info['rule_id'], 'shared_with'=>'I'.$rule_info['verb_id'], 'permission_level'=>'222', 'info'=>$info);
  447. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  448. #FOR OBJECT
  449. if($rule_info['object_id']){
  450. $permission_info = array('uid'=>'R'.$rule_info['rule_id'], 'shared_with'=>'C'.$rule_info['object_id'], 'permission_level'=>'222', 'info'=>$info);
  451. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  452. }
  453. $permission_info['shared_with'] = 'P'.$inputs['project_id'];
  454. }
  455. elseif(ereg('^C$', $letter)){
  456. $permission_info['shared_with'] = 'P'.$inputs['project_id'];
  457. }
  458. elseif(ereg('^I$', $letter)){
  459. #insert for statement too
  460. $permission_info = array('uid'=>'S'.$statement_info['statement_id'], 'shared_with'=>'R'.$statement_info['rule_id'], 'permission_level'=>'222', 'info'=>$info);
  461. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  462. #and then for instance
  463. $permission_info['shared_with'] = 'C'.$inputs['resource_class_id'];
  464. }
  465. elseif(ereg('^S|F$', $letter)){
  466. if($letter=='F')
  467. {$element_id = $statement_info['statement_id'];
  468. $element = 'file';
  469. $letter = 'S';
  470. }
  471. $permission_info = array('uid'=>$letter.$statement_info['statement_id'], 'shared_with'=>'I'.$statement_info['resource_id'], 'permission_level'=>'222', 'info'=>$info);
  472. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  473. ##If there is an object_id, insert one for that too
  474. if($statement_info['object_id']){
  475. $permission_info = array('uid'=>$letter.$statement_info['statement_id'], 'shared_with'=>'I'.$statement_info['object_id'], 'permission_level'=>'222', 'info'=>$info);
  476. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  477. }
  478. #And add one for the rule
  479. $permission_info['shared_with'] = 'R'.$inputs['rule_id'];
  480. }
  481. #and not these are global
  482. $permission_info['permission_level']=($inputs['permission_level']!='')?$inputs['permission_level']:'222';
  483. $permission_info['uid'] = $letter.$element_id;
  484. $info[$permission_info['uid']] = URI($permission_info['uid'], $user_id, $db);
  485. }
  486. #echo '<pre>';print_r($permission_info);
  487. #insert_permission(compact('permission_info', 'db', 'user_id', 'info'));
  488. return array(TRUE, $GLOBALS['error_codes']['success']."; ".$element.'_id'.': <'.$element.'_id'.'>'.$element_id.'</'.$element.'_id'.'>'.'<a href =" '.$query['url'].'?key='.$D['key'].'&query=<S3QL><select>*</select><from>'.$GLOBALS['plurals'][$element].'</from><where><'.$element.'_id>'.$element_id.'</'.$element.'_id></where></S3QL>">View '.$element.'</a>', $element, $element.'_id'=>$element_id, $GLOBALS['messages']['success'], strtoupper($element).' inserted');
  489. }
  490. }
  491. function buildInsertString($cols_for_entry, $inputs, $table)
  492. {
  493. foreach ($cols_for_entry as $col) {
  494. if($col=='account_pwd')
  495. $inputs[$col] = md5($inputs[$col]);
  496. $colnames .= $col;
  497. $values .= ($inputs[$col]!='')?"'".$inputs[$col]."'":(($col=='created_by')?"'".$user_id."'":(($col=='created_on')?"now()":((ereg("_status$", $col)?"'A'":"''"))));
  498. if($col!=end($cols_for_entry))
  499. {$colnames .= ", ";
  500. $values .= ", ";
  501. }
  502. }
  503. $sql = "insert into s3db_".$table." (".$colnames.") values (".$values.")";
  504. return ($sql);
  505. }
  506. ?>