Successfully reported this slideshow.
Your SlideShare is downloading. ×

Desarrollo del plugin Chamilo-Wordpress

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 44 Ad

Desarrollo del plugin Chamilo-Wordpress

Download to read offline

Nivel muy básico de explicación de como se desarrolló la primera versión del plugin Chamilo para Wordpress, el cual se puede encontrar en https://github.com/chamilo/chamilo-wordpress/

Nivel muy básico de explicación de como se desarrolló la primera versión del plugin Chamilo para Wordpress, el cual se puede encontrar en https://github.com/chamilo/chamilo-wordpress/

Advertisement
Advertisement

More Related Content

Viewers also liked (20)

Similar to Desarrollo del plugin Chamilo-Wordpress (20)

Advertisement

More from Yannick Warnier (20)

Recently uploaded (20)

Advertisement

Desarrollo del plugin Chamilo-Wordpress

  1. 1. Desarrollo del plugin Chamilo-Wordpress Tutorial Yannick Warnier @ywarnier
  2. 2. Plan de trabajo ● Que es Chamilo? ● Armar el plan: ¿Qué queremos hacer? ● Investigación: Referencias ● Instalación de software ● Primeros intentos ● Resultado
  3. 3. Caso Chamilo ● Sistema de gestión del aprendizaje (LMS) ● Claroline→Dokeos→Chamilo / Moodle / Canvas ● Código abierto ● https://github.com/chamilo ● https://github.com/chamilo/chamilo-lms/
  4. 4. Herramientas Dispositivos móviles
  5. 5. Gestión de competencias, insignias, evaluaciones de desempeño, ...
  6. 6. ¿Qué queremos hacer? ● ¿Obtener datos genéricos de Chamilo?
  7. 7. ¿Qué queremos hacer? ● ¿Obtener datos genéricos de Chamilo? ● ¿Obtener datos personalizados de Chamilo?
  8. 8. ¿Qué queremos hacer? ● ¿Obtener datos genéricos de Chamilo? ● ¿Obtener datos personalizados de Chamilo? ● ¿Sincronizar las cuentas de usuario?
  9. 9. ¿Qué queremos hacer? ● ¿Obtener datos genéricos de Chamilo? ● ¿Obtener datos personalizados de Chamilo? ● ¿Sincronizar las cuentas de usuario? ● ¿Single Sign On?
  10. 10. ¡Una cosa a la vez! ¿Qué queremos hacer?
  11. 11. Obtener datos genéricos...
  12. 12. ¿Que necesitamos? ● Un plugin que se pueda instalar ● que recupere información desde Chamilo ● (un servicio web del lado de Chamilo) ● que ofrezca un widget para mostrar la info
  13. 13. Obtener datos genéricos ● ¡1ra buena noticia: Chamilo ya tiene servicios web! ● https://stable.chamilo.org/main/webservices/registration.soap.php?wsdl ● Ya, bueno, son SOAP, no son REST… ● Pero SOAP ahora está soportado en PHP por defecto
  14. 14. Obtener datos genéricos ● ¡1ra buena noticia: Chamilo ya tiene servicios web! ● ¡2da buena noticia: Hay documentación para hacer plugins en WP! (con ejemplos como hello-dolly) ● https://developer.wordpress.org/plugins/intro/what-is-a-plugin/ ● https://codex.wordpress.org/Main_Page ● https://codex.wordpress.org/Writing_a_Plugin ● https://codex.wordpress.org/Creating_Options_Pages
  15. 15. Obtener datos genéricos ● ¡1ra buena noticia: Chamilo ya tiene servicios web! ● ¡2da buena noticia: Hay documentación para hacer plugins en WP! (con ejemplos como hello-dolly) ● Mala noticia: la documentación es algo… desordenada (y mayormente en inglés)
  16. 16. Obtener datos genéricos ● Vamos avanzando: ● Wordpress pide por lo mínimo: ● Que el plugin esté en wp-contents/plugin/ ● un archivo readme.txt ● un archivo .php con una cabecera específica ● (buscará el único que tenga dicha cabecera)
  17. 17. readme.txt === Chamilo === Contributors: ywarnier Requires at least: 4.3 Stable tag: 1.0 Tested up to: 4.3 This plugin allows you to connect your Wordpress portal to a  Chamilo (Learning Management System) portal. == Description == Get generic and personal information from your Chamilo portal  directly into a Wordpress block.
  18. 18. chamilo.php <?php /* Plugin Name: Chamilo */
  19. 19. Efecto inmediato!
  20. 20. chamilo.php <?php /* Plugin Name: Chamilo Description: Connect to your Chamilo portal through  simple settings Version: 1.0 Author: Yannick Warnier Author URI: https://github.com/ywarnier License: GPLv3 or later License URI: https://www.gnu.org/licenses/gpl­3.0.html */
  21. 21. Efecto inmediato!
  22. 22. chamilo.php (2) // ... function chamilo_install() {     // Código de instalación } function chamilo_deactivation() {     // Código de desactivación } function chamilo_uninstall() {     // Código de desinstalación } //Calling hooks register_activation_hook( __FILE__, 'chamilo_install' ); register_deactivation_hook( __FILE__, 'chamilo_deactivation' ); register_uninstall_hook( __FILE__, 'chamilo_uninstall' );
  23. 23. Obtener datos genéricos ● Tenemos que implementar hooks de activación y de desactivación y desinstalación (limpieza) de nuestro plugin ● Ahí la calidad de la documentación cae fatal… ● options_pages y register_settings ● add_menu_page() (unknown function) ● etc...
  24. 24. chamilo.php (3) // ... function chamilo_install() {     // Código de instalación     register_setting( 'reading', 'chamilo_setting_url' );     register_setting( 'reading', 'chamilo_setting_key' ); } function chamilo_deactivation() {     // Código de desactivación } function chamilo_uninstall() {     // Código de desinstalación     unregister_setting( 'chamilo_setting_url' );     unregister_setting( 'chamilo_setting_key' ); };
  25. 25. // ... function chamilo_install() {     // Código de instalación     register_setting( 'reading', 'chamilo_setting_url' );     register_setting( 'reading', 'chamilo_setting_key' ); } function chamilo_deactivation() {     // Código de desactivación } function chamilo_uninstall() {     // Código de desinstalación     unregister_setting( 'chamilo_setting_url' );     unregister_setting( 'chamilo_setting_key' ); }; Sí... pero no...
  26. 26. chamilo.php (3) function chamilo_settings_api_init() {     add_settings_section(         'chamilo_connectivity_section',         __( 'Chamilo connectivity', 'chamilo' ),         'chamilo_connectivity_section_callback',         'reading'     );     add_settings_field(         'chamilo_setting_url',         __( 'Chamilo's portal url', 'chamilo' ),         'chamilo_setting_url_callback_function',         'reading',         'chamilo_connectivity_section'     );     register_setting('reading', 'chamilo_setting_url'); } add_action( 'admin_init', 'chamilo_settings_api_init' ); Mejor explicado
  27. 27. Obtener datos genéricos ● Ahora tenemos los settings necesarios para la conexión ● Conectémonos a Chamilo (servicios web)
  28. 28. chamilo.php (3) function chamilo_get_courses($vis = array()) {     $sign = chamilo_get_signature(CHAMILO_SIGN);     $user = get_option('chamilo_setting_admin');     if (empty($vis)) {         $vis = 'public,public­registered';     }     $courses = chamilo_soap_call(         'courses_list',         'WSCourseList',         $user,         $signature,         $visibilities     );     return $courses; }
  29. 29. chamilo.php (3) function chamilo_soap_call() {     // func_get_args()     $service_path = get_option('chamilo_setting_url');     // [ .. ]     // Init SOAP client     if (!empty($service_path)) {         $client = new SoapClient($service_path);         try {             $r = $client­>__soapCall($action, $params);         } catch (Exception $e) {             error_log('In chamilo_soap_call, exception when calling: '. $e­>getMessage());             return false;         }         return $r;     } else {         return FALSE;     } }
  30. 30. Obtener datos genéricos ● Ahora tenemos los datos de vuelta ● ¿Como los mostramos?
  31. 31. Aquí me gustaría!
  32. 32. Obtener datos genéricos ● Ahora tenemos los datos de vuelta ● ¿Como los mostramos? ● → En un widget! ● https://codex.wordpress.org/Function_Reference/register_widget
  33. 33. chamilo.php (3) <?php //archivo ChamiloCoursesListWidget.php class ChamiloCoursesListWidget extends WP_Widget {     function __construct() {         // Instantiate the parent object         parent::__construct( false, 'Chamilo Courses list widget' );     }     function widget( $args, $instance ) {         $courses = chamilo_get_courses();         chamilo_display_courses_list($courses);     }     function update( $new_instance, $old_instance ) {         // Save widget options     }     function form( $instance ) {         // Output admin widget options form     } }
  34. 34. chamilo.php (3) // Archivo chamilo.php include __DIR__ . '/includes/ChamiloCoursesListWidget.php'; … add_action( 'widgets_init', 'chamilo_register_widgets' ); // Archivo chamilo­functions.php function chamilo_register_widgets() {     register_widget( 'ChamiloCoursesListWidget' ); }
  35. 35. chamilo.php (3) // Archivo chamilo­functions.php function chamilo_display_courses_list($courses) {     $output = '';     if (is_array($courses) && !empty($courses)) {         $output .= '<ul>';         foreach ($courses as $course) {             $output .= '<li>'                       . '<a href="'.$course url→ .'" '                       . ' target="_blank">'                       . utf8_decode($course title→ )                       . '</a> ('.$course language→ .')'                     .'</li>';         }         $output .= '</ul>';     }     echo $output; }
  36. 36. Aquí está!
  37. 37. Conclusiones ● ¿Es fácil crear un plugin? ● Super fácil! ● ¿Es fácil crear un widget? ● Super fácil! ● ¿Es fácil hacer cosas un poco más avanzadas? ● Toma mucha lectura. Ejemplos incompletos.
  38. 38. Conclusiones (2) ● ¿Que viene después? ● Ampliar funcionalidades ● Crear theme ● Registrar el plugin
  39. 39. Yannick Warnier BeezNest info@beeznest.com @beeznestla

×