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

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