User:Jonas AGX/Project page
From MediaWiki.org
Submission for the October 2011 Coding Challenge/Wikipedia Slideshow.
"Evolution is a change from an indefinite, incoherent, homogeneity to a definite, coherent, heterogeneity, through continuous differentiations and integrations." ~ Herbert Spencer, First Principles (1862)
WikiJoy is a [new] way to transmit Wikipedia articles, it make possible say: "This article give me joy, and worth". In other words, its a user friendly form to avaliate content from a article.
So, when you read a article and enjoyed it, you can vote in the page content, approving it.
The project itself is a double side app:
* the user side just send some informations (page id, city and language) to the server; * server receive data from users and save it in a database, and make this data avaliable by a simple API;
A possible problem would be create a empire of "pop" articles, but using more data from Wikimedia dumps is possible get ranks by Category, and spread [good] articles from any subjects. And using API its easy create new applications describing trends and good content.
Contents |
User side [edit]
/*
wikiJoy
Copyright (C) 2011 Jonas Xavier, Sóstenes Barros <jonas.agx and sostenesbarros @gmail.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to
Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301, USA.
or see this page : https://www.gnu.org/licenses/gpl-2.0.txt
*/
addOnloadHook( function () { if (wgAction === 'view') { addPortletLink( 'p-views', 'javascript:doEnjoy()', 'enjoy', 'ca-enjoy', 'Enjoy this article' ); getEnjoy(); } }); doEnjoy = function () { $.ajax( { url: 'http://ifpedia.recife.ifpe.edu.br/wikijoy/joy_api.php', dataType: 'json', type: 'POST', data: { pageId: wgArticleId, pageName: wgPageName, language: wgContentLanguage }, success: function ( data ) { console.log(data.success); } }); }; getEnjoy = function () { $.ajax( { url: 'http://ifpedia.recife.ifpe.edu.br/wikijoy/joy_api.php', dataType: 'json', data: { pageId: wgArticleId }, success: function( data ) { $('#ca-enjoy a').attr('title', 'Enjoy this article. It was enjoyed ' + data.page.page_joycount + ' times.'); } }); };
Server side [edit]
PHP [edit]
/*
wikiJoy
Copyright (C) 2011 Jonas Xavier, Sóstenes Barros <jonas.agx and sostenesbarros @gmail.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to
Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301, USA.
or see this page : https://www.gnu.org/licenses/gpl-2.0.txt
*/
/******************* joy_util.php *******************/ <?php function getJoyConnection() { $conn = mysql_connect( 'localhost', 'root', 'root' ) or die ( 'MySQL Error.' ); mysql_select_db( 'joy', $conn ) or die ( 'MySQL Error.' ); return $conn; } /* Retorna um Array com as informacoes de uma entrada na tabela joy */ function getJoyByPageId( $pageId ) { $conn = getJoyConnection(); $query = sprintf( "SELECT * FROM joy WHERE page_id = '%s'", mysql_real_escape_string($pageId) ); $result = mysql_query( $query, $conn ) or die ('MySQL Error.'); if (mysql_num_rows( $result )) { $row = mysql_fetch_assoc($result); } mysql_close($conn); return $row; } /* Retorna um booleano informando se a pagina foi "enjoyed" */ function pageEnjoyed($pageId) { $conn = getJoyConnection(); $query = sprintf( "SELECT page_id FROM joy WHERE page_id = '%s'", mysql_real_escape_string($pageId) ); $result = mysql_query( $query, $conn ) or die ('MySQL Error.'); $numRows = mysql_num_rows( $result ); mysql_close($conn); return ( $numRows > 0 ) ? true : false; } /* Insere um Joy referente a uma pagina. */ function insertJoyPage($pageId, $pageTitle, $language) { $conn = getJoyConnection(); $date = new DateTime(); $datefmt = $date->format('Y-m-d H:i:s'); $success = false; $query = sprintf( "INSERT INTO joy (page_id, page_title, page_joycount, joy_timestamp, language) values ('%s', '%s', '%s', '%s', '%s')", mysql_real_escape_string($pageId), mysql_real_escape_string($pageTitle), mysql_real_escape_string(1), mysql_real_escape_string($datefmt), mysql_real_escape_string($language) ); $success = mysql_query( $query, $conn ); mysql_close($conn); return $succes; } /* Atualiza o numero de Joys da pagina com id = $pageId */ function updateJoyPage($pageId, $joyCount) { $conn = getJoyConnection(); $date = new DateTime(); $datefmt = $date->format('Y-m-d H:i:s'); $success = false; $query = sprintf("UPDATE joy SET page_joycount = '%s' WHERE page_id = '%s'", mysql_real_escape_string($joyCount), mysql_real_escape_string($pageId)); $success = mysql_query( $query, $conn ); mysql_close($conn); return $success; } function addJoy($pageId, $pageTitle, $language) { $success = false; if ( pageEnjoyed( $pageId ) ) { //echo "UPADATE: "; $page = getJoyByPageId( $pageId ); $success = updateJoyPage( $pageId, $page['page_joycount'] + 1 ); } else { //echo "INSERT: "; $success = insertJoyPage( $pageId, $pageTitle, $language ); } return $success; } function getRanking(){ $conn = getJoyConnection(); $query = "SELECT j.page_joycount, j.page_title FROM joy j order by j.page_joycount desc limit 10"; $result = mysql_query($query, $conn); while($r[]=mysql_fetch_array($sql)); return json_encode( $r ); } ?>
/******************* joy_api.php *******************/ <?php require_once './joy_utils.php'; $request_method = strtolower( $_SERVER['REQUEST_METHOD'] ); switch ($request_method) { case 'post': if ( isset( $_POST['pageId'] ) && isset( $_POST['pageName'] ) && isset( $_POST['language'] )) { $result = addJoy($_POST['pageId'], $_POST['pageName'], $_POST['language']); } else { echo "Required Fields:<br /> pageId: Article Id.<br /> pageName: Article Name.<br /> language: Article Language (ex.: pt-BR).<br />"; } $response = array('succes' => $result); echo json_encode($response); return; break; case 'get': if ( isset( $_GET['pageId'] ) ) { $result = getJoyByPageId($_GET['pageId']); if (empty( $result )) { $result['page_joycount'] = 0; echo json_encode(array( 'page' => $result )); } else { echo json_encode(array('page' => $result)); } } return; break; default: echo 'Request Method not suported: ' . $request_method; } ?>
SQL [edit]
/*
wikiJoy
Copyright (C) 2011 Jonas Xavier, Sóstenes Barros <jonas.agx and sostenesbarros @gmail.com>
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to
Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor
Boston, MA 02110-1301, USA.
or see this page : https://www.gnu.org/licenses/gpl-2.0.txt
*/
CREATE TABLE joy( page_id INT PRIMARY KEY, page_title VARCHAR(255), page_joycount INT, joy_timestamp TIMESTAMP, LANGUAGE VARCHAR(10) ); CREATE TABLE category( page_id INT, category_id INT, category VARCHAR(255) ); CREATE TABLE USER( user_id INT UNSIGNED NOT NULL PRIMARY KEY, page_id INT UNSIGNED NOT NULL, joy_timestamp TIMESTAMP );