Skocz do zawartości

Rekomendowane odpowiedzi

Opublikowano

Witam, interesuje mnie edycja jednej modyfikacji "nihalz Link Bot v2 for IPB3". Jak zrobić tak by do każdego tematu który sprawdza robił osobny temat w koszu i właśnie do niego dodawał te posty? I jeszcze jedno jak zrobić by sprawdzał posty wg daty na forum, by zajął się najpierw najstarszymi postami.

mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "posts SET topic_id = 5 WHERE pid = " .$post['pid']);

To zapytanie wyżej wydziela, ale jak zrobić tak jak napisałem wyżej? Jeśli to za dużo, zadowolę się tym co mam. :P

nihalz nie zajmuje się już tą modyfikacją.

Opublikowano (edytowane)

Bardzo fajne tematy tam są, nawet nie wiedziałem. Niestety bład wyskakuje już w tej linii: (Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING)

 require_once( IPSLib::getAppDir( 'forums' ) . '/app_class_forums.php' );

Edytowane przez Dr R.I.P
Opublikowano (edytowane)

Jasne, mój błąd, faktycznie nie dopatrzyłem. Wywala komunikat:

Topic could not be posted

Ta część skryptu wygląda tak:

 	/**
	* Make sure we have our forums initialized
	*/
	require_once( IPSLib::getAppDir( 'forums' ) . '/app_class_forums.php' );
	$appClass 	= new app_class_forums( ipsRegistry::instance() );

	/**
	* Get posting class
	*/
	require_once( IPSLib::getAppDir( 'forums' ) . '/sources/classes/post/classPost.php' );
	$this->_postClass = new classPost( ipsRegistry::instance() );

	/**
	* Set some data. The method names give away what we are setting.
	* We are using forum id 1
	*/
	$this->_postClass->setIsPreview( false );
	$this->_postClass->setForumData( ipsRegistry::getClass('class_forums')->forum_by_id[ 1 ] );
	$this->_postClass->setForumID( 4 );
	$this->_postClass->setPostContent( "$przenies" );
	$this->_postClass->setAuthor( $this->memberData['linkbot_member_id'] );
	$this->_postClass->setPublished( true );
	$this->_postClass->setSettings( array( 'enableSignature' => 1,
	'enableEmoticons' => 1,
	'post_htmlstatus' => 0,
	'enableTracker' => 0 ) );
	$this->_postClass->setTopicTitle( "Niedzialajace linki z tematu ". $post['topic_id']);

	/**
	* And post it...
	*/
	try
	{
	if ( $this->_postClass->addTopic() === FALSE )
	{
	print "Topic could not be posted";
	exit;
	}
	}
	catch( Exception $error )
	{
	print "Topic posting failed: " . $error->getMessage();
	exit;
	}

	$this->topic = $this->_postClass->getTopicData();
	$this->post = $this->_postClass->getPostData();
$przenies = mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "posts SET topic_id = 5 WHERE pid = " .$post['pid']);
mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET posts=posts-1 WHERE tid = " . $post['topic_id']);

Jak mam zawartość tematu dodać tak by przeniosło post który chcę wydzielić?

Edytowane przez Dr R.I.P
  • Manager
Opublikowano

$this->_postClass->setAuthor( $this->memberData['linkbot_member_id'] );

E,y? Co to za stworek? Tam trzeba podać ID usera, więc pewnie tak:

$this->_postClass->setAuthor( $this->settings['linkbot_member_id'] );

Skąd taka zmienna?

 $post['topic_id']

W ogóle to gdzie Ty ten skrypt dodałeś i jak go uruchamiasz?

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano (edytowane)

 $post['topic_id']

Wszystko brałem z tego pliku. Była taka używana, więc ją wykorzystałem. Ma po prostu brać ID aktualnie sprawdzanego tematu i zmniejszać wartość odpowiedzi napisanych w temacie o 1.

linkbot_member_id

odnosi się do ID bota ustawione w Modułach. :P Ręcznie tam się dodaje ID bota. Czyli na sztywno dodać ID?

Edit//

Usunąłem/zmieniłem wszystko co mogło wg Ciebie było dziwne i dalej klapa.

Edit2:

Chwila, trzeba chyba przebudować zapytanie które przenosi, bo jest tam ID tematu dokładnie do którego ma przenosić a nie do tego które tworzy skrypt podany przez Ciebie. Jak to zrobić?

Edytowane przez Dr R.I.P
Opublikowano

Jest napisane w jakiej modyfikacji. Całego pliku nie mogę udostępnić.

Więc tak:

-Mogę stworzyć zapytanie by na sztywno przenosił do tematu (którego ID umieszczę w zapytaniu) w koszu posty, które sprawdził.

-Chciałbym, aby tworzył temat do którego owe posty będą przenoszone.

Spróbowałem zrobić po prostu tym kodem który mi dałeś bez specjalnych rzeczy tj. Dodać prosty temat o nazwie "Niedzialajace linki" o zawartości "jakas tam zawartosc" na forum o ID 4, z użytkownikiem o ID 6. Tylko te rzeczy pozmieniałem w tym kodzie. Niestety cały czas wywala error "Topic could not be posted".

Więc jeśli dobrze kojarzę, skrypt musi użyć kodu na tworzenie tematu, później ma do tego tematu przenosić posty. :P

  • Manager
Opublikowano

Generalnie tak.

Nie myśl sobie - również nie wiem dlaczego Ci to nie działa. Trzeba przeprowadzić całą ścieżkę diagnostyczną, sprawdzić komunikaty błędów, sprawdzić jakie klasy są używane, dodać teksty debugujące. Myślisz, że proces tworzenia kodu to takie hop siup? Trzeba się namęczyć, nie ma letko. :P

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano

Wiem, że to nie jest proste, teraz to rozumiem. :P Zrobię to inaczej, założę temat np "Wygasłe linki 1" dodam ID tego tematu do pierwszego zapytania i będzie je tam dodawać aż nie będzie tego dużo i wtedy, zrobię kolejny temat ręcznie i zmienię ID w skrypcie. Może nie jest to wygodne ale na tym poziomie programowania nie jestem w stanie nic innego zrobić. Możesz mi tylko powiedzieć które dane w bazie muszę jeszcze uaktualnić po przeniesieniu? Wiem że trzeba odjąć 1 za każdy post od liczby odpowiedzi. Coś jeszcze?

  • Manager
Opublikowano

Tzn. co byś chciał zrobić? Najlepiej uruchomić funkcję aktualizujące forum:

	protected function updateForumAndStats( $topic, $type='new')

Plik: admin/applications/forums/sources/classes/post/classPost.php

intermedia - profesjonalne rozwiązania Invision Power Board

---

Chcesz uzyskać szybko i sprawnie pomoc? Uzupełnij wersję i adres w profilu.

Opublikowano (edytowane)

Bardzo ciekawy pomysł, jak to wstawić do takiego kodu?

					//-------------------------------------------------
				// IF DEAD LINKS % > THRESHOLD, TAKE SOME ACTION
				//-------------------------------------------------

				if(($total_dead/$total_links)*100 >= $this->settings['linkbot_threshold'])
				{
					if($this->settings['linkbot_action'] == "1")
					{	
						//---------------------------------------------------------------------
						// POST NOT FIRST POST OF TOPIC, MOVE to BIN, Move TO EXSISTING TOPIC
						//---------------------------------------------------------------------

						if($post['new_topic'] != "1")
						{
	mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "posts SET topic_id = 5 WHERE pid = " .$post['pid']);
	mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET posts=posts-1 WHERE tid = " . $post['topic_id']);

						}

						//----------------------------------------------------------
						// POST IS FIRST POST OF TOPIC, MOVE TOPIC AND ADD BOT REPLY
						//----------------------------------------------------------

						else
						{
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET forum_id='" . $this->settings['linkbot_trashcan_id'] . "' WHERE tid = " . $post['topic_id']);
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "polls SET forum_id='" . $this->settings['linkbot_trashcan_id'] . "' WHERE tid = " . $post['topic_id']);
							mysql_query("INSERT INTO " . $this->settings['sql_tbl_prefix'] . "posts (author_id,author_name,ip_address,post_date,post,topic_id) VALUES ('" . $this->settings['linkbot_member_id'] . "','" . $bot_name . "','127.0.0.1','" . time() . "','" . htmlentities($this->settings['linkbot_reply_msg'],ENT_QUOTES) . "','" . $post['topic_id'] . "')");
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET posts=posts+1,last_poster_id='" . $this->settings['linkbot_member_id'] . "',last_post='" . time() . "',last_poster_name='" . $bot_name . "' WHERE tid = " . $post['topic_id']);
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "members SET posts=posts+1 WHERE member_id = " . $this->settings['linkbot_member_id']);
						}
					}

Oczywiście ten kod który teraz edytuję i dostosowuję to jest pierwszy warunek z 2 zapytaniami. Drugie zapytanie zmniejsza liczbę odpowiedzi, ale ten Twój pomysł jest dużo lepszy.

Edytowane przez Dr R.I.P
Opublikowano

Na razie odłóżmy ten wątek na bok. Jak zrobić by skrypt sprawdzał wszystkie posty poza pierwszym? Jeśli w nim też są wygasłe linki wywala temat do kosza, a raczej po prostu znika.

Kod:

						if($this->settings['linkbot_action'] == "1")
					{	
						//-----------------------------------------
						// POST NOT FIRST POST OF TOPIC
						//-----------------------------------------

						if($post['new_topic'] != "1")
						{
	mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "posts SET topic_id = 4 WHERE pid = " .$post['pid']);
	mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET posts=posts-1 WHERE tid = " . $post['topic_id']);

						}

						//----------------------------------------------------------
						// POST IS FIRST POST OF TOPIC, MOVE TOPIC AND ADD BOT REPLY
						//----------------------------------------------------------

						else
						{
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET forum_id='" . $this->settings['linkbot_trashcan_id'] . "' WHERE tid = " . $post['topic_id']);
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "polls SET forum_id='" . $this->settings['linkbot_trashcan_id'] . "' WHERE tid = " . $post['topic_id']);
							mysql_query("INSERT INTO " . $this->settings['sql_tbl_prefix'] . "posts (author_id,author_name,ip_address,post_date,post,topic_id) VALUES ('" . $this->settings['linkbot_member_id'] . "','" . $bot_name . "','127.0.0.1','" . time() . "','" . htmlentities($this->settings['linkbot_reply_msg'],ENT_QUOTES) . "','" . $post['topic_id'] . "')");
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "topics SET posts=posts+1,last_poster_id='" . $this->settings['linkbot_member_id'] . "',last_post='" . time() . "',last_poster_name='" . $bot_name . "' WHERE tid = " . $post['topic_id']);
							mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "members SET posts=posts+1 WHERE member_id = " . $this->settings['linkbot_member_id']);
						}
					}

Może wie ktoś jak to sprytnie zrobić?

Opublikowano (edytowane)

Nie, nie wszystko działa jak należy. :( Po prostu jeśli linki wygasłe są TEŻ w 1 poście również ten post przenosi usuwając temat. :P Chodzi tylko jak to zapisać, by ten 1 warunek odnosił się tylko do postów poza 1 w temacie.

Edytowane przez Dr R.I.P
Opublikowano (edytowane)

Dziwne, to co Ty mi dałeś może i działa, ale gdy miałem "else" sprawdzało wszystko - po usunięciu jest dobrze. Zresztą i tak był całkowicie zbędny. :(

Więc ostatnią kwestią jest ta aktualizacja statystyk, nie wiem kompletnie jak się do tego zabrać. :P

Niby jest coś takiego:

		if($this->settings['linkbot_action'] == "1")
	{
		$allforums = explode(",",$this->settings['linkbot_forumids'].",".$this->settings['linkbot_trashcan_id']);
		foreach($allforums as $fid)
		{
			$topics = mysql_fetch_assoc(mysql_query("SELECT COUNT(tid) as count FROM " . $this->settings['sql_tbl_prefix'] . "topics WHERE approved=1 AND forum_id=" . $fid));
			$queued_topics = mysql_fetch_assoc(mysql_query("SELECT COUNT(tid) as count FROM " . $this->settings['sql_tbl_prefix'] . "topics WHERE approved=0 AND forum_id=" . $fid));
			$posts = mysql_fetch_assoc(mysql_query("SELECT SUM(posts) as replies FROM " . $this->settings['sql_tbl_prefix'] . "topics WHERE approved=1 AND forum_id=" . $fid));
			$queued_posts = mysql_fetch_assoc(mysql_query("SELECT SUM(topic_queuedposts) as replies FROM " . $this->settings['sql_tbl_prefix'] . "topics WHERE forum_id=" . $fid));
			$last_post = mysql_fetch_assoc(mysql_query("SELECT tid, title, last_poster_id, last_poster_name, last_post FROM " . $this->settings['sql_tbl_prefix'] . "topics WHERE approved=1 AND forum_id=" . $fid . " ORDER BY last_post DESC LIMIT 1"));
			if(!$last_post) { $last_post['last_poster_id'] = 0; $last_post['last_poster_name'] = ''; $last_post['last_post'] = 0; $last_post['title'] = ''; $last_post['tid'] = 0; }
			if($queued_posts['replies']=="") $queued_posts['replies']=0; if($posts['replies']=="") $posts['replies']=0;
			mysql_query("UPDATE " . $this->settings['sql_tbl_prefix'] . "forums SET last_poster_id=" . $last_post['last_poster_id'] . ",last_poster_name='" . $last_post['last_poster_name'] . "',last_post=" . $last_post['last_post'] . ",last_title='" . $last_post['title'] . "',last_id=" . $last_post['tid'] . ",topics=" . $topics['count'] . ",posts=" . $posts['replies'] . ",queued_posts=" . $queued_posts['replies'] . ",queued_topics=" . $queued_topics['count'] . " WHERE id=" . $fid);
			unset($topics,$queued_topics,$posts,$queued_posts,$last_post);
		}
	}

Niestety kompletnie nie działa, nie pokazuje w statystykach, że przeniosło odpowiedź.

Edytowane przez Dr R.I.P
Opublikowano

Czyli mam dodać cały ten kod zaczynający się tym co podałeś? W obojętnie które miejsce?

Tj, do:

		//-----------------------------------------
	// Update forum cache
	//-----------------------------------------

Włącznie? Chyba trzeba mi tłumaczyć łopatologicznie =/

Opublikowano

Ok, czy aby uaktualnić statystyki forum, trzeba przekopiować kod z tego pliku który podałeś - rozpoczynający się tym:

protected function updateForumAndStats( $topic, $type='new')

i wkleić go gdzieś w task? Czy trzeba to zrobić jakoś inaczej, lub coś jeszcze dodać?

Opublikowano (edytowane)

Na razie znowu chciałbym opuścić temat aktualizacji statystyk - chociaż jeśli byłbyś tak miły to możesz odpisać :-)

Gdy sprawdzam jakąś inną stronę wywala taki błąd:

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when in safe_mode or an open_basedir is set in (...) on line 167.

Ta linia to:

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

Całość:

					foreach($hosts as $h)
				{
					$filehosts = explode("|",$h);
					if(strpos($link,$filehosts[0])) { $keyword = $filehosts[1]; break; }
				}
				if($keyword != "")
				{
					$total_links++;
					$ch = curl_init();
					curl_setopt($ch, CURLOPT_URL,$link);
					curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
					curl_setopt($ch, CURLOPT_FAILONERROR, 1);
					curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
					curl_setopt($ch, CURLOPT_TIMEOUT, 8);
					curl_setopt($ch, CURLOPT_COOKIEFILE, IPSLib::getAppDir( 'forums' ) . '/tasks/mscookie');
					$result = curl_exec($ch);
					$header = curl_getinfo( $ch );
					curl_close($ch);
					if($header['http_code'] == "200")
					{
						if(!strpos($result,$keyword))
						$total_dead++;
					}
					else
					$total_errors++;

				}
				unset($keyword,$h,$filehosts);
			}

Edytowane przez Dr R.I.P
Opublikowano (edytowane)

Post wyżej rozwiązany.

Jak zrobić by sprawdzało posty wg daty dodania postu, oraz by nie przekraczało jakiejś liczby sprawdzonych postów np w ciągu godziny?

Gdzieś tutaj powinno to się znaleźć, ale nie mam pomysłu jak to zrobić.

		//-----------------------------------------
	// GET POSTS
	//-----------------------------------------

	$get_post_query = mysql_query("SELECT t.forum_id,t.title,t.title_seo,p.post,p.pid,p.topic_id,p.new_topic FROM " . $this->settings['sql_tbl_prefix'] . "topics AS t INNER JOIN " . $this->settings['sql_tbl_prefix'] . "posts AS p WHERE t.forum_id IN (".$this->settings['linkbot_forumids'].") AND t.forum_id<>".$this->settings['linkbot_trashcan_id']." AND t.tid=p.topic_id".$scan_first_option);

	if ( mysql_num_rows( $get_post_query ) )
	{
		while( $post = mysql_fetch_assoc( $get_post_query ) )
		{	

			$i++;

			//-----------------------------------------
			// FOR DEBUGGING
			//-----------------------------------------

			if($i%$this->settings['linkbot_postinterval'] == 0)
			mysql_query("INSERT INTO " . $this->settings['sql_tbl_prefix'] . "task_logs (log_title,log_date,log_ip,log_desc) VALUES ('" . $this->task['task_title'] . "','" . time() . "','127.0.0.1','Scanned " . $i . " Posts')");

			$rs = ""; $mu = "";
			$total_links = 0;
			$total_dead = 0;

			//-----------------------------------------
			// GET POST CONTENT AND SCAN FOR LINKS
			//-----------------------------------------

			$subject = $post['post'];
			$pattern = '|http[^ "<\s[]{1,}|';
			preg_match_all($pattern, $subject, $matches);
			foreach($matches[0] as $link)
			{

Edytowane przez Dr R.I.P

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę.