1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?php
/**
* Contains class which offers functionality for reading and updating Translate group
* related metadata
*
* @file
* @author Niklas Laxström
* @author Santhosh Thottingal
* @copyright Copyright © 2012-2013, Niklas Laxström, Santhosh Thottingal
* @license GPL-2.0-or-later
*/
class TranslateMetadata {
protected static $cache;
/**
* Get a metadata value for the given group and key.
* @param string $group The group name
* @param string $key Metadata key
* @return string|bool
*/
public static function get( $group, $key ) {
if ( self::$cache === null ) {
$dbr = wfGetDB( DB_REPLICA );
$res = $dbr->select( 'translate_metadata', '*', [], __METHOD__ );
foreach ( $res as $row ) {
self::$cache[$row->tmd_group][$row->tmd_key] = $row->tmd_value;
}
}
if ( isset( self::$cache[$group][$key] ) ) {
return self::$cache[$group][$key];
}
return false;
}
/**
* Set a metadata value for the given group and metadata key. Updates the
* value if already existing.
* @param string $group The group id
* @param string $key Metadata key
* @param string $value Metadata value
*/
public static function set( $group, $key, $value ) {
$dbw = wfGetDB( DB_MASTER );
$data = [ 'tmd_group' => $group, 'tmd_key' => $key, 'tmd_value' => $value ];
if ( $value === false ) {
unset( $data['tmd_value'] );
$dbw->delete( 'translate_metadata', $data );
} else {
$dbw->replace(
'translate_metadata',
[ [ 'tmd_group', 'tmd_key' ] ],
$data,
__METHOD__
);
}
self::$cache = null;
}
/**
* Wrapper for getting subgroups.
* @param string $groupId
* @return string[]|bool
* @since 2012-05-09
*/
public static function getSubgroups( $groupId ) {
$groups = self::get( $groupId, 'subgroups' );
if ( $groups !== false ) {
if ( strpos( $groups, '|' ) !== false ) {
$groups = explode( '|', $groups );
} else {
$groups = array_map( 'trim', explode( ',', $groups ) );
}
foreach ( $groups as $index => $id ) {
if ( trim( $id ) === '' ) {
unset( $groups[$index] );
}
}
}
return $groups;
}
/**
* Wrapper for setting subgroups.
* @param string $groupId
* @param array $subgroupIds
* @since 2012-05-09
*/
public static function setSubgroups( $groupId, $subgroupIds ) {
$subgroups = implode( '|', $subgroupIds );
self::set( $groupId, 'subgroups', $subgroups );
}
/**
* Wrapper for deleting one wiki aggregate group at once.
* @param string $groupId
* @since 2012-05-09
*/
public static function deleteGroup( $groupId ) {
$dbw = wfGetDB( DB_MASTER );
$conds = [ 'tmd_group' => $groupId ];
$dbw->delete( 'translate_metadata', $conds );
}
}
|