Commit 4fd8c5b0236d09aa651e6ca736dab9c1a3bbc22f

Authored by Donald Jackson
1 parent 9a5d12ea

Implemented folder permissions in KTAPI core

git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@9767 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing 1 changed file with 144 additions and 3 deletions
ktapi/ktapi.inc.php
... ... @@ -237,7 +237,107 @@ class KTAPI
237 237 return $permissions;
238 238 }
239 239  
240   - /**
  240 + /**
  241 + * Returns an associative array of permission namespaces and their names
  242 + *
  243 + * @access public
  244 + * @return array
  245 + */
  246 +
  247 + public function get_permission_types() {
  248 + $types = array();
  249 + $list = KTAPI_Permission::getList();
  250 + foreach($list as $val) {
  251 + $types[$val->getNameSpace()] = $val->getName();
  252 + }
  253 + return $types;
  254 + }
  255 +
  256 + /**
  257 + * Returns folder permissions
  258 + *
  259 + * @access public
  260 + * @param string
  261 + * @param int
  262 + *
  263 + */
  264 + public function get_folder_permissions($username, $folder_id) {
  265 + if (is_null($this->session))
  266 + {
  267 + $error = new PEAR_Error('A session is not active');
  268 + return $error;
  269 + }
  270 + /* We need to create a new instance of KTAPI to get another user */
  271 + $user_ktapi = new KTAPI();
  272 + $user_ktapi->start_system_session($username);
  273 +
  274 + $folder = KTAPI_Folder::get($user_ktapi, $folder_id);
  275 +
  276 + $permissions = $folder->getPermissionAllocation();
  277 +
  278 + $user_ktapi->session_logout();
  279 +
  280 + return $permissions->permissions;
  281 + }
  282 +
  283 + /**
  284 + * Add folder permission
  285 + *
  286 + * @access public
  287 + * @param string
  288 + * @param string
  289 + * @param int
  290 + *
  291 + */
  292 + public function add_folder_permissions($username, $folder_id, $namespace) {
  293 + if (is_null($this->session))
  294 + {
  295 + $error = new PEAR_Error('A session is not active');
  296 + return $error;
  297 + }
  298 +
  299 + /* First check that user trying to add permission can actually do so */
  300 + $folder = KTAPI_Folder::get($this, $folder_id);
  301 + $permissions = $folder->getPermissionAllocation();
  302 + $detail = $permissions->permissions;
  303 + if(!in_array("Manage security", $detail)) {
  304 + return new PEAR_Error("User does not have permission to manage security");
  305 + }
  306 +
  307 + /* We need to create a new instance of KTAPI to get another user */
  308 + $user_ktapi = new KTAPI();
  309 + $user_ktapi->start_system_session($username);
  310 +
  311 + $folder = KTAPI_Folder::get($user_ktapi, $folder_id);
  312 + if(PEAR::isError($folder))
  313 + {
  314 + $user_ktapi->session_logout();
  315 + return $folder;
  316 + }
  317 +
  318 + $permission = KTAPI_Permission::getByNamespace($namespace);
  319 + if(PEAR::isError($permission)) {
  320 + $user_ktapi->session_logout();
  321 + return $permission;
  322 + }
  323 +
  324 +
  325 + $user = KTAPI_User::getByUsername($username);
  326 + if(PEAR::isError($user)) {
  327 + $user_ktapi->session_logout();
  328 + return $user;
  329 + }
  330 +
  331 + $permissions = $folder->getPermissionAllocation();
  332 +
  333 + $permissions->add($user, $permissions);
  334 + $permissions->save();
  335 + }
  336 +
  337 +
  338 +
  339 +
  340 + /**
241 341 * This checks if a user can access an object with a certain permission.
242 342 *
243 343 * @author KnowledgeTree Team
... ... @@ -284,6 +384,38 @@ class KTAPI
284 384  
285 385 return $user;
286 386 }
  387 +
  388 + /**
  389 + * Returns the version id for the associated version number
  390 + *
  391 + * @param int $document_id
  392 + * @param string $version_number
  393 + * @return int
  394 + */
  395 + function get_url_version_number($document_id, $version_number) {
  396 + $ktapi_session = $this->get_session();
  397 + if (is_null($ktapi_session) || PEAR::isError($ktapi_session))
  398 + {
  399 + $error = new PEAR_Error(KTAPI_ERROR_SESSION_INVALID);
  400 + return $error;
  401 + }
  402 +
  403 + $document_id = sanitizeForSQL($document_id);
  404 + $version_number = sanitizeForSQL($version_number);
  405 +
  406 + $pos = strpos($version_number, ".");
  407 + $major = substr($version_number, 0, $pos);
  408 + $minor = substr($version_number, ($pos+1));
  409 +
  410 + $sql = "SELECT id FROM document_content_version WHERE document_id = {$document_id} AND major_version = '{$major}' AND minor_version = '{$minor}'";
  411 + $row = DBUtil::getOneResult($sql);
  412 + $row = (int)$row['id'];
  413 + if (is_null($row) || PEAR::isError($row))
  414 + {
  415 + $row = new KTAPI_Error(KTAPI_ERROR_INTERNAL_ERROR, $row);
  416 + }
  417 + return $row;
  418 + }
287 419  
288 420 /**
289 421 * Search for documents matching the oem_no.
... ... @@ -391,9 +523,18 @@ class KTAPI
391 523 * @access public
392 524 * @return object $session The KTAPI_SystemSession
393 525 */
394   - public function & start_system_session()
  526 + public function & start_system_session($username = null)
395 527 {
396   - $user = User::get(1);
  528 + if(is_null($username))
  529 + {
  530 + $user = User::get(1);
  531 + } else {
  532 + $user = User::getByUserName($username);
  533 + }
  534 +
  535 + if(PEAR::isError($user)) {
  536 + return new PEAR_Error('Username invalid');
  537 + }
397 538  
398 539 $session = & new KTAPI_SystemSession($this, $user);
399 540 $this->session = &$session;
... ...