Commit c3eeca855b7ccf33cfea112c3706741499c54bdf

Authored by Megan Watson
1 parent 8a07991b

Added triggers into the user creation (refactored into new class), set droppedDo…

…cuments folder to be created with the user.

Committed by: Megan Watson
Reviewed by: Jarrett Jordaan
lib/users/userutil.inc.php 0 → 100644
  1 +<?php
  2 +/**
  3 + * $Id$
  4 + *
  5 + * KnowledgeTree Community Edition
  6 + * Document Management Made Simple
  7 + * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc.
  8 + *
  9 + *
  10 + * This program is free software; you can redistribute it and/or modify it under
  11 + * the terms of the GNU General Public License version 3 as published by the
  12 + * Free Software Foundation.
  13 + *
  14 + * This program is distributed in the hope that it will be useful, but WITHOUT
  15 + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  16 + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  17 + * details.
  18 + *
  19 + * You should have received a copy of the GNU General Public License
  20 + * along with this program. If not, see <http://www.gnu.org/licenses/>.
  21 + *
  22 + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
  23 + * California 94120-7775, or email info@knowledgetree.com.
  24 + *
  25 + * The interactive user interfaces in modified source and object code versions
  26 + * of this program must display Appropriate Legal Notices, as required under
  27 + * Section 5 of the GNU General Public License version 3.
  28 + *
  29 + * In accordance with Section 7(b) of the GNU General Public License version 3,
  30 + * these Appropriate Legal Notices must retain the display of the "Powered by
  31 + * KnowledgeTree" logo and retain the original copyright notice. If the display of the
  32 + * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
  33 + * must display the words "Powered by KnowledgeTree" and retain the original
  34 + * copyright notice.
  35 + * Contributor( s): ______________________________________
  36 + *
  37 + */
  38 +
  39 +require_once(KT_LIB_DIR . '/users/User.inc');
  40 +
  41 +class KTUserUtil
  42 +{
  43 + static function createUser($username, $name, $password = null, $email_address = null, $email_notifications = false, $mobile_number = null, $max_sessions = 3, $source_id = null, $details = null, $details2 = null)
  44 + {
  45 + $dupUser =& User::getByUserName($username);
  46 + if(!PEAR::isError($dupUser)) {
  47 + return PEAR::raiseError(_kt("A user with that username already exists"));
  48 + }
  49 +
  50 + $oUser =& User::createFromArray(array(
  51 + "sUsername" => $username,
  52 + "sName" => $name,
  53 + "sPassword" => md5($password),
  54 + "iQuotaMax" => 0,
  55 + "iQuotaCurrent" => 0,
  56 + "sEmail" => $email_address,
  57 + "bEmailNotification" => $email_notifications,
  58 + "sMobile" => $mobile_number,
  59 + "bSmsNotification" => false, // FIXME do we auto-act if the user has a mobile?
  60 + "iMaxSessions" => $max_sessions,
  61 + "authenticationsourceid" => $source_id,
  62 + "authenticationdetails" => $details,
  63 + "authenticationdetails2" => $details2,
  64 + ));
  65 +
  66 + if (PEAR::isError($oUser) || ($oUser == false)) {
  67 + return PEAR::raiseError(_kt("failed to create user."));
  68 + }
  69 +
  70 + // run triggers on user creation
  71 + $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();
  72 + $aTriggers = $oKTTriggerRegistry->getTriggers('user_create', 'postValidate');
  73 +
  74 + foreach ($aTriggers as $aTrigger) {
  75 + $sTrigger = $aTrigger[0];
  76 + $oTrigger = new $sTrigger;
  77 + $aInfo = array(
  78 + 'user' => $oUser,
  79 + );
  80 + $oTrigger->setInfo($aInfo);
  81 + $ret = $oTrigger->postValidate();
  82 + }
  83 +
  84 + return $oUser;
  85 + }
  86 +}
  87 +
  88 +
  89 +?>
0 \ No newline at end of file 90 \ No newline at end of file
plugins/MyDropDocumentsPlugin/MyDropDocumentsDashlet.php
@@ -5,75 +5,102 @@ @@ -5,75 +5,102 @@
5 * KnowledgeTree Community Edition 5 * KnowledgeTree Community Edition
6 * Document Management Made Simple 6 * Document Management Made Simple
7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc. 7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc.
8 - *  
9 - * 8 + *
  9 + *
10 * This program is free software; you can redistribute it and/or modify it under 10 * This program is free software; you can redistribute it and/or modify it under
11 * the terms of the GNU General Public License version 3 as published by the 11 * the terms of the GNU General Public License version 3 as published by the
12 * Free Software Foundation. 12 * Free Software Foundation.
13 - * 13 + *
14 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
17 * details. 17 * details.
18 - * 18 + *
19 * You should have received a copy of the GNU General Public License 19 * You should have received a copy of the GNU General Public License
20 * along with this program. If not, see <http://www.gnu.org/licenses/>. 20 * along with this program. If not, see <http://www.gnu.org/licenses/>.
21 - *  
22 - * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, 21 + *
  22 + * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco,
23 * California 94120-7775, or email info@knowledgetree.com. 23 * California 94120-7775, or email info@knowledgetree.com.
24 - * 24 + *
25 * The interactive user interfaces in modified source and object code versions 25 * The interactive user interfaces in modified source and object code versions
26 * of this program must display Appropriate Legal Notices, as required under 26 * of this program must display Appropriate Legal Notices, as required under
27 * Section 5 of the GNU General Public License version 3. 27 * Section 5 of the GNU General Public License version 3.
28 - * 28 + *
29 * In accordance with Section 7(b) of the GNU General Public License version 3, 29 * In accordance with Section 7(b) of the GNU General Public License version 3,
30 * these Appropriate Legal Notices must retain the display of the "Powered by 30 * these Appropriate Legal Notices must retain the display of the "Powered by
31 - * KnowledgeTree" logo and retain the original copyright notice. If the display of the 31 + * KnowledgeTree" logo and retain the original copyright notice. If the display of the
32 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices 32 * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices
33 - * must display the words "Powered by KnowledgeTree" and retain the original 33 + * must display the words "Powered by KnowledgeTree" and retain the original
34 * copyright notice. 34 * copyright notice.
35 * Contributor( s): ______________________________________ 35 * Contributor( s): ______________________________________
36 * 36 *
37 */ 37 */
38 38
  39 +require_once('MyDropDocumentsPage.php');
  40 +
39 class MyDropDocumentsDashlet extends KTBaseDashlet { 41 class MyDropDocumentsDashlet extends KTBaseDashlet {
40 var $oUser; 42 var $oUser;
41 - //var $sClass = 'ktError';  
42 - 43 +
43 function MyDropDocumentsDashlet(){ 44 function MyDropDocumentsDashlet(){
44 $this->sTitle = _kt('My Dropped Documents'); 45 $this->sTitle = _kt('My Dropped Documents');
45 } 46 }
46 - 47 +
47 function is_active($oUser) { 48 function is_active($oUser) {
48 $this->oUser = $oUser; 49 $this->oUser = $oUser;
49 return true; 50 return true;
50 } 51 }
51 -  
52 -  
53 -/* 52 +
  53 +
  54 +/*
54 function is_active($oUser) { 55 function is_active($oUser) {
55 $this->oUser = $oUser; 56 $this->oUser = $oUser;
56 return Permission::userIsSystemAdministrator($oUser); 57 return Permission::userIsSystemAdministrator($oUser);
57 } 58 }
58 */ 59 */
59 - 60 +
60 function render() { 61 function render() {
61 global $main; 62 global $main;
62 $main->requireJSResource("plugins/MyDropDocumentsPlugin/js/update.js"); 63 $main->requireJSResource("plugins/MyDropDocumentsPlugin/js/update.js");
63 - 64 +
64 $oPlugin =& $this->oPlugin; 65 $oPlugin =& $this->oPlugin;
65 - 66 +
66 $oTemplating =& KTTemplating::getSingleton(); 67 $oTemplating =& KTTemplating::getSingleton();
67 - $oTemplate = $oTemplating->loadTemplate('MyDropDocumentsPlugin/dashlet');  
68 - 68 + $oTemplate = $oTemplating->loadTemplate('MyDropDocumentsPlugin/dashlet');
  69 +
69 $aTemplateData = array( 70 $aTemplateData = array(
70 'context' => $this, 71 'context' => $this,
71 'url' => $oPlugin->getPagePath('MyDropDocuments'), 72 'url' => $oPlugin->getPagePath('MyDropDocuments'),
72 - 73 +
73 ); 74 );
74 -  
75 - 75 +
  76 +
76 return $oTemplate->render($aTemplateData); 77 return $oTemplate->render($aTemplateData);
77 } 78 }
78 } 79 }
  80 +
  81 +
  82 +class CreateUserFolderTrigger {
  83 + var $namespace = 'ktlive.mydropdocuments.triggers.user_create';
  84 + var $aInfo = null;
  85 +
  86 + function setInfo($aInfo) {
  87 + $this->aInfo = $aInfo;
  88 + }
  89 +
  90 + /**
  91 + * Create the dropped documents folder for the user on user creation
  92 + */
  93 + function postValidate() {
  94 + $oUser = $this->aInfo['user'];
  95 +
  96 + if(!($oUser instanceof User) || !($oUser instanceof UserProxy)){
  97 + return false;
  98 + }
  99 +
  100 + $drop = new DropFolderCreation($oUser);
  101 + $drop->checkFolders();
  102 + }
  103 +}
  104 +
  105 +
79 ?> 106 ?>
plugins/MyDropDocumentsPlugin/MyDropDocumentsPage.php
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 * KnowledgeTree Community Edition 5 * KnowledgeTree Community Edition
6 * Document Management Made Simple 6 * Document Management Made Simple
7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc. 7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc.
8 - * 8 + *
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify it under 10 * This program is free software; you can redistribute it and/or modify it under
11 * the terms of the GNU General Public License version 3 as published by the 11 * the terms of the GNU General Public License version 3 as published by the
@@ -73,6 +73,239 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -73,6 +73,239 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
73 $oUser = $this->oUser; 73 $oUser = $this->oUser;
74 $sUserName = (string)$this->oUser->getUserName(); 74 $sUserName = (string)$this->oUser->getUserName();
75 75
  76 + // Check for the DropDocuments folder in root
  77 + if(!Folder::FolderExistsName('DroppedDocuments', $iRootID))
  78 + {
  79 + return _kt('The Dropped Documents folder does not exist. Please contact your System Administrator');
  80 + }
  81 +
  82 + $iDropDocsFolderID = $this->getFolderID('DroppedDocuments');
  83 +
  84 + // Check for users folder
  85 + if(!Folder::FolderExistsName($sUserName, $iDropDocsFolderID))
  86 + {
  87 + return _kt('Your personal folder under the Dropped Documents folder does not exist. Please contact your System Administrator');
  88 + }
  89 +
  90 + // Get documents
  91 + return $this->getUsersDocument($sUserName, $iDropDocsFolderID);
  92 + }
  93 +
  94 + /**
  95 + * Method to get any documents added by the user via the Drop Box.
  96 + * Returns the HTML displaying the document list.
  97 + *
  98 + * @param string $sUserName
  99 + * @param numeric $iDropDocsFolderID
  100 + * @return string HTML - the document list on success or an error message on failure
  101 + */
  102 + function getUsersDocument($sUserName, $iDropDocsFolderID)
  103 + {
  104 + $oUser = $this->oUser;
  105 + $oDropDocsFolder = Folder::get($iDropDocsFolderID);
  106 +
  107 + $fullPath = $oDropDocsFolder->getFullPath() . '/' . $sUserName;
  108 +
  109 + $aExternalWhereClauses[] = '(DT.transaction_namespace IN (?,?,?) AND (D.full_path LIKE "'.$fullPath.'/%"))';
  110 + $aExternalWhereParams[] = 'ktcore.transactions.create';
  111 + $aExternalWhereParams[] = 'ktcore.transactions.check_in';
  112 + $aExternalWhereParams[] = 'ktcore.transactions.event';
  113 +
  114 +
  115 + $aDocumentTransactions = $this->getTransactionsMatchingQuery($oUser, '', $aExternalWhereClauses, $aExternalWhereParams);
  116 + if (empty($aDocumentTransactions) || PEAR::isError($aDocumentTransactions))
  117 + {
  118 + if(PEAR::isError($aDocumentTransactions)){
  119 + global $default;
  120 + $default->log->debug('Error retrieving dropped documents - '.$aDocumentTransactions->getMessage());
  121 + }
  122 +
  123 + return _kt('<span class="descriptiveText"> You do not have any dropped documents </span><br><br><br>');
  124 + }
  125 +
  126 + $maxcount = 5;
  127 +
  128 + $sReturnTable = '<span class="descriptiveText">'._kt('Recently Dropped Documents').'</span>
  129 + <table width="100%" class="kt_collection drop_box" cellspacing="0">
  130 +
  131 + <thead>
  132 + <tr>
  133 + <th width="100%">'._kt('Document').'</th>
  134 + <th width="1%">'._kt('Date Dropped').'</th>
  135 + </tr>
  136 + </thead>
  137 + <tbody>';
  138 +
  139 + $sOddorEven = '';
  140 + $count = 1;
  141 + $rendered = array();
  142 + foreach ($aDocumentTransactions as $aRow)
  143 + {
  144 + $documentId = $aRow['document_id'];
  145 + if (in_array($documentId, $rendered))
  146 + {
  147 + continue;
  148 + }
  149 +
  150 + $rendered[] = $documentId;
  151 + $oDocument = Document::get($documentId);
  152 +
  153 + $sContentType = KTMime::getIconPath($oDocument->getMimeTypeID());
  154 + $aAnchorData = $this->getDocInfo($documentId);
  155 + $sLink = $aAnchorData[0];
  156 + $sShortDocName = $sDocName = $aAnchorData[1];
  157 +
  158 + $iDocLength = strlen($sDocName);
  159 + $iMax = 40;
  160 + if ( $iDocLength > $iMax )
  161 + {
  162 + $sShortDocName = substr($sDocName, 0, $iMax) . '...';
  163 + }
  164 +
  165 + $sOddorEven = ($count%2 == 0)?'even':'odd';
  166 +
  167 + $sReturnTable .= '<tr class="'.$sOddorEven.'">'.
  168 + '<td width="100%"><span class="contenttype '.$sContentType.'"><a title="'.$sDocName.'" href='.$sLink.'>'.$sShortDocName.'</a></span></td>'.
  169 + '<td width="1%">'.$aRow['datetime'].'</td>'.
  170 + '</tr>';
  171 + if (++$count > 5)
  172 + {
  173 + break;
  174 + }
  175 + }
  176 +
  177 + $subFolders = Folder::getByParentId($iDropDocsFolderID);
  178 + if(PEAR::isError($subFolders) || empty($subFolders)){
  179 + $iMyDocsFolderID = $iDropDocsFolderID;
  180 + }else{
  181 + foreach ($subFolders as $sub){
  182 + if($sub->getName() == $sUserName){
  183 + $iMyDocsFolderID = $sub->getID();
  184 + break;
  185 + }
  186 + }
  187 + }
  188 +
  189 + $location = 'browse.php?fFolderId='.$iMyDocsFolderID;
  190 + $sReturnTable .= '</tbody>'.
  191 + '</table>'.
  192 + '<br>'.
  193 + '<a href="'.$location.'">'._kt(' View All').' </a><br><br>';
  194 + return $sReturnTable;
  195 + }
  196 +
  197 + //this function returns the document link and document name to be displayed on the dashlet
  198 + function getDocInfo($iDocId) {
  199 + $oDocument = Document::get($iDocId);
  200 +
  201 + if (PEAR::isError($oDocument)) {
  202 + return _kt('Document no longer exists.');
  203 + }
  204 +
  205 + $sName = htmlentities($oDocument->getName(), ENT_NOQUOTES, 'UTF-8');
  206 + $sLink = KTBrowseUtil::getUrlForDocument($oDocument);
  207 +
  208 + $aAnchorData = array();
  209 + $aAnchorData[] = $sLink;
  210 + $aAnchorData[] = $sName;
  211 + return $aAnchorData;
  212 + }
  213 +
  214 + //FIXME: Direct Database access
  215 + function getFolderID($sFolderName) {
  216 + $sQuery = 'SELECT id FROM folders WHERE name = \''.$sFolderName.'\'';
  217 +
  218 + $id = DBUtil::getResultArray($sQuery);
  219 + return $id[0]['id'];
  220 + }
  221 +
  222 + function handleOutput($sOutput) {
  223 + print $sOutput;
  224 + }
  225 +
  226 + /*
  227 + attempt to abstract the transaction-matching query.
  228 +
  229 + tables that are already defined (other than sec ones):
  230 +
  231 + - Documents (D)
  232 + - Users (U)
  233 + - TransactionTypes (DTT)
  234 + - Document Transactions (DT)
  235 +
  236 + so where clausess can take advantage of those.
  237 +
  238 + */
  239 + function getTransactionsMatchingQuery($oUser, $sJoinClause, $aExternalWhereClauses, $aExternalWhereParams, $aOptions = null) {
  240 +
  241 + $sSelectItems = 'DTT.name AS transaction_name, U.name AS user_name, DT.version AS version, DT.comment AS comment, DT.datetime AS datetime, D.id as document_id, DT.transaction_namespace as namespace';
  242 + $sBaseJoin = "FROM " . KTUtil::getTableName("document_transactions") . " AS DT " .
  243 + "INNER JOIN " . KTUtil::getTableName("users") . " AS U ON DT.user_id = U.id " .
  244 + "INNER JOIN " . KTUtil::getTableName("transaction_types") . " AS DTT ON DTT.namespace = DT.transaction_namespace " .
  245 + "INNER JOIN " . KTUtil::getTableName("documents") . " AS D ON D.id = DT.document_id ";
  246 +
  247 + // now we're almost at partialquery like status.
  248 + $perm_res = KTSearchUtil::permissionToSQL($oUser, 'ktcore.permissions.read');
  249 + if (PEAR::isError($perm_res)) {
  250 + return $perm_res;
  251 + }
  252 + list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $perm_res;
  253 +
  254 + // compile the final list
  255 + $aFinalWhere = kt_array_merge(array($sPermissionString,'D.creator_id IS NOT NULL'), $aExternalWhereClauses, array('D.status_id = ?'));
  256 + $aFinalWhereParams = kt_array_merge($aPermissionParams, $aExternalWhereParams, array(LIVE));
  257 +
  258 + if (!is_array($aOptions)) {
  259 + $aOptions = (array) $aOptions;
  260 + }
  261 + $sOrderBy = KTUtil::arrayGet($aOptions, 'orderby', 'DT.datetime DESC');
  262 +
  263 + // compile these.
  264 + // NBM: do we need to wrap these in ()?
  265 + $sWhereClause = implode(' AND ', $aFinalWhere);
  266 + if (!empty($sWhereClause)) {
  267 + $sWhereClause = 'WHERE ' . $sWhereClause;
  268 + }
  269 +
  270 + $sQuery = sprintf("SELECT %s %s %s %s %s ORDER BY %s",
  271 + $sSelectItems,
  272 + $sBaseJoin,
  273 + $sPermissionJoin,
  274 + $sJoinClause,
  275 + $sWhereClause,
  276 + $sOrderBy
  277 + );
  278 +
  279 + //var_dump(array($sQuery, $aFinalWhereParams));
  280 +
  281 + $res = DBUtil::getResultArray(array($sQuery, $aFinalWhereParams));
  282 + //var_dump($res); exit(0);
  283 + return $res;
  284 + }
  285 +
  286 +}
  287 +
  288 +class DropFolderCreation
  289 +{
  290 + private $oUser;
  291 + private $ktapi;
  292 + private $session;
  293 +
  294 + function __construct($oUser)
  295 + {
  296 + $this->oUser = $oUser;
  297 + }
  298 +
  299 + function checkFolders()
  300 + {
  301 + // Check if users folder exists in DropDocuments folder
  302 + // - it does -> continue on to check for documents
  303 + // - it doesn't -> switch to root user and create it
  304 +
  305 + global $default;
  306 + $iRootID = (int)1;
  307 + $oUser = $this->oUser;
  308 + $sUserName = (string)$this->oUser->getUserName();
76 309
77 // Check for the DropDocuments folder in root 310 // Check for the DropDocuments folder in root
78 if(!Folder::FolderExistsName('DroppedDocuments', $iRootID)) 311 if(!Folder::FolderExistsName('DroppedDocuments', $iRootID))
@@ -111,9 +344,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -111,9 +344,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
111 return $res; 344 return $res;
112 } 345 }
113 } 346 }
114 -  
115 - // Get documents  
116 - return $this->getUsersDocument($sUserName, $iDropDocsFolderID);  
117 } 347 }
118 348
119 /** 349 /**
@@ -122,6 +352,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -122,6 +352,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
122 */ 352 */
123 function createPersonalFolder($sUserName, $iDropDocsFolderID) 353 function createPersonalFolder($sUserName, $iDropDocsFolderID)
124 { 354 {
  355 + global $default;
125 // Add the users folder 356 // Add the users folder
126 // Add the user to the WorkSpaceAdmin role on the DroppedDocuments folder 357 // Add the user to the WorkSpaceAdmin role on the DroppedDocuments folder
127 // Define users folder permissions 358 // Define users folder permissions
@@ -200,6 +431,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -200,6 +431,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
200 */ 431 */
201 function createDropDocsFolder() 432 function createDropDocsFolder()
202 { 433 {
  434 + global $default;
203 $root = $this->ktapi->get_root_folder(); 435 $root = $this->ktapi->get_root_folder();
204 436
205 if(PEAR::isError($root)){ 437 if(PEAR::isError($root)){
@@ -211,7 +443,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -211,7 +443,7 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
211 $dropDocsFolder = $root->add_folder('DroppedDocuments'); 443 $dropDocsFolder = $root->add_folder('DroppedDocuments');
212 444
213 if(PEAR::isError($dropDocsFolder)){ 445 if(PEAR::isError($dropDocsFolder)){
214 - $default->log->debug('MyDropDocuments: could not create DroppedDocuments folder '.$dropDocsFolder->getMessage()); 446 + $defaultf->log->debug('MyDropDocuments: could not create DroppedDocuments folder '.$dropDocsFolder->getMessage());
215 return _kt('Error - could not create the DropppedDocuments folder: ').$dropDocsFolder->getMessage(); 447 return _kt('Error - could not create the DropppedDocuments folder: ').$dropDocsFolder->getMessage();
216 } 448 }
217 449
@@ -254,115 +486,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -254,115 +486,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
254 return null; 486 return null;
255 } 487 }
256 488
257 - /**  
258 - * Method to get any documents added by the user via the Drop Box.  
259 - * Returns the HTML displaying the document list.  
260 - *  
261 - * @param string $sUserName  
262 - * @param numeric $iDropDocsFolderID  
263 - * @return string HTML - the document list on success or an error message on failure  
264 - */  
265 - function getUsersDocument($sUserName, $iDropDocsFolderID)  
266 - {  
267 - $oUser = $this->oUser;  
268 - $oDropDocsFolder = Folder::get($iDropDocsFolderID);  
269 -  
270 - $fullPath = $oDropDocsFolder->getFullPath() . '/' . $sUserName;  
271 -  
272 - $aExternalWhereClauses[] = '(DT.transaction_namespace IN (?,?,?) AND (D.full_path LIKE "'.$fullPath.'/%"))';  
273 - $aExternalWhereParams[] = 'ktcore.transactions.create';  
274 - $aExternalWhereParams[] = 'ktcore.transactions.check_in';  
275 - $aExternalWhereParams[] = 'ktcore.transactions.event';  
276 -  
277 -  
278 - $aDocumentTransactions = $this->getTransactionsMatchingQuery($oUser, '', $aExternalWhereClauses, $aExternalWhereParams);  
279 - if (empty($aDocumentTransactions) || PEAR::isError($aDocumentTransactions))  
280 - {  
281 - if(PEAR::isError($aDocumentTransactions)){  
282 - global $default;  
283 - $default->log->debug('Error retrieving dropped documents - '.$aDocumentTransactions->getMessage());  
284 - }  
285 -  
286 - return _kt('<span class="descriptiveText"> You do not have any dropped documents </span><br><br><br>');  
287 - }  
288 -  
289 - $maxcount = 5;  
290 -  
291 - $sReturnTable = '<span class="descriptiveText">'._kt('Recently Dropped Documents').'</span>  
292 - <table width="100%" class="kt_collection drop_box" cellspacing="0">  
293 -  
294 - <thead>  
295 - <tr>  
296 - <th width="100%">'._kt('Document').'</th>  
297 - <th width="1%">'._kt('Date Dropped').'</th>  
298 - </tr>  
299 - </thead>  
300 - <tbody>';  
301 -  
302 - $sOddorEven = '';  
303 - $count = 1;  
304 - $rendered = array();  
305 - foreach ($aDocumentTransactions as $aRow)  
306 - {  
307 - $documentId = $aRow['document_id'];  
308 - if (in_array($documentId, $rendered))  
309 - {  
310 - continue;  
311 - }  
312 -  
313 - $rendered[] = $documentId;  
314 - $oDocument = Document::get($documentId);  
315 -  
316 - $sContentType = KTMime::getIconPath($oDocument->getMimeTypeID());  
317 - $aAnchorData = $this->getDocInfo($documentId);  
318 - $sLink = $aAnchorData[0];  
319 - $sShortDocName = $sDocName = $aAnchorData[1];  
320 -  
321 - $iDocLength = strlen($sDocName);  
322 - $iMax = 40;  
323 - if ( $iDocLength > $iMax )  
324 - {  
325 - $sShortDocName = substr($sDocName, 0, $iMax) . '...';  
326 - }  
327 -  
328 - $sOddorEven = ($count%2 == 0)?'even':'odd';  
329 -  
330 - $sReturnTable .= '<tr class="'.$sOddorEven.'">'.  
331 - '<td width="100%"><span class="contenttype '.$sContentType.'"><a title="'.$sDocName.'" href='.$sLink.'>'.$sShortDocName.'</a></span></td>'.  
332 - '<td width="1%">'.$aRow['datetime'].'</td>'.  
333 - '</tr>';  
334 - if (++$count > 5)  
335 - {  
336 - break;  
337 - }  
338 - }  
339 -  
340 - $subFolders = Folder::getByParentId($iDropDocsFolderID);  
341 - if(PEAR::isError($subFolders) || empty($subFolders)){  
342 - $iMyDocsFolderID = $iDropDocsFolderID;  
343 - }else{  
344 - foreach ($subFolders as $sub){  
345 - if($sub->getName() == $sUserName){  
346 - $iMyDocsFolderID = $sub->getID();  
347 - break;  
348 - }  
349 - }  
350 - }  
351 -  
352 - $location = 'browse.php?fFolderId='.$iMyDocsFolderID;  
353 - $sReturnTable .= '</tbody>'.  
354 - '</table>'.  
355 - '<br>'.  
356 - '<a href="'.$location.'">'._kt(' View All').' </a><br><br>';  
357 - //$this->session->logout();  
358 -  
359 - return $sReturnTable;  
360 - }  
361 -  
362 - function handleOutput($sOutput) {  
363 - print $sOutput;  
364 - }  
365 -  
366 //This function is used to set the permission on the dropdocuments folder 489 //This function is used to set the permission on the dropdocuments folder
367 function setUserDocsPermissions($oUserPO) 490 function setUserDocsPermissions($oUserPO)
368 { 491 {
@@ -545,43 +668,13 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -545,43 +668,13 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
545 $this->renegeratePermissionsForRole($oRoleAllocation->getRoleId(), $personalFolderID); 668 $this->renegeratePermissionsForRole($oRoleAllocation->getRoleId(), $personalFolderID);
546 } 669 }
547 670
548 - //FIXME: Direct Database access  
549 - function getFolderID($sFolderName) {  
550 - $sQuery = 'SELECT id FROM folders WHERE name = \''.$sFolderName.'\'';  
551 -  
552 - $id = DBUtil::getResultArray($sQuery);  
553 - return $id[0]['id'];  
554 - }  
555 -  
556 - //this function returns the document link and document name to be displayed on the dashlet  
557 - function getDocInfo($iDocId) {  
558 - $oDocument = Document::get($iDocId);  
559 -  
560 - if (PEAR::isError($oDocument)) {  
561 - return _kt('Document no longer exists.');  
562 - }  
563 -  
564 - $sName = htmlentities($oDocument->getName(), ENT_NOQUOTES, 'UTF-8');  
565 - $sLink = KTBrowseUtil::getUrlForDocument($oDocument);  
566 -  
567 - $aAnchorData = array();  
568 - $aAnchorData[] = $sLink;  
569 - $aAnchorData[] = $sName;  
570 - return $aAnchorData;  
571 - }  
572 -  
573 //This function is used to create the role, role allocation is done separately 671 //This function is used to create the role, role allocation is done separately
574 function createRole ($sName) 672 function createRole ($sName)
575 { 673 {
576 - $this->startTransaction();  
577 $oRole = Role::createFromArray(array('name' => $sName)); 674 $oRole = Role::createFromArray(array('name' => $sName));
578 675
579 if (PEAR::isError($oRole) || ($oRole == false)) 676 if (PEAR::isError($oRole) || ($oRole == false))
580 { 677 {
581 - if ($this->bTransactionStarted)  
582 - {  
583 - $this->rollbackTransaction();  
584 - }  
585 //return null on failure 678 //return null on failure
586 return null; 679 return null;
587 } 680 }
@@ -630,6 +723,14 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -630,6 +723,14 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
630 } 723 }
631 724
632 //FIXME: Direct Database access 725 //FIXME: Direct Database access
  726 + function getFolderID($sFolderName) {
  727 + $sQuery = 'SELECT id FROM folders WHERE name = \''.$sFolderName.'\'';
  728 +
  729 + $id = DBUtil::getResultArray($sQuery);
  730 + return $id[0]['id'];
  731 + }
  732 +
  733 + //FIXME: Direct Database access
633 function getGroupIdByName ($sName) 734 function getGroupIdByName ($sName)
634 { 735 {
635 $sQuery = "SELECT id FROM groups_lookup WHERE name = ?"; 736 $sQuery = "SELECT id FROM groups_lookup WHERE name = ?";
@@ -672,7 +773,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -672,7 +773,6 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
672 773
673 $aNewFolders = DBUtil::getResultArrayKey(array($sQuery, $aParams), 'id'); 774 $aNewFolders = DBUtil::getResultArrayKey(array($sQuery, $aParams), 'id');
674 if (PEAR::isError($aNewFolders)) { 775 if (PEAR::isError($aNewFolders)) {
675 - //$this->errorRedirectToMain(_kt('Failure to generate folderlisting.'));  
676 echo _kt('Failure to generate folderlisting.'); 776 echo _kt('Failure to generate folderlisting.');
677 } 777 }
678 $folder_queue = kt_array_merge ($folder_queue, (array) $aNewFolders); // push. 778 $folder_queue = kt_array_merge ($folder_queue, (array) $aNewFolders); // push.
@@ -681,14 +781,12 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -681,14 +781,12 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
681 // update the folder. 781 // update the folder.
682 $oFolder =& Folder::get($active_folder); 782 $oFolder =& Folder::get($active_folder);
683 if (PEAR::isError($oFolder) || ($oFolder == false)) { 783 if (PEAR::isError($oFolder) || ($oFolder == false)) {
684 - //$this->errorRedirectToMain(_kt('Unable to locate folder: ') . $active_folder);  
685 echo _kt('Unable to locate folder: ').$active_folder; 784 echo _kt('Unable to locate folder: ').$active_folder;
686 } 785 }
687 786
688 KTPermissionUtil::updatePermissionLookup($oFolder); 787 KTPermissionUtil::updatePermissionLookup($oFolder);
689 $aDocList =& Document::getList(array('folder_id = ?', $active_folder)); 788 $aDocList =& Document::getList(array('folder_id = ?', $active_folder));
690 if (PEAR::isError($aDocList) || ($aDocList === false)) { 789 if (PEAR::isError($aDocList) || ($aDocList === false)) {
691 - //$this->errorRedirectToMain(sprintf(_kt('Unable to get documents in folder %s: %s'), $active_folder, $aDocList->getMessage()));  
692 echo _kt('Unable to get documents in folder ').$active_folder; 790 echo _kt('Unable to get documents in folder ').$active_folder;
693 } 791 }
694 792
@@ -699,65 +797,5 @@ class MyDropDocumentsPage extends KTStandardDispatcher { @@ -699,65 +797,5 @@ class MyDropDocumentsPage extends KTStandardDispatcher {
699 } 797 }
700 } 798 }
701 } 799 }
702 -  
703 - /*  
704 - attempt to abstract the transaction-matching query.  
705 -  
706 - tables that are already defined (other than sec ones):  
707 -  
708 - - Documents (D)  
709 - - Users (U)  
710 - - TransactionTypes (DTT)  
711 - - Document Transactions (DT)  
712 -  
713 - so where clausess can take advantage of those.  
714 -  
715 - */  
716 - function getTransactionsMatchingQuery($oUser, $sJoinClause, $aExternalWhereClauses, $aExternalWhereParams, $aOptions = null) {  
717 -  
718 - $sSelectItems = 'DTT.name AS transaction_name, U.name AS user_name, DT.version AS version, DT.comment AS comment, DT.datetime AS datetime, D.id as document_id, DT.transaction_namespace as namespace';  
719 - $sBaseJoin = "FROM " . KTUtil::getTableName("document_transactions") . " AS DT " .  
720 - "INNER JOIN " . KTUtil::getTableName("users") . " AS U ON DT.user_id = U.id " .  
721 - "INNER JOIN " . KTUtil::getTableName("transaction_types") . " AS DTT ON DTT.namespace = DT.transaction_namespace " .  
722 - "INNER JOIN " . KTUtil::getTableName("documents") . " AS D ON D.id = DT.document_id ";  
723 -  
724 - // now we're almost at partialquery like status.  
725 - $perm_res = KTSearchUtil::permissionToSQL($oUser, 'ktcore.permissions.read');  
726 - if (PEAR::isError($perm_res)) {  
727 - return $perm_res;  
728 - }  
729 - list($sPermissionString, $aPermissionParams, $sPermissionJoin) = $perm_res;  
730 -  
731 - // compile the final list  
732 - $aFinalWhere = kt_array_merge(array($sPermissionString,'D.creator_id IS NOT NULL'), $aExternalWhereClauses, array('D.status_id = ?'));  
733 - $aFinalWhereParams = kt_array_merge($aPermissionParams, $aExternalWhereParams, array(LIVE));  
734 -  
735 - if (!is_array($aOptions)) {  
736 - $aOptions = (array) $aOptions;  
737 - }  
738 - $sOrderBy = KTUtil::arrayGet($aOptions, 'orderby', 'DT.datetime DESC');  
739 -  
740 - // compile these.  
741 - // NBM: do we need to wrap these in ()?  
742 - $sWhereClause = implode(' AND ', $aFinalWhere);  
743 - if (!empty($sWhereClause)) {  
744 - $sWhereClause = 'WHERE ' . $sWhereClause;  
745 - }  
746 -  
747 - $sQuery = sprintf("SELECT %s %s %s %s %s ORDER BY %s",  
748 - $sSelectItems,  
749 - $sBaseJoin,  
750 - $sPermissionJoin,  
751 - $sJoinClause,  
752 - $sWhereClause,  
753 - $sOrderBy  
754 - );  
755 -  
756 - //var_dump(array($sQuery, $aFinalWhereParams));  
757 -  
758 - $res = DBUtil::getResultArray(array($sQuery, $aFinalWhereParams));  
759 - //var_dump($res); exit(0);  
760 - return $res;  
761 - }  
762 } 800 }
763 ?> 801 ?>
plugins/MyDropDocumentsPlugin/MyDropDocumentsPlugin.php
@@ -4,7 +4,7 @@ @@ -4,7 +4,7 @@
4 * License Version 1.1.2 ("License"); You may not use this file except in 4 * License Version 1.1.2 ("License"); You may not use this file except in
5 * compliance with the License. You may obtain a copy of the License at 5 * compliance with the License. You may obtain a copy of the License at
6 * http://www.knowledgetree.com/KPL 6 * http://www.knowledgetree.com/KPL
7 - * 7 + *
8 * Software distributed under the License is distributed on an "AS IS" 8 * Software distributed under the License is distributed on an "AS IS"
9 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. 9 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied.
10 * See the License for the specific language governing rights and 10 * See the License for the specific language governing rights and
@@ -15,9 +15,9 @@ @@ -15,9 +15,9 @@
15 * (ii) the KnowledgeTree copyright notice 15 * (ii) the KnowledgeTree copyright notice
16 * in the same form as they appear in the distribution. See the License for 16 * in the same form as they appear in the distribution. See the License for
17 * requirements. 17 * requirements.
18 - * 18 + *
19 * The Original Code is: KnowledgeTree Open Source 19 * The Original Code is: KnowledgeTree Open Source
20 - * 20 + *
21 * The Initial Developer of the Original Code is The Jam Warehouse Software 21 * The Initial Developer of the Original Code is The Jam Warehouse Software
22 * (Pty) Ltd, trading as KnowledgeTree. 22 * (Pty) Ltd, trading as KnowledgeTree.
23 * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright 23 * Portions created by The Jam Warehouse Software (Pty) Ltd are Copyright
@@ -26,28 +26,30 @@ @@ -26,28 +26,30 @@
26 * Contributor( s): ______________________________________ 26 * Contributor( s): ______________________________________
27 * 27 *
28 */ 28 */
29 - 29 +
30 require_once(KT_LIB_DIR . "/plugins/plugin.inc.php"); 30 require_once(KT_LIB_DIR . "/plugins/plugin.inc.php");
31 require_once(KT_LIB_DIR . "/plugins/pluginregistry.inc.php"); 31 require_once(KT_LIB_DIR . "/plugins/pluginregistry.inc.php");
32 32
33 class MyDropDocumentsPlugin extends KTPlugin 33 class MyDropDocumentsPlugin extends KTPlugin
34 { 34 {
35 var $sNamespace = 'ktlive.mydropdocuments.plugin'; 35 var $sNamespace = 'ktlive.mydropdocuments.plugin';
  36 + var $iVersion = 1;
36 var $autoRegister = true; 37 var $autoRegister = true;
37 - 38 +
38 function MyDropDocumentsPlugin($sFilename = null) { 39 function MyDropDocumentsPlugin($sFilename = null) {
39 - 40 +
40 $res = parent::KTPlugin($sFilename); 41 $res = parent::KTPlugin($sFilename);
41 $this->sFriendlyName = _kt('My Drop Documents'); 42 $this->sFriendlyName = _kt('My Drop Documents');
42 return $res; 43 return $res;
43 - 44 +
44 } 45 }
45 - 46 +
46 function setup() { 47 function setup() {
47 - 48 +
48 $this->registerDashlet('MyDropDocumentsDashlet', 'klive.mydropdocuments.dashlet', 'MyDropDocumentsDashlet.php'); 49 $this->registerDashlet('MyDropDocumentsDashlet', 'klive.mydropdocuments.dashlet', 'MyDropDocumentsDashlet.php');
49 $this->registerPage('MyDropDocuments', 'MyDropDocumentsPage', 'MyDropDocumentsPage.php'); 50 $this->registerPage('MyDropDocuments', 'MyDropDocumentsPage', 'MyDropDocumentsPage.php');
50 - 51 + $this->registerTrigger('user_create', 'postValidate', 'CreateUserFolderTrigger','ktlive.mydropdocuments.triggers.user_create', 'MyDropDocumentsDashlet.php');
  52 +
51 require_once(KT_LIB_DIR . "/templating/templating.inc.php"); 53 require_once(KT_LIB_DIR . "/templating/templating.inc.php");
52 $oTemplating =& KTTemplating::getSingleton(); 54 $oTemplating =& KTTemplating::getSingleton();
53 $oTemplating->addLocation('MyDropDocumentsDashlet', '/plugins/MyDropDocumentsPlugin/templates'); 55 $oTemplating->addLocation('MyDropDocumentsDashlet', '/plugins/MyDropDocumentsPlugin/templates');
plugins/ktcore/admin/userManagement.php
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 * KnowledgeTree Community Edition 5 * KnowledgeTree Community Edition
6 * Document Management Made Simple 6 * Document Management Made Simple
7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc. 7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc.
8 - * 8 + *
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify it under 10 * This program is free software; you can redistribute it and/or modify it under
11 * the terms of the GNU General Public License version 3 as published by the 11 * the terms of the GNU General Public License version 3 as published by the
@@ -39,6 +39,7 @@ @@ -39,6 +39,7 @@
39 require_once(KT_LIB_DIR . '/database/dbutil.inc'); 39 require_once(KT_LIB_DIR . '/database/dbutil.inc');
40 40
41 require_once(KT_LIB_DIR . '/users/User.inc'); 41 require_once(KT_LIB_DIR . '/users/User.inc');
  42 +require_once(KT_LIB_DIR . '/users/userutil.inc.php');
42 require_once(KT_LIB_DIR . '/groups/GroupUtil.php'); 43 require_once(KT_LIB_DIR . '/groups/GroupUtil.php');
43 require_once(KT_LIB_DIR . '/groups/Group.inc'); 44 require_once(KT_LIB_DIR . '/groups/Group.inc');
44 45
@@ -539,32 +540,21 @@ class KTUserAdminDispatcher extends KTAdminDispatcher { @@ -539,32 +540,21 @@ class KTUserAdminDispatcher extends KTAdminDispatcher {
539 $this->errorRedirectTo('addUser', _kt("You have entered an invalid character in your name.")); 540 $this->errorRedirectTo('addUser', _kt("You have entered an invalid character in your name."));
540 } 541 }
541 542
542 - $dupUser =& User::getByUserName($username);  
543 - if(!PEAR::isError($dupUser)) {  
544 - $this->errorRedirectTo('addUser', _kt("A user with that username already exists"));  
545 - }  
546 -  
547 543
  544 + $oUser = KTUserUtil::createUser($username, $name, $password, $email_address, $email_notifications, $mobile_number, $max_sessions);
548 545
549 - $oUser =& User::createFromArray(array(  
550 - "sUsername" => $username,  
551 - "sName" => $name,  
552 - "sPassword" => md5($password),  
553 - "iQuotaMax" => 0,  
554 - "iQuotaCurrent" => 0,  
555 - "sEmail" => $email_address,  
556 - "bEmailNotification" => $email_notifications,  
557 - "sMobile" => $mobile_number,  
558 - "bSmsNotification" => false, // FIXME do we auto-act if the user has a mobile?  
559 - "iMaxSessions" => $max_sessions,  
560 - )); 546 + if(PEAR::isError($oUser)){
  547 + if($oUser->getMessage() == _kt("A user with that username already exists")){
  548 + $this->errorRedirectTo('addUser', _kt("A user with that username already exists"));
  549 + exit();
  550 + }
561 551
562 - if (PEAR::isError($oUser) || ($oUser == false)) {  
563 $this->errorRedirectToMain(_kt("failed to create user."), sprintf("old_search=%s&do_search=1", $old_search)); 552 $this->errorRedirectToMain(_kt("failed to create user."), sprintf("old_search=%s&do_search=1", $old_search));
564 - exit(0); 553 + exit;
565 } 554 }
566 555
567 $this->successRedirectToMain(_kt('Created new user') . ': ' . $oUser->getUsername(), 'name=' . $oUser->getUsername(), sprintf("old_search=%s&do_search=1", $old_search)); 556 $this->successRedirectToMain(_kt('Created new user') . ': ' . $oUser->getUsername(), 'name=' . $oUser->getUsername(), sprintf("old_search=%s&do_search=1", $old_search));
  557 + return ;
568 } 558 }
569 559
570 function do_deleteUser() { 560 function do_deleteUser() {
plugins/ktstandard/ldap/ldapbaseauthenticationprovider.inc.php
@@ -5,7 +5,7 @@ @@ -5,7 +5,7 @@
5 * KnowledgeTree Community Edition 5 * KnowledgeTree Community Edition
6 * Document Management Made Simple 6 * Document Management Made Simple
7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc. 7 * Copyright (C) 2008, 2009, 2010 KnowledgeTree Inc.
8 - * 8 + *
9 * 9 *
10 * This program is free software; you can redistribute it and/or modify it under 10 * This program is free software; you can redistribute it and/or modify it under
11 * the terms of the GNU General Public License version 3 as published by the 11 * the terms of the GNU General Public License version 3 as published by the
@@ -322,11 +322,6 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider { @@ -322,11 +322,6 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider {
322 $username = KTUtil::arrayGet($_REQUEST, 'ldap_username'); 322 $username = KTUtil::arrayGet($_REQUEST, 'ldap_username');
323 if (empty($username)) { $this->errorRedirectToMain(_kt('You must specify a new username.')); } 323 if (empty($username)) { $this->errorRedirectToMain(_kt('You must specify a new username.')); }
324 324
325 - $dupUser =& User::getByUserName($username);  
326 - if(!PEAR::isError($dupUser)) {  
327 - $this->errorRedirectToMain(_kt("A user with that username already exists"));  
328 - }  
329 -  
330 $email_address = KTUtil::arrayGet($_REQUEST, 'email_address'); 325 $email_address = KTUtil::arrayGet($_REQUEST, 'email_address');
331 $email_notifications = KTUtil::arrayGet($_REQUEST, 'email_notifications', false); 326 $email_notifications = KTUtil::arrayGet($_REQUEST, 'email_notifications', false);
332 if ($email_notifications !== false) $email_notifications = true; 327 if ($email_notifications !== false) $email_notifications = true;
@@ -334,21 +329,10 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider { @@ -334,21 +329,10 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider {
334 $max_sessions = KTUtil::arrayGet($_REQUEST, 'max_sessions', '3'); 329 $max_sessions = KTUtil::arrayGet($_REQUEST, 'max_sessions', '3');
335 // FIXME check for numeric max_sessions... db-error else? 330 // FIXME check for numeric max_sessions... db-error else?
336 331
337 - $oUser =& User::createFromArray(array(  
338 - "Username" => $username,  
339 - "Name" => $name,  
340 - "Email" => $email_address,  
341 - "EmailNotification" => $email_notifications,  
342 - "SmsNotification" => false, // FIXME do we auto-act if the user has a mobile?  
343 - "MaxSessions" => $max_sessions,  
344 - "authenticationsourceid" => $oSource->getId(),  
345 - "authenticationdetails" => $dn,  
346 - "authenticationdetails2" => $samaccountname,  
347 - "password" => "",  
348 - )); 332 + $oUser = KTUserUtil::createUser($username, $name, '', $email_address, $email_notifications, '', $max_sessions, $oSource->getId(), $dn, $samaccountname);
349 333
350 if (PEAR::isError($oUser) || ($oUser == false)) { 334 if (PEAR::isError($oUser) || ($oUser == false)) {
351 - $this->errorRedirectToMain(_kt("failed to create user") . ": " . $oUser->message); 335 + $this->errorRedirectToMain($oUser->getMessage());
352 exit(0); 336 exit(0);
353 } 337 }
354 338
@@ -368,24 +352,24 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider { @@ -368,24 +352,24 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider {
368 $aResults = $oAuthenticator->getUser($sId); 352 $aResults = $oAuthenticator->getUser($sId);
369 $dn = $sId; 353 $dn = $sId;
370 $sUserName = $aResults[$this->aAttributes[1]]; 354 $sUserName = $aResults[$this->aAttributes[1]];
371 - 355 +
372 if ($sUserName == '') { 356 if ($sUserName == '') {
373 $dnParts = ldap_explode_dn($dn, 0); 357 $dnParts = ldap_explode_dn($dn, 0);
374 $sUserName = end(explode('=',$dnParts[0]));; 358 $sUserName = end(explode('=',$dnParts[0]));;
375 } 359 }
376 - 360 +
377 // With LDAP, if the 'uid' is null then try using the 'givenname' instead. 361 // With LDAP, if the 'uid' is null then try using the 'givenname' instead.
378 // See activedirectoryauthenticationprovider.inc.php and ldapauthenticationprovider.inc.php for details. 362 // See activedirectoryauthenticationprovider.inc.php and ldapauthenticationprovider.inc.php for details.
379 if($this->sAuthenticatorClass == "KTLDAPAuthenticator" && empty($sUserName)) { 363 if($this->sAuthenticatorClass == "KTLDAPAuthenticator" && empty($sUserName)) {
380 $sUserName = strtolower($aResults[$this->aAttributes[2]]); 364 $sUserName = strtolower($aResults[$this->aAttributes[2]]);
381 } 365 }
382 $sName = $aResults[$this->aAttributes[0]]; 366 $sName = $aResults[$this->aAttributes[0]];
383 - 367 +
384 if ($sName == '') { 368 if ($sName == '') {
385 $dnParts = ldap_explode_dn($dn, 0); 369 $dnParts = ldap_explode_dn($dn, 0);
386 $sName = end(explode('=',$dnParts[0]));; 370 $sName = end(explode('=',$dnParts[0]));;
387 } 371 }
388 - 372 +
389 $sEmailAddress = $aResults[$this->aAttributes[4]]; 373 $sEmailAddress = $aResults[$this->aAttributes[4]];
390 $sMobileNumber = $aResults[$this->aAttributes[5]]; 374 $sMobileNumber = $aResults[$this->aAttributes[5]];
391 375
@@ -397,19 +381,9 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider { @@ -397,19 +381,9 @@ class KTLDAPBaseAuthenticationProvider extends KTAuthenticationProvider {
397 $appending = true; 381 $appending = true;
398 } else $appending = false; 382 } else $appending = false;
399 } 383 }
400 -  
401 - $oUser = User::createFromArray(array(  
402 - "Username" => $sUserName,  
403 - "Name" => $sName,  
404 - "Email" => $sEmailAddress,  
405 - "EmailNotification" => true,  
406 - "SmsNotification" => false, // FIXME do we auto-act if the user has a mobile?  
407 - "MaxSessions" => 3,  
408 - "authenticationsourceid" => $oSource->getId(),  
409 - "authenticationdetails" => $dn,  
410 - "authenticationdetails2" => $sUserName,  
411 - "password" => "",  
412 - )); 384 +
  385 + $oUser = KTUserUtil::createUser($sUserName, $sName, '', $sEmailAddress, true, '', 3, $oSource->getId(), $dn, $sUserName);
  386 +
413 $aNames[] = $sName; 387 $aNames[] = $sName;
414 } 388 }
415 $this->successRedirectToMain(_kt("Added users") . ": " . join(', ', $aNames)); 389 $this->successRedirectToMain(_kt("Added users") . ": " . join(', ', $aNames));