summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Translate/stash/TranslationStashStorage.php
blob: 08a3ef2b99ec45af698a0cf74b1713f7813cc6c3 (plain)
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
<?php
/**
 * Storage class for stashed translations.
 *
 * @file
 * @author Niklas Laxström
 * @license GPL-2.0+
 */

/**
 * Storage class for stashed translations. This one uses sql tables as storage.
 * @since 2013.06
 */
class TranslationStashStorage {
	protected $db;
	protected $dbTable;

	public function __construct( DatabaseBase $db, $table = 'translate_stash' ) {
		$this->db = $db;
		$this->dbTable = $table;
	}

	/**
	 * Adds a new translation to the stash. If the same key already exists, the
	 * previous translation and metadata will be replaced with the new one.
	 *
	 * @param StashedTranslation $item
	 */
	public function addTranslation( StashedTranslation $item ) {
		$row = array(
			'ts_user' => $item->getUser()->getId(),
			'ts_title' => $item->getTitle()->getDBkey(),
			'ts_namespace' => $item->getTitle()->getNamespace(),
			'ts_value' => $item->getValue(),
			'ts_metadata' => serialize( $item->getMetadata() ),
		);

		$indexes = array(
			array( 'ts_user', 'ts_namespace', 'ts_title' )
		);

		$this->db->replace( $this->dbTable, $indexes, $row, __METHOD__ );
	}

	/**
	 * Gets all stashed translations for the given user.
	 * @param User $user
	 * @return StashedTranslation[]
	 */
	public function getTranslations( User $user ) {
		$conds = array( 'ts_user' => $user->getId() );
		$fields = array( 'ts_namespace', 'ts_title', 'ts_value', 'ts_metadata' );

		$res = $this->db->select( $this->dbTable, $fields, $conds, __METHOD__ );

		$objects = array();
		foreach ( $res as $row ) {
			$objects[] = new StashedTranslation(
				$user,
				Title::makeTitle( $row->ts_namespace, $row->ts_title ),
				$row->ts_value,
				unserialize( $row->ts_metadata )
			);
		}

		return $objects;
	}

	/**
	 * Delete all stashed translations for the given user.
	 * @param User $user
	 * @since 2013.10
	 */
	public function deleteTranslations( User $user ) {
		$conds = array( 'ts_user' => $user->getId() );
		$this->db->delete( $this->dbTable, $conds, __METHOD__ );
	}
}