[Задача 12794] Добавил возможность изменять исправление в админке, для этого…

[Задача 12794] Добавил возможность изменять исправление в админке, для этого пришлось немного поменять функцию исправления на сервере админки
parent c29c3515
......@@ -74,12 +74,29 @@ class Typos extends CI_Controller {
return;
}
function setTypoStatus($typoId = null, $siteId = null, $status = 0) {
/**
* Устанавливает статус опечатки, если status = 0, то опечатка отправляется
* в архив, при этом автоматического исправления не происходит, иначе
* опечатка будет исправлена автоматически.
*
* Post параметры:
* @param int typoId Идентификатор опечатки
* @param int siteId Идентификатор сайта
* @param int accepted Принято ли исправление опечатки
* @param string corrected Финальный вариант, на который необходимо исправить опечатку
* @return CI_Output
*/
function setTypoStatus() {
$response = [
"error" => false,
"message" => "Success"
];
$typoId = intval($this->input->post("typoId"));
$siteId = intval($this->input->post("siteId"));
$accepted = intval($this->input->post("accepted"));
$corrected = $this->input->post("corrected");
if (!$typoId || !$siteId) {
$response["error"] = true;
$response["message"] = "Invalid parameters passed";
......@@ -92,16 +109,17 @@ class Typos extends CI_Controller {
$data = [
"autoCorrection" => true,
"status" => $status,
"status" => $accepted,
"id_message" => $typoId,
"id_site" => $siteId,
"login_id" => $this->login_id
"login_id" => $this->login_id,
"corrected" => $corrected
];
// Нужно в любом случае выставить статус 1
// Но если $status == 0, то необходимо выключить
// автоисправление текста статьи.
if ($status == 0) {
if ($accepted == 0) {
$data["autoCorrection"] = false;
$data["status"] = true;
}
......
......@@ -251,25 +251,27 @@ class Typo extends CI_Model {
* @param $data
*/
function editMessage($data) {
if ($this->getMessageRights($data)) {
if (!$this->getMessageRights($data)) {
return;
}
// По умолчанию ошибки исправляются
if (!isset($data["autoCorrection"])) {
$data["autoCorrection"] = true;
}
if ( $data['status'] && $data["autoCorrection"] ) {
$this->correctTypo($data["id_message"]);
$this->correctTypo($data);
}
$this->db->set("status", $data['status']);
$this->db->set("comment", $data['corrected']);
$this->db->where("id", $data['id_message']);
$this->db->where("site_id", $data['id_site']);
$this->db->update("messages");
}
}
/* Узнать права на сайт */
function getSiteRights($data) {
$this->db->select("r.id_site");
$this->db->from("responsible as r");
......@@ -287,7 +289,6 @@ class Typo extends CI_Model {
}
/* Узнать права пользователя на сообщение */
function getMessageRights($data) {
$this->db->select("m.id");
$this->db->from("messages as m, users as u");
......@@ -309,10 +310,9 @@ class Typo extends CI_Model {
/**
* Отправляет запрос на исправление ошибки на сервер
*
* @param integer $message_id
* Номер сообщения в бд
* @param $data array Информация об опечатке
*/
function correctTypo($message_id) {
function correctTypo($data) {
/* TODO: брать из конфига */
$correctPath = $this->config->item("correction_path");
$authToken = $this->config->item("typos_password");
......@@ -321,14 +321,14 @@ class Typo extends CI_Model {
/* Получаем исправление */
$this->db->select("m.link as link, m.text as text, m.comment as comment");
$this->db->from("messages as m");
$this->db->where("m.id", $message_id);
$this->db->where("m.id", $data["id_message"]);
$correction = $this->db->get()->row();
/* Получаем адрес необходимого сайта */
$parsed_url = parse_url($correction->link);
// Адресс на который шлем запрос исправления
// Адрес на который шлем запрос исправления
$url = $parsed_url["scheme"] . "://" . $parsed_url["host"] . "/" . $correctPath;
/* Посылаем запрос с помощью cUrl */
......@@ -343,12 +343,13 @@ class Typo extends CI_Model {
CURLOPT_PASSWORD => $authToken,
CURLOPT_POSTFIELDS => array(
'text' => $correction->text,
'corrected' => $correction->comment,
'corrected' => $data["corrected"],
'link' => $correction->link
),
));
log_message("debug", "sending request to $url");
log_message("debug", "corrected = {$data["corrected"]}");
if ( !($res = curl_exec($curl)) && curl_errno($curl) != 0 ) {
log_message("debug", "CorrectTypo errorCode: " . curl_errno($curl));
......
import React, {Component} from 'react';
import {Card, CardHeader, CardTitle, CardFooter, CardBody, CardText, Tooltip} from 'reactstrap'
import EditableText from "../EditableText";
import './style.css'
export default class Typo extends Component {
constructor(props) {
......@@ -12,6 +14,8 @@ export default class Typo extends Component {
this.toggleAcceptTooltip = this.toggleAcceptTooltip.bind(this);
this.typo = props.typo;
this.acceptCallback = props.acceptCallback.bind(this);
this.declineCallback = props.declineCallback.bind(this);
this.state = {
acceptTooltipOpen: false,
......@@ -74,6 +78,10 @@ export default class Typo extends Component {
</span>`);
}
onCorrectedTextUpdated = (corrected) => {
this.typo.correctedText = corrected;
};
render() {
const typo = this.typo;
const {acceptCallback, declineCallback, show} = this.props;
......@@ -105,18 +113,21 @@ export default class Typo extends Component {
</CardHeader>
<CardBody>
<CardTitle><del>{typo.originalText}</del> -> {typo.correctedText}</CardTitle>
<CardTitle>
<del>{typo.originalText}</del> ->
<EditableText text={typo.correctedText} onTextSaved={this.onCorrectedTextUpdated}/>
</CardTitle>
<CardText dangerouslySetInnerHTML={{__html: this.typo.context}} />
<CardText dangerouslySetInnerHTML={{__html: typo.context}} />
<div className="card-buttons">
<div className="buttons-wrapper">
<button id="acceptTypo" className="accept-button btn btn-warning" onClick={acceptCallback}>Исправить</button>
<button id="acceptTypo" className="accept-button btn btn-warning" onClick={this.applyCorrection}>Исправить</button>
<Tooltip placement="left" isOpen={this.state.acceptTooltipOpen}
target="acceptTypo" toggle={this.toggleAcceptTooltip}>
Опечатка будет автоматически исправлена
</Tooltip>
<button id="declineTypo" className="decline-button btn btn-danger" onClick={declineCallback}>Отклонить</button>
<button id="declineTypo" className="decline-button btn btn-danger" onClick={this.declineCorrection}>Отклонить</button>
<Tooltip placement="right" isOpen={this.state.declineTooltipOpen}
target="declineTypo" toggle={this.toggleDeclineTooltip}>
Опечатка не будет исправлена автоматически
......@@ -132,4 +143,11 @@ export default class Typo extends Component {
);
}
applyCorrection = () => {
this.acceptCallback(this.typo.correctedText);
};
declineCorrection = () => {
this.declineCallback();
};
}
\ No newline at end of file
......@@ -5,6 +5,10 @@ import Typo from "../Typo/";
import './style.css'
/**
* Alertify object
* @type {Alertify}
*/
const alertify = require("alertify.js");
export default class TypoList extends Component {
......@@ -14,19 +18,24 @@ export default class TypoList extends Component {
};
/**
* Одобряет предложеное исправление опечатки
* Одобряет исправление опечатки
* и вносит соответствующее исправление в текст.
*
* @param typoId Идентификатор опечатки
* @param corrected Финальный вариант исправления
*/
acceptCorrection(typoId) {
this._setTypoStatus(1, typoId, this.state.siteId, () => {
acceptCorrection(typoId, corrected) {
this._setTypoStatus(1, typoId, this.state.siteId, corrected)
.done(() => {
alertify.success(`<p>Опечатка ${typoId} была подтверждена.</p>
<p>Исправления применены к тексту, содержащему опечатку.</p>`);
this.state.currentTypo++;
this._decrementSiteTyposCount();
this.forceUpdate();
});
})
.fail(() => {
alertify.error("Ошибка исправления опечатки, попробуйте позже");
})
}
/**
......@@ -36,11 +45,15 @@ export default class TypoList extends Component {
* @param typoId Идентификатор опечатки.
*/
declineCorrection(typoId) {
this._setTypoStatus(0, typoId, this.state.siteId, () => {
this._setTypoStatus(0, typoId, this.state.siteId)
.done(() => {
alertify.success(`Опечатка ${typoId} была отклонена`);
this.state.currentTypo++;
this._decrementSiteTyposCount();
this.forceUpdate();
})
.fail(() => {
alertify.error("Ошибка исправления опечатки, попробуйте позже");
});
}
......@@ -53,16 +66,18 @@ export default class TypoList extends Component {
* @param status Новый статус опечатки
* @param typoId Идентификатор опечатки
* @param siteId Идентификатор сайта, на котором найдена опечатка
* @param then Колбэк функция
* @param corrected Исправленный вариант
*/
_setTypoStatus(status, typoId, siteId, then) {
$.ajax({
url: `${window.baseUrl}users/typos/setTypoStatus/${typoId}/${siteId}/${status}`,
}).done(() => {
then();
}).fail((error) => {
alertify.fail("Ошибка исправления опечатки, попробуйте позже");
console.error(error.message);
_setTypoStatus(status, typoId, siteId, corrected) {
return $.ajax({
method: "POST",
url: `${window.baseUrl}users/typos/setTypoStatus`,
data: {
accepted: status,
typoId: typoId,
siteId: siteId,
corrected: corrected,
}
});
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment