/** * Easy method to grab localisable tags from the XML array * @param $header - variable holding all relevant tag information * @param $tagname - tag name to fetch * @param $index - Index number to pull. Not required. * @return $output - Localised contents of the tag in question */ function localise_tags($header, $tagname, $index = false) { global $user; $output = ''; if (isset($header[$tagname]) && is_array($header[$tagname])) { foreach ($header[$tagname] as $i => $void) { // Ugly. if ($index !== false && $index != $i) { continue; } if (!isset($header[$tagname][$i]['attrs']['LANG'])) { // avoid notice...although, if we get here, MODX is invalid. continue; } if (match_language($user->data['user_lang'], $header[$tagname][$i]['attrs']['LANG'])) { $output = isset($header[$tagname][$i]['data']) ? htmlspecialchars(trim($header[$tagname][$i]['data'])) : ''; } } // If there was no language match, put something out there // This is probably fairly common for non-English users of the MODs Manager if (!$output) { $output = isset($header[$tagname][0]['data']) ? htmlspecialchars(trim($header[$tagname][0]['data'])) : ''; } } if (!$output) { // Should never happen. If it does, either the MOD is not valid MODX // or the tag being localised is optional $output = isset($user->lang['UNKNOWN_MOD_' . $tagname]) ? $user->lang['UNKNOWN_MOD_' . $tagname] : 'UNKNOWN_MOD_' . $tagname; } return $output; }
/** * return array of the basic MOD details */ function get_details() { global $user; if (empty($this->data)) { $this->set_file($this->file); } $header = array('MOD-VERSION' => array(0 => array('children' => array())), 'INSTALLATION' => array(0 => array('children' => array('TARGET-VERSION' => array(0 => array('data' => ''))))), 'AUTHOR-GROUP' => array(0 => array('children' => array('AUTHOR' => array()))), 'HISTORY' => array(0 => array('children' => array('ENTRY' => array())))); $version = $phpbb_version = ''; $header = $this->data[0]['children']['HEADER'][0]['children']; // get MOD version information // This is also our first opportunity to differentiate MODX 1.0.x from // MODX 1.2.0. if (isset($header['MOD-VERSION'][0]['children'])) { $this->modx_version = 1.0; $version_info = $header['MOD-VERSION'][0]['children']; $version = isset($version_info['MAJOR'][0]['data']) ? trim($version_info['MAJOR'][0]['data']) : 0; $version .= '.' . (isset($version_info['MINOR'][0]['data']) ? trim($version_info['MINOR'][0]['data']) : 0); $version .= '.' . (isset($version_info['REVISION'][0]['data']) ? trim($version_info['REVISION'][0]['data']) : 0); $version .= isset($version_info['RELEASE'][0]['data']) ? trim($version_info['RELEASE'][0]['data']) : ''; } else { $this->modx_version = 1.2; $version = trim($header['MOD-VERSION'][0]['data']); } // get phpBB version recommendation switch ($this->modx_version) { case 1.0: if (isset($header['INSTALLATION'][0]['children']['TARGET-VERSION'][0]['children'])) { $version_info = $header['INSTALLATION'][0]['children']['TARGET-VERSION'][0]['children']; $phpbb_version = isset($version_info['MAJOR'][0]['data']) ? trim($version_info['MAJOR'][0]['data']) : 0; $phpbb_version .= '.' . (isset($version_info['MINOR'][0]['data']) ? trim($version_info['MINOR'][0]['data']) : 0); $phpbb_version .= '.' . (isset($version_info['REVISION'][0]['data']) ? trim($version_info['REVISION'][0]['data']) : 0); $phpbb_version .= isset($version_info['RELEASE'][0]['data']) ? trim($version_info['RELEASE'][0]['data']) : ''; } break; case 1.2: default: $phpbb_version = isset($header['INSTALLATION'][0]['children']['TARGET-VERSION'][0]['data']) ? $header['INSTALLATION'][0]['children']['TARGET-VERSION'][0]['data'] : 0; break; } $author_info = $header['AUTHOR-GROUP'][0]['children']['AUTHOR']; $author_details = array(); for ($i = 0; $i < sizeof($author_info); $i++) { $author_details[] = array('AUTHOR_NAME' => isset($author_info[$i]['children']['USERNAME'][0]['data']) ? trim($author_info[$i]['children']['USERNAME'][0]['data']) : '', 'AUTHOR_EMAIL' => isset($author_info[$i]['children']['EMAIL'][0]['data']) ? trim($author_info[$i]['children']['EMAIL'][0]['data']) : '', 'AUTHOR_REALNAME' => isset($author_info[$i]['children']['REALNAME'][0]['data']) ? trim($author_info[$i]['children']['REALNAME'][0]['data']) : '', 'AUTHOR_WEBSITE' => isset($author_info[$i]['children']['HOMEPAGE'][0]['data']) ? trim($author_info[$i]['children']['HOMEPAGE'][0]['data']) : ''); } // history $history_info = !empty($header['HISTORY'][0]['children']['ENTRY']) ? $header['HISTORY'][0]['children']['ENTRY'] : array(); $history_size = sizeof($history_info); $mod_history = array(); for ($i = 0; $i < $history_size; $i++) { $changes = array(); $entry = $history_info[$i]['children']; $changelog = isset($entry['CHANGELOG']) ? $entry['CHANGELOG'] : array(); $changelog_size = sizeof($changelog); $changelog_id = 0; for ($j = 0; $j < $changelog_size; $j++) { // Ignore changelogs in foreign languages except in the case that there is no // match for the current user's language // TODO: Look at modifying localise_tags() for use here. if (match_language($user->data['user_lang'], $changelog[$j]['attrs']['LANG'])) { $changelog_id = $j; } } $change_count = isset($changelog[$changelog_id]['children']['CHANGE']) ? sizeof($changelog[$changelog_id]['children']['CHANGE']) : 0; for ($j = 0; $j < $change_count; $j++) { $changes[] = $changelog[$changelog_id]['children']['CHANGE'][$j]['data']; } switch ($this->modx_version) { case 1.0: $changelog_version_ary = isset($entry['REV-VERSION'][0]['children']) ? $entry['REV-VERSION'][0]['children'] : array(); $changelog_version = isset($changelog_version_ary['MAJOR'][0]['data']) ? trim($changelog_version_ary['MAJOR'][0]['data']) : 0; $changelog_version .= '.' . (isset($changelog_version_ary['MINOR'][0]['data']) ? trim($changelog_version_ary['MINOR'][0]['data']) : 0); $changelog_version .= '.' . (isset($changelog_version_ary['REVISION'][0]['data']) ? trim($changelog_version_ary['REVISION'][0]['data']) : 0); $changelog_version .= isset($changelog_version_ary['RELEASE'][0]['data']) ? trim($changelog_version_ary['RELEASE'][0]['data']) : ''; break; case 1.2: default: $changelog_version = isset($entry['REV-VERSION'][0]['data']) ? $entry['REV-VERSION'][0]['data'] : '0.0.0'; break; } $mod_history[] = array('DATE' => $entry['DATE'][0]['data'], 'VERSION' => $changelog_version, 'CHANGES' => $changes); } $children = array(); // Parse links if ($this->modx_version == 1.2) { $link_group = isset($header['LINK-GROUP'][0]['children']) ? $header['LINK-GROUP'][0]['children'] : array(); if (isset($link_group['LINK'])) { for ($i = 0, $size = sizeof($link_group['LINK']); $i <= $size; $i++) { // do some stuff with attrs // commented out due to a possible PHP bug. When using this, // sizeof($link_group) changed each time ... // $attrs = &$link_group[$i]['attrs']; if (!isset($link_group['LINK'][$i])) { continue; } if ($link_group['LINK'][$i]['attrs']['TYPE'] == 'text') { continue; } $children[$link_group['LINK'][$i]['attrs']['TYPE']][] = array('href' => $link_group['LINK'][$i]['attrs']['HREF'], 'realname' => isset($link_group['LINK'][$i]['attrs']['REALNAME']) ? $link_group['LINK'][$i]['attrs']['REALNAME'] : core_basename($link_group['LINK'][$i]['attrs']['HREF']), 'title' => localise_tags($link_group, 'LINK', $i)); } } } // try not to hardcode schema? $details = array('MOD_PATH' => $this->file, 'MOD_NAME' => localise_tags($header, 'TITLE'), 'MOD_DESCRIPTION' => nl2br(localise_tags($header, 'DESCRIPTION')), 'MOD_VERSION' => htmlspecialchars(trim($version)), 'AUTHOR_DETAILS' => $author_details, 'AUTHOR_NOTES' => nl2br(localise_tags($header, 'AUTHOR-NOTES')), 'MOD_HISTORY' => $mod_history, 'PHPBB_VERSION' => $phpbb_version, 'CHILDREN' => $children); return $details; }
function do_import_resume($info, $uid) { global $db, $_CFG, $timestamp; if ($info && $uid) { require_once QISHI_ROOT_PATH . '/include/fun_import.php'; if (empty($info['basicinfo'])) { return false; } $info['basicinfo']['fullname'] = unicode_decode($info['basicinfo']['fullname']); $setsqlarr = iconv_to_gbk($info['basicinfo']); $setsqlarr['uid'] = intval($uid); $setsqlarr['title'] = "未命名简历"; $setsqlarr['display_name'] = 1; $setsqlarr['sex'] = $setsqlarr['sex_cn'] == '男' ? 1 : 2; $experience = match_experience($setsqlarr['experience_cn']); $setsqlarr['experience_cn'] = $experience[1]; $setsqlarr['experience'] = $experience[0]; $setsqlarr['email_notify'] = 1; $setsqlarr['marriage'] = $setsqlarr['marriage_cn'] == '已婚' ? 2 : 1; $intentionjobsarr = explode('、', $setsqlarr['intention_jobs']); $match_jobs_id_arr = array(); $match_jobs_cn_arr = array(); foreach ($intentionjobsarr as $key => $value) { $match_jobs_arr = match_jobs_category($value); if ($match_jobs_arr) { $match_jobs_id_arr[] = $match_jobs_arr['topclass'] . '.' . $match_jobs_arr['category'] . '.' . $match_jobs_arr['subclass']; $match_jobs_cn_arr[] = $match_jobs_arr['category_cn']; } } $setsqlarr['intention_jobs'] = !empty($match_jobs_cn_arr) ? implode(',', $match_jobs_cn_arr) : ''; $intention_jobs_id = !empty($match_jobs_id_arr) ? implode(',', $match_jobs_id_arr) : ''; $tradearr = explode('、', $setsqlarr['trade_cn']); $match_trade_id_arr = array(); foreach ($tradearr as $key => $value) { $match_trade_arr = match_trade($value); if ($match_trade_arr) { $match_trade_id_arr[] = $match_jobs_arr['id']; } } $intentiontrade = !empty($match_trade_id_arr) ? implode(',', $match_trade_id_arr) : ''; $districtarr = explode('、', $setsqlarr['district_cn']); $match_district_id_arr = array(); foreach ($districtarr as $key => $value) { $match_district_arr = match_district($value); if ($match_district_arr) { $match_district_id_arr[] = $match_district_arr['district'] . '.' . $match_district_arr['sdistrict']; } } $intentiondistrict = !empty($match_district_id_arr) ? implode(',', $match_district_id_arr) : ''; $match_current_arr = match_current($setsqlarr['current_cn']); if ($match_current_arr) { $setsqlarr['current'] = $match_current_arr['id']; $setsqlarr['current_cn'] = $match_current_arr['cn']; } $match_nature_arr = match_nature($setsqlarr['nature_cn']); if ($match_nature_arr) { $setsqlarr['nature'] = $match_nature_arr['id']; $setsqlarr['nature_cn'] = $match_nature_arr['cn']; } $match_wage_arr = match_wage($setsqlarr['wage_cn']); if ($match_wage_arr) { $setsqlarr['wage'] = $match_wage_arr['id']; $setsqlarr['wage_cn'] = $match_wage_arr['cn']; } $setsqlarr['refreshtime'] = $timestamp; $setsqlarr['audit'] = intval($_CFG['audit_resume']); $setsqlarr['resume_from_pc'] = 1; $setsqlarr['addtime'] = $timestamp; $pid = $db->inserttable(table('resume'), $setsqlarr, 1); if ($pid) { $searchtab['id'] = $pid; $searchtab['uid'] = $uid; $db->inserttable(table('resume_search_key'), $searchtab); $db->inserttable(table('resume_search_rtime'), $searchtab); add_resume_jobs($pid, $uid, $intention_jobs_id) ? "" : showmsg('保存失败!', 0); add_resume_district($pid, $uid, $intentiondistrict) ? "" : showmsg('保存失败!', 0); add_resume_trade($pid, $uid, $intentiontrade) ? "" : showmsg('保存失败!', 0); if (!get_userprofile($uid)) { $infoarr['realname'] = $setsqlarr['fullname']; $infoarr['sex'] = $setsqlarr['sex']; $infoarr['sex_cn'] = $setsqlarr['sex_cn']; $infoarr['birthday'] = $setsqlarr['birthdate']; $infoarr['residence'] = $setsqlarr['residence']; $infoarr['experience'] = $setsqlarr['experience']; $infoarr['experience_cn'] = $setsqlarr['experience_cn']; $infoarr['householdaddress'] = $setsqlarr['householdaddress']; $infoarr['marriage'] = $setsqlarr['marriage']; $infoarr['marriage_cn'] = $setsqlarr['marriage_cn']; $infoarr['phone'] = $setsqlarr['telephone']; $infoarr['email'] = $setsqlarr['email']; $infoarr['uid'] = intval($uid); $db->inserttable(table('members_info'), $infoarr); } //教育经历 if (!empty($info['eduinfo'])) { foreach ($info['eduinfo'] as $key => $value) { $eduarrsql = iconv_to_gbk($value); $eduarrsql['pid'] = $pid; $eduarrsql['uid'] = $uid; $match_education_arr = match_education($eduarrsql['education_cn']); if ($match_education_arr) { $eduarrsql['education'] = $match_education_arr['id']; $eduarrsql['education_cn'] = $match_education_arr['cn']; } $db->inserttable(table("resume_education"), $eduarrsql); } } //工作经历 if (!empty($info['workinfo'])) { foreach ($info['workinfo'] as $key => $value) { $workarrsql = iconv_to_gbk($value); $workarrsql['pid'] = $pid; $workarrsql['uid'] = $uid; $db->inserttable(table("resume_work"), $workarrsql); } } //培训经历 if (!empty($info['traininginfo'])) { foreach ($info['traininginfo'] as $key => $value) { $trainingarrsql = iconv_to_gbk($value); $trainingarrsql['pid'] = $pid; $trainingarrsql['uid'] = $uid; $db->inserttable(table("resume_training"), $trainingarrsql); } } //语言能力 if (!empty($info['languageinfo'])) { foreach ($info['languageinfo'] as $key => $value) { $languagearrsql = iconv_to_gbk($value); $languagearrsql['pid'] = $pid; $languagearrsql['uid'] = $uid; $match_language_arr = match_language($languagearrsql['language_cn']); if ($match_language_arr) { $languagearrsql['language'] = $match_language_arr['id']; $languagearrsql['language_cn'] = $match_language_arr['cn']; } $match_language_level_arr = match_language_level($languagearrsql['level_cn']); if ($match_language_level_arr) { $languagearrsql['level'] = $match_language_level_arr['id']; $languagearrsql['level_cn'] = $match_language_level_arr['cn']; } $db->inserttable(table("resume_language"), $languagearrsql); } } //证书 if (!empty($info['credentinfo'])) { foreach ($info['credentinfo'] as $key => $value) { $credentarrsql = iconv_to_gbk($value); $credentarrsql['pid'] = $pid; $credentarrsql['uid'] = $uid; $db->inserttable(table("resume_credent"), $credentarrsql); } } check_resume($uid, $pid); write_memberslog($uid, 2, 1101, $_SESSION['username'], "导入了简历"); return true; } else { return false; } } else { return false; } }
/** * Get all contrib links for the selected language. * This functions will be removed. */ function get_contrib_lang($contrib, $lang = 'en') { $ary = array(); foreach ($contrib as $element) { if (match_language($lang, $element['lang'])) { $ary[] = $element; } } return $ary; }