From: <lph...@us...> - 2011-06-30 14:56:55
|
Revision: 35147 http://tikiwiki.svn.sourceforge.net/tikiwiki/?rev=35147&view=rev Author: lphuberdeau Date: 2011-06-30 14:56:48 +0000 (Thu, 30 Jun 2011) Log Message: ----------- [MOD]?\194?\160Allowing to edit fields (basic info and options for now) Modified Paths: -------------- trunk/lib/core/Services/Tracker/Controller.php trunk/lib/jquery_tiki/tiki-trackers.js trunk/styles/layout/design.css trunk/templates/tracker/add_field.tpl Modified: trunk/lib/core/Services/Tracker/Controller.php =================================================================== --- trunk/lib/core/Services/Tracker/Controller.php 2011-06-30 13:29:56 UTC (rev 35146) +++ trunk/lib/core/Services/Tracker/Controller.php 2011-06-30 14:56:48 UTC (rev 35147) @@ -116,6 +116,79 @@ ); } + function action_edit_field($input) + { + if (! Perms::get()->admin_trackers) { + throw new Services_Exception(tr('Reserved to tracker administrators'), 403); + } + + $trackerId = $input->trackerId->int(); + $fieldId = $input->fieldId->int(); + $definition = Tracker_Definition::get($trackerId); + + if (! $definition) { + throw new Services_Exception(tr('Tracker does not exist'), 404); + } + + $field = $definition->getField($fieldId); + if (! $field) { + throw new Services_Exception(tr('Tracker field not found in specified tracker'), 404); + } + + $types = $this->getFieldTypes($description); + $typeInfo = $types[$field['type']]; + + if ($input->name->text()) { + $this->updateField($trackerId, $fieldId, array( + 'name' => $input->name->text(), + 'description' => $input->description->text(), + 'descriptionIsParsed' => $input->description_parse->int() ? 'y' : 'n', + 'options' => $this->buildOptions($input->option, $typeInfo), + )); + } + + return array( + 'field' => $field, + 'info' => $typeInfo, + 'options' => $this->parseOptions($field['options_array'], $typeInfo), + ); + } + + private function buildOptions($input, $typeInfo) + { + $parts = array(); + + foreach ($typeInfo['params'] as $key => $info) { + $filter = $info['filter']; + + $value = $input->$key->$filter(); + + if (isset($info['options']) && ! isset($info['options'][$value])) { + $value = null; + } + + $parts[] = $value; + } + + $rawOptions = implode(',', $parts); + return rtrim($rawOptions, ','); + } + + private function parseOptions($raw, $typeInfo) + { + $out = array(); + + foreach ($typeInfo['params'] as $key => $info) { + if (isset($info['count']) && $info['count'] === '*') { + $out[$key] = $raw; + } else { + $out[$key] = array_shift($raw); + } + } + + return $out; + } + private function getFieldTypes($description) { $factory = new Tracker_Field_Factory($description); @@ -156,7 +229,7 @@ $trklib->replace_tracker_field( $trackerId, $fieldId, - $field['name'], + isset($properties['name']) ? $properties['name'] : $field['name'], $field['type'], isset($properties['isMain']) ? $properties['isMain'] : $field['isMain'], isset($properties['isSearchable']) ? $properties['isSearchable'] : $field['isSearchable'], @@ -165,14 +238,14 @@ $field['isHidden'], isset($properties['isMandatory']) ? $properties['isMandatory'] : $field['isMandatory'], isset($properties['position']) ? $properties['position'] : $field['position'], - $field['options'], - $field['description'], + isset($properties['options']) ? $properties['options'] : $field['options'], + isset($properties['description']) ? $properties['description'] : $field['description'], $field['isMultilingual'], $field['itemChoices'], $field['errorMsg'], $field['visibleBy'], $field['editableBy'], - $field['descriptionIsParsed'], + isset($properties['descriptionIsParsed']) ? $properties['descriptionIsParsed'] : $field['descriptionIsParsed'], $field['validation'], $field['validationParam'], $field['validationMessage'] Modified: trunk/lib/jquery_tiki/tiki-trackers.js =================================================================== --- trunk/lib/jquery_tiki/tiki-trackers.js 2011-06-30 13:29:56 UTC (rev 35146) +++ trunk/lib/jquery_tiki/tiki-trackers.js 2011-06-30 14:56:48 UTC (rev 35147) @@ -7,34 +7,61 @@ $.fn = $.extend($.fn, { /** * options: + * trackerId: int * success: function (data) {} */ tracker_add_field: function (options) { + this.tracker_service_dialog({ + title: tr('Add Field'), + data: { + controller: 'tracker', + action: 'add_field', + trackerId: options.trackerId + }, + success: options.success + }); + }, + /** + * options: + * trackerId: int + * success: function (data) {} + */ + tracker_edit_field: function (options) { + this.tracker_service_dialog({ + title: tr('Edit Field'), + data: { + controller: 'tracker', + action: 'edit_field', + trackerId: options.trackerId, + fieldId: options.fieldId + }, + success: options.success + }); + + return this; + }, + tracker_service_dialog: function (options) { this.each(function () { var $dialog = $('<div/>'), origin = this; $(this).append($dialog); $dialog.dialog({ - title: tr('Add Field'), - minWidth: 500 + title: options.title, + minWidth: 500, + maxHeight: 800 }).addClass('simple'); - $dialog.load('tiki-ajax_services.php', { - controller: 'tracker', - action: 'add_field', - trackerId: options.trackerId - }, function () { + $dialog.load('tiki-ajax_services.php', options.data, function () { $dialog.find('form').submit(function (e) { var form = this; $.ajax('tiki-ajax_services.php', { + method: 'POST', dataType: 'json', data: $(form).serialize(), success: function (data) { - if (data.fieldId) { - $dialog.dialog('destroy'); - if (options.success) { - options.success.apply(origin, [data]); - } + $dialog.dialog('destroy'); + if (options.success) { + options.success.apply(origin, [data]); } }, error: function (jqxhr) { @@ -60,10 +87,21 @@ }, function (data) { $.each(data.fields, function (k, field) { var $row = $('<tr/>'); - $row.append($('<td class="id"/>') - .text(field.fieldId) - .append($('<input type="hidden" name="field~' + field.fieldId + '~position"/>').val(k * 10))); - $row.append($('<td/>').text(field.name)); + $row.append($('<td class="id"/>').text(field.fieldId)); + $row.append($('<td/>').append($('<a/>') + .text(field.name) + .attr('href', 'tiki-ajax_services.php?controller=tracker&action=edit_field&trackerId=' + trackerId + '&fieldId=' + field.fieldId) + .click(function () { + $(this).tracker_edit_field({ + trackerId: trackerId, + fieldId: field.fieldId, + success: function () { + $container.tracker_load_fields(trackerId); + } + }); + return false; + }) + )); $row.append($('<td/>').text(data.types[field.type].name)); var addCheckbox = function (name) { Modified: trunk/styles/layout/design.css =================================================================== --- trunk/styles/layout/design.css 2011-06-30 13:29:56 UTC (rev 35146) +++ trunk/styles/layout/design.css 2011-06-30 14:56:48 UTC (rev 35147) @@ -1567,8 +1567,13 @@ .ui-dialog .simple label { clear: both; + padding-bottom: 1em; } +.ui-dialog .simple label .description { + padding-left: 20px; +} + .ui-dialog .simple textarea, .ui-dialog .simple input[type="text"], .ui-dialog .simple select Modified: trunk/templates/tracker/add_field.tpl =================================================================== --- trunk/templates/tracker/add_field.tpl 2011-06-30 13:29:56 UTC (rev 35146) +++ trunk/templates/tracker/add_field.tpl 2011-06-30 14:56:48 UTC (rev 35147) @@ -10,6 +10,7 @@ <option value="{$k|escape}" {if $type eq $k}selected="selected"{/if}> {$info.name|escape} + {if $info.deprecated}- Deprecated{/if} </option> {/foreach} </select> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |