Commit 4a71e74b20082d9a90c3cb4beff8946f86541587

Authored by Megan Watson
2 parents 97ecb54f d42bd589

Merge branch 'master' of git@github.com:ktgit/knowledgetree

lib/database/schema.inc.php
@@ -1012,7 +1012,7 @@ class KTSchemaUtil @@ -1012,7 +1012,7 @@ class KTSchemaUtil
1012 1012
1013 if (!$result) 1013 if (!$result)
1014 { 1014 {
1015 - print "..."; 1015 + //print "...";
1016 } 1016 }
1017 1017
1018 return $result; 1018 return $result;
plugins/ktcore/KTPermissions.php
@@ -874,7 +874,7 @@ class KTDocumentRolesAction extends KTDocumentAction { @@ -874,7 +874,7 @@ class KTDocumentRolesAction extends KTDocumentAction {
874 function do_main() { 874 function do_main() {
875 $this->oPage->setTitle(_kt("View Roles")); 875 $this->oPage->setTitle(_kt("View Roles"));
876 $this->oPage->setBreadcrumbDetails(_kt("View Roles")); 876 $this->oPage->setBreadcrumbDetails(_kt("View Roles"));
877 - $oTemplating = new KTTemplating; 877 + $oTemplating =& KTTemplating::getSingleton();
878 $oTemplate = $oTemplating->loadTemplate("ktcore/action/view_roles"); 878 $oTemplate = $oTemplating->loadTemplate("ktcore/action/view_roles");
879 879
880 // we need to have: 880 // we need to have:
search2/documentProcessor/documentProcessor.inc.php
@@ -173,7 +173,6 @@ class DocumentProcessor @@ -173,7 +173,6 @@ class DocumentProcessor
173 // indexing starting - create lock file 173 // indexing starting - create lock file
174 touch($lockFile); 174 touch($lockFile);
175 175
176 -  
177 // Process queue 176 // Process queue
178 foreach($queue as $item){ 177 foreach($queue as $item){
179 178
search2/indexing/extractorCore.inc.php
@@ -695,7 +695,6 @@ abstract class TextExtractor extends DocumentExtractor @@ -695,7 +695,6 @@ abstract class TextExtractor extends DocumentExtractor
695 */ 695 */
696 public function extractTextContent() 696 public function extractTextContent()
697 { 697 {
698 -  
699 $config = KTConfig::getSingleton(); 698 $config = KTConfig::getSingleton();
700 $maxTextSize = $config->get('indexer/maxTextSize', 1024 * 1024 * 10); // we'll only take 10 meg by default 699 $maxTextSize = $config->get('indexer/maxTextSize', 1024 * 1024 * 10); // we'll only take 10 meg by default
701 $content = file_get_contents($this->sourcefile, null, null, null, $maxTextSize); 700 $content = file_get_contents($this->sourcefile, null, null, null, $maxTextSize);
search2/indexing/indexerCore.inc.php
@@ -1255,6 +1255,15 @@ abstract class Indexer @@ -1255,6 +1255,15 @@ abstract class Indexer
1255 // increment indexed documents count 1255 // increment indexed documents count
1256 Indexer::incrementCount(); 1256 Indexer::incrementCount();
1257 1257
  1258 + // if document is a zero byte file, let's just unqueue and return
  1259 + if ($document->getFileSize() == 0)
  1260 + {
  1261 + Indexer::unqueueDocument($docinfo['document_id'],
  1262 + sprintf(_kt("Zero Byte documents do not need to be indexed: %d"),
  1263 + $docinfo['document_id']));
  1264 + return;
  1265 + }
  1266 +
1258 $docId = $docinfo['document_id']; 1267 $docId = $docinfo['document_id'];
1259 $extension = $docinfo['filetypes']; 1268 $extension = $docinfo['filetypes'];
1260 $mimeType = $docinfo['mimetypes']; 1269 $mimeType = $docinfo['mimetypes'];
@@ -1312,7 +1321,7 @@ abstract class Indexer @@ -1312,7 +1321,7 @@ abstract class Indexer
1312 Indexer::unqueueDocument($docId,sprintf(_kt("indexDocuments: Filename for document id %d starts with a tilde (~). This is assumed to be a temporary file. This is ignored."),$docId), 'error'); 1321 Indexer::unqueueDocument($docId,sprintf(_kt("indexDocuments: Filename for document id %d starts with a tilde (~). This is assumed to be a temporary file. This is ignored."),$docId), 'error');
1313 return ; 1322 return ;
1314 } 1323 }
1315 - 1324 +
1316 $removeFromQueue = true; 1325 $removeFromQueue = true;
1317 if ($indexDocument) 1326 if ($indexDocument)
1318 { 1327 {
setup/upgrade.php
@@ -183,10 +183,11 @@ if (PEAR::isError($dbSupport)) { @@ -183,10 +183,11 @@ if (PEAR::isError($dbSupport)) {
183 183
184 184
185 ?> 185 ?>
  186 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN">
186 <html> 187 <html>
187 <head> 188 <head>
188 <title><?php echo APP_NAME;?> Upgrade</title> 189 <title><?php echo APP_NAME;?> Upgrade</title>
189 - <style> 190 + <style type="text/css">
190 th { text-align: left; } 191 th { text-align: left; }
191 td { vertical-align: top; } 192 td { vertical-align: top; }
192 .foo { float: left; } 193 .foo { float: left; }
@@ -203,13 +204,13 @@ td { vertical-align: top; } @@ -203,13 +204,13 @@ td { vertical-align: top; }
203 echo $oKTConfig->get('ui/mainLogo'); 204 echo $oKTConfig->get('ui/mainLogo');
204 }else{ 205 }else{
205 echo '../resources/graphics/ktlogo-topbar_base.png'; 206 echo '../resources/graphics/ktlogo-topbar_base.png';
206 - }?>"> 207 + }?>"/>
207 <p> 208 <p>
208 - <img src="upgrade-title.jpg">  
209 - <table width=800 height=500> 209 + <img src="upgrade-title.jpg"/>
  210 + <table style="width:800; height:500">
210 <tr><td> 211 <tr><td>
211 <P> 212 <P>
212 - <script> 213 + <script type="text/javascript">
213 function do_start(action) 214 function do_start(action)
214 { 215 {
215 document.location='?go=' + action; 216 document.location='?go=' + action;
@@ -458,8 +459,8 @@ function create_restore_stmt($targetfile) @@ -458,8 +459,8 @@ function create_restore_stmt($targetfile)
458 459
459 $tmpdir=resolveTempDir(); 460 $tmpdir=resolveTempDir();
460 461
461 - $stmt = $prefix ."mysqladmin --user=\"$adminUser\" -p $mechanism drop \"$dbName\"<br>";  
462 - $stmt .= $prefix ."mysqladmin --user=\"$adminUser\" -p $mechanism create \"$dbName\"<br>"; 462 + $stmt = $prefix ."mysqladmin --user=\"$adminUser\" -p $mechanism drop \"$dbName\"<br/>";
  463 + $stmt .= $prefix ."mysqladmin --user=\"$adminUser\" -p $mechanism create \"$dbName\"<br/>";
463 464
464 465
465 $stmt .= $prefix ."mysql --user=\"$adminUser\" -p $mechanism \"$dbName\" < \"$targetfile\"\n"; 466 $stmt .= $prefix ."mysql --user=\"$adminUser\" -p $mechanism \"$dbName\" < \"$targetfile\"\n";
@@ -478,7 +479,7 @@ function title($title) @@ -478,7 +479,7 @@ function title($title)
478 { 479 {
479 if (!isset($_SESSION['setup_user'])) 480 if (!isset($_SESSION['setup_user']))
480 { 481 {
481 - print "<script>document.location='?go=Login'</script>"; 482 + print "<script type='text/javascript'>document.location='?go=Login'</script>";
482 } 483 }
483 print "<h1>$title</h1>"; 484 print "<h1>$title</h1>";
484 } 485 }
@@ -511,10 +512,10 @@ function upgradeConfirm() @@ -511,10 +512,10 @@ function upgradeConfirm()
511 if (!isset($_SESSION['backupStatus']) || $_SESSION['backupStatus'] === false) 512 if (!isset($_SESSION['backupStatus']) || $_SESSION['backupStatus'] === false)
512 { 513 {
513 ?> 514 ?>
514 -<br> 515 +<br/>
515 <font color="Red">Please ensure that you have made a backup before continuing with the upgrade process.</font> 516 <font color="Red">Please ensure that you have made a backup before continuing with the upgrade process.</font>
516 <p> 517 <p>
517 -<br> 518 +<br/>
518 <?php 519 <?php
519 } 520 }
520 ?> 521 ?>
@@ -550,7 +551,7 @@ Your mysql installation has been resolved. Manually, you would do the following: @@ -550,7 +551,7 @@ Your mysql installation has been resolved. Manually, you would do the following:
550 <tr> 551 <tr>
551 <td> 552 <td>
552 <nobr>cd "<?php echo $dir;?>"</nobr> 553 <nobr>cd "<?php echo $dir;?>"</nobr>
553 -<br> 554 +<br/>
554 <?php 555 <?php
555 } 556 }
556 else 557 else
@@ -617,7 +618,7 @@ function restoreSelect() @@ -617,7 +618,7 @@ function restoreSelect()
617 <P> 618 <P>
618 Select a backup to restore from the list below: 619 Select a backup to restore from the list below:
619 <P> 620 <P>
620 - <script> 621 + <script type="text/javascript">
621 function selectRestore(filename) 622 function selectRestore(filename)
622 { 623 {
623 document.location='?go=RestoreSelected&file=' + filename; 624 document.location='?go=RestoreSelected&file=' + filename;
@@ -659,7 +660,7 @@ function restoreSelected() @@ -659,7 +660,7 @@ function restoreSelected()
659 $dir = resolveTempDir(); 660 $dir = resolveTempDir();
660 $_SESSION['backupFile'] = $dir . '/' . $file; 661 $_SESSION['backupFile'] = $dir . '/' . $file;
661 ?> 662 ?>
662 -<script> 663 +<script type="text/javascript">
663 document.location='?go=RestoreConfirm'; 664 document.location='?go=RestoreConfirm';
664 </script> 665 </script>
665 <?php 666 <?php
@@ -691,7 +692,7 @@ Manually, you would do the following to restore the backup: @@ -691,7 +692,7 @@ Manually, you would do the following to restore the backup:
691 <tr> 692 <tr>
692 <td> 693 <td>
693 <nobr>cd "<?php echo $dir;?>"</nobr> 694 <nobr>cd "<?php echo $dir;?>"</nobr>
694 -<br> 695 +<br/>
695 <?php 696 <?php
696 } 697 }
697 else 698 else
@@ -709,6 +710,8 @@ You can continue to do the restore manually using the following command(s): @@ -709,6 +710,8 @@ You can continue to do the restore manually using the following command(s):
709 } 710 }
710 ?> 711 ?>
711 <nobr><?php echo $stmt['display'];?></nobr> 712 <nobr><?php echo $stmt['display'];?></nobr>
  713 +</td>
  714 +</tr>
712 </table> 715 </table>
713 <P> 716 <P>
714 <?php 717 <?php
@@ -729,7 +732,7 @@ Press &lt;i&gt;continue to restore&lt;/i&gt; to attempt the command(s) above. @@ -729,7 +732,7 @@ Press &lt;i&gt;continue to restore&lt;/i&gt; to attempt the command(s) above.
729 if ($dir != '') 732 if ($dir != '')
730 { 733 {
731 ?> 734 ?>
732 -<script> 735 +<script type="text/javascript">
733 function restore() 736 function restore()
734 { 737 {
735 if (confirm('Are you sure you want to restore? This is your last chance if the current data has not been backed up.')) 738 if (confirm('Are you sure you want to restore? This is your last chance if the current data has not been backed up.'))
@@ -758,7 +761,7 @@ function backupDone() @@ -758,7 +761,7 @@ function backupDone()
758 { 761 {
759 $stmt=create_restore_stmt($filename); 762 $stmt=create_restore_stmt($filename);
760 ?> 763 ?>
761 - The backup file <nobr><I>"<?php echo $filename;?>"</i></nobr> has been created. 764 + The backup file <nobr><i>"<?php echo $filename;?>"</i></nobr> has been created.
762 <P> It appears as though the <font color=green>backup has been successful</font>. 765 <P> It appears as though the <font color=green>backup has been successful</font>.
763 <P> 766 <P>
764 <?php 767 <?php
@@ -771,7 +774,7 @@ function backupDone() @@ -771,7 +774,7 @@ function backupDone()
771 <tr> 774 <tr>
772 <td> 775 <td>
773 <nobr>cd <?php echo $stmt['dir'];?></nobr> 776 <nobr>cd <?php echo $stmt['dir'];?></nobr>
774 - <br> 777 + <br/>
775 <?php 778 <?php
776 } 779 }
777 else 780 else
@@ -809,7 +812,7 @@ We appologise for the inconvenience. @@ -809,7 +812,7 @@ We appologise for the inconvenience.
809 812
810 } 813 }
811 ?> 814 ?>
812 -<br> 815 +<br/>
813 816
814 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('welcome')"> 817 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('welcome')">
815 <?php 818 <?php
@@ -833,7 +836,7 @@ function restoreDone() @@ -833,7 +836,7 @@ function restoreDone()
833 { 836 {
834 837
835 ?> 838 ?>
836 - The restore of <nobr><I>"<?php echo $filename;?>"</i></nobr> has been completed. 839 + The restore of <nobr><i>"<?php echo $filename;?>"</i></nobr> has been completed.
837 <P> 840 <P>
838 It appears as though the <font color=green>restore has been successful</font>. 841 It appears as though the <font color=green>restore has been successful</font>.
839 <P> 842 <P>
@@ -861,7 +864,7 @@ We appologise for the inconvenience. @@ -861,7 +864,7 @@ We appologise for the inconvenience.
861 } 864 }
862 ?> 865 ?>
863 866
864 -<br> 867 +<br/>
865 868
866 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('welcome')"> 869 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('welcome')">
867 870
@@ -878,7 +881,7 @@ function check_state($value, $state=&#39;Home&#39;) @@ -878,7 +881,7 @@ function check_state($value, $state=&#39;Home&#39;)
878 if ($_SESSION['state'] != $value) 881 if ($_SESSION['state'] != $value)
879 { 882 {
880 ?> 883 ?>
881 - <script> 884 + <script type="text/javascript">
882 document.location="?go=<?php echo $state;?>"; 885 document.location="?go=<?php echo $state;?>";
883 </script> 886 </script>
884 <?php 887 <?php
@@ -935,7 +938,7 @@ function backup() @@ -935,7 +938,7 @@ function backup()
935 $_SESSION['backupStatus'] = false; 938 $_SESSION['backupStatus'] = false;
936 } 939 }
937 ?> 940 ?>
938 - <script> 941 + <script type="text/javascript">
939 document.location="?go=BackupDone"; 942 document.location="?go=BackupDone";
940 </script> 943 </script>
941 <?php 944 <?php
@@ -1007,7 +1010,7 @@ function restore() @@ -1007,7 +1010,7 @@ function restore()
1007 1010
1008 1011
1009 ?> 1012 ?>
1010 - <script> 1013 + <script type="text/javascript">
1011 document.location="?go=RestoreDone"; 1014 document.location="?go=RestoreDone";
1012 </script> 1015 </script>
1013 <?php 1016 <?php
@@ -1033,22 +1036,22 @@ function welcome() @@ -1033,22 +1036,22 @@ function welcome()
1033 { 1036 {
1034 set_state(1); 1037 set_state(1);
1035 ?> 1038 ?>
1036 -<br> 1039 +<br/>
1037 Welcome to the <?php echo APP_NAME;?> Database Upgrade Wizard.<P> If you have just updated 1040 Welcome to the <?php echo APP_NAME;?> Database Upgrade Wizard.<P> If you have just updated
1038 your <?php echo APP_NAME;?> code base, you will need to complete the upgrade process in order to ensure your system is fully operational with the new version. 1041 your <?php echo APP_NAME;?> code base, you will need to complete the upgrade process in order to ensure your system is fully operational with the new version.
1039 <P> 1042 <P>
1040 You will not be able to log into <?php echo APP_NAME;?> until your the database upgrade process is completed. 1043 You will not be able to log into <?php echo APP_NAME;?> until your the database upgrade process is completed.
1041 <P> 1044 <P>
1042 -<font color=orange>!!NB!! You are advised to backup the database before attempting the upgrade. !!NB!!</font> 1045 +<font color="#ffa500">!!NB!! You are advised to backup the database before attempting the upgrade. !!NB!!</font>
1043 <P> 1046 <P>
1044 If you have already done this, you may skip this step can continue directly to the upgrade. 1047 If you have already done this, you may skip this step can continue directly to the upgrade.
1045 <P> 1048 <P>
1046 1049
1047 1050
1048 -&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="cancel" onclick="document.location='..';">  
1049 -&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="backup now" onclick="javascript:do_start('BackupConfirm');">  
1050 -&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="next" onclick="javascript:do_start('UpgradeConfirm');">  
1051 -&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="restore database" onclick="javascript:do_start('RestoreConfirm');"> 1051 +&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="cancel" onclick="document.location='..';"/>
  1052 +&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="backup now" onclick="javascript:do_start('BackupConfirm');"/>
  1053 +&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="next" onclick="javascript:do_start('UpgradeConfirm');"/>
  1054 +&nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="restore database" onclick="javascript:do_start('RestoreConfirm');"/>
1052 1055
1053 1056
1054 <?php 1057 <?php
@@ -1069,7 +1072,7 @@ function UpgradePreview() @@ -1069,7 +1072,7 @@ function UpgradePreview()
1069 $upgradeTable = generateUpgradeTable(); 1072 $upgradeTable = generateUpgradeTable();
1070 print $upgradeTable; 1073 print $upgradeTable;
1071 ?> 1074 ?>
1072 - <br> 1075 + <br/>
1073 1076
1074 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('home')"> 1077 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="back" onclick="javascript:do_start('home')">
1075 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="next" onclick="javascript:do_start('Upgrade')"> 1078 &nbsp;&nbsp; &nbsp; &nbsp; <input type=button value="next" onclick="javascript:do_start('Upgrade')">
@@ -1091,14 +1094,14 @@ function Upgrade() @@ -1091,14 +1094,14 @@ function Upgrade()
1091 if (PEAR::isError($pre_res)) 1094 if (PEAR::isError($pre_res))
1092 { 1095 {
1093 ?> 1096 ?>
1094 -<font color="red">Pre-Upgrade actions failed.</font><br> 1097 +<font color="red">Pre-Upgrade actions failed.</font><br/>
1095 <?php 1098 <?php
1096 } 1099 }
1097 else 1100 else
1098 { 1101 {
1099 ?> 1102 ?>
1100 <p> 1103 <p>
1101 -<font color="green">Pre-Upgrade actions succeeded.</font><br> 1104 +<font color="green">Pre-Upgrade actions succeeded.</font><br/>
1102 <?php 1105 <?php
1103 } 1106 }
1104 ?> 1107 ?>
@@ -1125,15 +1128,15 @@ function Upgrade() @@ -1125,15 +1128,15 @@ function Upgrade()
1125 if (PEAR::isError($post_res)) 1128 if (PEAR::isError($post_res))
1126 { 1129 {
1127 ?> 1130 ?>
1128 -<font color="red">Post-Upgrade actions failed.</font><br><br> 1131 +<font color="red">Post-Upgrade actions failed.</font><br/><br/>
1129 <?php 1132 <?php
1130 } 1133 }
1131 else 1134 else
1132 { 1135 {
1133 ?> 1136 ?>
1134 <p> 1137 <p>
1135 -<font color="green">Post-Upgrade actions succeeded.</font><br><br>  
1136 -<script> 1138 +<font color="green">Post-Upgrade actions succeeded.</font><br/><br/>
  1139 +<script type="text/javascript">
1137 alert("To complete the upgrade please do the following before continuing:\n\n1. Restart the services as appropriate for your environment.\n\n\nOn first run of your upgraded installaton please do the following:\n\n1. Hard refresh your bowser (CTRL-F5) on first view of the Dashboard.\n2. Enable the new plugins you wish to use.\n\n\nSelect 'next' at the bottom of this page to continue.") 1140 alert("To complete the upgrade please do the following before continuing:\n\n1. Restart the services as appropriate for your environment.\n\n\nOn first run of your upgraded installaton please do the following:\n\n1. Hard refresh your bowser (CTRL-F5) on first view of the Dashboard.\n2. Enable the new plugins you wish to use.\n\n\nSelect 'next' at the bottom of this page to continue.")
1138 </script> 1141 </script>
1139 <?php 1142 <?php
@@ -1151,6 +1154,6 @@ function Upgrade() @@ -1151,6 +1154,6 @@ function Upgrade()
1151 if($oKTConfig->get('ui/poweredByDisabled') == '0'){ 1154 if($oKTConfig->get('ui/poweredByDisabled') == '0'){
1152 ?> align="right"><img src="<?php echo $oKTConfig->get('ui/powerLogo');?>"></td> 1155 ?> align="right"><img src="<?php echo $oKTConfig->get('ui/powerLogo');?>"></td>
1153 <?php }else{ ?> 1156 <?php }else{ ?>
1154 - background="../resources/graphics/ktbg.png">&nbsp;</td> 1157 + style="background:url('../resources/graphics/ktbg.png')>&nbsp;</td>
1155 <?php }?> 1158 <?php }?>
1156 </table> 1159 </table>
sql/mysql/upgrade/3.1.6.3/groups-integrity.sql
@@ -2,13 +2,37 @@ @@ -2,13 +2,37 @@
2 2
3 -- parent_group_id 3 -- parent_group_id
4 4
5 -DELETE FROM `groups_groups_link` as gg USING `groups_groups_link` as gg, groups_lookup  
6 - WHERE not exists(select 1 from `groups_lookup` as g where gg.parent_group_id = g.id); 5 +CREATE TEMPORARY TABLE cleanup (
  6 + `id` int(11) NOT NULL auto_increment,
  7 + `parent_group_id` int(11) NOT NULL default '0',
  8 + `member_group_id` int(11) NOT NULL default '0',
  9 + PRIMARY KEY (`id`),
  10 + KEY `parent_group_id` (`parent_group_id`),
  11 + KEY `member_group_id` (`member_group_id`)
  12 +);
  13 +INSERT INTO cleanup (id, parent_group_id, member_group_id)
  14 +SELECT * FROM `groups_groups_link` AS gg WHERE ( SELECT 1 FROM `groups_lookup` AS g WHERE gg.parent_group_id = g.id);
  15 +SELECT * FROM cleanup;
  16 +TRUNCATE groups_groups_link;
  17 +INSERT groups_groups_link SELECT * FROM cleanup;
  18 +DROP TABLE cleanup;
7 19
8 -- member_group_id 20 -- member_group_id
9 21
10 -DELETE FROM `groups_groups_link` as gg USING `groups_groups_link` as gg, groups_lookup  
11 - WHERE not exists(select 1 from `groups_lookup` as g where gg.member_group_id = g.id); 22 +CREATE TEMPORARY TABLE cleanup (
  23 + `id` int(11) NOT NULL auto_increment,
  24 + `parent_group_id` int(11) NOT NULL default '0',
  25 + `member_group_id` int(11) NOT NULL default '0',
  26 + PRIMARY KEY (`id`),
  27 + KEY `parent_group_id` (`parent_group_id`),
  28 + KEY `member_group_id` (`member_group_id`)
  29 +);
  30 +INSERT INTO cleanup (id, parent_group_id, member_group_id)
  31 +SELECT * FROM `groups_groups_link` AS gg WHERE ( SELECT 1 FROM `groups_lookup` AS g WHERE gg.member_group_id = g.id);
  32 +SELECT * FROM cleanup;
  33 +TRUNCATE groups_groups_link;
  34 +INSERT groups_groups_link SELECT * FROM cleanup;
  35 +DROP TABLE cleanup;
12 36
13 -- ADD CONSTRAINT 37 -- ADD CONSTRAINT
14 38
@@ -16,21 +40,44 @@ ALTER TABLE `groups_groups_link` @@ -16,21 +40,44 @@ ALTER TABLE `groups_groups_link`
16 ADD CONSTRAINT `groups_groups_link_ibfk_1` FOREIGN KEY (`parent_group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE, 40 ADD CONSTRAINT `groups_groups_link_ibfk_1` FOREIGN KEY (`parent_group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE,
17 ADD CONSTRAINT `groups_groups_link_ibfk_2` FOREIGN KEY (`member_group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE; 41 ADD CONSTRAINT `groups_groups_link_ibfk_2` FOREIGN KEY (`member_group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE;
18 42
  43 +
19 -- PREPARE FOR ADDING CONSTRAINTS ON `users_groups_link` 44 -- PREPARE FOR ADDING CONSTRAINTS ON `users_groups_link`
20 45
21 -- group_id 46 -- group_id
22 -  
23 -DELETE FROM `users_groups_link` as ug USING `users_groups_link` as ug, groups_lookup  
24 - WHERE not exists(select 1 from `groups_lookup` as g where ug.group_id = g.id); 47 +CREATE TEMPORARY TABLE cleanup (
  48 + `id` int(11) NOT NULL auto_increment,
  49 + `user_id` int(11) NOT NULL default '0',
  50 + `group_id` int(11) NOT NULL default '0',
  51 + PRIMARY KEY (`id`),
  52 + KEY `user_id` (`user_id`),
  53 + KEY `group_id` (`group_id`)
  54 +);
  55 +INSERT INTO cleanup (id, user_id, group_id)
  56 +SELECT * FROM `users_groups_link` AS ug WHERE ( SELECT 1 FROM `groups_lookup` AS g WHERE ug.group_id = g.id);
  57 +SELECT * FROM cleanup;
  58 +TRUNCATE groups_groups_link;
  59 +INSERT groups_groups_link SELECT * FROM cleanup;
  60 +DROP TABLE cleanup;
25 61
26 -- user_id 62 -- user_id
27 -  
28 -DELETE FROM `users_groups_link` as ug USING `users_groups_link` as ug, users  
29 - WHERE not exists(select 1 from `users` as u where ug.user_id = u.id); 63 +CREATE TEMPORARY TABLE cleanup (
  64 + `id` int(11) NOT NULL auto_increment,
  65 + `user_id` int(11) NOT NULL default '0',
  66 + `group_id` int(11) NOT NULL default '0',
  67 + PRIMARY KEY (`id`),
  68 + KEY `user_id` (`user_id`),
  69 + KEY `group_id` (`group_id`)
  70 +);
  71 +INSERT INTO cleanup (id, user_id, group_id)
  72 +SELECT * FROM `users_groups_link` AS ug WHERE ( SELECT 1 FROM `groups_lookup` AS g WHERE ug.user_id = g.id);
  73 +SELECT * FROM cleanup;
  74 +TRUNCATE groups_groups_link;
  75 +INSERT groups_groups_link SELECT * FROM cleanup;
  76 +DROP TABLE cleanup;
30 77
31 -- ADD CONSTRAINT 78 -- ADD CONSTRAINT
32 79
33 ALTER TABLE `users_groups_link` 80 ALTER TABLE `users_groups_link`
34 ADD CONSTRAINT `users_groups_link_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE, 81 ADD CONSTRAINT `users_groups_link_ibfk_1` FOREIGN KEY (`group_id`) REFERENCES `groups_lookup` (`id`) ON DELETE CASCADE,
35 - ADD CONSTRAINT `users_groups_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE; 82 + ADD CONSTRAINT `users_groups_link_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
36 83
templates/ktcore/search2/adv_query_builder.smarty
@@ -426,7 +426,7 @@ function addFieldTypeSelection(groupid, fid, type, options) @@ -426,7 +426,7 @@ function addFieldTypeSelection(groupid, fid, type, options)
426 var html = ''; 426 var html = '';
427 var callback = null; 427 var callback = null;
428 var params = null; 428 var params = null;
429 -alert(type); 429 +
430 switch(type) 430 switch(type)
431 { 431 {
432 case 'FILESIZE': 432 case 'FILESIZE':
templates/ktcore/search2/search_results.smarty
@@ -156,10 +156,10 @@ function onShowAll(showall) @@ -156,10 +156,10 @@ function onShowAll(showall)
156 <span class="contenttype {$hit->MimeIconPath}"> 156 <span class="contenttype {$hit->MimeIconPath}">
157 157
158 {if $hit->IsDocument} 158 {if $hit->IsDocument}
159 - &nbsp;&nbsp;<a href="{$rootUrl}/view.php?fDocumentId={$hit->Id}"><B>{$hit->Title|mb_truncate:30:'...':true}</b></a> 159 + &nbsp;&nbsp;<a href="{$rootUrl}/view.php?fDocumentId={$hit->Id}" title="{$hit->Title}"><B>{$hit->Title|mb_truncate:80:'...':true}</b></a>
160 {if $hit->Title != $hit->Filename} 160 {if $hit->Title != $hit->Filename}
161 - &nbsp;&nbsp;  
162 - <font style=" color: green "> - {i18n}Filename:{/i18n} {$hit->Filename|mb_truncate:30:'...':true}</font> 161 + <br/>
  162 + <font style=" color: green ">{i18n}Filename:{/i18n} {$hit->Filename|mb_truncate:80:'...':true}</font>
163 {/if} 163 {/if}
164 {if $hit->IsAvailable} 164 {if $hit->IsAvailable}
165 &nbsp;&nbsp; 165 &nbsp;&nbsp;
tests/api/testElectronicSignatures.php 0 โ†’ 100644
  1 +<?php
  2 +require_once (KT_DIR . '/tests/test.php');
  3 +require_once (KT_DIR . '/ktapi/ktapi.inc.php');
  4 +
  5 +/**
  6 +* These are the unit tests for the main KTAPI class
  7 +*
  8 +*/
  9 +class APIElectronicSignaturesTestCase extends KTUnitTestCase {
  10 +
  11 + /**
  12 + * @var object $ktapi The main ktapi object
  13 + */
  14 + var $ktapi;
  15 +
  16 + /**
  17 + * @var object $session The KT session object
  18 + */
  19 + var $session;
  20 +
  21 + /**
  22 + * @var object $root The KT folder object
  23 + */
  24 + var $root;
  25 +
  26 + /**
  27 + * @var bool $esig_enabled True if electronic signatures for api are enabled | False if not enabled
  28 + */
  29 + var $esig_enabled;
  30 +
  31 + /**
  32 + * This method sets up the KT session
  33 + *
  34 + */
  35 + public function setUp() {
  36 + $this->ktapi = new KTAPI();
  37 + $this->session = $this->ktapi->start_session('admin', 'admin');
  38 + $this->root = $this->ktapi->get_root_folder();
  39 + $this->assertTrue($this->root instanceof KTAPI_Folder);
  40 + $this->esig_enabled = $this->ktapi->electronic_sig_enabled();
  41 + $this->assertTrue($this->esig_enabled);
  42 + }
  43 +
  44 + /**
  45 + * This method emds the KT session
  46 + *
  47 + */
  48 + public function tearDown() {
  49 + $this->session->logout();
  50 + }
  51 +
  52 + /* *** Test webservice functions *** */
  53 +
  54 + /**
  55 + * Testing folder creation and deletion, add document, get folder contents, folder detail
  56 + * Folder shortcuts and actions
  57 + */
  58 + public function testFolderApiFunctions()
  59 + {
  60 + // Create a folder
  61 + // test without authentication - should fail
  62 + $result1 = $this->ktapi->create_folder(1, 'New test api folder');
  63 + $this->assertEqual($result1['status_code'], 1);
  64 +
  65 + // test with authentication
  66 + $result2 = $this->ktapi->create_folder(1, 'New test api folder', 'admin', 'admin', 'Testing API');
  67 + $folder_id = $result2['results']['id'];
  68 + $this->assertEqual($result2['status_code'], 0);
  69 + $this->assertTrue($result2['results']['parent_id'] == 1);
  70 +
  71 + // Create a sub folder
  72 + // test without authentication - should fail
  73 + $result3 = $this->ktapi->create_folder($folder_id, 'New test api sub-folder');
  74 + $this->assertEqual($result3['status_code'], 1);
  75 +
  76 + // test with authentication
  77 + $result4 = $this->ktapi->create_folder($folder_id, 'New test api sub-folder', 'admin', 'admin', 'Testing API');
  78 + $folder_id2 = $result4['results']['id'];
  79 + $this->assertEqual($result4['status_code'], 0);
  80 +
  81 + // Add a document
  82 + global $default;
  83 + $dir = $default->uploadDirectory;
  84 + $tempfilename = $this->createRandomFile('some text', $dir);
  85 +
  86 + // test without authentication - should fail
  87 + $doc = $this->ktapi->add_document($folder_id, 'New API test doc', 'testdoc1.txt', 'Default', $tempfilename);
  88 + $this->assertEqual($doc['status_code'], 1);
  89 +
  90 + // test with authentication
  91 + $doc = $this->ktapi->add_document($folder_id, 'New API test doc', 'testdoc1.txt', 'Default', $tempfilename,
  92 + 'admin', 'admin', 'Testing API');
  93 + $this->assertEqual($doc['status_code'], 0);
  94 + $doc_id = $doc['results']['document_id'];
  95 + $this->assertEqual($doc['results']['title'], 'New API test doc');
  96 +
  97 + // Rename the folder
  98 + // test without authentication - should fail
  99 + $renamed = $this->ktapi->rename_folder($folder_id, 'Renamed test folder');
  100 + $this->assertEqual($renamed['status_code'], 1);
  101 +
  102 + // test with authentication
  103 + $renamed = $this->ktapi->rename_folder($folder_id, 'Renamed test folder', 'admin', 'admin', 'Testing API');
  104 + $this->assertEqual($renamed['status_code'], 0);
  105 +
  106 + /**
  107 + * Copy and move appear to fail in other parts of the code, so only going to test failure here
  108 + *
  109 + * Must be VERY careful here with skipping the valid submissions, 3 failed auth attempts in a row locks out the user!
  110 + */
  111 + // Copy folder
  112 + // test without authentication - should fail
  113 + $copied = $this->ktapi->copy_folder($source_id, $target_id, $reason);
  114 + $this->assertEqual($copied['status_code'], 1);
  115 +
  116 +// // test with authentication
  117 +// $copied = $this->ktapi->copy_folder($source_id, $target_id, $reason, 'admin', 'admin');
  118 +// echo $copied['status_code']."sd<BR>";
  119 +// $this->assertEqual($copied['status_code'], 0);
  120 +
  121 + // Move folder
  122 + // test without authentication - should fail
  123 + $moved = $this->ktapi->move_folder($source_id, $target_id, $reason);
  124 + $this->assertEqual($moved['status_code'], 1);
  125 +
  126 + // before we end up with 3 fails in a row (see note above the first copy attempt,) force a successful auth
  127 + $renamed = $this->ktapi->rename_folder($folder_id, 'A New Name', 'admin', 'admin', 'Testing API');
  128 +
  129 +// // test with authentication
  130 +// $moved = $this->ktapi->move_folder($source_id, $target_id, $reason, 'admin', 'admin');
  131 +// $this->assertEqual($moved['status_code'], 0);
  132 +
  133 + // before we end up with 3 fails in a row (see note above the first copy attempt,) force a successful auth
  134 + $renamed = $this->ktapi->rename_folder($folder_id, 'A New Name', 'admin', 'admin', 'Testing API');
  135 +
  136 + // Clean up - delete the folder
  137 + // test without authentication - should fail
  138 + $deleted = $this->ktapi->delete_folder($folder_id, 'Testing API');
  139 + $this->assertEqual($deleted['status_code'], 1);
  140 +
  141 + // test with authentication
  142 + $deleted = $this->ktapi->delete_folder($folder_id, 'Testing API', 'admin', 'admin');
  143 + $this->assertEqual($deleted['status_code'], 0);
  144 + }
  145 +
  146 + /**
  147 + * Testing document get, update, actions, delete, shortcuts and detail
  148 + */
  149 + public function testDocumentApiFunctions()
  150 + {
  151 + // Create a folder
  152 + // test without authentication - should fail
  153 + $result1 = $this->ktapi->create_folder(1, 'New test api folder');
  154 + $this->assertEqual($result1['status_code'], 1);
  155 +
  156 + // test with authentication
  157 + $result2 = $this->ktapi->create_folder(1, 'New test api folder', 'admin', 'admin', 'Testing API');
  158 + $folder_id = $result2['results']['id'];
  159 + $this->assertEqual($result2['status_code'], 0);
  160 +
  161 + // Create a sub folder
  162 + // test without authentication - should fail
  163 + $result3 = $this->ktapi->create_folder($folder_id, 'New test api sub-folder');
  164 + $this->assertEqual($result3['status_code'], 1);
  165 +
  166 + // test with authentication
  167 + $result4 = $this->ktapi->create_folder($folder_id, 'New test api sub-folder', 'admin', 'admin', 'Testing API');
  168 + $folder_id2 = $result4['results']['id'];
  169 + $this->assertEqual($result4['status_code'], 0);
  170 +
  171 + // Add a document
  172 + global $default;
  173 + $dir = $default->uploadDirectory;
  174 + $tempfilename = $this->createRandomFile('some text', $dir);
  175 +
  176 + // test without authentication - should fail
  177 + $doc = $this->ktapi->add_document($folder_id, 'New API test doc', 'testdoc1.txt', 'Default', $tempfilename);
  178 + $this->assertEqual($doc['status_code'], 1);
  179 +
  180 + // test with authentication
  181 + $doc = $this->ktapi->add_document($folder_id, 'New API test doc', 'testdoc1.txt', 'Default', $tempfilename,
  182 + 'admin', 'admin', 'Testing API');
  183 + $this->assertEqual($doc['status_code'], 0);
  184 + $doc_id = $doc['results']['document_id'];
  185 +
  186 + // Checkout the document
  187 + // test without authentication - should fail
  188 + $result1 = $this->ktapi->checkout_document($doc_id, 'Testing API', true);
  189 + $this->assertEqual($result1['status_code'], 1);
  190 +
  191 + // test with authentication
  192 + $result2 = $this->ktapi->checkout_document($doc_id, 'Testing API', true, 'admin', 'admin');
  193 + $this->assertEqual($doc['status_code'], 0);
  194 + $this->assertTrue(!empty($result2['results']));
  195 +
  196 + // Checkin the document
  197 + $dir = $default->uploadDirectory;
  198 + $tempfilename = $this->createRandomFile('some text', $dir);
  199 + // test without authentication - should fail
  200 + $result3 = $this->ktapi->checkin_document($doc_id, 'testdoc1.txt', 'Testing API', $tempfilename, false);
  201 + $this->assertEqual($result3['status_code'], 1);
  202 +
  203 + // test with authentication
  204 + $result4 = $this->ktapi->checkin_document($doc_id, 'testdoc1.txt', 'Testing API', $tempfilename, false, 'admin', 'admin');
  205 + $this->assertEqual($result4['status_code'], 0);
  206 + $this->assertEqual($result4['results']['document_id'], $doc_id);
  207 +
  208 + // Delete the document
  209 + // test without authentication - should fail
  210 + $result5 = $this->ktapi->delete_document($doc_id, 'Testing API');
  211 + $this->assertEqual($result5['status_code'], 1);
  212 +
  213 + // test with authentication
  214 + $result6 = $this->ktapi->delete_document($doc_id, 'Testing API', 'admin', 'admin', true);
  215 + $this->assertEqual($result6['status_code'], 0);
  216 +
  217 + // Clean up - delete the folder
  218 + // test without authentication - should fail
  219 + $result7 = $this->ktapi->delete_folder($folder_id, 'Testing API');
  220 + $this->assertEqual($result7['status_code'], 1);
  221 +
  222 + $result8 = $this->ktapi->delete_folder($folder_id, 'Testing API', 'admin', 'admin');
  223 + $this->assertEqual($result8['status_code'], 0);
  224 + }
  225 +
  226 + /**
  227 + * Helper function to create a document
  228 + */
  229 + function createDocument($title, $filename, $folder = null)
  230 + {
  231 + if(is_null($folder)){
  232 + $folder = $this->root;
  233 + }
  234 +
  235 + // Create a new document
  236 + $randomFile = $this->createRandomFile();
  237 + $this->assertTrue(is_file($randomFile));
  238 +
  239 + if ($this->esig_enabled)
  240 + {
  241 + $document = $folder->add_document($title, $filename, 'Default', $randomFile, 'admin', 'admin', 'Testing API');
  242 + }
  243 + else
  244 + {
  245 + $document = $folder->add_document($title, $filename, 'Default', $randomFile);
  246 + }
  247 + $this->assertNotError($document);
  248 +
  249 + @unlink($randomFile);
  250 + if(PEAR::isError($document)) return false;
  251 +
  252 + return $document;
  253 + }
  254 +
  255 + /**
  256 + * Helper function to delete docs
  257 + */
  258 + function deleteDocument($document)
  259 + {
  260 + $document->delete('Testing API');
  261 + $document->expunge();
  262 + }
  263 +
  264 + function createRandomFile($content = 'this is some text', $uploadDir = null) {
  265 + if(is_null($uploadDir)){
  266 + $uploadDir = dirname(__FILE__);
  267 + }
  268 + $temp = tempnam($uploadDir, 'myfile');
  269 + $fp = fopen($temp, 'wt');
  270 + fwrite($fp, $content);
  271 + fclose($fp);
  272 + return $temp;
  273 + }
  274 +}
  275 +?>
0 \ No newline at end of file 276 \ No newline at end of file
tests/runtests.php
@@ -8,6 +8,9 @@ class UnitTests extends TestSuite { @@ -8,6 +8,9 @@ class UnitTests extends TestSuite {
8 $this->TestSuite('Unit tests'); 8 $this->TestSuite('Unit tests');
9 9
10 // KTAPI 10 // KTAPI
  11 + // Some of these tests will fail if Electronic Signatures are enabled for the API.
  12 + // To fix, check the failing functions and add 'admin', 'admin' as username and password,
  13 + // and where necessary send 'Testing API' as a reason
11 $this->addFile('api/testApi.php'); 14 $this->addFile('api/testApi.php');
12 $this->addFile('api/testAuto.php'); 15 $this->addFile('api/testAuto.php');
13 $this->addFile('api/testSavedSearches.php'); 16 $this->addFile('api/testSavedSearches.php');
@@ -17,6 +20,8 @@ class UnitTests extends TestSuite { @@ -17,6 +20,8 @@ class UnitTests extends TestSuite {
17 $this->addFile('api/testFolder.php'); 20 $this->addFile('api/testFolder.php');
18 $this->addFile('api/testBulkActions.php'); 21 $this->addFile('api/testBulkActions.php');
19 $this->addFile('api/testCollection.php'); 22 $this->addFile('api/testCollection.php');
  23 + // Only activate this test if Electronic Signatures are enabled for the API
  24 +// $this->addFile('api/testElectronicSignatures.php');
20 25
21 // $this->addFile('SQLFile/test_sqlfile.php'); 26 // $this->addFile('SQLFile/test_sqlfile.php');
22 // $this->addFile('cache/testCache.php'); 27 // $this->addFile('cache/testCache.php');
@@ -28,9 +33,9 @@ class UnitTests extends TestSuite { @@ -28,9 +33,9 @@ class UnitTests extends TestSuite {
28 // $this->addFile('filelike/testStringFileLike.php'); 33 // $this->addFile('filelike/testStringFileLike.php');
29 34
30 // Search (2) and indexing 35 // Search (2) and indexing
31 - $this->addFile('documentProcessor/testExtracters.php');  
32 - $this->addFile('documentProcessor/testGuidInserter.php');  
33 - $this->addFile('search2/testSearch.php'); 36 +// $this->addFile('documentProcessor/testExtracters.php');
  37 +// $this->addFile('documentProcessor/testGuidInserter.php');
  38 +// $this->addFile('search2/testSearch.php');
34 } 39 }
35 } 40 }
36 41