This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "FusionForge".
The branch, master has been updated
via f9353f0cf559af39640fcd84e6bff2c9231e284f (commit)
from c35e28c36c1e1b118d4b3d2de5664e6fd75fe18d (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
https://scm.fusionforge.org/anonscm/gitweb/?p=fusionforge/fusionforge.git;a=commitdiff;h=f9353f0cf559af39640fcd84e6bff2c9231e284f
commit f9353f0cf559af39640fcd84e6bff2c9231e284f
Author: Franck Villaume <[email protected]>
Date: Sun May 14 19:43:15 2017 +0200
forge cli: support for artifact layout import
diff --git a/src/bin/forge b/src/bin/forge
index 7971052..f82c9ac 100755
--- a/src/bin/forge
+++ b/src/bin/forge
@@ -773,7 +773,27 @@ class CliActions {
}
if
(isset($stream['setup']['use_tracker_widget_display'])) {
$lm = new WidgetLayoutManager();
- if
(!$lm->createLayoutForTrackerFromArray($this->getMappingId($stream['setup']['group_artifact_id'],
'artifact_type'), $stream['setup']['use_tracker_widget_display'])) {
+ // remap the extrafield ids with the new ones
if any
+ $artifact_layout =
$stream['setup']['use_tracker_widget_display'];
+ foreach ($artifact_layout['rows'] as $row) {
+ foreach($row['columns'] as $column) {
+ foreach ($column['contents'] as
$nwidget) {
+ if
($nwidget['content']['id'] == 'trackercontent') {
+ foreach
($nwidget['content']['layoutExtraFieldIDs'] as $efrkey => $efrow) {
+ foreach
($efrow as $efckey => $efcol) {
+
$key = key($efcol);
+
$nkey = $this->getMappingId($key, 'extrafield');
+
if ($nkey != $key) {
+
$efcol[$nkey] = $efcol[$key];
+
unset($efcol[$key]);
+
}
+ }
+ }
+ }
+ }
+ }
+ }
+ if
(!$lm->createLayoutForTrackerFromArray($this->getMappingId($stream['setup']['group_artifact_id'],
'artifact_type'), $artifact_layout)) {
echo _('Unable to create tracker
layout')."\n";
db_rollback();
return false;
diff --git a/src/common/include/utils.php b/src/common/include/utils.php
index 911e4a0..94c738e 100644
--- a/src/common/include/utils.php
+++ b/src/common/include/utils.php
@@ -1772,6 +1772,27 @@ function compareObjectName ($a, $b) {
return strcoll($a->getName(),$b->getName()) ;
}
+/**
+ * compute the differences between two arrays //TODO: looks like array_udiff
+ * @param array $tab1
+ * @param array $tab2
+ * @return array
+ */
+function utils_array_diff_names($tab1, $tab2) {
+ $diff = array();
+ foreach($tab1 as $e1) {
+ $found = false;
+ reset($tab2);
+ while(!$found && list(,$e2) = each($tab2)) {
+ $found = !count(array_diff($e1, $e2));
+ }
+ if (!$found) {
+ $diff[] = $e1;
+ }
+ }
+ return $diff;
+}
+
// Local Variables:
// mode: php
// c-file-style: "bsd"
diff --git a/src/common/widget/WidgetLayoutManager.class.php
b/src/common/widget/WidgetLayoutManager.class.php
index a24f9c2..4d98948 100644
--- a/src/common/widget/WidgetLayoutManager.class.php
+++ b/src/common/widget/WidgetLayoutManager.class.php
@@ -23,6 +23,7 @@
require_once $gfcommon.'widget/WidgetLayout.class.php';
require_once $gfcommon.'widget/Widget.class.php';
require_once $gfcommon.'include/preplugins.php';
+require_once $gfcommon.'include/utils.php';
/**
* WidgetLayoutManager
@@ -312,7 +313,7 @@ class WidgetLayoutManager {
}
$sql = 'INSERT INTO
layouts_contents (owner_id, owner_type, content_id, layout_id, column_id, name,
rank, is_minimized, is_removed, display_preferences)
VALUES ($1, $2, $3, $4,
$5, $6, $7, $8, $9, $10)';
- db_query_params($sql,
array($owner_id, self::OWNER_TYPE_TRACKER, $content_id, $data['layout_id'],
$data['column_id'], $data['name'], $data['rank'], $data['is_minimized'],
$data['is_removed'], $data['display_preferences']));
+ db_query_params($sql,
array($owner_id, self::OWNER_TYPE_TRACKER, $content_id, $data['layout_id'],
$data['column_id'], $data['name'], $data['rank'], $data['is_minimized'],
$data['is_removed'], $data['display_preferences']));
echo db_error();
}
}
@@ -339,10 +340,66 @@ class WidgetLayoutManager {
*/
function createLayoutForTrackerFromArray($owner_id, $layoutDescArr) {
if (isset($layoutDescArr['rows']) &&
is_array($layoutDescArr['rows'])) {
- return true;
- } else {
- return false;
+ db_begin();
+ $res = db_query_params('SELECT content_id FROM
layouts_contents WHERE content_id != $1 AND owner_type = $2 AND owner_id = $3',
array(0, 't', $owner_id));
+ if ($res && db_numrows($res) > 0) {
+ $contentIdArr =
util_result_column_to_array($res);
+ foreach ($contentIdArr as $contentId) {
+ db_query_params('DELETE FROM
artifact_display_widget_field WHERE id = $1', array($contentId));
+ db_query_params('DELETE FROM
artifact_display_widget WHERE id = $1 AND owner_id = $2', array($contentId,
$owner_id));
+ }
+ }
+ db_query_params('DELETE FROM layouts_contents WHERE
owner_id = $1 AND owner_type = $2', array($owner_id, 't'));
+ db_query_params('DELETE FROM owner_layouts WHERE
owner_id = $1 AND owner_type = $2', array($owner_id, 't'));
+ $sql = "INSERT INTO layouts(name, description, scope)
VALUES ('custom', '', 'P')";
+ if ($res = db_query_params($sql, array())) {
+ if ($new_layout_id = db_insertid($res,
'layouts', 'id')) {
+ $res = db_query_params('INSERT INTO
owner_layouts (owner_id, owner_type, layout_id, is_default) values ($1, $2, $3,
$4)', array($owner_id, self::OWNER_TYPE_TRACKER, $new_layout_id, 1));
+ if ($res) {
+ foreach ($layoutDescArr['rows']
as $row) {
+ $sql = "INSERT INTO
layouts_rows(layout_id, rank) VALUES ($1, $2)";
+ if ($res =
db_query_params($sql, array($new_layout_id, $row['rank']))) {
+ if ($row_id =
db_insertid($res,'layouts_rows', 'id')) {
+ if
(isset($row['columns']) && is_array($row['columns'])) {
+
foreach ($row['columns'] as $column) {
+
$sql = "INSERT INTO layouts_rows_columns(layout_row_id, width) VALUES
($1, $2)";
+
db_query_params($sql, array($row_id, $column['width']));
+
$column_id = db_insertid($res,'layouts_rows_columns', 'id');
+
if (isset($column['contents']) && is_array($column['contents'])) {
+
foreach ($column['contents'] as $nkey => $nwidget) {
+
$content_id = 0;
+
if ($nwidget['content']['id'] == 'trackercontent') {
+
$res = db_query_params('INSERT INTO
artifact_display_widget (owner_id, title) VALUES ($1, $2)', array($owner_id,
$nwidget['content']['trackercontent_title']));
+
$content_id = db_insertid($res,
'artifact_display_widget', 'id');
+
foreach
($nwidget['content']['layoutExtraFieldIDs'] as $efrkey => $efrow) {
+
foreach ($efrow as $efckey => $efcol) {
+
$key = key($efcol);
+
db_query_params('INSERT INTO
artifact_display_widget_field (id, field_id, column_id, row_id, width, section)
VALUES ($1, $2, $3, $4, $5, $6)', array($content_id, $key, $efckey, $efrkey,
$efcol[$key][0], $efcol[$key][1]));
+
}
+
}
+
}
+
$sql = 'INSERT INTO layouts_contents (owner_id,
owner_type, content_id, layout_id, column_id, name, rank, is_minimized,
is_removed, display_preferences)
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8,
$9, $10)';
+
db_query_params($sql, array($owner_id,
self::OWNER_TYPE_TRACKER, $content_id, $new_layout_id, $column_id,
$nwidget['content']['id'], $nkey, $nwidget['is_minimized'], 0,
$nwidget['display_preferences']));
+
echo db_error();
+
}
+
}
+
}
+ }
+ }
+ }
+ }
+ db_commit();
+ return true;
+ }
+ } else {
+ db_rollback();
+ }
+ } else {
+ db_rollback();
+ }
}
+ return false;
}
/**
@@ -410,11 +467,11 @@ class WidgetLayoutManager {
$sql = 'INSERT INTO
owner_layouts(layout_id, is_default, owner_id, owner_type) VALUES ($1, $2, $3,
$4)';
if (db_query_params($sql,
array($new_layout_id, 1, $group_id, self::OWNER_TYPE_GROUP))) {
//Create rows & columns
- foreach($layoutDescArr['rows']
as $cols) {
+ foreach($layoutDescArr['rows']
as $row) {
$sql = "INSERT INTO
layouts_rows(layout_id, rank) VALUES ($1, $2)";
- if ($res =
db_query_params($sql, array($new_layout_id, $cols['rank']))) {
+ if ($res =
db_query_params($sql, array($new_layout_id, $row['rank']))) {
if ($row_id =
db_insertid($res,'layouts_rows', 'id')) {
-
foreach($cols['columns'] as $column) {
+
foreach($row['columns'] as $column) {
$sql = "INSERT INTO layouts_rows_columns(layout_row_id, width) VALUES ($1, $2)";
db_query_params($sql, array($row_id, $column['width']));
$column_id = db_insertid($res,'layouts_rows_columns', 'id');
@@ -980,7 +1037,7 @@ class WidgetLayoutManager {
}
//delete removed contents
- $deleted_names =
$this->_array_diff_names($originals, $names);
+ $deleted_names =
utils_array_diff_names($originals, $names);
if (count($deleted_names)) {
$_and = '';
foreach($deleted_names as $id => $name)
{
@@ -1002,7 +1059,7 @@ class WidgetLayoutManager {
}
//Insert new contents
- $added_names = $this->_array_diff_names($names,
$originals);
+ $added_names = utils_array_diff_names($names,
$originals);
if (count($added_names)) {
$_and = '';
foreach($added_names as $name) {
@@ -1080,25 +1137,4 @@ class WidgetLayoutManager {
}
return (array)$layout;
}
-
- /**
- * compute the differences between two arrays
- * @param array $tab1
- * @param array $tab2
- * @return array
- */
- function _array_diff_names($tab1, $tab2) {
- $diff = array();
- foreach($tab1 as $e1) {
- $found = false;
- reset($tab2);
- while(!$found && list(,$e2) = each($tab2)) {
- $found = !count(array_diff($e1, $e2));
- }
- if (!$found) {
- $diff[] = $e1;
- }
- }
- return $diff;
- }
}
-----------------------------------------------------------------------
Summary of changes:
src/bin/forge | 22 +++++-
src/common/include/utils.php | 21 ++++++
src/common/widget/WidgetLayoutManager.class.php | 96 +++++++++++++++++--------
3 files changed, 108 insertions(+), 31 deletions(-)
hooks/post-receive
--
FusionForge
_______________________________________________
Fusionforge-commits mailing list
[email protected]
http://lists.fusionforge.org/cgi-bin/mailman/listinfo/fusionforge-commits