You are here

function joomla_import in Joomla to Drupal 5

1 string reference to 'joomla_import'
joomla_menu in ./joomla.module
Menu callback. Prints a listing of active nodes on the site.

File

./joomla.module, line 155
The joomla module used for migrate Joomla to Drupal.

Code

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;
}