[217261] and [219091]
diff --git a/babel-setup.sql b/babel-setup.sql
index 73f7c3c..b01d0f4 100644
--- a/babel-setup.sql
+++ b/babel-setup.sql
@@ -27,6 +27,16 @@
PRIMARY KEY (`event_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+DROP TABLE IF EXISTS `file_progress`;
+CREATE TABLE `file_progress` (
+ `file_id` int(10) unsigned NOT NULL,
+ `language_id` smallint(5) unsigned NOT NULL,
+ `pct_complete` float NOT NULL,
+ PRIMARY KEY (`file_id`, `language_id`),
+ CONSTRAINT `file_progress_ibfk_1` FOREIGN KEY (`file_id`) REFERENCES `files` (`file_id`) ON UPDATE CASCADE ON DELETE CASCADE,
+ CONSTRAINT `file_progress_ibfk_2` FOREIGN KEY (`language_id`) REFERENCES `languages` (`language_id`) ON UPDATE CASCADE ON DELETE CASCADE
+) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
DROP TABLE IF EXISTS `files`;
CREATE TABLE `files` (
`file_id` int(10) unsigned NOT NULL auto_increment,
@@ -38,7 +48,6 @@
KEY `project_id` (`project_id`),
CONSTRAINT `files_ibfk_1` FOREIGN KEY (`project_id`,`version`) REFERENCES `project_versions` (`project_id`,`version`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-
--
-- Table structure for table `languages`
--
@@ -228,13 +237,34 @@
CONSTRAINT `translations_ibfk_3` FOREIGN KEY (`userid`) REFERENCES `users` (`userid`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-/*!50003 SET @OLD_SQL_MODE=@@SQL_MODE*/;
+SET @OLD_SQL_MODE=@@SQL_MODE;
DELIMITER ;;
/*!50003 SET SESSION SQL_MODE="" */;;
-/*!50003 CREATE TRIGGER `ins_version` BEFORE INSERT ON `translations` FOR EACH ROW SET NEW.version =
- (SELECT IFNULL(MAX(version),0)+1 FROM translations
- WHERE string_id = NEW.string_id and language_id = NEW.language_id) */;;
+DROP TRIGGER `ins_version`;;
+/* This trigger sets the version to max(version) + 1. It also updates the file_progress table */
+/* (COUNT(t.string_id) + 1) because it's a BEFORE INSERT trigger, the translated str is not in the DB yet */
+/* and without the +1 the percent would always be "one behind" */
+CREATE TRIGGER `ins_version` BEFORE INSERT ON `translations` FOR EACH ROW BEGIN
+ SET NEW.version =
+ (SELECT IFNULL(MAX(version),0)+1 FROM translations
+ WHERE string_id = NEW.string_id and language_id = NEW.language_id);
+
+ DELETE FROM file_progress where file_id = (SELECT file_id FROM strings WHERE string_id = NEW.string_id)
+ AND language_id = NEW.language_id;
+
+ INSERT INTO file_progress SET file_id = (SELECT file_id FROM strings WHERE string_id = NEW.string_id),
+ language_id = NEW.language_id,
+ pct_complete = (
+ SELECT IF(COUNT(s.string_id) > 0, (COUNT(t.string_id) + 1)/COUNT(s.string_id)*100,0) AS translate_percent
+ FROM files AS f
+ LEFT JOIN strings AS s ON s.file_id = f.file_id
+ LEFT JOIN translations AS t ON (s.string_id = t.string_id
+ AND t.language_id = NEW.language_id AND t.is_active = 1)
+ WHERE f.file_id = (SELECT file_id FROM strings WHERE string_id = NEW.string_id)
+ );
+END;
+;;
DELIMITER ;
/*!50003 SET SESSION SQL_MODE=@OLD_SQL_MODE */;
@@ -342,4 +372,4 @@
insert into map_files values ("eclipse", "3.4", "text.map", "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/maps/text.map?view=co", 1);
insert into map_files values ("eclipse", "3.4", "ui.map", "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/maps/ui.map?view=co", 1);
insert into map_files values ("eclipse", "3.4", "update.map", "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/maps/update.map?view=co", 1);
-insert into map_files values ("eclipse", "3.4", "userassist.map", "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/maps/userassist.map?view=co", 1);
\ No newline at end of file
+insert into map_files values ("eclipse", "3.4", "userassist.map", "http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.releng/maps/userassist.map?view=co", 1);
diff --git a/html/callback/getFilesForProject.php b/html/callback/getFilesForProject.php
index 84b1eb7..f24ad31 100644
--- a/html/callback/getFilesForProject.php
+++ b/html/callback/getFilesForProject.php
@@ -19,33 +19,37 @@
return $return;
}
-$query = "select
- DISTINCT files.name
- from
- project_versions,
- files
- where
- files.project_id = project_versions.project_id
- and
- files.version = project_versions.version
- and
- project_versions.is_active = 1
- and
- project_versions.project_id = '".addslashes($_SESSION['project'])."'
- and
- files.version = '".addslashes($_SESSION['version'])."'
- order by
- files.name
- ";
+if(isset($_SESSION['language'])) {
+ $language = $_SESSION['language'];
+}
-//print $query."\n";
+$query = "SELECT
+ f.name,
+ IF(ISNULL(pct_complete),0,pct_complete) AS pct_complete
+FROM
+ files AS f
+ LEFT JOIN project_versions AS v ON v.project_id = f.project_id
+ AND v.version = f.version
+ LEFT JOIN file_progress as p ON p.file_id = f.file_id
+ AND p.language_id = '" . addslashes($language) . "'
+WHERE
+ v.is_active = 1
+ AND v.project_id = '".addslashes($_SESSION['project'])."'
+ AND f.version = '".addslashes($_SESSION['version'])."'
+ GROUP BY f.name
+ ORDER BY pct_complete, f.name";
+
+# print $query."\n";
$res = mysql_query($query,$dbh);
while($line = mysql_fetch_array($res, MYSQL_ASSOC)){
$ret = Array();
+
$ret['name'] = $line['name'];
+ $ret['pct'] = $line['pct_complete'];
+
if(isset($_SESSION['file']) and $line['name'] == $_SESSION['file']){
$ret['current'] = true;
diff --git a/html/js/files.js b/html/js/files.js
index b9a737c..1630052 100644
--- a/html/js/files.js
+++ b/html/js/files.js
@@ -62,6 +62,7 @@
function afile(dataIn){
this.filename = dataIn['name'];
+ this.pct = dataIn['pct'];
afile.superclass.constructor.call();
this.initSelectable();
}
@@ -90,7 +91,11 @@
}
afile.prototype.createHTML = function(){
this.domElem = document.createElement("li");
- this.domElem.innerHTML = this.filename;
+ var filename_display = this.filename;
+ if(filename_display.length > 100) {
+ filename_display = filename_display.substr(0,35) + "(...)" + filename_display.substr(filename_display.length - 50);
+ }
+ this.domElem.innerHTML = filename_display + " (" + (this.pct > 0 ? new Number(this.pct).toFixed(1) : 0) + "%)";
this.addEvents();
return this.domElem;
}