Karma mod by m157y

Поддержка старых модов или модов, созданных авторами не из нашего сообщества, а также любые вопросы, связанные с модами для phpBB 3.0.x, кроме относящихся к форуму Для авторов (phpBB 3.0.x).
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
Поручик
Former team member
Сообщения: 3942
Стаж: 21 год 4 месяца
Откуда: Оренбург (Южный Урал)
Благодарил (а): 24 раза
Поблагодарили: 54 раза

Re: Karma mod by m157y

Сообщение Поручик »

Автор User Reputation Points давно забил на него.
Профессионал - тот же дилетант, только знающий, где ошибётся.
Генератор db_update.php для phpBB2 с некоторыми удобствами. Многие моды я беру или ищу здесь, здесь, тут
Все консультации только на форуме, приваты и стук в аську по таким вопросам игнорируются!
FAQ-phpBB3 | Ошибки новичков, или как не поссориться с модератором | Правила конференции

наш форум http://forum.aeroion.ru/cat1.html
pookkalo
phpBB 1.0.0
Сообщения: 7
Стаж: 15 лет 11 месяцев
Благодарил (а): 2 раза

Re: Karma mod by m157y

Сообщение pookkalo »

Ну то же самое и с Karma MOD...
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

Подскажите пожалуйста, какой мод благодарностей установлен у вас на сайте?
Можно ли его поставить в пару с Кармамодом 123 для проверки?
Насколько сложно будет корректно удалить карму? с редактируемыми файлами все относительно понятно, а вот касательно изменений базы - очень интересует вопрос.
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

Спасибо всем оперативно откликнувшимся.
Если я правильно понял, на гуру используется этот мод: Thanks for post (Rating edition)
И Карма мод и Спасибо за пост вместе работают корректно(???), но думается, использовать оба мода не рационально.
Минус кармы - она не поддерживается в отличии от Спасибо за пост (поправьте если не прав).

Остается открытым вопрос: как корректно деинсталировать карму, чтобы после нее не оставались "мертвые" права доступа и другой мусор в базе?

Деинсталировать изменения в файлах и файлы кармы, так же как выполнить действия, обратные инструкции mysql41_schema не составило труда:

Код: Выделить всё

CREATE TABLE phpbb_karma (...
ALTER TABLE phpbb_posts...
ALTER TABLE phpbb_topics....
ALTER TABLE phpbb_users...
Но, вот никак не разобраться, как удалить права доступа, прописанные кармой? Еще где то может храниться мусор после этого мода?
Аватара пользователя
comshat
phpBB 1.4.2
Сообщения: 63
Стаж: 16 лет 6 месяцев
Благодарил (а): 16 раз
Поблагодарили: 3 раза

Re: Karma mod by m157y

Сообщение comshat »

FomenkoAndrey писал(а):И Карма мод и Спасибо за пост вместе работают корректно(???), но думается, использовать оба мода не рационально.
Корректрно. Пример:
http://forum.gogogo-server.ru
Только карма мод немного оптимизирован и переделан.. Совсем немного.
if FLOOD then BAN
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

comshat
У меня тоже вроде оба мода пашут. Да и по коду они вроде нигде не пересекались.
Как нагрузка на сервер? и что переделывали? если можно, поподробнее.
У меня кстати баг был, описывал ранее в теме Karma mod by m157y значение репутации в мини/профиле отличается от того что показывает админка. Может сталкивались? или есть идеи как побороть?
Аватара пользователя
comshat
phpBB 1.4.2
Сообщения: 63
Стаж: 16 лет 6 месяцев
Благодарил (а): 16 раз
Поблагодарили: 3 раза

Re: Karma mod by m157y

Сообщение comshat »

FomenkoAndrey писал(а):Как нагрузка на сервер?
У меня colocation... :)
FomenkoAndrey писал(а):и что переделывали?
Да по мелочи, в основном, так и не вспомню.. Чуть-чуть там, чуть-чуть здесь, в процессе установки + после немного.
FomenkoAndrey писал(а):Может сталкивались?
Честно говоря - нет.. В принципе про наличие данного поля в админке забыл :) Ибо на фига проверять?
Но есть мысль - возможно, удаляли у кого-либо карму, а там косяное удаление, мускул ошибку выдает, но на форуме удаляет... А вот в админке могла старое значение остаться.
Хотя - х.з. Надо будем самому просмотреть, проверить.
if FLOOD then BAN
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

Онаружил, что на страницах сайта мы видим значение поля user_karma_powered из таблицы phpbb_users
а в админке user_karma из таблицы phpbb_users

Так вот, здается мне, что поле user_karma содержит значения сколько раз плюсанули или минусанули карму.
А поле user_karma_powered - еще и учитывает силу кармы. Например кто-то изменил значения с силой, отличной от единицы...

Отсюда и разные значения. Может я и ошибаюсь, но истинна где-то рядом.
comshat писал(а):Только карма мод немного оптимизирован
с переделкой понятно - под свои нужды. а что оптимизировали?


Кто-нибудь знает, почему установленное в админке значение топлиста кармы для пользователей ** не устанавливается для новых пользователей?
** поле Число пользователей в топ-листе: число пользователей, которое будет отображено в топ-листе на главной странице. Должно быть больше 0. Например, значение этого поля = 10
Им все равно подставляется другое значение = 3. Почему так? и как побороть сию гадость?

И, для спортивного интереса. Удалил карму, но права доступа остались. Как от них избавить?
Аватара пользователя
comshat
phpBB 1.4.2
Сообщения: 63
Стаж: 16 лет 6 месяцев
Благодарил (а): 16 раз
Поблагодарили: 3 раза

Re: Karma mod by m157y

Сообщение comshat »

FomenkoAndrey писал(а):Так вот, здается мне, что поле user_karma содержит значения сколько раз плюсанули или минусанули карму.
нет, содержит только итоговое знаение кармы.
FomenkoAndrey писал(а):с переделкой понятно - под свои нужды. а что оптимизировали?
сам код... да там не много, если бы было чего серьезного - записал бы, а сейчас выложил. единственное что из сделанного заполнилось - адаптация hide тегов для этого мода (hide bb code мода)
FomenkoAndrey писал(а):Кто-нибудь знает, почему установленное в админке значение топлиста кармы для пользователей ** не устанавливается для новых пользователей?
тоже была такая проблема.. так и не решил.. вроде и в бд ковырялся (там в таблице users надо изменить), а все равно
if FLOOD then BAN
Microgenius
phpBB 1.4.3
Сообщения: 88
Стаж: 16 лет 4 месяца
Благодарил (а): 11 раз
Поблагодарили: 3 раза

Re: Karma mod by m157y

Сообщение Microgenius »

В списке комментариев (в профиле) видно текст комментария к каждому повышению кармы и ссылка на этот пост в форуме в виде малюсенького белого квадратика. Как сделать так, что бы после него было еще и название этой темы, куда ведет этот квадратик?
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

Никто не пытался реализовать следующее:
найти в базе такие комментарии к карме, посты для которых более не существую и удалить их.
думаю, значение кармы можно не пересчитывать, хотя можно и попробовать вычесть у пользователя 1 из общего значения кармы.

SQL-запрос должен справиться. Может поможет кто? или уже кто делал такое для себя?
Аватара пользователя
Alecto
phpBB 3.0.12
Сообщения: 2857
Стаж: 16 лет 8 месяцев
Откуда: Украина! Харьков
Благодарил (а): 80 раз
Поблагодарили: 292 раза

Re: Karma mod by m157y

Сообщение Alecto »

Вижу что помощи ждать не от кого, поэтому и дальше продолжаю ковырять сам в ожидании помощи от гуру или от других страждущих.

построил запрос, который выбирает карму (комменты), несуществующих пользователей:

Код: Выделить всё

select * from phpbb_karma where not exists (select user_id from phpbb_users where phpbb_karma.user_id = phpbb_users.user_id)
собственно, удалить такие записи тоже не проблема (удаление пока не проверял, так что желающие испытать - дерзайте):

Код: Выделить всё

delete from phpbb_karma where not exists (select user_id from phpbb_users where phpbb_karma.user_id = phpbb_users.user_id)
далее, выбираем карму (комменты) для несуществующих постов (удаление можно построить по аналогии):

Код: Выделить всё

select * from phpbb_karma
where not exists (select post_id from phpbb_posts where phpbb_posts.post_id = phpbb_karma.post_id)
and phpbb_karma.post_id > 0
Теперь сам вопрос:
значение кармы пользователя в этом случае не изменяется, по идее должны удалиться только комменты на несуществующие посты или для несуществующих пользователей - такая себе чистка таблица кармы от неактуальных записей. далее возникают варианты:
- самое просто предположить, что пользователь заслужил карму (репутацию) и после чистки битых ссылок оставить ему все честно заслуженные им значения.
- вариант второй - доработать запрос таким образом, чтобы происходило обновление кармы согласно значению удаляемого поста.

Если с первым вариантом все просто, то второй вариант реализовать своими силами я не могу (достаточных знаний видите ли еще не набрался), так что прошу помощи у компетентных гуру.


В таблице phpbb_karma поля
karma_power: N - числовое значение силы кармы для текущей записи
karma_action: -/+ - действие понижения или повышения кармы

В таблице phpbb_users
user_karma: M - количество изменений кармы
user_karma_powered: K - сумма всех изменений кармы (с учетом веса каждого конкретного изменения)


Буду признателен за помощь в решение поставленной задачи.
SF
phpBB 1.4.4
Сообщения: 149
Стаж: 19 лет 8 месяцев
Благодарил (а): 1 раз

Re: Karma mod by m157y

Сообщение SF »

При добавлении этого в overall_header и включении AJAX comment, под Firefox'ом не работают никакие ссылки в верхнем меню.
<!-- [+] Karma MOD //-->
<!-- INCLUDE karma_notify.html -->
<!-- IF S_KARMA_AJAX_ENABLED -->
<script type="text/javascript" src="{ROOT_PATH}includes/mods/karma.js"></script>
<div id="karma-ajax"></div>
<!-- ENDIF -->
<!-- [-] Karma MOD //-->
karma.js

Код: Выделить всё

/* Karma MOD AJAX functions
-------------------------------------------------
	Author: m157y
	Version: 04 March 2010

	Copyright 2007-2010 David Lawson, m157y, A_Jelly_Doughnut
-------------------------------------------------*/

var karma = {
	httpRequest: null, // XMLHTTPRequest object
	usersPosts: [], // Array for connection between users and posts
	coordY: 0, // Mouse Y coordinate, used for box positioning
	iconsObj: null, // Buttons object

	/**
	* UI Functions
	*/
	// Show confirm/comment box
	showBox: function()
	{
		// Box already visible
		if (document.getElementById('karma-ajax').style.visibility == 'visible')
		{
			return;
		}

		// Set box top position
		document.getElementById('karma-ajax').style.top = (this.coordY - 100) + 'px';

		// Show box
		document.getElementById('karma-ajax').style.visibility = 'visible';

		// Change box style to loading
		document.getElementById('karma-ajax').className = 'karma-loading';

		// Enable parser of key presses
		this.eventAdd(document, 'keydown', this.parseKeyPress, false);
	},

	// Hide confirm/comment box
	hideBox: function()
	{
		// Hide box
		document.getElementById('karma-ajax').style.visibility = 'hidden';

		// Delete box content
		document.getElementById('karma-ajax').innerHTML = '';

		// Disable parser of key presses
		this.eventRemove(document, 'keydown', this.parseKeyPress, false);

		return false;
	},

	// Update page content
	updatePage: function()
	{
		// Ouch, we already loaded, we don't need any class
		document.getElementById('karma-ajax').className = '';

		// Update data, if we have proper XML response
		if (this.httpRequest.responseXML != null && this.httpRequest.responseXML.hasChildNodes())
		{
			var id = this.httpRequest.responseXML.getElementsByTagName('id')[0].firstChild.nodeValue;
			var xmlData = this.httpRequest.responseXML.getElementsByTagName('data')[0].firstChild.nodeValue;

			// On deleting set successfully deleted message,
			// but on updating set new karma value
			if (document.getElementById('cpr' + id) != undefined) // We're deleted karma
			{
				document.getElementById('cpr' + id).innerHTML = xmlData;
			}
			else if (document.getElementById('karma') != undefined) // We're at viewprofile/viewpm page
			{
				// Set new karma value
				document.getElementById('karma').innerHTML = xmlData;
			}
			else // We're at viewtopic page
			{
				// This is a loop, which will update karma values for all posts by karmaed user
				for (i = 0; i < this.usersPosts[id].length; i++)
				{
					document.getElementById('karma-' + this.usersPosts[id][i]).innerHTML = xmlData;
				}
			}

			// Hide karma buttons
			if (document.getElementById(this.iconsObj) != undefined)
			{
				document.getElementById(this.iconsObj).innerHTML = '';
			}

			// Hide confirm/comment box
			this.hideBox();

			// Exit function
			return;
		}

		// Load confirm/comment box
		document.getElementById('karma-ajax').innerHTML = this.httpRequest.responseText;
	},

	/**
	* AJAX functions
	*/
	// Send GET/POST query
	ajaxQuery: function(url, dataStr)
	{
		// If XMLHTTPRequest doesn't created, we must show error
		if (this.httpRequest == undefined)
		{
			return;
		}

		// If dataStr not null we must send POST query,
		// else it will be GET query
		if (dataStr != '')
		{
			this.httpRequest.open('POST', url, true);

			// Headers for POST query
			this.httpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
			this.httpRequest.setRequestHeader('Content-length', dataStr.length);
			this.httpRequest.setRequestHeader('Connection', 'close');
		}
		else
		{
			this.httpRequest.open('GET', url, true);

			// Workaround for some browsers
			dataStr = null;
		}

		// On state changes we call our parser
		this.httpRequest.onreadystatechange = function (){ karma.ajaxDone(); };

		// Send data
		this.httpRequest.send(dataStr);
	},

	// On-load events
	ajaxDone: function()
	{
		// Show box, if needed
		// Also it'll show loading image
		this.showBox();

		// Exit function if reply not loaded
		if (this.httpRequest.readyState != 4)
		{
			return;
		}

		// Show error if loaded with error
		if (this.httpRequest.status != 200) 
		{
			alert(this.httpRequest.status + ' | ' + this.httpRequest.statusText);
			return;
		}

		// Call UI updater
		this.updatePage();
	},

	/**
	* Support functions
	*/
	// Init function, creates XMLHTTP object
	// and set functions to events
	init: function()
	{
		// Create XMLHTTP object
		if (window.XMLHttpRequest) // Safari, Opera, Mozilla, etc
		{
			this.httpRequest = new XMLHttpRequest();
		}
		else if (window.ActiveXObject) // Internet Explorer
		{
			this.httpRequest = new ActiveXObject('Msxml2.XMLHTTP');
			if (this.httpRequest == undefined) // Old Internet Explorer
			{
				this.httpRequest = new ActiveXObject('Microsoft.XMLHTTP');
			}
		}

		// Enable mouse coords catching
		this.eventAdd(document, 'mousemove', this.getMouseY, false);
	},

	// Adding values to user-posts array
	// Used at viewtopic for all posts by user updating
	linkPostToUser: function(user_id, post_id)
	{
		if (this.usersPosts[user_id] == undefined)
		{
			this.usersPosts[user_id] = new Array();
			this.usersPosts[user_id].push(post_id);
		}
		else
		{
			this.usersPosts[user_id].push(post_id);
		}
	},

	// Get mouse Y coordinates
	getMouseY: function(event)
	{
		if (event)
		{
			// Catch Y mouse coords
			if (typeof(event.pageY) == 'number') // Safari, Opera, Mozilla, etc
			{
				karma.coordY = event.pageY;
			}
			else // Internet Explorer
			{
				// In IE you must catch page scrolled height
				// document.documentElement.scrollTop used in IE6+
				scrollDiff = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
				karma.coordY = event.clientY + scrollDiff;
			}
		}
	},

	// Parse key presses
	parseKeyPress: function(event)
	{
		// On ESC press hide confirm/comment box
		if (event.keyCode == 27)
		{
			karma.hideBox();
		}
		else if (event.keyCode == 10 || (event.ctrlKey && event.keyCode == 13))
		{
			formObj = (document.getElementById('postform') != undefined) ? document.getElementById('postform') : document.getElementById('confirm');
			karma.update(formObj);
		}
	},

	// Generate url and dataStr and call query
	update: function(dataObj)
	{
		var dataStr = '';

		if (dataObj.getAttribute('action') != undefined)
		{
			// Catch user id
			dataStr = 'u=' + dataObj.u.value;

			// Enabled comments? Okay, we catch the message
			if (dataObj.message != undefined)
			{
				dataStr = dataStr + '&message=' + encodeURI(dataObj.message.value);
			}

			// Also we catch karma power, if it enabled
			if (dataObj.power != undefined)
			{
				dataStr = dataStr + '&power=' + dataObj.power.value;
			}

			// Catch topic icon, if it enabled
			if (dataObj.icon)
			{
				iconsCount = dataObj.icon.length;
				for (i = 0; i < iconsCount; i++)
				{
					if (dataObj.icon[i].checked)
					{
						dataStr = dataStr + '&icon=' + dataObj.icon[i].value;
					}
				}
			}

			// Catch post support fields, if we at viewtopic
			// Or catch pm support field, if we at viewpm
			if (dataObj.p != undefined)
			{
				dataStr = dataStr + '&f=' + dataObj.f.value; // Forum ID
				dataStr = dataStr + '&t=' + dataObj.t.value; // Topic ID
				dataStr = dataStr + '&p=' + dataObj.p.value; // Post ID
			}
			else if (dataObj.pm != undefined)
			{
				dataStr = dataStr + '&pm=' + dataObj.pm.value; // PM ID
			}

			// And, of course, we catch confirm fields
			if (dataObj.sess != undefined)
			{
				dataStr = dataStr + '&sess=' + dataObj.sess.value; // Session ID
				dataStr = dataStr + '&confirm_uid=' + dataObj.confirm_uid.value; // Confirm User ID
				dataStr = dataStr + '&confirm=' + encodeURI(dataObj.confirm.value); // Confirm button value
			}
			else
			{
				dataStr = dataStr + '&post=Submit'; // Submit button value
			}

			// Set icons object name
			this.iconsObj = 'karma-icons';
			if (dataObj.p != undefined) // At viewtopic we have post_id
			{
				this.iconsObj = this.iconsObj + '-' + dataObj.p.value;
			}

			// Catch url
			url = dataObj.getAttribute('action'); // Catch action attribute from <form>
		}
		else
		{
			// Catch url
			url = dataObj.getAttribute('href'); // Catch href attribute from <a>
		}

		// Prepare url for AJAX
		url = url.replace('&', '&'); // Replace & to &, because it doesn't work at JS
		url = url + '&ajax=true'; // And add ajax addition to url

		// Querying result to our url+data
		this.ajaxQuery(url, dataStr);

		return false;
	},

	/**
	* Events functions
	*/
	// Add event listener
	eventAdd: function(obj, event, listener, capture)
	{
		capture = capture || false; // If useCapture not specified, use false
		if (obj.addEventListener) // Safari, Opera, Mozilla, etc
		{
			obj.addEventListener(event, listener, capture);
		}
		else if (obj.attachEvent) // Internet Explorer
		{
			obj.attachEvent('on' + event, listener);
		}
	},

	// Remove event listener
	eventRemove: function(obj, event, listener, capture)
	{
		capture = capture || false; // If useCapture not specified, use false
		if (obj.removeEventListener) // Safari, Opera, Mozilla, etc
		{
			obj.removeEventListener(event, listener, capture);
		}
		else if (obj.detachEvent) // Internet Explorer
		{
			obj.detachEvent('on' + event, listener);
		}
	}
};

karma.init();
У кого ещё такие траблы с версией 1.4.0?
SF
phpBB 1.4.4
Сообщения: 149
Стаж: 19 лет 8 месяцев
Благодарил (а): 1 раз

Re: Karma mod by m157y

Сообщение SF »

У меня с 1.4.0 всё ОК, кроме AJAX'a.
kto
phpBB 1.0.0
Сообщения: 3
Стаж: 15 лет 4 месяца
Благодарил (а): 1 раз

Re: Karma mod by m157y

Сообщение kto »

Здравствуйте.
Пытался установить "Karma mod" версии 1,2,3 и столкнулся с проблемой следующего характера:
При включении аддона невозможно зайти в темы на форуме, так как выскакивает ошибка:

Код: Выделить всё

Общая ошибка
SQL ERROR [ mysqli ]

Table 'adeusexm_jbb.KARMA_TABLE' doesn't exist [1146]

SQL

SELECT u.*, z.friend, z.foe, p.*, k.karma_time, k2.karma_time as karmaed, gu.personal_album_id, gu.user_images FROM (phpbb_users u, phpbb_posts p) LEFT JOIN phpbb_zebra z ON (z.user_id = 66 AND z.zebra_id = p.poster_id) LEFT JOIN phpbb_gallery_users gu ON (gu.user_id = p.poster_id) LEFT JOIN KARMA_TABLE k ON (k.poster_id = 66 AND k.user_id = p.poster_id) LEFT JOIN KARMA_TABLE k2 ON (k2.poster_id = 66 AND k2.post_id = p.post_id AND k2.user_id = p.poster_id) WHERE p.post_id IN (43757, 43857, 43858, 43859, 43860, 43861, 43862, 43864, 43865, 43867, 43869, 43871, 43872, 43873, 43875, 43877, 43878, 43879, 43881, 43883) AND u.user_id = p.poster_id

BACKTRACE

FILE: includes/db/mysqli.php
LINE: 163
CALL: dbal->sql_error()

FILE: viewtopic.php
LINE: 1041
CALL: dbal_mysqli->sql_query()
Помогите разобраться, в чём проблема.
При выключении аддона всё нормально.

Вернуться в «Поддержка модов для phpBB 3.0.x»