PortableInfobox/includes/services/Helpers/PagePropsProxy.php

74 lines
1.5 KiB
PHP
Raw Normal View History

2015-09-23 13:51:41 +00:00
<?php
namespace PortableInfobox\Helpers;
2015-09-23 13:51:41 +00:00
2022-12-07 00:19:24 +00:00
use MediaWiki\MediaWikiServices;
2015-09-23 13:51:41 +00:00
class PagePropsProxy {
protected $atomicStarted;
protected $manualWrite;
public function __construct( $manualWrite = false ) {
$this->manualWrite = $manualWrite;
}
2015-09-23 13:51:41 +00:00
public function get( $id, $property ) {
2022-12-07 00:19:24 +00:00
$dbLoadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
$dbr = $dbLoadBalancer->getConnection( DB_REPLICA );
$propValue = $dbr->selectField(
'page_props',
2018-08-16 09:25:53 +00:00
'pp_value',
[
'pp_page' => $id,
'pp_propname' => $property
2018-08-16 09:25:53 +00:00
],
__METHOD__
);
return $propValue;
2015-09-23 13:51:41 +00:00
}
2018-08-16 09:25:53 +00:00
public function set( $id, array $props ) {
2022-12-07 00:19:24 +00:00
$dbLoadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
$dbw = $dbLoadBalancer->getConnection( DB_PRIMARY );
if ( !$this->atomicStarted ) {
$dbw->startAtomic( __METHOD__ );
$this->atomicStarted = true;
}
2018-08-16 09:25:53 +00:00
foreach ( $props as $sPropName => $sPropValue ) {
$dbw->replace(
'page_props',
2018-08-16 09:25:53 +00:00
[
[
'pp_page',
'pp_propname'
]
2018-08-16 09:25:53 +00:00
],
[
'pp_page' => $id,
'pp_propname' => $sPropName,
'pp_value' => $sPropValue
2018-08-16 09:25:53 +00:00
],
__METHOD__
);
}
if ( !$this->manualWrite ) {
$dbw->endAtomic( __METHOD__ );
$this->atomicStarted = false;
}
2015-09-23 13:51:41 +00:00
}
public function write() {
if ( $this->atomicStarted && $this->manualWrite ) {
2022-12-07 00:19:24 +00:00
$dbLoadBalancer = MediaWikiServices::getInstance()->getDBLoadBalancer();
$dbLoadBalancer->getConnection( DB_PRIMARY )
->endAtomic( __CLASS__ . '::set' );
$this->atomicStarted = false;
}
}
2015-09-23 13:51:41 +00:00
}