Kyberia v2.0
[mirrors/Kyberia-bloodline.git] / inc / permissions.inc
diff --git a/inc/permissions.inc b/inc/permissions.inc
new file mode 100644 (file)
index 0000000..914ecab
--- /dev/null
@@ -0,0 +1,207 @@
+<?php
+/* This program is free software. It comes without any warranty, to
+ * the extent permitted by applicable law. You can redistribute it
+ * and/or modify it under the terms of the Do What The Fuck You Want
+ * To Public License, Version 2, as published by Sam Hocevar. See
+ * http://sam.zoy.org/wtfpl/COPYING for more details. */
+
+
+class permissions {
+
+function isHierarch($node) {
+
+       global $db;
+       $user_id=$_SESSION['user_id'];
+       if (!$user_id) return false;
+       $node_vector=chunk_split($node['node_vector'],VECTOR_CHARS,';');
+       $hierarchy=explode(';',$node_vector);
+       foreach ($hierarchy as $hierarch) {
+               $hierarch=ltrim($hierarch,0);
+               $q="select nodes.node_creator,node_access.node_permission from nodes left join node_access on nodes.node_id=node_access.node_id and node_access.user_id='".$_SESSION['user_id']."' where nodes.node_id='$hierarch'";
+               $result=$db->query($q);
+               $result->next();
+               if ($result->getString('node_creator')==$user_id)
+                       return true;
+               if ($result->getString('node_permission')=='master')
+                       return true;
+               if ($result->getString('node_creator')=='operator')
+                       return true;
+               if ($user_id == 2045)
+                       return true;
+       }
+       return false;
+
+}
+
+function checkPermissions($node) {
+global $db;
+$user_id=$_SESSION['user_id'];
+
+/*
+thousand lights to Hierarchy!
+(check&set procedure for giving permissions for non-public subnodes according
+to bottom-top Hierarchy
+*/
+if (($node['node_system_access']!='public' and $node['node_system_access']!='crypto') and empty($node['node_permission'])) {
+       $node_vector=trim(chunk_split($node['node_vector'],VECTOR_CHARS,';'),';');
+       $hierarchy=array_reverse(explode(';',$node_vector));
+       foreach ($hierarchy as $hierarch) {
+               $hierarch=ltrim($hierarch,0);
+               $q="select nodes.node_creator,nodes.node_system_access,node_access.node_permission from nodes left join node_access on nodes.node_id=node_access.node_id and node_access.user_id='".$_SESSION['user_id']."' where nodes.node_id='$hierarch'";
+               $result=$db->query($q);
+               $result->next();
+               $hierarchy_bounce[]=$hierarch;
+
+               //if hierarch permission rights are different than that of the node, quit the process changing nothing
+               if ($result->getString('node_system_access')!=$node['node_system_access']) {
+                       break;
+               }
+
+               //if hierarch node_user relation exist, set it for node also
+               elseif ($result->getString('node_permission')!='') {
+                       array_pop($hierarchy_bounce);
+                       $node['node_permission']=$result->getString('node_permission');
+                               $q="update node_access set node_permission='".$result->getString('node_permission')."' where node_id='".$node['node_id']."' and user_id='".$_SESSION['user_id']."'";
+                               $updated=$db->update($q);
+                               if (!$updated && IsSet($_SESSION['user_id'])) {
+                                       $q="insert into node_access set node_permission='".$result->getString('node_permission')."', node_id='".$node['node_id']."',user_id='".$_SESSION['user_id']."'";
+                                       $db->query($q);
+                               }
+                       break;
+               }
+
+               //similiar.if user is creator of hierarch, give him access
+               elseif ($result->getString('node_creator')==$user_id) {
+                       array_pop($hierarchy_bounce);
+                       $node['node_permission']='access';
+                               $q="update node_access set node_permission='access' where node_id='".$node['node_id']."' and user_id='".$_SESSION['user_id']."'";
+                               $updated=$db->update($q);
+                               if (!$updated && IsSet($_SESSION['user_id'])) {
+                                       $q="insert into node_access set node_permission='access', node_id='".$node['node_id']."',user_id='".$_SESSION['user_id']."'";
+                                       $db->query($q);
+                               }
+                       break;
+               }
+
+
+
+       }
+
+}
+
+
+//setting permissions for not logged in users
+if ($_SESSION['user_id']==$node['node_creator']) {
+               $permissions['r']=true;
+               $permissions['w']=true;
+}
+
+elseif (!$_SESSION['user_id']) {
+
+       if ($node['node_external_access']=='yes' AND ($node['node_system_access']=='public' OR $node['node_system_access']=='moderated' OR $node['node_system_access']=='cube')) {
+               $permissions['r']=true;
+               $permissions['w']=false;
+
+       }
+
+       else {
+
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+}
+
+//setting permissions for cube node
+
+elseif ($node['node_system_access']=='cube') {
+
+       if (strpos($node['node_vector'],$_SESSION['cube_vector'])==true ) {
+               $permissions['r']=true;
+               $permissions['w']=true;
+       }
+       elseif (($node['node_permission']=='access')||($node['node_permission']=='op')||($node['node_permission']=='master')) {
+                        $permissions['r']=true;
+                        $permissions['w']=true;
+       }
+
+
+       else {
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+}
+
+
+//setting permissions for private node
+elseif ($node['node_system_access']=='private') {
+
+       if (empty($node['node_permission'])) {
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+       elseif ($node['node_permission']=='ban') {
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+
+       elseif($node['node_permission']=='silence') {
+               $permissions['r']=true;
+               $permissions['w']=false;
+       }
+       else {
+
+               $permissions['r']=true;
+               $permissions['w']=true;
+       }
+}
+
+//setting permissions for moderated node
+elseif ($node['node_system_access']=='moderated') {
+       if (($node['node_permission']=='access')||($node['node_permission']=='op')||($node['node_permission']=='master')) {
+                       $permissions['r']=true;
+                       $permissions['w']=true;
+               }
+       elseif ($node['node_permission']=='ban') {
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+
+
+               else {
+                       $permissions['r']=true;
+                       $permissions['w']=false;
+               }
+
+}
+
+//setting rights for public node
+elseif ($node['node_system_access']=='public') {
+       if ($node['node_permission']=='silence') {
+               $permissions['r']=true;
+               $permissions['w']=false;
+       }
+
+       elseif ($node['node_permission']=='ban') {
+               $permissions['r']=false;
+               $permissions['w']=false;
+       }
+
+
+       else {
+               $permissions['r']=true;
+               $permissions['w']=true;
+       }
+}
+
+
+else {
+               $permissions['r']=true;
+               $permissions['w']=true;
+}
+
+return $permissions;
+}
+
+}
+
+?>
This page took 0.179444 seconds and 4 git commands to generate.