Как вы уже заметили на 1.0.3 не работают «Пост-Опрос, Пост-Фотосет и Пост-Ссылка»
Чиним так. В файле:
/classes/modules/topic/entity/Topic.entity.class.php
Заменить функции на вот эти:(Извеняйте, что не описал что именно менять, тут лимит стоит 15000. Но там всё идёт по порядку. Найдите начало и конец, и замените на этот код)
/**
* Извлекает сериализованные данные топика
*/
protected function extractExtra() {
if (null === $this->aExtra) {
$aData = @unserialize($this->getExtra());
if (is_array($aData)) {
$this->aExtra = $aData;
}
}
}
/**
* Устанавливает значение нужного параметра
*
* @param string $sName Название параметра/данных
* @param mixed $data Данные
*/
protected function setExtraValue($sName, $data) {
$this->extractExtra();
$this->aExtra[$sName] = $data;
$this->setExtra($this->aExtra);
}
/**
* Извлекает значение параметра
*
* @param string $sName Название параметра
*
* @return null|mixed
*/
protected function getExtraValue($sName) {
$this->extractExtra();
if (isset($this->aExtra[$sName])) {
return $this->aExtra[$sName];
}
return null;
}
/* *** ******************** *** */
/* *** SOURCE LINK OF TOPIC *** */
/**
* Returns URL of topic's source link
*
* @param bool $bShort Shorten URL
*
* @return null|string
*/
public function getSourceLink($bShort = false) {
if ($sUrl = $this->getExtraValue('url')) {
if ($bShort) {
$sUrl = htmlspecialchars($sUrl);
if (preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
$sUrl = $aMatch[1];
}
$sUrlShort = substr($sUrl, 0, 30);
if (strlen($sUrlShort) != strlen($sUrl)) {
return $sUrlShort . '...';
}
return $sUrl;
} else {
if (!preg_match('/^https?:\/\/(.*)$/i', $sUrl, $aMatch)) {
$sUrl = 'http://' . $sUrl;
}
}
return $sUrl;
}
return null;
}
/**
* Set URL of topic's source link
*
* @param string $data
*/
public function setSourceLink($data) {
$this->setExtraValue('url', strip_tags($data));
}
/**
* Возвращает количество переходов по ссылке в топике-ссылке
*
* @return int
*/
public function getSourceLinkCountJump() {
return (int)$this->getExtraValue('count_jump');
}
/**
* Устанавливает количество переходов по ссылке в топике-ссылке
*
* @param string $data
*/
public function setSourceLinkCountJump($data) {
$this->setExtraValue('count_jump', $data);
}
/* *** ********************** *** */
/* *** QUESTIONNAIRE OF TOPIC *** */
/**
* Устанавливает вопрос
*
* @param string $data
*/
public function setQuestionTitle($data) {
$this->setExtraValue('question_title', $data);
}
/**
* Возвращает вопрос, если вопрос не указан - заголовок топика
*
* @return int|null
*/
public function getQuestionTitle() {
if ($this->getExtraValue('question_title')) {
return $this->getExtraValue('question_title');
}
return $this->getTitle();
}
/**
* Добавляет вариант ответа в опросе топика
*
* @param string $data
*/
public function addQuestionAnswer($data) {
$this->extractExtra();
$this->aExtra['answers'][] = array('text' => $data, 'count' => 0);
$this->setExtra($this->aExtra);
}
/**
* Очищает варианты ответа в опросе топика
*/
public function clearQuestionAnswer() {
$this->setExtraValue('answers', array());
}
/**
* Возвращает варианты ответа в опросе топика
*
* @param bool $bSortVote
*
* @return array|null
*/
public function getQuestionAnswers($bSortVote = false) {
$aAnswers = $this->getExtraValue('answers');
if ($aAnswers && $bSortVote) {
uasort(
$aAnswers, create_function(
'$a,$b',
"if (\$a['count'] == \$b['count']) { return 0; } return (\$a['count'] < \$b['count']) ? 1 : -1;"
)
);
}
return $aAnswers ? $aAnswers : array();
}
/**
* Увеличивает количество ответов на данный вариант в опросе топика
*
* @param int $sIdAnswer ID варианта ответа
*/
public function increaseQuestionAnswerVote($sIdAnswer) {
if ($aAnswers = $this->getQuestionAnswers()) {
if (isset($aAnswers[$sIdAnswer])) {
$aAnswers[$sIdAnswer]['count']++;
$this->aExtra['answers'] = $aAnswers;
$this->setExtra($this->aExtra);
}
}
}
/**
* Возвращает максимально количество ответов на вариант в опросе топика
*
* @return int
*/
public function getQuestionAnswerMax() {
$aAnswers = $this->getQuestionAnswers();
$iMax = 0;
foreach ($aAnswers as $aAns) {
if ($aAns['count'] > $iMax) {
$iMax = $aAns['count'];
}
}
return $iMax;
}
/**
* Возвращает в процентах количество проголосовавших за конкретный вариант
*
* @param int $sIdAnswer ID варианта
*
* @return int|string
*/
public function getQuestionAnswerPercent($sIdAnswer) {
if ($aAnswers = $this->getQuestionAnswers()) {
if (isset($aAnswers[$sIdAnswer])) {
$iCountAll = $this->getQuestionCountVote() - $this->getQuestionCountVoteAbstain();
if (!$iCountAll == 0) {
return number_format(round($aAnswers[$sIdAnswer]['count'] * 100 / $iCountAll, 1), 1, '.', '');
}
}
}
return 0;
}
/**
* Возвращает общее число принявших участие в опросе в опросе топика
*
* @return int
*/
public function getQuestionCountVote() {
return (int)$this->getExtraValue('count_vote');
}
/**
* Устанавливает общее число принявших участие в опросе в опросе топика
*
* @param int $data
*/
public function setQuestionCountVote($data) {
$this->setExtraValue('count_vote', $data);
}
/**
* Возвращает число воздержавшихся от участия в опросе
*
* @return int
*/
public function getQuestionCountVoteAbstain() {
return (int)$this->getExtraValue('count_vote_abstain');
}
/**
* Устанавливает число воздержавшихся от участия в опросе
*
* @param int $data
*
* @return mixed
*/
public function setQuestionCountVoteAbstain($data) {
$this->setExtraValue('count_vote_abstain', $data);
}
/**
* Возвращает фотографии из топика-фотосета
*
* @param int|null $iFromId ID с которого начинать выборку
* @param int|null $iCount Количество
* @return array
*/
public function getPhotosetPhotos($iFromId = null, $iCount = null) {
return $this->Topic_getPhotosByTopicId($this->getId(), $iFromId, $iCount);
}
/**
* Возвращает количество фотографий в топике-фотосете
*
* @return int|null
*/
public function getPhotosetCount() {
return $this->getExtraValue('count_photo');
}
/**
* Возвращает ID главной фото в топике-фотосете
*
* @return int|null
*/
public function getPhotosetMainPhotoId() {
$oImage = $this->getPhotosetMainPhoto();
if ($oImage) {
return $oImage->getMresourceId();
}
return $this->getExtraValue('main_photo_id');
}
/**
* Устанавливает ID главной фото в топике-фотосете
*
* @param int $data
*/
public function setPhotosetMainPhotoId($iPhotoId) {
$this->setExtraValue('main_photo_id', $iPhotoId);
$this->setProp('_photoset_photos', null);
}
/**
* Устанавливает количество фотографий в топике-фотосете
*
* @param int $data
*/
public function setPhotosetCount($iCount) {
$this->setExtraValue('count_photo', $iCount);
$this->setProp('_photoset_photos', null);
}
Не дадим 1.0.3 умереть!