You are here

joomla.module in Joomla to Drupal 5

Same filename and directory in other branches
  1. 6 joomla.module
  2. 7.2 joomla.module
  3. 7 joomla.module

The joomla module used for migrate Joomla to Drupal.

File

joomla.module
View source
<?php

/**
 * @file
 * The joomla module used for migrate Joomla to Drupal.
 */

/**
 * Implementation of hook_help().
 */
function joomla_help($section) {
  switch ($section) {
    case 'admin/help#joomla':
      $output = "The joomla module used for migrate Joomla to Drupal.";
      return $output;
    case 'admin/modules#description':
      return 'The joomla module used for migrate Joomla to Drupal.';
  }
}

/**
 * Implementation of hook_perm
 */
function joomla_perm() {
  return array(
    'access joomla',
    'administer joomla',
  );
}

/**
 * Menu callback. Prints a listing of active nodes on the site.
 */
function joomla_menu($may_cache) {
  $items = array();
  $items[] = array(
    'path' => 'joomla/import/' . arg(2),
    'title' => t('Joomla'),
    'callback' => 'joomla_import',
    'callback arguments' => array(
      arg(2),
    ),
    'access' => user_access('administer joomla'),
    'type' => MENU_CALLBACK,
  );
  $items[] = array(
    'path' => 'admin/settings/joomla',
    'title' => 'Joomla to Drupal',
    'callback' => 'drupal_get_form',
    'callback arguments' => array(
      'joomla_admin_settings',
    ),
    'access' => user_access('administer joomla'),
    'description' => 'Migrate Joomla to Drupal.',
  );
  return $items;
}
function joomla_admin_settings() {

  // only administrators can access this function
  // Generate the form - settings applying to all patterns first
  $form['joomla_settings'] = array(
    '#type' => 'fieldset',
    '#weight' => -20,
    '#title' => t('Joomla to Drupal'),
    '#collapsible' => FALSE,
    '#collapsed' => FALSE,
    '#description' => "Click below link to Import Joomla Table to Drupal:" . "<ul>" . "<li/>" . l(t('Import Joomla Users'), "joomla/import/user") . "<li/>" . l(t('Import Joomla Sections & Categories'), "joomla/import/section") . "<li/>" . l(t('Import Joomla Contents and Static Contents'), "joomla/import/content") . "</ul>" . "<br/>" . "This module will not import any existing data into Drupal table! It's save to run the import procedure more than one." . "<br/><br/><b>IMPORTANT!</b>" . "<ol><li/>You must save below settings before click the Import links above!" . "<li/>You must enable Profiles module" . "</ol>",
  );
  $form['joomla_settings_database'] = array(
    '#type' => 'fieldset',
    '#weight' => -20,
    '#title' => t('Joomla settings'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['joomla_settings_database']['joomla_database'] = array(
    '#type' => 'textfield',
    '#title' => 'Database name of Joomla',
    '#default_value' => variable_get('joomla_database', 'joomla'),
    '#description' => 'Database name of Joomla',
  );
  $form['joomla_settings_database']['joomla_prefix'] = array(
    '#type' => 'textfield',
    '#title' => 'Table Prefix of Joomla',
    '#default_value' => variable_get('joomla_prefix', 'jos_'),
    '#description' => 'Table Prefix of Joomla',
  );
  $form['joomla_settings_database']['joomla_path'] = array(
    '#type' => 'textfield',
    '#title' => 'Path of your Joomla instalation',
    '#default_value' => variable_get('joomla_path', 'public_html/joomla'),
    '#description' => "The path name where you install Joomla. Example:<br/>" . "<ul><li/>Apache: <b>public_html/joomla</b>" . "<li/>Windows using WAMP: <b>c:/wamp/www/joomla</b>" . "<li/>Windows using IIS: <b>C:/Inetpub/wwwroot/joomla</b></ul>",
  );
  $form['joomla_settings_advanced'] = array(
    '#type' => 'fieldset',
    '#weight' => -20,
    '#title' => t('Drupal settings'),
    '#collapsible' => TRUE,
    '#collapsed' => FALSE,
  );
  $form['joomla_settings_advanced']['joomla_input_format'] = array(
    '#type' => 'radios',
    '#title' => 'Input Format',
    '#default_value' => variable_get('joomla_input_format', 1),
    '#options' => array(
      "Filtered HTML",
      "Full HTML",
    ),
    '#description' => 'Select Input Format to apply to all imported contents.',
  );
  $form['joomla_settings_advanced']['joomla_update_duplicate'] = array(
    '#type' => 'radios',
    '#title' => 'If found Duplicate items',
    '#default_value' => variable_get('joomla_update_duplicate', 0),
    '#options' => array(
      "Do not import",
      "Replace duplicate items",
    ),
    '#description' => "Caution! If you select 'Replace duplicate items' then this module will replace existing items with new one. This options usefull if you do update in Joomla and want to do update in Drupal too.",
  );
  $form['joomla_settings_advanced']['joomla_img_folder'] = array(
    '#type' => 'textfield',
    '#title' => 'Image/Picture folder',
    '#default_value' => variable_get('joomla_img_folder', 'images'),
    '#description' => "A folder to save any images from Joomla contents. This folder related to Drupal 'files' folder, i.e: if you enter '<b>images</b>' then all imported images will be save to Drupal '<b>files/images</b>'.",
  );
  return system_settings_form($form);
}
function joomla_import($import_type) {
  $joomla_database = variable_get('joomla_database', 'joomla');
  $joomla_prefix = variable_get('joomla_prefix', 'jos_');
  $joomla_update_duplicate = variable_get('joomla_update_duplicate', '0');
  $joomla_img_folder = variable_get('joomla_img_folder', '0');
  $joomla_path = variable_get('joomla_path', '0');
  switch ($import_type) {
    case 'user':
      $output = "";
      $output .= "<h2>Import Joomla Users</h2>";
      if (!db_table_exists('{profile_fields}')) {
        $output .= "Module Profile not yet installed.";
        return $output;
      }

      //Add Realname to Profile
      $results_realname = db_query("SELECT name FROM {profile_fields} WHERE name='profile_realname'");
      if (!db_num_rows($results_realname)) {
        db_query(" INSERT INTO {profile_fields} (title,name,type,weight) VALUES " . " ('Real Name','profile_realname','textfield','0')");
      }
      $results_fid = db_query("SELECT fid from {profile_fields} WHERE name='profile_realname'");
      $data_fid = db_fetch_object($results_fid);
      $fid = $data_fid->fid;

      //Check Users
      $sql = " SELECT * FROM {$joomla_database}." . $joomla_prefix . "users";
      $results = db_query($sql);
      $rows = array();
      $page = isset($_GET['page']) ? $_GET['page'] : '';
      $i = 1 + $page * $items_per_page;
      $header = array(
        t('#'),
        t('Joomla ID'),
        t('Username'),
        t('Real Name'),
        t('Email'),
        t('Status'),
        t('Register Date'),
        t('Import Status'),
      );
      while ($data = db_fetch_object($results)) {
        $id = $data->id;
        $username = $data->username;
        $realname = addslashes($data->name);
        $email = $data->email;
        $status = !$data->block;
        $registerdate = strtotime($data->registerDate);
        $lastvisitdate = strtotime($data->lastvisitDate);
        $results_check_user = db_query("SELECT uid,name FROM {users} WHERE name='{$username}'");
        $data_user = db_fetch_object($results_check_user);
        $uid = $data_user->uid;
        $rec_status = 'Exist';
        if (!db_num_rows($results_check_user)) {
          $rec_status = 'New';
          $sql_uid = " SELECT uid FROM {users} ORDER BY uid DESC LIMIT 1";
          $results_last_uid = db_query($sql_uid);
          $data_last_uid = db_fetch_object($results_last_uid);
          $new_uid = $data_last_uid->uid + 1;
          $sql_insert = " INSERT INTO {users} (uid,name,mail,status,created,access,language,timezone) " . " values ('{$new_uid}','{$username}','{$email}','{$status}','{$registerdate}','{$lastvisitdate}','en',0)";
          db_query($sql_insert);
          $uid = $data_last_uid;
        }

        //Check and Update Realname
        $results_profile_values = db_query("SELECT * FROM {profile_values} WHERE fid={$fid} AND uid={$uid}");
        if (!db_num_rows($results_profile_values)) {
          db_query("INSERT INTO {profile_values} (fid,uid,value) VALUES ({$fid},{$uid},'{$realname}')");
        }
        $results_last_uid = db_query("SELECT uid from {users} ORDER BY uid DESC LIMIT 1");
        $data_last_uid = db_fetch_object($results_last_uid);
        $uid = $data_last_uid->uid;
        db_query("UPDATE {sequences} SET id={$uid} WHERE name='users_uid' ");
        $rows[] = array(
          $i++,
          $id,
          l($username, "user/{$uid}"),
          $realname,
          $email,
          $status,
          $registerdate,
          $rec_status,
        );
      }
      break;
    case 'section':
      $output = "";
      $output .= "<h2>Import Joomla Sections and Categories</h2>";
      $sql = " SELECT * FROM {$joomla_database}." . $joomla_prefix . "sections";
      $results = db_query($sql);
      $rows = array();
      $page = isset($_GET['page']) ? $_GET['page'] : '';
      $i = 1 + $page * $items_per_page;
      $header = array(
        '#',
        'ID',
        'Section Title',
        'Section Name',
        'Import Status',
      );

      //Joomla Sections to Drupal
      while ($data = db_fetch_object($results)) {
        $sec_id = $data->id;
        $sec_title = addslashes($data->title);
        $sec_name = addslashes($data->name);
        $sql_check = "SELECT name FROM {vocabulary} WHERE name='{$sec_title}'";
        $results_check = db_query($sql_check);
        $rec_status = 'Exist';

        //Insert Sections
        if (!db_num_rows($results_check)) {
          $rec_status = 'New';
          $sql_insert = " INSERT INTO {vocabulary} (name,description,hierarchy,weight) " . " values ('{$sec_title}','{$sec_name}',1,0)";
          db_query($sql_insert);
        }

        //Take Vocabulary ID
        $sql_vid = "SELECT vid FROM {vocabulary} WHERE name='{$sec_title}'";
        $results_vid = db_query($sql_vid);
        $data_vid = db_fetch_object($results_vid);
        $vid = $data_vid->vid;

        //Retrieve and Insert categories
        $sql_cat = " SELECT id,title,name,section FROM {$joomla_database}." . $joomla_prefix . "categories " . " WHERE section='{$sec_id}'";
        $results_cat = db_query($sql_cat);
        while ($data_cat = db_fetch_object($results_cat)) {
          $cat_id = $data_cat->id;
          $cat_title = addslashes($data_cat->title);
          $cat_name = addslashes($data_cat->name);

          //Check if cat exist
          $sql_check_cat = "SELECT name FROM {term_data} WHERE name='{$cat_title}'";
          $results_check_cat = db_query($sql_check_cat);
          if (!db_num_rows($results_check_cat)) {
            $sql_insert_cat = " INSERT INTO {term_data} (vid,name,description,weight) " . " values ({$vid},'{$cat_title}','{$cat_name}',0)";
            db_query($sql_insert_cat);

            //Take Term ID
            $sql_tid = "SELECT tid FROM {term_data} WHERE vid={$vid} AND name='{$cat_title}'";
            $results_tid = db_query($sql_tid);
            $data_tid = db_fetch_object($results_tid);
            $tid = $data_tid->tid;
            $sql_insert_hierarchy = " INSERT INTO {term_hierarchy} (tid,parent) " . " values ('{$tid}','0')";
            db_query($sql_insert_hierarchy);
          }
        }

        //Update id
        $results_last_id = db_query("SELECT vid AS last_id from {vocabulary} ORDER BY vid DESC LIMIT 1");
        $data_last_id = db_fetch_object($results_last_id);
        $last_id = $data_last_id->last_id;
        db_query("UPDATE {sequences} SET id={$last_id} WHERE name='vocabulary_vid' ");
        $results_last_id = db_query("SELECT tid AS last_id from {term_data} ORDER BY tid DESC LIMIT 1");
        $data_last_id = db_fetch_object($results_last_id);
        $last_id = $data_last_id->last_id;
        db_query("UPDATE {sequences} SET id={$last_id} WHERE name='term_data_tid' ");
        $rows[] = array(
          $i++,
          $sec_id,
          $sec_title,
          $sec_name,
          $rec_status,
        );
      }
      break;
    case 'content':
      $output = "";
      $output .= "<h2>Import Joomla Contents</h2>";
      $joomla_input_format = variable_get('joomla_input_format', '1');
      if ($joomla_input_format == 0) {
        $input_format = 1;
      }
      else {
        $input_format = 3;
      }
      $table_content = "{$joomla_database}.{$joomla_prefix}" . "content";
      $table_user = "{$joomla_database}.{$joomla_prefix}" . "users";
      $sql_content = " SELECT * FROM {$table_content} c INNER JOIN {$table_user} u ON c.created_by=u.id";
      $results_content = db_query($sql_content);
      $rows = array();
      $page = isset($_GET['page']) ? $_GET['page'] : '';
      $i = 1 + $page * $items_per_page;
      $header = array(
        '#',
        'ID Joomla/Drupal',
        'Title',
        'Import Status',
      );
      $images = array();
      while ($data_content = db_fetch_object($results_content)) {

        //Check if content title already exists
        $content_nid = $data_content->id;
        $content_title = addslashes($data_content->title);
        $content_name = $data_content->username;

        //Get uid
        $results_get_uid = db_query("SELECT uid from {users} WHERE name= '{$content_name}'");
        $data_get_uid = db_fetch_object($results_get_uid);
        $content_uid = $data_get_uid->uid;
        $content_status = $data_content->state;
        $content_created = strtotime($data_content->created);
        $content_changed = strtotime($data_content->modified);
        $content_comment = 0;
        if ($data_content->sectionid == 0) {
          $content_type = 'page';
        }
        else {
          $content_type = 'story';
        }
        $content_moderate = 0;
        $content_sticky = 0;
        $content_teaser = addslashes($data_content->introtext);
        $content_body = $content_teaser . "<p></p>" . addslashes($data_content->fulltext);
        $content_body = str_replace("{mospagebreak}", "", $content_body);

        //images
        $images = array();
        if ($data_content->images) {

          //$output .= $content_title;
          $images = explode("\n", $data_content->images);

          //$output .= $images[0]."<br />";
          $image_string = '{mosimage}';

          //Teaser
          $n = 0;
          $images_items = array();
          while (!(strpos($content_teaser, $image_string) === false)) {

            //$output .= "Ada <br />";
            $images_items = explode("|", $images[$n]);
            if (!file_exists("files/" . $joomla_img_folder)) {
              mkdir("files/" . $joomla_img_folder);
            }
            if (dirname($images_items[0])) {
              if (!file_exists("files/" . $joomla_img_folder . "/" . dirname($images_items[0]))) {
                mkdir("files/" . $joomla_img_folder . '/' . dirname($images_items[0]));
              }
            }
            copy($joomla_path . "/images/stories/" . $images_items[0], "files/{$joomla_img_folder}/" . $images_items[0]);
            $images_replace = '<img src="files/' . $joomla_img_folder . '/' . $images_items[0] . ' align="' . $images_items[1] . '" title="' . $images_items[2] . '" alt="' . $images_items[2] . '">';
            $content_teaser = substr_replace($content_teaser, $images_replace, strpos($content_teaser, $image_string), 10);
            $n++;
          }

          //Body
          $n = 0;
          $images_items = array();
          while (!(strpos($content_body, $image_string) === false)) {
            $images_items = explode("|", $images[$n]);
            if (!file_exists("files/" . $joomla_img_folder)) {
              mkdir("files/" . $joomla_img_folder);
            }
            if (dirname($images_items[0])) {
              if (!file_exists("files/" . $joomla_img_folder . "/" . dirname($images_items[0]))) {
                mkdir("files/" . $joomla_img_folder . '/' . dirname($images_items[0]));
              }
            }
            copy($joomla_path . "/images/stories/" . $images_items[0], "files/{$joomla_img_folder}/" . $images_items[0]);
            $images_replace = '<img src="/files/' . $joomla_img_folder . '/' . $images_items[0] . '" ' . ' align="' . $images_items[1] . '" title="' . $images_items[2] . '" alt="' . $images_items[2] . '">';

            //$content_body   = str_replace($image_string, $images_replace, $content_body,1);
            $content_body = substr_replace($content_body, $images_replace, strpos($content_body, $image_string), 10);
            $n++;
          }
        }

        //Check Frontpage
        $sql_check_fp = " SELECT content_id FROM {$joomla_database}." . $joomla_prefix . "content_frontpage " . " WHERE content_id='{$content_nid}'";
        $results_check_fp = db_query($sql_check_fp);
        if (db_num_rows($results_check_fp)) {
          $content_promote = 1;
        }
        else {
          $content_promote = 0;
        }

        //Check content/node exists
        $rec_status = 'Ignore';
        $sql_check_content = "SELECT title FROM {node} WHERE title='{$content_title}'";
        $results_check_content = db_query($sql_check_content);
        if (!db_num_rows($results_check_content)) {
          $rec_status = 'Insert';

          //get last nid
          $results_last_id = db_query("SELECT nid AS id from {node} ORDER BY nid DESC LIMIT 1");
          $data_last_id = db_fetch_object($results_last_id);
          $last_nid = $data_last_id->id + 1;
          $sql_insert_content = " INSERT INTO {node} " . "(nid,vid,type,title,uid,status, " . " created,changed,comment,promote,moderate,sticky) " . " values ({$last_nid},{$last_nid},'{$content_type}','{$content_title}','{$content_uid}'," . " '{$content_status}'," . " '{$content_created}','{$content_changed}','{$content_comment}','{$content_promote}', " . " '{$content_moderate}','{$content_sticky}')";
          db_query($sql_insert_content);

          //Intro and Body
          $sql_insert_rev = " INSERT INTO {node_revisions} " . "(nid,vid,uid,title,body,teaser,timestamp,format) " . " values ({$last_nid},{$last_nid},'{$content_uid}','{$content_title}','{$content_body}', " . " '{$content_teaser}'," . " '{$content_changed}','{$input_format}')";
          db_query($sql_insert_rev);
          $rows[] = array(
            $i++,
            $content_nid . "/" . $last_nid,
            l(t("{$content_title}"), "node/{$last_nid}"),
            $rec_status,
          );
        }
        else {
          if ($joomla_update_duplicate) {
            $rec_status = 'Update';
            $results_last_id = db_query("SELECT nid AS id from {node} WHERE title='{$content_title}' ");
            $data_last_id = db_fetch_object($results_last_id);
            $last_nid = $data_last_id->id;
            $sql_update_content = " UPDATE {node} " . " SET  type='{$content_type}', uid='{$content_uid}', status='{$content_status}', " . " created='{$content_created}', changed='{$content_changed}' " . " WHERE nid='{$last_nid}'";
            db_query($sql_update_content);

            //Intro and Body
            $sql_update_rev = " UPDATE {node_revisions} " . " SET uid='{$content_uid}', " . " body='{$content_body}', teaser='{$content_teaser}',timestamp='{$content_changed}', " . " format='{$input_format}' " . " WHERE nid='{$last_nid}'";
            db_query($sql_update_rev);
            $rows[] = array(
              $i++,
              $content_nid . "/" . $last_nid,
              l(t("{$content_title}"), "node/{$last_nid}"),
              $rec_status,
            );
          }
        }
      }

      //Update id
      $results_last_id = db_query("SELECT nid AS id from {node} ORDER BY nid DESC LIMIT 1");
      $data_last_id = db_fetch_object($results_last_id);
      $last_nid = $data_last_id->id;
      db_query("UPDATE {sequences} SET id={$last_nid} WHERE name='node_nid' ");
      db_query("UPDATE {sequences} SET id={$last_nid} WHERE name='node_revisions_vid' ");
      break;
  }
  $output .= theme('table', $header, $rows);
  $output .= theme('pager', NULL, $items_per_page, 0);
  return $output;
}

Functions

Namesort descending Description
joomla_admin_settings
joomla_help Implementation of hook_help().
joomla_import
joomla_menu Menu callback. Prints a listing of active nodes on the site.
joomla_perm Implementation of hook_perm