Skip to content

Commit 40d9597

Browse files
committed
Add implemented phpBB version
1 parent e077dff commit 40d9597

7 files changed

Lines changed: 172 additions & 5 deletions

File tree

controller/idea_controller.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,23 @@ public function ticket()
202202
return false;
203203
}
204204

205+
/**
206+
* Implemented action (sets an idea's implemented phpBB version)
207+
*
208+
* @return bool True if set, false if not
209+
* @access public
210+
*/
211+
public function implemented()
212+
{
213+
if ($this->is_mod() && check_link_hash($this->get_hash(), "implemented_{$this->data['idea_id']}"))
214+
{
215+
$version = $this->request->variable('implemented', '');
216+
return $this->ideas->set_implemented($this->data['idea_id'], $version);
217+
}
218+
219+
return false;
220+
}
221+
205222
/**
206223
* Title action (sets an idea's title)
207224
*

event/listener.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -219,6 +219,7 @@ public function show_idea($event)
219219
'IDEA_DUPLICATE' => $idea['duplicate_id'],
220220
'IDEA_RFC' => $idea['rfc_link'],
221221
'IDEA_TICKET' => $idea['ticket_id'],
222+
'IDEA_IMPLEMENTED' => $idea['implemented_version'],
222223

223224
'U_IDEA_DUPLICATE' => $this->link_helper->get_idea_link((int) $idea['duplicate_id']),
224225

@@ -229,6 +230,7 @@ public function show_idea($event)
229230
'U_CHANGE_STATUS' => $this->link_helper->get_idea_link($idea['idea_id'], 'status', true),
230231
'U_EDIT_DUPLICATE' => $this->link_helper->get_idea_link($idea['idea_id'], 'duplicate', true),
231232
'U_EDIT_RFC' => $this->link_helper->get_idea_link($idea['idea_id'], 'rfc', true),
233+
'U_EDIT_IMPLEMENTED'=> $this->link_helper->get_idea_link($idea['idea_id'], 'implemented', true),
232234
'U_EDIT_TICKET' => $this->link_helper->get_idea_link($idea['idea_id'], 'ticket', true),
233235
'U_REMOVE_VOTE' => $this->link_helper->get_idea_link($idea['idea_id'], 'removevote', true),
234236
'U_IDEA_VOTE' => $this->link_helper->get_idea_link($idea['idea_id'], 'vote', true),

factory/ideas.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,31 @@ public function set_ticket($idea_id, $ticket)
357357
return true;
358358
}
359359

360+
/**
361+
* Sets the implemented version of an idea.
362+
*
363+
* @param int $idea_id ID of the idea to be updated.
364+
* @param string $version Version of phpBB the idea was implemented in.
365+
*
366+
* @return bool True if set, false if invalid.
367+
*/
368+
public function set_implemented($idea_id, $version)
369+
{
370+
$match = '/^\d\.\d\.\d+(\-\w+)?$/';
371+
if ($version && !preg_match($match, $version))
372+
{
373+
return false;
374+
}
375+
376+
$sql_ary = array(
377+
'implemented_version' => $version, // string is escaped by build_array()
378+
);
379+
380+
$this->update_idea_data($sql_ary, $idea_id, $this->table_ideas);
381+
382+
return true;
383+
}
384+
360385
/**
361386
* Sets the title of an idea.
362387
*

language/en/common.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,9 @@
4343
'IDEAS_TITLE' => 'phpBB Ideas',
4444
'IDEAS_NOT_AVAILABLE' => 'Ideas is not available at this time.',
4545
'IMPLEMENTED' => 'Implemented',
46+
'IMPLEMENTED_ERROR' => 'Mst be a valid phpBB version number.',
4647
'IMPLEMENTED_IDEAS' => 'Recently Implemented Ideas',
48+
'IMPLEMENTED_VERSION' => 'phpBB version',
4749
'IN_PROGRESS' => 'In Progress',
4850
'INVALID' => 'Invalid',
4951
'INVALID_VOTE' => 'Invalid vote; the number you entered was invalid.',
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<?php
2+
/**
3+
*
4+
* Ideas extension for the phpBB Forum Software package.
5+
*
6+
* @copyright (c) phpBB Limited <https://www.phpbb.com>
7+
* @license GNU General Public License, version 2 (GPL-2.0)
8+
*
9+
*/
10+
11+
namespace phpbb\ideas\migrations;
12+
13+
class m8_implemented_version extends \phpbb\db\migration\migration
14+
{
15+
public function effectively_installed()
16+
{
17+
return $this->db_tools->sql_column_exists($this->table_prefix . 'ideas_ideas', 'implemented_version');
18+
}
19+
20+
static public function depends_on()
21+
{
22+
return array(
23+
'\phpbb\ideas\migrations\m1_initial_schema',
24+
'\phpbb\ideas\migrations\m4_update_statuses',
25+
'\phpbb\ideas\migrations\m6_migrate_old_tables',
26+
'\phpbb\ideas\migrations\m7_drop_old_tables',
27+
);
28+
}
29+
30+
public function update_schema()
31+
{
32+
return array(
33+
'add_columns' => array(
34+
$this->table_prefix . 'ideas_ideas' => array(
35+
'implemented_version' => array('VCHAR', ''),
36+
),
37+
),
38+
);
39+
}
40+
41+
public function revert_schema()
42+
{
43+
return array(
44+
'drop_columns' => array(
45+
$this->table_prefix . 'ideas_ideas' => array(
46+
'implemented_version',
47+
),
48+
),
49+
);
50+
}
51+
}

styles/prosilver/template/idea_body.html

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,16 @@
8484
{% endif %}
8585
</dd>
8686
{% endif %}
87+
{% if IDEA_IMPLEMENTED or S_IS_MOD %}
88+
<dt class="implementedtoggle idealabel"{% if IDEA_STATUS_ID != 3 %} style="display:none"{% endif %}>{{ lang('IMPLEMENTED_VERSION') ~ lang('COLON') }}</dt>
89+
<dd class="implementedtoggle" {% if IDEA_STATUS_ID != 3 %}style="display:none"{% endif %}>
90+
<span id="implementedversion"{% if not IDEA_IMPLEMENTED %} style="display:none;"{% endif %}>{{ IDEA_IMPLEMENTED }}</span>
91+
{% if S_IS_MOD %}
92+
<a href="{{ U_EDIT_IMPLEMENTED }}" id="implementededit" data-l-add="{{ lang('ADD') }}" data-l-edit="{{ lang('EDIT') }}">{% if IDEA_IMPLEMENTED %}<i class="fa fa-fw fa-pencil"></i>{{ lang('EDIT') }}{% else %}<i class="fa fa-fw fa-plus-circle"></i>{{ lang('ADD') }}{% endif %}</a>
93+
<input type="text" id="implementededitinput" class="ideainput"{% if IDEA_IMPLEMENTED %} value="{{ IDEA_IMPLEMENTED }}"{% endif %} placeholder="3.x.x" data-l-err="{{ lang('ERROR') }}" data-l-msg="{{ lang('IMPLEMENTED_ERROR') }}" />
94+
{% endif %}
95+
</dd>
96+
{% endif %}
8797
</dl>
8898
</div>
8999
</div>

styles/prosilver/template/ideas.js

Lines changed: 65 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@
1919
rfcEdit: $('#rfcedit'),
2020
rfcEditInput: $('#rfceditinput'),
2121
rfcLink: $('#rfclink'),
22+
implementedEdit: $('#implementededit'),
23+
implementedEditInput: $('#implementededitinput'),
24+
implementedVersion: $('#implementedversion'),
25+
implementedToggle: $('.implementedtoggle'),
2226
removeVote: $('.removevote'),
2327
status: $('#status'),
2428
successVoted: $('.successvoted'),
@@ -126,11 +130,8 @@
126130
.removeClass()
127131
.addClass('status-badge status-' + $this.find(':selected').val());
128132

129-
if (idea_is_duplicate()) {
130-
$obj.duplicateToggle.show();
131-
} else {
132-
$obj.duplicateToggle.hide();
133-
}
133+
$obj.duplicateToggle.toggle(idea_is_duplicate());
134+
$obj.implementedToggle.toggle(idea_is_implemented());
134135
}
135136
});
136137
});
@@ -308,6 +309,57 @@
308309
}
309310
});
310311

312+
$obj.implementedEdit.on('click', function(e) {
313+
e.preventDefault();
314+
315+
$obj.implementedEdit.add($obj.implementedVersion).hide();
316+
$obj.implementedEditInput.show().focus();
317+
});
318+
319+
$obj.implementedEditInput.on('keydown', function(e) {
320+
if (e.keyCode === keymap.ENTER) {
321+
e.preventDefault();
322+
e.stopPropagation();
323+
324+
var $this = $(this),
325+
find = /^\d\.\d\.\d+(\-\w+)?$/,
326+
url = $obj.implementedEdit.attr('href'),
327+
value = $this.val();
328+
329+
if (value && !find.test(value)) {
330+
phpbb.alert($this.attr('data-l-err'), $this.attr('data-l-msg'));
331+
return;
332+
}
333+
334+
$.get(url, {implemented: value}, function(res) {
335+
if (res) {
336+
$obj.implementedVersion.text(value);
337+
338+
if (value) {
339+
$obj.implementedVersion.show();
340+
}
341+
342+
$this.hide();
343+
344+
$obj.implementedEdit.text(function() {
345+
return value ? $(this).attr('data-l-edit') : $(this).attr('data-l-add');
346+
}).prepend($('<i class="fa fa-fw"></i>').addClass(function() {
347+
return value ? 'fa-pencil' : 'fa-plus-circle';
348+
})).show();
349+
}
350+
});
351+
} else if (e.keyCode === keymap.ESC) {
352+
e.preventDefault();
353+
354+
$(this).hide();
355+
$obj.implementedEdit.show();
356+
357+
if ($obj.implementedVersion.text()) {
358+
$obj.implementedVersion.show();
359+
}
360+
}
361+
});
362+
311363
/**
312364
* Returns true if idea is a duplicate. Bit hacky.
313365
*/
@@ -316,6 +368,14 @@
316368
return href && href.indexOf('status=4') !== -1;
317369
}
318370

371+
/**
372+
* Returns true if idea is implemented. Bit hacky.
373+
*/
374+
function idea_is_implemented() {
375+
var href = $obj.status.prev('a').attr('href');
376+
return href && href.indexOf('status=3') !== -1;
377+
}
378+
319379
function displayVoters(data) {
320380

321381
var upVoters = [],

0 commit comments

Comments
 (0)