- #1537: Replaces payments page on main site by a donation page -JAC
* Profile:
+ - #1381: Adds levels to medals -JAC
- #1535: Moves and displays skills with mentoring informations -JAC
* XnetGrp:
public static function fetchData(array $pids, Visibility $visibility)
{
- $data = XDB::iterator('SELECT pm.pid, pm.mid, pm.gid, pme.text, pme.img, pmge.text AS grade
+ $data = XDB::iterator('SELECT pm.pid, pm.mid, pm.gid, pme.text, pme.img, pmge.text AS grade, pm.level
FROM profile_medals AS pm
LEFT JOIN profiles AS p ON (pm.pid = p.pid)
LEFT JOIN profile_medal_enum AS pme ON (pme.id = pm.mid)
public $mid;
public $gid;
+ public $level;
+ public $has_levels;
// }}}
// {{{ constructor
- public function __construct(User $_user, Profile $_profile, $_idmedal, $_subidmedal, $_stamp = 0)
+ public function __construct(User $_user, Profile $_profile, $_idmedal, $_subidmedal, $_level, $has_levels, $_stamp = 0)
{
parent::__construct($_user, $_profile, false, 'medal', $_stamp);
$this->mid = $_idmedal;
$this->gid = $_subidmedal;
+ $this->level = $_level;
+ $this->has_levels = $has_levels;
if (is_null($this->gid)) {
$this->gid = 0;
}
+ if (!$this->has_levels) {
+ $this->level = '';
+ }
}
// }}}
public function commit ()
{
- return XDB::execute('INSERT INTO profile_medals (pid, mid, gid)
- VALUES ({?}, {?}, {?})
+ return XDB::execute('INSERT INTO profile_medals (pid, mid, gid, level)
+ VALUES ({?}, {?}, {?}, {?})
ON DUPLICATE KEY UPDATE gid = VALUES(gid)',
$this->profile->id(), $this->mid,
- is_null($this->gid) ? 0 : $this->gid);
+ is_null($this->gid) ? 0 : $this->gid, $this->level);
}
// }}}
// {{{ function get_request($medal)
- static public function get_request($pid, $type, $grade)
+ static public function get_request($pid, $type, $grade, $level)
{
$reqs = parent::get_typed_requests($pid, 'medal');
foreach ($reqs as &$req) {
- if ($req->mid == $type && $req->gid == $grade) {
+ if ($req->mid == $type && $req->gid == $grade && $req->level == $level) {
return $req;
}
}
{
pl_content_headers("text/html");
$page->changeTpl('profile/deco.medal.tpl', NO_SKIN);
- $valid = XDB::fetchOneCell("SELECT NOT FIND_IN_SET('validation', flags)
- FROM profile_medal_enum
- WHERE id = {?}",
- $id);
+ list($valid, $has_levels) = XDB::fetchOneRow("SELECT NOT FIND_IN_SET('validation', flags), FIND_IN_SET('has_levels', flags)
+ FROM profile_medal_enum
+ WHERE id = {?}",
+ $id);
$page->assign('id', $i);
- $page->assign('medal', array('id' => $id, 'grade' => 0, 'valid' => $valid));
+ $page->assign('medal', array('id' => $id, 'grade' => 0, 'valid' => $valid, 'has_levels' => $has_levels));
}
function handler_ajax_job($page, $id, $pid)
private static function compareMedals(array $a, array $b)
{
if ($a['id'] == $b['id']) {
+ if ($a['grade'] == $b['grade']) {
+ return $a['level'] > $b['level'];
+ }
return $a['grade'] > $b['grade'];
}
return $a['id'] > $b['id'];
$success = true;
if (is_null($value)) {
// Fetch already attributed medals
- $value = XDB::fetchAllAssoc('SELECT mid AS id, gid AS grade, 1 AS valid
- FROM profile_medals
- WHERE pid = {?}',
+ $value = XDB::fetchAllAssoc("SELECT m.mid AS id, m.gid AS grade, 1 AS valid, FIND_IN_SET('has_levels', e.flags) AS has_levels, m.level
+ FROM profile_medals AS m
+ INNER JOIN profile_medal_enum AS e ON (m.mid = e.id)
+ WHERE m.pid = {?}",
$page->pid());
// Fetch not yet validated medals
$medals = ProfileValidate::get_typed_requests($page->pid(), 'medal');
foreach ($medals as &$medal) {
$value[] = array(
- 'id' => $medal->mid,
- 'grade' => $medal->gid,
- 'valid' => '0'
+ 'id' => $medal->mid,
+ 'grade' => $medal->gid,
+ 'level' => $medal->level,
+ 'has_levels' => $medal->has_levels,
+ 'valid' => '0'
);
}
} elseif (!is_array($value)) {
while ($i < $total_original || $j < $total_value) {
if (isset($value[$j]) && (!isset($original[$i]) || self::compareMedals($original[$i], $value[$j]))) {
- $req = new MedalReq(S::user(), $page->profile, $value[$j]['id'], $value[$j]['grade']);
+ $req = new MedalReq(S::user(), $page->profile, $value[$j]['id'], $value[$j]['grade'], $value[$j]['level'], $value[$j]['has_levels']);
$req->submit();
sleep(1);
++$j;
WHERE pid = {?} AND mid = {?} AND gid = {?}',
$page->pid(), $original[$i]['id'], $original[$i]['grade']);
} else {
- $req = MedalReq::get_request($page->pid(), $original[$i]['id'], $original[$i]['grade']);
+ $req = MedalReq::get_request($page->pid(), $original[$i]['id'], $original[$i]['grade'], $value[$j]['level']);
if ($req) {
$req->clean();
}
<input type="hidden" name="medals_{$id}_grade" value="{$medal.grade}" />
<input type="hidden" name="medals[{$id}][id]" value="{$medal.id}" />
<input type="hidden" name="medals[{$id}][valid]" value="{$medal.valid}" />
+ <input type="hidden" name="medals[{$id}][has_levels]" value="{$medal.has_levels}" />
+ </div>
+ <div>
+ {if $medal.has_levels}
+ Niveau / Échelon :
+ <select name="medals[{$id}][level]">
+ <option value="Or" {if $medal.level eq "Or"}selected="selected"{/if}>Or</option>
+ <option value="Argent" {if $medal.level eq "Argent"}selected="selected"{/if}>Argent</option>
+ <option value="Bronze" {if $medal.level eq "Bronze"}selected="selected"{/if}>Bronze</option>
+ </select>
+ {else}
+ <input type="hidden" name="medals[{$id}][level]" value="" />
+ {/if}
</div>
</div>
<a class="removeMedal" href="javascript:removeMedal({$id})" style="vertical-align: middle">
{foreach from=$medals item=medal key=id}
{include file="profile/deco.medal.tpl" medal=$medal id=$id}
{/foreach}
- <p class="center">
+ <p class="center" style="clear: both">
<small>
Si {if $isMe}ta{else}la{/if} décoration
ou {if $isMe}ta{else}la{/if} médaille ne figure pas dans la liste,
<div class="medal_frame">
<img src="profile/medal/thumb/{$m.mid}" height="50px" alt="{$m.text}" title="{$m.text}" style='float: left;' />
<div class="medal_text">
- {$m.text}<br />{$m.grade}
+ {$m.text}{if $m.level} ({$m.level}){/if}<br />{$m.grade}
</div>
</div>
{/foreach}
--- /dev/null
+ALTER TABLE profile_medals ADD COLUMN level ENUM('', 'Or', 'Argent', 'Bronze') NOT NULL DEFAULT '';
+ALTER TABLE profile_medal_enum MODIFY COLUMN flags SET('validation', 'has_levels') NOT NULL DEFAULT '';
+UPDATE profile_medal_enum SET flags = 'has_levels' WHERE id = 20; -- Médaille de la Défense Nationale
+UPDATE profile_medal_enum SET flags = 'validation,has_levels' WHERE id IN (61, 62, 63); -- sports
+DELETE FROM profile_medal_grade_enum WHERE mid IN (61, 62, 63); -- Not used in prod yet, thus no need to update.
+
+-- vim:set syntax=mysql: